|
|
package BaseClassDao
|
|
|
|
|
|
import (
|
|
|
"dsBaseRpc/RpcService/BaseClass/BaseClassProto"
|
|
|
"dsBaseRpc/RpcService/BaseOrganization/BaseOrganizationDao"
|
|
|
"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
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:指定单位(部门)下是不是存在班级
|
|
|
作者:黄海
|
|
|
时间:2020-07-27
|
|
|
*/
|
|
|
func ExistClass(orgId string) (bool, error) {
|
|
|
var sql string
|
|
|
if BaseOrganizationDao.IsBuMen(orgId) {
|
|
|
sql = `select count(*) as c from t_base_class where b_use=1 and org_id=?`
|
|
|
} else {
|
|
|
sql = `select count(*) as c from t_base_class where b_use=1 and bureau_id=?`
|
|
|
}
|
|
|
list, err := db.SQL(sql, orgId).Query().List()
|
|
|
if err != nil {
|
|
|
return false, err
|
|
|
}
|
|
|
if list[0]["c"].(int64) > 0 {
|
|
|
return true, nil
|
|
|
} else {
|
|
|
return false, nil
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//分页查询
|
|
|
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})
|
|
|
//排除某个班级,用在将学生进行调整班级时的需求
|
|
|
if in.RemoveClassId != "" {
|
|
|
myBuilder.And(builder.Neq{"t1.class_id": in.RemoveClassId})
|
|
|
}
|
|
|
//获取拼接完成的SQL语句
|
|
|
sql, err := myBuilder.OrderBy("t1.bh asc").Limit(limit, offset).ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
}
|
|
|
//调用多查询字段通用方法
|
|
|
list, err := db.SQL(sql).Query().List()
|
|
|
return list, int32(len(list)), 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.QueryForPk(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}).
|
|
|
And(builder.Eq{"b_use": 1}).
|
|
|
OrderBy("rxnf")
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
}
|
|
|
return SqlKit.QueryForPk(sql)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:清除删除人员时,人员对应的班主任信息
|
|
|
作者:黄海
|
|
|
时间:2020-07-17
|
|
|
*/
|
|
|
func ClearPersonBzr(teacherIds []string) error {
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Select("class_id").
|
|
|
From("t_base_class").
|
|
|
Where(builder.In("teacher_id", teacherIds)).
|
|
|
And(builder.Eq{"b_use": 1})
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
list, _, err := SqlKit.QueryForPk(sql)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
var ClassIds []string
|
|
|
for i := range list {
|
|
|
id := list[i]["class_id"].(string)
|
|
|
ClassIds = append(ClassIds, id)
|
|
|
//删除班主任
|
|
|
tbc := new(models.TBaseClass)
|
|
|
_, err := db.Table(tbc).ID(id).Update(map[string]interface{}{"teacher_id": ""})
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
}
|
|
|
//清除Redis缓存
|
|
|
var selector = SqlKit.GetBean("t_base_class")
|
|
|
SqlKit.DeleteCacheByIds(ClassIds, selector)
|
|
|
return nil
|
|
|
}
|