123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- package service
- import (
- "context"
- "time"
- "go-common/app/admin/ep/merlin/model"
- "go-common/library/ecode"
- )
- // DelayMachineEndTime Delay Machine End Time.
- func (s *Service) DelayMachineEndTime(c context.Context, machineID int64, username string) (status int, err error) {
- var (
- machine *model.Machine
- machineLog = &model.MachineLog{}
- )
- status = -1
- //查询机器延期状态
- if machine, err = s.dao.QueryMachine(machineID); err != nil {
- return
- }
- //机器必须存在,机器状态必须是有效的,延期状态必须为可自动延期,结束时间必须是前后7天之内
- if machine == nil || machine.DelayStatus != model.DelayStatusAuto || machine.Status < 0 || machine.EndTime.Before(time.Now().AddDate(0, 0, -8)) || machine.EndTime.After(time.Now().AddDate(0, 0, 8)) {
- err = ecode.MerlinDelayMachineErr
- return
- }
- //执行延期操作
- if err = s.dao.UpdateMachineEndTime(machineID, model.DelayStatusApply, machine.EndTime.AddDate(0, 0, 30)); err != nil {
- machineLog.OperateResult = model.OperationFailedForMachineLog
- } else {
- machineLog.OperateResult = model.OperationSuccessForMachineLog
- status = 0
- }
- //记录操作日志
- machineLog.OperateType = model.DelayMachineEndTime
- machineLog.Username = username
- machineLog.MachineID = machineID
- err = s.dao.InsertMachineLog(machineLog)
- return
- }
- // ApplyDelayMachineEndTime Apply Delay Machine End Time.
- func (s *Service) ApplyDelayMachineEndTime(c context.Context, username string, applyEndTime *model.ApplyEndTimeRequest) (status int, err error) {
- var (
- machine *model.Machine
- machineLog = &model.MachineLog{}
- )
- status = -1
- //查询机器延期状态
- if machine, err = s.dao.QueryMachine(applyEndTime.MachineID); err != nil {
- return
- }
- //申请延期时,机器必须手动申请延期过,且机器状态为正常
- if machine == nil || machine.DelayStatus != model.DelayStatusApply || machine.Status < 0 {
- err = ecode.MerlinApplyMachineErr
- return
- }
- machineLog.OperateResult = model.OperationFailedForMachineLog
- var applyET time.Time
- if applyET, err = time.ParseInLocation(model.TimeFormat, applyEndTime.ApplyEndTime, time.Local); err != nil {
- return
- }
- //延长日期超过过期时间三个月或小于当前过期时间,驳回
- if machine.EndTime.AddDate(0, 3, 1).Before(applyET) || machine.EndTime.After(applyET) {
- err = ecode.MerlinApplyMachineByApplyEndTimeMore3MErr
- return
- }
- ar := &model.ApplicationRecord{
- Applicant: username,
- MachineID: machine.ID,
- ApplyEndTime: applyET,
- Status: model.ApplyDelayInit,
- Auditor: applyEndTime.Auditor,
- }
- //添加延期申请记录
- if err = s.dao.InsertApplicationRecordAndUpdateMachineDelayStatus(ar, machine.ID, model.DelayStatusDisable); err == nil {
- machineLog.OperateResult = model.OperationSuccessForMachineLog
- status = 0
- //发送邮件通知
- s.SendMailApplyDelayMachineEndTime(c, applyEndTime.Auditor, username, machine.ID, machine.EndTime, applyET)
- }
- //记录操作日志
- machineLog.OperateType = model.DelayMachineEndTime
- machineLog.Username = username
- machineLog.MachineID = machine.ID
- if err = s.dao.InsertMachineLog(machineLog); err != nil {
- return
- }
- return
- }
- // CancelMachineEndTime Cancel Machine End Time.
- func (s *Service) CancelMachineEndTime(c context.Context, auditID int64, username string) (status int, err error) {
- var (
- applicationRecord *model.ApplicationRecord
- machineLog = &model.MachineLog{}
- machine *model.Machine
- )
- status = -1
- if applicationRecord, err = s.dao.FindApplicationRecordsByID(auditID); err != nil {
- return
- }
- //查询机器延期状态
- if machine, err = s.dao.QueryMachine(applicationRecord.MachineID); err != nil {
- return
- }
- //取消延期时,审批状态应为 ApplyDelayInit,且用户名是当时申请延期名,机器状态为正常
- if applicationRecord == nil || applicationRecord.Status != model.ApplyDelayInit || applicationRecord.Applicant != username || machine.Status < 0 {
- err = ecode.MerlinCancelMachineErr
- return
- }
- machineLog.OperateResult = model.OperationFailedForMachineLog
- if err = s.dao.UpdateAuditStatusAndUpdateMachineDelayStatus(applicationRecord.MachineID, auditID, model.DelayStatusApply, model.ApplyDelayCancel); err == nil {
- machineLog.OperateResult = model.OperationSuccessForMachineLog
- status = 0
- }
- //记录操作日志
- machineLog.OperateType = model.CancelDelayMachineEndTime
- machineLog.Username = username
- machineLog.MachineID = applicationRecord.MachineID
- if err = s.dao.InsertMachineLog(machineLog); err != nil {
- return
- }
- return
- }
- // AuditMachineEndTime Audit Machine End Time.
- func (s *Service) AuditMachineEndTime(c context.Context, auditID int64, username string, auditResult bool, comment string) (status int, err error) {
- var (
- applicationRecord *model.ApplicationRecord
- machineLog = &model.MachineLog{}
- machine *model.Machine
- )
- status = -1
- if applicationRecord, err = s.dao.FindApplicationRecordsByID(auditID); err != nil {
- return
- }
- //查询机器延期状态
- if machine, err = s.dao.QueryMachine(applicationRecord.MachineID); err != nil {
- return
- }
- //审核时,延期状态必须为ApplyDelayInit,同时用户名为审核者名一致,机器状态为正常
- if applicationRecord == nil || applicationRecord.Status != model.ApplyDelayInit || applicationRecord.Auditor != username || machine.Status < 0 {
- err = ecode.MerlinAuditMachineErr
- return
- }
- machineLog.OperateResult = model.OperationFailedForMachineLog
- if auditResult {
- //批准 //修改机器状态和延期时间,审批状态
- err = s.dao.UpdateAuditStatusAndUpdateMachineEndTime(applicationRecord.MachineID, auditID, model.DelayStatusApply, model.ApplyDelayApprove, applicationRecord.ApplyEndTime, comment)
- } else {
- //驳回 //修改机器状态,审批状态
- err = s.dao.UpdateAuditStatusAndUpdateMachineDelayStatusComment(applicationRecord.MachineID, auditID, model.DelayStatusApply, model.ApplyDelayDecline, comment)
- }
- //发送邮件通知
- if err == nil {
- machineLog.OperateResult = model.OperationSuccessForMachineLog
- status = 0
- s.SendMailAuditResult(c, applicationRecord.Auditor, applicationRecord.Applicant, applicationRecord.MachineID, auditResult)
- }
- //记录操作日志
- machineLog.OperateType = model.AuditDelayMachineEndTime
- machineLog.Username = username
- machineLog.MachineID = applicationRecord.MachineID
- if err = s.dao.InsertMachineLog(machineLog); err != nil {
- return
- }
- return
- }
- // GetApplicationRecordsByApplicant Get Application Records By Applicant.
- func (s *Service) GetApplicationRecordsByApplicant(c context.Context, username string, pn, ps int) (p *model.PaginateApplicationRecord, err error) {
- var (
- total int64
- applicationRecords []*model.ApplicationRecord
- )
- if total, applicationRecords, err = s.dao.FindApplicationRecordsByApplicant(username, pn, ps); err != nil {
- return
- }
- p = &model.PaginateApplicationRecord{
- PageNum: pn,
- PageSize: ps,
- Total: total,
- ApplicationRecords: applicationRecords,
- }
- return
- }
- // GetApplicationRecordsByAuditor Get Application Records By Auditor.
- func (s *Service) GetApplicationRecordsByAuditor(c context.Context, username string, pn, ps int) (p *model.PaginateApplicationRecord, err error) {
- var (
- total int64
- applicationRecords []*model.ApplicationRecord
- )
- if total, applicationRecords, err = s.dao.FindApplicationRecordsByAuditor(username, pn, ps); err != nil {
- return
- }
- p = &model.PaginateApplicationRecord{
- PageNum: pn,
- PageSize: ps,
- Total: total,
- ApplicationRecords: applicationRecords,
- }
- return
- }
- // GetApplicationRecordsByMachineID Get Application Records By MachineID.
- func (s *Service) GetApplicationRecordsByMachineID(c context.Context, machineID int64, pn, ps int) (p *model.PaginateApplicationRecord, err error) {
- var (
- total int64
- applicationRecords []*model.ApplicationRecord
- )
- if total, applicationRecords, err = s.dao.FindApplicationRecordsByMachineID(machineID, pn, ps); err != nil {
- return
- }
- p = &model.PaginateApplicationRecord{
- PageNum: pn,
- PageSize: ps,
- Total: total,
- ApplicationRecords: applicationRecords,
- }
- return
- }
|