123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- package bo
- import (
- "errors"
- "fmt"
- "log"
- "scd_check_tools/global"
- "scd_check_tools/logger"
- "scd_check_tools/models/enum"
- "scd_check_tools/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 {
- DeviceBaseModel
- }
- func init() {
- orm.RegisterModel(new(Global_const_code))
- }
- func LoadAndCacheGlobalCode() {
- db := orm.NewOrm()
- //初始化一些特定系统字典定义,主要是CDC数据类型
- db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "DingzhiCdcDatatype", "systemconstcode", "定值CDC数据类型").Exec()
- db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "YaoCeCdcDatatype", "systemconstcode", "遥测CDC数据类型").Exec()
- db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "YaoXinCdcDatatype", "systemconstcode", "遥信CDC数据类型").Exec()
- db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "YaoKongCdcDatatype", "systemconstcode", "遥控CDC数据类型").Exec()
- db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "OtherCdcDatatype", "systemconstcode", "其他CDC数据类型").Exec()
- lst := []orm.Params{}
- _, err := db.Raw("select * from global_const_code").Values(&lst)
- if err != nil {
- log.Println(err)
- }
- hasDingzhiCdcDatatype := false
- hasYaoCeCdcDatatype := false
- hasYaoXinCdcDatatype := false
- hasYaoKongCdcDatatype := false
- hasOtherCdcDatatype := false
- if len(lst) > 0 {
- for _, item := range lst {
- pcode := tools.IsEmpty(item["parentcode"])
- code := tools.IsEmpty(item["code"])
- name := tools.IsEmpty(item["name"])
- key := "global_code_" + pcode + code
- global.GoCahce.Set(key, item, -1)
- key = "global_code_" + tools.IsEmpty(item["id"])
- global.GoCahce.Set(key, item, -1)
- if pcode == "DingzhiCdcDatatype" {
- hasDingzhiCdcDatatype = true
- DingZhiMap[code] = name
- } else if pcode == "YaoCeCdcDatatype" {
- hasYaoCeCdcDatatype = true
- YaoCeMap[code] = name
- } else if pcode == "YaoXinCdcDatatype" {
- hasYaoXinCdcDatatype = true
- YaoXinMap[code] = name
- } else if pcode == "YaoKongCdcDatatype" {
- hasYaoKongCdcDatatype = true
- YaoKongMap[code] = name
- } else if pcode == "OtherCdcDatatype" {
- hasOtherCdcDatatype = true
- OtherCdcTypeMap[code] = name
- }
- }
- }
- if !hasDingzhiCdcDatatype {
- for k, v := range DingZhiMap {
- db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "DingzhiCdcDatatype", v).Exec()
- }
- }
- if !hasYaoCeCdcDatatype {
- for k, v := range YaoCeMap {
- db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "YaoCeCdcDatatype", v).Exec()
- }
- }
- if !hasYaoXinCdcDatatype {
- for k, v := range YaoXinMap {
- db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "YaoXinCdcDatatype", v).Exec()
- }
- }
- if !hasYaoKongCdcDatatype {
- for k, v := range YaoKongMap {
- db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "YaoKongCdcDatatype", v).Exec()
- }
- }
- if !hasOtherCdcDatatype {
- for k, v := range OtherCdcTypeMap {
- db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "OtherCdcDatatype", v).Exec()
- }
- }
- }
- 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.SetUserInfo(userinfo[0])
- } else {
- dblog.SetUserInfo(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.SetUserInfo(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) 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.SetUserInfo(t.GetUserInfo())
- 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
- }
- //获取指定ID的代码
- func (t *Global) GetCodeInfoByID(id string) orm.Params {
- key := "global_code_" + id
- r, _ := global.GoCahce.Get(key)
- if r != nil {
- return r.(orm.Params)
- }
- return nil
- }
- func (t *Global) GetCodeInfoByCode(pcode, code string) orm.Params {
- key := "global_code_" + pcode + code
- r, _ := global.GoCahce.Get(key)
- if r != nil {
- return r.(orm.Params)
- }
- return nil
- }
- //类别管理树
- 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.SetUserInfo(t.GetUserInfo())
- 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.SetUserInfo(t.GetUserInfo())
- 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
- }
|