| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package proj
- import (
- "context"
- custDao "dashoo.cn/micro/app/dao/cust"
- projDao "dashoo.cn/micro/app/dao/proj"
- projModel "dashoo.cn/micro/app/model/proj"
- "dashoo.cn/micro/app/service"
- "dashoo.cn/opms_libary/myerrors"
- "github.com/gogf/gf/container/gset"
- "github.com/gogf/gf/database/gdb"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/util/gconv"
- )
- type businessContactService struct {
- *service.ContextService
- Dao *projDao.ProjBusinessContactDao
- }
- func NewBusinessContactService(ctx context.Context) (svc *businessContactService, err error) {
- svc = new(businessContactService)
- if svc.ContextService, err = svc.Init(ctx); err != nil {
- return nil, err
- }
- svc.Dao = projDao.NewProjBusinessContactDao(svc.Tenant)
- return svc, nil
- }
- func (p *businessContactService) GetList(req *projModel.BusinessContactSearchReq) (total int, contactList []*projModel.BusinessContact, err error) {
- db := p.Dao.As("bus").LeftJoin(custDao.CustCustomerContact.Table, "contact", "bus.contact_id=contact.id").
- Where("bus."+p.Dao.C.BusId, req.BusId)
- if req.CuctId != 0 {
- db = db.Where("contact.cuct_id", req.CuctId)
- }
- if req.CuctName != "" {
- db = db.Where("contact.cuct_name", req.BusId)
- }
- total, err = db.Count()
- if err != nil {
- g.Log().Error(err)
- return
- }
- err = db.Fields("bus.*, contact.*,bus.id AS id").Page(req.GetPage()).Order("bus.id desc").Scan(&contactList)
- return
- }
- func (p *businessContactService) Create(req *projModel.BusinessContactReq) (err error) {
- dbContactIds, err := p.Dao.Where(p.Dao.C.BusId, req.BusId).Fields(p.Dao.C.ContactId).Array()
- if err != nil {
- g.Log().Error(err)
- return myerrors.DbError("查询项目联系人失败")
- }
- contactIds := gset.NewIntSetFrom(req.ContactIds, true)
- ids := gset.NewIntSetFrom(gconv.Ints(dbContactIds), true)
- contactIds = contactIds.Diff(ids)
- if contactIds.Size() == 0 {
- return myerrors.TipsError("该联系人已关联,请勿重复操作")
- }
- contactList := make([]*projModel.ProjBusinessContact, 0)
- for _, v := range contactIds.Slice() {
- data := new(projModel.ProjBusinessContact)
- data.BusId = req.BusId
- data.ContactId = v
- data.Remark = req.Remark
- service.SetCreatedInfo(data, p.GetCxtUserId(), p.GetCxtUserName())
- contactList = append(contactList, data)
- }
- b, _ := NewBusinessService(p.Ctx)
- err = p.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
- _, err = p.Dao.Insert(&contactList)
- if err != nil {
- return err
- }
- // 添加项目动态
- dynamics := projModel.ProjBusinessDynamics{
- BusId: req.BusId,
- OpnType: OpnAssociation,
- }
- _, err = b.CreateProjBusinessDynamics(tx, dynamics, nil)
- return err
- })
- return
- }
- func (p *businessContactService) DeleteByIds(ids []int64) (err error) {
- result, err := p.Dao.Where(projDao.ProjBusinessContact.C.Id+" IN(?)", ids).One()
- if err != nil {
- return err
- }
- if result == nil {
- return myerrors.TipsError("联系人不存在")
- }
- b, _ := NewBusinessService(p.Ctx)
- err = p.Dao.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
- _, err = p.Dao.WhereIn(projDao.ProjBusinessContact.C.Id, ids).Delete()
- if err != nil {
- return err
- }
- // 添加项目动态
- dynamics := projModel.ProjBusinessDynamics{
- BusId: result.BusId,
- OpnType: OpnDisassociation,
- }
- _, err = b.CreateProjBusinessDynamics(tx, dynamics, nil)
- return err
- })
- return
- }
|