Pārlūkot izejas kodu

add:校准证书管理

zoie 2 gadi atpakaļ
vecāks
revīzija
ca77adce6d

+ 124 - 0
.gitignore

@@ -0,0 +1,124 @@
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn.  Uncomment if using
+# auto-import.
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+# VisualStudioCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# Binaries for programs and plugins
+*.exe
+*.exe~
+*.dll
+*.so
+*.dylib
+
+# Test binary, built with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+# local
+.idea
+/_
+/.cache
+.vscode/
+lastupdate.tmp
+ColdVerify_server

+ 312 - 0
controllers/Certificate.go

@@ -0,0 +1,312 @@
+package controllers
+
+import (
+	"bzd_server/conf"
+	"bzd_server/lib"
+	"bzd_server/models/Certificate"
+	"bzd_server/models/System"
+	beego "github.com/beego/beego/v2/server/web"
+	"math"
+)
+
+type CertificateController struct {
+	beego.Controller
+}
+
+// 列表-
+func (c *CertificateController) 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: 302, 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_sn := c.GetString("T_sn")
+	Time_start := c.GetString("Time_start")
+	Time_end := c.GetString("Time_end")
+
+	if len(Time_start) > 0 && !lib.IsDateStr(Time_start) {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "时间格式错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	if len(Time_end) > 0 && !lib.IsDateStr(Time_end) {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "时间格式错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	var cnt int
+	List, cnt := Certificate.Read_Certificate_List(T_sn, Time_start, Time_end, 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 = cnt
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+// 添加-
+func (c *CertificateController) Add() {
+	// 验证登录 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: 302, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_sn := c.GetString("T_sn")
+
+	var_ := Certificate.Certificate{
+		T_sn:    T_sn,
+		T_State: 1,
+	}
+
+	if _, is := Certificate.Read_Certificate(T_sn); is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "重复添加!"}
+		c.ServeJSON()
+		return
+	}
+
+	Id, is := Certificate.Add_Certificate(var_)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
+		c.ServeJSON()
+		System.Add_UserLogs_T(user_r.T_uuid, "校准证书管理", "添加", var_)
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
+	c.ServeJSON()
+
+	return
+}
+
+// 删除-
+func (c *CertificateController) Del() {
+	// 验证登录 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: 302, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	Id, err := c.GetInt("Id")
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	if r, is := Certificate.Read_Certificate_ById(Id); is {
+		if !Certificate.Delete_Certificate_(r) {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+			c.ServeJSON()
+			return
+		}
+		System.Add_UserLogs_T(user_r.T_uuid, "校准证书管理", "删除", r)
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+// 列表-
+func (c *CertificateController) Pdf_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: 302, 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_Certificate_sn := c.GetString("T_Certificate_sn")
+
+	var cnt int64
+	List, cnt := Certificate.Read_CertificatePdf_List(T_Certificate_sn, 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
+}
+
+// 添加-
+func (c *CertificateController) Pdf_Add() {
+	// 验证登录 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: 302, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_Certificate_sn := c.GetString("T_Certificate_sn")
+	T_release_time := c.GetString("T_release_time")
+	T_failure_time := c.GetString("T_failure_time")
+	T_pdf := c.GetString("T_pdf")
+
+	if !lib.IsDateStr(T_release_time) {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "时间格式错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	if !lib.IsDateStr(T_failure_time) {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "时间格式错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	var_ := Certificate.CertificatePdf{
+		T_Certificate_sn: T_Certificate_sn,
+		T_release_time:   T_release_time,
+		T_failure_time:   T_failure_time,
+		T_pdf:            T_pdf,
+		T_State:          1,
+	}
+
+	if _, is := Certificate.Read_CertificatePdf(T_Certificate_sn, T_release_time, T_failure_time); is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "重复添加!"}
+		c.ServeJSON()
+		return
+	}
+
+	Id, is := Certificate.Add_CertificatePdf(var_)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
+		c.ServeJSON()
+		System.Add_UserLogs_T(user_r.T_uuid, "校准证书Pdf管理", "添加", var_)
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Id}
+	c.ServeJSON()
+
+	return
+}
+
+// 修改-
+func (c *CertificateController) Pdf_Up() {
+	// 验证登录 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: 302, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	_, err := c.GetInt("Id")
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
+		c.ServeJSON()
+		return
+	}
+	T_Certificate_sn := c.GetString("T_Certificate_sn")
+	T_release_time := c.GetString("T_release_time")
+	T_failure_time := c.GetString("T_failure_time")
+	T_pdf := c.GetString("T_pdf")
+
+	if !lib.IsDateStr(T_release_time) {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "时间格式错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	if !lib.IsDateStr(T_failure_time) {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "时间格式错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	r, is := Certificate.Read_CertificatePdf(T_Certificate_sn, T_release_time, T_failure_time)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "数据已存在!"}
+		c.ServeJSON()
+		return
+	}
+
+	if len(T_release_time) > 0 {
+		r.T_release_time = T_release_time
+	}
+	if len(T_failure_time) > 0 {
+		r.T_failure_time = T_failure_time
+	}
+	if len(T_pdf) > 0 {
+		r.T_pdf = T_pdf
+	}
+	if !Certificate.Update_CertificatePdf(r, "T_release_time", "T_failure_time", "T_pdf") {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+		c.ServeJSON()
+		System.Add_UserLogs_T(user_r.T_uuid, "校准证书Pdf管理", "修改", r)
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+// 删除-
+func (c *CertificateController) Pdf_Del() {
+	// 验证登录 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: 302, Msg: "请重新登录!"}
+		c.ServeJSON()
+		return
+	}
+
+	Id, err := c.GetInt("Id")
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "Id 错误!"}
+		c.ServeJSON()
+		return
+	}
+
+	if r, is := Certificate.Read_CertificatePdf_ById(Id); is {
+		if !Certificate.Delete_CertificatePdf_(r) {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+			c.ServeJSON()
+			return
+		}
+		System.Add_UserLogs_T(user_r.T_uuid, "校准证书Pdf管理", "删除", r)
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}

