linkStrategyLogic.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package logic
  2. import (
  3. "errors"
  4. "fmt"
  5. "git.rtzhtech.cn/iss/public-lib/dao"
  6. "git.rtzhtech.cn/iss/public-lib/dto"
  7. "git.rtzhtech.cn/iss/public-lib/model"
  8. "git.rtzhtech.cn/iss/public-lib/svc"
  9. "github.com/gogf/gf/v2/util/gconv"
  10. "gorm.io/gen/field"
  11. )
  12. type LinkStrategyLogic struct {
  13. SvcCtx *svc.ServiceContext
  14. }
  15. // NewLinkStrategyLogic
  16. // @Description: 联动策略
  17. // @return *LinkStrategyLogic
  18. func NewLinkStrategyLogic() *LinkStrategyLogic {
  19. return &LinkStrategyLogic{
  20. SvcCtx: svc.SvcCtx,
  21. }
  22. }
  23. // AddLinkStrategy
  24. // @Description: 添加
  25. // @receiver l
  26. // @param in
  27. // @return error
  28. func (l *LinkStrategyLogic) AddLinkStrategy(in *dto.AddLinkStrategyRes) error {
  29. in.LinkStrategy.ID = 0
  30. err := l.SvcCtx.LinkStrategy.Create(&in.LinkStrategy)
  31. if err != nil {
  32. return err
  33. }
  34. return l.addRelation(in)
  35. }
  36. // addRelation
  37. // @Description: 添加关联表
  38. // @receiver l
  39. // @param in
  40. // @return error
  41. func (l *LinkStrategyLogic) addRelation(in *dto.AddLinkStrategyRes) error {
  42. for i := 0; i < len(in.Src); i++ {
  43. in.Src[i].ID = 0
  44. in.Src[i].Strategyid = in.Strategyid
  45. }
  46. err := l.SvcCtx.LinkRelationObj.CreateInBatches(in.Src, len(in.Src))
  47. if err != nil {
  48. return err
  49. }
  50. for i := 0; i < len(in.Dst); i++ {
  51. in.Dst[i].ID = 0
  52. in.Dst[i].Strategyid = in.Strategyid
  53. }
  54. err = l.SvcCtx.LinkRelationAction.CreateInBatches(in.Dst, len(in.Dst))
  55. return err
  56. }
  57. // DelLinkStrategy
  58. // @Description: 删除
  59. // @receiver l
  60. // @param id
  61. // @return error
  62. func (l *LinkStrategyLogic) DelLinkStrategy(strategyId int64) error {
  63. do := l.SvcCtx.LinkStrategy
  64. _, err := do.Where(do.Strategyid.Eq(strategyId)).Delete()
  65. if err != nil {
  66. return err
  67. }
  68. return l.delRelation(strategyId)
  69. }
  70. // delRelation
  71. // @Description: 删除关联表
  72. // @receiver l
  73. // @param strategyId
  74. // @return error
  75. func (l *LinkStrategyLogic) delRelation(strategyId int64) error {
  76. _, err := l.SvcCtx.LinkRelationObj.Where(l.SvcCtx.LinkRelationObj.Strategyid.Eq(strategyId)).Delete()
  77. if err != nil {
  78. return err
  79. }
  80. _, err = l.SvcCtx.LinkRelationAction.Where(l.SvcCtx.LinkRelationAction.Strategyid.Eq(strategyId)).Delete()
  81. return err
  82. }
  83. // ModifyLinkStrategy
  84. // @Description: 修改
  85. // @receiver l
  86. // @param in 可修改除策略ID和APP id外的信息
  87. // @param fields 更新linkStrategy字段,当field为null时,更新in的全部字段
  88. // @return error
  89. func (l *LinkStrategyLogic) ModifyLinkStrategy(in *dto.AddLinkStrategyRes, fields ...string) error {
  90. do := l.SvcCtx.LinkStrategy
  91. _do := do.Omit(do.ID, do.Strategyid, do.Appid).Where(do.Strategyid.Eq(in.Strategyid))
  92. c, err := _do.Count()
  93. if c < 1 {
  94. return errors.New(fmt.Sprintf("not find,strategyId:%v", in.Strategyid))
  95. }
  96. if fields == nil {
  97. m := gconv.Map(in.LinkStrategy)
  98. _, err = _do.Updates(m)
  99. } else {
  100. var fieldList []field.Expr
  101. for _, v := range fields {
  102. _f, ok := do.GetFieldByName(v)
  103. if ok {
  104. fieldList = append(fieldList, _f)
  105. }
  106. }
  107. _, err = _do.Select(fieldList...).Updates(in.LinkStrategy)
  108. }
  109. if err != nil {
  110. return err
  111. }
  112. err = l.delRelation(in.Strategyid)
  113. if err != nil {
  114. return err
  115. }
  116. err = l.addRelation(in)
  117. return err
  118. }
  119. func (l *LinkStrategyLogic) getLinkStrategyCond(req *dto.GetLinkStrategyReq) *dao.Condition {
  120. strategy := l.SvcCtx.LinkStrategy
  121. cond := NewCondition(&req.LimitPage)
  122. if req.StrategyId > 0 {
  123. cond.Where[strategy.Strategyid.String()] = req.StrategyId
  124. }
  125. if req.AppId > 0 {
  126. cond.Where[strategy.Appid.String()] = req.AppId
  127. }
  128. if req.StrategyName != "" {
  129. cond.Where[strategy.Strategyname.String()+" like ?"] = "%" + req.StrategyName + "%"
  130. }
  131. return cond
  132. }
  133. // GetLinkStrategy
  134. // @Description: 分页查询
  135. // @receiver l
  136. // @param where 查询条件
  137. // @param page
  138. // @param limit
  139. // @return []*model.LinkStrategy
  140. // @return error
  141. func (l *LinkStrategyLogic) GetLinkStrategy(req *dto.GetLinkStrategyReq) (*dto.GetLinkStrategyResp, error) {
  142. ctx := l.SvcCtx
  143. strategy := l.SvcCtx.LinkStrategy
  144. var linkStrategyList []*model.LinkStrategy
  145. cond := l.getLinkStrategyCond(req)
  146. err := strategy.Base.Find(cond, &linkStrategyList)
  147. if err != nil {
  148. return nil, err
  149. }
  150. resp := &dto.GetLinkStrategyResp{}
  151. err = strategy.Base.Count(cond, &resp.Total)
  152. if err != nil {
  153. return nil, err
  154. }
  155. for _, v := range linkStrategyList {
  156. var o dto.LinkStrategyDto
  157. o.LinkStrategy = *v
  158. tmpFormList, err := ctx.LinkRelationObj.Where(ctx.LinkRelationObj.Strategyid.Eq(v.Strategyid)).Find()
  159. if err != nil {
  160. return nil, err
  161. }
  162. for _, v2 := range tmpFormList {
  163. src := &dto.LinkStrategySrc{}
  164. src.Value = v2.Value
  165. src.Than = v2.Than
  166. src.Relation = v2.Relation
  167. devMpinfo, err := ctx.DevMpinfo.Where(ctx.DevMpinfo.Mpid.Eq(v2.Linkfromid)).Last()
  168. if err != nil {
  169. return nil, err
  170. }
  171. src.DevMpinfo = *devMpinfo
  172. o.Src = append(o.Src, src)
  173. }
  174. tmpDst := map[int64]*dto.LinkStrategyDst{}
  175. tmpToList, err := ctx.LinkRelationAction.Where(ctx.LinkRelationAction.Strategyid.Eq(v.Strategyid)).Find()
  176. for _, v3 := range tmpToList {
  177. dst, ok := tmpDst[v3.Linktoid]
  178. if !ok {
  179. dst = &dto.LinkStrategyDst{}
  180. tmpDst[v3.Linktoid] = dst
  181. devCpinfo, err := ctx.DevCpinfo.Where(ctx.DevCpinfo.Cpid.Eq(v3.Linktoid)).Last()
  182. if err != nil {
  183. return nil, err
  184. }
  185. dst.DevCpinfo = *devCpinfo
  186. }
  187. devCpaction, err := ctx.DevCpaction.Where(ctx.DevCpaction.Actid.Eq(v3.Actid)).Last()
  188. if err != nil {
  189. return nil, err
  190. }
  191. linkAction := dto.LinkAction{}
  192. linkAction.DevCpaction = *devCpaction
  193. linkAction.ActIndex = v3.Actindex
  194. linkAction.Delay = v3.Delay
  195. dst.Action = append(dst.Action, &linkAction)
  196. }
  197. for _, v4 := range tmpDst {
  198. o.Dst = append(o.Dst, v4)
  199. }
  200. resp.List = append(resp.List, &o)
  201. }
  202. return resp, err
  203. }
  204. // GetLinkStrategyCount
  205. // @Description:查询满足条件的总数
  206. // @receiver l
  207. // @param where 查询条件
  208. // @return int64
  209. // @return error
  210. func (l *LinkStrategyLogic) GetLinkStrategyCount(req *dto.GetLinkStrategyReq) (int64, error) {
  211. cond := l.getLinkStrategyCond(req)
  212. var count int64
  213. err := l.SvcCtx.LinkStrategy.Base.Count(cond, &count)
  214. if err != nil {
  215. return 0, err
  216. }
  217. return count, err
  218. }