package bo import ( "errors" "fmt" "log" "rtzh_elec_temperature/enum" "rtzh_elec_temperature/global" "rtzh_elec_temperature/logger" "rtzh_elec_temperature/tools" "strconv" "strings" "github.com/astaxie/beego/orm" _ "github.com/astaxie/beego/orm" ) type Global_const_code struct { Id int `orm:pk;auto` Code string `orm:"size(20)"` Parentcode string `orm:"size(20)"` Name string `orm:"size(20)"` } type Global struct { Userinfo map[string]interface{} } func init() { orm.RegisterModel(new(Global_const_code)) } func LoadAndCacheGlobalCode() { db := orm.NewOrm() lst := []orm.Params{} _, err := db.Raw("select * from global_const_code").Values(&lst) if err != nil { log.Println(err) } if len(lst) > 0 { for _, item := range lst { key := "global_code_" + tools.IsEmpty(item["parentcode"]) + tools.IsEmpty(item["code"]) global.GoCahce.Set(key, item, -1) key = "global_code_" + tools.IsEmpty(item["id"]) global.GoCahce.Set(key, item, -1) } } } func SaveGlobalCode(obj Global_const_code, userinfo ...map[string]interface{}) (int, error) { has, errorn := checkName(obj) if !has || errorn != nil { return 0, errorn } dblog := new(SystemLog) if len(userinfo) > 0 { dblog.UserInfo = userinfo[0] } else { dblog.UserInfo = map[string]interface{}{"name": "", "ip": "127.0.0.1"} } dblog.Audittype = enum.AuditType_admin_system_dict dblog.Logtype = enum.LogType_Insert dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Mid global.GoCahce.Delete("global_code_" + obj.Parentcode + obj.Code) o := orm.NewOrm() if obj.Id > 0 { dblog.Logtype = enum.LogType_Update _, err := o.Update(&obj) if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("编辑数据失败:%s,操作数据:%+v", err.Error(), obj) dblog.Fail2() return 0, err } dblog.Description = fmt.Sprintf("编辑数据成功,操作数据:%+v", obj) dblog.Success2() } else { newid, err := o.Insert(&obj) if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("新增数据失败:%s,操作数据:%+v", err.Error(), obj) dblog.Fail2() return 0, err } obj.Id = int(newid) dblog.Description = fmt.Sprintf("新增数据成功,操作数据:%+v", obj) dblog.Success2() } return obj.Id, nil } func DeleteGlobalCode(param Global_const_code, userinfo map[string]interface{}) (result int64, err error) { o := orm.NewOrm() dblog := new(SystemLog) dblog.UserInfo = userinfo dblog.Audittype = enum.AuditType_admin_system_dict dblog.Logtype = enum.LogType_Delete dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Mid if param.Id > 0 { global.GoCahce.Delete("global_code_" + tools.IsEmpty(param.Id)) err = o.Read(¶m) if err == nil { global.GoCahce.Delete("global_code_" + param.Parentcode + param.Code) } _, err = o.Raw("delete from global_const_code where id=?", param.Id).Exec() } else { _, err = o.Raw("delete from global_const_code where parentcode=?", param.Code).Exec() _, err = o.Raw("delete from global_const_code where code=?", param.Code).Exec() } if err != nil { dblog.Description = fmt.Sprintf("删除数据失败:%s,操作数据:%+v", err.Error(), param) dblog.Fail2() return 0, errors.New(err.Error()) } dblog.Description = fmt.Sprintf("删除数据成功,操作数据:%+v", param) dblog.Success2() return 1, nil } func checkName(bo Global_const_code) (bool, error) { if tools.IsEmpty(bo.Code) == "" { return false, errors.New("系统常量编码不能为空") } if tools.IsEmpty(bo.Parentcode) == "" { return false, errors.New("上级编码不能为空") } if tools.IsEmpty(bo.Name) == "" { return false, errors.New("系统常量名称不能为空") } o := orm.NewOrm() var sqlCommandText string var sqlParameter []interface{} if bo.Id > 0 { sqlCommandText = "select 1 from global_const_code where parentcode=? and name=? and id!=?" sqlParameter = append(sqlParameter, bo.Parentcode, bo.Name, bo.Id) } else { sqlCommandText = "select 1 from global_const_code where parentcode=? and name=?" sqlParameter = append(sqlParameter, bo.Parentcode, bo.Name) } var maps []orm.Params _, err := o.Raw(sqlCommandText, sqlParameter).Values(&maps) if err != nil { return false, err } if len(maps) > 0 { return false, errors.New("系统常量名称已存在") } return true, nil } //获取指定的系统代码信息 func (t *Global) GetCodeInfo(pcode, code string) (orm.Params, error) { key := "global_code_" + pcode + code if row, has := global.GoCahce.Get(key); has { return row.(orm.Params), nil } else { lst := []orm.Params{} db := orm.NewOrm() _, err := db.Raw("select * from global_const_code where parentcode=? and code=?", pcode, code).Values(&lst) if err != nil { logger.Logger.Error(err) return orm.Params{}, err } if len(lst) > 0 { global.GoCahce.Set(key, lst[0], -1) return lst[0], nil } } return orm.Params{}, nil } func (t *Global) GetChildrenGlobalCode(code string) ([]orm.Params, error) { o := orm.NewOrm() if code == "" { code = "systemconstcode" //根节点 } tableData := []orm.Params{} var SqlCommandText = "select a.id,a.code,a.parentcode,a.name,(select case count(0) when 0 then 'false' else 'true' end from global_const_code where parentcode=a.code) isParent from global_const_code a where a.parentcode=? " _, err := o.Raw(SqlCommandText, code).Values(&tableData) if code == "systemconstcode" { tableData = append(tableData, orm.Params{"id": "0", "code": "systemconstcode", "parentcode": "", "name": "系统代码", "isParent": "true", "open": "true"}) } return tableData, err } func (t *Global) QueryGlobalCodeList(param map[string]interface{}) ([]orm.Params, int, error) { dblog := new(SystemLog) dblog.UserInfo = t.Userinfo dblog.Audittype = enum.AuditType_admin_system_dict dblog.Logtype = enum.LogType_Query dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Mid o := orm.NewOrm() tableData := []orm.Params{} var SqlCommandText = "select * from global_const_code " var sqlCondition []string var sqlParameter []interface{} var limit, totalSQL string if id, ok := param["id"]; ok && tools.IsEmpty(id) != "" { sqlCondition = append(sqlCondition, "id=?") sqlParameter = append(sqlParameter, id) } else if code, ok := param["code"]; ok && tools.IsEmpty(code) != "" { sqlCondition = append(sqlCondition, "code=?") sqlParameter = append(sqlParameter, code) } else if parentCode, ok1 := param["pcode"]; ok1 && tools.IsEmpty(parentCode) != "" { sqlCondition = append(sqlCondition, "parentcode=?") sqlParameter = append(sqlParameter, parentCode) } if len(sqlCondition) > 0 { SqlCommandText += " where " + strings.Join(sqlCondition, " and ") + " order by code asc " totalSQL = "select count(1) total from global_const_code where " + strings.Join(sqlCondition, " and ") } else { SqlCommandText += " order by code asc" totalSQL = "select count(1) total from global_const_code " } if index, ok := param["pageindex"]; ok { pageIndex, _ := strconv.Atoi(index.(string)) pageSize, _ := strconv.Atoi(param["pagesize"].(string)) limit = " limit " + strconv.Itoa((pageIndex-1)*pageSize) + "," + strconv.Itoa(pageSize) SqlCommandText += limit } var number int _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData) dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", SqlCommandText, sqlParameter) if err == nil { dblog.Success2() totalTable := []orm.Params{} _, err1 := o.Raw(totalSQL, sqlParameter).Values(&totalTable) if err1 == nil && len(totalTable) > 0 { number, _ = strconv.Atoi(totalTable[0]["total"].(string)) } } else { logger.Logger.Error(err, dblog.Description) dblog.Fail2() } return tableData, number, err } //类别管理树 func (t *Global) GetCategoryTree() ([]orm.Params, error) { o := orm.NewOrm() var tableData = []orm.Params{} var SqlCommandText = "select id,code,parentcode,name title from global_const_code where code like 'pstype%';" _, err := o.Raw(SqlCommandText).Values(&tableData) dblog := new(SystemLog) dblog.UserInfo = t.Userinfo dblog.Audittype = enum.AuditType_admin_system_dict dblog.Logtype = enum.LogType_Query dblog.Eventtype = enum.OptEventType_System dblog.Eventlevel = enum.OptEventLevel_Low dblog.Description = SqlCommandText if err == nil { dblog.Success2() } else { logger.Logger.Error(err, SqlCommandText) dblog.Fail2() } return tableData, err } //获取角色管理菜单树 func (t *Global) GetMenuTree(roleId int) ([]orm.Params, error) { o := orm.NewOrm() tableData := []orm.Params{} var SqlCommandText string var sqlParameter []interface{} if roleId > -1 { SqlCommandText = "select funccodeid id from t_data_role_func where roleid=? " sqlParameter = append(sqlParameter, roleId) } else { SqlCommandText = "select funccodeid id from t_data_role_func " } SqlCommandText += " order by id asc " _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData) dblog := new(SystemLog) dblog.UserInfo = t.Userinfo dblog.Audittype = enum.AuditType_admin_system_dict dblog.Logtype = enum.LogType_Query dblog.Eventtype = enum.OptEventType_System dblog.Eventlevel = enum.OptEventLevel_Low dblog.Description = SqlCommandText if err == nil { dblog.Success2() } else { logger.Logger.Error(err, SqlCommandText) dblog.Fail2() } return tableData, err } //获取角色管理菜单树 func (t *Global) childrenMenu(code string, roleId int) ([]map[string]interface{}, error) { o := orm.NewOrm() tableData := []orm.Params{} var SqlCommandText string var sqlParameter []interface{} if roleId > -1 { SqlCommandText = "select a.id,a.name,case when b.id is null then 0 else 1 end checked " + "from global_const_code a left join (select funccodeid id from t_data_role_func where roleid=?) b on a.id=b.id where parentcode=?" sqlParameter = append(sqlParameter, roleId, code) } else { SqlCommandText = "select id,name,0 checked from global_const_code where parentcode=?" sqlParameter = append(sqlParameter, code) } _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData) var result []map[string]interface{} if err == nil && len(tableData) > 0 { for _, record := range tableData { checked, _ := strconv.ParseBool(record["checked"].(string)) result = append(result, map[string]interface{}{"id": record["id"], "name": record["name"], "checked": checked}) } } return result, err }