Browse Source

add: 任务管理

zoie 2 years ago
parent
commit
2429ba03c9

+ 33 - 3
controllers/Account.go

@@ -254,18 +254,48 @@ func (c *AccountController) Del() {
 	return
 	return
 }
 }
 
 
-// 用户权限-列表-
-func (c *AccountController) UserPower_List() {
+// 用户权限-所有列表-
+func (c *AccountController) UserPower_List_All() {
 	// 验证登录 User_is, User_r
 	// 验证登录 User_is, User_r
-	_, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	User_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !User_is {
 	if !User_is {
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
 		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
+	if User_r.T_power > 2 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "无权操作!"}
+		c.ServeJSON()
+		return
+	}
 	var r_jsons lib.R_JSONS
 	var r_jsons lib.R_JSONS
 	r_jsons.List = Account.Read_Power_List_ALL_1()
 	r_jsons.List = Account.Read_Power_List_ALL_1()
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
+
+// 管理员-全部列表-
+func (c *AccountController) List_All() {
+	// 验证登录 User_is, User_r
+	User_r, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !User_is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	if User_r.T_power > 2 {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "无权操作!"}
+		c.ServeJSON()
+		return
+	}
+	PowerList := Account.Read_Power_List_ALL_1()
+	PowerMap := Account.UserPowerListToPowerMap(PowerList)
+
+	var r_jsons lib.R_JSONS
+	r_jsons.List = Account.Read_Admin_List_ALL_Power(PowerMap)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}

+ 118 - 14
controllers/Task.go

@@ -3,6 +3,7 @@ package controllers
 import (
 import (
 	"bzd_server/conf"
 	"bzd_server/conf"
 	"bzd_server/lib"
 	"bzd_server/lib"
+	"bzd_server/models/Account"
 	"bzd_server/models/System"
 	"bzd_server/models/System"
 	"bzd_server/models/Task"
 	"bzd_server/models/Task"
 	beego "github.com/beego/beego/v2/server/web"
 	beego "github.com/beego/beego/v2/server/web"
@@ -36,14 +37,14 @@ func (c *TaskController) List() {
 	T_name := c.GetString("T_name")
 	T_name := c.GetString("T_name")
 	T_uuid := c.GetString("T_uuid")
 	T_uuid := c.GetString("T_uuid")
 
 
-	var cnt int64
+	var cnt int
 	List, cnt := Task.Read_UserTask_List(T_uuid, T_name, page, page_z)
 	List, cnt := Task.Read_UserTask_List(T_uuid, T_name, page, page_z)
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.List = List
 	r_jsons.List = List
 	r_jsons.Page = page
 	r_jsons.Page = page
 	r_jsons.Page_size = int(page_size)
 	r_jsons.Page_size = int(page_size)
 	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
 	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
+	r_jsons.Num = cnt
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	c.ServeJSON()
@@ -72,14 +73,14 @@ func (c *TaskController) UserTaskList() {
 
 
 	T_name := c.GetString("T_name")
 	T_name := c.GetString("T_name")
 
 
-	var cnt int64
+	var cnt int
 	List, cnt := Task.Read_UserTask_List(User_r.T_uuid, T_name, page, page_z)
 	List, cnt := Task.Read_UserTask_List(User_r.T_uuid, T_name, page, page_z)
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.List = List
 	r_jsons.List = List
 	r_jsons.Page = page
 	r_jsons.Page = page
 	r_jsons.Page_size = int(page_size)
 	r_jsons.Page_size = int(page_size)
 	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
 	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
-	r_jsons.Num = int(cnt)
+	r_jsons.Num = cnt
 
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	c.ServeJSON()
@@ -103,7 +104,9 @@ func (c *TaskController) Get() {
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
-
+	// 添加浏览量
+	_ = Task.Add_Task_Visit(r)
+	r.T_Visit += 1
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Task.TaskToTask_R(r)}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Task.TaskToTask_R(r)}
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
@@ -120,12 +123,35 @@ func (c *TaskController) Add() {
 	}
 	}
 
 
 	T_name := c.GetString("T_name")
 	T_name := c.GetString("T_name")
-	T_uuid := c.GetString("T_uuid")
+	T_uuid := c.GetString("T_uuid") // 用户uuid
+	T_VerifyTemplate_id := c.GetString("T_VerifyTemplate_id")
+	T_deadline := c.GetString("T_deadline")
+	T_collection := c.GetString("T_collection")
+	T_reporting := c.GetString("T_reporting")
+	T_delivery := c.GetString("T_delivery")
+
+	//var_ := Task.Task{
+	//	T_uuid:              T_uuid,
+	//	T_name:              T_name,
+	//	T_VerifyTemplate_id: T_VerifyTemplate_id,
+	//	T_deadline:          T_deadline,
+	//	T_collection:        Task.TaskInfo{T_uuid: T_collection},
+	//	T_reporting:         Task.TaskInfo{T_uuid: T_reporting},
+	//	T_delivery:          Task.TaskInfo{T_uuid: T_delivery},
+	//	T_Show:              1,
+	//	T_State:             1,
+	//}
 
 
 	var_ := Task.Task{
 	var_ := Task.Task{
-		T_uuid:  T_uuid,
-		T_name:  T_name,
-		T_State: 1,
+		T_uuid:              T_uuid,
+		T_name:              T_name,
+		T_VerifyTemplate_id: T_VerifyTemplate_id,
+		T_deadline:          T_deadline,
+		T_collection:        T_collection,
+		T_reporting:         T_reporting,
+		T_delivery:          T_delivery,
+		T_Show:              1,
+		T_State:             1,
 	}
 	}
 
 
 	T_task_id, is := Task.Add_Task(var_)
 	T_task_id, is := Task.Add_Task(var_)
@@ -134,6 +160,7 @@ func (c *TaskController) Add() {
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
+	Task.Add_TaskLogs_T(User_r.T_uuid, T_task_id, "任务管理", "添加", var_)
 	System.Add_UserLogs_T(User_r.T_uuid, "任务管理", "添加", var_)
 	System.Add_UserLogs_T(User_r.T_uuid, "任务管理", "添加", var_)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_task_id}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: T_task_id}
 	c.ServeJSON()
 	c.ServeJSON()
@@ -151,8 +178,16 @@ func (c *TaskController) Up() {
 	}
 	}
 
 
 	T_name := c.GetString("T_name")
 	T_name := c.GetString("T_name")
-	T_State, T_State_err := c.GetInt("T_State")
+	T_Show, T_Show_err := c.GetInt("T_Show")
 
 
+	T_VerifyTemplate_id := c.GetString("T_VerifyTemplate_id")
+	T_deadline := c.GetString("T_deadline")
+	T_collection := c.GetString("T_collection")
+	T_collection_state, T_collection_err := c.GetInt("T_collection_state")
+	T_reporting := c.GetString("T_reporting")
+	T_reporting_state, T_reporting_err := c.GetInt("T_reporting_state")
+	T_delivery := c.GetString("T_delivery")
+	T_delivery_state, T_delivery_err := c.GetInt("T_delivery_state")
 	T_doc1 := c.GetString("T_doc1")
 	T_doc1 := c.GetString("T_doc1")
 	T_pdf1 := c.GetString("T_pdf1")
 	T_pdf1 := c.GetString("T_pdf1")
 	T_doc2 := c.GetString("T_doc2")
 	T_doc2 := c.GetString("T_doc2")
@@ -172,9 +207,34 @@ func (c *TaskController) Up() {
 	if len(T_name) > 0 {
 	if len(T_name) > 0 {
 		r.T_name = T_name
 		r.T_name = T_name
 	}
 	}
-	if T_State_err == nil {
-		r.T_State = T_State
+	if T_Show_err == nil {
+		r.T_Show = T_Show
+	}
+	if len(T_VerifyTemplate_id) > 0 {
+		r.T_VerifyTemplate_id = T_VerifyTemplate_id
+	}
+	if len(T_deadline) > 0 {
+		r.T_deadline = T_deadline
+	}
+	if len(T_collection) > 0 {
+		r.T_collection = T_collection
+	}
+	if len(T_reporting) > 0 {
+		r.T_reporting = T_reporting
+	}
+	if len(T_delivery) > 0 {
+		r.T_delivery = T_delivery
+	}
+	if T_collection_err == nil {
+		r.T_collection_state = T_collection_state
 	}
 	}
+	if T_reporting_err == nil {
+		r.T_reporting_state = T_reporting_state
+	}
+	if T_delivery_err == nil {
+		r.T_delivery_state = T_delivery_state
+	}
+
 	if len(T_doc1) > 0 {
 	if len(T_doc1) > 0 {
 		r.T_doc1 = T_doc1
 		r.T_doc1 = T_doc1
 	}
 	}
@@ -195,11 +255,15 @@ func (c *TaskController) Up() {
 	}
 	}
 
 
 	// .......
 	// .......
-	if !Task.Update_Task(r, "T_name", "T_State", "T_doc1", "T_pdf1", "T_doc2", "T_pdf2", "T_doc3", "T_pdf3") {
+	if !Task.Update_Task(r, "T_name", "T_Show", "T_VerifyTemplate_id", "T_deadline",
+		"T_collection", "T_reporting", "T_delivery",
+		"T_collection_state", "T_reporting_state", "T_delivery_state",
+		"T_doc1", "T_pdf1", "T_doc2", "T_pdf2", "T_doc3", "T_pdf3") {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
 		c.ServeJSON()
 		c.ServeJSON()
 		return
 		return
 	}
 	}
+	Task.Add_TaskLogs_T(User_r.T_uuid, T_task_id, "任务管理", "修改", r)
 	System.Add_UserLogs_T(User_r.T_uuid, "任务管理", "修改", r)
 	System.Add_UserLogs_T(User_r.T_uuid, "任务管理", "修改", r)
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
 	c.ServeJSON()
@@ -218,11 +282,12 @@ func (c *TaskController) Del() {
 
 
 	T_task_id := c.GetString("T_task_id")
 	T_task_id := c.GetString("T_task_id")
 	if r, is := Task.Read_Task(T_task_id); is {
 	if r, is := Task.Read_Task(T_task_id); is {
-		if !Task.Delete_Task(r) {
+		if !Task.Delete_Task_(r) {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
 			c.ServeJSON()
 			c.ServeJSON()
 			return
 			return
 		}
 		}
+		Task.Add_TaskLogs_T(User_r.T_uuid, T_task_id, "任务管理", "删除", r)
 		System.Add_UserLogs_T(User_r.T_uuid, "任务管理", "删除", r)
 		System.Add_UserLogs_T(User_r.T_uuid, "任务管理", "删除", r)
 	}
 	}
 
 
@@ -230,3 +295,42 @@ func (c *TaskController) Del() {
 	c.ServeJSON()
 	c.ServeJSON()
 	return
 	return
 }
 }
+
+// 列表 -
+func (c *TaskController) Logs_List() {
+	// 验证登录 User_is, User_r
+	_, User_is := lib.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !User_is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	var r_jsons lib.R_JSONS
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	T_task_id := c.GetString("T_task_id")
+
+	AdminList := Account.Read_Admin_List_ALL()
+	AdminMap := Account.AdminListToAdminMap(AdminList)
+
+	var cnt int64
+	List, cnt := Task.Read_TaskLogs_List(T_task_id, AdminMap, page, page_z)
+	page_size := math.Ceil(float64(cnt) / float64(page_z))
+	r_jsons.List = List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(page_size)
+	r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
+	r_jsons.Num = int(cnt)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}

+ 52 - 0
models/Account/Admin.go

@@ -152,3 +152,55 @@ func Delete_Admin_(v Admin) bool {
 
 
 	return true
 	return true
 }
 }
