|
|
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.QueryByIds([]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)
|
|
|
}
|