package bo import ( "errors" "fmt" "scd_check_tools/logger" "scd_check_tools/models/enum" "scd_check_tools/tools" "strconv" "github.com/astaxie/beego/orm" ) //系统内置模型-装置功能点端子管理 type T_data_model_func_fcda struct { Id int `orm:"pk"` ModelId int // '模型ID' , FuncId int // '功能ID', FcdaName string // 端子设计名称 FcdaMatchExp string // 端子匹配表达式 Cr int // '创建人' , Ct string `orm:"-"` // '创建时间' , Ur int // '更新人' , Ut string `orm:"-"` // '更新时间' } //内置检测模型-装置功能点端子管理 type SysCheckModelIedFuncFcdaMgr struct { Model T_data_model_func_fcda DeviceBaseModel } var sysCheckModel_iedFuncFcdaDesc = "内置检测模型-装置功能点端子管理" func init() { orm.RegisterModel(new(T_data_model_func_fcda)) } //保存检测模型装置功能信息 func (c *SysCheckModelIedFuncFcdaMgr) Save() (err error) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_check_model dblog.Logtype = enum.LogType_Insert dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Hight db := orm.NewOrm() hasName, err := c.Exist() if err != nil { return err } if hasName { return errors.New("端子名称已存在") } if c.Model.Id > 0 { //编辑 _, err = db.Update(&c.Model) } else { //新增 _, err = db.Insert(&c.Model) } if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("保存%s信息失败:%s,操作数据:%+v", sysCheckModel_iedFuncFcdaDesc, err.Error(), c.Model) dblog.Fail2() } else { dblog.Description = fmt.Sprintf("保存%s信息成功,操作数据:%+v", sysCheckModel_iedFuncFcdaDesc, c.Model) dblog.Success2() } return err } func (c *SysCheckModelIedFuncFcdaMgr) Exist() (bool, error) { db := orm.NewOrm() if c.Model.FcdaName == "" { return false, errors.New("端子设计名称不能为空") } rowset := []orm.Params{} _, err := db.Raw("select id from t_data_model_func_fcda where model_id=? and func_id=? and fcda_name=?", c.Model.ModelId, c.Model.FuncId, c.Model.FcdaName).Values(&rowset) if len(rowset) > 0 { if tools.IsEmpty(c.Model.Id) != tools.IsEmpty(rowset[0]["id"]) { //端子名称重复 return true, nil } else { return false, nil } } return false, err } func (c *SysCheckModelIedFuncFcdaMgr) Copy(oldFuncId, newModelId, newFuncId int) error { db := orm.NewOrm() rowset := []orm.Params{} db.Raw("select * from t_data_model_func_fcda where model_id=? and func_id=?", c.Model.ModelId, oldFuncId).Values(&rowset) for _, row := range rowset { oldFcdaId, _ := strconv.Atoi(tools.IsEmpty(row["id"])) //复制端子数据 newFcda := T_data_model_func_fcda{ ModelId: newModelId, FuncId: newFuncId, FcdaName: tools.IsEmpty(row["fcda_name"]), FcdaMatchExp: tools.IsEmpty(row["fcda_match_exp"]), } newid, err := db.Insert(&newFcda) if err != nil { logger.Logger.Error(err) return err } db.Raw("update t_data_model_fcda_ref set from_func_id=?,from_fcda_id=? where model_id=? and from_func_id=? and from_fcda_id=?", newFuncId, newid, newModelId, oldFuncId, oldFcdaId).Exec() db.Raw("update t_data_model_fcda_ref set to_func_id=?,to_fcda_id=? where model_id=? and to_func_id=? and to_fcda_id=?", newFuncId, newid, newModelId, oldFuncId, oldFcdaId).Exec() } return nil } //根据model中指定的id删除 func (c *SysCheckModelIedFuncFcdaMgr) Delete() (err error) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_check_model dblog.Logtype = enum.LogType_Delete dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Hight db := orm.NewOrm() one := T_data_model_func_fcda{Id: c.Model.Id} if c.Model.Id > 0 { db.Read(&one) _, err = db.Raw("delete from t_data_model_func_fcda where id=?", c.Model.Id).Exec() } else if c.Model.FuncId > 0 { _, err = db.Raw("delete from t_data_model_func_fcda where model_id=? and func_id=?", c.Model.ModelId, c.Model.FuncId).Exec() } else { _, err = db.Raw("delete from t_data_model_func_fcda where model_id=? ", c.Model.ModelId).Exec() } if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("删除%s(%d)失败:%s", sysCheckModel_iedFuncFcdaDesc, c.Model.ModelId, err.Error()) dblog.Fail2() } else { fcdaMgr := new(SysCheckModelFcdaRalationMgr) fcdaMgr.Model = T_data_model_fcda_ref{ModelId: c.Model.ModelId} if c.Model.Id > 0 { fcdaMgr.Model.FromFcdaId = c.Model.Id } else if c.Model.FuncId > 0 { fcdaMgr.Model.FromFuncId = c.Model.FuncId } fcdaMgr.Delete() dblog.Description = fmt.Sprintf("删除%s(%d)成功", sysCheckModel_iedFuncFcdaDesc, c.Model.ModelId) dblog.Success2() if c.Model.Id > 0 { //判断端子是否全部删除 if one.FuncId > 0 { c.Model.ModelId = one.ModelId c.Model.FuncId = one.FuncId r, _ := c.GetList() if len(r) == 0 { //删除功能定义数据 funcMgr := new(SysCheckModelIedFuncMgr) funcMgr.Model.Id = one.FuncId funcMgr.Delete() } } } } return err } func (c *SysCheckModelIedFuncFcdaMgr) One(id int) (T_data_model_func_fcda, error) { tmp := T_data_model_func_fcda{Id: id} db := orm.NewOrm() err := db.Read(&tmp) return tmp, err } func (c *SysCheckModelIedFuncFcdaMgr) GetList() ([]orm.Params, error) { o := orm.NewOrm() sqlParamters := []interface{}{c.Model.ModelId, c.Model.FuncId} sql := "select t.*,t1.func_name from t_data_model_func_fcda t,t_data_model_func_def t1 where t1.id=t.func_id and t.model_id=? and t.func_id=?" rowset := []orm.Params{} _, err := o.Raw(sql, sqlParamters).Values(&rowset) if err != nil { logger.Logger.Error(err) } return rowset, err }