123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- 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 {
- // 更新格子状态
- gird := model.Grid{
- CabinetID: staff.CabinetID,
- DeviceGridID: staff.GridDeviceID,
- ColorStatus: "蓝色",
- GridInfo: "等待同步",
- Staff: &staff,
- }
- err = ServicesGroupApp.GridService.UpdateByCabinetIDAndGridID(gird)
- if err != nil {
- return
- }
- // 销假 不允许开格子。张总说不用管柜子的状态,直接下发销假
- err = cabinet_pkg.DisableGrid(staff.CabinetID, uint16(staff.GridDeviceID))
- if err != nil {
- log.Error(err.Error())
- }
- }
- 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 {
- memInfo := cabinet_pkg.GetCabinet(staff.CabinetID)
- if memInfo != nil {
- 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
- }
|