package service import ( "errors" "fmt" "gas-cylinder-api/app/admin/model" "gas-cylinder-api/app/admin/service/dto" "gas-cylinder-api/common/actions" cDto "gas-cylinder-api/common/dto" "gas-cylinder-api/common/global" cModel "gas-cylinder-api/common/model" "gogs.baozhida.cn/zoie/OAuth-core/service" "gorm.io/gorm" "gorm.io/gorm/utils" "strings" "time" ) type GasCylinderAllot struct { service.Service } // GetPage 获取GasCylinderAllot列表 func (e *GasCylinderAllot) GetPage(c *dto.GasCylinderAllotGetPageReq, list *[]model.GasCylinderAllot, count *int64, p *actions.DataPermission) error { var err error var data model.GasCylinderAllot if c.My == "allot" { err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), ). Where("allot_user_id = ? ", p.UserId). Preload("AllotUser"). Preload("AcceptUser"). Preload("AllotCompany"). Preload("AcceptCompany"). Find(list).Limit(-1).Offset(-1). Count(count).Error } if c.My == "accept" { err = e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), actions.Permission(data.TableName(), p), ). Where("accept_user_id = ?", p.UserId). Preload("AllotUser"). Preload("AcceptUser"). Preload("AllotCompany"). Preload("AcceptCompany"). Find(list).Limit(-1).Offset(-1). Count(count).Error } if err != nil { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } return nil } // Get 获取GasCylinderAllot对象 func (e *GasCylinderAllot) Get(d *dto.GasCylinderAllotGetReq, gasCylinderAllotModel *model.GasCylinderAllot, p *actions.DataPermission) error { err := e.Orm. Scopes(actions.Permission(gasCylinderAllotModel.TableName(), p)). Preload("AllotUser"). Preload("AcceptUser"). Preload("AllotCompany"). Preload("AcceptCompany"). First(gasCylinderAllotModel, d.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.GetNotFoundOrNoPermissionErr } return global.GetFailedErr } return nil } // ByOptType 获取GasCylinderAllot对象 func (e *GasCylinderAllot) GetByOptType(d *dto.GasCylinderAllotGetByOptTypeReq, gasCylinderAllotModel *model.GasCylinderAllot, p *actions.DataPermission) error { err := e.Orm. Where("opt_type = ? and accept_user_id = ? and status = ? and allot_type = 1", d.OptType, p.UserId, model.GasCylinderAllotStateAllot). Preload("AllotUser"). Preload("AllotCompany"). First(gasCylinderAllotModel).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.GetNotFoundOrNoPermissionErr } return global.GetFailedErr } return nil } // Insert 创建GasCylinderAllot对象 func (e *GasCylinderAllot) Insert(c *dto.GasCylinderAllotInsertReq) error { var err error var data model.GasCylinderAllot if err = e.Check(c); err != nil { return err } tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() err = e.Orm. Where("opt_type = ? and accept_user_id = ? and status = ? and allot_type = 1", c.OptType, c.AcceptUserId, model.GasCylinderAllotStateAllot). First(&data).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { e.Log.Errorf("db error: %s", err) return global.GetFailedErr } // 扫码调拨未接收不能重复提交 if data.Id > 0 { err = errors.New("调拨中,请勿重复提交!") return err } list := make([]model.GasCylinderAllot, 0) err = e.Orm. Where("allot_user_id = ? and status = ? and allot_type = 2", c.CreateBy, model.GasCylinderAllotStateAllot). Find(&list).Error // 扫码调拨未接收不能重复提交 for _, status := range list { isEqual, common, _, _ := global.StringListCompare(status.InnerCodeList, c.InnerCodeList) if isEqual || len(common) > 0 { err = errors.New(fmt.Sprintf("钢瓶%s调拨中,请勿重复提交!", strings.Join(common, ","))) return err } } err = e.VerifyGasCylinderStatus(c.OptType, c.AcceptUserId, c.CreateBy, c.InnerCodeList) if err != nil { return err } // 添加调拨信息 data.Id = 0 c.Generate(&data) // 修改钢瓶状态为调拨中 var InnerCodeList []string for _, v := range c.InnerCodeList { InnerCodeList = append(InnerCodeList, v) } err = e.Orm.Model(&model.GasCylinderStatus{}). Where("company_id = ? and inner_code in (?)", data.AllotCompanyId, InnerCodeList). Update("is_allot", true).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } c.Id = data.Id return nil } func (e *GasCylinderAllot) Check(c *dto.GasCylinderAllotInsertReq) error { if global.CheckElementExists(c.OptType, []string{"016", "17", "033", "31", "35", "25"}) { if c.GasCylinderStatus != model.GasCylinderStatusWeighty { return errors.New("该流转步骤仅能接收重瓶!") } } if global.CheckElementExists(c.OptType, []string{"11", "13", "21"}) { if c.GasCylinderStatus != model.GasCylinderStatusEmpty { return errors.New("该流转步骤仅能接收空瓶!") } } if global.CheckElementExists(c.OptType, []string{"Unqualified"}) { if c.GasCylinderStatus != model.GasCylinderStatusUnqualified { return errors.New("该流转步骤仅能接收不合格瓶!") } } return nil } // Update 修改GasCylinderAllot对象 func (e *GasCylinderAllot) Update(c *dto.GasCylinderAllotUpdateReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var gasCylinderAllotModel = model.GasCylinderAllot{} // 查询调拨信息是否存在 err = e.Orm.Scopes(actions.Permission(gasCylinderAllotModel.TableName(), p)). First(&gasCylinderAllotModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.UpdateNotFoundOrNoPermissionErr } return global.UpdateFailedErr } c.Generate(&gasCylinderAllotModel) err = tx.Save(&gasCylinderAllotModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } c.Id = gasCylinderAllotModel.Id return nil } // Remove 删除GasCylinderAllot func (e *GasCylinderAllot) Remove(c *dto.GasCylinderAllotDeleteReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var gasCylinderAllotModel model.GasCylinderAllot // 查询调拨信息是否存在 err = e.Orm.Scopes(actions.Permission(gasCylinderAllotModel.TableName(), p)). First(&gasCylinderAllotModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.DeleteNotFoundOrNoPermissionErr } return global.DeleteFailedErr } if gasCylinderAllotModel.Status != model.GasCylinderAllotStateCancel { err = errors.New(fmt.Sprintf("状态为%s,无法删除", model.GasCylinderAllotStateMap[gasCylinderAllotModel.Status])) return err } db := tx.Delete(&gasCylinderAllotModel) if err = db.Error; err != nil { e.Log.Errorf("db error: %s", err) return global.DeleteFailedErr } if db.RowsAffected == 0 { return global.DeleteNotFoundOrNoPermissionErr } return nil } // Cancel 取消GasCylinderAllot func (e *GasCylinderAllot) Cancel(c *dto.GasCylinderAllotCancelReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() var gasCylinderAllotModel = model.GasCylinderAllot{} // 查询调拨信息是否存在 err = e.Orm.Scopes(actions.Permission(gasCylinderAllotModel.TableName(), p)). First(&gasCylinderAllotModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return global.UpdateNotFoundOrNoPermissionErr } return global.UpdateFailedErr } if gasCylinderAllotModel.Status != model.GasCylinderAllotStateAllot { err = errors.New(fmt.Sprintf("状态为%s,无法取消", model.GasCylinderAllotStateMap[gasCylinderAllotModel.Status])) return err } gasCylinderAllotModel.Status = model.GasCylinderAllotStateCancel err = tx.Save(&gasCylinderAllotModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } var InnerCodeList []string for _, v := range gasCylinderAllotModel.InnerCodeList { InnerCodeList = append(InnerCodeList, v) } err = e.Orm.Model(&model.GasCylinderStatus{}). Where("company_id = ? and inner_code in (?)", gasCylinderAllotModel.AllotCompanyId, InnerCodeList). Update("is_allot", false).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } c.Id = gasCylinderAllotModel.Id return nil } // Submit 提交GasCylinderAllot func (e *GasCylinderAllot) Submit(c *dto.GasCylinderAllotSubmitReq, p *actions.DataPermission) error { var err error tx := e.Orm.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() // 调拨状态更新为 已完成 // 调拨者气瓶状态更新 // 接收更新气瓶状态 上报气瓶流转信息 // 调拨更新气瓶状态 上报气瓶流转信息 var gasCylinderAllotModel = model.GasCylinderAllot{} // 查询调拨信息是否存在 err = e.Orm.First(&gasCylinderAllotModel, c.GetId()).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("调拨信息不存在!") } return errors.New("查询调拨信息失败!") } if gasCylinderAllotModel.Status != model.GasCylinderAllotStateAllot { err = errors.New(fmt.Sprintf("状态为%s,无法提交", model.GasCylinderAllotStateMap[gasCylinderAllotModel.Status])) return err } if !global.ContainsAllOptimized(gasCylinderAllotModel.InnerCodeList, c.InnerCodeList) { err = errors.New("请提交正确的单位内编码!") return err } err = e.VerifyGasCylinderStatus(gasCylinderAllotModel.OptType, gasCylinderAllotModel.AcceptUserId, gasCylinderAllotModel.AllotUserId, c.InnerCodeList) if err != nil { return err } gasCylinderAllotModel.AcceptInnerCodeList = c.InnerCodeList gasCylinderAllotModel.Status = model.GasCylinderAllotStateFinish err = tx.Save(&gasCylinderAllotModel).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.UpdateFailedErr } // 修改钢瓶状态为未调拨 // 修改钢瓶状态为调拨中 var InnerCodeList []string for _, v := range gasCylinderAllotModel.InnerCodeList { InnerCodeList = append(InnerCodeList, v) } err = e.Orm.Model(&model.GasCylinderStatus{}). Where("company_id = ? and inner_code in (?)", gasCylinderAllotModel.AllotCompanyId, InnerCodeList). Update("is_allot", false).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } c.Id = gasCylinderAllotModel.Id acceptUser, err := model.GetUserCode(c.AcceptUserId) if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } allotUser, err := model.GetUserCode(c.AllotUserId) if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } data := make([]model.OperationLog, 0) batchNumber := fmt.Sprintf("%03d%s", p.DeptId, time.Now().Format("20060102150405")) optTime := time.Now().Format("2006-01-02 15:04:05") switch c.OptType { case "25": // 25送气员领重瓶 37 门店重瓶出库 for _, innerCode := range c.InnerCodeList { // 25送气员领重瓶 operationLog25 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, ObjectUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.Dept.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLog25) // 37 门店重瓶出库 operationLog37 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "37", OptUser: allotUser.ProvUserId, ObjectUser: allotUser.ProvUserId, CompanyId: allotUser.ProvUser.CmpCode, CurrentEnterprise: allotUser.ProvUser.CmpCode, CurrentStore: allotUser.ProvUser.CmpCode, Lng: utils.ToString(allotUser.Dept.ProvStore.Lng), Lat: utils.ToString(allotUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: allotUser.DeptId, }, } data = append(data, operationLog37) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 添加送气员重瓶 err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusWeighty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除门店重瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "21": // 21门店回收空瓶 27送气员回收空瓶 for _, innerCode := range c.InnerCodeList { // 21门店回收空瓶 operationLog21 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLog21) // 添加门店空瓶 gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusEmpty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除送气员空瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusEmpty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "11": // 10 门店空瓶出库 11 司机确认空瓶装车 var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", acceptUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { // 10 门店空瓶出库 operationLog10 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "10", ObjectUser: acceptUser.ProvUserId, OptUser: allotUser.ProvUserId, CompanyId: allotUser.ProvUser.CmpCode, CurrentEnterprise: allotUser.ProvUser.CmpCode, CurrentStore: allotUser.ProvUser.CmpCode, Lng: utils.ToString(allotUser.Dept.ProvStore.Lng), Lat: utils.ToString(allotUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: allotUser.DeptId, }, } data = append(data, operationLog10) // 11 司机确认空瓶装车 operationLog11 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: allotUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLog11) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 添加司机空瓶 err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusEmpty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除门店空瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusEmpty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "13": // 12 司机运输空瓶到达气站 13 气站确认空瓶到达气站 var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", allotUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { // 12 司机运输空瓶到达气站 operationLog12 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "12", ObjectUser: allotUser.ProvUserId, OptUser: allotUser.ProvUserId, CompanyId: allotUser.ProvUser.CmpCode, CurrentEnterprise: allotUser.ProvUser.CmpCode, CurrentStation: acceptUser.ProvUser.CmpCode, CurrentTruck: allotUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLog12) // 13 气站确认空瓶到达气站 operationLog13 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStation: acceptUser.ProvUser.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLog13) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusEmpty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 添加气站空瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusEmpty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除司机空瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusEmpty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "17": // 15 气站重瓶出库 17 司机确认重瓶从气站出库 var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", acceptUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { // 15 气站重瓶出库 operationLog15 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "15", OptUser: allotUser.ProvUserId, ObjectUser: allotUser.ProvUserId, CompanyId: allotUser.ProvUser.CmpCode, CurrentEnterprise: allotUser.ProvUser.CmpCode, CurrentStation: allotUser.ProvUser.CmpCode, Lng: utils.ToString(allotUser.Dept.ProvStore.Lng), Lat: utils.ToString(allotUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: allotUser.DeptId, }, } data = append(data, operationLog15) // 17 司机确认重瓶从气站出库 operationLog17 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStation: allotUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLog17) // 司机添加重瓶 gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusWeighty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除气站重瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "31": // 19 司机交付门店 31 门店确认重瓶卸货入库 var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", allotUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { // 19 司机交付门店 operationLog19 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "19", OptUser: allotUser.ProvUserId, ObjectUser: allotUser.ProvUserId, CompanyId: allotUser.ProvUser.CmpCode, CurrentEnterprise: allotUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, CurrentTruck: allotUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: allotUser.DeptId, }, } data = append(data, operationLog19) // 31 门店确认重瓶卸货入库 operationLog31 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, ObjectUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLog31) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 门店添加重瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusWeighty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除司机重瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "35": // 35 门店确认未配送重瓶返库 for _, innerCode := range c.InnerCodeList { operationLog35 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLog35) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 门店添加重瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusWeighty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除送气员重瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "033": // 33 门店将重瓶退回司机 var truckUserCarInfo model.TruckUserCarInfo // 2、上报气瓶流转信息 err = tx.Where("prov_user_id = ?", acceptUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { operationLog33 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "33", OptUser: allotUser.ProvUserId, CompanyId: allotUser.ProvUser.CmpCode, CurrentEnterprise: allotUser.ProvUser.CmpCode, CurrentStore: allotUser.ProvUser.CmpCode, Lng: utils.ToString(allotUser.Dept.ProvStore.Lng), Lat: utils.ToString(allotUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: allotUser.DeptId, }, } data = append(data, operationLog33) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 司机添加重瓶 err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusWeighty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除门店重瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "016": // 16 司机将订单退回气站 var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", allotUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { // 2、上报气瓶流转信息 operationLog16 := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: "16", ObjectUser: allotUser.ProvUserId, OptUser: allotUser.ProvUserId, CompanyId: allotUser.ProvUser.CmpCode, CurrentEnterprise: allotUser.ProvUser.CmpCode, CurrentStation: acceptUser.Dept.CmpCode, CurrentTruck: allotUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLog16) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusWeighty, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 气站添加重瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusWeighty}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除司机重瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } case "md" + model.GasCylinderStatusScrap, "sj" + model.GasCylinderStatusScrap, "qz" + model.GasCylinderStatusScrap: // 不合格 送气员->门店->司机->气站 // 送气员->门店 if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 0 { // 送气员到门店 送气员不合格- 门店+ if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { for _, innerCode := range c.InnerCodeList { // mdscrap 门店回收报废瓶 operationLogMdscrap := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLogMdscrap) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusScrap, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 门店添加报废瓶瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusScrap}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除送气员报废瓶瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusScrap). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请出示正确的门店回收报废瓶瓶调拨码") return err } } else if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 1 { // 门店到司机 门店- 司机+ var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", acceptUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } if acceptUser.ProvUser.UserType == 4 { for _, innerCode := range c.InnerCodeList { operationLogSjscrap := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: allotUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLogSjscrap) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusScrap, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 司机添加报废瓶瓶 err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusScrap}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除门店报废瓶瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusScrap). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请司机出示正确的回收报废瓶瓶调拨码") return err } } else if allotUser.ProvUser.UserType == 4 { // 司机给门店 if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", allotUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { // 司机交付门店 operationLogMdscrap := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, ObjectUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLogMdscrap) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusScrap, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 门店添加报废瓶瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusScrap}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除司机报废瓶瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusScrap). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else if acceptUser.ProvUser.UserType == 5 && acceptUser.ProvUser.Isorders == 0 { // 司机到气站 司机- 气站+ var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", allotUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { operationLogQzscrap := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStation: acceptUser.ProvUser.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLogQzscrap) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusScrap, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 气站添加报废瓶瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusScrap}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除司机报废瓶瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusScrap). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请门店/气站出示正确的回收报废瓶瓶调拨码") return err } } else if allotUser.ProvUser.UserType == 5 { // 气站到司机 if acceptUser.ProvUser.UserType == 4 && acceptUser.ProvUser.Isorders == 0 { var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", acceptUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { operationLogSjscrap := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStation: allotUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLogSjscrap) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusScrap, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 司机添加报废瓶瓶 err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusScrap}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除气站报废瓶瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusScrap). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请司机出示正确的回收报废瓶瓶调拨码") return err } } case "md" + model.GasCylinderStatusExtended, "sj" + model.GasCylinderStatusExtended, "qz" + model.GasCylinderStatusExtended: // 不合格 送气员->门店->司机->气站 // 送气员->门店 if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 0 { // 送气员到门店 送气员不合格- 门店+ if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { for _, innerCode := range c.InnerCodeList { // mdscrap 门店回收报废瓶 operationLogMdextended := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLogMdextended) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusExtended, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 门店添加超期瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusExtended}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除送气员超期瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusExtended). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请出示正确的门店回收超期瓶调拨码") return err } } else if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 1 { // 门店到司机 门店- 司机+ if acceptUser.ProvUser.UserType == 4 { var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", acceptUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { operationLogSjextended := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: allotUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLogSjextended) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusExtended, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 司机添加超期瓶 err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusExtended}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除门店超期瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusExtended). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请司机出示正确的回收超期瓶调拨码") return err } } else if allotUser.ProvUser.UserType == 4 { // 司机给门店 if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", allotUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { // 司机交付门店 operationLogMdextended := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, ObjectUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStore: acceptUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLogMdextended) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusExtended, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 门店添加超期瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusExtended}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除司机超期瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusExtended). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else if acceptUser.ProvUser.UserType == 5 && acceptUser.ProvUser.Isorders == 0 { // 司机到气站 司机- 气站+ var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", allotUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { operationLogQzextended := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, ObjectUser: acceptUser.ProvUserId, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStation: acceptUser.ProvUser.CmpCode, Lng: utils.ToString(acceptUser.Dept.ProvStore.Lng), Lat: utils.ToString(acceptUser.Dept.ProvStore.Lat), OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: p.DeptId, }, } data = append(data, operationLogQzextended) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: 0, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusExtended, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 气站添加超期瓶 err = tx.Where("inner_code = ? and user_id = 0 and company_id = ? ", innerCode, acceptUser.Dept.Id). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusExtended}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除司机超期瓶 err = tx.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", c.InnerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusExtended). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请门店/气站出示正确的回收超期瓶调拨码") return err } } else if allotUser.ProvUser.UserType == 5 { // 气站到司机 if acceptUser.ProvUser.UserType == 4 && acceptUser.ProvUser.Isorders == 0 { var truckUserCarInfo model.TruckUserCarInfo err = tx.Where("prov_user_id = ?", acceptUser.ProvUserId).First(&truckUserCarInfo).Error if err != nil { tx.Rollback() e.Log.Errorf("获取车辆信息失败: %s", err) if err == gorm.ErrRecordNotFound { return errors.New("该司机未绑定车辆,请先绑定车辆!") } return errors.New("获取车辆信息失败") } for _, innerCode := range c.InnerCodeList { operationLogSjextended := model.OperationLog{ BatchNumber: batchNumber, ProvOperationLog: model.ProvOperationLog{ InnerCode: innerCode, OptType: c.OptType, OptUser: acceptUser.ProvUserId, CompanyId: acceptUser.ProvUser.CmpCode, CurrentEnterprise: acceptUser.ProvUser.CmpCode, CurrentStation: allotUser.ProvUser.CmpCode, CurrentTruck: acceptUser.ProvUserId, CurrentMotor: truckUserCarInfo.CarNo, OptTime: optTime, }, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } data = append(data, operationLogSjextended) gasCylinderStatus := &model.GasCylinderStatus{ InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id, Status: model.GasCylinderStatusExtended, ControlBy: cModel.ControlBy{ CreateBy: p.UserId, }, DeptBy: cModel.DeptBy{ DeptId: acceptUser.DeptId, }, } // 司机添加超期瓶 err = tx.Where(model.GasCylinderStatus{InnerCode: innerCode, UserId: acceptUser.Id, CompanyId: acceptUser.Dept.Id}). Assign(model.GasCylinderStatus{Status: model.GasCylinderStatusExtended}).FirstOrCreate(&gasCylinderStatus).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } // 删除气站超期瓶 err = tx.Where("inner_code in (?) and user_id = 0 and company_id = ? and status = ?", c.InnerCodeList, allotUser.Dept.Id, model.GasCylinderStatusExtended). Delete(&model.GasCylinderStatus{}).Error if err != nil { e.Log.Errorf("db error: %s", err) return global.CreateFailedErr } } else { err = errors.New("请司机出示正确的回收超期瓶调拨码") return err } } } provList := make([]model.ProvOperationLog, 0) for _, v := range data { provList = append(provList, v.GenProvOperationLog()) } // TODO 同步省平台 1.1.1.22 批量新增操作记录 if len(data) > 0 { err = tx.Create(&data).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("添加流转步骤失败") } } // 更新钢瓶最新流转步骤时间 err = tx.Model(&model.GasCylinder{}).Where("inner_code in (?) ", c.InnerCodeList). Updates(map[string]interface{}{ "last_operation_time": time.Now(), }).Error if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("更新钢瓶最新流转步骤时间失败") } return nil } func (e *GasCylinderAllot) VerifyGasCylinderStatus(optType string, acceptUserId, allotUserId int, innerCodeList []string) error { acceptUser, err := model.GetUserCode(acceptUserId) if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("查询接收人信息失败!") } allotUser, err := model.GetUserCode(allotUserId) if err != nil { e.Log.Errorf("db error: %s", err) return errors.New("查询调拨人信息失败!") } switch optType { case "25": // 25送气员领重瓶 37 门店重瓶出库 for _, innerCode := range innerCodeList { // 查询门店重瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("门店【%s】重瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询门店重瓶失败")) } } case "21": // 21门店回收空瓶 27送气员回收空瓶 for _, innerCode := range innerCodeList { // 查询送气员空瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusEmpty). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("送气员【%s】空瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询送气员空瓶失败")) } } case "11": // 10 门店空瓶出库 11 司机确认空瓶装车 for _, innerCode := range innerCodeList { // 查询门店空瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusEmpty). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("门店【%s】空瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询门店空瓶失败")) } } case "13": // 12 司机运输空瓶到达气站 13 气站确认空瓶到达气站 for _, innerCode := range innerCodeList { // 查询司机空瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusEmpty). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("司机【%s】空瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询司机空瓶失败")) } } case "17": // 15 气站重瓶出库 17 司机确认重瓶从气站出库 for _, innerCode := range innerCodeList { // 查询气站重瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("气站【%s】重瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询气站重瓶失败")) } } case "31": // 19 司机交付门店 31 门店确认重瓶卸货入库 for _, innerCode := range innerCodeList { // 查询司机重瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code in = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("司机【%s】重瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询司机重瓶失败")) } } case "35": // 35 门店确认未配送重瓶返库 for _, innerCode := range innerCodeList { // 查询送气员重瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code in = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("送气员【%s】重瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询送气员重瓶失败")) } } case "033": // 33 门店将重瓶退回司机 for _, innerCode := range innerCodeList { // 查询门店重瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("门店【%s】重瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询门店重瓶失败")) } } case "016": // 16 司机将订单退回气站 for _, innerCode := range innerCodeList { // 查询司机重瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusWeighty). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("司机【%s】重瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询司机重瓶失败")) } } case "md" + model.GasCylinderStatusScrap, "sj" + model.GasCylinderStatusScrap, "qz" + model.GasCylinderStatusScrap: // 不合格 送气员->门店->司机->气站 // 送气员->门店 if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 0 { // 送气员到门店 送气员不合格- 门店+ if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { for _, innerCode := range innerCodeList { // 查询送气员报废瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code in (?) and user_id = ? and company_id = ? and status = ?", innerCodeList, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusScrap). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("送气员【%s】报废瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询送气员报废瓶失败")) } } } } else if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 1 { // 门店到司机 门店- 司机+ if acceptUser.ProvUser.UserType == 4 { for _, innerCode := range innerCodeList { // 查询门店报废瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusScrap). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("门店【%s】报废瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询门店报废瓶失败")) } } } } else if allotUser.ProvUser.UserType == 4 { // 司机给门店 if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { for _, innerCode := range innerCodeList { // 查询司机报废瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusScrap). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("司机【%s】报废瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询司机报废瓶失败")) } } } else if acceptUser.ProvUser.UserType == 5 && acceptUser.ProvUser.Isorders == 0 { // 司机到气站 司机- 气站+ for _, innerCode := range innerCodeList { // 查询司机报废瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusScrap). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("司机【%s】报废瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询司机报废瓶失败")) } } } } else if allotUser.ProvUser.UserType == 5 { // 气站到司机 if acceptUser.ProvUser.UserType == 4 && acceptUser.ProvUser.Isorders == 0 { for _, innerCode := range innerCodeList { // 查询气站报废瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusScrap). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("气站【%s】报废瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询气站报废瓶失败")) } } } } case "md" + model.GasCylinderStatusExtended, "sj" + model.GasCylinderStatusExtended, "qz" + model.GasCylinderStatusExtended: // 不合格 送气员->门店->司机->气站 // 送气员->门店 if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 0 { // 送气员到门店 送气员不合格- 门店+ if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { for _, innerCode := range innerCodeList { // 查询送气员超期瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusExtended). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("送气员【%s】超期瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询送气员超期瓶失败")) } } } } else if allotUser.ProvUser.UserType == 3 && allotUser.ProvUser.Isorders == 1 { // 门店到司机 门店- 司机+ if acceptUser.ProvUser.UserType == 4 { for _, innerCode := range innerCodeList { // 查询门店超期瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusExtended). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("门店【%s】超期瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询门店超期瓶失败")) } } } } else if allotUser.ProvUser.UserType == 4 { // 司机给门店 if acceptUser.ProvUser.UserType == 3 && acceptUser.ProvUser.Isorders == 1 { for _, innerCode := range innerCodeList { // 查询司机超期瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusExtended). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("司机【%s】超期瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询司机超期瓶失败")) } } } else if acceptUser.ProvUser.UserType == 5 && acceptUser.ProvUser.Isorders == 0 { // 司机到气站 司机- 气站+ for _, innerCode := range innerCodeList { // 查询司机超期瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = ? and company_id = ? and status = ?", innerCode, allotUser.Id, allotUser.Dept.Id, model.GasCylinderStatusExtended). Preload("User"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("司机【%s】超期瓶%s不存在", allotUser.NickName, innerCode)) } return errors.New(fmt.Sprintf("查询司机超期瓶失败")) } } } } else if allotUser.ProvUser.UserType == 5 { // 气站到司机 if acceptUser.ProvUser.UserType == 4 && acceptUser.ProvUser.Isorders == 0 { for _, innerCode := range innerCodeList { // 查询气站超期瓶 var gsc model.GasCylinderStatus err = e.Orm.Where("inner_code = ? and user_id = 0 and company_id = ? and status = ?", innerCode, allotUser.Dept.Id, model.GasCylinderStatusExtended). Preload("Company"). First(&gsc).Error if err != nil { e.Log.Errorf("db error: %s", err) if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New(fmt.Sprintf("气站【%s】超期瓶%s不存在", allotUser.Dept.Name, innerCode)) } return errors.New(fmt.Sprintf("查询气站超期瓶失败")) } } } } } return nil }