+ 11 - 3
lib/libString.go

@@ -7,17 +7,17 @@ import (
 )
 
 //#取得随机字符串:通过打乱slice来操作
-func GetRandstring(length int,char string,rand_x int64) string {
+func GetRandstring(length int, char string, rand_x int64) string {
 	if length < 1 {
 		return ""
 	}
 
-	if len(char) <= 6 || len(char) <= length{
+	if len(char) <= 6 || len(char) <= length {
 		char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
 	}
 
 	charArr := strings.Split(char, "")
-	ran := rand.New(rand.NewSource(time.Now().Unix()+rand_x))
+	ran := rand.New(rand.NewSource(time.Now().Unix() + rand_x))
 
 	l := len(charArr)
 	for i := l - 1; i > 0; i-- {
@@ -26,4 +26,12 @@ func GetRandstring(length int,char string,rand_x int64) string {
 	}
 	rchar := charArr[:length]
 	return strings.Join(rchar, "")
+}
+
+// 检查日期格式
+func IsDateStr(date string) bool {
+	if _, err := time.Parse("2006-01-02", date); err != nil {
+		return false
+	}
+	return true
 }

+ 166 - 0
models/Certificate/Certificate.go

@@ -0,0 +1,166 @@
+package Certificate
+
+import (
+	"bzd_server/logs"
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"strconv"
+	"time"
+)
+
+type Certificate struct {
+	Id   int    `orm:"column(ID);size(11);auto;pk"`
+	T_sn string `orm:"size(256);null"` // 证书编号
+
+	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	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 第一次保存时才设置时间
+}
+type Certificate_R struct {
+	T_sn string `orm:"size(256);null"` // 编号
+}
+
+func (t *Certificate) TableName() string {
+	return "Certificate" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(Certificate))
+
+}
+
+// ----------------
+
+// 获取 ById
+func Read_Certificate_ById(id int) (r Certificate, is bool) {
+	o := orm.NewOrm()
+	r = Certificate{Id: id}
+	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err != nil {
+		logs.Println(err)
+		return r, false
+	}
+	return r, true
+}
+
+// 获取 By
+func Read_Certificate(T_sn string) (r Certificate, is bool) {
+
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Certificate))
+	err := qs.Filter("T_sn", T_sn).Filter("T_State", 1).One(&r)
+	if err != nil {
+		return r, false
+	}
+
+	return r, true
+}
+
+// 添加
+func Add_Certificate(r Certificate) (id int64, is bool) {
+	o := orm.NewOrm()
+	err := o.Read(&r, "T_sn", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err == nil {
+		return 0, false
+	}
+	id, err = o.Insert(&r)
+	if err != nil {
+		logs.Println(err)
+		return 0, false
+	}
+	return id, true
+}
+
+// 删除
+func Delete_Certificate(v Certificate) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&v); err == nil {
+		logs.Println("Number of records deleted in database:", num)
+	} else {
+		return false
+	}
+
+	return true
+}
+
+// 删除
+func Delete_Certificate_(v Certificate) bool {
+	o := orm.NewOrm()
+	v.T_State = 0
+	if num, err := o.Update(&v, "T_State"); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+
+	return true
+}
+
+// 修改
+func Update_Certificate(m Certificate, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+
+		return true
+	}
+	return false
+}
+
+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链接
+}
+
+// 获取列表
+func Read_Certificate_List(T_sn, Time_start, Time_end string, page int, page_z int) ([]Certificate_, int) {
+
+	o := orm.NewOrm()
+	var offset int
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = (page - 1) * page_z
+	}
+
+	var maps_z []orm2.ParamsList
+	var maps []Certificate_
+
+	// 获取总条数
+	sql := "SELECT COUNT(ID) FROM Certificate WHERE t__state=1"
+	if len(T_sn) > 0 {
+		sql = sql + " AND t_sn like \"%" + T_sn + "%\""
+	}
+	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 Certificate AS c LEFT JOIN (SELECT any_value(t_release_time) t_release_time,any_value(t_failure_time) t_failure_time,any_value(t_pdf) t_pdf,t__certificate_sn FROM (SELECT DISTINCT * FROM `CertificatePdf` WHERE t__state=1 ORDER BY id DESC) f GROUP BY t__certificate_sn) AS pdf ON pdf.t__certificate_sn=c.t_sn WHERE t__state=1"
+	if len(T_sn) > 0 {
+		sql = sql + " AND t_sn like \"%" + T_sn + "%\""
+	}
+
+	if len(Time_start) > 0 {
+		sql = sql + " AND t_failure_time >= \"" + Time_start + "\""
+	}
+	if len(Time_end) > 0 {
+		sql = sql + " AND t_failure_time <= \"" + Time_end + "\""
+	}
+
+	sql = sql + " ORDER BY c.id DESC LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
+	fmt.Println(sql)
+	_, err = o.Raw(sql).QueryRows(&maps)
+
+	cnt, _ := strconv.Atoi(maps_z[0][0].(string))
+	return maps, cnt
+}

