|
|
package BaseClassService
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
"dsBaseRpc/Const"
|
|
|
"dsBaseRpc/Const/ErrorConst"
|
|
|
"dsBaseRpc/RpcService/BaseClass/BaseClassDao"
|
|
|
"dsBaseRpc/RpcService/BaseClass/BaseClassProto"
|
|
|
"dsBaseRpc/RpcService/BaseOrganization/BaseOrganizationDao"
|
|
|
"dsBaseRpc/RpcService/BaseStudent/BaseStudentDao"
|
|
|
"dsBaseRpc/RpcService/BaseStudent/BaseStudentProto"
|
|
|
"dsBaseRpc/Utils/CommonUtil"
|
|
|
"dsBaseRpc/Utils/LogUtil"
|
|
|
"dsBaseRpc/Utils/SqlKit"
|
|
|
"dsBaseRpc/models"
|
|
|
"fmt"
|
|
|
"strings"
|
|
|
)
|
|
|
|
|
|
type Rpc struct{} //服务对象
|
|
|
|
|
|
//选择单条
|
|
|
func (s *Rpc) GetBaseClass(ctx context.Context, in *BaseClassProto.ModelArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
//rpc响应
|
|
|
var reply BaseClassProto.Reply
|
|
|
//通用获取单条
|
|
|
list := SqlKit.QueryByIds([]string{in.ClassId}, "t_base_class")
|
|
|
//将结果序列化
|
|
|
reply.Success = true
|
|
|
reply.Count = 1
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
reply.List = CommonUtil.SerializeToString(list)
|
|
|
return &reply, nil
|
|
|
}
|
|
|
|
|
|
//增加
|
|
|
func (s *Rpc) AddBaseClass(ctx context.Context, in *BaseClassProto.ModelArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
//rpc响应
|
|
|
var reply BaseClassProto.Reply
|
|
|
//检查单位号是不是存在
|
|
|
list := SqlKit.QueryByIds([]string{in.BureauId}, "t_base_organization")
|
|
|
if list == nil || len(list) == 0 {
|
|
|
reply.Success = false
|
|
|
reply.Message = "输入的学校编号不存在,无法创建班级!"
|
|
|
return &reply, nil
|
|
|
}
|
|
|
//这里需要注意的是,如果list是从redis中返回的,那么数据类型是float64,而从mysql返回的是int64
|
|
|
if int32(list[0]["org_type"].(float64)) != 2 {
|
|
|
reply.Success = false
|
|
|
reply.Message = "输入的编号存在,但不是学校类型,无法创建班级!"
|
|
|
return &reply, nil
|
|
|
}
|
|
|
|
|
|
//开始班号,结束班号
|
|
|
if in.StartBh > in.EndBh {
|
|
|
reply.Success = false
|
|
|
reply.Message = "开始班号不能大于结束班号!"
|
|
|
return &reply, nil
|
|
|
}
|
|
|
if in.StartBh > 99 || in.EndBh > 99 {
|
|
|
reply.Success = false
|
|
|
reply.Message = "输入班号不能大于99!"
|
|
|
return &reply, nil
|
|
|
}
|
|
|
valid, err := BaseClassDao.CheckClassNumValid(in.BureauId, in.StageId, in.Rxnf, in.StartBh, in.EndBh)
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行CheckClassNumValid时发生严重错误:"+err.Error())
|
|
|
return &reply, nil
|
|
|
}
|
|
|
//班号存在逻辑上的问题
|
|
|
if !valid {
|
|
|
reply.Success = false
|
|
|
reply.Message = "输入的班号与现有的班号冲突,无法创建!"
|
|
|
return &reply, nil
|
|
|
}
|
|
|
//省市县+主校
|
|
|
_, provinceCode, cityCode, districtCode, mainSchoolId, err := BaseOrganizationDao.GetBureauAdministrativeDivision(in.BureauId)
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = err.Error()
|
|
|
return &reply, nil
|
|
|
}
|
|
|
//声明实体数组
|
|
|
modelArray := make([]models.TBaseClass, 0)
|
|
|
//循环添加班级
|
|
|
for i := in.StartBh; i <= in.EndBh; i++ {
|
|
|
model := new(models.TBaseClass)
|
|
|
model.ClassId = CommonUtil.GetUUID()
|
|
|
//班号
|
|
|
model.Bh = i
|
|
|
//入学年份
|
|
|
model.Rxnf = in.Rxnf
|
|
|
//ClassCode是我来规定的,规则是入学年份+1位学段码+两位班号,前补零
|
|
|
model.ClassCode = CommonUtil.ConvertInt32ToString(in.Rxnf) + CommonUtil.ConvertInt32ToString(in.StageId) + fmt.Sprintf("%02d", i)
|
|
|
//ClassName --->入学年份+班号
|
|
|
model.ClassName = CommonUtil.ConvertInt32ToString(in.Rxnf) + "级" + CommonUtil.ConvertInt32ToString(i) + "班"
|
|
|
//ClassAlias --->入学年份+班号
|
|
|
if in.ClassAlias == "" {
|
|
|
model.ClassAlias = model.ClassName
|
|
|
} else {
|
|
|
model.ClassAlias = in.ClassAlias
|
|
|
}
|
|
|
//入学季节
|
|
|
model.Rxjj = 9 //暂时使用秋季表示的月份
|
|
|
//学制
|
|
|
model.SchoolingLength = in.SchoolingLength
|
|
|
//学段
|
|
|
model.StageId = in.StageId
|
|
|
|
|
|
//这个不能给,这个是其它接口再补的
|
|
|
//model.TeacherId = in.TeacherId
|
|
|
|
|
|
//这个用于职业学校扩展,暂不提供
|
|
|
//model.OrgId = in.OrgId
|
|
|
|
|
|
//单位ID
|
|
|
model.BureauId = in.BureauId
|
|
|
//主校ID
|
|
|
model.MainSchoolId = mainSchoolId
|
|
|
//是否启用
|
|
|
model.BUse = 1
|
|
|
//扩展省,市,县区码
|
|
|
model.ProvinceCode = provinceCode
|
|
|
model.CityCode = cityCode
|
|
|
model.DistrictCode = districtCode
|
|
|
//添加到实体数组
|
|
|
modelArray = append(modelArray, *model)
|
|
|
}
|
|
|
//批量增加
|
|
|
_, err = BaseClassDao.AddBaseClass(modelArray)
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行AddBaseClass时发生严重错误:"+err.Error())
|
|
|
} else {
|
|
|
reply.Success = true
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
}
|
|
|
//记录日志
|
|
|
err = BaseClassDao.ActionLog(modelArray, Const.ActionInsert, in.ActionPersonId, in.ActionIpAddress)
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行ActionLog时发生严重错误:"+err.Error())
|
|
|
}
|
|
|
return &reply, err
|
|
|
}
|
|
|
|
|
|
//删除
|
|
|
func (s *Rpc) DeleteBaseClass(ctx context.Context, in *BaseClassProto.DeleteIdsArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
//rpc响应
|
|
|
var reply BaseClassProto.Reply
|
|
|
|
|
|
//判断班级下是不是存在可用的学生?
|
|
|
for i := range in.Ids {
|
|
|
var inStudent BaseStudentProto.QueryArg
|
|
|
inStudent.Page = 1
|
|
|
inStudent.Limit = 1
|
|
|
inStudent.Xm = ""
|
|
|
inStudent.ClassId = in.Ids[i]
|
|
|
_, count, err := BaseStudentDao.PageBaseStudent(&inStudent)
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行PageBaseStudent时发生严重错误:"+err.Error())
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
return &reply, err
|
|
|
}
|
|
|
if count > 0 {
|
|
|
reply.Success = false
|
|
|
reply.Message = "班级下存在可用的学生,无法删除!"
|
|
|
return &reply, err
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//调用通用删除命令进行删除
|
|
|
err := SqlKit.DeleteIds("t_base_class", in.Ids)
|
|
|
//错误处理
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行DeleteBaseClass时发生严重错误:"+err.Error())
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
return &reply, err
|
|
|
}
|
|
|
//记录日志
|
|
|
ms, err := BaseClassDao.GetByIds(in.Ids)
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行FindModelsByIds时发生严重错误:"+err.Error())
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
return &reply, err
|
|
|
}
|
|
|
err = BaseClassDao.ActionLog(ms, Const.ActionDelete, in.ActionPersonId, in.ActionIpAddress)
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行ActionLog时发生严重错误:"+err.Error())
|
|
|
}
|
|
|
reply.Success = true
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
return &reply, err
|
|
|
}
|
|
|
|
|
|
//修改
|
|
|
func (s *Rpc) UpdateBaseClass(ctx context.Context, in *BaseClassProto.ModelArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
//rpc响应
|
|
|
var reply BaseClassProto.Reply
|
|
|
//修改
|
|
|
model := new(models.TBaseClass)
|
|
|
model.ClassId = in.ClassId
|
|
|
model.ClassAlias = in.ClassAlias
|
|
|
model.TeacherId = in.TeacherId
|
|
|
_, err := BaseClassDao.UpdateBaseClass(*model, in.ForceUpdateFields)
|
|
|
//错误处理
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行UpdateBaseClass时发生严重错误:"+err.Error())
|
|
|
return &reply, err
|
|
|
}
|
|
|
|
|
|
//记录日志
|
|
|
ms, err := BaseClassDao.GetByIds([]string{in.ClassId})
|
|
|
if err != nil {
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行FindModelsByIds时发生严重错误:"+err.Error())
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
return &reply, err
|
|
|
}
|
|
|
err = BaseClassDao.ActionLog(ms, Const.ActionUpdate, in.ActionPersonId, in.ActionIpAddress)
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlUpdateError, "执行ActionLog时发生严重错误:"+err.Error())
|
|
|
}
|
|
|
reply.Success = true
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
return &reply, nil
|
|
|
}
|
|
|
|
|
|
//分页查询
|
|
|
func (s *Rpc) PageBaseClass(ctx context.Context, in *BaseClassProto.QueryArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
//rpc响应
|
|
|
var reply BaseClassProto.Reply
|
|
|
list, count, err := BaseClassDao.PageBaseClass(in)
|
|
|
//错误处理
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlQueryError, "执行PageBaseClass时发生严重错误:"+err.Error())
|
|
|
return &reply, err
|
|
|
}
|
|
|
reply.Count = count
|
|
|
reply.Success = true
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
reply.List = CommonUtil.SerializeToString(list)
|
|
|
return &reply, nil
|
|
|
}
|
|
|
|
|
|
//根据学校ID获取学部(学段)信息
|
|
|
func (s *Rpc) GetStage(ctx context.Context, in *BaseClassProto.ModelArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
//rpc响应
|
|
|
var reply BaseClassProto.Reply
|
|
|
list, count, err := BaseClassDao.GetStage(in.BureauId)
|
|
|
//错误处理
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlQueryError, "执行GetStage时发生严重错误:"+err.Error())
|
|
|
return &reply, err
|
|
|
}
|
|
|
reply.Count = count
|
|
|
reply.Success = true
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
reply.List = CommonUtil.SerializeToString(list)
|
|
|
return &reply, nil
|
|
|
}
|
|
|
|
|
|
//根据学校ID和学部(学段)ID获取入学年份
|
|
|
func (s *Rpc) GetRxnf(ctx context.Context, in *BaseClassProto.ModelArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
//rpc响应
|
|
|
var reply BaseClassProto.Reply
|
|
|
list, count, err := BaseClassDao.GetRxnf(in.BureauId, in.StageId)
|
|
|
//错误处理
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlQueryError, "执行GetRxnf时发生严重错误:"+err.Error())
|
|
|
return &reply, err
|
|
|
}
|
|
|
var rxnfArray = make([]int64, 0)
|
|
|
for i := range list {
|
|
|
rxnfArray = append(rxnfArray, list[i]["rxnf"].(int64))
|
|
|
}
|
|
|
reply.Count = count
|
|
|
reply.Success = true
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
reply.List = strings.Replace(fmt.Sprint(rxnfArray), " ", ",", -1)
|
|
|
return &reply, nil
|
|
|
}
|
|
|
|
|
|
//调置班级状态为毕业,或者,取消毕业
|
|
|
func (s *Rpc) BacthSetClassGraduateStatus(ctx context.Context, in *BaseClassProto.BacthSetClassGraduateStageArg) (*BaseClassProto.Reply, error) {
|
|
|
//异常处理
|
|
|
defer func() {
|
|
|
if err := recover(); err != nil {
|
|
|
fmt.Printf("%s\n", err)
|
|
|
}
|
|
|
}()
|
|
|
var reply BaseClassProto.Reply
|
|
|
var err error
|
|
|
if len(in.Ids) == 0 {
|
|
|
reply.Success = false
|
|
|
reply.Message = "输入的班级最少是一个,目前是零个!"
|
|
|
return &reply, err
|
|
|
}
|
|
|
//调用Dao层进行处理
|
|
|
err = BaseClassDao.BacthSetClassGraduateStatus(in)
|
|
|
//错误处理
|
|
|
if err != nil {
|
|
|
reply.Success = false
|
|
|
reply.Message = Const.DataBaseActionError
|
|
|
LogUtil.Error(ErrorConst.SqlQueryError, "执行BacthSetClassGraduateStatus时发生严重错误:"+err.Error())
|
|
|
return &reply, err
|
|
|
}
|
|
|
reply.Count = int32(len(in.Ids))
|
|
|
reply.Success = true
|
|
|
reply.Message = Const.SuccessDataBaseAction
|
|
|
return &reply, nil
|
|
|
}
|