package service import ( "dy-admin/internal/pcmserver/bus/cabinet_pkg" "dy-admin/internal/pcmserver/bus/model" "dy-admin/internal/pcmserver/bus/model/request" "dy-admin/internal/pcmserver/common" "dy-admin/internal/pcmserver/global" "dy-admin/internal/pcmserver/pkg/code" systemService "dy-admin/internal/pcmserver/sys/service" "dy-admin/pkg/log" "dy-admin/pkg/rescode" "go.uber.org/zap" ) type StaffService struct { } func (ss *StaffService) CreateStaff(staff model.Staff) (err error) { var count int64 err = global.DB.Model(&model.Staff{}).Where("cabinet_id = ?", staff.CabinetID).Where("grid_device_id = ?", staff.GridDeviceID).Count(&count).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } if count != 0 { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrStaffGridHasUsedCode]) } tx := global.DB.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() staff.VacationState = 1 err = tx.Create(&staff).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } if staff.CabinetID != 0 && staff.GridDeviceID != 0 { // 修改格子状态 gird := model.Grid{ CabinetID: staff.CabinetID, DeviceGridID: staff.GridDeviceID, ColorStatus: "蓝色", GridInfo: "等待同步", Staff: &staff, } err = ServicesGroupApp.GridService.UpdateByCabinetIDAndGridID(gird) if err != nil { return } } return } func (ss *StaffService) UpdateStaff(staff model.Staff) (err error) { tx := global.DB.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var oldStaff model.Staff err = tx.Where("id = ?", staff.ID).First(&oldStaff).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } // 旧格子更新 if oldStaff.CabinetID != 0 && oldStaff.GridDeviceID != 0 { gird := model.Grid{ CabinetID: oldStaff.CabinetID, DeviceGridID: oldStaff.GridDeviceID, ColorStatus: "灰色", GridInfo: "未启用", Staff: nil, } err = ServicesGroupApp.GridService.UpdateByCabinetIDAndGridID(gird) if err != nil { return } } err = tx.Updates(&staff).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } //新格子更新 if staff.CabinetID != 0 && staff.GridDeviceID != 0 { gird := model.Grid{ CabinetID: staff.CabinetID, DeviceGridID: staff.GridDeviceID, ColorStatus: "蓝色", GridInfo: "等待同步", Staff: &staff, } err = ServicesGroupApp.GridService.UpdateByCabinetIDAndGridID(gird) if err != nil { return } } return } func (ss *StaffService) updateStaffLeaveStatus(staffId int, leaveStatus uint8) (err error) { var staff model.Staff err = global.DB.Where("id = ?", staffId).First(&staff).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } if leaveStatus == LeaveJob { // 请假允许开格子 err = cabinet_pkg.EnableGrid(staff.CabinetID, uint16(staff.GridDeviceID)) if err != nil { return err } // 更新格子状态 gird := model.Grid{ CabinetID: staff.CabinetID, DeviceGridID: staff.GridDeviceID, ColorStatus: "黄色", GridInfo: "请假中", Staff: &staff, } err = ServicesGroupApp.GridService.UpdateByCabinetIDAndGridID(gird) if err != nil { return } } else { // 销假 不允许开格子。张总说不用管柜子的状态,直接下发销假 err = cabinet_pkg.DisableGrid(staff.CabinetID, uint16(staff.GridDeviceID)) if err != nil { return err } // 更新格子状态 gird := model.Grid{ CabinetID: staff.CabinetID, DeviceGridID: staff.GridDeviceID, ColorStatus: "蓝色", GridInfo: "等待同步", Staff: &staff, } err = ServicesGroupApp.GridService.UpdateByCabinetIDAndGridID(gird) if err != nil { return } } err = global.DB.Model(&model.Staff{}).Where("id = ?", staffId).Update("vacation_state", leaveStatus).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } return } func (ss *StaffService) DeleteStaff(idReq common.IdReq) (err error) { var staff model.Staff err = global.DB.Where("id = ?", idReq.ID).First(&staff).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } if staff.CabinetID != 0 && staff.GridDeviceID != 0 { gird := model.Grid{ CabinetID: staff.CabinetID, DeviceGridID: staff.GridDeviceID, ColorStatus: "灰色", GridInfo: "未启用", Staff: &staff, } err = ServicesGroupApp.GridService.UpdateByCabinetIDAndGridID(gird) if err != nil { return } } err = global.DB.Delete(&staff).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } return } func (ss *StaffService) GetStaff(idReq common.IdReq) (staffRes *model.Staff, err error) { var staff model.Staff err = global.DB.Where("id = ?", idReq.ID).First(&staff).Error if err != nil { return staffRes, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } return &staff, err } func (ss *StaffService) GetStaffList(info request.StaffSearch, dataPermission *BusPermission) (list []model.Staff, total int64, err error) { var limit, offset int if info.Page == 0 || info.PageSize == 0 { limit = -1 offset = -1 } else { limit = info.PageSize offset = info.PageSize * (info.Page - 1) } var staffModel model.Staff db := global.DB.Model(&staffModel).Scopes(Permission(staffModel.TableName(), dataPermission)) if info.Name != "" { db = db.Where("name LIKE ?", "%"+info.Name+"%") } if info.Phone != "" { db = db.Where("phone LIKE ?", "%"+info.Phone+"%") } if info.CabinetID != 0 { db = db.Where("cabinet_id = ?", info.CabinetID) } if info.VacationState != 0 { db = db.Where("vacation_state = ?", info.VacationState) } if info.DeptID != 0 { deptIds, err := systemService.ServicesGroupApp.DeptService.GetSonDeptIds(info.DeptID) if err != nil { log.Warn("get son deptIds err", zap.Error(err)) } else { db = db.Where("department_id in (?)", deptIds) } } err = db.Count(&total).Error if err != nil { return } if err = db.Order("id asc").Limit(limit).Offset(offset).Find(&list).Error; err != nil { return list, total, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } return }