package bo import ( "errors" "fmt" "scd_check_tools/logger" "scd_check_tools/models/enum" "scd_check_tools/tools" "strconv" "strings" "github.com/astaxie/beego/orm" ) //接线方式模型 type T_data_link_style struct { Id int `orm:"pk"` VolLevelId int // '电压等级ID' , Name string // 名称 Pic string // '方式图路径' , Cr int // '创建人' , Ct string `orm:"-"` // '创建时间' , Ur int // '更新人' , Ut string `orm:"-"` // '更新时间' } //接线方式管理对象 type LinkStyleMgr struct { Model T_data_link_style DeviceBaseModel } var linkstyle_modelDesc = "接线方式" func init() { orm.RegisterModel(new(T_data_link_style)) } func (c *LinkStyleMgr) Exist() (int, bool) { db := orm.NewOrm() rowset := []orm.Params{} _, err := db.Raw("select id from t_data_link_style where vol_level_id=? and name=?", c.Model.VolLevelId, c.Model.Name).Values(&rowset) if err != nil { logger.Logger.Error(err) return 0, true } if len(rowset) > 0 { id, _ := strconv.Atoi(tools.IsEmpty(rowset[0]["id"])) if c.Model.Id > 0 && c.Model.Id == id { //发现名称与当前数据记录的相同,判定为不重复 return id, false } return id, true } else { return 0, false } } //保存接线方式信息 func (c *LinkStyleMgr) Save() (err error) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_link_style dblog.Logtype = enum.LogType_Insert dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Hight _, same := c.Exist() if same { //发现名称有相同 的 return errors.New(fmt.Sprintf("在所选电压等级下接线方式[%s]已存在", c.Model.Name)) } db := orm.NewOrm() c.Model.Cr, _ = strconv.Atoi(c.GetUserId()) if c.Model.Id == 0 { _, err = db.Insert(&c.Model) } else { _, err = db.Update(&c.Model) } if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("保存%s信息失败:%s,操作数据:%+v", linkstyle_modelDesc, err.Error(), c.Model) dblog.Fail2() } else { dblog.Description = fmt.Sprintf("保存%s信息成功,操作数据:%+v", linkstyle_modelDesc, c.Model) dblog.Success2() } return err } func (c *LinkStyleMgr) One() (T_data_link_style, error) { if c.Model.Id == 0 { return c.Model, errors.New("未指定id") } o := orm.NewOrm() err := o.Read(&c.Model) if err != nil { logger.Logger.Error(err) } return c.Model, err } //根据接线方式中指定的id删除检测任务 func (c *LinkStyleMgr) Delete() (err error) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_link_style 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 err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("删除%s%s失败:%s", linkstyle_modelDesc, c.Model.Name, err.Error()) dblog.Fail2() } else { //同步清除关联的模型 lsm := new(LinkStyleModelMgr) lsm.Model.LinkstyleId = c.Model.Id lsm.Delete() dblog.Description = fmt.Sprintf("删除%s%s成功", linkstyle_modelDesc, c.Model.Name) dblog.Success2() } return err } //根据接线方式中的指定过滤属性条件查询列表 func (c *LinkStyleMgr) List(pageno, pagesize int) ([]orm.Params, int, error) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_link_style dblog.Logtype = enum.LogType_Query dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Low o := orm.NewOrm() sqlParamters := []interface{}{} sql := "select t.*,t1.name vol_level_name from t_data_link_style t left join global_const_code t1 on t.vol_level_id=t1.id where 1=1 " if c.Model.Id > 0 { sql += " and t.id=?" sqlParamters = append(sqlParamters, c.Model.Id) } if c.Model.VolLevelId > 0 { sql += " and t.vol_level_id=?" sqlParamters = append(sqlParamters, c.Model.VolLevelId) } limit := fmt.Sprintf(" order by t.id desc limit %d,%d", (pageno-1)*pagesize, pagesize) r := []orm.Params{} _, err := o.Raw(sql+limit, sqlParamters).Values(&r) dblog.Description = fmt.Sprintf("SQL:%s 参数:%+v", sql+limit, sqlParamters) if err != nil { logger.Logger.Error(err, dblog.Description) dblog.Fail2() return nil, 0, err } dblog.Success2() total := []orm.Params{} _, err = o.Raw(strings.Replace(sql, "t.*,t1.name vol_level_name", "count(1) cnt", 1), sqlParamters).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 r, totalCnt, err }