| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package base
- import (
- "context"
- "fmt"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/os/gtime"
- "github.com/gogf/gf/util/gconv"
- "strconv"
- "dashoo.cn/micro/app/dao/base"
- model "dashoo.cn/micro/app/model/base"
- "dashoo.cn/micro/app/service"
- )
- type salesRegionService struct {
- *service.ContextService
- Dao *base.BaseSalesRegionDao
- Detail *base.BaseSalesRegionDetailDao
- }
- func NewSalesRegionService(ctx context.Context) (svc *salesRegionService, err error) {
- svc = new(salesRegionService)
- if svc.ContextService, err = svc.Init(ctx); err != nil {
- return nil, err
- }
- svc.Dao = base.NewBaseSalesRegionDao(svc.Tenant)
- svc.Detail = base.NewBaseSalesRegionDetailDao(svc.Tenant)
- return svc, nil
- }
- // Create 创建区域
- func (s *salesRegionService) Create(req *model.AddRegionReq) (err error) {
- regionData := new(model.BaseSalesRegion)
- if err = gconv.Struct(req, regionData); err != nil {
- return
- }
- service.SetCreatedInfo(regionData, s.GetCxtUserId(), s.GetCxtUserName())
- regionData.RegionCode = strconv.Itoa(int(gtime.Timestamp()))
- _, err = s.Dao.Insert(regionData)
- if err != nil {
- g.Log().Error(err)
- return
- }
- return nil
- }
- // GetRegionList 获取区域
- func (s *salesRegionService) GetRegionList() (RegionList []*model.Region, err error) {
- err = s.Dao.Order("id asc").Scan(&RegionList)
- if err != nil {
- g.Log().Error(err)
- return
- }
- return
- }
- // GetRegionTree 获取大区及下属地区
- func (s *salesRegionService) GetRegionTree(req *model.RegionTreeReq) (regionList []*model.Region, err error) {
- where1 := ""
- where2 := ""
- if req.IsPermission == "1" {
- // 系统管理员、总经理、销售总监、销售助理看到所有区域
- if service.StringsContains(s.CxtUser.Roles, "GeneralManager") || service.StringsContains(s.CxtUser.Roles, "SalesDirector") || service.StringsContains(s.CxtUser.Roles, "SaleAssociate") || service.StringsContains(s.CxtUser.Roles, "SysAdmin") {
- // 无条件,查询全部
- } else {
- // 大区经理:看到大区及所负责的其他区域;销售工程师:看到所负责的区域
- if data, ok := s.CxtUser.DataScope["cust_city_id"]; ok {
- if data != nil {
- idArr := data.([]interface{})
- ids := "-1"
- for _, id := range idArr {
- ids += "," + gconv.String(id)
- }
- where2 = fmt.Sprintf("cust_city_id IN (%v)", ids)
- }
- }
- }
- }
- detailDao := base.NewBaseSalesRegionDetailDao(s.Tenant)
- regionDetailsList := ([]*model.District)(nil)
- err = detailDao.Where(where2).Fields("region_id, cust_province_id as regionCode, cust_province as regionDesc").Group("cust_province_id").
- OrderAsc(detailDao.C.RegionId).Scan(®ionDetailsList)
- if err != nil {
- return
- }
- regionMap := make(map[int]int, 0)
- regionIds := "-1"
- for _, detail := range regionDetailsList {
- if _, ok := regionMap[detail.RegionId]; !ok {
- regionMap[detail.RegionId] = 1
- regionIds += "," + gconv.String(detail.RegionId)
- }
- }
- where1 += fmt.Sprintf("id IN (%v)", regionIds)
- err = s.Dao.Order("created_time asc").Where(where1).Scan(®ionList)
- if err != nil {
- return
- }
- for _, item := range regionList {
- item.Children = make([]*model.District, 0)
- for _, v := range regionDetailsList {
- if item.Id == v.RegionId {
- item.Children = append(item.Children, v)
- }
- }
- }
- return
- }
|