zoie пре 1 година
родитељ
комит
e3fd78e0c4

+ 1 - 1
.gitignore

@@ -33,6 +33,6 @@ _testmain.go
 lastupdate.tmp
 main
 nohup.out
-ERP_user8200
+ERP_user6700
 Makefile
 ofile

+ 2 - 2
Makefile

@@ -1,6 +1,6 @@
 build:
 	@echo "+ build"
-	go build -o ERP_user8200 main.go
+	go build -o ERP_user6700 main.go
 build-linux:
 	@echo "+ build linux"
-	GOOS=linux GOARCH=amd64 go build -o ERP_user8200 main.go
+	GOOS=linux GOARCH=amd64 go build -o ERP_user6700 main.go

+ 2 - 2
Nats/NatsServer/NatsERP.go

@@ -133,7 +133,7 @@ func ERP_Read_Power_ByT_id(prefix string, T_id string) (r powerlibs.Power, err e
 	return t_R.Data, nil
 }
 
-func ERP_Update_Power(prefix string, power powerlibs.Power) (id int64, err error) {
+func ERP_Update_Power(prefix string, power powerlibs.Power) (id int, err error) {
 	sysName := Account.Get_Sys_Name(prefix)
 	subj := fmt.Sprintf("%s_%s", prefix, "Update_Power")
 
@@ -148,7 +148,7 @@ func ERP_Update_Power(prefix string, power powerlibs.Power) (id int64, err error
 	type T_R struct {
 		Code int16  `xml:"Code"`
 		Msg  string `xml:"Msg"`
-		Data int64  `xml:"Data"` // 泛型
+		Data int    `xml:"Data"` // 泛型
 	}
 	var t_R T_R
 

+ 15 - 3
README.md

@@ -1,4 +1,4 @@
-# ERP_libs
+# ERP_user 用户管理
 
 ### 导入线上库
 git config --global url."git@git.baozhida.cn/ERP_libs".insteadOf "http://120.55.48.97:3000/bzd_zeng/ERP_libs"
@@ -6,5 +6,17 @@ git config --global url."git@git.baozhida.cn/ERP_libs".insteadOf "http://120.55.
 ### 导入本地库
 go mod edit -replace git.baozhida.cn/ERP_libs=/Users/zoie/work/bzd_project/ERP/ERP_libs
 
-## 添加新系统
-app.conf ERP_Nats_prefix
+### 添加新系统
+ - 在 **app.conf** SYS 配置
+ - 向新系统power表中同步用户系统power表,将 **erp_storage** 替换为新系统数据库名称
+```
+INSERT INTO erp_storage.power(ID,t_id,t_name,t__state,create_time,update_time) 
+SELECT ID,t_id,t_name,t__state,create_time,update_time FROM erp_user.power
+```
+
+### 系统列表
+| 系统名称 | 项目名称   | 端口号 |
+| -------- | ---------- | ------ |
+| 用户管理 | ERP_user   | 6700   |
+| 考勤管理 | ERP_ams    | 6701   |
+| 薪资管理 | ERP_salary | 6702   |

+ 19 - 13
conf/app.conf

@@ -1,29 +1,35 @@
 appname = ERP_user
-HTTPPort = 8200
+HTTPPort = 6700
 runmode = dev
 Graceful = true
 EnableDocs = true
 copyrequestbody = true
 
+# NatsServer_Url = "192.168.192.251:4222"
+NatsServer_Url = "175.178.229.79:4222"
 
-# Nats
-NatsServer_Url = "127.0.0.1:4222"
-
-# Mysql
-MysqlServer_UrlPort = "47.111.15.17:3306"
-MysqlServer_Database = "erp_user"
-MysqlServer_Username = "erp_user"
-MysqlServer_Password = "DxwTJra8k5rrMdRG"
+# Mysql 线上
+MysqlServer_UrlPort = "192.168.192.251:3306"
+MysqlServer_Database = "erp_user_test"
+MysqlServer_Username = "erp_user_test"
+MysqlServer_Password = "C8iaSLwhRpCermaR"
 MysqlServer_MaxIdleConnections = 100
 MysqlServer_MaxOpenConnections = 200
 
-
 # Redis
-Redis_address = "47.111.15.17:6379"
+Redis_address = "192.168.192.251:6379"
 Redis_password = ""
-Redis_dbNum = "1"
+Redis_dbNum = "2"
 
+# 静态资源
+Qiniu_AccessKey = "-8ezB_d-8-eUFTMvhOGbGzgeQRPeKQnaQ3DBcUxo"
+Qiniu_SecretKey = "KFhkYxTAJ2ZPN3ZS3euTsfWk8-C92rKgkhAMkDRN"
+Qiniu_BUCKET = "baozhida-erp"
+Qiniu_Url = "https://erposs.baozhida.cn/"
 
 FilterExcludeURL = /Login_verification
-FilterOnlyLoginCheckURL = /Menu/List,/User/Info,/User/Post,/Menu/User_List
+FilterOnlyLoginCheckURL = /Menu/List,/User/Info,/User/Post,/Menu/User_List,/User/List,/User/Get,/UpFileToken,/Dept/List,/Post/List,/News/List,/News/See
+
+# Sys = ERP_ACCOUNT|账号管理,ERP_STORAGE|仓库管理,ERP_AMS|考勤管理,ERP_SALARY|薪资管理
+Sys = ERP_ACCOUNT|账号管理,ERP_AMS|考勤管理,ERP_SALARY|薪资管理
 

+ 20 - 8
conf/config.go

@@ -2,6 +2,7 @@ package conf
 
 import (
 	beego "github.com/beego/beego/v2/server/web"
+	"strings"
 )
 
 var Page_size = 10
@@ -21,16 +22,27 @@ var Redis_address, _ = beego.AppConfig.String("Redis_address")
 var Redis_password, _ = beego.AppConfig.String("Redis_password")
 var Redis_dbNum, _ = beego.AppConfig.String("Redis_dbNum")
 
+// Qiniu
+var Qiniu_AccessKey, _ = beego.AppConfig.String("Qiniu_AccessKey")
+var Qiniu_SecretKey, _ = beego.AppConfig.String("Qiniu_SecretKey")
+var Qiniu_BUCKET, _ = beego.AppConfig.String("Qiniu_BUCKET")
+var OssQiniu, _ = beego.AppConfig.String("OssQiniu")
+
 var FilterExcludeURL, _ = beego.AppConfig.String("FilterExcludeURL")
 var FilterOnlyLoginCheckURL, _ = beego.AppConfig.String("FilterOnlyLoginCheckURL")
 
+var ERP_Sys, _ = beego.AppConfig.String("Sys")
+
 var (
-	ERP_Account_Sys = "ERP_ACCOUNT"
-	ERP_AMS_Sys     = "ERP_AMS"
-	ERP_SALARY_Sys  = "ERP_SALARY"
-	ERP_Sys_List    = map[string]string{
-		ERP_Account_Sys: "账号管理",
-		ERP_AMS_Sys:     "考勤管理",
-		ERP_SALARY_Sys:  "薪资管理",
-	}
+	ERP_ACCOUNT_Sys = "ERP_ACCOUNT"
+	ERP_Sys_List    = map[string]string{}
 )
+
+func init() {
+	ERP_Sys_List = make(map[string]string)
+	list := strings.Split(ERP_Sys, ",")
+	for _, v := range list {
+		key, name := strings.Split(v, "|")[0], strings.Split(v, "|")[1]
+		ERP_Sys_List[key] = name
+	}
+}

+ 36 - 0
controllers/Dept.go

@@ -0,0 +1,36 @@
+package controllers
+
+import (
+	"ERP_user/models/Account"
+	"git.baozhida.cn/ERP_libs/lib"
+	beego "github.com/beego/beego/v2/server/web"
+)
+
+type DeptController struct {
+	beego.Controller
+	User Account.User
+}
+
+func (c *DeptController) Prepare() {
+	c.User = *Account.User_r
+}
+
+// 部门列表 -
+func (c *DeptController) List() {
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Account.Read_Dept_List()}
+	c.ServeJSON()
+	return
+}
+
+// 岗位列表 -
+func (c *DeptController) Post_List() {
+	T_dept, _ := c.GetInt("T_dept")
+	if T_dept == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_dept Err!"}
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Account.Read_Post_List(T_dept)}
+	c.ServeJSON()
+	return
+}

+ 8 - 3
controllers/Menu.go

@@ -35,7 +35,7 @@ func (c *MenuController) List() {
 	var menu []menulibs.Menu
 	var err error
 	switch T_code {
-	case conf.ERP_Account_Sys:
+	case conf.ERP_ACCOUNT_Sys:
 		menu, err = Account.Read_Menu_List()
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取用户系统菜单失败!"}
@@ -79,9 +79,9 @@ func (c *MenuController) User_List() {
 		return
 	}
 	menu, err := Account.Read_User_Bind_Menu_List(power.T_menu)
-	sysName := Account.Get_Sys_Name(conf.ERP_Account_Sys)
+	sysName := Account.Get_Sys_Name(conf.ERP_ACCOUNT_Sys)
 	if err != nil {
-		logs.Error(lib.FuncName(), Account.Get_Sys_Name(conf.ERP_Account_Sys), err)
+		logs.Error(lib.FuncName(), Account.Get_Sys_Name(conf.ERP_ACCOUNT_Sys), err)
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + "查询失败!"}
 		c.ServeJSON()
 		return
@@ -108,6 +108,11 @@ func (c *MenuController) User_List() {
 		}
 
 	}
+	if len(menuList) == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "该用户暂无任务菜单权限!"}
+		c.ServeJSON()
+		return
+	}
 
 	r_jsons.Data = menuList
 	Account.Redis_Munu_Set(c.User.T_power, menuList)

