You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

252 lines
7.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 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, 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 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.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
}