package BaseClassDao import ( "dsBaseRpc/RpcService/BaseClass/BaseClassProto" "dsBaseRpc/Utils/CommonUtil" "dsBaseRpc/Utils/DbUtil" "dsBaseRpc/Utils/SqlKit" "dsBaseRpc/models" "errors" "github.com/xormplus/builder" "time" ) var db = DbUtil.Engine //记录操作日志 func ActionLog(ms []models.TBaseClass, actionCode string, actionPersonId string, actionIp string) error { msLog := make([]models.TBaseClassLog, len(ms)) for i := range ms { CommonUtil.CopyFields(ms[i], &msLog[i]) msLog[i].LogId = CommonUtil.GetUUID() msLog[i].ActionCode = actionCode msLog[i].ActionIpAddress = actionIp msLog[i].ActionPersonId = actionPersonId msLog[i].ActionTime = time.Now() } //批量保存 _, err := db.Insert(msLog) return err } //通过主键集合,查找对应的实体bean集合 func GetByIds(ids []string) ([]models.TBaseClass, error) { ms := make([]models.TBaseClass, 0) err := db.In("class_id", ids).Find(&ms) if err != nil { return nil, err } return ms, nil } //判断是不是有在指定班号范围内的班级 func CheckClassNumValid(schoolId string, stageId string, rxnf int32, startBh int32, endBh int32) (bool, error) { classModel := new(models.TBaseClass) //between是包含边界值 total, err := db.Where("bureau_id=? and b_use=1 and stage_id=? and rxnf=? and (bh between ? and ?)", schoolId, stageId, rxnf, startBh, endBh).Count(classModel) if err != nil { return false, err } if total > 0 { return false, nil } else { return true, nil } } //批量增加 func AddBaseClass(ms []models.TBaseClass) (int64, error) { return db.Insert(ms) } //修改 func UpdateBaseClass(model models.TBaseClass, ForceUpdateFields []string) (int64, error) { //1、清除Redis缓存 var ids = []string{model.ClassId} var selector = SqlKit.GetBean("t_base_class") 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.ClassId).Cols(ForceUpdateFields...).Update(model) return affected, err } //分页查询 func PageBaseClass(in *BaseClassProto.QueryArg) ([]map[string]interface{}, int32, error) { //接收传入参数 var limit = int(in.Limit) var offset = int((in.Page - 1) * in.Limit) var myBuilder = builder.Dialect(builder.MYSQL).Select("t1.*,ifnull(t3.xm,'') as teacher_name,(select count(1) from t_base_student as t2 where t1.class_id=t2.class_id and t2.b_use=1) as student_count").From("t_base_class as t1") myBuilder.LeftJoin("t_base_teacher as t3", "t1.teacher_id=t3.person_id") myBuilder.Where(builder.Eq{"t1.b_use": 1}) myBuilder.And(builder.Eq{"t1.rxnf": in.Rxnf}) myBuilder.And(builder.Eq{"t1.stage_id": in.StageId}) myBuilder.And(builder.Eq{"t1.bureau_id": in.BureauId}) //获取拼接完成的SQL语句 sql, err := myBuilder.OrderBy("t1.bh asc").Limit(limit, offset).ToBoundSQL() if err != nil { return nil, 0, err } //调用多查询字段通用方法 list, count, err := SqlKit.Query(sql) return list, count, err } //根据学校ID获取学部(学段)信息 func GetStage(schoolId string) ([]map[string]interface{}, int32, error) { //1、获取办学类型 list := SqlKit.QueryListMapByIds([]string{schoolId}, "t_base_organization") if list == nil || len(list) == 0 { return nil, 0, errors.New("无法找到此学校id。") } xxbxlxm := list[0]["xxbxlxm"].(string) //2、根据办学类型,查找所有的学段 var myBuilder = builder.Dialect(builder.MYSQL).Select("t1.stage_id,t2.stage_name"). From("t_dm_stage_xxbxlxm as t1"). InnerJoin("t_dm_stage as t2", "t1.stage_id=t2.stage_id"). Where(builder.Eq{"t1.xxbxlxm": xxbxlxm}). And(builder.Eq{"t1.b_use": 1}). And(builder.Eq{"t2.b_use": 1}). OrderBy("t2.sort_id") sql, err := myBuilder.ToBoundSQL() if err != nil { return nil, 0, err } return SqlKit.Query(sql) } /** 功能:获取指定学校下有哪些学部的map 作者:黄海 时间:2020-06-19 */ func GetStageMap(schoolId string) map[string]string { list, _, _ := GetStage(schoolId) _map := make(map[string]string) for i := range list { _map[list[i]["stage_name"].(string)] = list[i]["stage_id"].(string) } return _map } //根据学校ID和学部(学段)ID获取入学年份 func GetRxnf(schoolId string, stageId string) ([]map[string]interface{}, int32, error) { var myBuilder = builder.Dialect(builder.MYSQL).Select("distinct rxnf"). From("t_base_class"). Where(builder.Eq{"bureau_id": schoolId}). And(builder.Eq{"stage_id": stageId}). OrderBy("rxnf") sql, err := myBuilder.ToBoundSQL() if err != nil { return nil, 0, err } return SqlKit.Query(sql) }