+
+// 获取全部列表
+func Read_Admin_List_ALL() (maps []Admin) {
+
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Admin))
+
+	qs.Filter("T_State", 1).OrderBy("Id").All(&maps)
+	return maps
+}
+
+// 获取全部列表
+func Read_Admin_List_ALL_Power(PowerMaps map[int]string) (maps []AdminPower_R) {
+
+	o := orm.NewOrm()
+	var r []Admin
+	qs := o.QueryTable(new(Admin))
+
+	qs.Filter("T_State", 1).OrderBy("Id").All(&r)
+	// 转换
+	var Admin_Power_r []AdminPower_R
+	for _, v := range r {
+		Admin_Power_r = append(Admin_Power_r, AdminToAdminPower_R(v, PowerMaps))
+	}
+	return Admin_Power_r
+}
+
+func AdminListToAdminMap(A []Admin) map[string]string {
+	maps := make(map[string]string, len(A))
+	for _, v := range A {
+		maps[v.T_uuid] = v.T_name
+	}
+	return maps
+}
+
+type AdminPower_R struct {
+	T_uuid       string `orm:"column(t_uuid)"`
+	T_name       string `orm:"column(t_name)"`       // 姓名
+	T_power_name string `orm:"column(t_power_name)"` // 权限
+}
+
+// PowerMaps {1:'管理员'}
+func AdminToAdminPower_R(T Admin, PowerMaps map[int]string) (T_r AdminPower_R) {
+	T_power_name, ok := PowerMaps[T.T_power]
+	if !ok {
+		T_power_name = ""
+	}
+	T_r.T_uuid = T.T_uuid
+	T_r.T_name = T.T_name
+	T_r.T_power_name = T_power_name
+	return T_r
+}

