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.

374 lines
11 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 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
}