|
|
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"
|
|
|
)
|
|
|
|
|
|
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
|
|
|
}
|
|
|
//批量保存
|
|
|
_, 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 int32, 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, 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、此学校的附设班有哪些
|
|
|
fsbList, err := BaseOrganizationDao.GetFsb(schoolId)
|
|
|
if err != nil {
|
|
|
return nil, -1, err
|
|
|
}
|
|
|
var xxbxlxmArray = make([]string, len(fsbList)+1)
|
|
|
for i := range fsbList {
|
|
|
xxbxlxmArray[i] = fsbList[i]
|
|
|
}
|
|
|
xxbxlxmArray[len(fsbList)] = xxbxlxm
|
|
|
|
|
|
//3、根据办学类型,查找所有的学段
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Select("distinct 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.In("t1.xxbxlxm", xxbxlxmArray)).
|
|
|
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 int32) ([]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.Query(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.Query(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
|
|
|
}
|
|
|
|
|
|
//调置班级状态为毕业,或者,取消毕业
|
|
|
func BacthSetClassGraduateStatus(in *BaseClassProto.BacthSetClassGraduateStageArg) error {
|
|
|
//遍历每个班
|
|
|
for i := range in.Ids {
|
|
|
//1:恢复为正常班级 -3:毕业
|
|
|
//(1)批量设置班级中学生的状态为毕业状态
|
|
|
var flag int
|
|
|
if in.Status == 2 {
|
|
|
flag = 1
|
|
|
} else {
|
|
|
flag = 2
|
|
|
}
|
|
|
sql := `update t_base_student set b_use=? where class_id=? and b_use=?`
|
|
|
_, err := db.SQL(sql, in.Status, in.Ids[i], flag).Execute()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
//(2)批量设置班级中学生的登录状态为不可用状态
|
|
|
sql = `update t_sys_loginperson set b_use=? where person_id in (select person_id from t_base_student where class_id=?) and b_use=?`
|
|
|
_, err = db.SQL(sql, in.Status, in.Ids[i], flag).Execute()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
//关于缓存的思考:因为我们使用的是Mysql的查询,命中后才使用缓存,所以,即使b_use不符,也不响应查询,同时,缓存中的b_use本身也没有人用。
|
|
|
}
|
|
|
return nil
|
|
|
}
|