check_sysmodel_ied_func_fcda.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package bo
  2. import (
  3. "errors"
  4. "fmt"
  5. "scd_check_tools/logger"
  6. "scd_check_tools/models/enum"
  7. "scd_check_tools/tools"
  8. "strconv"
  9. "github.com/astaxie/beego/orm"
  10. )
  11. //系统内置模型-装置功能点端子管理
  12. type T_data_model_func_fcda struct {
  13. Id int `orm:"pk"`
  14. ModelId int // '模型ID' ,
  15. FuncId int // '功能ID',
  16. FcdaName string // 端子设计名称
  17. FcdaMatchExp string // 端子匹配表达式
  18. Svorgoose string
  19. Inorout string
  20. Cr int // '创建人' ,
  21. Ct string `orm:"-"` // '创建时间' ,
  22. Ur int // '更新人' ,
  23. Ut string `orm:"-"` // '更新时间'
  24. }
  25. //内置检测模型-装置功能点端子管理
  26. type SysCheckModelIedFuncFcdaMgr struct {
  27. Model T_data_model_func_fcda
  28. DeviceBaseModel
  29. }
  30. var sysCheckModel_iedFuncFcdaDesc = "内置检测模型-装置功能点端子管理"
  31. func init() {
  32. orm.RegisterModel(new(T_data_model_func_fcda))
  33. }
  34. //保存检测模型装置功能信息
  35. func (c *SysCheckModelIedFuncFcdaMgr) Save() (err error) {
  36. dblog := new(SystemLog)
  37. dblog.SetUserInfo(c.GetUserInfo())
  38. dblog.Audittype = enum.AuditType_check_model
  39. dblog.Logtype = enum.LogType_Insert
  40. dblog.Eventtype = enum.OptEventType_Bus
  41. dblog.Eventlevel = enum.OptEventLevel_Hight
  42. db := orm.NewOrm()
  43. hasName, _, err := c.Exist()
  44. if err != nil {
  45. return err
  46. }
  47. if hasName {
  48. return errors.New("端子名称[" + c.Model.FcdaName + "]已存在")
  49. }
  50. if c.Model.Id > 0 {
  51. //编辑
  52. _, err = db.Update(&c.Model)
  53. } else {
  54. //新增
  55. _, err = db.Insert(&c.Model)
  56. }
  57. if err != nil {
  58. logger.Logger.Error(err)
  59. dblog.Description = fmt.Sprintf("保存%s信息失败:%s,操作数据:%+v", sysCheckModel_iedFuncFcdaDesc, err.Error(), c.Model)
  60. dblog.Fail2()
  61. } else {
  62. dblog.Description = fmt.Sprintf("保存%s信息成功,操作数据:%+v", sysCheckModel_iedFuncFcdaDesc, c.Model)
  63. dblog.Success2()
  64. }
  65. return err
  66. }
  67. func (c *SysCheckModelIedFuncFcdaMgr) Exist() (bool, int, error) {
  68. db := orm.NewOrm()
  69. if c.Model.FcdaName == "" {
  70. return false, 0, errors.New("端子设计名称不能为空")
  71. }
  72. rowset := []orm.Params{}
  73. _, 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)
  74. if len(rowset) > 0 {
  75. findId := tools.IsEmpty(rowset[0]["id"])
  76. findIdint, _ := strconv.Atoi(findId)
  77. if tools.IsEmpty(c.Model.Id) != findId {
  78. //端子名称重复
  79. return true, c.Model.Id, nil
  80. } else {
  81. return false, findIdint, nil
  82. }
  83. }
  84. return false, 0, err
  85. }
  86. func (c *SysCheckModelIedFuncFcdaMgr) Copy(oldFuncId, newModelId, newFuncId int) error {
  87. db := orm.NewOrm()
  88. rowset := []orm.Params{}
  89. db.Raw("select * from t_data_model_func_fcda where model_id=? and func_id=?", c.Model.ModelId, oldFuncId).Values(&rowset)
  90. for _, row := range rowset {
  91. oldFcdaId, _ := strconv.Atoi(tools.IsEmpty(row["id"]))
  92. //复制端子数据
  93. newFcda := T_data_model_func_fcda{
  94. ModelId: newModelId,
  95. FuncId: newFuncId,
  96. FcdaName: tools.IsEmpty(row["fcda_name"]),
  97. FcdaMatchExp: tools.IsEmpty(row["fcda_match_exp"]),
  98. Svorgoose: tools.IsEmpty(row["svorgoose"]),
  99. Inorout: tools.IsEmpty(row["inorout"]),
  100. }
  101. newid, err := db.Insert(&newFcda)
  102. if err != nil {
  103. logger.Logger.Error(err)
  104. return err
  105. }
  106. 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()
  107. 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()
  108. }
  109. return nil
  110. }
  111. //根据model中指定的id删除
  112. func (c *SysCheckModelIedFuncFcdaMgr) Delete() (err error) {
  113. dblog := new(SystemLog)
  114. dblog.SetUserInfo(c.GetUserInfo())
  115. dblog.Audittype = enum.AuditType_check_model
  116. dblog.Logtype = enum.LogType_Delete
  117. dblog.Eventtype = enum.OptEventType_Bus
  118. dblog.Eventlevel = enum.OptEventLevel_Hight
  119. db := orm.NewOrm()
  120. one := T_data_model_func_fcda{Id: c.Model.Id}
  121. if c.Model.Id > 0 {
  122. db.Read(&one)
  123. _, err = db.Raw("delete from t_data_model_func_fcda where id=?", c.Model.Id).Exec()
  124. } else if c.Model.FuncId > 0 {
  125. _, err = db.Raw("delete from t_data_model_func_fcda where model_id=? and func_id=?", c.Model.ModelId, c.Model.FuncId).Exec()
  126. } else {
  127. _, err = db.Raw("delete from t_data_model_func_fcda where model_id=? ", c.Model.ModelId).Exec()
  128. }
  129. if err != nil {
  130. logger.Logger.Error(err)
  131. dblog.Description = fmt.Sprintf("删除%s(%d)失败:%s", sysCheckModel_iedFuncFcdaDesc, c.Model.ModelId, err.Error())
  132. dblog.Fail2()
  133. } else {
  134. fcdaMgr := new(SysCheckModelFcdaRalationMgr)
  135. fcdaMgr.Model = T_data_model_fcda_ref{ModelId: c.Model.ModelId}
  136. if c.Model.Id > 0 {
  137. fcdaMgr.Model.FromFcdaId = c.Model.Id
  138. } else if c.Model.FuncId > 0 {
  139. fcdaMgr.Model.FromFuncId = c.Model.FuncId
  140. }
  141. fcdaMgr.Delete()
  142. dblog.Description = fmt.Sprintf("删除%s(%d)成功", sysCheckModel_iedFuncFcdaDesc, c.Model.ModelId)
  143. dblog.Success2()
  144. if c.Model.Id > 0 {
  145. //判断端子是否全部删除
  146. if one.FuncId > 0 {
  147. c.Model.ModelId = one.ModelId
  148. c.Model.FuncId = one.FuncId
  149. r, _ := c.GetList()
  150. if len(r) == 0 {
  151. //删除功能定义数据
  152. funcMgr := new(SysCheckModelIedFuncMgr)
  153. funcMgr.Model.Id = one.FuncId
  154. funcMgr.Delete()
  155. }
  156. }
  157. } else if c.Model.FuncId > 0 {
  158. funcMgr := new(SysCheckModelIedFuncMgr)
  159. funcMgr.Model.Id = c.Model.FuncId
  160. funcMgr.Delete()
  161. } else {
  162. funcMgr := new(SysCheckModelIedFuncMgr)
  163. funcMgr.Model.ModelId = c.Model.ModelId
  164. funcMgr.Delete()
  165. }
  166. }
  167. return err
  168. }
  169. func (c *SysCheckModelIedFuncFcdaMgr) One(id int) (T_data_model_func_fcda, error) {
  170. tmp := T_data_model_func_fcda{Id: id}
  171. db := orm.NewOrm()
  172. err := db.Read(&tmp)
  173. return tmp, err
  174. }
  175. func (c *SysCheckModelIedFuncFcdaMgr) GetList() ([]orm.Params, error) {
  176. o := orm.NewOrm()
  177. sqlParamters := []interface{}{c.Model.ModelId}
  178. outsql := ""
  179. if c.Model.Inorout == "接收" {
  180. outsql = ",(select id from t_data_model_fcda_ref where model_id=? and to_fcda_id=t.id) from_fcda_id"
  181. sqlParamters = append(sqlParamters, c.Model.ModelId)
  182. }
  183. sql := "select t.*,t1.func_name" + outsql + " from t_data_model_func_fcda t,t_data_model_func_def t1 where t1.id=t.func_id and t.model_id=? "
  184. if c.Model.FuncId > 0 {
  185. sql = sql + " and t.func_id=?"
  186. sqlParamters = append(sqlParamters, c.Model.FuncId)
  187. }
  188. if c.Model.Svorgoose != "" {
  189. sql = sql + " and t.svorgoose=?"
  190. sqlParamters = append(sqlParamters, c.Model.Svorgoose)
  191. }
  192. if c.Model.Inorout != "" {
  193. sql = sql + " and t.inorout=?"
  194. sqlParamters = append(sqlParamters, c.Model.Inorout)
  195. }
  196. sql = sql + " order by t.id"
  197. rowset := []orm.Params{}
  198. _, err := o.Raw(sql, sqlParamters).Values(&rowset)
  199. if err != nil {
  200. logger.Logger.Error(err)
  201. }
  202. return rowset, err
  203. }