+ 157 - 0
models/Certificate/CertificatePdf.go

@@ -0,0 +1,157 @@
+package Certificate
+
+import (
+	"bzd_server/logs"
+	"fmt"
+	"github.com/beego/beego/v2/adapter/orm"
+	orm2 "github.com/beego/beego/v2/client/orm"
+	_ "github.com/go-sql-driver/mysql"
+	"strings"
+	"time"
+)
+
+type CertificatePdf 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链接
+
+	T_State    int       `orm:"size(200);1"`                                           //  0删除  1 正常
+	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 第一次保存时才设置时间
+}
+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链接
+}
+
+func (t *CertificatePdf) TableName() string {
+	return "CertificatePdf" // 数据库名称   // ************** 替换 FormulaList **************
+}
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(CertificatePdf))
+
+}
+
+// -------------------------------------------------------------
+func CertificatePdfToCertificatePdf_R(T CertificatePdf) (T_r CertificatePdf_R) {
+	T_r.Id = T.Id
+	T_r.T_Certificate_sn = T.T_Certificate_sn
+	T_r.T_release_time = T.T_release_time
+	T_r.T_failure_time = T.T_failure_time
+	T_r.T_pdf = T.T_pdf
+	return T_r
+}
+
+// ----------------
+
+// 获取 ById
+func Read_CertificatePdf_ById(id int) (r CertificatePdf, is bool) {
+	o := orm.NewOrm()
+	r = CertificatePdf{Id: id}
+	err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err != nil {
+		logs.Println(err)
+		return r, false
+	}
+	return r, true
+}
+
+// 获取 By
+func Read_CertificatePdf(T_Certificate_sn, T_release_time, T_failure_time string) (r CertificatePdf, is bool) {
+
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(CertificatePdf))
+	err := qs.Filter("T_Certificate_sn", T_Certificate_sn).Filter("T_release_time", T_release_time).Filter("T_failure_time", T_failure_time).Filter("T_State", 1).One(&r)
+	if err != nil && !strings.Contains(err.Error(), "no row found") {
+		return r, false
+	}
+
+	return r, true
+}
+
+// 添加
+func Add_CertificatePdf(r CertificatePdf) (id int64, is bool) {
+	o := orm.NewOrm()
+
+	err := o.Read(&r, "T_Certificate_sn", "T_release_time", "T_failure_time", "T_State") // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
+	if err == nil {
+		return 0, false
+	}
+
+	id, err = o.Insert(&r)
+	if err != nil {
+		logs.Println(err)
+		return 0, false
+	}
+
+	return id, true
+}
+
+// 删除
+func Delete_CertificatePdf(v CertificatePdf) bool {
+	o := orm.NewOrm()
+	if num, err := o.Delete(&v); err == nil {
+		logs.Println("Number of records deleted in database:", num)
+	} else {
+		return false
+	}
+
+	return true
+}
+
+// 删除
+func Delete_CertificatePdf_(v CertificatePdf) bool {
+	o := orm.NewOrm()
+	v.T_State = 0
+	if num, err := o.Update(&v, "T_State"); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+	} else {
+		return false
+	}
+
+	return true
+}
+
+// 修改
+func Update_CertificatePdf(m CertificatePdf, cols ...string) bool {
+	o := orm.NewOrm()
+	if num, err := o.Update(&m, cols...); err == nil {
+		fmt.Println("Number of records updated in database:", num)
+
+		return true
+	}
+	return false
+}
+
+// 获取列表
+func Read_CertificatePdf_List(T_Certificate_sn string, page int, page_z int) ([]CertificatePdf_R, int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+	var r []CertificatePdf
+	qs := o.QueryTable(new(CertificatePdf))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_Certificate_sn", T_Certificate_sn).And("T_State", 1)
+	qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	cnt, _ := qs.SetCond((*orm2.Condition)(cond1)).Count()
+	// 转换
+	var CertificatePdf_r []CertificatePdf_R
+	for _, v := range r {
+		CertificatePdf_r = append(CertificatePdf_r, CertificatePdfToCertificatePdf_R(v))
+	}
+
+	return CertificatePdf_r, cnt
+}

+ 18 - 0
routers/Certificate.go

@@ -0,0 +1,18 @@
+package routers
+
+import (
+	"bzd_server/controllers"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+func init() {
+	// - 校准证书
+	beego.Router("/Certificate/List", &controllers.CertificateController{}, "*:List") // 校准证书列表
+	beego.Router("/Certificate/Add", &controllers.CertificateController{}, "*:Add")   // 添加校准证书
+	beego.Router("/Certificate/Del", &controllers.CertificateController{}, "*:Del")   // 删除校准证书
+	// - 校准证书pdf
+	beego.Router("/Certificate/Pdf_List", &controllers.CertificateController{}, "*:Pdf_List") // 校准证书pdf列表
+	beego.Router("/Certificate/Pdf_Add", &controllers.CertificateController{}, "*:Pdf_Add")   // 添加校准证书pdf
+	beego.Router("/Certificate/Pdf_Up", &controllers.CertificateController{}, "*:Pdf_Up")     // 编辑校准证书pdf
+	beego.Router("/Certificate/Pdf_Del", &controllers.CertificateController{}, "*:Pdf_Del")   // 删除校准证书pdf
+}