+ 8 - 0
models/Account/Power.go

@@ -121,3 +121,11 @@ func Update_Delete_UserPower_Byid(Id int) (err error) {
 	}
 	}
 	return err
 	return err
 }
 }
+
+func UserPowerListToPowerMap(T []UserPower) map[int]string {
+	maps := make(map[int]string, len(T))
+	for _, v := range T {
+		maps[v.Id] = v.T_name
+	}
+	return maps
+}

+ 5 - 5
models/Certificate/Certificate.go

@@ -111,11 +111,11 @@ func Update_Certificate(m Certificate, cols ...string) bool {
 }
 }
 
 
 type Certificate_ struct {
 type Certificate_ struct {
-	Id             int    `orm:"column(ID);size(11);auto;pk"`
-	T_sn           string `orm:"size(256);null"`                               // 编号
-	T_release_time string `orm:"column(t_release_time);type(timestamp);null;"` // 发布时间
-	T_failure_time string `orm:"column(t_failure_time);type(timestamp);null;"` // 失效时间
-	T_pdf          string `orm:"size(256);null"`                               // pdf链接
+	Id             int
+	T_sn           string // 编号
+	T_release_time string `orm:"column(t_release_time)"` // 发布时间
+	T_failure_time string `orm:"column(t_failure_time)"` // 失效时间
+	T_pdf          string // pdf链接
 }
 }
 
 
 // 获取列表
 // 获取列表

