Browse Source

feature(督办): 督办功能优化

lk 2 years ago
parent
commit
5dcf0d0fa1

+ 16 - 0
opms_parent/app/handler/plat/task.go

@@ -119,3 +119,19 @@ func (h *TaskHandler) StatisticsTaskNumber(ctx context.Context, req *model.Searc
 	rsp.Data = g.Map{"list": result}
 	return nil
 }
+
+// StatisticsTaskOverdueNumber 统计各类型督办任务数量
+// Swagger:Task 督办 超期数量统计
+func (h *TaskHandler) StatisticsTaskOverdueNumber(ctx context.Context, req *model.SearchPlatTaskReq, rsp *comm_def.CommonMsg) error {
+	taskService, err := server.NewTaskService(ctx)
+	if err != nil {
+		return err
+	}
+	g.Log().Info("搜索值", req)
+	result, err := taskService.StatisticsNumber(req)
+	if err != nil {
+		return err
+	}
+	rsp.Data = g.Map{"list": result}
+	return nil
+}

+ 15 - 12
opms_parent/app/model/plat/plat_task.go

@@ -22,18 +22,21 @@ type PlatTaskEx struct {
 
 // 查询
 type SearchPlatTaskReq struct {
-	TaskId      string `json:"taskId"`      // 任务Id
-	TaskTitle   string `json:"taskTitle"`   // 任务标题
-	TaskType    string `son:"taskType"`     // 任务类型 数据字典
-	Source      string `json:"source"`      // 事项来源 数据字典
-	TaskStatus  string `json:"taskStatus"`  // 任务状态(10发起  20进行中   30流程完成)
-	IsOverdue   string `json:"isOverdue"`   // 是否超期(10否20是)
-	MainUserId  string `json:"mainUserId"`  // 负责人ID
-	TargetId    string `json:"targetId"`    // 关联对象ID
-	TargetType  string `json:"targetType"`  // 关联对象类型(10客户,20项目,30合同,40回款)
-	MySelf      string `json:"mySelf"`      // 我发起的
-	IsMain      string `json:"isMain"`      // 我负责的
-	OperateType string `json:"operateType"` // 前端操作数据状态:1 我的待办;2 我发起的;3 我处理的
+	TaskId           string `json:"taskId"`           // 任务Id
+	TaskTitle        string `json:"taskTitle"`        // 任务标题
+	TaskType         string `son:"taskType"`          // 任务类型 数据字典
+	Source           string `json:"source"`           // 事项来源 数据字典
+	TaskStatus       string `json:"taskStatus"`       // 任务状态(10发起  20进行中   30流程完成)
+	IsOverdue        string `json:"isOverdue"`        // 是否超期(10否20是30全部)
+	MainUserId       string `json:"mainUserId"`       // 负责人ID
+	TargetId         string `json:"targetId"`         // 关联对象ID
+	TargetType       string `json:"targetType"`       // 关联对象类型(10客户,20项目,30合同,40回款)
+	MySelf           string `json:"mySelf"`           // 我发起的
+	IsMain           string `json:"isMain"`           // 我负责的
+	OperateType      string `json:"operateType"`      // 前端操作数据状态:1 我的待办;2 我发起的;3 我处理的;4 抄送我的;5 全部数据
+	OverdueDays      string `json:"overdueDays"`      // 超期时间:为空 全部;1/3/5/>5(超期1天之内;超期1-3天之间;超期3-5天,超期5天以上)
+	SupervisorUserId string `json:"supervisorUserId"` // 督办人ID
+	CreatedById      string `json:"createdById"`      // 发起人ID
 	request.PageReq
 }
 

+ 68 - 2
opms_parent/app/service/plat/plat_task.go

@@ -61,12 +61,24 @@ func (s *taskService) GetList(req *model.SearchPlatTaskReq) (total int, TaskList
 	if req.TaskStatus != "" {
 		TaskModel = TaskModel.Where("plat_task.task_status", req.TaskStatus)
 	}
+	// 是否超期(10否20是30全部(或为空查询全部))
 	if req.IsOverdue != "" {
-		TaskModel = TaskModel.Where("plat_task.is_overdue", req.IsOverdue)
+		today := gtime.Now().Format("Y-m-d 00:00:00")
+		if req.IsOverdue == "10" {
+			TaskModel = TaskModel.Where("plat_task.task_end_date >= ? OR (plat_task.task_status<>'10' && plat_task.task_status<>'20')", today)
+		} else if req.IsOverdue == "20" {
+			TaskModel = TaskModel.Where("plat_task.task_end_date < ? AND (plat_task.task_status='10' OR plat_task.task_status='20')", today)
+		}
 	}
 	if req.MainUserId != "" {
 		TaskModel = TaskModel.Where("plat_task.main_user_id", req.MainUserId)
 	}
+	if req.SupervisorUserId != "" {
+		TaskModel = TaskModel.Where("plat_task.supervisor_user_id", req.SupervisorUserId)
+	}
+	if req.CreatedById != "" {
+		TaskModel = TaskModel.Where("plat_task.created_by", req.CreatedById)
+	}
 	if req.TargetId != "" {
 		TaskModel = TaskModel.Where("plat_task.target_id", req.TargetId)
 	}
@@ -89,6 +101,24 @@ func (s *taskService) GetList(req *model.SearchPlatTaskReq) (total int, TaskList
 	} else if req.OperateType == "4" { // 抄送我的
 		TaskModel = TaskModel.Where(fmt.Sprintf("FIND_IN_SET(%v, plat_task.copy_user_id)", s.GetCxtUserId()))
 	}
+	// 超期时间:为空 全部;1/3/5/>5(超期1天之内;超期1-3天之间;超期3-5天,超期5天以上)
+	if req.OverdueDays != "" {
+		if req.OverdueDays == "1" {
+			date := gtime.Now().AddDate(0, 0, -1).Format("Y-m-d")
+			TaskModel = TaskModel.Where("plat_task.task_end_date LIKE ? AND (plat_task.task_status='10' OR plat_task.task_status='20')", "%"+date+"%")
+		} else if req.OverdueDays == "3" {
+			date1 := gtime.Now().AddDate(0, 0, -1).Format("Y-m-d 00:00:00")
+			date2 := gtime.Now().AddDate(0, 0, -3).Format("Y-m-d 00:00:00")
+			TaskModel = TaskModel.Where(fmt.Sprintf("plat_task.task_end_date >= '%v' AND plat_task.task_end_date < '%v' AND (plat_task.task_status='10' OR plat_task.task_status='20')", date2, date1))
+		} else if req.OverdueDays == "5" {
+			date1 := gtime.Now().AddDate(0, 0, -3).Format("Y-m-d 00:00:00")
+			date2 := gtime.Now().AddDate(0, 0, -5).Format("Y-m-d 00:00:00")
+			TaskModel = TaskModel.Where(fmt.Sprintf("plat_task.task_end_date >= '%v' AND plat_task.task_end_date < '%v' AND (plat_task.task_status='10' OR plat_task.task_status='20')", date2, date1))
+		} else if req.OverdueDays == ">5" {
+			date := gtime.Now().AddDate(0, 0, -5).Format("Y-m-d 00:00:00")
+			TaskModel = TaskModel.Where("plat_task.task_end_date < ? AND (plat_task.task_status='10' OR plat_task.task_status='20')", date)
+		}
+	}
 	TaskModel = TaskModel.Group("plat_task.id")
 
 	total, err = TaskModel.Count()
@@ -221,8 +251,44 @@ func (s *taskService) Export(req *model.ExportReq) (content *model.ExportContent
 // Statistics 统计
 func (s *taskService) Statistics(req *model.SearchPlatTaskReq) (*model.TaskNumberCount, error) {
 	var result model.TaskNumberCount
+	// 是否超期
+	where := ""
+	// 是否超期(10否20是30全部(或为空查询全部))
+	if req.IsOverdue == "20" {
+		today := gtime.Now().Format("Y-m-d 00:00:00")
+		where = fmt.Sprintf("plat_task.task_end_date < '%v' AND (plat_task.task_status='10' OR plat_task.task_status='20')", today)
+	}
+	// 统计数量
+	count, err := s.Dao.InnerJoin("plat_task_handle", "plat_task.Id=plat_task_handle.task_id").Where(fmt.Sprintf("plat_task_handle.task_status='10' AND (plat_task_handle.main_user_id=%v OR FIND_IN_SET(%v, plat_task_handle.owner_user_id))", s.GetCxtUserId(), s.GetCxtUserId())).Where(where).Group("plat_task.Id").Count()
+	if err != nil {
+		return nil, err
+	}
+	result.ToDoNumber = count
+
+	return &result, nil
+}
+
+// StatisticsNumber 统计(主要统计超期数量)
+func (s *taskService) StatisticsNumber(req *model.SearchPlatTaskReq) (*model.TaskNumberCount, error) {
+	var result model.TaskNumberCount
+	// 是否超期
+	where := ""
+	orderBy := "plat_task.created_time DESC"
+	// 是否超期(10否20是30全部(或为空查询全部))
+	if req.IsOverdue == "20" {
+		today := gtime.Now().Format("Y-m-d 00:00:00")
+		where = fmt.Sprintf("plat_task.task_end_date < '%v' AND (plat_task.task_status='10' OR plat_task.task_status='20')", today)
+	}
+	if req.OperateType == "1" { // 我的待办
+		orderBy = "plat_task.task_status ASC, plat_task.created_time DESC"
+		if where == "" {
+			where = fmt.Sprintf("plat_task_handle.task_status='10' AND (plat_task_handle.main_user_id=%v OR FIND_IN_SET(%v, plat_task_handle.owner_user_id))", s.GetCxtUserId(), s.GetCxtUserId())
+		} else {
+			where += fmt.Sprintf(" AND plat_task_handle.task_status='10' AND (plat_task_handle.main_user_id=%v OR FIND_IN_SET(%v, plat_task_handle.owner_user_id))", s.GetCxtUserId(), s.GetCxtUserId())
+		}
+	}
 	// 统计数量
-	count, err := s.Dao.InnerJoin("plat_task_handle", "plat_task.Id=plat_task_handle.task_id").Where(fmt.Sprintf("plat_task_handle.task_status='10' AND (plat_task_handle.main_user_id=%v OR FIND_IN_SET(%v, plat_task_handle.owner_user_id))", s.GetCxtUserId(), s.GetCxtUserId())).Group("plat_task.Id").Count()
+	count, err := s.Dao.InnerJoin("plat_task_handle", "plat_task.Id=plat_task_handle.task_id").Where(where).Order(orderBy).Group("plat_task.Id").Count()
 	if err != nil {
 		return nil, err
 	}