You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package BasePositionDao
import (
"dsBaseRpc/RpcService/BasePosition/BasePositionProto"
"dsBaseRpc/Utils/CommonUtil"
"dsBaseRpc/Utils/DbUtil"
"dsBaseRpc/Utils/SqlKit"
"dsBaseRpc/models"
"errors"
"github.com/xormplus/builder"
)
var db = DbUtil.Engine
//增加
func AddBasePosition(model models.TBasePosition) (int64, error) {
if model.SortId == 0 {
sql := `select ifnull(max(sort_id),0) as maxSortId from t_base_position where parent_id=?`
list, err := db.SQL(sql, model.ParentId).Query().List()
if err != nil {
return -1, err
}
model.SortId = int32(list[0]["maxSortId"].(int64) + 1)
}
return db.Insert(model)
}
//修改
func UpdateBasePosition(model models.TBasePosition, ForceUpdateFields []string) (int64, error) {
//1、清除Redis缓存
var ids = []string{model.Id}
var selector = SqlKit.GetBean("t_base_position")
SqlKit.DeleteCacheByIds(ids, selector)
//2、计算本次操作有哪些字段需要更新
NeedUpdateFields := CommonUtil.GetNeedUpdateFields(model)
//3、合并强制更新的字段
ForceUpdateFields = append(ForceUpdateFields, NeedUpdateFields...)
//4、去重
ForceUpdateFields = CommonUtil.RemoveDuplicatesAndEmpty(ForceUpdateFields)
//5、更新操作,强制更新这些列
affected, err := db.ID(model.Id).Cols(ForceUpdateFields...).Update(model)
return affected, err
}
//获取职务所有的树形结构信息(不需要参数)
func TreeBasePosition() ([]map[string]interface{}, int, error) {
var myBuilder = builder.Dialect(builder.MYSQL).Select("*").From("t_base_position")
myBuilder.Where(builder.Eq{"b_use": 1})
//myBuilder.OrderBy("area_level")
//myBuilder.OrderBy("org_type")
//myBuilder.OrderBy("xxbxlxm")
myBuilder.OrderBy("sort_id")
//获取拼接完成的SQL语句
sql, err := myBuilder.ToBoundSQL()
if err != nil {
return nil, 0, err
}
//调用多查询字段通用方法
list, err := db.SQL(sql).Query().List()
return list, len(list), err
}
//根据单位ID获取职务信息
func ListBasePositionByBureauId(in *BasePositionProto.ListBasePositionByBureauIdArg) ([]map[string]interface{}, int, error) {
//1、获取单位信息
bureauId := in.BureauId
list := SqlKit.QueryByIds([]string{bureauId}, "t_base_organization")
if list == nil || len(list) == 0 {
return nil, -1, errors.New("无法找到指定的单位ID")
}
//2、这个单位ID是哪个类型的org_type
orgType := list[0]["org_type"].(float64) //这里有一个坑因为这里不是从MYSQL获取的而是从REDIS中获取的
//区域代码
areaCode := list[0]["area_code"].(string)
//办学类型
xxbxlxm := list[0]["xxbxlxm"].(string)
//级别
var areaLevel int32
//获取org_type 1:教育局2学校
if orgType == 1 {
//通过areaCode 获取区域级别是1还是2
if areaCode[4:] == "00" {
areaLevel = 1 //市级
} else {
areaLevel = 2 //县区级
}
} else { //2是学校
//如果是学校因为学校全都是在县区中存在所以areaLevel=2
areaLevel = 2
}
var myBuilder = builder.Dialect(builder.MYSQL).Select("*").From("t_base_position")
myBuilder.Where(builder.Eq{"b_use": 1})
myBuilder.And(builder.Eq{"area_level": areaLevel})
myBuilder.And(builder.Eq{"org_type": orgType})
myBuilder.And(builder.Eq{"postion_flag": 1})
//如果是学校,那么还需要判断学校办学类型
if orgType == 2 {
myBuilder.And(builder.Eq{"xxbxlxm": xxbxlxm})
}
myBuilder.OrderBy("sort_id")
//获取拼接完成的SQL语句
sql, err := myBuilder.ToBoundSQL()
if err != nil {
return nil, 0, err
}
//调用多查询字段通用方法
list, err = db.SQL(sql).Query().List()
return list, len(list), err
}