فهرست منبع

2024-03-07 批量导入数据去除空格

zoie 1 سال پیش
والد
کامیت
85a0c9bbcc
8فایلهای تغییر یافته به همراه107 افزوده شده و 35 حذف شده
  1. 11 4
      Nats/Nats.go
  2. 10 0
      Nats/NatsServer/NatsServer.go
  3. 6 0
      controllers/Logs.go
  4. 15 8
      controllers/TaskData.go
  5. 47 7
      models/Certificate/Certificate.go
  6. 16 15
      models/Task/Task.go
  7. 1 1
      models/Task/TaskData.go
  8. 1 0
      routers/Logs.go

+ 11 - 4
Nats/Nats.go

@@ -20,7 +20,14 @@ func init() {
 	logs.Println("============Nats init============")
 	var err error
 	// 连接Nats服务器
-	lib.Nats, err = nats.Connect("nats://"+conf.NatsServer_Url, nats.MaxReconnects(10))
+	lib.Nats, err = nats.Connect("nats://"+conf.NatsServer_Url, nats.MaxReconnects(-1),
+		nats.DisconnectErrHandler(func(nc *nats.Conn, err error) {
+			logs.Error("nats 断开连接", err.Error())
+		}),
+		nats.ReconnectHandler(func(nc *nats.Conn) {
+			logs.Println("nats 重连...")
+		}))
+
 	nats.RetryOnFailedConnect(true)
 	if err != nil {
 		fmt.Println("nats 连接失败!")
@@ -39,16 +46,16 @@ func ReconnectNATS() {
 	// 循环监测连接状态并重新连接
 	var err error
 	for {
-		time.Sleep(10 * time.Minute)
+		time.Sleep(1 * time.Minute)
 		//time.Sleep(1 * time.Minute)
 
 		if !lib.Nats.IsConnected() {
 			lib.Nats, err = nats.Connect("nats://" + conf.NatsServer_Url)
 			if err != nil {
-				fmt.Println("无法重新连接到 NATS:", err)
+				logs.Println("无法重新连接到 NATS:", err)
 				continue
 			}
-			fmt.Println("成功重新连接到 NATS...")
+			logs.Println("成功重新连接到 NATS...")
 		}
 	}
 

+ 10 - 0
Nats/NatsServer/NatsServer.go

@@ -1,10 +1,12 @@
 package NatsServer
 
 import (
+	"ColdVerify_local/conf"
 	"ColdVerify_local/lib"
 	"ColdVerify_local/logs"
 	"ColdVerify_local/models/Task"
 	"errors"
+	"github.com/nats-io/nats.go"
 	"github.com/vmihailenco/msgpack/v5"
 	"time"
 )
@@ -44,6 +46,14 @@ func Update_Task(v Task.Task) error {
 func Read_Task(T_task_id string) (task Task.Task, err error) {
 	logs.Println("Nats =>", lib.FuncName(), T_task_id)
 
+	if !lib.Nats.IsConnected() {
+		lib.Nats, err = nats.Connect("nats://" + conf.NatsServer_Url)
+		if err != nil {
+			logs.Println("无法重新连接到 NATS:", err)
+		}
+		logs.Println("成功重新连接到 NATS...")
+	}
+
 	msg, err := lib.Nats.Request("ColdVerify_Server_Read_Task", []byte(T_task_id), 3*time.Second)
 	if err != nil {
 		logs.Error(lib.FuncName(), err.Error())

+ 6 - 0
controllers/Logs.go

@@ -71,3 +71,9 @@ func (c *LogsController) UserLogs() {
 	c.ServeJSON()
 	return
 }
+
+func (c *LogsController) Ping() {
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}

+ 15 - 8
controllers/TaskData.go

@@ -217,7 +217,7 @@ func (c *TaskDataController) TaskData_AddS() {
 			continue
 		}
 		v_list := strings.Split(v, "|")
-		id, sn := v_list[1], v_list[0]
+		id, sn := strings.Trim(v_list[1], " "), strings.Trim(v_list[0], " ")
 		sn1, ok := snMaps[id]
 		if !ok {
 			snMaps[id] = sn
@@ -442,7 +442,6 @@ func (c *TaskDataController) TaskData_Add() {
 	}
 	if len(sn) > 0 && sn != T_sn {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", T_id, sn)}
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("编号[%s]已被sn[%s]关联,请修改后重试!", T_id, sn)}
 		c.ServeJSON()
 		return
 	}
@@ -2171,6 +2170,15 @@ func (c *TaskDataController) Certificate_List() {
 	var r_jsons lib.R_JSONS
 
 	T_task_id := c.GetString("T_task_id")
+	T_sn := c.GetString("T_sn")
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
 	Task_r, err := NatsServer.Read_Task(T_task_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
@@ -2183,13 +2191,12 @@ func (c *TaskDataController) Certificate_List() {
 		return
 	}
 
-	List, err := Certificate.Read_Certificate_List(T_task_id)
-	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
-		c.ServeJSON()
-		return
-	}
+	List, cnt := Certificate.Read_Certificate_List(T_task_id, T_sn, page, page_z)
+
 	r_jsons.List = List
+	r_jsons.Page = page
+	r_jsons.Page_size = page_z
+	r_jsons.Num = int(cnt)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()

+ 47 - 7
models/Certificate/Certificate.go

@@ -7,7 +7,7 @@ import (
 	"fmt"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
-	"strings"
+	"strconv"
 )
 
 type Certificate_ struct {
@@ -17,28 +17,68 @@ type Certificate_ struct {
 }
 
 // 获取列表
-func Read_Certificate_List(T_task_id string) ([]Certificate_, error) {
+func Read_Certificate_List(T_task_id, T_sn string, page, page_z int) ([]Certificate_, int64) {
 	serverOrm := orm2.NewOrmUsingDB(conf.Server_AliasName)
 	localOrm := orm2.NewOrmUsingDB(conf.Local_AliasName)
 
+	pagez := page_z
+
+	var offset int
+	if page <= 1 {
+		offset = 0
+	} else {
+		page -= 1
+		offset = page * pagez
+	}
+
 	var maps []Certificate_
 	snList := []string{}
-	sql := "SELECT t_sn FROM z_task_data_" + T_task_id + "  GROUP BY t_sn"
+	sql := "SELECT t_sn FROM z_task_data_" + T_task_id + " GROUP BY t_sn"
 	fmt.Println(sql)
 	_, err := localOrm.Raw(sql).QueryRows(&snList)
 
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
-		return maps, err
+		return maps, 0
+	}
+
+	snListStr := ""
+	for _, id := range snList {
+		if snListStr != "" {
+			snListStr = snListStr + ","
+		}
+		snListStr = snListStr + "'" + id + "'"
+	}
+
+	sql_condition := " t__state=1"
+	if len(snListStr) > 0 {
+		sql_condition += " AND t_sn not in (" + snListStr + ")"
 	}
+	if len(T_sn) > 0 {
+		sql_condition += " AND t_sn='" + T_sn + "'"
+	}
+
+	sql = "SELECT count(*) FROM certificate WHERE" + sql_condition
 
-	sql = "SELECT * FROM certificate WHERE t__state=1 AND t_sn not in (" + strings.Join(snList, ",") + ") ORDER BY t_layout_no"
+	fmt.Println(sql)
+	var count int64
+	err = serverOrm.Raw(sql).QueryRow(&count)
+	if err != nil {
+		return maps, 0
+	}
+	//sql = "SELECT * FROM certificate WHERE t__state=1 AND t_sn not in (" + strings.Join(snList, ",") + ") ORDER BY t_layout_no"
+
+	// fixme 冷脸验证线上更新后再部署如下代码
+	sql = "SELECT * FROM certificate WHERE" + sql_condition
+	if page_z != 9999 {
+		sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
+	}
 
 	fmt.Println(sql)
 	_, err = serverOrm.Raw(sql).QueryRows(&maps)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
-		return maps, err
+		return maps, 0
 	}
-	return maps, nil
+	return maps, count
 }

+ 16 - 15
models/Task/Task.go

@@ -7,21 +7,22 @@ import (
 
 // 模板
 type Task struct {
-	Id                  int    `orm:"column(ID);size(11);auto;pk"`
-	T_class             int    `orm:"size(200);default(0)"` // 分类id
-	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_scheme            string `orm:"size(256);null"`       // 实施方案 负责人UUID
-	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_scheme_state      int    `orm:"size(2);default(0)"`   // 实施方案 状态 0 未完成 1 已完成
-	T_collection_state  int    `orm:"size(2);default(0)"`   // 数据采集 状态 0 未完成 1 已完成 2 采集中 3 已采集-无数据
-	T_reporting_state   int    `orm:"size(2);default(0)"`   // 报告编写 状态 0 未完成 1 已完成
-	T_delivery_state    int    `orm:"size(2);default(0)"`   // 交付审核 状态 0 未完成 1 已完成 2 采集中
+	Id                     int    `orm:"column(ID);size(11);auto;pk"`
+	T_class                int    `orm:"size(200);default(0)"` // 分类id
+	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_class string `orm:"size(256);null"`       // 模板id
+	T_VerifyTemplate_id    string `orm:"size(256);null"`       // 模板id
+	T_deadline             string `orm:"size(256);null"`       // 截止时间
+	T_scheme               string `orm:"size(256);null"`       // 实施方案 负责人UUID
+	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_scheme_state         int    `orm:"size(2);default(0)"`   // 实施方案 状态 0 未完成 1 已完成
+	T_collection_state     int    `orm:"size(2);default(0)"`   // 数据采集 状态 0 未完成 1 数据来源已完成 2 处理中 3 已采集-无数据 4-数据编辑已完成
+	T_reporting_state      int    `orm:"size(2);default(0)"`   // 报告编写 状态 0 未完成 1 已完成
+	T_delivery_state       int    `orm:"size(2);default(0)"`   // 交付审核 状态 0 未完成 1 已完成 2 处理中
 
 	T_doc1 string `orm:"type(text);null"` // 封面
 	T_pdf1 string `orm:"type(text);null"` // 封面

+ 1 - 1
models/Task/TaskData.go

@@ -277,7 +277,7 @@ func Read_TaskData_ById_List_(T_task_id string, SN string) []TaskData_ {
 	sql_condition += " t_sn ='" + SN + "'"
 
 	//fmt.Println("maps_z;",maps_z[0][0])
-	sql := "SELECT ID,t_sn,t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i') AS t_times,t_time  FROM z_task_data_" + T_task_id + " WHERE " + sql_condition + " ORDER BY t_time "
+	sql := "SELECT ID,t_sn,t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i') AS t_times,t_time  FROM z_task_data_" + T_task_id + " WHERE " + sql_condition + " ORDER BY t_time "
 
 	fmt.Println(sql)
 	_, err := o.Raw(sql).QueryRows(&maps)

+ 1 - 0
routers/Logs.go

@@ -8,4 +8,5 @@ import (
 func init() {
 	beego.Router("/Logs/List", &controllers.LogsController{}, "*:List")         //
 	beego.Router("/UserLogs/List", &controllers.LogsController{}, "*:UserLogs") //
+	beego.Router("/Ping", &controllers.LogsController{}, "*:Ping")              //
 }