|
|
@@ -1,12 +1,14 @@
|
|
|
package plat
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
"context"
|
|
|
"dashoo.cn/micro/app/dao/plat"
|
|
|
model "dashoo.cn/micro/app/model/plat"
|
|
|
"dashoo.cn/micro/app/service"
|
|
|
"database/sql"
|
|
|
"fmt"
|
|
|
+ "github.com/360EntSecGroup-Skylar/excelize"
|
|
|
"github.com/gogf/gf/errors/gerror"
|
|
|
"github.com/gogf/gf/frame/g"
|
|
|
"github.com/gogf/gf/os/gtime"
|
|
|
@@ -53,6 +55,12 @@ func (s *taskService) GetList(req *model.SearchPlatTaskReq) (total int, TaskList
|
|
|
if req.TargetType != "" {
|
|
|
TaskModel = TaskModel.Where("target_type", req.TargetType)
|
|
|
}
|
|
|
+ if req.MySelf == "1" {
|
|
|
+ TaskModel = TaskModel.Where("created_by", s.GetCxtUserId())
|
|
|
+ }
|
|
|
+ if req.IsMain == "1" {
|
|
|
+ TaskModel = TaskModel.Where("main_user_id", s.GetCxtUserId())
|
|
|
+ }
|
|
|
total, err = TaskModel.Count()
|
|
|
if err != nil {
|
|
|
g.Log().Error(err)
|
|
|
@@ -64,6 +72,121 @@ func (s *taskService) GetList(req *model.SearchPlatTaskReq) (total int, TaskList
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+// 导出数据
|
|
|
+func (s *taskService) Export(req *model.ExportReq) (content *model.ExportContent, err error) {
|
|
|
+ var con model.ExportContent
|
|
|
+ // 获取数据
|
|
|
+ total, list, err := s.GetList(&req.SearchPlatTaskReq)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ //rsp.List
|
|
|
+ f := excelize.NewFile()
|
|
|
+ // Create a new sheet.
|
|
|
+ index := f.NewSheet("Sheet1")
|
|
|
+ for index, item := range req.Columns {
|
|
|
+ sheetPosition := service.Div(index + 1) + "1"
|
|
|
+ f.SetCellValue("Sheet1", sheetPosition, item)
|
|
|
+ }
|
|
|
+
|
|
|
+ if total > 0 {
|
|
|
+ // 构造用户和类型填充数据
|
|
|
+ userMap := make(map[int]string, 0)
|
|
|
+ typeMap := make(map[string]string, 0)
|
|
|
+ users, err := s.Dao.DB.Model("sys_user").FindAll()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ types, err := s.Dao.DB.Model("sys_dict_data").Where("dict_type='TaskType'").FindAll()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for _, item := range users {
|
|
|
+ userMap[item["id"].Int()] = item["user_name"].String()
|
|
|
+ }
|
|
|
+ for _, item := range types {
|
|
|
+ typeMap[item["dict_value"].String()] = item["dict_label"].String()
|
|
|
+ }
|
|
|
+ // 构造excel数据
|
|
|
+ for lineNum, item := range list {
|
|
|
+ for index, value := range req.Columns {
|
|
|
+ if value =="督办标题"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), item.TaskTitle)
|
|
|
+ }
|
|
|
+ if value =="督办类型"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), typeMap[item.TaskType])
|
|
|
+ }
|
|
|
+ if value =="状态"{
|
|
|
+ data := ""
|
|
|
+ if item.TaskStatus == "10" {
|
|
|
+ data = "进行中"
|
|
|
+ } else if item.TaskStatus == "20" {
|
|
|
+ data = "关闭"
|
|
|
+ }
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), data)
|
|
|
+ }
|
|
|
+ if value =="超期"{
|
|
|
+ data := ""
|
|
|
+ if item.TaskStatus == "10" {
|
|
|
+ data = "否"
|
|
|
+ } else if item.TaskStatus == "20" {
|
|
|
+ data = "是"
|
|
|
+ }
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), data)
|
|
|
+ }
|
|
|
+ if value =="督办说明"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), item.TaskDesc)
|
|
|
+ }
|
|
|
+ if value =="关联对象"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), item.TargetName)
|
|
|
+ }
|
|
|
+ if value =="负责人"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), userMap[item.MainUserId])
|
|
|
+ }
|
|
|
+ if value =="督办人"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), userMap[item.SupervisorUserId])
|
|
|
+ }
|
|
|
+ if value =="开始时间"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), item.TaskStartDate.Format("Y-m-d H:i:s"))
|
|
|
+ }
|
|
|
+ if value =="结束时间"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), item.TaskEndDate.Format("Y-m-d H:i:s"))
|
|
|
+ }
|
|
|
+ if value =="创建时间"{
|
|
|
+ f.SetCellValue("Sheet1", service.Div(index + 1) + strconv.Itoa(lineNum + 2), item.CreatedTime.Format("Y-m-d H:i:s"))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ f.SetActiveSheet(index)
|
|
|
+
|
|
|
+ var buffer *bytes.Buffer
|
|
|
+ buffer, _ = f.WriteToBuffer()
|
|
|
+ con.Content = buffer.Bytes()
|
|
|
+
|
|
|
+ return &con, err
|
|
|
+}
|
|
|
+
|
|
|
+// 统计
|
|
|
+func (s *taskService) Statistics(req *model.SearchPlatTaskReq) (*model.TaskNumberCount, error) {
|
|
|
+ var result model.TaskNumberCount
|
|
|
+ // 统计数量
|
|
|
+ err := s.Dao.M.Fields(fmt.Sprintf("SUM(main_user_id='%v' AND task_status='10') ToDoNumber, SUM(main_user_id='%v' AND task_status='20') CompletedNumber, SUM(created_by='%v') CreateNumber", s.GetCxtUserId(), s.GetCxtUserId(), s.GetCxtUserId())).Scan(&result)
|
|
|
+ if err != nil {
|
|
|
+ if err == sql.ErrNoRows {
|
|
|
+ result.CompletedNumber = 0
|
|
|
+ result.CreateNumber = 0
|
|
|
+ result.ToDoNumber = 0
|
|
|
+ return &result, nil
|
|
|
+ } else {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return &result, nil
|
|
|
+}
|
|
|
+
|
|
|
// 添加信息
|
|
|
func (s *taskService) Create(req *model.AddPlatTaskReq) (err error) {
|
|
|
platTask := new(model.PlatTask)
|
|
|
@@ -85,7 +208,7 @@ func (s *taskService) Create(req *model.AddPlatTaskReq) (err error) {
|
|
|
}
|
|
|
// 流程日志
|
|
|
id, _ := res.LastInsertId()
|
|
|
- err = CreateTaskLog(s, nil, int(id), s.GetCxtUserId(), s.GetCxtUserName(), "创建任务", "创建任务成功", "")
|
|
|
+ err = CreateTaskLog(s, nil, int(id), s.GetCxtUserId(), s.GetCxtUserName(), "创建督办", "创建督办成功", "")
|
|
|
|
|
|
return
|
|
|
}
|
|
|
@@ -99,24 +222,22 @@ func (s *taskService) ChangeStatus(req *model.ChangeStatusReq) (err error) {
|
|
|
// 类型合规判断
|
|
|
if req.Type == "TaskStatus" {
|
|
|
data = fmt.Sprintf("task_status='%v'", req.NowStatus)
|
|
|
- nodeName = "任务状态修改"
|
|
|
+ nodeName = "状态修改"
|
|
|
if req.NowStatus == "20" {
|
|
|
- desc = "任务关闭"
|
|
|
- } else if req.NowStatus == "30" {
|
|
|
- desc = "任务完成"
|
|
|
+ desc = "关闭"
|
|
|
data += fmt.Sprintf(",task_end_date='%v'", gtime.Now().Format("Y-m-d H:i:s"))
|
|
|
}
|
|
|
} else if req.Type == "IsOverdue" {
|
|
|
nodeName = "超期状态修改"
|
|
|
if req.NowStatus == "20" {
|
|
|
- desc = "任务超期"
|
|
|
+ desc = "超期"
|
|
|
}
|
|
|
data = fmt.Sprintf("is_overdue='%v'", req.NowStatus)
|
|
|
} else {
|
|
|
return fmt.Errorf("类型不匹配,请仔细检查")
|
|
|
}
|
|
|
// 读取现有数据
|
|
|
- task, err := s.Dao.FindOne(where)
|
|
|
+ task, err := s.Dao.Where(where).FindOne()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|