ソースを参照

fix(督办): 联调bug修复

likai 3 年 前
コミット
db5c3dc91d

+ 2 - 2
opms_parent/app/model/plat/plat_task.go

@@ -83,9 +83,9 @@ type ExportContent struct {
 
 // 督办处理接口
 type HandleReq struct {
-	TaskId       int    				`json:"taskId|min:1"  v:"required#任务Id不能为空|任务Id不能为空"`
+	TaskId       int    				`json:"taskId"  v:"required|min:1#任务Id不能为空|任务Id不能为空"`
 	Step         int    				`json:"step"    v:"required|min:10#步骤不能为空|步骤不能为空"` // 步骤号(10接收  15暂存  20提交  30审批(督办人)  40评价(监办人))
-	HandleStatus string 				`json:"handleStatus"  v:"required#处理结果不能为空"`
+	HandleStatus string 				`json:"handleStatus" `   // 处理结果(10接收20提交30审批通过40审批退回)
 	HandleDesc   string  				`json:"handleDesc"`
 	ProgressList []*PlatTaskProgress    `json:"progressList"`
 }

+ 70 - 42
opms_parent/app/service/plat/plat_task.go

@@ -68,7 +68,7 @@ func (s *taskService) GetList(req *model.SearchPlatTaskReq) (total int, TaskList
 	} else if req.OperateType == "3" {
 		TaskModel = TaskModel.Where(fmt.Sprintf("plat_task_handle.task_status='20' AND plat_task_handle.handle_user_id=%v", s.GetCxtUserId()))
 	}
-	TaskModel.Group("plat_task.id")
+	TaskModel = TaskModel.Group("plat_task.id")
 
 	total, err = TaskModel.Count()
 	if err != nil {
@@ -128,9 +128,11 @@ func (s *taskService) Export(req *model.ExportReq) (content *model.ExportContent
 				if value == "状态" {
 					data := ""
 					if item.TaskStatus == "10" {
-						data = "进行中"
+						data = "发起"
 					} else if item.TaskStatus == "20" {
-						data = "关闭"
+						data = "进行中"
+					} else if item.TaskStatus == "30" {
+						data = "流程完成"
 					}
 					f.SetCellValue("Sheet1", service.Div(index+1)+strconv.Itoa(lineNum+2), data)
 				}
@@ -212,7 +214,7 @@ func (s *taskService) Create(req *model.AddPlatTaskReq) (err error) {
 	id, _ := res.LastInsertId()
 	platTask.Id = int(id)
 	nextHandle := createNextTaskHandel(s, platTask, 10)
-	_, err = s.Dao.DB.Model("plat_task_handle").Insert(nextHandle)
+	_, err = s.Dao.DB.Insert("plat_task_handle", nextHandle)
 	if err != nil {
 		return
 	}
@@ -271,15 +273,18 @@ func (s *taskService) ChangeStatus(req *model.ChangeStatusReq) (err error) {
 // 督办任务处理
 func (s *taskService) Handle(req *model.HandleReq) (err error) {
 	// 步骤号(10接收  15暂存  20提交  30审批(督办人)  40评价(监办人))
+	// 处理结果(10接收20提交30审批通过40审批退回)
 	logNodeName := ""
 	logDesc := ""
 	var taskHandle model.PlatTaskHandle
-	err = s.Dao.DB.Model("plat_task_handle").Where(fmt.Sprintf("task_id='%v' AND step=%v AND task_status='10' AND (main_user_id=%v OR FIND_IN_SET(%v, owner_user_id))", req.Step, req.TaskId, s.GetCxtUserId(), s.GetCxtUserId())).Scan(&taskHandle)
-	if err != nil {
-		if err == sql.ErrNoRows {
-			return fmt.Errorf("数据不匹配,刷新数据重试")
+	if req.Step != 15 {
+		err = s.Dao.DB.Model("plat_task_handle").Where(fmt.Sprintf("task_id='%v' AND step=%v AND task_status='10' AND (main_user_id=%v OR FIND_IN_SET(%v, owner_user_id))", req.TaskId, req.Step, s.GetCxtUserId(), s.GetCxtUserId())).Scan(&taskHandle)
+		if err != nil {
+			if err == sql.ErrNoRows {
+				return fmt.Errorf("数据不匹配,刷新数据重试")
+			}
+			return err
 		}
-		return err
 	}
 	now := gtime.Now()
 	// 数据暂存,不做任何流程修改
@@ -287,13 +292,8 @@ func (s *taskService) Handle(req *model.HandleReq) (err error) {
 		// 暂存
 		logNodeName = "暂存"
 		logDesc = s.GetCxtUserName() + "暂存进展信息"
-		// 1 标记删除旧的进展数据
-		_, err = s.Dao.DB.Model("plat_task_progress").Update(fmt.Sprintf("deleted_time='%v'", now.Format("Y-m-d H:i:s")), fmt.Sprintf("task_id='%v'", req.TaskId))
-		if err != nil {
-			return err
-		}
-		// 2 保存新的数据
-		_, err = s.Dao.DB.Model("plat_task_progress").Save(req.ProgressList)
+		// 更新进展数据
+		err = s.saveProgressList(req, now)
 		if err != nil {
 			return err
 		}
@@ -333,26 +333,10 @@ func (s *taskService) Handle(req *model.HandleReq) (err error) {
 			logNodeName = "提交"
 			logDesc = s.GetCxtUserName() + "提交督办任务"
 			// 更新进展数据
-			for index, progress := range req.ProgressList {
-				// 填充创建信息
-				if progress.CreatedBy == 0 {
-					service.SetCreatedInfo(req.ProgressList[index], s.GetCxtUserId(), s.GetCxtUserName())
-				}
-				//	填充更新信息
-				service.SetUpdatedInfo(req.ProgressList[index], s.GetCxtUserId(), s.GetCxtUserName())
-			}
-			// 保存督办进展
-			// 1 标记删除旧的进展数据
-			_, err = s.Dao.DB.Model("plat_task_progress").Update(fmt.Sprintf("deleted_time='%v'", now.Format("Y-m-d H:i:s")), fmt.Sprintf("task_id='%v'", req.TaskId))
+			err = s.saveProgressList(req, now)
 			if err != nil {
 				return err
 			}
-			// 2 保存新的数据
-			_, err = s.Dao.DB.Model("plat_task_progress").Save(req.ProgressList)
-			if err != nil {
-				return err
-			}
-
 		} else if req.Step == 30 {
 			// 督办人审批
 			taskData["approver_id"] = s.GetCxtUserId()
@@ -360,10 +344,10 @@ func (s *taskService) Handle(req *model.HandleReq) (err error) {
 			taskData["appro_status"] = req.HandleStatus
 			taskData["appro_desc"] = req.HandleDesc
 			logNodeName = "审批"
-			if req.HandleStatus == "审批通过" {
+			if req.HandleStatus == "30" {
 				logDesc = s.GetCxtUserName() + "审批通过"
 				nextHandle = createNextTaskHandel(s, task, 40)
-			} else if req.HandleStatus == "审批退回" {
+			} else if req.HandleStatus == "40" {
 				logDesc = s.GetCxtUserName() + "审批退回"
 				nextHandle = createNextTaskHandel(s, task, 20)
 			}
@@ -374,16 +358,18 @@ func (s *taskService) Handle(req *model.HandleReq) (err error) {
 			taskData["evaluate_status"] = req.HandleStatus
 			taskData["evaluate_desc"] = req.HandleDesc
 			logNodeName = "评价"
-			if req.HandleStatus == "审批通过" {
+			if req.HandleStatus == "30" {
 				// 监办人评价,审批通过,任务结束
 				logDesc = s.GetCxtUserName() + "审批通过"
 				nextHandle = nil
 				taskData["actual_close_date"] = now.Format("Y-m-d H:i:s")
 				taskData["task_status"] = "30"
-			} else if req.HandleStatus == "审批退回" {
-				logDesc = s.GetCxtUserName() + "审批通过"
+			} else if req.HandleStatus == "40" {
+				logDesc = s.GetCxtUserName() + "审批退回"
 				nextHandle = createNextTaskHandel(s, task, 20)
 			}
+		} else {
+			return fmt.Errorf("未知步骤,无法操作")
 		}
 
 		// 更新数据
@@ -393,13 +379,13 @@ func (s *taskService) Handle(req *model.HandleReq) (err error) {
 			return err
 		}
 		// 更新任务数据
-		_, err = s.Dao.DB.Model("plat_task_handle").Update(handleData, fmt.Sprintf("ID='%v'", taskHandle.ID))
+		_, err = s.Dao.DB.Update("plat_task_handle", handleData, fmt.Sprintf("ID='%v'", taskHandle.ID))
 		if err != nil {
 			return err
 		}
 		// 创建下一条任务
 		if nextHandle != nil {
-			_, err = s.Dao.DB.Model("plat_task_handle").Save(nextHandle)
+			_, err = s.Dao.DB.Save("plat_task_handle", nextHandle)
 			if err != nil {
 				return err
 			}
@@ -412,7 +398,7 @@ func (s *taskService) Handle(req *model.HandleReq) (err error) {
 		return err
 	}
 
-	return fmt.Errorf("未知步骤,无法操作")
+	return nil
 }
 
 // 任务日志创建方法
@@ -471,9 +457,13 @@ func createNextTaskHandel(s *taskService, task *model.PlatTask, step int) *model
 		personTask.MainUserId = task.MainUserId
 		personTask.OwnerUserId = task.OwnerUserId
 	} else if step == 20 {
+		// 创建提交任务
+		personTask.MainUserId = task.MainUserId
+		personTask.OwnerUserId = task.OwnerUserId
+	} else if step == 30 {
 		// 提交给督办人审批
 		personTask.MainUserId = task.SupervisorUserId
-	} else if step == 30 {
+	} else if step == 40 {
 		// 提交给监办人评价
 		personTask.MainUserId = task.WatchUserId
 	}
@@ -481,4 +471,42 @@ func createNextTaskHandel(s *taskService, task *model.PlatTask, step int) *model
 	service.SetCreatedInfo(&personTask, s.GetCxtUserId(), s.GetCxtUserName())
 
 	return &personTask
+}
+
+// 处理暂存、提交任务进展
+func (s *taskService) saveProgressList(req *model.HandleReq, now *gtime.Time) (err error) {
+	ids := ""
+	deleteWhere := fmt.Sprintf("task_id='%v'", req.TaskId)
+	for index, progress := range req.ProgressList {
+		if progress.Id != 0 {
+			if ids == "" {
+				ids = fmt.Sprintf("%v", progress.Id)
+			} else {
+				ids += fmt.Sprintf(",%v", progress.Id)
+			}
+		}
+		req.ProgressList[index].TaskId = req.TaskId
+		// 填充创建信息
+		if progress.CreatedBy == 0 {
+			service.SetCreatedInfo(req.ProgressList[index], s.GetCxtUserId(), s.GetCxtUserName())
+		}
+		//	填充更新信息
+		service.SetUpdatedInfo(req.ProgressList[index], s.GetCxtUserId(), s.GetCxtUserName())
+	}
+	if ids != "" {
+		deleteWhere += fmt.Sprintf(" AND ID NOT IN (%v)", ids)
+	}
+	// 保存督办进展
+	// 1 标记删除旧的进展数据
+	_, err = s.Dao.DB.Update("plat_task_progress", fmt.Sprintf("deleted_time='%v'", now.Format("Y-m-d H:i:s")), deleteWhere)
+	if err != nil {
+		return err
+	}
+	// 2 保存新的数据
+	_, err = s.Dao.DB.Save("plat_task_progress", req.ProgressList)
+	if err != nil {
+		return err
+	}
+
+	return nil
 }