@@ -3,14 +3,10 @@ package cn.iocoder.yudao.module.iot.service.thingmodel;
import cn.hutool.core.collection.CollUtil ;
import cn.hutool.core.util.ObjectUtil ;
import cn.iocoder.yudao.framework.common.pojo.PageResult ;
import cn.iocoder.yudao.framework.common.util.collection.Collectio nUtils ;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils ;
import cn.iocoder.yudao.framework.common.util.object.Bea nUtils ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelEvent ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelProperty ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelInputOutputParam ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.ThingModelService ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelArgument ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelArrayDataSpecs ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotProductThingModelPageReqVO ;
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.vo.IotProductThingModelSaveReqVO ;
import cn.iocoder.yudao.module.iot.convert.thingmodel.IotProductThingModelConvert ;
@@ -18,8 +14,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotProductThingModelDO ;
import cn.iocoder.yudao.module.iot.dal.mysql.thingmodel.IotProductThingModelMapper ;
import cn.iocoder.yudao.module.iot.enums.product.IotProductStatusEnum ;
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotProductThingModelAccessModeEnum ;
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotProductThingModelTypeEnum ;
import cn.iocoder.yudao.module.iot.enums.thingmodel.* ;
import cn.iocoder.yudao.module.iot.service.product.IotProductService ;
import jakarta.annotation.Resource ;
import lombok.extern.slf4j.Slf4j ;
@@ -30,8 +25,7 @@ import org.springframework.validation.annotation.Validated;
import java.util.* ;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception ;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.diffList ;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList ;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.* ;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.* ;
/**
@@ -73,9 +67,91 @@ public class IotProductThingModelServiceImpl implements IotProductThingModelServ
if ( Objects . equals ( createReqVO . getType ( ) , IotProductThingModelTypeEnum . PROPERTY . getType ( ) ) ) {
createDefaultEventsAndServices ( createReqVO . getProductId ( ) , createReqVO . getProductKey ( ) ) ;
}
// TODO @puhui999: 服务和事件的情况 method 怎么设置?在前端设置还是后端设置?
return thingModel . getId ( ) ;
}
@Override
@Transactional ( rollbackFor = Exception . class )
public void updateProductThingModel ( IotProductThingModelSaveReqVO updateReqVO ) {
// 1. 校验功能是否存在
validateProductThingModelMapperExists ( updateReqVO . getId ( ) ) ;
// 2. 校验功能标识符是否唯一
validateIdentifierUniqueForUpdate ( updateReqVO . getId ( ) , updateReqVO . getProductId ( ) , updateReqVO . getIdentifier ( ) ) ;
// 3. 校验产品状态,发布状态下,不允许操作功能
validateProductStatus ( updateReqVO . getProductId ( ) ) ;
// 4. 更新数据库
IotProductThingModelDO thingModel = IotProductThingModelConvert . INSTANCE . convert ( updateReqVO ) ;
productThingModelMapper . updateById ( thingModel ) ;
// 5. 如果更新的是属性,需要更新默认的事件和服务
if ( Objects . equals ( updateReqVO . getType ( ) , IotProductThingModelTypeEnum . PROPERTY . getType ( ) ) ) {
createDefaultEventsAndServices ( updateReqVO . getProductId ( ) , updateReqVO . getProductKey ( ) ) ;
}
}
@Override
@Transactional ( rollbackFor = Exception . class )
public void deleteProductThingModel ( Long id ) {
// 1. 校验功能是否存在
IotProductThingModelDO thingModel = productThingModelMapper . selectById ( id ) ;
if ( thingModel = = null ) {
throw exception ( THING_MODEL_NOT_EXISTS ) ;
}
// 3. 校验产品状态,发布状态下,不允许操作功能
validateProductStatus ( thingModel . getProductId ( ) ) ;
// 2. 删除功能
productThingModelMapper . deleteById ( id ) ;
// 3. 如果删除的是属性,需要更新默认的事件和服务
if ( Objects . equals ( thingModel . getType ( ) , IotProductThingModelTypeEnum . PROPERTY . getType ( ) ) ) {
createDefaultEventsAndServices ( thingModel . getProductId ( ) , thingModel . getProductKey ( ) ) ;
}
}
@Override
public IotProductThingModelDO getProductThingModel ( Long id ) {
return productThingModelMapper . selectById ( id ) ;
}
@Override
public List < IotProductThingModelDO > getProductThingModelListByProductId ( Long productId ) {
return productThingModelMapper . selectListByProductId ( productId ) ;
}
@Override
public PageResult < IotProductThingModelDO > getProductThingModelPage ( IotProductThingModelPageReqVO pageReqVO ) {
return productThingModelMapper . selectPage ( pageReqVO ) ;
}
@Override
public List < IotProductThingModelDO > getProductThingModelListByProductKey ( String productKey ) {
return productThingModelMapper . selectListByProductKey ( productKey ) ;
}
/**
* 校验功能是否存在
*
* @param id 功能编号
*/
private void validateProductThingModelMapperExists ( Long id ) {
if ( productThingModelMapper . selectById ( id ) = = null ) {
throw exception ( THING_MODEL_NOT_EXISTS ) ;
}
}
private void validateIdentifierUniqueForUpdate ( Long id , Long productId , String identifier ) {
IotProductThingModelDO thingModel = productThingModelMapper . selectByProductIdAndIdentifier ( productId , identifier ) ;
if ( thingModel ! = null & & ObjectUtil . notEqual ( thingModel . getId ( ) , id ) ) {
throw exception ( THING_MODEL_IDENTIFIER_EXISTS ) ;
}
}
private void validateProductStatus ( Long createReqVO ) {
IotProductDO product = productService . getProduct ( createReqVO ) ;
if ( Objects . equals ( product . getStatus ( ) , IotProductStatusEnum . PUBLISHED . getStatus ( ) ) ) {
@@ -104,87 +180,6 @@ public class IotProductThingModelServiceImpl implements IotProductThingModelServ
}
}
@Override
@Transactional ( rollbackFor = Exception . class )
public void updateProductThingModel ( IotProductThingModelSaveReqVO updateReqVO ) {
// 1. 校验功能是否存在
validateProductThingModelMapperExists ( updateReqVO . getId ( ) ) ;
// 2. 校验功能标识符是否唯一
validateIdentifierUniqueForUpdate ( updateReqVO . getId ( ) , updateReqVO . getProductId ( ) , updateReqVO . getIdentifier ( ) ) ;
// 3. 校验产品状态,发布状态下,不允许操作功能
validateProductStatus ( updateReqVO . getProductId ( ) ) ;
// 4. 更新数据库
IotProductThingModelDO thingModel = IotProductThingModelConvert . INSTANCE . convert ( updateReqVO ) ;
productThingModelMapper . updateById ( thingModel ) ;
// 5. 如果更新的是属性,需要更新默认的事件和服务
if ( Objects . equals ( updateReqVO . getType ( ) , IotProductThingModelTypeEnum . PROPERTY . getType ( ) ) ) {
createDefaultEventsAndServices ( updateReqVO . getProductId ( ) , updateReqVO . getProductKey ( ) ) ;
}
}
private void validateIdentifierUniqueForUpdate ( Long id , Long productId , String identifier ) {
IotProductThingModelDO thingModel = productThingModelMapper . selectByProductIdAndIdentifier ( productId , identifier ) ;
if ( thingModel ! = null & & ObjectUtil . notEqual ( thingModel . getId ( ) , id ) ) {
throw exception ( THING_MODEL_IDENTIFIER_EXISTS ) ;
}
}
@Override
@Transactional ( rollbackFor = Exception . class )
public void deleteProductThingModel ( Long id ) {
// 1. 校验功能是否存在
IotProductThingModelDO thingModel = productThingModelMapper . selectById ( id ) ;
if ( thingModel = = null ) {
throw exception ( THING_MODEL_NOT_EXISTS ) ;
}
// 3. 校验产品状态,发布状态下,不允许操作功能
validateProductStatus ( thingModel . getProductId ( ) ) ;
// 2. 删除功能
productThingModelMapper . deleteById ( id ) ;
// 3. 如果删除的是属性,需要更新默认的事件和服务
if ( Objects . equals ( thingModel . getType ( ) , IotProductThingModelTypeEnum . PROPERTY . getType ( ) ) ) {
createDefaultEventsAndServices ( thingModel . getProductId ( ) , thingModel . getProductKey ( ) ) ;
}
}
/**
* 校验功能是否存在
*
* @param id 功能编号
*/
private void validateProductThingModelMapperExists ( Long id ) {
if ( productThingModelMapper . selectById ( id ) = = null ) {
throw exception ( THING_MODEL_NOT_EXISTS ) ;
}
}
@Override
public IotProductThingModelDO getProductThingModel ( Long id ) {
return productThingModelMapper . selectById ( id ) ;
}
@Override
public List < IotProductThingModelDO > getProductThingModelListByProductId ( Long productId ) {
return productThingModelMapper . selectListByProductId ( productId ) ;
}
@Override
public PageResult < IotProductThingModelDO > getProductThingModelPage ( IotProductThingModelPageReqVO pageReqVO ) {
return productThingModelMapper . selectPage ( pageReqVO ) ;
}
@Override
public List < IotProductThingModelDO > getProductThingModelListByProductKey ( String productKey ) {
return productThingModelMapper . selectListByProductKey ( productKey ) ;
}
/**
* 创建默认的事件和服务
*/
@@ -195,231 +190,140 @@ public class IotProductThingModelServiceImpl implements IotProductThingModelServ
// 2. 生成新的事件和服务列表
List < IotProductThingModelDO > newThingModelList = new ArrayList < > ( ) ;
// 生成属性上报事件
// 2.1 生成属性上报事件
ThingModelEvent propertyPostEvent = generatePropertyPostEvent ( propertyList ) ;
if ( propertyPostEvent ! = null ) {
IotProductThingModelDO eventThingModel = buildEventThingModelDO ( productId , productKey , propertyPostEvent ) ;
newThingModelList . add ( eventThingModel ) ;
newThingModelList . add ( buildEventThingModelDO ( productId , productKey , propertyPostEvent , " 属性上报事件 " ) );
}
// 生成属性设置服务
// 2.2 生成属性设置服务
ThingModelService propertySetService = generatePropertySetService ( propertyList ) ;
if ( propertySetService ! = null ) {
IotProductThingModelDO setServiceThingModel = buildServiceThingModelDO ( productId , productKey , propertySetService ) ;
newThingModelList . add ( setServiceThingModel ) ;
newThingModelList . add ( buildServiceThingModelDO ( productId , productKey , propertySetService , " 属性设置服务 " ) );
}
// 生成属性获取服务
// 2.3 生成属性获取服务
ThingModelService propertyGetService = generatePropertyGetService ( propertyList ) ;
if ( propertyGetService ! = null ) {
IotProductThingModelDO getServiceThingModel = buildServiceThingModelDO ( productId , productKey , propertyGetService ) ;
newThingModelList . add ( getServiceThingModel ) ;
newThingModelList . add ( buildServiceThingModelDO ( productId , productKey , propertyGetService , " 属性获取服务 " ) );
}
// 3. 获取数据库中的默认的旧事件和服务列表
// 3.1 获取数据库中的默认的旧事件和服务列表
List < IotProductThingModelDO > oldThingModelList = productThingModelMapper . selectListByProductIdAndIdentifiersAndTypes (
productId ,
Arrays . asList ( " post " , " set " , " get " ) ,
Arrays . asList ( IotProductThingModelTypeEnum . EVENT . getType ( ) , IotProductThingModelTypeEnum . SERVICE . getType ( ) )
) ;
// 3.1 使用 diffList 方法比较新旧列表
List < List < IotProductThingModelDO > > diffResult = diffList ( oldThingModelList , newThingModelList ,
// 继续使用 identifier 和 type 进行比较:这样可以准确地匹配对应的功能对象。
( oldFunc , newFunc ) - > Objects . equals ( oldFunc . getIdentifier ( ) , newFunc . getIdentifier ( ) )
& & Objects . equals ( oldFunc . getType ( ) , newFunc . getType ( ) ) ) ;
List < IotProductThingModelDO > createList = diffResult . get ( 0 ) ; // 需要新增的
List < IotProductThingModelDO > updateList = diffResult . get ( 1 ) ; // 需要更新的
List < IotProductThingModelDO > deleteList = diffResult . get ( 2 ) ; // 需要删除的
// 3.2 批量执行数据库操作
// 新增数据库中的新事件和服务列表
if ( CollUtil . isNotEmpty ( createList ) ) {
productThingModelMapper . insertBatch ( createList ) ;
}
// 更新数据库中的事件和服务列表
if ( CollUtil . isNotEmpty ( updateList ) ) {
// 首先,为每个需要更新的对象设置其对应的 ID
updateList . forEach ( updateFunc - > {
IotProductThingModelDO oldFunc = findThingModelByIdentifierAndType (
oldThingModelList , updateFunc . getIdentifier ( ) , updateFunc . getType ( ) ) ;
if ( oldFunc ! = null ) {
updateFunc . setId ( oldFunc . getId ( ) ) ;
}
} ) ;
// 过滤掉没有设置 ID 的对象
List < IotProductThingModelDO > validUpdateList = filterList ( updateList , thingModel - > thingModel . getId ( ) ! = null ) ;
// 执行批量更新
if ( CollUtil . isNotEmpty ( validUpdateList ) ) {
productThingModelMapper . updateBatch ( validUpdateList ) ;
}
}
// 删除数据库中的旧事件和服务列表
if ( CollUtil . isNotEmpty ( deleteList ) ) {
Set < Long > idsToDelete = CollectionUtils . convertSet ( deleteList , IotProductThingModelDO : : getId ) ;
productThingModelMapper . deleteByIds ( idsToDelete ) ;
}
// 3.2 创建默认的事件和服务
createDefaultEventsAndServices ( oldThingModelList , newThingModelList ) ;
}
/**
* 根据标识符和类型查找功能对象
* 创建默认的事件和服务
*/
private IotProductThingModelDO fin dThingModelByIdentifierAndType ( List < IotProductThingModelDO > t hingModelList,
String identifier , Integer type ) {
return CollUtil . findOne ( t hingModelList, func - >
Objects . equals ( func . getIdentifier ( ) , identifier ) & & Objects . equals ( func . getType ( ) , type ) ) ;
private void createDefaultEventsAndServices ( List < IotProductThingModelDO > ol dThingModelList , List < IotProductThingModelDO > newT hingModelList) {
// 1.1 使用 diffList 方法比较新旧列表
List < List < IotProductThingModelDO > > diffResult = diffList ( oldT hingModelList, newThingModelList ,
( oldVal , newVal ) - > {
// 继续使用 identifier 和 type 进行比较:这样可以准确地匹配对应的功能对象。
boolean same = Objects . equals ( oldVal . getIdentifier ( ) , newVal . getIdentifier ( ) )
& & Objects . equals ( oldVal . getType ( ) , newVal . getType ( ) ) ;
if ( same ) {
newVal . setId ( oldVal . getId ( ) ) ; // 设置编号
}
return same ;
} ) ;
// 1.2 批量添加、修改、删除
if ( CollUtil . isNotEmpty ( diffResult . get ( 0 ) ) ) {
productThingModelMapper . insertBatch ( diffResult . get ( 0 ) ) ;
}
if ( CollUtil . isNotEmpty ( diffResult . get ( 1 ) ) ) {
productThingModelMapper . updateBatch ( diffResult . get ( 1 ) ) ;
}
if ( CollUtil . isNotEmpty ( diffResult . get ( 2 ) ) ) {
productThingModelMapper . deleteByIds ( convertSet ( diffResult . get ( 2 ) , IotProductThingModelDO : : getId ) ) ;
}
}
/**
* 构建事件功能对象
*/
private IotProductThingModelDO buildEventThingModelDO ( Long productId , String productKey , ThingModelEvent event ) {
return new IotProductThingModelDO ( )
. setProductId ( productId )
. setProductKey ( productKey )
. setIdentifier ( event . getIdentifier ( ) )
. setName ( event . getName ( ) )
. setDescription ( event . getDescription ( ) )
. setType ( IotProductThingModelTypeEnum . EVENT . getType ( ) )
. setEvent ( event ) ;
private IotProductThingModelDO buildEventThingModelDO ( Long productId , String productKey , ThingModelEvent event ,
String description ) {
return new IotProductThingModelDO ( ) . setProductId ( productId ) . setProductKey ( productKey )
. setIdentifier ( event . getIdentifier ( ) ) . setName ( event . getName ( ) ) . setDescription ( description )
. setType ( IotProductThingModelTypeEnum . EVENT . getType ( ) ) . setEvent ( event ) ;
}
/**
* 构建服务功能对象
*/
private IotProductThingModelDO buildServiceThingModelDO ( Long productId , String productKey , ThingModelService service ) {
return new IotProductThingModelDO ( )
. setProductId ( productId )
. setProductKey ( productKey )
. setIdentifier ( service . getIdentifier ( ) )
. setName ( service . getName ( ) )
. setDescription ( service . getDescription ( ) )
. setType ( IotProductThingModelTypeEnum . SERVICE . getType ( ) )
. setService ( service ) ;
private IotProductThingModelDO buildServiceThingModelDO ( Long productId , String productKey , ThingModelService service ,
String description ) {
return new IotProductThingModelDO ( ) . setProductId ( productId ) . setProductKey ( productKey )
. setIdentifier ( service . getIdentifier ( ) ) . setName ( service . getName ( ) ) . setDescription ( description )
. setType ( IotProductThingModelTypeEnum . SERVICE . getType ( ) ) . setService ( service ) ;
}
/**
* 生成属性上报事件
*/
private ThingModelEvent generatePropertyPostEvent ( List < IotProductThingModelDO > property List) {
if ( CollUtil . isEmpty ( propertyList ) ) {
private ThingModelEvent generatePropertyPostEvent ( List < IotProductThingModelDO > thingModel List) {
// 1.1 没有属性则不生成
if ( CollUtil . isEmpty ( thingModelList ) ) {
return null ;
}
ThingModelEvent event = new ThingModelEvent ( )
. setIdentifier ( " post " )
. setNam e ( " 属性上报 " )
. setType ( " info " )
. setDescription ( " 属性上报事件 " )
. setMethod ( " thing.event.property.post " ) ;
// 将属性列表转换为事件的输出参数
List < ThingModelArgument > outputData = new ArrayList < > ( ) ;
for ( IotProductThingModelDO thingModel : propertyList ) {
ThingModelArgument arg = new ThingModelArgument ( )
. setIdentifier ( thingModel . getIdentifier ( ) )
. setName ( thingModel . getName ( ) )
. setProperty ( thingModel . getProperty ( ) )
. setDescription ( thingModel . getDescription ( ) )
. setDirection ( " output " ) ; // 设置为输出参数
outputData . add ( arg ) ;
}
event . setOutputData ( outputData ) ;
return event ;
// 1.2 生成属性上报事件
return new ThingModelEvent ( ) . setIdentifier ( " post " ) . setName ( " 属性上报 " ) . setMethod ( " thing.event.property. post " )
. setTyp e ( IotProductThingModelServiceEventTypeEnum . INFO . getType ( ) )
. setOutputParams ( buildInputOutputParam ( thingModelList , IotProductThingModelParamDirectionEnum . OUTPUT ) ) ;
}
/**
* 生成属性设置服务
*/
private ThingModelService generatePropertySetService ( List < IotProductThingModelDO > property List) {
if ( propertyList = = null | | propertyList . isEmpty ( ) ) {
private ThingModelService generatePropertySetService ( List < IotProductThingModelDO > thingModel List) {
// 1.1 过滤出所有可写属性
thingModelList = filterList ( thingModelList , thingModel - >
IotProductThingModelAccessModeEnum . READ_WRITE . getMode ( ) . equals ( thingModel . getProperty ( ) . getAccessMode ( ) ) ) ;
// 1.2 没有可写属性则不生成
if ( CollUtil . isEmpty ( thingModelList ) ) {
return null ;
}
List < ThingModelArgument > inputData = new ArrayList < > ( ) ;
for ( IotProductThingModelDO thingModel : propertyList ) {
ThingModelProperty property = thingModel . getProperty ( ) ;
if ( IotProductThingModelAccessModeEnum . READ_WRITE . getMode ( ) . equals ( property . getAccessMode ( ) ) ) {
ThingModelArgument arg = new ThingModelArgument ( )
. setIdentifier ( property . getIdentifier ( ) )
. setName ( property . getName ( ) )
. setProperty ( property )
. setDescription ( property . getDescription ( ) )
. setDirection ( " input " ) ; // 设置为输入参数
inputData . add ( arg ) ;
}
}
if ( inputData . isEmpty ( ) ) {
// 如果没有可写属性,不生成属性设置服务
return null ;
}
// 属性设置服务一般不需要输出参数
return new ThingModelService ( )
. setIdentifier ( " set " )
. setName ( " 属性设置 " )
. setCallType ( " async " )
. setDescription ( " 属性设置服务 " )
. setMethod ( " thing.service.property.set " )
. setInputData ( inputData )
// 属性设置服务一般不需要输出参数
. setOutputData ( new ArrayList < > ( ) ) ;
// 2. 生成属性设置服务
return new ThingModelService ( ) . setIdentifier ( " set " ) . setName ( " 属性设置 " ) . setMethod ( " thing.service.property.set " )
. setCallType ( IotProductThingModelServiceCallTypeEnum . ASYNC . getType ( ) )
. setInputParams ( buildInputOutputParam ( thingModelList , IotProductThingModelParamDirectionEnum . INPUT ) )
. setOutputParams ( Collections . emptyList ( ) ) ; // 属性设置服务一般不需要输出参数
}
/**
* 生成属性获取服务
*/
private ThingModelService generatePropertyGetService ( List < IotProductThingModelDO > property List) {
if ( propertyList = = null | | propertyList . isEmpty ( ) ) {
private ThingModelService generatePropertyGetService ( List < IotProductThingModelDO > thingModel List) {
// 1.1 没有属性则不生成
if ( CollUtil . isEmpty ( thingModelList ) ) {
return null ;
}
List < ThingModelArgument > outputData = new ArrayList < > ( ) ;
for ( IotProductThingModelDO thingModelDO : propertyList ) {
ThingModelProperty property = thingModelDO . getProperty ( ) ;
if ( ObjectUtils . equalsAny ( property . getAccessMode ( ) ,
IotProductThingModelAccessModeEnum . READ_ONLY . getMode ( ) , IotProductThingModelAccessModeEnum . READ_WRITE . getMode ( ) ) ) {
ThingModelArgument arg = new ThingModelArgument ( )
. setIdentifier ( property . getIdentifier ( ) )
. setName ( property . getName ( ) )
. setProperty ( property )
. setDescription ( property . getDescription ( ) )
. setDirection ( " output " ) ; // 设置为输出参数
outputData . add ( arg ) ;
}
}
if ( outputData . isEmpty ( ) ) {
// 如果没有可读属性,不生成属性获取服务
return null ;
}
// 1.2 生成属性获取服务
return new ThingModelService ( ) . setIdentifier ( " get " ) . setName ( " 属性获取 " ) . setMethod ( " thing.service.property.get " )
. setCallType ( IotProductThingModelServiceCallTypeEnum . ASYNC . getType ( ) )
. setInputParams ( buildInputOutputParam ( thingModelList , IotProductThingModelParamDirectionEnum . INPUT ) )
. setOutputParams ( buildInputOutputParam ( thingModelList , IotProductThingModelParamDirectionEnum . OUTPUT ) ) ;
}
ThingModelService service = new ThingModelService ( )
. setIdentifier ( " get " )
. setName ( " 属性获取 " )
. setCallType ( " async " )
. setDescription ( " 属性获取服务 " )
. setMethod ( " thing.service.property.get " ) ;
// 定义输入参数:属性标识符列表
ThingModelArgument inputArg = new T hingModelArgument ( )
. setIdentifier ( " properties " )
. setName ( " 属性标识符列表 " )
. setDescription ( " 需要获取的属性标识符列表 " )
. setDirection ( " input " ) ; // 设置为输入参数
// 创建数组类型, 元素类型为文本类型( 字符串) TODO @puhui999: 还得研究研究
ThingModelArrayDataSpecs arrayType = new ThingModelArrayDataSpecs ( ) ;
arrayType . setDataType ( " array " ) ;
inputArg . setProperty ( new ThingModelProperty ( ) . setIdentifier ( inputArg . getIdentifier ( ) ) . setName ( inputArg . getName ( ) )
. setDescription ( inputArg . getDescription ( ) ) . setDataSpecs ( arrayType ) ) ;
ThingModelDateOrTextDataSpecs textType = new ThingModelDateOrTextDataSpecs ( ) ;
textType . setDataType ( " text " ) ;
inputArg . setProperty ( new ThingModelProperty ( ) . setIdentifier ( inputArg . getIdentifier ( ) ) . setName ( inputArg . getName ( ) )
. setDescription ( inputArg . getDescription ( ) ) . setDataSpecs ( textType ) ) ;
service . setInputData ( Collections . singletonList ( inputArg ) ) ;
service . setOutputData ( outputData ) ;
return service ;
/**
* 构建输入/输出参数列表
*
* @param thingModelList 属性列表
* @return 输入/输出参数列表
*/
private List < ThingModelInputOutputParam > buildInputOutputParam ( List < IotProductThingModelDO > thingModelList ,
IotProductThingModelParamDirectionEnum directionEnum ) {
return convertList ( thingModelList , t hingModel - >
BeanUtils . toBean ( thingModel . getProperty ( ) , ThingModelInputOutputParam . class ) . setParaOrder ( 0 ) // TODO @puhui999: 先搞个默认值看看怎么个事
. setDirection ( directionEnum . getDirection ( ) ) ) ;
}
}