+ 131 - 66
controllers/Power.go

@@ -11,9 +11,9 @@ import (
 	"git.baozhida.cn/ERP_libs/lib"
 	"github.com/astaxie/beego/logs"
 	"github.com/beego/beego/v2/adapter/orm"
-
 	beego "github.com/beego/beego/v2/server/web"
 	"math"
+	"strings"
 )
 
 type PowerController struct {
@@ -66,7 +66,7 @@ func (c *PowerController) Get() {
 	T_id := c.GetString("T_id")
 	T_code := c.GetString("T_code")
 	if len(T_code) == 0 {
-		T_code = conf.ERP_Account_Sys
+		T_code = conf.ERP_ACCOUNT_Sys
 	}
 
 	if len(T_id) < 1 {
@@ -89,7 +89,7 @@ func (c *PowerController) Get() {
 	}
 
 	switch T_code {
-	case conf.ERP_Account_Sys:
+	case conf.ERP_ACCOUNT_Sys:
 		menu, err = Account.Read_Menu_List()
 		if err != nil {
 			c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取用户系统菜单失败!"}
@@ -200,16 +200,16 @@ func (c *PowerController) Edit() {
 		return
 	}
 
-	power, err := Account.Read_Power_ByT_id(T_id)
+	userPower, err := Account.Read_Power_ByT_id(T_id)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
 		c.ServeJSON()
 		return
 	}
 
-	power.T_name = T_name
+	userPower.T_name = T_name
 
-	id, err := Account.Update_Power(power)
+	id, err := Account.Update_Power(userPower)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -218,46 +218,79 @@ func (c *PowerController) Edit() {
 
 	// 向除开用户系统的其他系统修改权限
 	// 查询新系统是否存在与用户系统powerT_id相同的power 存在=>修改 不存在=>添加
+	//for _, prefix := range Account.ERP_Sys_prefix {
+	//	// Nats 发送失败 重试3次
+	//	i := 3
+	//	for {
+	//		power, err = NatsServer.ERP_Read_Power_ByT_id(prefix, T_id)
+	//		if err != nil {
+	//			if err.Error() == orm.ErrNoRows.Error() {
+	//				var_ := powerlibs.Power{
+	//					T_id:   power.T_id,
+	//					T_name: T_name,
+	//				}
+	//				_, err = NatsServer.ERP_Add_Power(prefix, var_)
+	//				if err == nil || i == 0 {
+	//					break
+	//				}
+	//			} else {
+	//				c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
+	//				c.ServeJSON()
+	//				return
+	//			}
+	//		}
+	//		if power.Id > 0 {
+	//			power.T_name = T_name
+	//			_, err = NatsServer.ERP_Update_Power(prefix, power)
+	//			if err == nil || i == 0 {
+	//				break
+	//			}
+	//		}
+	//		i--
+	//	}
+	//
+	//	if err != nil {
+	//		sysName := Account.Get_Sys_Name(prefix)
+	//		c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + "修改失败!"}
+	//		c.ServeJSON()
+	//		return
+	//	}
+	//}
+
 	for _, prefix := range Account.ERP_Sys_prefix {
-		// Nats 发送失败 重试3次
-		i := 3
-		for {
-			power, err = NatsServer.ERP_Read_Power_ByT_id(prefix, T_id)
-			if err != nil {
-				if err.Error() == orm.ErrNoRows.Error() {
-					var_ := powerlibs.Power{
-						T_id:   power.T_id,
-						T_name: T_name,
+		go func(sys string) {
+			// Nats 发送失败 重试10次
+			var power powerlibs.Power
+			i := 10
+			for {
+				power, err = NatsServer.ERP_Read_Power_ByT_id(sys, T_id)
+				if err != nil {
+					if err.Error() == orm.ErrNoRows.Error() {
+						var_ := powerlibs.Power{
+							T_id:   userPower.T_id,
+							T_name: T_name,
+						}
+						_, err = NatsServer.ERP_Add_Power(sys, var_)
+						if err == nil || i == 0 {
+							break
+						}
+					} else {
+						continue
 					}
-					_, err = NatsServer.ERP_Add_Power(prefix, var_)
+				}
+				if power.Id > 0 {
+					power.T_name = T_name
+					_, err = NatsServer.ERP_Update_Power(sys, power)
 					if err == nil || i == 0 {
 						break
 					}
-				} else {
-					c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
-					c.ServeJSON()
-					return
-				}
-			}
-			if power.Id > 0 {
-				power.T_name = T_name
-				_, err = NatsServer.ERP_Update_Power(prefix, power)
-				if err == nil || i == 0 {
-					break
 				}
+				i--
 			}
-			i--
-		}
-
-		if err != nil {
-			sysName := Account.Get_Sys_Name(prefix)
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + "修改失败!"}
-			c.ServeJSON()
-			return
-		}
+		}(prefix)
 	}
 
-	System.Add_UserLogs_T(c.User.T_uuid, "权限", "修改", power)
+	System.Add_UserLogs_T(c.User.T_uuid, "权限", "修改", userPower)
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: id}
 	c.ServeJSON()
@@ -271,15 +304,18 @@ func (c *PowerController) Sys_List() {
 		T_sys  string
 		T_name string
 	}
-	var list []Sys
-	for k, v := range conf.ERP_Sys_List {
-		list = append(list, Sys{
-			T_sys:  k,
-			T_name: v,
+	var syslist []Sys
+
+	list := strings.Split(conf.ERP_Sys, ",")
+	for _, v := range list {
+		sys, name := strings.Split(v, "|")[0], strings.Split(v, "|")[1]
+		syslist = append(syslist, Sys{
+			T_sys:  sys,
+			T_name: name,
 		})
 	}
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: list}
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: syslist}
 	c.ServeJSON()
 	return
 
@@ -311,9 +347,9 @@ func (c *PowerController) Edit_Menu() {
 		c.ServeJSON()
 		return
 	}
-	var id int64
+	var id int
 	switch T_code {
-	case conf.ERP_Account_Sys:
+	case conf.ERP_ACCOUNT_Sys:
 		power.T_menu = T_menu
 		id, err = Account.Update_Power(power)
 		if err != nil {
@@ -376,6 +412,12 @@ func (c *PowerController) Del() {
 		return
 	}
 
+	if R.Id == 1 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "禁止删除系统角色!"}
+		c.ServeJSON()
+		return
+	}
+
 	id, err := Account.Delete_Power(R)
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
@@ -383,32 +425,55 @@ func (c *PowerController) Del() {
 		return
 	}
 
+	//for _, prefix := range Account.ERP_Sys_prefix {
+	//	i := 3
+	//	for {
+	//		R, err = NatsServer.ERP_Read_Power_ByT_id(prefix, T_id)
+	//		if err != nil {
+	//			if err.Error() == orm.ErrNoRows.Error() {
+	//				break
+	//			}
+	//			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
+	//			c.ServeJSON()
+	//			return
+	//		}
+	//		// Nats 发送失败 重试3次
+	//		_, err = NatsServer.ERP_Delete_Power(prefix, R)
+	//		if err == nil || i == 0 {
+	//			break
+	//		}
+	//		i--
+	//	}
+	//
+	//	if err != nil {
+	//		name := Account.Get_Sys_Name(prefix)
+	//		c.Data["json"] = lib.JSONS{Code: 202, Msg: name + " 修改失败!"}
+	//		c.ServeJSON()
+	//		return
+	//	}
+	//}
+
 	for _, prefix := range Account.ERP_Sys_prefix {
-		i := 3
-		for {
-			R, err = NatsServer.ERP_Read_Power_ByT_id(prefix, T_id)
-			if err != nil {
-				if err.Error() == orm.ErrNoRows.Error() {
+		go func(sys string) {
+			var power powerlibs.Power
+			i := 10
+			for {
+				power, err = NatsServer.ERP_Read_Power_ByT_id(sys, T_id)
+				if err != nil {
+					if err.Error() == orm.ErrNoRows.Error() {
+						break
+					}
+					continue
+				}
+				// Nats 发送失败 重试3次
+				_, err = NatsServer.ERP_Delete_Power(sys, power)
+				if err == nil || i == 0 {
 					break
 				}
-				c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
-				c.ServeJSON()
-				return
-			}
-			// Nats 发送失败 重试3次
-			_, err = NatsServer.ERP_Delete_Power(prefix, R)
-			if err == nil || i == 0 {
-				break
+				i--
 			}
-			i--
-		}
+		}(prefix)
 
-		if err != nil {
-			name := Account.Get_Sys_Name(prefix)
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: name + " 修改失败!"}
-			c.ServeJSON()
-			return
-		}
 	}
 
 	System.Add_UserLogs_T(c.User.T_uuid, "权限", "删除", T_id)

+ 46 - 0
controllers/UpFile.go

@@ -0,0 +1,46 @@
+package controllers
+
+import (
+	"ERP_user/conf"
+	"git.baozhida.cn/ERP_libs/lib"
+	beego "github.com/beego/beego/v2/server/web"
+	"github.com/qiniu/go-sdk/v7/auth/qbox"
+	"github.com/qiniu/go-sdk/v7/storage"
+	uuid "github.com/satori/go.uuid"
+	"strconv"
+	"time"
+)
+
+type UpFileController struct {
+	beego.Controller
+}
+
+// 列表 -
+func (c *UpFileController) UpFileToken() {
+
+	var Qiniu *qbox.Mac
+
+	Qiniu = qbox.NewMac(conf.Qiniu_AccessKey, conf.Qiniu_SecretKey)
+
+	T_suffix := c.GetString("T_suffix")
+
+	Tokey := strconv.FormatInt(time.Now().Unix(), 10) + uuid.NewV4().String()
+	if len(T_suffix) == 0 {
+		T_suffix = "png"
+	}
+	putPolicy := storage.PutPolicy{
+		Scope:        conf.Qiniu_BUCKET,
+		InsertOnly:   1,    //仅能以新增模式上传文件。
+		Expires:      7200, //示例2小时有效期
+		ReturnBody:   `{"key":"` + conf.OssQiniu + `/$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)"}`,
+		ForceSaveKey: true,
+		SaveKey:      "UpImage/" + Tokey + "." + T_suffix,
+		MimeLimit:    "image/*;application/pdf;application/octet-stream",
+	}
+
+	upToken := putPolicy.UploadToken(Qiniu)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: upToken}
+	c.ServeJSON()
+	return
+}

+ 186 - 33
controllers/User.go

@@ -60,7 +60,12 @@ func (c *UserController) List() {
 	// 查询
 	T_name := c.GetString("T_name")
 	T_power := c.GetString("T_power")
-	R_List, R_cnt := Account.Read_User_List(T_name, T_power, page, page_z)
+	T_dept, _ := c.GetInt("T_dept")
+	T_dept_leader, _ := c.GetInt("T_dept_leader")
+	if T_dept_leader == 1 {
+		T_dept = c.User.T_dept
+	}
+	R_List, R_cnt := Account.Read_User_List(T_name, T_power, T_dept, T_dept_leader, page, page_z)
 
 	var r_jsons lib.R_JSONS
 	r_jsons.Num = R_cnt
@@ -73,6 +78,24 @@ func (c *UserController) List() {
 	return
 }
 
+func (c *UserController) Get() {
+
+	T_uuid := c.GetString("T_uuid")
+	user, err := Account.Read_User_ByT_uuid(T_uuid)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_uuid Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	var r_jsons lib.R_JSONS
+	r_jsons.Data = Account.UserToUser_R(user)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 // 个人信息
 func (c *UserController) Info() {
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Account.UserToUser_R(c.User)}
@@ -86,16 +109,54 @@ func (c *UserController) Add() {
 	T_name := c.GetString("T_name")
 	T_user := c.GetString("T_user")
 	T_pass := c.GetString("T_pass")
-	T_dept := c.GetString("T_dept")
-	T_post := c.GetString("T_post")
+	T_dept, _ := c.GetInt("T_dept")
+	T_post, _ := c.GetInt("T_post")
+	T_dept_leader, _ := c.GetInt("T_dept_leader")
+
+	T_sex, _ := c.GetInt("T_sex")
+	T_id_card := c.GetString("T_id_card")
+	T_nation := c.GetString("T_nation")
+	T_school := c.GetString("T_school")
+	T_major := c.GetString("T_major")
+	T_education := c.GetString("T_education")
+	T_phone := c.GetString("T_phone")
+	T_marry, _ := c.GetInt("T_marry")
+	T_spouse_name := c.GetString("T_spouse_name")
+	T_spouse_phone := c.GetString("T_spouse_phone")
+	T_entry_time := c.GetString("T_entry_time")
+	T_positive_time := c.GetString("T_positive_time")
+	T_entry_type := c.GetString("T_entry_type")
+	T_contract_start_time := c.GetString("T_contract_start_time")
+	T_contract_end_time := c.GetString("T_contract_end_time")
+	T_expire, _ := c.GetInt("T_expire")
+	T_remark := c.GetString("T_remark")
 
 	var_ := Account.User{
-		T_power: T_power,
-		T_name:  T_name,
-		T_user:  T_user,
-		T_pass:  T_pass,
-		T_dept:  T_dept,
-		T_post:  T_post,
+		T_power:       T_power,
+		T_name:        T_name,
+		T_user:        T_user,
+		T_pass:        T_pass,
+		T_dept:        T_dept,
+		T_post:        T_post,
+		T_dept_leader: T_dept_leader,
+
+		T_sex:                 T_sex,
+		T_id_card:             T_id_card,
+		T_nation:              T_nation,
+		T_school:              T_school,
+		T_major:               T_major,
+		T_education:           T_education,
+		T_phone:               T_phone,
+		T_marry:               T_marry,
+		T_spouse_name:         T_spouse_name,
+		T_spouse_phone:        T_spouse_phone,
+		T_entry_time:          T_entry_time,
+		T_positive_time:       T_positive_time,
+		T_entry_type:          T_entry_type,
+		T_contract_start_time: T_contract_start_time,
+		T_contract_end_time:   T_contract_end_time,
+		T_expire:              T_expire,
+		T_remark:              T_remark,
 	}
 	if len(T_power) < 1 {
 		c.Data["json"] = lib.JSONS{Code: 204, Msg: "权限异常!"}
@@ -142,18 +203,9 @@ func (c *UserController) Add() {
 // 修改个人信息
 func (c *UserController) Post() {
 
-	T_name := c.GetString("T_name")
 	T_pass := c.GetString("T_pass")
 
 	user := c.User
-	if len(T_name) > 0 {
-		if len(T_name) < 3 {
-			c.Data["json"] = lib.JSONS{Code: 204, Msg: "名字格式不正确!"}
-			c.ServeJSON()
-			return
-		}
-		user.T_name = T_name
-	}
 
 	if len(T_pass) > 0 {
 		if len(T_pass) < 8 {
@@ -164,16 +216,13 @@ func (c *UserController) Post() {
 		user.T_pass = T_pass
 	}
 
-	if err := Account.Update_User(user, "T_power", "T_name", "T_user", "T_pass"); err != nil {
-		if len(T_pass) < 8 {
-			c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
-			c.ServeJSON()
-			return
-		}
+	if err := Account.Update_User(user, "T_pass"); err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
 	}
 
-	user.T_pass = "******"
-	System.Add_UserLogs_T(c.User.T_uuid, "用户", "修改个人信息", user)
+	System.Add_UserLogs_T(c.User.T_uuid, "用户", "修改登录密码", "")
 
 	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
 	c.ServeJSON()
@@ -188,11 +237,31 @@ func (c *UserController) Edit() {
 	T_power := c.GetString("T_power")
 	T_name := c.GetString("T_name")
 	T_pass := c.GetString("T_pass")
-	T_dept := c.GetString("T_dept")
-	T_post := c.GetString("T_post")
+	T_dept, _ := c.GetInt("T_dept")
+	T_post, _ := c.GetInt("T_post")
+	T_dept_leader, T_dept_leader_err := c.GetInt("T_dept_leader")
+
+	T_sex, T_sex_err := c.GetInt("T_sex")
+	T_id_card := c.GetString("T_id_card")
+	T_nation := c.GetString("T_nation")
+	T_school := c.GetString("T_school")
+	T_major := c.GetString("T_major")
+	T_education := c.GetString("T_education")
+	T_phone := c.GetString("T_phone")
+	T_marry, T_marry_err := c.GetInt("T_marry")
+	T_spouse_name := c.GetString("T_spouse_name")
+	T_spouse_phone := c.GetString("T_spouse_phone")
+	T_entry_time := c.GetString("T_entry_time")
+	T_positive_time := c.GetString("T_positive_time")
+	T_entry_type := c.GetString("T_entry_type")
+	T_contract_start_time := c.GetString("T_contract_start_time")
+	T_contract_end_time := c.GetString("T_contract_end_time")
+	T_expire, T_expire_err := c.GetInt("T_expire")
+	T_remark := c.GetString("T_remark")
 
 	var err error
 	var user Account.User
+	var cols []string
 
 	if len(T_uuid) > 0 {
 		user, err = Account.Read_User_ByT_uuid(T_uuid)
@@ -204,21 +273,23 @@ func (c *UserController) Edit() {
 	}
 
 	if len(T_name) > 0 {
-		if len(T_name) < 3 {
+		if len(T_name) < 2 {
 			c.Data["json"] = lib.JSONS{Code: 204, Msg: "名字格式不正确!"}
 			c.ServeJSON()
 			return
 		}
 		user.T_name = T_name
+		cols = append(cols, "T_name")
 	}
 
 	if len(T_pass) > 0 {
-		if len(T_power) < 8 {
+		if len(T_pass) < 8 {
 			c.Data["json"] = lib.JSONS{Code: 206, Msg: "密码格式不正确!"}
 			c.ServeJSON()
 			return
 		}
 		user.T_pass = T_pass
+		cols = append(cols, "T_pass")
 	}
 
 	if len(T_power) > 0 {
@@ -229,17 +300,94 @@ func (c *UserController) Edit() {
 			return
 		}
 		user.T_power = T_power
+		cols = append(cols, "T_power")
 	}
 
-	if len(T_dept) > 0 {
+	if T_dept > 0 {
 		user.T_dept = T_dept
+		cols = append(cols, "T_dept")
 	}
 
-	if len(T_post) > 0 {
+	if T_post > 0 {
 		user.T_post = T_post
+		cols = append(cols, "T_post")
+	}
+
+	if T_dept_leader_err != nil {
+		user.T_dept_leader = T_dept_leader
+		cols = append(cols, "T_dept_leader")
+	}
+
+	if T_sex_err != nil {
+		user.T_sex = T_sex
+		cols = append(cols, "T_sex")
+	}
+	if len(T_id_card) > 0 {
+		user.T_id_card = T_id_card
+		cols = append(cols, "T_id_card")
+	}
+	if len(T_nation) > 0 {
+		user.T_nation = T_nation
+		cols = append(cols, "T_nation")
+	}
+	if len(T_school) > 0 {
+		user.T_school = T_school
+		cols = append(cols, "T_school")
+	}
+	if len(T_major) > 0 {
+		user.T_major = T_major
+		cols = append(cols, "T_major")
+	}
+	if len(T_education) > 0 {
+		user.T_education = T_education
+		cols = append(cols, "T_education")
+	}
+	if len(T_phone) > 0 {
+		user.T_phone = T_phone
+		cols = append(cols, "T_phone")
+	}
+	if T_marry_err != nil {
+		user.T_marry = T_marry
+		cols = append(cols, "T_marry")
+	}
+	if len(T_spouse_name) > 0 {
+		user.T_spouse_name = T_spouse_name
+		cols = append(cols, "T_spouse_name")
+	}
+	if len(T_spouse_phone) > 0 {
+		user.T_spouse_phone = T_spouse_phone
+		cols = append(cols, "T_spouse_phone")
+	}
+	if len(T_entry_time) > 0 {
+		user.T_entry_time = T_entry_time
+		cols = append(cols, "T_entry_time")
+	}
+	if len(T_positive_time) > 0 {
+		user.T_positive_time = T_positive_time
+		cols = append(cols, "T_positive_time")
+	}
+	if len(T_entry_type) > 0 {
+		user.T_entry_type = T_entry_type
+		cols = append(cols, "T_entry_type")
+	}
+	if len(T_contract_start_time) > 0 {
+		user.T_contract_start_time = T_contract_start_time
+		cols = append(cols, "T_contract_start_time")
+	}
+	if len(T_contract_end_time) > 0 {
+		user.T_contract_end_time = T_contract_end_time
+		cols = append(cols, "T_contract_end_time")
+	}
+	if T_expire_err != nil {
+		user.T_expire = T_expire
+		cols = append(cols, "T_expire")
+	}
+	if len(T_remark) > 0 {
+		user.T_remark = T_remark
+		cols = append(cols, "T_remark")
 	}
 
-	if err = Account.Update_User(user, "T_power", "T_name", "T_pass", "T_dept", "T_post"); err != nil {
+	if err = Account.Update_User(user, cols...); err != nil {
 		c.Data["json"] = lib.JSONS{Code: 208, Msg: "修改失败!"}
 		c.ServeJSON()
 		return
@@ -269,6 +417,11 @@ func (c *UserController) Del() {
 		c.ServeJSON()
 		return
 	}
+	if user.Id == 1 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "禁止删除超级管理员!"}
+		c.ServeJSON()
+		return
+	}
 
 	if err = Account.Delete_User(user); err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}

+ 6 - 0
go.mod

@@ -10,7 +10,9 @@ require (
 	github.com/nats-io/nats.go v1.23.0
 	github.com/qiniu/go-sdk/v7 v7.14.0
 	github.com/satori/go.uuid v1.2.0
+	github.com/spf13/cobra v1.6.1
 	github.com/vmihailenco/msgpack/v5 v5.3.5
+	gorm.io/gorm v1.24.6
 )
 
 require (
@@ -19,6 +21,9 @@ require (
 	github.com/golang/protobuf v1.5.2 // indirect
 	github.com/gomodule/redigo v2.0.0+incompatible // indirect
 	github.com/hashicorp/golang-lru v0.5.4 // indirect
+	github.com/inconshreveable/mousetrap v1.0.1 // indirect
+	github.com/jinzhu/inflection v1.0.0 // indirect
+	github.com/jinzhu/now v1.1.5 // indirect
 	github.com/klauspost/compress v1.15.15 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
 	github.com/minio/highwayhash v1.0.2 // indirect
@@ -35,6 +40,7 @@ require (
 	github.com/prometheus/procfs v0.8.0 // indirect
 	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
 	github.com/signintech/gopdf v0.16.1 // indirect
+	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
 	golang.org/x/crypto v0.5.0 // indirect
 	golang.org/x/net v0.5.0 // indirect

+ 14 - 0
go.sum

@@ -66,6 +66,7 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
 github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
 github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
 github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
+github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -167,6 +168,12 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
+github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -271,6 +278,7 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
 github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
@@ -284,6 +292,10 @@ github.com/signintech/gopdf v0.16.1/go.mod h1:wrLtZoWaRNrS4hphED0oflFoa6IWkOu6M3
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
+github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -608,6 +620,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gorm.io/gorm v1.24.6 h1:wy98aq9oFEetsc4CAbKD2SoBCdMzsbSIvSUUFJuHi5s=
+gorm.io/gorm v1.24.6/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

+ 8 - 1
logs/LogPrintln.go

@@ -4,8 +4,11 @@ import (
 	_ "ERP_user/Nats"
 	"ERP_user/conf"
 	"ERP_user/logs"
+	"ERP_user/models/Account"
+	_ "ERP_user/models/Account"
 	_ "ERP_user/routers"
 	"fmt"
+	powerlibs "git.baozhida.cn/ERP_libs/Power"
 	"github.com/beego/beego/v2/adapter/orm"
 	orm2 "github.com/beego/beego/v2/client/orm"
 	beego "github.com/beego/beego/v2/server/web"
@@ -17,13 +20,14 @@ import (
 )
 
 func init() {
-	fmt.Println(runtime.GOOS)
+	fmt.Println("GOOS", runtime.GOOS)
 	orm.RegisterDriver("mysql", orm.DRMySQL)
 	//orm.RegisterDataBase("default", "mysql", "zdxq:7e5853d9178edfcc@tcp(47.108.133.234:3306)/zdxq?charset=utf8",100,200)
 	orm.RegisterDataBase("default", "mysql",
 		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
 		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
 	orm.RunSyncdb("default", false, false) // 创建数据库
+	orm.RegisterModel(new(powerlibs.Power))
 	orm2.Debug = true
 }
 
@@ -54,6 +58,9 @@ func main() {
 	beego.BConfig.WebConfig.AutoRender = false
 	beego.BConfig.RecoverPanic = true
 	beego.BConfig.RecoverFunc = RecoverPanic
+	//migrate.Execute()
+
+	go Account.Read_Dept_All_Map()
 
 	beego.Run()
 

+ 74 - 0
models/Account/Dept.go

@@ -0,0 +1,74 @@
+package Account
+
+import (
+	"ERP_user/logs"
+	"git.baozhida.cn/ERP_libs/lib"
+	"github.com/beego/beego/v2/adapter/orm"
+	"sync"
+	"time"
+)
+
+type Dept struct {
+	Id      int    `orm:"column(ID);size(11);auto;pk"`
+	T_name  string `orm:"size(256);null"`       //  部门名称
+	T_mid   int    `orm:"size(256);null"`       //  Dept.Id  T_mid=0 部门 T_mid>0岗位
+	T_State int    `orm:"size(200);default(1)"` //  0删除  1 正常
+}
+
+var Dept_list *sync.Map
+
+func init() {
+	//注册模型
+	orm.RegisterModel(new(Dept))
+	Dept_list = new(sync.Map)
+}
+
+// 获取全部
+func Read_Dept_All_Map() {
+	logs.Println("=========== 初始化部门类型 =========")
+
+	o := orm.NewOrm()
+	for true {
+		var r []Dept
+		qs := o.QueryTable(new(Dept))
+		_, err := qs.Filter("T_State", 1).All(&r)
+		if err != nil {
+			logs.Error(lib.FuncName(), err)
+		}
+
+		for _, v := range r {
+			Dept_list.Store(v.Id, v.T_name)
+		}
+		time.Sleep(1 * time.Hour)
+	}
+}
+func Read_Dept_Get(Id int) string {
+	v, ok := Dept_list.Load(Id)
+	if ok {
+		return v.(string)
+	} else {
+		return ""
+	}
+}
+
+func Read_Dept_List() (r []Dept) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Dept))
+	_, err := qs.Filter("T_State", 1).Filter("T_mid", 0).All(&r)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return r
+	}
+	return r
+}
+
+func Read_Post_List(T_dept int) (r []Dept) {
+	o := orm.NewOrm()
+	qs := o.QueryTable(new(Dept))
+	_, err := qs.Filter("T_State", 1).Filter("T_mid", T_dept).All(&r)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return r
+	}
+	return r
+}

+ 3 - 0
models/Account/Menu.go

@@ -110,6 +110,9 @@ func Read_User_Bind_Menu_List(T_Menu string) ([]menulibs.Menu, error) {
 
 // 获取列表
 func Read_API_List_ByPower(T_power_id string, Menu_Bind string) (maps []menulibs.API) {
+	if len(Menu_Bind) == 0 {
+		return
+	}
 	o := orm.NewOrm()
 	APIDao := menulibs.NewAPI(o, redisCache_API)
 	maps, err := APIDao.Read_API_List_ByPower(T_power_id, Menu_Bind)

+ 7 - 5
models/Account/Power.go

@@ -10,7 +10,7 @@ import (
 
 func init() {
 	//注册模型
-	orm.RegisterModel(new(powerlibs.Power))
+	//orm.RegisterModel(new(powerlibs.Power))
 }
 
 // 添加
@@ -38,26 +38,28 @@ func Read_Power_ByT_id(T_id string) (r powerlibs.Power, err error) {
 }
 
 // 修改
-func Update_Power(r powerlibs.Power) (id int64, err error) {
+func Update_Power(r powerlibs.Power) (id int, err error) {
 	o := orm.NewOrm()
 	powerDao := powerlibs.NewPower(o)
-	id, err = powerDao.Update_Power(r)
+	_, err = powerDao.Update_Power(r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 	}
+	id = r.Id
 	APIDao := menulibs.NewAPI(o, redisCache_API)
 	APIDao.Redis_API_DelK(r.T_id)
 	return
 }
 
 // 删除
-func Delete_Power(r powerlibs.Power) (id int64, err error) {
+func Delete_Power(r powerlibs.Power) (id int, err error) {
 	o := orm.NewOrm()
 	powerDao := powerlibs.NewPower(o)
-	id, err = powerDao.Delete_Power(r)
+	_, err = powerDao.Delete_Power(r)
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 	}
+	id = r.Id
 	APIDao := menulibs.NewAPI(o, redisCache_API)
 	APIDao.Redis_API_DelK(r.T_id)
 	return

+ 2 - 1
models/Account/Sys.go

@@ -10,8 +10,9 @@ var ERP_Sys_prefix = make([]string, 0)
 func init() {
 	if len(conf.ERP_Sys_List) > 0 {
 		logs.Println("=========== 初始化系统信息 =========")
+		// 除开用户系统的其他系统前缀
 		for k, _ := range conf.ERP_Sys_List {
-			if k == conf.ERP_Account_Sys {
+			if k == conf.ERP_ACCOUNT_Sys {
 				continue
 			}
 			// ERP_Sys_prefix ["ERP_AMS","ERP_"]

+ 81 - 13
models/Account/User.go

@@ -17,20 +17,61 @@ type User struct {
 	T_name  string `orm:"size(256);null"`     //
 	T_user  string `orm:"size(256);null"`     //
 	T_pass  string `orm:"size(256);null"`     //
-	T_dept  string `orm:"size(32);null"`      // 部门
-	T_post  string `orm:"size(32);null"`      // 岗位
+	T_dept  int    `orm:"size(8);null"`       // 部门
+	T_post  int    `orm:"size(8);null"`       // 岗位
+
+	T_dept_leader int `orm:"size(8);default(0)"` // 部门负责人 0-否 1-是
+
+	T_sex                 int    `orm:"size(8);default(1)"`  // 性别 1-男 2-女
+	T_id_card             string `orm:"size(32);null"`       // 身份证号
+	T_nation              string `orm:"size(32);null"`       // 民族
+	T_school              string `orm:"size(32);null"`       // 毕业院校
+	T_major               string `orm:"size(32);null"`       // 专业
+	T_education           string `orm:"size(32);null"`       // 学历
+	T_phone               string `orm:"size(32);null"`       // 联系电话
+	T_marry               int    `orm:"size(8);null"`        // 婚否 0-未婚 1-已婚
+	T_spouse_name         string `orm:"size(32);null"`       // 配偶姓名
+	T_spouse_phone        string `orm:"size(32);null"`       // 联系电话
+	T_entry_time          string `orm:"size(32);null"`       // 入职时间
+	T_positive_time       string `orm:"size(32);null"`       // 转正时间
+	T_entry_type          string `orm:"size(32);default(1)"` // 入职类型 1-全职 2-兼职 3-实习生
+	T_contract_start_time string `orm:"size(32);null"`       // 劳动合同开始时间
+	T_contract_end_time   string `orm:"size(32);null"`       // 劳动合同结束时间
+	T_expire              int    `orm:"size(8);default(0)"`  // 是否到期 0-否 1-是
+	T_remark              string `orm:"size(32);null"`       // 备注
 
 	T_State    int       `orm:"size(200);default(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 User_R struct {
-	T_uuid  string //
-	T_power string // 权限ID
-	T_name  string //
-	T_user  string //
-	T_dept  string // 部门
-	T_post  string // 岗位
+	T_uuid        string //
+	T_power       string // 权限ID
+	T_name        string //
+	T_user        string //
+	T_dept        int    // 部门
+	T_dept_name   string // 部门
+	T_post        int    // 岗位
+	T_post_name   string // 岗位
+	T_dept_leader int    //部门负责人
+
+	T_sex                 int
+	T_id_card             string
+	T_nation              string
+	T_school              string
+	T_major               string
+	T_education           string
+	T_phone               string
+	T_marry               int
+	T_spouse_name         string
+	T_spouse_phone        string
+	T_entry_time          string
+	T_positive_time       string
+	T_entry_type          string
+	T_contract_start_time string
+	T_contract_end_time   string
+	T_expire              int
+	T_remark              string
 }
 
 var User_r *User
@@ -50,7 +91,29 @@ func UserToUser_R(r User) (m User_R) {
 	m.T_name = r.T_name
 	m.T_user = r.T_user
 	m.T_dept = r.T_dept
+	m.T_dept_name = Read_Dept_Get(r.T_dept)
 	m.T_post = r.T_post
+	m.T_post_name = Read_Dept_Get(r.T_post)
+	m.T_dept_leader = r.T_dept_leader
+
+	m.T_sex = r.T_sex
+	m.T_id_card = r.T_id_card
+	m.T_nation = r.T_nation
+	m.T_school = r.T_school
+	m.T_major = r.T_major
+	m.T_education = r.T_education
+	m.T_phone = r.T_phone
+	m.T_marry = r.T_marry
+	m.T_spouse_name = r.T_spouse_name
+	m.T_spouse_phone = r.T_spouse_phone
+	m.T_entry_time = r.T_entry_time
+	m.T_positive_time = r.T_positive_time
+	m.T_entry_type = r.T_entry_type
+	m.T_contract_start_time = r.T_contract_start_time
+	m.T_contract_end_time = r.T_contract_end_time
+	m.T_expire = r.T_expire
+	m.T_remark = r.T_remark
+
 	return
 }
 
@@ -119,17 +182,16 @@ func Update_User(m User, cols ...string) error {
 // 删除
 func Delete_User(v User) error {
 	o := orm.NewOrm()
-	num, err := o.Delete(&v)
+	v.T_State = 0
+	_, err := o.Update(&v, "T_State")
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
-		return err
 	}
-	fmt.Println("Number of records deleted in database:", num)
-	return nil
+	return err
 }
 
 // 获取列表
-func Read_User_List(T_name string, T_power string, page int, page_z int) (r_ []User_R, cnt int64) {
+func Read_User_List(T_name string, T_power string, T_dept, T_dept_leader, page, page_z int) (r_ []User_R, cnt int64) {
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
 	qs := o.QueryTable(new(User))
@@ -151,6 +213,12 @@ func Read_User_List(T_name string, T_power string, page int, page_z int) (r_ []U
 	if len(T_power) > 0 {
 		cond1 = cond1.And("T_power", T_power)
 	}
+	if T_dept > 0 {
+		cond1 = cond1.And("T_dept", T_dept)
+		if T_dept_leader > 0 {
+			cond1 = cond1.And("T_dept_leader", 1)
+		}
+	}
 
 	// 查询
 	var r []User

+ 4 - 4
models/System/SysLogs.go

@@ -32,10 +32,10 @@ func (t *SysLogs) TableName() string {
 func init() {
 	//注册模型
 	orm.RegisterModel(new(SysLogs))
-	go func() {
-		time.Sleep(3 * time.Second)
-		Add_SysLogs("系统", "服务启动", "")
-	}()
+	//go func() {
+	//	time.Sleep(3 * time.Second)
+	//	Add_SysLogs("系统", "服务启动", "")
+	//}()
 }
 func SysLogsToSysLogs_R(r SysLogs) (m SysLogs_R) {
 	m.T_class = r.T_class

+ 6 - 0
routers/User.go

@@ -13,6 +13,7 @@ func init() {
 
 	//-----------用户管理
 	beego.Router("/User/List", &controllers.UserController{}, "*:List") //
+	beego.Router("/User/Get", &controllers.UserController{}, "*:Get")   //
 	beego.Router("/User/Info", &controllers.UserController{}, "*:Info") //
 	beego.Router("/User/Post", &controllers.UserController{}, "*:Post") //
 	beego.Router("/User/Add", &controllers.UserController{}, "*:Add")   //
@@ -44,4 +45,9 @@ func init() {
 	beego.Router("/Menu/List", &controllers.MenuController{}, "*:List")           // 菜单列表
 	beego.Router("/Menu/User_List", &controllers.MenuController{}, "*:User_List") // 用户绑定菜单列表
 
+	//-----------部门
+	beego.Router("/Dept/List", &controllers.DeptController{}, "*:List") // 部门列表
+	//-----------岗位
+	beego.Router("/Post/List", &controllers.DeptController{}, "*:Post_List") // 岗位列表
+
 }

+ 4 - 0
routers/router.go

@@ -1,6 +1,7 @@
 package routers
 
 import (
+	"ERP_user/controllers"
 	errorlibs "git.baozhida.cn/ERP_libs/Error"
 	beego "github.com/beego/beego/v2/server/web"
 )
@@ -10,4 +11,7 @@ func init() {
 	beego.ErrorController(&errorlibs.ErrorController{})
 	//过滤器,拦截所有请求
 	beego.InsertFilter("/*", beego.BeforeRouter, RBACFilter)
+
+	beego.Router("/UpFileToken", &controllers.UpFileController{}, "*:UpFileToken")
+
 }