فهرست منبع

add:生成报告编号

zoie 2 ماه پیش
والد
کامیت
3ea8ad2e2e
4فایلهای تغییر یافته به همراه128 افزوده شده و 9 حذف شده
  1. 45 4
      controllers/Task.go
  2. 81 5
      models/Task/Task.go
  3. 2 0
      routers/Task.go
  4. BIN
      角色菜单.xlsx

+ 45 - 4
controllers/Task.go

@@ -699,6 +699,14 @@ func (c *TaskController) Add() {
 		T_report_number:  T_report_number,
 		T_report_type:    T_report_type,
 	}
+	if T_report_number != "/" {
+		_, exist := Task.Read_TaskbyT_report_number(T_report_number)
+		if exist {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "报告编号已存在!"}
+			c.ServeJSON()
+			return
+		}
+	}
 
 	T_task_id, is := Task.Add_Task(var_)
 	if !is {
@@ -707,7 +715,7 @@ func (c *TaskController) Add() {
 		return
 	}
 	NatsServer.Create_Local_Table(T_task_id)
-
+	Task.Redis_Task_T_report_number_DelK(T_report_number) // 删除redis内的任务编号
 	// 通知
 	_, company_r := Account.Read_User_ByT_uuid(var_.T_uuid)
 	go wx.WxSend(var_.T_scheme, fmt.Sprintf("【%s-%s】任务派发", company_r.T_name, var_.T_name))
@@ -1041,6 +1049,15 @@ func (c *TaskController) Up() {
 		return
 	}
 
+	if T_report_number != "/" {
+		t, exist := Task.Read_TaskbyT_report_number(T_report_number)
+		if exist && r.T_task_id != t.T_task_id {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "报告编号已存在!"}
+			c.ServeJSON()
+			return
+		}
+	}
+
 	// .......
 	clos := make([]string, 0)
 	if len(T_name) > 0 {
@@ -2529,7 +2546,7 @@ func (c *TaskController) StatisticalRanking() {
 	return
 }
 
-// 添加-
+// 复制-
 func (c *TaskController) Copy() {
 
 	// 验证登录 User_is, User_r
@@ -2597,10 +2614,9 @@ func (c *TaskController) Copy() {
 		T_verify_type:    r.T_verify_type,
 		T_subject_matter: r.T_subject_matter,
 		T_temp_range:     r.T_temp_range,
-		T_report_number:  r.T_report_number,
 		T_report_type:    r.T_report_type,
 	}
-
+	var_.T_report_number, _ = Task.GenerateNextT_report_number(var_.T_device_type)
 	id, is := Task.Add_Task(var_)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
@@ -2608,6 +2624,7 @@ func (c *TaskController) Copy() {
 		return
 	}
 	NatsServer.Create_Local_Table(T_task_id)
+	Task.Redis_Task_T_report_number_DelK(var_.T_report_number) // 删除redis内的任务编号
 
 	// 通知
 	_, company_r := Account.Read_User_ByT_uuid(var_.T_uuid)
@@ -2623,3 +2640,27 @@ func (c *TaskController) Copy() {
 	c.ServeJSON()
 	return
 }
+
+// 生成报告编号 设备类型+年+季度+递增编号
+func (c *TaskController) GenT_report_number() {
+	// 验证登录 User_is, User_r
+	_, User_is := Account.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
+	}
+
+	T_device_type := c.GetString("T_device_type")
+
+	number, err := Task.GenerateNextT_report_number(T_device_type)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: err.Error()}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: number}
+	c.ServeJSON()
+	return
+}

+ 81 - 5
models/Task/Task.go

@@ -13,6 +13,7 @@ import (
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"log"
+	"strconv"
 	"strings"
 	"time"
 )
@@ -623,7 +624,7 @@ func TaskToTask_Stat(T Task, userMap, adminMap map[string]string) (T_ Task_Stat)
 }
 
 // ---------------- Redis -------------------
-// Redis_Set(m.T_sn,m) // Redis 更新缓存
+
 func Redis_Task_Set(key string, r Task) (err error) {
 	//json序列化
 	str, err := json.Marshal(r)
@@ -637,10 +638,6 @@ func Redis_Task_Set(key string, r Task) (err error) {
 	}
 	return
 }
