check_sysmodel_ied_func_fcda.go 8.1 KB

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