Răsfoiți Sursa

add:验证工具添加记录查询

zoie 2 zile în urmă
părinte
comite
d2debacf8a

+ 1 - 1
controllers/Stock.go

@@ -3153,7 +3153,7 @@ func Cron_StockMonth_Add() {
 
 func generateMonthList(startMonth time.Time) []string {
 	var months []string
-	endMonth := time.Now().AddDate(0, 0, 0)
+	endMonth := time.Now().AddDate(0, 1, 0)
 	for month := startMonth; month.Before(endMonth); month = month.AddDate(0, 1, 0) {
 		fmt.Println("=========================", month.Format("2006-01"))
 		months = append(months, month.Format("2006-01"))

+ 262 - 102
controllers/Validation.go

@@ -1,6 +1,7 @@
 package controllers
 
 import (
+	"ERP_storage/Nats/NatsServer"
 	"ERP_storage/conf"
 	"ERP_storage/logs"
 	"ERP_storage/models/Account"
@@ -34,84 +35,103 @@ func (c *ValidationController) Prepare() {
 
 func (c *ValidationController) AddValidation() {
 	var ValidationList []validationtool.AddValidationTool
-	err := json.Unmarshal(c.Ctx.Input.RequestBody, &ValidationList)
-	if err != nil {
+	errs := json.Unmarshal(c.Ctx.Input.RequestBody, &ValidationList)
+	if errs != nil {
 		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "json 序列化失败!", Data: nil}
 		c.ServeJSON()
 		return
 	}
 
 	o := orm.NewOrm()
-	vali := validationtool.NewValidationTool(o)
 	o.Begin() // 开始事务
-
+	vali := validationtool.NewValidationTool(o)
+	valiRecord := validationtool.NewValidationToolRecord(o)
+	BatchNumber := time.Now().Format("2006-01-02 15:04:05")
 	for _, tool := range ValidationList {
-		if len(tool.T_sn) <= 0 {
+		if len(tool.T_sn) == 0 {
 			o.Rollback() // 回滚事务
 			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
 			c.ServeJSON()
 			return
 		}
-		r, err := vali.ReadValidationBytSn(tool.T_sn)
-		if err != nil {
-			if errors.Is(err, orm.ErrNoRows) {
-				var validataiontool validationtool.ValidationTool
-				user := Stock.Read_MqttUser(tool.T_sn)
-				validataiontool.T_iccid = user.Iccid
-				validataiontool.T_imei = user.Imei
-				validataiontool.T_uuid = c.User.T_uuid
-				validataiontool.Validationnumber = tool.Validationnumber
-				validataiontool.T_sn = tool.T_sn
-				validataiontool.T_remark = tool.T_remark
-				validataiontool.T_state = 2
-				validataiontool.T_class = tool.T_class
-				validataiontool.UpdateTime = time.Now()
-				_, err := vali.ADDValidationTool(validataiontool)
-				if err != nil {
-					o.Rollback() // 回滚事务
-					c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
-					c.ServeJSON()
-					return
-				}
-			} else {
+		validation, err := vali.ReadValidationBytSn(tool.T_sn)
+		if err != nil && !errors.Is(err, orm.ErrNoRows) {
+			o.Rollback() // 回滚事务
+			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "查询失败!", Data: nil}
+			c.ServeJSON()
+			return
+		} else if errors.Is(err, orm.ErrNoRows) {
+			var validataiontool validationtool.ValidationTool
+			user := Stock.Read_MqttUser(tool.T_sn)
+			validataiontool.T_iccid = user.Iccid
+			validataiontool.T_imei = user.Imei
+			validataiontool.T_uuid = c.User.T_uuid
+			validataiontool.Validationnumber = tool.Validationnumber
+			validataiontool.T_sn = tool.T_sn
+			validataiontool.T_remark = tool.T_remark
+			validataiontool.T_state = validationtool.ValidationToolStateStockIn
+			validataiontool.T_class = tool.T_class
+			validataiontool.UpdateTime = time.Now()
+			_, err = vali.ADDValidationTool(validataiontool)
+			if err != nil {
 				o.Rollback() // 回滚事务
-				c.Data["json"] = lib.JSONS{Code: 1201, Msg: "查询失败!", Data: nil}
+				c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
 				c.ServeJSON()
 				return
 			}
-		} else {
-			// 修改设备
-			con := make(map[string]string)
-			if len(tool.Validationnumber) != 0 {
-				con["validationnumber"] = tool.Validationnumber
-			}
-			if r.T_state != 2 {
-				con["t_state"] = "2" // 待使用
-			}
-			con["t_remark"] = tool.T_remark
-			con["t_project"] = ""
-			con["lend_user"] = ""
-			err = vali.UpdateValidationTool(r.T_sn, con)
+			_, err = valiRecord.ADD(validataiontool, BatchNumber)
 			if err != nil {
 				o.Rollback() // 回滚事务
-				c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
+				c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
 				c.ServeJSON()
 				return
 			}
 		}
-	}
 
-	err = o.Commit() // 提交事务
-	if err != nil {
-		o.Rollback() // 回滚事务
-		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
+		//修改设备状态
+		validation.T_state = validationtool.ValidationToolStateStockIn
+		cols := []string{"t_state"}
+		if len(tool.T_remark) != 0 {
+			validation.T_remark = tool.T_remark
+			cols = append(cols, "T_remark")
+		} else {
+			validation.T_remark = ""
+			cols = append(cols, "T_remark")
+		}
+		if len(tool.Validationnumber) != 0 {
+			validation.Validationnumber = tool.Validationnumber
+			cols = append(cols, "validationnumber")
+		}
+		validation.LendUser = ""
+		cols = append(cols, "LendUser")
+
+		validation.T_project = ""
+		cols = append(cols, "T_project")
+		err = vali.UpdateValidationTool(validation, cols...)
+		if err != nil {
+			o.Rollback() // 回滚事务
+			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "入库失败!", Data: nil}
+			c.ServeJSON()
+			return
+		}
+
+		_, err = valiRecord.ADD(validation, BatchNumber)
+		if err != nil {
+			o.Rollback() // 回滚事务
+			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
+			c.ServeJSON()
+			return
+		}
+
+		o.Commit() // 提交事务
+
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "入库成功!", Data: nil}
 		c.ServeJSON()
 		return
 	}
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "入库成功!", Data: nil}
-	c.ServeJSON()
-	return
+	NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "添加", ValidationList)
+
 }
 
 func (c *ValidationController) ValidationList() {
@@ -165,6 +185,8 @@ func (c *ValidationController) DeleteValidationTool() {
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "删除成功!", Data: nil}
 	c.ServeJSON()
 }
+
+// 出库
 func (c *ValidationController) UpdateValidationTool() {
 	var lendValidationList []validationtool.LendValidationTool
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &lendValidationList)
@@ -173,47 +195,60 @@ func (c *ValidationController) UpdateValidationTool() {
 		c.ServeJSON()
 		return
 	}
-	vali := validationtool.NewValidationTool(orm.NewOrm())
 	o := orm.NewOrm()
 	o.Begin()
+	vali := validationtool.NewValidationTool(o)
+	valiRecord := validationtool.NewValidationToolRecord(o)
+	BatchNumber := time.Now().Format("2006-01-02 15:04:05")
+
 	for _, tool := range lendValidationList {
 		if len(tool.T_sn) <= 0 {
 			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
 			c.ServeJSON()
 			return
 		}
-		r, err := vali.ReadValidationBytSn(tool.T_sn)
+		validation, err2 := vali.ReadValidationBytSn(tool.T_sn)
 		sprintf := fmt.Sprintf("当前sn:%v 未入库", tool.T_sn)
-		if err != nil || r.T_state != 2 {
+		if err2 != nil || validation.T_state != validationtool.ValidationToolStateStockIn {
 			o.Rollback()
 			c.Data["json"] = lib.JSONS{Code: 1201, Msg: sprintf, Data: nil}
 			c.ServeJSON()
 			return
 		}
 		//修改设备状态
-		con := make(map[string]string)
+		validation.T_state = validationtool.ValidationToolStateStockOut
+		cols := []string{"t_state"}
 		if len(tool.T_remark) != 0 {
-			con["t_remark"] = tool.T_remark
+			validation.T_remark = tool.T_remark
+			cols = append(cols, "T_remark")
 		}
 		if len(tool.Validationnumber) != 0 {
-			con["validationnumber"] = tool.Validationnumber
+			validation.Validationnumber = tool.Validationnumber
+			cols = append(cols, "validationnumber")
 		}
-		con["t_state"] = "1"
 		if len(tool.LendUser) != 0 {
-			con["lend_user"] = tool.LendUser
+			validation.LendUser = tool.LendUser
+			cols = append(cols, "LendUser")
 		}
 		if len(tool.T_project) != 0 {
-			con["t_project"] = tool.T_project
-			con["t_project_log"] = r.T_project_log + tool.T_project
+			validation.T_project = tool.T_project
+			cols = append(cols, "T_project")
 		}
-		con["update_time"] = time.Now().Format("2006-01-02 15:04:05")
-		err = vali.UpdateValidationTool(tool.T_sn, con)
+		err = vali.UpdateValidationTool(validation, cols...)
 		if err != nil {
 			o.Rollback()
 			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
 			c.ServeJSON()
 			return
 		}
+
+		_, err = valiRecord.ADD(validation, BatchNumber)
+		if err != nil {
+			o.Rollback() // 回滚事务
+			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
+			c.ServeJSON()
+			return
+		}
 	}
 	err = o.Commit() // 提交事务
 	if err != nil {
@@ -222,6 +257,9 @@ func (c *ValidationController) UpdateValidationTool() {
 		c.ServeJSON()
 		return
 	}
+
+	NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "出库", lendValidationList)
+
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "修改成功!", Data: nil}
 	c.ServeJSON()
 	return
@@ -236,8 +274,11 @@ func (c *ValidationController) ScrapValidationTool() {
 		c.ServeJSON()
 		return
 	}
-	vali := validationtool.NewValidationTool(orm.NewOrm())
 	o := orm.NewOrm()
+	vali := validationtool.NewValidationTool(o)
+	valiRecord := validationtool.NewValidationToolRecord(o)
+	BatchNumber := time.Now().Format("2006-01-02 15:04:05")
+
 	o.Begin()
 	for _, tool := range lendValidationList {
 		if len(tool.T_sn) <= 0 {
@@ -245,7 +286,7 @@ func (c *ValidationController) ScrapValidationTool() {
 			c.ServeJSON()
 			return
 		}
-		_, errs := vali.ReadValidationBytSn(tool.T_sn)
+		validation, errs := vali.ReadValidationBytSn(tool.T_sn)
 		if errs != nil {
 			o.Rollback()
 			if errs.Error() == orm.ErrNoRows.Error() {
@@ -258,29 +299,42 @@ func (c *ValidationController) ScrapValidationTool() {
 				return
 			}
 		}
+
 		//修改设备状态
-		con := make(map[string]string)
+		validation.T_state = validationtool.ValidationToolStateStockScrap
+		cols := []string{"t_state"}
 		if len(tool.T_remark) != 0 {
-			con["t_remark"] = tool.T_remark
+			validation.T_remark = tool.T_remark
+			cols = append(cols, "T_remark")
 		}
 		if len(tool.Validationnumber) != 0 {
-			con["validationnumber"] = tool.Validationnumber
+			validation.Validationnumber = tool.Validationnumber
+			cols = append(cols, "validationnumber")
 		}
-		con["t_state"] = "4"
 		if len(tool.LendUser) != 0 {
-			con["lend_user"] = tool.LendUser
+			validation.LendUser = tool.LendUser
+			cols = append(cols, "LendUser")
 		}
 		if len(tool.T_project) != 0 {
-			con["t_project"] = tool.T_project
+			validation.T_project = tool.T_project
+			cols = append(cols, "T_project")
 		}
-		con["update_time"] = time.Now().Format("2006-01-02 15:04:05")
-		err = vali.UpdateValidationTool(tool.T_sn, con)
+		err = vali.UpdateValidationTool(validation, cols...)
 		if err != nil {
 			o.Rollback()
 			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
 			c.ServeJSON()
 			return
 		}
+
+		_, err = valiRecord.ADD(validation, BatchNumber)
+		if err != nil {
+			o.Rollback() // 回滚事务
+			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
+			c.ServeJSON()
+			return
+		}
+
 	}
 	err = o.Commit() // 提交事务
 	if err != nil {
@@ -289,6 +343,9 @@ func (c *ValidationController) ScrapValidationTool() {
 		c.ServeJSON()
 		return
 	}
+
+	NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "报废", lendValidationList)
+
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "提交成功!", Data: nil}
 	c.ServeJSON()
 	return
@@ -303,16 +360,19 @@ func (c *ValidationController) RepairValidationTool() {
 		c.ServeJSON()
 		return
 	}
-	vali := validationtool.NewValidationTool(orm.NewOrm())
 	o := orm.NewOrm()
 	o.Begin()
+	vali := validationtool.NewValidationTool(o)
+	valiRecord := validationtool.NewValidationToolRecord(o)
+	BatchNumber := time.Now().Format("2006-01-02 15:04:05")
+
 	for _, tool := range lendValidationList {
 		if len(tool.T_sn) <= 0 {
 			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "T_sn不能为空!", Data: nil}
 			c.ServeJSON()
 			return
 		}
-		_, errs := vali.ReadValidationBytSn(tool.T_sn)
+		validation, errs := vali.ReadValidationBytSn(tool.T_sn)
 		if errs != nil {
 			o.Rollback()
 			if errs.Error() == orm.ErrNoRows.Error() {
@@ -326,30 +386,45 @@ func (c *ValidationController) RepairValidationTool() {
 			}
 		}
 		//修改设备状态
-		con := make(map[string]string)
+		validation.T_state = validationtool.ValidationToolStateStockRepair
+		cols := []string{"t_state"}
 		if len(tool.T_remark) != 0 {
-			con["t_remark"] = tool.T_remark
+			validation.T_remark = tool.T_remark
+			cols = append(cols, "T_remark")
 		}
 		if len(tool.Validationnumber) != 0 {
-			con["validationnumber"] = tool.Validationnumber
+			validation.Validationnumber = tool.Validationnumber
+			cols = append(cols, "validationnumber")
 		}
-		con["t_state"] = "3"
 		if len(tool.LendUser) != 0 {
-			con["lend_user"] = tool.LendUser
+			validation.LendUser = tool.LendUser
+			cols = append(cols, "LendUser")
 		}
 		if len(tool.T_project) != 0 {
-			con["t_project"] = tool.T_project
+			validation.T_project = tool.T_project
+			cols = append(cols, "T_project")
 		}
-		con["update_time"] = time.Now().Format("2006-01-02 15:04:05")
-		err = vali.UpdateValidationTool(tool.T_sn, con)
+		err = vali.UpdateValidationTool(validation, cols...)
 		if err != nil {
 			o.Rollback()
 			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "修改失败!", Data: nil}
 			c.ServeJSON()
 			return
 		}
+
+		_, err = valiRecord.ADD(validation, BatchNumber)
+		if err != nil {
+			o.Rollback() // 回滚事务
+			c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
+			c.ServeJSON()
+			return
+		}
+
 	}
 	err = o.Commit() // 提交事务
+
+	NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "维修", lendValidationList)
+
 	if err != nil {
 		o.Rollback() // 回滚事务
 		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "提交事务失败!", Data: nil}
@@ -386,8 +461,8 @@ func (c *ValidationController) UpdateValidationToolBySn() {
 	Id := c.GetString("Id")
 	Validationnumber := c.GetString("Validationnumber")
 	T_remark := c.GetString("T_remark")
-	T_state := c.GetString("T_state")
-	T_class := c.GetString("T_class")
+	T_state, _ := c.GetInt("T_state")
+	T_class, _ := c.GetInt("T_class")
 	if len(sn) <= 0 {
 		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "sn不能为空!", Data: nil}
 		c.ServeJSON()
@@ -398,39 +473,62 @@ func (c *ValidationController) UpdateValidationToolBySn() {
 		c.ServeJSON()
 		return
 	}
-	con := make(map[string]string)
-	if len(Validationnumber) > 0 {
-		con["validationnumber"] = Validationnumber
-	}
-	if len(T_remark) > 0 {
-		con["t_remark"] = T_remark
-	}
-	if len(T_state) > 0 {
-		con["t_state"] = T_state
-	}
-	if len(T_class) > 0 {
-		con["t_class"] = T_class
-	}
-	con["update_time"] = time.Now().Format("2006-01-02 15:04:05")
+
 	vali := validationtool.NewValidationTool(orm.NewOrm())
+	valiRecord := validationtool.NewValidationToolRecord(orm.NewOrm())
+
 	r, err := vali.ReadValidationById(Id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil}
 		c.ServeJSON()
 		return
 	}
+
+	cols := []string{}
+	if len(Validationnumber) > 0 {
+		r.Validationnumber = Validationnumber
+		cols = append(cols, "Validationnumber")
+	}
+	if len(T_remark) > 0 {
+		r.T_remark = T_remark
+		cols = append(cols, "T_remark")
+	}
+	if T_state > 0 {
+		r.T_state = T_state
+		cols = append(cols, "T_state")
+	}
+	if T_class > 0 {
+		r.T_class = T_class
+		cols = append(cols, "T_class")
+
+	}
+
 	if !strings.EqualFold(r.T_sn, sn) {
-		con["t_sn"] = sn
+		r.T_sn = sn
 		user := Stock.Read_MqttUser(sn)
-		con["t_iccid"] = user.Iccid
-		con["t_imei"] = user.Imei
+		r.T_iccid = user.Iccid
+		r.T_imei = user.Imei
+		cols = append(cols, "T_sn", "T_iccid", "T_imei")
+
 	}
-	err = vali.UpdateValidationToolById(Id, con)
+	err = vali.UpdateValidationTool(r, cols...)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "当前设备不存在!", Data: nil}
 		c.ServeJSON()
 		return
 	}