-
-// if r,is :=Redis_Get(T_sn);is{
-// return r,nil
-// }
 func Redis_Task_Get(key string) (r Task, is bool) {
 	if redisCache_Task.IsExist(key) {
 		logs.Println("找到key:", key)
@@ -656,6 +653,25 @@ func Redis_Task_DelK(key string) (err error) {
 	return
 }
 
+func Redis_Task_T_report_number_Set(key string) (err error) {
+	err = redisCache_Task.Put(key, "", 24*time.Hour)
+	if err != nil {
+		logs.Println("set key:", key)
+	}
+	return
+}
+func Redis_Task_T_report_number_Get(key string) (is bool) {
+	if redisCache_Task.IsExist(key) {
+		return true
+	}
+	logs.Println("没有 找到key:", key)
+	return false
+}
+func Redis_Task_T_report_number_DelK(key string) (err error) {
+	err = redisCache_Task.Delete(key)
+	return
+}
+
 // ---------------- 特殊方法 -------------------
 
 // 获取 ById
@@ -1144,3 +1160,63 @@ func Read_Task_List_For_ERP(T_reporting_pass_time string) ([]Task_, int) {
 
 	return TaskList, int(cnt)
 }
+
+// GenerateNextT_report_number 生成下一个编号
+func GenerateNextT_report_number(T_device_type string) (string, error) {
+	o := orm.NewOrm()
+
+	// 获取当前年份和季度
+	currentYear := time.Now().Year()
+	currentQuarter := int(time.Now().Month()-1)/3 + 1 // 1,2,3,4 对应 A,B,C,D
+	quarterChar := string(rune('A' + currentQuarter - 1))
+	yearQuarter := fmt.Sprintf("%s%d%s", T_device_type, currentYear, quarterChar)
+	var lastRecord Task
+	err := o.QueryTable(new(Task)).
+		Filter("T_report_number__startswith", yearQuarter).
+		OrderBy("-T_report_number").
+		Limit(1).
+		One(&lastRecord)
+	if err != nil && err.Error() != orm.ErrNoRows.Error() {
+		return "", fmt.Errorf("报告编号-查询当前年季度最后编号失败: %v", err)
+	}
+
+	// 初始化新编号
+	var newSeq = 1
+
+	if lastRecord.T_report_number != "" {
+		// 提取序号部分,例如 "2025A00001" -> "00001"
+		lastSeqStr := lastRecord.T_report_number[len(lastRecord.T_report_number)-5:]
+		lastSeq, _ := strconv.Atoi(lastSeqStr)
+		newSeq = lastSeq + 1
+	}
+
+	var newCode string
+	for {
+		// 格式化新编号
+		newCode = fmt.Sprintf("%s%05d", yearQuarter, newSeq)
+		if Redis_Task_T_report_number_Get(newCode) {
+			newSeq += 1
+		} else {
+			err = Redis_Task_T_report_number_Set(newCode)
+			if err != nil {
+				return "", fmt.Errorf("报告编号-存入redis失败: %v", err)
+			}
+			break
+		}
+	}
+
+	return newCode, nil
+}
+
+// 获取 By
+func Read_TaskbyT_report_number(T_report_number string) (r Task, is bool) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Task))
+	//err := qs.Filter("T_task_id", T_task_id).Filter("T_State", 1).One(&r)
+	err := qs.Filter("T_report_number", T_report_number).Filter("T_State", 1).One(&r)
+	if err != nil {
+		return r, false
+	}
+
+	return r, true
+}

+ 2 - 0
routers/Task.go

@@ -29,6 +29,7 @@ func init() {
 	beego.Router("/Task/Stat", &controllers.TaskController{}, "*:Stat")                                   // 报告统计
 	beego.Router("/Task/Stat_Excel", &controllers.TaskController{}, "*:Stat_Excel")                       // 报告统计-excel
 	beego.Router("/Task/StatisticalRanking", &controllers.TaskController{}, "*:StatisticalRanking")       // 报告统计-excel
+	beego.Router("/Task/GenT_report_number", &controllers.TaskController{}, "*:GenT_report_number")       // 生成报告编号
 
 	// 日志
 	beego.Router("/TaskLogs/List", &controllers.TaskController{}, "*:Logs_List")
@@ -66,4 +67,5 @@ func init() {
 	beego.Router("/TaskTime/Get", &controllers.TaskController{}, "*:TaskTimeList") // 任务列表
 	beego.Router("/TaskTime/Add", &controllers.TaskController{}, "*:TaskTimeAdd")  // 添加任务
 	beego.Router("/TaskTime/End", &controllers.TaskController{}, "*:TaskTimeEnd")  // 编辑任务
+
 }

BIN
角色菜单.xlsx