|
|
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
|
|
|
}
|