Browse Source

fix(数据权限): 交付工单、支持工单数据权限功能优化

lk 2 years ago
parent
commit
af42eb15e4

+ 40 - 29
opms_parent/app/service/work/deliver_order.go

@@ -130,42 +130,53 @@ func (s DeliverOrderService) List(ctx context.Context, req *work.DeliverOrderLis
 	g.Log().Infof("DeliverOrderService List roles %v", s.userInfo.Roles)
 	//dao := s.Dao.DeliverOrderDao.As("a").LeftJoin("ctr_contract b", "a.contract_id=b.id").Unscoped().Where("a.deleted_time is null") // 改为关联项目
 	dao := s.Dao.DeliverOrderDao.As("a").LeftJoin("proj_business b", "a.project_id=b.id").LeftJoin("deliver_order_product p", "p.deliver_order_id=a.id").Unscoped().Where("a.deleted_time is null")
+	where := ""
 	//	系统管理员、研发主管、研发总监、品质主管、总经理、销售总监、销售助理看全部的
 	if service.StringsContains(s.userInfo.Roles, "ResearchAndDevelopmentDirector") || service.StringsContains(s.userInfo.Roles, "ResearchAndDevelopmentSupervisor") || service.StringsContains(s.userInfo.Roles, "QualityAssuranceSupervisor") || service.StringsContains(s.userInfo.Roles, "GeneralManager") || service.StringsContains(s.userInfo.Roles, "SalesDirector") || service.StringsContains(s.userInfo.Roles, "SaleAssociate") || service.StringsContains(s.userInfo.Roles, "SysAdmin") {
 		//	无条件,查询全部
 		//	项目经理看对应的
-	} else if service.StringsContains(s.userInfo.Roles, "ProjectManager") {
-		dao = dao.Where("a.project_man_id = ?", s.userInfo.Id)
-		//	交付经理看对应的
-	} else if service.StringsContains(s.userInfo.Roles, "ProjectDeliveryManager") {
-		dao = dao.Where("a.deliver_man_id = ?", s.userInfo.Id)
-	} else if service.StringsContains(s.userInfo.Roles, "ProductIntegrationManager") {
-		//	丁岳嵩 查看全部硬件 交付类型:10软件;20硬件
-		dao = dao.Where("a.order_type = ?", "20")
-		// 产品线负责人看自己负责的产品线
-	} else if service.StringsContains(s.userInfo.Roles, "ProductLineManager") {
-		productCode, err := service.ColumnString(s.Dao.DB.Table("base_product_auth").Wheref("user_id = ?", s.userInfo.Id), "product_code")
-		if err != nil {
-			return 0, nil, err
-		}
-		g.Log().Infof("DeliverOrderService List product_code %v", productCode)
-		dao = dao.Where("a.product in (?)", productCode)
-		// 大区经理看所管理的销售的(包括自己)
-	} else if service.StringsContains(s.userInfo.Roles, "RegionalManager") {
-		dao = dao.Where(fmt.Sprintf("b.sale_id IN (SELECT id FROM sys_user WHERE dept_id='%v')", s.userInfo.DeptId))
-		// 销售工程师看自己负责的项目的
-	} else if service.StringsContains(s.userInfo.Roles, "SalesEngineer") {
-		//dao = dao.Where("b.incharge_id = ?", s.userInfo.Id) // 改为关联项目
-		dao = dao.Where("b.sale_id = ?", s.userInfo.Id)
 	} else {
-		// 默认看自己的产品线
-		productCode, err := service.ColumnString(s.Dao.DB.Table("base_product_auth").Wheref("user_id = ?", s.userInfo.Id), "product_code")
-		if err != nil {
-			return 0, nil, err
+		where1 := "(1=0"
+		if service.StringsContains(s.userInfo.Roles, "ProjectManager") {
+			where1 += fmt.Sprintf(" OR a.project_man_id='%v'", s.userInfo.Id)
+			//dao = dao.Where("a.project_man_id = ?", s.userInfo.Id)
+			//	交付经理看对应的
+		}
+		if service.StringsContains(s.userInfo.Roles, "ProjectDeliveryManager") {
+			where1 += fmt.Sprintf(" OR a.deliver_man_id='%v'", s.userInfo.Id)
+			//dao = dao.Where("a.deliver_man_id = ?", s.userInfo.Id)
+		}
+		if service.StringsContains(s.userInfo.Roles, "ProductIntegrationManager") {
+			//	丁岳嵩 查看全部硬件 交付类型:10软件;20硬件
+			where1 += fmt.Sprintf(" OR a.order_type='20'")
+			//dao = dao.Where("a.order_type = ?", "20")
+			// 产品线负责人看自己负责的产品线
+		}
+		if service.StringsContains(s.userInfo.Roles, "ProductLineManager") {
+			productCode, err := service.ColumnString(s.Dao.DB.Table("base_product_auth").Wheref("user_id = ?", s.userInfo.Id), "product_code")
+			if err != nil {
+				return 0, nil, err
+			}
+			g.Log().Infof("DeliverOrderService List product_code %v", productCode)
+			if len(productCode) > 0 {
+				where1 += fmt.Sprintf(" OR a.product IN (%v)", strings.Join(productCode, ","))
+			}
+			//dao = dao.Where("a.product in (?)", productCode)
+			// 大区经理看所管理的销售的(包括自己)
+		}
+		if service.StringsContains(s.userInfo.Roles, "RegionalManager") {
+			where1 += fmt.Sprintf(" OR b.sale_id IN (SELECT id FROM sys_user WHERE dept_id='%v')", s.userInfo.DeptId)
+			//dao = dao.Where(fmt.Sprintf("b.sale_id IN (SELECT id FROM sys_user WHERE dept_id='%v')", s.userInfo.DeptId))
+			// 销售工程师看自己负责的项目的
+		}
+		if service.StringsContains(s.userInfo.Roles, "SalesEngineer") {
+			where1 += fmt.Sprintf(" OR b.sale_id='%v'", s.userInfo.Id)
+			//dao = dao.Where("b.sale_id = ?", s.userInfo.Id)
 		}
-		g.Log().Infof("DeliverOrderService List product_code %v", productCode)
-		dao = dao.Where("a.product in (?)", productCode)
+		where1 += ")"
+		where = where1
 	}
+	dao = dao.Where(where)
 
 	if req.OrderCode != "" {
 		dao = dao.Where("a.order_code = ?", req.OrderCode)

+ 31 - 14
opms_parent/app/service/work/work_order.go

@@ -67,26 +67,43 @@ func (s *OrderService) GetList(req *model.WorkOrderSearchReq) (total int, orderL
 	//3.支持人员可以看到负责人为自己的支持工单
 	//4.产品线经理可以看到自己所属产品线的支持工单
 	//5.角色为系统管理员、总经理、销售总监、销售助理的可以看到所有的支持工单
+	where := ""
 	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 service.StringsContains(s.CxtUser.Roles, "ProductLineManager") {
-		productCode, err := service.ColumnString(s.Dao.DB.Table("base_product_auth").Wheref("user_id = ?", s.CxtUser.Id), "product_code")
-		if err != nil {
-			return 0, nil, err
-		}
-		g.Log().Infof("DeliverOrderService List product_code %v", productCode)
-		db = db.Where("a.product_line in (?)", productCode)
-		// 角色为大区经理,可以看到申请人为自己及下属的支持工单
-	} else if service.StringsContains(s.CxtUser.Roles, "RegionalManager") {
-		db = db.Where(fmt.Sprintf("a.created_by IN (SELECT id FROM sys_user WHERE dept_id='%v')", s.CxtUser.DeptId))
-		// 角色为销售工程师,可以看到申请人为销售自己的支持工单
-	} else if service.StringsContains(s.CxtUser.Roles, "SalesEngineer") {
-		db = db.Where("a.created_by = ?", s.CxtUser.Id)
 	} else {
+		where1 := "(1=0"
+		if service.StringsContains(s.CxtUser.Roles, "ProductLineManager") {
+			productCode, err := service.ColumnString(s.Dao.DB.Table("base_product_auth").Wheref("user_id = ?", s.CxtUser.Id), "product_code")
+			if err != nil {
+				return 0, nil, err
+			}
+			g.Log().Infof("DeliverOrderService List product_code %v", productCode)
+			if len(productCode) > 0 {
+				where1 += fmt.Sprintf(" OR a.product_line IN (%v)", strings.Join(productCode, ","))
+			}
+			//db = db.Where("a.product_line in (?)", productCode)
+			// 角色为大区经理,可以看到申请人为自己及下属的支持工单
+		}
+		if service.StringsContains(s.CxtUser.Roles, "RegionalManager") {
+			where1 += fmt.Sprintf(" OR a.created_by IN (SELECT id FROM sys_user WHERE dept_id='%v')", s.CxtUser.DeptId)
+			//db = db.Where(fmt.Sprintf("a.created_by IN (SELECT id FROM sys_user WHERE dept_id='%v')", s.CxtUser.DeptId))
+			// 角色为销售工程师,可以看到申请人为销售自己的支持工单
+		}
+		if service.StringsContains(s.CxtUser.Roles, "SalesEngineer") {
+			where1 += fmt.Sprintf(" OR a.created_by='%v'", s.CxtUser.Id)
+			//db = db.Where("a.created_by = ?", s.CxtUser.Id)
+		}
+
 		// 支持人员可以看到负责人为自己的支持工单
-		db = db.Where("a.assign_user_id = ?", s.CxtUser.Id)
+		where1 += fmt.Sprintf(" OR a.assign_user_id='%v'", s.CxtUser.Id)
+		//db = db.Where("a.assign_user_id = ?", s.CxtUser.Id)
+
+		where1 += ")"
+		where = where1
 	}
+	db = db.Where(where)
+
 	if req.Name != "" {
 		db = db.WhereLike("a."+s.Dao.C.Name, "%"+req.Name+"%")
 	}