# 十、事件

# (一)概述

用户可以创建自定义事件,用作事件具体位置发生的事情。自定义事件可以是调查、众包采集、科 考记录、旅游线路记录等多种形式,通过创建事件类型进行划分。

# (二)事件集合[EventSet]

所有的事件数据,都存放在不同的事件集合之下。想要对事件进行操作,需要先获取事件集合。 事件集合的常用属性如下:

属性名 值类型 属性描述
name String 事件集合名称
remark String 备注
icon Icon 图标
symbol PointSymbol 点符号

常用方法如下:(get/set方法略)

方法名 返回类型 方法描述
queryEvents void 查询集合下的所有事件要素
queryEventByName void 在该集合下的根据名称查找事件要素
createEvent void 创建事件
updateEvent void 更新事件信息
deleteEvent void 删除事件

# 1、获取事件集合

初始化成功后,可直接从Cellsys的organization对象中获取到组织下所有的事件集合。

let eventSets = Cellsys.shared.organization.eventSets //eventSets 可能为nil
if (eventSets != nil ) {
    let eventSet = eventSets.first
    let name = eventSet.name //集合名称
    let remark = eventSet.remark //集合备注信息
    let pointSymbol = eventSet.symbol //获取地图符号对象
    let icon = eventSet.icon //获取图标对象
    let isPublish = eventSet.isPublish //是否发布
}
1
2
3
4
5
6
7
8
9

# 2、新增事件集合

事件集合通过组织[Organization]对象创建。具体操作见代码示例

organization.createEventSet(name: "事件集合名称", remark: "备注信息", icon: Icon.new(jsonIcon: ["iconId": 822,"rotate": 0,"fillColor":"#096dd9","fillOpacity": 1])!) { obj, errorMessage in
    //成功
    if (obj != nil) {
        let eventSet = obj?.data as? EventSet
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}

1
2
3
4
5
6
7
8
9
10
11
12

# 3、修改事件集合

事件集合通过组织[Organization]对象进行修改。具体操作见代码示例

eventSet.remark = "修改备注信息"
organization.updateEventSet(eventSet: eventSet) { obj, errorMessage in
    //成功
    if (obj != nil) {
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 4、删除事件集合

事件集合通过组织[Organization]对象进行删除。具体操作见代码示例

organization.deleteEventSet(eventSet: eventSet!) { obj, errorMessage in
    //成功
    if (obj != nil) {
        
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
1
2
3
4
5
6
7
8
9
10
11

# (三)事件要素[EventFeature]

事件要素常用属性表如下:

属性名 值类型 属性描述
name String 事件集合名称
remark String 备注
icon Icon 图标
symbol PointSymbol 事件在地图上的符号
mapPoint MapPoint 事件发生地点
images List< Image > 事件图片列表
uploader CommonInfo 上传者的简易信息
happenTime DateTime 事件发生时间
content String 事件内容

事件要素的常用方法如下:(get/set方法略)

方法名 返回类型 方法描述
queryUploader void 查询事件上传者详情

# 1、查询事件要素

事件集合[EventSet]提供了query方法来查询自身集合下的事件。具体操作见代码示例

eventSet.queryEvents { obj, errorMessage in
    //成功
    if (obj != nil) {
        /*分页信息-查询方法特有*/
        let pageInfo = object.pageInfo //查询接口特有的分页信息
        let totalCount = pageInfo.totalCount //数据总数
        let totalPage = pageInfo.totalPage //总页数
        let pageNo = pageInfo.pageNo //当前页码(从1开始)
        let pageSize = pageInfo.pageSize //每页查询数量(注意!不一定和当前查询的数据总量匹配)
             
        /*获取查询结果*/
        let eventFeatures = object.data 
        if (eventFeatures != nil ) {//查询结果可能为nil
            for eventFeature in eventFeatures {
                /*事件要素基础信息获取示例*/
                let name = eventFeature.name //事件要素名称
                let remark = eventFeature.remark //备注
                let pointSymbol = eventFeature.symbol //点符号
                let uploaderName = eventFeature.uploader.name //上传人姓名
                let content = eventFeature.content //事件内容
                let happenTime = eventFeature.happenTime //事件发生事件
                let timeStamp = happenTime.value;//时间戳
                let mapPoint = eventFeature.mapPoint //事件发生地点
                let images = eventFeature.images //事件图片列表
            }
        }
    }
         
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
        SCLAlertView().showError(String(errorCode ?? 0), subTitle:errorMsg ?? "nil")
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# (1)查询事件上报人详情

事件要素提供了queryUploader方法来查询、获取具体的上报成员对象。具体代码示例如下:

eventFeature.queryUploader { obj, errorMessage in
    //成功
    if (obj != nil) {
        /*查询接口统一返回数组格式的数据。但一般来讲,上传者只会有一个*/
        let memberFeatures = object.data
        if (memberFeatures != nil) {
            MemberFeature uploader = memberFeatures.first 
        } 
    }
         
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# (2)显示事件图片

从query接口获取的事件要素的图片数据-Image对象,其type都是InternetImage。这是,Image对象的data属性即是图片的http/https网络链接。具体代码示例如下:

let images = eventFeature.images //可能为空
if (images != nil ) {
    for image in images {
        if (image.type == ImageType.InternetImage) {
            let imgUrl = image.data
        } else {
            /*从query方法获取的数据,ImageType不会是其他类型。否则便是异常数据*/
        }
    }
}
1
2
3
4
5
6
7
8
9
10

# 2、新增事件要素

事件要素[EventFeature]通过事件集合[EventSet]对象创建。具体操作见代码示例

let name = "事件名称"
let remark = "备注信息"
let mapPoint = MapPoint.new(latitude: 23.246300, longitude: 113.411300)
let time = DateTime.new(timestamp: Int(Date().timeIntervalSinceNow))

let imageABase64Str = UIImage(named: "imageA")?.pngData()?.base64EncodedString()
let imageBBase64Str = UIImage(named: "imageB")?.pngData()?.base64EncodedString()
let imageA = Image.new(type: ImageType.Base64BMP, data: imageABase64Str, fileName: nil)
let imageB = Image.new(type: ImageType.Base64BMP, data: imageBBase64Str, fileName: nil)
let images = [imageA,imageB]

eventSet.createEvent(name: name, remark: remark, mapPoint: mapPoint, happenTime: time, base64Images: images) { obj, errorMessage in
    //成功
    if (obj != nil) {
        let event = obj?.data as? EventFeature
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}
            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 3、修改事件要素

事件要素[EventFeature]通过事件集合[EventSet]对象修改。具体操作见代码示例

event.remark = "修改备注信息"
eventSet.updateEvent(event: event) { obj, errorMessage in
    //成功
    if (obj != nil) {
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
}

1
2
3
4
5
6
7
8
9
10
11
12

# 4、删除事件要素

事件要素[EventFeature]通过事件集合[EventSet]对象删除。具体操作见代码示例

eventSet.deleteEvent(event: event, callback: { obj, errorMessage in
    //成功
    if (obj != nil) {
    }
    //失败
    if (errorMessage != nil) {
        let errorCode = errorMessage?.code //错误码
        let errorMsg = errorMessage?.message //错误信息
    }
})
1
2
3
4
5
6
7
8
9
10