123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- package service
- import (
- "dy-admin/internal/pcmserver/bus/cabinet_pkg"
- "dy-admin/internal/pcmserver/bus/model"
- "dy-admin/internal/pcmserver/common"
- "dy-admin/internal/pcmserver/global"
- "dy-admin/internal/pcmserver/pkg/code"
- "dy-admin/pkg/log"
- "dy-admin/pkg/rescode"
- "github.com/pkg/errors"
- "go.uber.org/zap"
- "gorm.io/gorm"
- )
- type GridService struct {
- }
- // CreateGridBatch 创建格子(内部使用)
- func (gs *GridService) CreateGridBatch(cabinetId int, gridCount int) (err error) {
- grids := make([]model.Grid, 0, gridCount)
- for i := 1; i <= gridCount; i++ {
- grid := model.Grid{
- CabinetID: cabinetId,
- DeviceGridID: i,
- ColorStatus: "灰色",
- GridInfo: "未启用",
- }
- grids = append(grids, grid)
- }
- err = global.DB.CreateInBatches(grids, gridCount).Error
- if err != nil {
- return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- return
- }
- // UpdateGrid 更新格子状态(内部使用)
- func (gs *GridService) UpdateGrid(grid model.Grid) (err error) {
- err = global.DB.Updates(&grid).Error
- if err != nil {
- return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- // 推送格子
- go func() {
- memInfo := cabinet_pkg.GetCabinet(grid.CabinetID)
- err = sendUpdateGrid(memInfo.DeptID, grid.CabinetID, grid.DeviceGridID, true)
- if err != nil {
- log.Error("sendUpdateCabinetOpenStatus", zap.Error(err))
- }
- err = sendDeptStoneInfo(memInfo.DeptID, true, nil)
- if err != nil {
- log.Error("sendDeptStoneInfo", zap.Error(err))
- }
- }()
- return
- }
- // UpdateByCabinetIDAndGridID 通过柜子id和格子id更新格子状态(内部使用)
- func (gs *GridService) UpdateByCabinetIDAndGridID(grid model.Grid) (err error) {
- err = global.DB.Where("cabinet_id = ?", grid.CabinetID).Where("device_grid_id = ?", grid.DeviceGridID).Updates(&grid).Error
- if err != nil {
- return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- // 推送格子
- go func() {
- memInfo := cabinet_pkg.GetCabinet(grid.CabinetID)
- err = sendUpdateGrid(memInfo.DeptID, grid.CabinetID, grid.DeviceGridID, true)
- if err != nil {
- log.Error("sendUpdateCabinetOpenStatus", zap.Error(err))
- }
- err = sendDeptStoneInfo(memInfo.DeptID, true, nil)
- if err != nil {
- log.Error("sendDeptStoneInfo", zap.Error(err))
- }
- }()
- return
- }
- // GetGridByID 获取单个格子(内部使用)
- func (gs *GridService) GetGridByID(id int) (gird model.Grid, err error) {
- err = global.DB.Where("id = ?", id).First(&gird).Error
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return gird, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrGridNotFoundCode])
- }
- return gird, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- return
- }
- // GetGridByCabinetIDAndGridID 根据柜子id和格子id获取单个格子(内部使用)
- func (gs *GridService) GetGridByCabinetIDAndGridID(cabinetId, gridDeviceId int) (gird model.Grid, err error) {
- err = global.DB.Where("cabinet_id = ?", cabinetId).Where("device_grid_id = ?", gridDeviceId).First(&gird).Error
- if err != nil {
- return gird, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- return
- }
- // GetGridListByCabinetID 通过柜子id获取全部格子
- func (gs *GridService) GetGridListByCabinetID(cabinetId int) (grids []model.Grid, err error) {
- err = global.DB.Where("cabinet_id = ?", cabinetId).Find(&grids).Error
- if err != nil {
- return grids, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- return
- }
- // OpenGrid 开关门操作
- func (gs *GridService) OpenGrid(gridId int) (err error) {
- gridInfo, err := gs.GetGridByID(gridId)
- if err != nil {
- return err
- }
- tx := global.DB.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- // 下发指令
- err = cabinet_pkg.OpenDoor(gridInfo.CabinetID, uint16(gridInfo.DeviceGridID))
- if err != nil {
- return err
- }
- if gridInfo.Staff.ID == 0 {
- return
- }
- // 平台可以在任何时候开门
- updateGrid := model.Grid{
- Model: common.Model{ID: gridId},
- OpenState: model.GridOpenState,
- }
- err = tx.Model(&updateGrid).Updates(&updateGrid).Error
- if err != nil {
- return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- // 推送格子状态
- go func() {
- memInfo := cabinet_pkg.GetCabinet(gridInfo.CabinetID)
- err = sendUpdateGrid(memInfo.DeptID, gridInfo.CabinetID, gridInfo.DeviceGridID, true)
- if err != nil {
- log.Error("sendUpdateCabinetOpenStatus", zap.Error(err))
- }
- }()
- return
- }
- func (gs *GridService) GetGridUseInfo(cabinetIds []int) (use int64, noUse int64, err error) {
- err = global.DB.Model(&model.Grid{}).Where("cabinet_id in (?)", cabinetIds).Where("grid_info in ?", []string{"未存入", "非正常取出", "已取出"}).Where("stone_state = ?", "未存物").Count(&noUse).Error
- if err != nil {
- return use, noUse, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- err = global.DB.Model(&model.Grid{}).Where("cabinet_id in (?)", cabinetIds).Where("grid_info in ?", []string{model.GridNoRecharge, model.GridRecharging, model.GridRechargeFull}).Where("stone_state = ?", "存物").Count(&use).Error
- if err != nil {
- return use, noUse, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
- }
- return use, noUse, nil
- }
- // 推送格子状态
|