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.

214 lines
6.4 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"
"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
}