+ 7 - 7
models/Certificate/CertificatePdf.go

@@ -13,8 +13,8 @@ import (
 type CertificatePdf struct {
 type CertificatePdf struct {
 	Id               int    `orm:"column(ID);size(11);auto;pk"`
 	Id               int    `orm:"column(ID);size(11);auto;pk"`
 	T_Certificate_sn string `orm:"size(256);null"`                               // 证书编号
 	T_Certificate_sn string `orm:"size(256);null"`                               // 证书编号
-	T_release_time   string `orm:"column(T_release_time);type(timestamp);null;"` // 发布时间
-	T_failure_time   string `orm:"column(T_failure_time);type(timestamp);null;"` // 失效时间
+	T_release_time   string `orm:"column(t_release_time);type(timestamp);null;"` // 发布时间
+	T_failure_time   string `orm:"column(t_failure_time);type(timestamp);null;"` // 失效时间
 	T_pdf            string `orm:"size(256);null"`                               // pdf链接
 	T_pdf            string `orm:"size(256);null"`                               // pdf链接
 
 
 	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
 	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
@@ -22,11 +22,11 @@ type CertificatePdf struct {
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 }
 type CertificatePdf_R struct {
 type CertificatePdf_R struct {
-	Id               int    `orm:"column(ID);size(11);auto;pk"`
-	T_Certificate_sn string `orm:"size(256);null"`                               // 证书编号
-	T_release_time   string `orm:"column(T_release_time);type(timestamp);null;"` // 发布时间
-	T_failure_time   string `orm:"column(T_failure_time);type(timestamp);null;"` // 失效时间
-	T_pdf            string `orm:"size(256);null"`                               // pdf链接
+	Id               int
+	T_Certificate_sn string // 证书编号
+	T_release_time   string // 发布时间
+	T_failure_time   string // 失效时间
+	T_pdf            string // pdf链接
 }
 }
 
 
 func (t *CertificatePdf) TableName() string {
 func (t *CertificatePdf) TableName() string {

+ 103 - 33
models/Task/Task.go

@@ -10,16 +10,25 @@ import (
 	"github.com/beego/beego/v2/adapter/orm"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
+	"strconv"
 	"time"
 	"time"
 )
 )
 
 
 // 模板
 // 模板
 type Task struct {
 type Task struct {
-	Id     int    `orm:"column(ID);size(11);auto;pk"`
-	T_task_id string `orm:"size(256);null"` // 任务ID
-	T_uuid string `orm:"size(256);null"` // 用户 UUID
+	Id                  int    `orm:"column(ID);size(11);auto;pk"`
+	T_task_id           string `orm:"size(256);null"` // 任务ID
+	T_uuid              string `orm:"size(256);null"` // 用户 UUID
+	T_name              string `orm:"size(256);null"` // 标题
+	T_VerifyTemplate_id string `orm:"size(256);null"` // 模板id
+	T_deadline          string `orm:"size(256);null"` // 截止时间
+	T_collection        string `orm:"size(256);null"` // 数据采集 负责人UUID
+	T_reporting         string `orm:"size(256);null"` // 报告编写 负责人UUID
+	T_delivery          string `orm:"size(256);null"` // 交付审核 负责人UUID
+	T_collection_state  int    `orm:"size(2);0"`      // 数据采集 状态 0 未完成 1 已完成
+	T_reporting_state   int    `orm:"size(2);0"`      // 报告编写 状态 0 未完成 1 已完成
+	T_delivery_state    int    `orm:"size(2);0"`      // 交付审核 状态 0 未完成 1 已完成
 
 
-	T_name string `orm:"size(256);null"` // 标题
 	T_doc1 string `orm:"size(256);null"` // 封面
 	T_doc1 string `orm:"size(256);null"` // 封面
 	T_pdf1 string `orm:"size(256);null"` // 封面
 	T_pdf1 string `orm:"size(256);null"` // 封面
 	T_doc2 string `orm:"size(256);null"` // 报告
 	T_doc2 string `orm:"size(256);null"` // 报告
@@ -27,27 +36,55 @@ type Task struct {
 	T_doc3 string `orm:"size(256);null"` // 证书
 	T_doc3 string `orm:"size(256);null"` // 证书
 	T_pdf3 string `orm:"size(256);null"` // 证书
 	T_pdf3 string `orm:"size(256);null"` // 证书
 
 
-	T_Visit    int       `orm:"size(200);1"`                                           // 浏览量
+	T_Show     int       `orm:"size(2);1"`                                             // 0 隐藏   1 公开
+	T_Visit    int       `orm:"size(200);0"`                                           // 浏览量
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
 	T_State    int       `orm:"size(2);1"`                                             // 0 删除   1 正常
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
 }
 
 
 type Task_R struct {
 type Task_R struct {
-	T_task_id  string  // 标题
-	T_name  string  // 标题
-	T_doc1 string  // 封面
-	T_pdf1 string  // 封面
-	T_doc2 string  // 报告
-	T_pdf2 string  // 报告
-	T_doc3 string  // 证书
-	T_pdf3 string  // 证书
-	T_Visit int     // 浏览量
-	T_State int     // 0    1
+	T_task_id  string // 标题
+	T_name     string // 标题
+	T_doc1     string // 封面
+	T_pdf1     string // 封面
+	T_doc2     string // 报告
+	T_pdf2     string // 报告
+	T_doc3     string // 证书
+	T_pdf3     string // 证书
+	T_Show     int    // 公开/隐藏
+	T_Visit    int    // 浏览量
+	T_State    int    // 0    1
 	CreateTime time.Time
 	CreateTime time.Time
 	UpdateTime time.Time
 	UpdateTime time.Time
 }
 }
 
 
+type Task_ struct {
+	T_task_id           string // 任务ID
+	T_uuid              string // 用户 UUID
+	T_name              string // 标题
+	T_VerifyTemplate_id string // 任务模板id
+	T_deadline          string // 截止时间
+	T_collection        string // 数据采集 负责人UUID
+	T_reporting         string // 报告编写 负责人UUID
+	T_delivery          string // 交付审核 负责人UUID
+	T_collection_state  int    // 数据采集 状态 0 未完成 1 已完成
+	T_reporting_state   int    // 报告编写 状态 0 未完成 1 已完成
+	T_delivery_state    int    // 交付审核 状态 0 未完成 1 已完成
+	T_collection_name   string // 数据采集 负责人姓名
+	T_reporting_name    string // 报告编写 负责人姓名
+	T_delivery_name     string // 交付审核 负责人姓名
+	T_doc1              string // 封面
+	T_pdf1              string // 封面
+	T_doc2              string // 报告
+	T_pdf2              string // 报告
+	T_doc3              string // 证书
+	T_pdf3              string // 证书
+	T_Show              int    // 0 公开 1 隐藏
+	T_Visit             int    // 浏览量
+	T_State             int    // 0 删除 1 正常
+}
+
 func (t *Task) TableName() string {
 func (t *Task) TableName() string {
 	return "Task" // 数据库名称   // ************** 替换 FormulaList **************
 	return "Task" // 数据库名称   // ************** 替换 FormulaList **************
 }
 }
@@ -80,6 +117,7 @@ func TaskToTask_R(T Task) (T_r Task_R) {
 	T_r.T_pdf2 = T.T_pdf2
 	T_r.T_pdf2 = T.T_pdf2
 	T_r.T_doc3 = T.T_doc3
 	T_r.T_doc3 = T.T_doc3
 	T_r.T_pdf3 = T.T_pdf3
 	T_r.T_pdf3 = T.T_pdf3
+	T_r.T_Show = T.T_Show
 	T_r.T_State = T.T_State
 	T_r.T_State = T.T_State
 	T_r.T_Visit = T.T_Visit
 	T_r.T_Visit = T.T_Visit
 	T_r.UpdateTime = T.UpdateTime
 	T_r.UpdateTime = T.UpdateTime
@@ -145,7 +183,7 @@ func Read_Task(T_task_id string) (r Task, is bool) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Task))
 	qs := o.QueryTable(new(Task))
-	err := qs.Filter("T_task_id", T_task_id).One(&r)
+	err := qs.Filter("T_task_id", T_task_id).Filter("T_State", 1).One(&r)
 	if err != nil {
 	if err != nil {
 		return r, false
 		return r, false
 	}
 	}
@@ -162,7 +200,7 @@ func Add_Task(r Task) (string, bool) {
 	rand_x := 0
 	rand_x := 0
 	for true {
 	for true {
 		r.T_task_id = lib.GetRandstring(12, "", int64(rand_x)) // 1,336,336
 		r.T_task_id = lib.GetRandstring(12, "", int64(rand_x)) // 1,336,336
-		err := o.Read(&r, "T_task_id") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+		err := o.Read(&r, "T_task_id")                         // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
 		if err != nil {
 		if err != nil {
 			break
 			break
 		}
 		}
@@ -217,6 +255,18 @@ func Update_Task(m Task, cols ...string) bool {
 	return false
 	return false
 }
 }
 
 
+// 添加浏览量
+func Add_Task_Visit(m Task) bool {
+	o := orm.NewOrm()
+	m.T_Visit += 1
+	if num, err := o.Update(&m); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+		Redis_Task_Set(m.T_task_id, m)
+		return true
+	}
+	return false
+}
+
 //// 获取列表
 //// 获取列表
 //func Read_Task_List(T_name string, page int, page_z int) ([]Task_R, int64) {
 //func Read_Task_List(T_name string, page int, page_z int) ([]Task_R, int64) {
 //
 //
@@ -247,32 +297,52 @@ func Update_Task(m Task, cols ...string) bool {
 //}
 //}
 
 
 // 获取列表
 // 获取列表
-func Read_UserTask_List(T_uuid string,T_name string, page int, page_z int) ([]Task_R, int64) {
+func Read_UserTask_List(T_uuid string, T_name string, page int, page_z int) ([]Task_, int) {
 
 
 	o := orm.NewOrm()
 	o := orm.NewOrm()
-	// 也可以直接使用 Model 结构体作为表名
-	var r []Task
-	qs := o.QueryTable(new(Task))
-	var offset int64
+	var offset int
 	if page <= 1 {
 	if page <= 1 {
 		offset = 0
 		offset = 0
 	} else {
 	} else {
-		offset = int64((page - 1) * page_z)
+		offset = (page - 1) * page_z
 	}
 	}
-	cond := orm.NewCondition()
-	cond1 := cond.And("T_name__icontains", T_name).And("T_uuid", T_uuid).And("T_State", 1) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
-
 
 
-	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
-	cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
+	var maps_z []orm2.ParamsList
+	var maps []Task_
 
 
-	// 转换
-	var Task_r []Task_R
-	for _, v := range r {
-		Task_r = append(Task_r, TaskToTask_R(v))
+	// 获取总条数
+	sql := "SELECT COUNT(ID) FROM Task WHERE t__state=1"
+	if len(T_uuid) > 0 {
+		sql = sql + " AND t_uuid=\"" + T_uuid + "\""
+	}
+	if len(T_name) > 0 {
+		sql = sql + " AND t_name LIKE \"%" + T_name + "%\""
 	}
 	}
+	fmt.Println(sql)
+	_, err := o.Raw(sql).ValuesList(&maps_z)
+	if err != nil {
+		return maps, 0
+	}
+	if len(maps_z) == 0 {
+		return maps, 0
+	}
+	sql = "SELECT * FROM Task t " +
+		"LEFT JOIN (SELECT t_uuid, t_name AS t_collection_name FROM `Admin` WHERE t__state=1) c ON c.t_uuid=t.t_collection " +
+		"LEFT JOIN (SELECT t_uuid, t_name AS t_reporting_name FROM `Admin` WHERE t__state=1) r ON r.t_uuid=t.t_reporting " +
+		"LEFT JOIN (SELECT t_uuid, t_name AS t_delivery_name FROM `Admin` WHERE t__state=1) d ON d.t_uuid=t.t_delivery " +
+		"WHERE t.t__state=1"
+	if len(T_uuid) > 0 {
+		sql = sql + " AND t.t_uuid=\"" + T_uuid + "\""
+	}
+	if len(T_name) > 0 {
+		sql = sql + " AND t.t_name LIKE \"%" + T_name + "%\""
+	}
+	sql = sql + " ORDER BY t.id DESC LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
+	fmt.Println(sql)
+	_, err = o.Raw(sql).QueryRows(&maps)
 
 
-	return Task_r, cnt
+	cnt, _ := strconv.Atoi(maps_z[0][0].(string))
+	return maps, cnt
 }
 }
 
 
 // 获取列表 /时间筛选  Time_start_ Time_end_    2021-12-30,所以下面要加后缀 时间
 // 获取列表 /时间筛选  Time_start_ Time_end_    2021-12-30,所以下面要加后缀 时间

+ 97 - 0
models/Task/TaskLogs.go

@@ -0,0 +1,97 @@
+package Task
+
+import (
+	"encoding/json"
+	"fmt"
+	_ "github.com/astaxie/beego/cache/redis"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"time"
+)
+
+type TaskLogs struct {
+	Id         int    `orm:"column(ID);size(11);auto;pk"`
+	T_uuid     string `orm:"size(256);null"`  // 操作用户uuid
+	T_task_id  string `orm:"size(256);null"`  // 任务ID
+	Logs_class string `orm:"size(256);null"`  //
+	Logs_Title string `orm:"size(256);null"`  // 标题
+	Logs_Txt   string `orm:"type(text);null"` // 详情
+
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
+}
+
+func (t *TaskLogs) TableName() string {
+	return "TaskLogs" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(TaskLogs))
+
+}
+
+type TaskLogs_R struct {
+	T_uuid     string // 操作用户uuid
+	T_name     string // 操作用户name
+	T_task_id  string // 任务ID
+	Logs_class string //
+	Logs_Title string // 标题
+	Logs_Txt   string // 详情
+	CreateTime time.Time
+}
+
+// AdminMaps {"uuid":'name'}
+func TaskLogsToTaskLogs_R(T TaskLogs, AdminMaps map[string]string) (T_r TaskLogs_R) {
+	T_name, ok := AdminMaps[T.T_uuid]
+	if !ok {
+		T_name = ""
+	}
+	T_r.T_uuid = T.T_uuid
+	T_r.T_name = T_name
+	T_r.T_task_id = T.T_task_id
+	T_r.Logs_class = T.Logs_class
+	T_r.Logs_Title = T.Logs_Title
+	T_r.Logs_Txt = T.Logs_Txt
+	T_r.CreateTime = T.CreateTime
+
+	//......
+	return T_r
+}
+
+func Add_TaskLogs_T(T_uuid string, T_task_id string, Logs_class string, Logs_Title string, Logs_Txt_T interface{}) {
+	o := orm.NewOrm()
+	jsonStu, err := json.Marshal(Logs_Txt_T)
+	if err != nil {
+		fmt.Println("Add_TaskLogs_T JSON ,err=", err)
+	}
+	m := TaskLogs{T_uuid: T_uuid, T_task_id: T_task_id, Logs_class: Logs_class, Logs_Title: Logs_Title, Logs_Txt: string(jsonStu)}
+	o.Insert(&m)
+}
+
+// 获取列表
+func Read_TaskLogs_List(T_task_id string, AdminMaps map[string]string, page int, page_z int) ([]TaskLogs_R, int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var r []TaskLogs
+	qs := o.QueryTable(new(TaskLogs))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_task_id", T_task_id)
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
+
+	// 转换
+	var TaskLogs_r []TaskLogs_R
+	for _, v := range r {
+		TaskLogs_r = append(TaskLogs_r, TaskLogsToTaskLogs_R(v, AdminMaps))
+	}
+	return TaskLogs_r, cnt
+}

+ 6 - 5
routers/Account.go

@@ -21,12 +21,13 @@ func init() {
 	beego.Router("/Login_verification", &controllers.AccountController{}, "*:Login_verification") // 获取未读消息
 	beego.Router("/Login_verification", &controllers.AccountController{}, "*:Login_verification") // 获取未读消息
 
 
 	// - 管理员
 	// - 管理员
-	beego.Router("/Admin/List", &controllers.AccountController{}, "*:List") // 校准证书pdf列表
-	beego.Router("/Admin/Add", &controllers.AccountController{}, "*:Add")   // 添加校准证书pdf
-	beego.Router("/Admin/Up", &controllers.AccountController{}, "*:Up")     // 编辑校准证书pdf
-	beego.Router("/Admin/Del", &controllers.AccountController{}, "*:Del")   // 删除校准证书pdf
+	beego.Router("/Admin/List", &controllers.AccountController{}, "*:List")         // 管理员列表
+	beego.Router("/Admin/Add", &controllers.AccountController{}, "*:Add")           // 添加管理员
+	beego.Router("/Admin/Up", &controllers.AccountController{}, "*:Up")             // 编辑管理员
+	beego.Router("/Admin/Del", &controllers.AccountController{}, "*:Del")           // 删除管理员
+	beego.Router("/Admin/List_All", &controllers.AccountController{}, "*:List_All") // 管理员所有列表
 
 
 	// - 用户权限
 	// - 用户权限
-	beego.Router("/Admin/UserPower_List", &controllers.AccountController{}, "*:UserPower_List") // 校准证书pdf列表
+	beego.Router("/UserPower/List_All", &controllers.AccountController{}, "*:UserPower_List_All") // 用户权限所有列表
 
 
 }
 }

+ 3 - 0
routers/Task.go

@@ -16,6 +16,9 @@ func init() {
 	beego.Router("/Task/Up", &controllers.TaskController{}, "*:Up")   //
 	beego.Router("/Task/Up", &controllers.TaskController{}, "*:Up")   //
 	beego.Router("/Task/Del", &controllers.TaskController{}, "*:Del") //
 	beego.Router("/Task/Del", &controllers.TaskController{}, "*:Del") //
 
 
+	// 日志
+	beego.Router("/TaskLogs/List", &controllers.TaskController{}, "*:Logs_List")
+
 	// 提取数据
 	// 提取数据
 	beego.Router("/TaskData/Extract_TaskData", &controllers.TaskDataController{}, "*:Extract_TaskData")
 	beego.Router("/TaskData/Extract_TaskData", &controllers.TaskDataController{}, "*:Extract_TaskData")
 	beego.Router("/TaskData/TaskDataClass_List", &controllers.TaskDataController{}, "*:TaskDataClass_List")
 	beego.Router("/TaskData/TaskDataClass_List", &controllers.TaskDataController{}, "*:TaskDataClass_List")