diff --git a/apps/device/api/product.go b/apps/device/api/product.go index 1140ec1..f030bce 100644 --- a/apps/device/api/product.go +++ b/apps/device/api/product.go @@ -111,7 +111,8 @@ func (p *ProductApi) InsertProduct(rc *restfulx.ReqCtx) { data.OrgId = rc.LoginAccount.OrganizationId // 如果未设置规则链,默认为主链 if data.RuleChainId == "" { - root := p.RuleApp.FindOneByRoot() + root, err := p.RuleApp.FindOneByRoot() + biz.ErrIsNil(err, "规则链查询错误") data.RuleChainId = root.Id } diff --git a/apps/device/util/device_rpc.go b/apps/device/util/device_rpc.go index 646790f..255dce8 100644 --- a/apps/device/util/device_rpc.go +++ b/apps/device/util/device_rpc.go @@ -21,7 +21,11 @@ func BuildRunDeviceRpc(deviceId, mode string, msgData map[string]interface{}) er if device.LinkStatus != global.ONLINE { return errors.New("设备不在线无法设置属性") } - findOne := ruleService.RuleChainModelDao.FindOne(device.Product.RuleChainId) + findOne, err := ruleService.RuleChainModelDao.FindOne(device.Product.RuleChainId) + if err != nil { + global.Log.Error("查询规则链数据失败", err) + return errors.New("查询规则链数据失败") + } ruleData := ruleEntity.RuleDataJson{} err = tool.StringToStruct(findOne.RuleDataJson, &ruleData) if err != nil { diff --git a/apps/rule/api/rulechain.go b/apps/rule/api/rulechain.go index 1e47513..f4ec449 100644 --- a/apps/rule/api/rulechain.go +++ b/apps/rule/api/rulechain.go @@ -25,7 +25,8 @@ func (r *RuleChainApi) GetNodeDebug(rc *restfulx.ReqCtx) { ruleId := restfulx.QueryParam(rc, "ruleId") nodeId := restfulx.QueryParam(rc, "nodeId") - total, list := rule_engine.GetDebugDataPage(pageNum, pageSize, ruleId, nodeId) + total, list, err := rule_engine.GetDebugDataPage(pageNum, pageSize, ruleId, nodeId) + biz.ErrIsNil(err, "获取规则测试数据错误") rc.ResData = model.ResultPage{ Total: total, PageNum: int64(pageNum), @@ -50,8 +51,8 @@ func (p *RuleChainApi) GetRuleChainList(rc *restfulx.ReqCtx) { data.RoleId = rc.LoginAccount.RoleId data.Owner = rc.LoginAccount.UserName - list, total := p.RuleChainApp.FindListPage(pageNum, pageSize, data) - + list, total, err := p.RuleChainApp.FindListPage(pageNum, pageSize, data) + biz.ErrIsNil(err, "获取规则链列表错误") rc.ResData = model.ResultPage{ Total: total, PageNum: int64(pageNum), @@ -63,14 +64,17 @@ func (p *RuleChainApi) GetRuleChainList(rc *restfulx.ReqCtx) { func (p *RuleChainApi) GetRuleChainListLabel(rc *restfulx.ReqCtx) { data := entity.RuleChain{} data.RuleName = restfulx.QueryParam(rc, "ruleName") - list := p.RuleChainApp.FindListBaseLabel(data) + list, err := p.RuleChainApp.FindListBaseLabel(data) + biz.ErrIsNil(err, "获取规则链Label错误") rc.ResData = list } // GetRuleChain 获取规则链 func (p *RuleChainApi) GetRuleChain(rc *restfulx.ReqCtx) { id := restfulx.PathParam(rc, "id") - rc.ResData = p.RuleChainApp.FindOne(id) + data, err := p.RuleChainApp.FindOne(id) + biz.ErrIsNil(err, "获取规则链信息错误") + rc.ResData = data } // InsertRuleChain 添加规则链 @@ -80,33 +84,38 @@ func (p *RuleChainApi) InsertRuleChain(rc *restfulx.ReqCtx) { data.Id = model2.GenerateID() data.Owner = rc.LoginAccount.UserName data.OrgId = rc.LoginAccount.OrganizationId - p.RuleChainApp.Insert(data) + _, err := p.RuleChainApp.Insert(data) + biz.ErrIsNil(err, "添加规则链错误") } // UpdateRuleChain 修改规则链 func (p *RuleChainApi) UpdateRuleChain(rc *restfulx.ReqCtx) { var data entity.RuleChain restfulx.BindJsonAndValid(rc, &data) - p.RuleChainApp.Update(data) + _, err := p.RuleChainApp.Update(data) + biz.ErrIsNil(err, "修改规则链错误") } // DeleteRuleChain 删除规则链 func (p *RuleChainApi) DeleteRuleChain(rc *restfulx.ReqCtx) { id := restfulx.PathParam(rc, "id") - one := p.RuleChainApp.FindOne(id) + one, err := p.RuleChainApp.FindOne(id) + biz.ErrIsNil(err, "规则链不存在") biz.IsTrue(!(one.Root == "1"), "主链不可被删除") ids := strings.Split(id, ",") - p.RuleChainApp.Delete(ids) + biz.ErrIsNil(p.RuleChainApp.Delete(ids), "删除规则链失败") } // CloneRuleChain 克隆规则链 func (p *RuleChainApi) CloneRuleChain(rc *restfulx.ReqCtx) { id := restfulx.PathParam(rc, "id") - one := p.RuleChainApp.FindOne(id) + one, err := p.RuleChainApp.FindOne(id) + biz.ErrIsNil(err, "规则链不存在") one.RuleName = one.RuleName + "-克隆" one.Id = model2.GenerateID() one.Root = "0" - p.RuleChainApp.Insert(*one) + _, err = p.RuleChainApp.Insert(*one) + biz.ErrIsNil(err, "克隆规则链失败") } // UpdateRuleRoot 修改根链 @@ -117,5 +126,6 @@ func (p *RuleChainApi) UpdateRuleRoot(rc *restfulx.ReqCtx) { err := p.RuleChainApp.UpdateByRoot() biz.ErrIsNil(err, "修改主链错误") // 修改当前链为主链 - p.RuleChainApp.Update(rule) + _, err = p.RuleChainApp.Update(rule) + biz.ErrIsNil(err, "修改当前链为主链错误") } diff --git a/apps/rule/api/rulechain_log.go b/apps/rule/api/rulechain_log.go index 960350a..0a7d9a4 100644 --- a/apps/rule/api/rulechain_log.go +++ b/apps/rule/api/rulechain_log.go @@ -3,6 +3,7 @@ package api import ( "pandax/apps/rule/entity" "pandax/apps/rule/services" + "pandax/kit/biz" "pandax/kit/model" "pandax/kit/restfulx" "pandax/pkg/rule_engine/nodes" @@ -27,8 +28,8 @@ func (p *RuleChainMsgLogApi) GetRuleChainMsgLogList(rc *restfulx.ReqCtx) { data.RoleId = rc.LoginAccount.RoleId data.Owner = rc.LoginAccount.UserName - list, total := p.RuleChainMsgLogApp.FindListPage(pageNum, pageSize, data) - + list, total, err := p.RuleChainMsgLogApp.FindListPage(pageNum, pageSize, data) + biz.ErrIsNil(err, "查询规则链日志列表失败") rc.ResData = model.ResultPage{ Total: total, PageNum: int64(pageNum), @@ -42,5 +43,5 @@ func (p *RuleChainMsgLogApi) DeleteRuleChainMsgLog(rc *restfulx.ReqCtx) { data := entity.RuleChainMsgLog{} data.DeviceName = restfulx.QueryParam(rc, "deviceName") data.MsgType = restfulx.QueryParam(rc, "msgType") - p.RuleChainMsgLogApp.Delete(data) + biz.ErrIsNil(p.RuleChainMsgLogApp.Delete(data), "删除规则链日志失败") } diff --git a/apps/rule/services/rulechain.go b/apps/rule/services/rulechain.go index fea855e..1f5674d 100644 --- a/apps/rule/services/rulechain.go +++ b/apps/rule/services/rulechain.go @@ -7,8 +7,8 @@ package services import ( + "errors" "pandax/apps/rule/entity" - "pandax/kit/biz" "pandax/pkg/events" "pandax/pkg/global" "pandax/pkg/global/model" @@ -16,15 +16,15 @@ import ( type ( RuleChainModel interface { - Insert(data entity.RuleChain) *entity.RuleChain - FindOne(id string) *entity.RuleChain - FindOneByRoot() *entity.RuleChain + Insert(data entity.RuleChain) (*entity.RuleChain, error) + FindOne(id string) (*entity.RuleChain, error) + FindOneByRoot() (*entity.RuleChain, error) UpdateByRoot() error - FindListPage(page, pageSize int, data entity.RuleChain) (*[]entity.RuleChainBase, int64) - FindList(data entity.RuleChain) *[]entity.RuleChain - FindListBaseLabel(data entity.RuleChain) *[]entity.RuleChainBaseLabel - Update(data entity.RuleChain) *entity.RuleChain - Delete(ids []string) + FindListPage(page, pageSize int, data entity.RuleChain) (*[]entity.RuleChainBase, int64, error) + FindList(data entity.RuleChain) (*[]entity.RuleChain, error) + FindListBaseLabel(data entity.RuleChain) (*[]entity.RuleChainBaseLabel, error) + Update(data entity.RuleChain) (*entity.RuleChain, error) + Delete(ids []string) error } ruleChainModelImpl struct { @@ -36,37 +36,36 @@ var RuleChainModelDao RuleChainModel = &ruleChainModelImpl{ table: `rule_chain`, } -func (m *ruleChainModelImpl) Insert(data entity.RuleChain) *entity.RuleChain { +func (m *ruleChainModelImpl) Insert(data entity.RuleChain) (*entity.RuleChain, error) { tx := global.Db.Begin() // 如果新增的链为主链,那么将原来的设置为普通连 if data.Root == "1" { err := m.UpdateByRoot() - biz.ErrIsNil(err, "修改主链错误") + if err != nil { + return nil, errors.New("修改主链错误") + } } err := global.Db.Table(m.table).Create(&data).Error if err != nil { tx.Rollback() + return nil, err } - biz.ErrIsNil(err, "添加规则链失败") tx.Commit() - return &data + return &data, nil } -func (m *ruleChainModelImpl) FindOne(id string) *entity.RuleChain { +func (m *ruleChainModelImpl) FindOne(id string) (*entity.RuleChain, error) { resData := new(entity.RuleChain) db := global.Db.Table(m.table).Where("id = ?", id) err := db.First(resData).Error - - biz.ErrIsNil(err, "查询规则链失败") - return resData + return resData, err } -func (m *ruleChainModelImpl) FindOneByRoot() *entity.RuleChain { +func (m *ruleChainModelImpl) FindOneByRoot() (*entity.RuleChain, error) { resData := new(entity.RuleChain) db := global.Db.Table(m.table).Where("root = ?", 1) err := db.First(resData).Error - biz.ErrIsNil(err, "查询规则链失败") - return resData + return resData, err } // UpdateByRoot 修改主链为普通链 @@ -75,7 +74,7 @@ func (m *ruleChainModelImpl) UpdateByRoot() error { return tx.Error } -func (m *ruleChainModelImpl) FindListPage(page, pageSize int, data entity.RuleChain) (*[]entity.RuleChainBase, int64) { +func (m *ruleChainModelImpl) FindListPage(page, pageSize int, data entity.RuleChain) (*[]entity.RuleChainBase, int64, error) { list := make([]entity.RuleChainBase, 0) var total int64 = 0 offset := pageSize * (page - 1) @@ -88,14 +87,19 @@ func (m *ruleChainModelImpl) FindListPage(page, pageSize int, data entity.RuleCh db = db.Where("rule_remark like ?", "%"+data.RuleRemark+"%") } // 组织数据访问权限 - model.OrgAuthSet(db, data.RoleId, data.Owner) - err := db.Count(&total).Error + err := model.OrgAuthSet(db, data.RoleId, data.Owner) + if err != nil { + return &list, total, err + } + err = db.Count(&total).Error + if err != nil { + return &list, total, err + } err = db.Order("create_time").Limit(pageSize).Offset(offset).Find(&list).Error - biz.ErrIsNil(err, "查询规则链分页列表失败") - return &list, total + return &list, total, err } -func (m *ruleChainModelImpl) FindList(data entity.RuleChain) *[]entity.RuleChain { +func (m *ruleChainModelImpl) FindList(data entity.RuleChain) (*[]entity.RuleChain, error) { list := make([]entity.RuleChain, 0) db := global.Db.Table(m.table) // 此处填写 where参数判断 @@ -106,12 +110,15 @@ func (m *ruleChainModelImpl) FindList(data entity.RuleChain) *[]entity.RuleChain db = db.Where("rule_remark like ?", "%"+data.RuleRemark+"%") } // 组织数据访问权限 - model.OrgAuthSet(db, data.RoleId, data.Owner) - biz.ErrIsNil(db.Order("create_time").Find(&list).Error, "查询规则链列表失败") - return &list + err := model.OrgAuthSet(db, data.RoleId, data.Owner) + if err != nil { + return &list, err + } + err = db.Order("create_time").Find(&list).Error + return &list, err } -func (m *ruleChainModelImpl) FindListBaseLabel(data entity.RuleChain) *[]entity.RuleChainBaseLabel { +func (m *ruleChainModelImpl) FindListBaseLabel(data entity.RuleChain) (*[]entity.RuleChainBaseLabel, error) { list := make([]entity.RuleChainBaseLabel, 0) db := global.Db.Table(m.table) // 此处填写 where参数判断 @@ -119,31 +126,36 @@ func (m *ruleChainModelImpl) FindListBaseLabel(data entity.RuleChain) *[]entity. db = db.Where("rule_name like ?", "%"+data.RuleName+"%") } // 组织数据访问权限 - model.OrgAuthSet(db, data.RoleId, data.Owner) - biz.ErrIsNil(db.Find(&list).Error, "查询规则链列表失败") - return &list + err := model.OrgAuthSet(db, data.RoleId, data.Owner) + if err != nil { + return &list, err + } + err = db.Find(&list).Error + return &list, err } -func (m *ruleChainModelImpl) Update(data entity.RuleChain) *entity.RuleChain { +func (m *ruleChainModelImpl) Update(data entity.RuleChain) (*entity.RuleChain, error) { tx := global.Db.Begin() // 如果新增的链为主链,那么将原来的设置为普通连 if data.Root == "1" { err := m.UpdateByRoot() - biz.ErrIsNil(err, "修改主链错误") + if err != nil { + return nil, err + } } err := global.Db.Table(m.table).Updates(&data).Error if err != nil { tx.Rollback() + return nil, err } - biz.ErrIsNil(err, "修改规则链失败") tx.Commit() //更改本地规则链缓存 if data.RuleDataJson != "" { go global.EventEmitter.Emit(events.ProductChainRuleEvent, data.Id, data.RuleDataJson) } - return &data + return &data, nil } -func (m *ruleChainModelImpl) Delete(ids []string) { - biz.ErrIsNil(global.Db.Table(m.table).Delete(&entity.RuleChain{}, "id in (?)", ids).Error, "删除规则链失败") +func (m *ruleChainModelImpl) Delete(ids []string) error { + return global.Db.Table(m.table).Delete(&entity.RuleChain{}, "id in (?)", ids).Error } diff --git a/apps/rule/services/rulechain_log.go b/apps/rule/services/rulechain_log.go index 9d62860..36e7c44 100644 --- a/apps/rule/services/rulechain_log.go +++ b/apps/rule/services/rulechain_log.go @@ -8,16 +8,15 @@ package services import ( "pandax/apps/rule/entity" - "pandax/kit/biz" "pandax/pkg/global" "pandax/pkg/global/model" ) type ( RuleChainMsgLogModel interface { - Insert(data entity.RuleChainMsgLog) *entity.RuleChainMsgLog - FindListPage(page, pageSize int, data entity.RuleChainMsgLog) (*[]entity.RuleChainMsgLog, int64) - Delete(data entity.RuleChainMsgLog) + Insert(data entity.RuleChainMsgLog) (*entity.RuleChainMsgLog, error) + FindListPage(page, pageSize int, data entity.RuleChainMsgLog) (*[]entity.RuleChainMsgLog, int64, error) + Delete(data entity.RuleChainMsgLog) error } ruleChainLogModelImpl struct { @@ -29,13 +28,12 @@ var RuleChainMsgLogModelDao RuleChainMsgLogModel = &ruleChainLogModelImpl{ table: `rule_chain_msg_log`, } -func (m *ruleChainLogModelImpl) Insert(data entity.RuleChainMsgLog) *entity.RuleChainMsgLog { +func (m *ruleChainLogModelImpl) Insert(data entity.RuleChainMsgLog) (*entity.RuleChainMsgLog, error) { err := global.Db.Table(m.table).Create(&data).Error - biz.ErrIsNil(err, "添加规则链失败") - return &data + return &data, err } -func (m *ruleChainLogModelImpl) FindListPage(page, pageSize int, data entity.RuleChainMsgLog) (*[]entity.RuleChainMsgLog, int64) { +func (m *ruleChainLogModelImpl) FindListPage(page, pageSize int, data entity.RuleChainMsgLog) (*[]entity.RuleChainMsgLog, int64, error) { list := make([]entity.RuleChainMsgLog, 0) var total int64 = 0 offset := pageSize * (page - 1) @@ -51,14 +49,19 @@ func (m *ruleChainLogModelImpl) FindListPage(page, pageSize int, data entity.Rul db = db.Where("msg_type = ?", data.MsgType) } // 组织数据访问权限 - model.OrgAuthSet(db, data.RoleId, data.Owner) - err := db.Count(&total).Error + err := model.OrgAuthSet(db, data.RoleId, data.Owner) + if err != nil { + return nil, 0, err + } + err = db.Count(&total).Error + if err != nil { + return nil, 0, err + } err = db.Order("create_at").Limit(pageSize).Offset(offset).Find(&list).Error - biz.ErrIsNil(err, "查询规则链分页列表失败") - return &list, total + return &list, total, err } -func (m *ruleChainLogModelImpl) Delete(data entity.RuleChainMsgLog) { +func (m *ruleChainLogModelImpl) Delete(data entity.RuleChainMsgLog) error { db := global.Db.Table(m.table) // 此处填写 where参数判断 if data.DeviceName != "" { @@ -70,5 +73,5 @@ func (m *ruleChainLogModelImpl) Delete(data entity.RuleChainMsgLog) { if data.MsgType != "" { db = db.Where("msg_type = ?", data.MsgType) } - biz.ErrIsNil(db.Delete(&entity.RuleChainMsgLog{}).Error, "删除规则链失败") + return db.Delete(&entity.RuleChainMsgLog{}).Error } diff --git a/iothub/hook_message_work/hook_message_work.go b/iothub/hook_message_work/hook_message_work.go index 7b83b93..f3b16f7 100644 --- a/iothub/hook_message_work/hook_message_work.go +++ b/iothub/hook_message_work/hook_message_work.go @@ -54,6 +54,7 @@ func (s *HookService) handleOne(msg *netbase.DeviceEventInfo) { // 获取规则链代码实体 instance := getRuleChainInstance(msg.DeviceAuth) if instance == nil { + global.Log.Error("规则链实体不存在") return } ruleMessage := buildRuleMessage(msg.DeviceAuth, msgVals, msg.Type) @@ -109,7 +110,10 @@ func getRuleChainInstance(etoken *model.DeviceAuth) *rule_engine.RuleChainInstan if err != nil { return nil, err } - rule := ruleService.RuleChainModelDao.FindOne(one.RuleChainId) + rule, err := ruleService.RuleChainModelDao.FindOne(one.RuleChainId) + if err != nil { + return nil, err + } var lfData ruleEntity.RuleDataJson err = tool.StringToStruct(rule.RuleDataJson, &lfData) if err != nil { diff --git a/pkg/rule_engine/engine_data.go b/pkg/rule_engine/engine_data.go index 24210d1..a492a7f 100644 --- a/pkg/rule_engine/engine_data.go +++ b/pkg/rule_engine/engine_data.go @@ -1,6 +1,7 @@ package rule_engine import ( + "errors" "pandax/pkg/rule_engine/message" "pandax/pkg/rule_engine/nodes" ) @@ -22,7 +23,7 @@ func ClearDebugData(ruleId, nodeId string) { } } -func GetDebugDataPage(page, pageSize int, ruleId, nodeId string) (int64, []message.DebugData) { +func GetDebugDataPage(page, pageSize int, ruleId, nodeId string) (int64, []message.DebugData, error) { if page < 1 { page = 1 } @@ -35,8 +36,8 @@ func GetDebugDataPage(page, pageSize int, ruleId, nodeId string) (int64, []messa if end >= total { end = total } - return int64(total), nodeData.Items[offset:end] + return int64(total), nodeData.Items[offset:end], nil } } - return 0, nil + return 0, nil, errors.New("规则不存在") } diff --git a/pkg/rule_engine/nodes/external_rule_chain_node.go b/pkg/rule_engine/nodes/external_rule_chain_node.go index ec68f4e..4f40114 100644 --- a/pkg/rule_engine/nodes/external_rule_chain_node.go +++ b/pkg/rule_engine/nodes/external_rule_chain_node.go @@ -29,8 +29,8 @@ func (f externalRuleChainNodeFactory) Create(id string, meta Properties) (Node, func (n *externalRuleChainNode) Handle(msg *message.Message) error { logrus.Infof("%s handle message '%s'", n.Name(), msg.MsgType) - data := services.RuleChainModelDao.FindOne(n.RuleId) - if data == nil { + _, err := services.RuleChainModelDao.FindOne(n.RuleId) + if err != nil { return errors.New(fmt.Sprintf("节点 %s ,获取规则链失败", n.Name())) }