business_contact.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package proj
  2. import (
  3. "context"
  4. custDao "dashoo.cn/micro/app/dao/cust"
  5. projDao "dashoo.cn/micro/app/dao/proj"
  6. projModel "dashoo.cn/micro/app/model/proj"
  7. "dashoo.cn/micro/app/service"
  8. "dashoo.cn/opms_libary/myerrors"
  9. "github.com/gogf/gf/container/gset"
  10. "github.com/gogf/gf/database/gdb"
  11. "github.com/gogf/gf/frame/g"
  12. "github.com/gogf/gf/util/gconv"
  13. )
  14. type businessContactService struct {
  15. *service.ContextService
  16. Dao *projDao.ProjBusinessContactDao
  17. }
  18. func NewBusinessContactService(ctx context.Context) (svc *businessContactService, err error) {
  19. svc = new(businessContactService)
  20. if svc.ContextService, err = svc.Init(ctx); err != nil {
  21. return nil, err
  22. }
  23. svc.Dao = projDao.NewProjBusinessContactDao(svc.Tenant)
  24. return svc, nil
  25. }
  26. func (p *businessContactService) GetList(req *projModel.BusinessContactSearchReq) (total int, contactList []*projModel.BusinessContact, err error) {
  27. db := p.Dao.As("bus").LeftJoin(custDao.CustCustomerContact.Table, "contact", "bus.contact_id=contact.id").
  28. Where("bus."+p.Dao.C.BusId, req.BusId)
  29. if req.CuctId != 0 {
  30. db = db.Where("contact.cuct_id", req.CuctId)
  31. }
  32. if req.CuctName != "" {
  33. db = db.Where("contact.cuct_name", req.BusId)
  34. }
  35. total, err = db.Count()
  36. if err != nil {
  37. g.Log().Error(err)
  38. return
  39. }
  40. err = db.Fields("bus.*, contact.*,bus.id AS id").Page(req.GetPage()).Order("bus.id desc").Scan(&contactList)
  41. return
  42. }
  43. func (p *businessContactService) Create(req *projModel.BusinessContactReq) (err error) {
  44. dbContactIds, err := p.Dao.Where(p.Dao.C.BusId, req.BusId).Fields(p.Dao.C.ContactId).Array()
  45. if err != nil {
  46. g.Log().Error(err)
  47. return myerrors.DbError("查询项目联系人失败")
  48. }
  49. contactIds := gset.NewIntSetFrom(req.ContactIds, true)
  50. ids := gset.NewIntSetFrom(gconv.Ints(dbContactIds), true)
  51. contactIds = contactIds.Diff(ids)
  52. if contactIds.Size() == 0 {
  53. return myerrors.TipsError("该联系人已关联,请勿重复操作")
  54. }
  55. contactList := make([]*projModel.ProjBusinessContact, 0)
  56. for _, v := range contactIds.Slice() {
  57. data := new(projModel.ProjBusinessContact)
  58. data.BusId = req.BusId
  59. data.ContactId = v
  60. data.Remark = req.Remark
  61. service.SetCreatedInfo(data, p.GetCxtUserId(), p.GetCxtUserName())
  62. contactList = append(contactList, data)
  63. }
  64. b, _ := NewBusinessService(p.Ctx)
  65. err = p.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  66. _, err = p.Dao.Insert(&contactList)
  67. if err != nil {
  68. return err
  69. }
  70. // 添加项目动态
  71. dynamics := projModel.ProjBusinessDynamics{
  72. BusId: req.BusId,
  73. OpnType: OpnAssociation,
  74. }
  75. _, err = b.CreateProjBusinessDynamics(tx, dynamics, nil)
  76. return err
  77. })
  78. return
  79. }
  80. func (p *businessContactService) DeleteByIds(ids []int64) (err error) {
  81. result, err := p.Dao.Where(projDao.ProjBusinessContact.C.Id+" IN(?)", ids).One()
  82. if err != nil {
  83. return err
  84. }
  85. if result == nil {
  86. return myerrors.TipsError("联系人不存在")
  87. }
  88. b, _ := NewBusinessService(p.Ctx)
  89. err = p.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  90. _, err = p.Dao.WhereIn(projDao.ProjBusinessContact.C.Id, ids).Delete()
  91. if err != nil {
  92. return err
  93. }
  94. // 添加项目动态
  95. dynamics := projModel.ProjBusinessDynamics{
  96. BusId: result.BusId,
  97. OpnType: OpnDisassociation,
  98. }
  99. _, err = b.CreateProjBusinessDynamics(tx, dynamics, nil)
  100. return err
  101. })
  102. return
  103. }