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.

606 lines
18 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 BaseTeacherService
import (
"context"
"dsBaseRpc/Const"
"dsBaseRpc/Const/ErrorConst"
"dsBaseRpc/RpcService/BaseClass/BaseClassDao"
"dsBaseRpc/RpcService/BaseOrganizationManager/BaseOrganizationManagerDao"
"dsBaseRpc/RpcService/BaseTeacher/BaseTeacherDao"
"dsBaseRpc/RpcService/BaseTeacher/BaseTeacherProto"
"dsBaseRpc/RpcService/SysLoginperson/SysLoginpersonDao"
"dsBaseRpc/RpcService/SysLoginperson/SysLoginpersonService"
"dsBaseRpc/Utils/CommonUtil"
"dsBaseRpc/Utils/DateUtil"
"dsBaseRpc/Utils/DbUtil"
"dsBaseRpc/Utils/ExcelUtil"
"dsBaseRpc/Utils/IdCardUtil"
"dsBaseRpc/Utils/LogUtil"
"dsBaseRpc/Utils/MobileUtil"
"dsBaseRpc/Utils/PinYinUtil"
"dsBaseRpc/Utils/SqlKit"
"dsBaseRpc/models"
"fmt"
)
type Rpc struct{} //服务对象
//选择单条
func (s *Rpc) GetBaseTeacher(ctx context.Context, in *BaseTeacherProto.ModelArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//通用获取单条
list := SqlKit.QueryByIds([]string{in.PersonId}, "t_base_teacher")
if len(list) > 0 {
//处理从教年月
if list[0]["cjny"].(string)[0:4] == "1900" {
list[0]["cjny"] = ""
}
//加上org_name
orgName, err := BaseTeacherDao.GetPersonOrgName(in.PersonId)
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlQueryError, "执行GetPersonOrgName时发生严重错误"+err.Error())
return &reply, err
}
list[0]["org_name"] = orgName
//人员所在单位,获取人员在此单位下的职务
if in.BureauId != "" {
positionArray, err := BaseTeacherDao.GetPositionInfoByPersonIdAndBureauId(in.PersonId, in.BureauId)
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlQueryError, "执行GetPositionInfoByPersonIdAndBureauId时发生严重错误"+err.Error())
return &reply, err
}
list[0]["position_id_array"] = positionArray
}
}
//将结果序列化
reply.Success = true
reply.Count = 1
reply.Message = Const.SuccessDataBaseAction
reply.List = CommonUtil.SerializeToString(list)
return &reply, nil
}
//增加
func (s *Rpc) AddBaseTeacher(ctx context.Context, in *BaseTeacherProto.ModelArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//==========================================
//检查身份证的有效性
if len(in.Sfzjh) > 0 {
IdCardNo := []byte(in.Sfzjh)
if in.Sfzjlxm == "01" && !IdCardUtil.IsValidIdCardNo(&IdCardNo) {
reply.Success = false
reply.Message = "身份证号在不符合检查要求!"
return &reply, nil
}
//是不是重复
if !SysLoginpersonDao.IsValidIdCardNo(in.Sfzjh, "") {
reply.Success = false
reply.Message = "证件号在系统中已存在,无法创建!"
return &reply, nil
}
}
//==========================================
//如果是手机号,是不是合法
if len(in.Lxdh) > 0 && len(in.Lxdh) == 11 && !MobileUtil.VerifyMobileFormat(in.Lxdh) {
reply.Success = false
reply.Message = "联系电话在不是合法的手机号!"
return &reply, nil
}
//是不是重复
if len(in.Lxdh) > 0 && !SysLoginpersonDao.IsValidIdTel(in.Lxdh, "") {
reply.Success = false
reply.Message = "联系电话在系统中已存在,无法创建!"
return &reply, nil
}
//调用dao
model := new(models.TBaseTeacher)
model.PersonId = CommonUtil.GetUUID()
model.Xm = in.Xm
model.Xmpy = PinYinUtil.PinYin(in.Xm)
model.Cym = in.Cym
model.Sfzjlxm = in.Sfzjlxm
model.Sfzjh = in.Sfzjh
if model.Sfzjlxm == "1" {
//如果是身份证
by := []byte(in.Sfzjh)
if !IdCardUtil.IsValidIdCardNo(&by) {
reply.Success = false
reply.Message = "身份证号不合法!"
return &reply, nil
}
//根据身份证号,提取男女,出生日期
_, birthday, xbm := IdCardUtil.GetIdCardNoInfo(in.Sfzjh)
model.Csrq = DateUtil.ConvertDate(birthday)
model.Xbm = xbm
} else {
model.Csrq = DateUtil.ConvertDate(in.Csrq)
model.Xbm = in.Xbm
}
model.Mzm = in.Mzm
model.Zzmmm = in.Zzmmm
model.Xlm = in.Xlm
model.Xwm = in.Xwm
model.Zcm = in.Zcm
model.StateId = 1
model.Bzlbm = in.Bzlbm
if len(in.Cjny) == 0 {
model.Cjny = DateUtil.ConvertDate("1900-01-01")
} else {
//如果只传了年和月,手工补上日和时间
model.Cjny = DateUtil.ConvertDate(in.Cjny + "-01")
}
model.StageId = in.StageId
model.SubjectId = in.SubjectId
model.Gwzym = in.Gwzym
model.Lxdh = in.Lxdh
model.Dzxx = in.Dzxx
model.BUse = 1
//教师的身份ID
model.IdentityId = 2
//创建事务会话
var db = DbUtil.Engine
var session = db.NewSession()
//调用DAO保存
_, err := BaseTeacherDao.AddBaseTeacher(session, *model)
if err != nil {
//事务回滚
session.Rollback()
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlUpdateError, "执行AddBaseTeacher时发生严重错误"+err.Error())
return &reply, err
}
//记录教师所在单位和部门
personIds := []string{model.PersonId}
var fromSortId int32
//排序号
if in.SortId == 0 {
fromSortId = int32(BaseTeacherDao.GetMaxSortId(in.OrgId)) + 1
} else {
fromSortId = in.SortId
}
_, bureauId, _, err := BaseTeacherDao.AddTeacherOrgInfo(personIds, in.OrgId, 1, fromSortId)
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlUpdateError, "执行AddTeacherOrgInfo时发生严重错误"+err.Error())
return &reply, err
}
//记录教师在此单位下的职务信息
_, _, err = BaseTeacherDao.AddTeacherPosition(personIds, bureauId, in.PositionIds)
if err != nil {
//事务回滚
session.Rollback()
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlUpdateError, "执行AddLoginperson时发生严重错误"+err.Error())
return &reply, err
}
// 生成教师账号
_, err = SysLoginpersonService.AddLoginperson(session, 2, model.PersonId, model.Xm)
if err != nil {
//事务回滚
session.Rollback()
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlUpdateError, "执行AddLoginperson时发生严重错误"+err.Error())
return &reply, err
}
//事务提交
session.Commit()
//记录日志
BaseTeacherDao.ActionLog([]models.TBaseTeacher{*model}, Const.ActionInsert, in.ActionPersonId, in.ActionIpAddress)
reply.Success = true
reply.Message = Const.SuccessDataBaseAction
return &reply, err
}
//删除
func (s *Rpc) DeleteBaseTeacher(ctx context.Context, in *BaseTeacherProto.DeleteIdsArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//调用通用删除命令进行删除
err := SqlKit.DeleteIds("t_base_teacher", in.Ids)
//删除人员对应的部门领导关系,不管有没有,都要删除一下。
BaseOrganizationManagerDao.DeleteOrgManagerByPersonIds(in.Ids)
//错误处理
if err != nil {
LogUtil.Error(ErrorConst.SqlUpdateError, "执行DeleteBaseTeacher时发生严重错误"+err.Error())
reply.Success = false
reply.Message = Const.DataBaseActionError
return &reply, err
}
//删除人员时,对应的班主任,也要删除一下~
err = BaseClassDao.ClearPersonBzr(in.Ids)
if err != nil {
LogUtil.Error(ErrorConst.SqlUpdateError, "执行ClearPersonBzr时发生严重错误"+err.Error())
reply.Success = false
reply.Message = Const.DataBaseActionError
return &reply, err
}
//删除人员所在的部门关系
BaseTeacherDao.DeleteTeacherOrgInfoAll(in.Ids)
//删除人员与职务的关系(全部)
BaseTeacherDao.DeleteTeacherAllPosition(in.Ids)
//记录日志
ms, err := BaseTeacherDao.GetByIds(in.Ids)
if err != nil {
LogUtil.Error(ErrorConst.SqlUpdateError, "执行FindModelsByIds时发生严重错误"+err.Error())
reply.Success = false
reply.Message = Const.DataBaseActionError
return &reply, err
}
BaseTeacherDao.ActionLog(ms, Const.ActionDelete, in.ActionPersonId, in.ActionIpAddress)
reply.Success = true
reply.Message = Const.SuccessDataBaseAction
return &reply, err
}
//修改
func (s *Rpc) UpdateBaseTeacher(ctx context.Context, in *BaseTeacherProto.ModelArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//检查身份证的有效性
if len(in.Sfzjh) > 0 {
IdCardNo := []byte(in.Sfzjh)
if in.Sfzjlxm == "1" && !IdCardUtil.IsValidIdCardNo(&IdCardNo) {
reply.Success = false
reply.Message = "身份证号在不符合检查要求!"
return &reply, nil
}
//是不是重复
if !SysLoginpersonDao.IsValidIdCardNo(in.Sfzjh, in.PersonId) {
reply.Success = false
reply.Message = "证件号在系统中已存在,无法创建!"
return &reply, nil
}
}
//如果是手机号,是不是合法
if len(in.Lxdh) > 0 && len(in.Lxdh) == 11 && !MobileUtil.VerifyMobileFormat(in.Lxdh) {
reply.Success = false
reply.Message = "联系电话在不是合法的手机号!"
return &reply, nil
}
//是不是重复
if len(in.Lxdh) > 0 && !SysLoginpersonDao.IsValidIdTel(in.Lxdh, in.PersonId) {
reply.Success = false
reply.Message = "联系电话在系统中已存在,无法创建!"
return &reply, nil
}
//3、修改
model := new(models.TBaseTeacher)
model.PersonId = in.PersonId
model.Xm = in.Xm
model.Xmpy = PinYinUtil.PinYin(in.Xmpy)
model.Cym = in.Cym
//身份证件类型
model.Sfzjlxm = in.Sfzjlxm
model.Sfzjh = in.Sfzjh
//如果是身份证
if model.Sfzjlxm == "1" {
//根据身份证号,提取男女,出生日期
_, birthday, xbm := IdCardUtil.GetIdCardNoInfo(in.Sfzjh)
model.Csrq = DateUtil.ConvertDate(birthday)
model.Xbm = xbm
} else {
model.Csrq = DateUtil.ConvertDate(in.Csrq)
model.Xbm = in.Xbm
}
model.Mzm = in.Mzm
model.Zzmmm = in.Zzmmm
model.Xlm = in.Xlm
model.Xwm = in.Xwm
model.Zcm = in.Zcm
model.Bzlbm = in.Bzlbm
//排序号
BaseTeacherDao.UpdateSortId(model.PersonId, in.SortId)
//从教年月
if len(in.Cjny) == 0 {
model.Cjny = DateUtil.ConvertDate("1900-01-01")
} else {
model.Cjny = DateUtil.ConvertDate(in.Cjny + "-01")
}
model.StageId = in.StageId
model.SubjectId = in.SubjectId
model.Gwzym = in.Gwzym
model.Lxdh = in.Lxdh
model.Dzxx = in.Dzxx
model.BUse = 1
_, err := BaseTeacherDao.UpdateBaseTeacher(*model, in.ForceUpdateFields)
//错误处理
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlUpdateError, "执行UpdateBaseTeacher时发生严重错误"+err.Error())
return &reply, err
}
//更新人员与职务的关系
BaseTeacherDao.DeleteTeacherPosition([]string{in.PersonId}, in.BureauId)
BaseTeacherDao.AddTeacherPosition([]string{in.PersonId}, in.BureauId, in.PositionIds)
//记录日志
ms, err := BaseTeacherDao.GetByIds([]string{in.PersonId})
if err != nil {
LogUtil.Error(ErrorConst.SqlUpdateError, "执行FindModelsByIds时发生严重错误"+err.Error())
reply.Success = false
reply.Message = Const.DataBaseActionError
return &reply, err
}
BaseTeacherDao.ActionLog(ms, Const.ActionInsert, in.ActionPersonId, in.ActionIpAddress)
reply.Success = true
reply.Message = Const.SuccessDataBaseAction
return &reply, nil
}
//分页查询
func (s *Rpc) PageBaseTeacher(ctx context.Context, in *BaseTeacherProto.QueryArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
list, count, err := BaseTeacherDao.PageBaseTeacher(in)
//错误处理
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlQueryError, "执行PageBaseTeacher时发生严重错误"+err.Error())
return &reply, err
}
reply.Count = count
reply.Success = true
reply.Message = Const.SuccessDataBaseAction
reply.List = CommonUtil.SerializeToString(list)
return &reply, nil
}
//教师调整部门(批量)
func (s *Rpc) ReviseTeacherOrg(ctx context.Context, in *BaseTeacherProto.ReviseArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//调用dao
err := BaseTeacherDao.ReviseTeacherOrg(in.Ids, in.OrgId)
//错误处理
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlQueryError, "执行ReviseTeacherOrg时发生严重错误"+err.Error())
return &reply, err
}
reply.Count = int32(len(in.Ids))
reply.Success = true
reply.Message = Const.SuccessDataBaseAction
return &reply, nil
}
//导出本单位教职工账号信息到EXCEL
func (s *Rpc) ExportTeacherAccountInfoExcel(ctx context.Context, in *BaseTeacherProto.ModelArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
list, _, err := BaseTeacherDao.ExportTeacherAccountInfoExcel(in)
//错误处理
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlQueryError, "执行ExportTeacherAccountInfoExcel时发生严重错误"+err.Error())
return &reply, err
}
//1、配置文件
jsonTemplate := "teacher_account.json"
//2、导出
TargetPath := CommonUtil.GetExportExcelFilePath()
ExcelUtil.ExportExcel(jsonTemplate, list, TargetPath)
reply.ExcelPath = TargetPath
return &reply, nil
}
//导出本单位教职工信息到EXCEL
func (s *Rpc) ExportTeacherInfoExcel(ctx context.Context, in *BaseTeacherProto.ModelArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//导出
TargetPath := CommonUtil.GetExportExcelFilePath()
//哪个单位
bureauId := in.BureauId
//是不是需要空的excel
ExportExcelStatus := in.ExportExcelStatus
BaseTeacherDao.ExportTeacherInfoExcel(TargetPath, bureauId, ExportExcelStatus)
reply.ExcelPath = TargetPath
return &reply, nil
}
//导入本校教师信息
func (s *Rpc) ImportTeacherInfoExcel(ctx context.Context, in *BaseTeacherProto.ImportArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//将业务逻辑封装到dao层
success, message, err := BaseTeacherDao.ImportTeacherInfoExcel(in.ExcelPath, in.BureauId, in.ActionPersonId, in.ActionIpAddress)
if err != nil {
reply.Success = false
reply.Message = message
return &reply, nil
}
reply.Success = success
reply.Message = message
return &reply, nil
}
//设置教师多单位
func (s *Rpc) SettingTeacherMultipleBureau(ctx context.Context, in *BaseTeacherProto.SettingMultipleBureauArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//将业务逻辑封装到dao层
success, message, err := BaseTeacherDao.SettingTeacherMultipleBureau(in)
if err != nil {
reply.Success = false
reply.Message = message
return &reply, nil
}
reply.Success = success
reply.Message = message
return &reply, nil
}
//根据教职工ID获取该教职工所在多单位列表
func (s *Rpc) PageTeacherMultipleBureau(ctx context.Context, in *BaseTeacherProto.PageMultipleBureauArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//将业务逻辑封装到dao层
list, count, err := BaseTeacherDao.PageTeacherMultipleBureau(in)
//错误处理
if err != nil {
reply.Success = false
reply.Message = Const.DataBaseActionError
LogUtil.Error(ErrorConst.SqlQueryError, "执行PageTeacherMultipleBureau时发生严重错误"+err.Error())
return &reply, err
}
reply.Count = count
reply.Success = true
reply.Message = Const.SuccessDataBaseAction
reply.List = CommonUtil.SerializeToString(list)
return &reply, nil
}
//删除教职工所在多单位信息
func (s *Rpc) DeleteTeacherMultipleBureau(ctx context.Context, in *BaseTeacherProto.MultipleBureauIdArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//调用通用删除命令进行删除
err := SqlKit.DeleteIds("t_base_teacher_org", []string{in.Id})
reply.Success = true
reply.Message = Const.SuccessDataBaseAction
return &reply, err
}
//设置主单位
func (s *Rpc) SettingMainOrg(ctx context.Context, in *BaseTeacherProto.SettingMainOrgArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//将业务逻辑封装到dao层
success, message, err := BaseTeacherDao.SettingMainOrg(in)
if err != nil {
reply.Success = false
reply.Message = message
return &reply, nil
}
reply.Success = success
reply.Message = message
return &reply, nil
}
//教师调转单位
func (s *Rpc) TeacherTransfer(ctx context.Context, in *BaseTeacherProto.SettingMultipleBureauArg) (*BaseTeacherProto.Reply, error) {
//异常处理
defer func() {
if err := recover(); err != nil {
fmt.Printf("%s\n", err)
}
}()
//rpc响应
var reply BaseTeacherProto.Reply
//将业务逻辑封装到dao层
success, message, err := BaseTeacherDao.TeacherTransfer(in.PersonId, in.OrgId)
if err != nil {
reply.Success = false
reply.Message = message
return &reply, nil
}
reply.Success = success
reply.Message = message
return &reply, nil
}