+
+	BatchNumber := time.Now().Format("2006-01-02 15:04:05")
+
+	_, err = valiRecord.ADD(r, BatchNumber)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 1201, Msg: "保存历史记录失败!", Data: nil}
+		c.ServeJSON()
+		return
+	}
+
+	NatsServer.AddUserLogs(c.User.T_uuid, "验证工具", "通过sn修改验证工具", r)
+
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "成功!", Data: nil}
 	c.ServeJSON()
 }
@@ -653,3 +751,65 @@ func (c *ValidationController) User_List() {
 	c.ServeJSON()
 	return
 }
+
+func (c *ValidationController) Record_List() {
+	// 分页参数 初始化
+	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_state := c.GetString("T_state")
+	validationnumber := c.GetString("Validationnumber")
+	T_sn := c.GetString("T_sn")
+	t_iccid := c.GetString("t_iccid")
+	t_imei := c.GetString("t_imei")
+	LendUser := c.GetString("LendUser")
+	T_project := c.GetString("T_project")
+	T_class := c.GetString("T_class")
+	valiRecord := validationtool.NewValidationToolRecord(orm.NewOrm())
+
+	R_List, R_cnt := valiRecord.Read_Validation_List(validationnumber, T_sn, t_iccid, t_imei, T_state, LendUser, T_project, T_class, page, page_z)
+
+	var r_jsons lib.R_JSONS
+	r_jsons.Num = R_cnt
+	r_jsons.Data = R_List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+func (c *ValidationController) Operation_List() {
+	// 分页参数 初始化
+	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_state := c.GetString("T_state")
+	T_sn := c.GetString("T_sn")
+	LendUser := c.GetString("LendUser")
+	T_project := c.GetString("T_project")
+	valiRecord := validationtool.NewValidationToolRecord(orm.NewOrm())
+
+	R_List, R_cnt := valiRecord.Read_Operation_List(T_sn, T_state, LendUser, T_project, page, page_z)
+
+	var r_jsons lib.R_JSONS
+	r_jsons.Num = R_cnt
+	r_jsons.Data = R_List
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}

+ 1 - 0
models/init.go

@@ -31,6 +31,7 @@ func AutoMigrateDB() {
 			&Percentage.Percentage{},
 			&RepairWorkOrder.RepairWorkOrder{},
 			&Purchase.Purchase{},
+			&validationtool.ValidationToolHistory{},
 		)
 	if err != nil {
 		log.Fatalf("migrate db fail: %v", err)

+ 24 - 24
models/validationtool/validation.go

@@ -2,7 +2,6 @@ package validationtool
 
 import (
 	"ERP_storage/logs"
-	"errors"
 	"fmt"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
@@ -11,6 +10,25 @@ import (
 	"time"
 )
 
+const (
+	Delete int = iota
+	ValidationToolStateStockOut
+	ValidationToolStateStockIn
+	ValidationToolStateStockRepair
+	ValidationToolStateStockScrap
+	ValidationToolStateStockDamage
+)
+
+var (
+	ValidationToolStateMap = map[int]string{
+		ValidationToolStateStockOut:    "已出库",
+		ValidationToolStateStockIn:     "未出库",
+		ValidationToolStateStockRepair: "维修中",
+		ValidationToolStateStockScrap:  "已报废",
+		ValidationToolStateStockDamage: "已损坏",
+	}
+)
+
 type ValidationTool struct {
 	Id               int       `orm:"column(ID);size(11);auto;pk"`                           // 合同编号
 	T_class          int       `orm:"size(20);default(0)"`                                   // 产品分类 T_class=0 冷链验证 	// 产品id
@@ -21,9 +39,8 @@ type ValidationTool struct {
 	History_iccid    string    `orm:"size(256);type(json);null"`                             // 历史sim卡号
 	History_imei     string    `orm:"size(256);type(json);null"`                             // 历史模组
 	T_state          int       `orm:"size(2);default(2)"`                                    // 1-已出库 2-待使用(已入库)  3-维修中 4-已报废
-	T_remark         string    `orm:"type(text);null"`                                       // 备注
+	T_remark         string    `orm:"type(text);null"`                                       // 备注r
 	T_project        string    `orm:"type(text);null"`                                       // 出库项目
-	T_project_log    string    `orm:"type(text);null"`                                       // 出库项目
 	T_uuid           string    `orm:"size(256);null"`                                        //用户uuid
 	LendUser         string    `orm:"size(256);null"`                                        //借出用户
 	CreateTime       time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
@@ -58,16 +75,10 @@ func (t *ValidationTool) TableName() string {
 type ValidationImpl struct {
 	orm orm.Ormer
 }
-type ValidationUseRecordImpl struct {
-	orm orm.Ormer
-}
 
 func NewValidationTool(orm orm.Ormer) *ValidationImpl {
 	return &ValidationImpl{orm: orm}
 }
-func NewValidationToolUseRecord(orm orm.Ormer) *ValidationUseRecordImpl {
-	return &ValidationUseRecordImpl{orm: orm}
-}
 
 func init() {
 	//注册模型
@@ -76,15 +87,9 @@ func init() {
 
 // ADDValidationTool 添加
 func (dao *ValidationImpl) ADDValidationTool(r ValidationTool) (id int64, err error) {
-	_, err = dao.ReadValidationBytSn(r.T_sn)
+	id, err = dao.orm.Insert(&r)
 	if err != nil {
-		if errors.Is(err, orm.ErrNoRows) {
-			id, err = dao.orm.Insert(&r)
-			if err != nil {
-				logs.Error(lib.FuncName(), err)
-			}
-			return id, err
-		}
+		logs.Error(lib.FuncName(), err)
 	}
 	return id, err
 }
@@ -103,13 +108,8 @@ func (dao *ValidationImpl) ReadValidationBytSn(T_sn string) (r ValidationTool, e
 	}
 	return
 }
-func (dao *ValidationImpl) UpdateValidationTool(TSn string, con map[string]string) (err error) {
-	qs := dao.orm.QueryTable(new(ValidationTool))
-	params := orm.Params{}
-	for key, value := range con {
-		params[key] = value
-	}
-	_, err = qs.Filter("T_sn", TSn).Update(orm2.Params(params))
+func (dao *ValidationImpl) UpdateValidationTool(r ValidationTool, cols ...string) (err error) {
+	_, err = dao.orm.Update(&r, cols...)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 	}

+ 288 - 0
models/validationtool/validationHistory.go

@@ -0,0 +1,288 @@
+package validationtool
+
+import (
+	"ERP_storage/logs"
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	"gogs.baozhida.cn/zoie/ERP_libs/lib"
+	"strconv"
+	"time"
+)
+
+type ValidationToolHistory struct {
+	Id               int       `orm:"column(ID);size(11);auto;pk"`                           // 合同编号
+	T_class          int       `orm:"size(20);default(0)"`                                   // 产品分类 T_class=0 冷链验证 	// 产品id
+	Validationnumber string    `orm:"size(256);null"`                                        // 验证工具编号
+	T_sn             string    `orm:"size(256);null"`                                        // 设备sn
+	T_iccid          string    `orm:"size(256);null"`                                        // sim卡号
+	T_imei           string    `orm:"size(256);null"`                                        // 模组imei
+	History_iccid    string    `orm:"size(256);type(json);null"`                             // 历史sim卡号
+	History_imei     string    `orm:"size(256);type(json);null"`                             // 历史模组
+	T_state          int       `orm:"size(2);default(2)"`                                    // 1-已出库 2-待使用(已入库)  3-维修中 4-已报废
+	T_remark         string    `orm:"type(text);null"`                                       // 备注r
+	T_project        string    `orm:"type(text);null"`                                       // 出库项目
+	T_uuid           string    `orm:"size(256);null"`                                        //用户uuid
+	LendUser         string    `orm:"size(256);null"`                                        //借出用户
+	BatchNumber      string    `orm:"size(256);null"`                                        //批号
+	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 保存时都会对时间自动更新
+}
+
+type ValidationToolHistory_R struct {
+	Id               int    // 合同编号
+	T_class          int    // 产品分类 T_class=0 冷链验证 	// 产品id
+	Validationnumber string // 验证工具编号
+	T_sn             string // 设备sn
+	T_iccid          string // sim卡号
+	T_imei           string // 模组imei
+	History_iccid    string // 历史sim卡号
+	History_imei     string // 历史模组
+	T_state          int    // 1-已出库 2-待使用(已入库)  3-维修中 4-已报废
+	T_remark         string // 备注r
+	T_project        string // 出库项目
+	T_uuid           string //用户uuid
+	LendUser         string //借出用户
+	CreateTime       string //auto_now_add 第一次保存时才设置时间
+	UpdateTime       string //auto_now 每次 model 保存时都会对时间自动更新
+}
+
+type ValidationToolHistory_R2 struct {
+	Id               int      //  合同编号
+	T_class          int      //  产品分类 T_class=0 冷链验证 	// 产品id
+	Validationnumber string   //  验证工具编号
+	T_sn             string   //  设备sn
+	T_iccid          string   //  sim卡号
+	T_imei           string   //  模组imei
+	History_iccid    string   //  历史sim卡号
+	History_imei     string   //  历史模组
+	T_state          int      //  1-已出库 2-待使用(已入库)  3-维修中 4-已报废
+	T_remark         string   //  备注r
+	T_project        string   //  出库项目
+	T_uuid           string   //	用户uuid
+	LendUser         string   //	借出用户
+	BatchNumber      string   //	批号
+	T_sn_List        []string //	批号
+	CreateTime       string   //	auto_now_add 第一次保存时才设置时间
+	UpdateTime       string   //	auto_now 每次 model 保存时都会对时间自动更新
+}
+
+func ValidationToolHistoryToValidationToolHistory_R(t ValidationToolHistory) (r ValidationToolHistory_R) {
+	r.Id = t.Id
+	r.T_class = t.T_class
+	r.Validationnumber = t.Validationnumber
+	r.T_sn = t.T_sn
+	r.T_iccid = t.T_iccid
+	r.T_imei = t.T_imei
+	r.History_iccid = t.History_iccid
+	r.History_imei = t.History_imei
+	r.T_state = t.T_state
+	r.T_remark = t.T_remark
+	r.T_project = t.T_project
+	r.T_uuid = t.T_uuid
+	r.LendUser = t.LendUser
+	r.CreateTime = t.CreateTime.Format("2006-01-02 15:04:05")
+	r.UpdateTime = t.UpdateTime.Format("2006-01-02 15:04:05")
+	return r
+}
+func ValidationToolHistoryToValidationToolHistory_R2(t ValidationToolHistory) (r ValidationToolHistory_R2) {
+	r.Id = t.Id
+	r.T_class = t.T_class
+	r.Validationnumber = t.Validationnumber
+	r.T_sn = t.T_sn
+	r.T_iccid = t.T_iccid
+	r.T_imei = t.T_imei
+	r.History_iccid = t.History_iccid
+	r.History_imei = t.History_imei
+	r.T_state = t.T_state
+	r.T_remark = t.T_remark
+	r.T_project = t.T_project
+	r.T_uuid = t.T_uuid
+	r.LendUser = t.LendUser
+	r.BatchNumber = t.BatchNumber
+	r.T_sn_List = ReadSNListBytBatchNumber(t.BatchNumber)
+	r.CreateTime = t.CreateTime.Format("2006-01-02 15:04:05")
+	r.UpdateTime = t.UpdateTime.Format("2006-01-02 15:04:05")
+	return r
+}
+
+func (t *ValidationToolHistory) TableName() string {
+	return "validation_tool_history"
+}
+
+type ValidationToolRecordImpl struct {
+	orm orm.Ormer
+}
+
+func NewValidationToolRecord(orm orm.Ormer) *ValidationToolRecordImpl {
+	return &ValidationToolRecordImpl{orm: orm}
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(ValidationToolHistory))
+}
+
+// ADDValidationTool 添加
+func (dao *ValidationToolRecordImpl) ADD(r ValidationTool, BatchNumber string) (id int64, err error) {
+	his := ValidationToolHistory{
+		T_class:          r.T_class,
+		Validationnumber: r.Validationnumber,
+		T_sn:             r.T_sn,
+		T_iccid:          r.T_iccid,
+		T_imei:           r.T_imei,
+		History_iccid:    r.History_iccid,
+		History_imei:     r.History_imei,
+		T_state:          r.T_state,
+		T_remark:         r.T_remark,
+		T_project:        r.T_project,
+		T_uuid:           r.T_uuid,
+		LendUser:         r.LendUser,
+		BatchNumber:      BatchNumber,
+	}
+	id, err = dao.orm.Insert(&his)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	return id, err
+
+}
+func ReadSNListBytBatchNumber(BatchNumber string) (r []string) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(ValidationToolHistory))
+	var maps []ValidationToolHistory
+	_, err := qs.Filter("BatchNumber", BatchNumber).OrderBy("CreateTime").All(&maps)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	for _, v := range maps {
+		r = append(r, v.T_sn)
+	}
+	return
+}
+
+func (dao *ValidationToolRecordImpl) Read_Validation_List(Validationnumber, T_sn, T_iccid, T_imei, T_State, LendUser, T_project, T_class string,
+	page, page_z int) (r []ValidationToolHistory_R, cnt int64) {
+	var offset int
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = (page - 1) * page_z
+	}
+
+	// 过滤
+	sqlWhere := " WHERE id > 0"
+	if len(Validationnumber) > 0 {
+		sqlWhere += " AND validationnumber like \"%" + Validationnumber + "%\""
+	}
+	if len(T_State) > 0 {
+		sqlWhere += " AND t_state like \"%" + T_State + "%\""
+	}
+	if len(T_sn) > 0 {
+		sqlWhere += " AND t_sn like \"%" + T_sn + "%\""
+	}
+	if len(T_iccid) > 0 {
+		sqlWhere += " AND t_iccid like \"%" + T_iccid + "%\""
+	}
+	if len(T_imei) > 0 {
+		sqlWhere += " AND t_imei like \"%" + T_imei + "%\""
+	}
+	if len(LendUser) > 0 {
+		sqlWhere += " AND lend_user like \"%" + LendUser + "%\""
+	}
+	if len(T_project) > 0 {
+		sqlWhere += " AND t_project like \"%" + T_project + "%\""
+	}
+	if len(T_class) > 0 {
+		sqlWhere += " AND t_class like \"%" + T_class + "%\""
+	}
+	var maps_z []orm2.ParamsList
+	// 获取总条数
+	sql := "SELECT COUNT(*) FROM validation_tool_history"
+	sql = sql + sqlWhere
+	fmt.Println(sql)
+	_, err := dao.orm.Raw(sql).ValuesList(&maps_z)
+	if err != nil {
+		return r, 0
+	}
+	if len(maps_z) == 0 {
+		return r, 0
+	}
+	sql = "SELECT * FROM validation_tool_history"
+
+	sql = sql + sqlWhere
+
+	sql += " ORDER BY create_time DESC"
+
+	sql += " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
+
+	fmt.Println(sql)
+	var maps []ValidationToolHistory
+	_, err = dao.orm.Raw(sql).QueryRows(&maps)
+	if err != nil {
+		return r, 0
+	}
+	for _, v := range maps {
+		r = append(r, ValidationToolHistoryToValidationToolHistory_R(v))
+	}
+
+	count, _ := strconv.Atoi(maps_z[0][0].(string))
+	return r, int64(count)
+}
+func (dao *ValidationToolRecordImpl) Read_Operation_List(T_sn, T_State, LendUser, T_project string,
+	page, page_z int) (r []ValidationToolHistory_R2, cnt int64) {
+	var offset int
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = (page - 1) * page_z
+	}
+
+	// 过滤
+	sqlWhere := " WHERE id > 0"
+	if len(T_State) > 0 {
+		sqlWhere += " AND t_state like \"%" + T_State + "%\""
+	}
+	if len(T_sn) > 0 {
+		sqlWhere += " AND t_sn like \"%" + T_sn + "%\""
+	}
+	if len(LendUser) > 0 {
+		sqlWhere += " AND lend_user like \"%" + LendUser + "%\""
+	}
+	if len(T_project) > 0 {
+		sqlWhere += " AND t_project like \"%" + T_project + "%\""
+	}
+	var maps_z []orm2.ParamsList
+	// 获取总条数
+	sql := "SELECT COUNT(*) from (select batch_number FROM validation_tool_history "
+	sql += sqlWhere
+	sql += " GROUP BY batch_number) A"
+	fmt.Println(sql)
+	_, err := dao.orm.Raw(sql).ValuesList(&maps_z)
+	if err != nil {
+		return r, 0
+	}
+	if len(maps_z) == 0 {
+		return r, 0
+	}
+	sql = "SELECT * FROM validation_tool_history"
+
+	sql = sql + sqlWhere
+
+	sql += " GROUP BY batch_number ORDER BY batch_number DESC"
+
+	sql += " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
+
+	fmt.Println(sql)
+	var maps []ValidationToolHistory
+	_, err = dao.orm.Raw(sql).QueryRows(&maps)
+	if err != nil {
+		return r, 0
+	}
+	for _, v := range maps {
+		r = append(r, ValidationToolHistoryToValidationToolHistory_R2(v))
+	}
+
+	count, _ := strconv.Atoi(maps_z[0][0].(string))
+	return r, int64(count)
+}

+ 2 - 0
routers/vaildationTool.go

@@ -21,6 +21,8 @@ func init() {
 		beego.NSRouter("/class/list", &controllers.ValidationController{}, "*:Read_ValidationClass_List"),      // 读取文件
 		beego.NSRouter("/stat", &controllers.ValidationController{}, "*:Validation_stat"),                      // 读取文件
 		beego.NSRouter("/user/list", &controllers.ValidationController{}, "*:User_List"),                       // 读取文件
+		beego.NSRouter("/recordList", &controllers.ValidationController{}, "*:Record_List"),                    // 读取文件
+		beego.NSRouter("/operationList", &controllers.ValidationController{}, "*:Operation_List"),              // 操作记录列表
 	)
 	beego.AddNamespace(validationTool)
 }

+ 22 - 0
tests/default_test.go

@@ -0,0 +1,22 @@
+package main
+
+import (
+	"fmt"
+	"testing"
+	"time"
+)
+
+// 测试函数
+func TestBeego(t *testing.T) {
+	generateMonthList(time.Now().AddDate(-1, 0, 0))
+}
+
+func generateMonthList(startMonth time.Time) []string {
+	var months []string
+	endMonth := time.Now().AddDate(0, 1, 0)
+	for month := startMonth; month.Before(endMonth); month = month.AddDate(0, 1, 0) {
+		fmt.Println("=========================", month.Format("2006-01"))
+		months = append(months, month.Format("2006-01"))
+	}
+	return months
+}