package BasePositionDao import ( "dsBaseRpc/RpcService/BasePosition/BasePositionProto" "dsBaseRpc/Utils/CommonUtil" "dsBaseRpc/Utils/DbUtil" "dsBaseRpc/Utils/SqlKit" "dsBaseRpc/models" "github.com/xormplus/builder" ) var db = DbUtil.Engine //增加 func AddBasePosition(model models.TBasePosition) (int64, error) { 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, nil } //2、这个单位ID是哪个类型的org_type orgType := list[0]["org_type"].(int64) //区域代码 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}) //如果是学校,那么还需要判断学校办学类型 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 }