Browse Source

完成 迎宾系统 推送

魏熙美 6 years ago
parent
commit
d22fa8fed7

+ 1
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/common/hk/HKConstant.java View File

35
     //  public static final String OPENAPI_IP_PORT_HTTPS = "http://192.168.0.122";
35
     //  public static final String OPENAPI_IP_PORT_HTTPS = "http://192.168.0.122";
36
     //public static final String OPENAPI_IP_PORT_HTTP = "http://huiju.ngrok.xiaomiqiu.cn";
36
     //public static final String OPENAPI_IP_PORT_HTTP = "http://huiju.ngrok.xiaomiqiu.cn";
37
     public static final String OPENAPI_IP_PORT_HTTP = "http://huifang.vipgz1.idcfengye.com";
37
     public static final String OPENAPI_IP_PORT_HTTP = "http://huifang.vipgz1.idcfengye.com";
38
+    // public static final String OPENAPI_IP_PORT_HTTP = "192.168.10.200";
38
 
39
 
39
     /**
40
     /**
40
      * <p>操作用户UUID,即用户UUID,首次使用操作用户UUID可以通过接口 [获取默认用户UUID]来获取</p>
41
      * <p>操作用户UUID,即用户UUID,首次使用操作用户UUID可以通过接口 [获取默认用户UUID]来获取</p>

+ 235
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/common/welcome/OkHttpRequestUtils.java View File

1
+package com.community.huiju.common.welcome;
2
+
3
+import com.beust.jcommander.internal.Maps;
4
+import com.fasterxml.jackson.databind.util.ByteBufferBackedInputStream;
5
+import okhttp3.*;
6
+
7
+import java.io.*;
8
+import java.util.Iterator;
9
+import java.util.Map;
10
+
11
+/**
12
+ * 封装请求
13
+ * @author weiximei
14
+ */
15
+public class OkHttpRequestUtils {
16
+
17
+    // 定义请求客户端
18
+    private static OkHttpClient client = new OkHttpClient();
19
+
20
+    /**
21
+     * get 请求
22
+     * @param url 请求URL
23
+     * @return
24
+     * @throws Exception
25
+     */
26
+    public static String doGet(String url) throws Exception {
27
+       return doGet(url, Maps.newHashMap());
28
+    }
29
+
30
+
31
+    /**
32
+     * get 请求
33
+     * @param url 请求URL
34
+     * @param query 携带参数参数
35
+     * @return
36
+     * @throws Exception
37
+     */
38
+    public static String doGet(String url, Map<String, Object> query) throws Exception {
39
+
40
+        return doGet(url, Maps.newHashMap(), query);
41
+    }
42
+
43
+    /**
44
+     * get 请求
45
+     * @param url url
46
+     * @param header 请求头参数
47
+     * @param query 参数
48
+     * @return
49
+     */
50
+    public static String doGet(String url, Map<String, Object> header, Map<String, Object> query) throws Exception {
51
+
52
+        // 创建一个请求 Builder
53
+        Request.Builder builder = new Request.Builder();
54
+        // 创建一个 request
55
+        Request request = builder.url(url).build();
56
+
57
+        // 创建一个 HttpUrl.Builder
58
+        HttpUrl.Builder urlBuilder = request.url().newBuilder();
59
+        // 创建一个 Headers.Builder
60
+        Headers.Builder headerBuilder = request.headers().newBuilder();
61
+
62
+        // 装载请求头参数
63
+        Iterator<Map.Entry<String, Object>> headerIterator = header.entrySet().iterator();
64
+        headerIterator.forEachRemaining(e -> {
65
+            headerBuilder.add(e.getKey(), (String) e.getValue());
66
+        });
67
+
68
+        // 装载请求的参数
69
+        Iterator<Map.Entry<String, Object>> queryIterator = query.entrySet().iterator();
70
+        queryIterator.forEachRemaining(e -> {
71
+            urlBuilder.addQueryParameter(e.getKey(), (String) e.getValue());
72
+        });
73
+
74
+        // 设置自定义的 builder
75
+        builder.url(urlBuilder.build()).headers(headerBuilder.build());
76
+
77
+        try (Response execute = client.newCall(builder.build()).execute()) {
78
+            return execute.body().string();
79
+        }
80
+    }
81
+
82
+    /**
83
+     * post 请求, 请求参数 并且 携带文件上传
84
+     * @param url
85
+     * @param header
86
+     * @param parameter
87
+     * @param file
88
+     * @return
89
+     * @throws Exception
90
+     */
91
+    public static String doPost(String url, Map<String, Object> header, Map<String, Object> parameter, File file) throws Exception {
92
+
93
+        // 创建一个请求 Builder
94
+        Request.Builder builder = new Request.Builder();
95
+        // 创建一个 request
96
+        Request request = builder.url(url).build();
97
+
98
+        // 创建一个 Headers.Builder
99
+        Headers.Builder headerBuilder = request.headers().newBuilder();
100
+
101
+        // 装载请求头参数
102
+        Iterator<Map.Entry<String, Object>> headerIterator = header.entrySet().iterator();
103
+        headerIterator.forEachRemaining(e -> {
104
+            headerBuilder.add(e.getKey(), (String) e.getValue());
105
+        });
106
+
107
+        MultipartBody.Builder requestBuilder = new MultipartBody.Builder();
108
+
109
+        // 状态请求参数
110
+        Iterator<Map.Entry<String, Object>> queryIterator = parameter.entrySet().iterator();
111
+        queryIterator.forEachRemaining(e -> {
112
+            requestBuilder.addFormDataPart(e.getKey(), (String) e.getValue());
113
+        });
114
+
115
+        if (null != file) {
116
+            // application/octet-stream
117
+            requestBuilder.addFormDataPart("uploadFiles", file.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file));
118
+        }
119
+
120
+        // 设置自定义的 builder
121
+        builder.headers(headerBuilder.build()).post(requestBuilder.build());
122
+
123
+        try (Response execute = client.newCall(builder.build()).execute()) {
124
+            return execute.body().string();
125
+        }
126
+    }
127
+
128
+    /**
129
+     * post 请求, 请求参数 并且 携带文件上传二进制流
130
+     * @param url
131
+     * @param header
132
+     * @param parameter
133
+     * @param fileName 文件名
134
+     * @param fileByte 文件的二进制流
135
+     * @return
136
+     * @throws Exception
137
+     */
138
+    public static String doPost(String url, Map<String, Object> header, Map<String, Object> parameter, String fileName, byte [] fileByte) throws Exception {
139
+// 创建一个请求 Builder
140
+        Request.Builder builder = new Request.Builder();
141
+        // 创建一个 request
142
+        Request request = builder.url(url).build();
143
+
144
+        // 创建一个 Headers.Builder
145
+        Headers.Builder headerBuilder = request.headers().newBuilder();
146
+
147
+        // 装载请求头参数
148
+        Iterator<Map.Entry<String, Object>> headerIterator = header.entrySet().iterator();
149
+        headerIterator.forEachRemaining(e -> {
150
+            headerBuilder.add(e.getKey(), (String) e.getValue());
151
+        });
152
+
153
+        MultipartBody.Builder requestBuilder = new MultipartBody.Builder();
154
+
155
+        // 状态请求参数
156
+        Iterator<Map.Entry<String, Object>> queryIterator = parameter.entrySet().iterator();
157
+        queryIterator.forEachRemaining(e -> {
158
+            requestBuilder.addFormDataPart(e.getKey(), (String) e.getValue());
159
+        });
160
+
161
+        if (fileByte.length > 0) {
162
+            // application/octet-stream
163
+            requestBuilder.addFormDataPart("uploadFiles", fileName, RequestBody.create(MediaType.parse("application/octet-stream"), fileByte));
164
+        }
165
+
166
+        // 设置自定义的 builder
167
+        builder.headers(headerBuilder.build()).post(requestBuilder.build());
168
+
169
+        try (Response execute = client.newCall(builder.build()).execute()) {
170
+            return execute.body().string();
171
+        }
172
+    }
173
+
174
+
175
+    /**
176
+     * post 请求  携带文件上传
177
+     * @param url
178
+     * @param file
179
+     * @return
180
+     * @throws Exception
181
+     */
182
+    public static String doPost(String url, File file) throws Exception {
183
+        return doPost(url, Maps.newHashMap(), Maps.newHashMap(), file);
184
+    }
185
+
186
+    /**
187
+     * post 请求
188
+     * @param url
189
+     * @param header 请求头
190
+     * @param parameter 参数
191
+     * @return
192
+     * @throws Exception
193
+     */
194
+    public static String doPost(String url, Map<String, Object> header, Map<String, Object> parameter) throws Exception {
195
+        return doPost(url, header, parameter, null);
196
+    }
197
+
198
+    /**
199
+     * post 请求
200
+     * @param url
201
+     * @param parameter 参数
202
+     * @return
203
+     * @throws Exception
204
+     */
205
+    public static String doPost(String url, Map<String, Object> parameter) throws Exception {
206
+        return doPost(url, Maps.newHashMap(), parameter, null);
207
+    }
208
+
209
+    public static void main(String[] args) throws Exception {
210
+
211
+        byte [] fileByte = null;
212
+
213
+        File file = new File("C:\\Users\\szc\\Pictures\\file-read-4182.jpg");
214
+        FileInputStream fileInputStream = new FileInputStream(file);
215
+
216
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
217
+        byte[] b = new byte[1024];
218
+        int n;
219
+        while ((n = fileInputStream.read(b)) != -1)
220
+        {
221
+            bos.write(b, 0, n);
222
+        }
223
+        fileInputStream.close();
224
+        bos.close();
225
+        fileByte = bos.toByteArray();
226
+
227
+
228
+        Map<String, Object> queryMap = Maps.newHashMap();
229
+        queryMap.put("pageNum","2");
230
+        queryMap.put("pageSize","50");
231
+        System.out.println(OkHttpRequestUtils.doPost("http://localhost:8080/uploadImage" , Maps.newHashMap(), Maps.newHashMap(),file.getName(), fileByte));
232
+
233
+    }
234
+
235
+}

+ 26
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/common/welcome/WelcomeProperties.java View File

1
+package com.community.huiju.common.welcome;
2
+
3
+import lombok.AllArgsConstructor;
4
+import lombok.Data;
5
+import lombok.NoArgsConstructor;
6
+import org.springframework.boot.context.properties.ConfigurationProperties;
7
+import org.springframework.stereotype.Component;
8
+
9
+/**
10
+ * 迎宾系统配置
11
+ * @author weiximei
12
+ */
13
+@ConfigurationProperties(prefix = "welcome")
14
+@Component
15
+@Data
16
+@AllArgsConstructor
17
+@NoArgsConstructor
18
+public class WelcomeProperties {
19
+
20
+    /** 小区 **/
21
+    private Integer communityId;
22
+
23
+    /** 请求url **/
24
+    private String url;
25
+
26
+}

+ 17
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/controller/UserController.java View File

19
 import org.springframework.beans.factory.annotation.Autowired;
19
 import org.springframework.beans.factory.annotation.Autowired;
20
 import org.springframework.cloud.context.config.annotation.RefreshScope;
20
 import org.springframework.cloud.context.config.annotation.RefreshScope;
21
 import org.springframework.web.bind.annotation.*;
21
 import org.springframework.web.bind.annotation.*;
22
+import org.springframework.web.multipart.MultipartFile;
22
 
23
 
23
 import javax.servlet.http.HttpSession;
24
 import javax.servlet.http.HttpSession;
24
 import javax.xml.crypto.dsig.keyinfo.PGPData;
25
 import javax.xml.crypto.dsig.keyinfo.PGPData;
250
         userVO.setToken(session.getId());
251
         userVO.setToken(session.getId());
251
         return responseBean;
252
         return responseBean;
252
     }
253
     }
254
+
255
+    @ApiOperation(value = "迎宾系统添加人员", notes = "迎宾系统添加人员")
256
+    @ApiImplicitParams({
257
+            @ApiImplicitParam(paramType = "form", dataTypeClass = String.class, value = "userName人员名称"),
258
+            @ApiImplicitParam(paramType = "form", dataTypeClass = MultipartFile.class, name = "file", value = "图片"),
259
+            @ApiImplicitParam(paramType = "path", dataTypeClass = String.class, name = "X-Auth-Token", value = "Token")
260
+    })
261
+    @RequestMapping(value = "/user/welcome/add", method = RequestMethod.POST)
262
+    public ResponseBean welcomeAddUser(@RequestParam("userName") String userName, @RequestParam("file") MultipartFile file, HttpSession session) {
263
+        ResponseBean responseBean = new ResponseBean();
264
+        UserElement userElement = (UserElement) session.getAttribute(Constant.APP_USER_SESSION);
265
+        TaUser user = new TaUser();
266
+        user.setUserName(userName);
267
+        responseBean = iTaUserService.welcomeFace(userElement, file, user);
268
+        return responseBean;
269
+    }
253
 }
270
 }

+ 3
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/FaceServiceI.java View File

2
 
2
 
3
 
3
 
4
 import com.community.commom.mode.ResponseBean;
4
 import com.community.commom.mode.ResponseBean;
5
+import com.community.commom.session.UserElement;
6
+import com.community.huiju.model.TaUser;
5
 import org.springframework.web.multipart.MultipartFile;
7
 import org.springframework.web.multipart.MultipartFile;
6
 
8
 
7
 public interface FaceServiceI {
9
 public interface FaceServiceI {
29
      * @return
31
      * @return
30
      */
32
      */
31
     ResponseBean getTaFaceByUserId(Integer userId,Integer otherUserId);
33
     ResponseBean getTaFaceByUserId(Integer userId,Integer otherUserId);
34
+
32
 }
35
 }

+ 11
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/ITaUserService.java View File

1
 package com.community.huiju.service;
1
 package com.community.huiju.service;
2
 
2
 
3
 import com.community.commom.mode.ResponseBean;
3
 import com.community.commom.mode.ResponseBean;
4
+import com.community.commom.session.UserElement;
4
 import com.community.huiju.model.TaUser;
5
 import com.community.huiju.model.TaUser;
6
+import org.springframework.web.multipart.MultipartFile;
5
 
7
 
6
 import java.util.List;
8
 import java.util.List;
7
 
9
 
113
      */
115
      */
114
     ResponseBean temporaryLogin(Integer communityId);
116
     ResponseBean temporaryLogin(Integer communityId);
115
 
117
 
118
+    /**
119
+     * 迎宾专用 接口
120
+     * @param userElement
121
+     * @param uploadFile
122
+     * @param user
123
+     * @return
124
+     */
125
+    ResponseBean welcomeFace(UserElement userElement, MultipartFile uploadFile, TaUser user);
126
+
116
 }
127
 }

+ 4
- 4
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/FaceServicelimpl.java View File

3
 import com.community.commom.ailiyun.AESDecode;
3
 import com.community.commom.ailiyun.AESDecode;
4
 import com.community.commom.constant.Constant;
4
 import com.community.commom.constant.Constant;
5
 import com.community.commom.mode.ResponseBean;
5
 import com.community.commom.mode.ResponseBean;
6
+import com.community.commom.session.UserElement;
6
 import com.community.huiju.common.hk.HKOpenApi;
7
 import com.community.huiju.common.hk.HKOpenApi;
7
 import com.community.huiju.dao.TaFaceMapper;
8
 import com.community.huiju.dao.TaFaceMapper;
8
 import com.community.huiju.dao.TaSysRoleMapper;
9
 import com.community.huiju.dao.TaSysRoleMapper;
44
     @Transactional(rollbackFor = Exception.class)
45
     @Transactional(rollbackFor = Exception.class)
45
     public ResponseBean addFace(Integer userid, MultipartFile uploadFile,Integer otherUserId) {
46
     public ResponseBean addFace(Integer userid, MultipartFile uploadFile,Integer otherUserId) {
46
         ResponseBean responseBean= new ResponseBean();
47
         ResponseBean responseBean= new ResponseBean();
48
+
47
          String faceImg =img(uploadFile);
49
          String faceImg =img(uploadFile);
48
         /**当otherUserId不为空时判断它是否是业主下的租客或者家属*/
50
         /**当otherUserId不为空时判断它是否是业主下的租客或者家属*/
49
         if (null!= otherUserId) {
51
         if (null!= otherUserId) {
65
             taFace.setUpdateDate(new Date());
67
             taFace.setUpdateDate(new Date());
66
 
68
 
67
         /*验证身份*/
69
         /*验证身份*/
68
-        responseBean=addVerify( activeUser,  uploadFile, otherUserId, faceImg, taFace) ;
70
+        responseBean=addVerify( activeUser,  uploadFile, faceImg, taFace) ;
69
         return responseBean;
71
         return responseBean;
70
     }
72
     }
71
 
73
 
218
     /**
220
     /**
219
      *各种身份校验
221
      *各种身份校验
220
      */
222
      */
221
-    public ResponseBean addVerify(Integer userid, MultipartFile uploadFile,Integer otherUserId,String faceImg,TaFace taFace) {
223
+    public ResponseBean addVerify(Integer userid, MultipartFile uploadFile,String faceImg,TaFace taFace) {
222
         ResponseBean response = new ResponseBean();
224
         ResponseBean response = new ResponseBean();
223
         TaSysRole sysRole = taSysRoleMapper.findRoleByUserId(userid);
225
         TaSysRole sysRole = taSysRoleMapper.findRoleByUserId(userid);
224
         TaUser taUser = taUserMapper.selectByPrimaryKey(userid);
226
         TaUser taUser = taUserMapper.selectByPrimaryKey(userid);
265
         response.addError("您的信息已存在");
267
         response.addError("您的信息已存在");
266
         return response;
268
         return response;
267
     }
269
     }
268
-
269
-
270
 }
270
 }
271
 
271
 
272
 
272
 

+ 65
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/TaUserServiceImpl.java View File

4
 import com.alibaba.fastjson.JSONObject;
4
 import com.alibaba.fastjson.JSONObject;
5
 import com.community.commom.constant.Constant;
5
 import com.community.commom.constant.Constant;
6
 import com.community.commom.mode.ResponseBean;
6
 import com.community.commom.mode.ResponseBean;
7
+import com.community.commom.session.UserElement;
7
 import com.community.commom.utils.AccountValidatorUtil;
8
 import com.community.commom.utils.AccountValidatorUtil;
8
 import com.community.commom.utils.BeanTools;
9
 import com.community.commom.utils.BeanTools;
9
 import com.community.commom.utils.MD5Utils;
10
 import com.community.commom.utils.MD5Utils;
11
 import com.community.huiju.common.code.cache.AppkeyCache;
12
 import com.community.huiju.common.code.cache.AppkeyCache;
12
 import com.community.huiju.common.hk.HKConstant;
13
 import com.community.huiju.common.hk.HKConstant;
13
 import com.community.huiju.common.hk.HKOpenApi;
14
 import com.community.huiju.common.hk.HKOpenApi;
15
+import com.community.huiju.common.welcome.OkHttpRequestUtils;
16
+import com.community.huiju.common.welcome.WelcomeProperties;
14
 import com.community.huiju.dao.*;
17
 import com.community.huiju.dao.*;
15
 import com.community.huiju.model.*;
18
 import com.community.huiju.model.*;
16
 import com.community.huiju.service.ITaUserService;
19
 import com.community.huiju.service.ITaUserService;
20
+import com.community.huiju.service.ImageServiceI;
17
 import com.community.huiju.vo.TaUserVO;
21
 import com.community.huiju.vo.TaUserVO;
18
 import com.google.common.collect.Lists;
22
 import com.google.common.collect.Lists;
19
 import com.google.common.collect.Maps;
23
 import com.google.common.collect.Maps;
26
 import org.springframework.beans.factory.annotation.Autowired;
30
 import org.springframework.beans.factory.annotation.Autowired;
27
 import org.springframework.stereotype.Service;
31
 import org.springframework.stereotype.Service;
28
 import org.springframework.transaction.annotation.Transactional;
32
 import org.springframework.transaction.annotation.Transactional;
33
+import org.springframework.web.multipart.MultipartFile;
29
 
34
 
35
+import java.io.IOException;
30
 import java.text.ParseException;
36
 import java.text.ParseException;
31
 import java.text.SimpleDateFormat;
37
 import java.text.SimpleDateFormat;
32
 import java.time.LocalDate;
38
 import java.time.LocalDate;
47
 
53
 
48
     private IdGen idGen = IdGen.get();
54
     private IdGen idGen = IdGen.get();
49
 
55
 
56
+    @Autowired
57
+    private WelcomeProperties welcomeProperties;
58
+
50
     @Autowired
59
     @Autowired
51
     private TaUserMapper taUserMapper;
60
     private TaUserMapper taUserMapper;
52
 
61
 
71
     @Autowired
80
     @Autowired
72
     private TpBillInvoiceMapper tpBillInvoiceMapper;
81
     private TpBillInvoiceMapper tpBillInvoiceMapper;
73
 
82
 
83
+    @Autowired
84
+    private ImageServiceI imageService;
85
+
74
     @Transactional(rollbackFor = Exception.class)
86
     @Transactional(rollbackFor = Exception.class)
75
     @Override
87
     @Override
76
     @Deprecated
88
     @Deprecated
979
 
991
 
980
         return responseBean;
992
         return responseBean;
981
     }
993
     }
994
+
995
+    @Override
996
+    @Transactional(rollbackFor = Exception.class)
997
+    public ResponseBean welcomeFace(UserElement userElement, MultipartFile uploadFile, TaUser user) {
998
+        ResponseBean responseBean = new ResponseBean();
999
+
1000
+        user.setCommunityId(userElement.getCommunityId());
1001
+        user.setParentId(userElement.getId());
1002
+        user.setCreateDate(new Date());
1003
+        user.setCreateUser(userElement.getId());
1004
+        user.setCommunityId(userElement.getCommunityId());
1005
+
1006
+        int rows = taUserMapper.insertSelective(user);
1007
+        if (rows <= 0) {
1008
+            responseBean.addError("操作失败!");
1009
+            return responseBean;
1010
+        }
1011
+
1012
+        // 角色  2 表示租客
1013
+        addOrUpdateUserRole(2,responseBean,user,true);
1014
+
1015
+        // 开始推送 迎宾系统
1016
+
1017
+        Map<String, Object> parameterMap = Maps.newHashMap();
1018
+        parameterMap.put("userId", user.getId());
1019
+        parameterMap.put("username", user.getUserName());
1020
+        try {
1021
+            OkHttpRequestUtils.doPost(welcomeProperties.getUrl(), Maps.newHashMap(), parameterMap, uploadFile.getOriginalFilename(), uploadFile.getBytes());
1022
+        } catch (Exception e) {
1023
+            e.printStackTrace();
1024
+            log.error("推送 迎宾系统失败!", e);
1025
+        }
1026
+
1027
+        // 开始存储人脸的图片到本地库
1028
+        TaFace taFace = new TaFace();
1029
+        taFace.setCommunityId(user.getCommunityId());
1030
+        taFace.setCreateDate(new Date());
1031
+        taFace.setCreateUser(user.getId());
1032
+        taFace.setTaUserId(user.getId());
1033
+        taFace.setUpdateDate(new Date());
1034
+        taFace.setUpdateUser(user.getId());
1035
+        try {
1036
+            taFace.setFaceImg(imageService.getImageUrl(uploadFile));
1037
+        } catch (IOException e) {
1038
+            e.printStackTrace();
1039
+            log.error("迎宾系统 人脸图片上传阿里云失败!", e);
1040
+        }
1041
+
1042
+        taFaceMapper.insertSelective(taFace);
1043
+
1044
+        responseBean.addSuccess("操作成功!");
1045
+        return responseBean;
1046
+    }
982
 }
1047
 }

+ 7
- 1
CODE/smart-community/app-api/src/main/resources/application.yml View File

22
 alipay:
22
 alipay:
23
   APP_ID: 2019021463230548
23
   APP_ID: 2019021463230548
24
   APP_PRIVATE_KEY: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCkrvqeBeJNNeKByYSBq8U+V0STFBh70IGaHi2oPa3TiF6u2WAJ7YlH2h1S4Zj2Ezojckfl0m8y/nqpPay6gSMBOpR38A+94gNiH7BVfyecuuQ9z+2BJdOxN5RkEBBkUqeW4oUbrgY4mRLPRrUKvAu/4Brd0eojkkEW0hJUxqgKj+C4H5tR+6DRowHcO23Q/98+4qlSRjhygLVK4m+u8+zb26RxF4v0ogooF+EAZQLOqz3N4uaZs2ajgnecG0drtei7mxbpyqHMr0idP4U4Lx63yXViRNWpHQ7u7byOBQNV9MFHWPHKt+aNOqZ61LCXpJt777usQPzQJggZj6TpRtT3AgMBAAECggEAHM36Sf+PeJ/PMZJU2fV4d5H+DZe7PJTYxmM26zF2oQQ+Q2kEElh45Zdx/5g0D/6G8cJAbyNijdHTFJ0UBD8oJ0Peyie0KStKGjSevCWUgSZzW5ht22QJZfrpuqLQqyuF4q9WRuQmdGnZz2V3rxv7FiGVsWzQ/k3LkrlFuYxRwh7lpJvHC/ed5o1NI4t+w0lBNp3qonJJ8QYsAGWoJR8iP/XrupErrTivRHkyzEos1DsDdPb5TPV21D+YO7FlqTb6/nqqJH6IOjxMI/PlWGRS3l12TeHqv8W2PWIrZvcTGBqMOiHKGt9Y2ZAIelKBGv+lr2G4yaSnWSXec+6V4x3sWQKBgQDv9r26pbBoEtwGd55zAXTr+0A4jwfgUtVm0Z2b/WG857k+iR5hdLX6PHinbgD7sFpRAhoWGNLPa88ZjPDD0JyFwVMEN176k6zEyrBSbbyoCYJeYbWikebdKdiKNE/WFqZGS3Olm3pdHxwD2Q92H61XHLveWRHmYGAlTi66txPh6wKBgQCvsFr8CUt4Y8RU0RGvBLG7JRpRIaVKF34r6YsHZhpAluQ1WAqJEezmYMTfLi81UNYUZHaw7SyG1O+WiEMpWH0Y+qV/z6OUn+37lll7RsIpy9EGLY4L51emCClBmcUIGp80sA2rfF4U8dc23lwIHpLSUWoKOlcQO4gqzLICTLwKJQKBgGjlCvrUAtD7rYKGN5U+RcYCBoiyvVap3u8bIjJWCKty/97+QXGIeyPv2y4VQAjFhjVzHcQbBcv17InWukheoI03fPqS2cnfU96SW5EstxMdVQe83pE6BhkXebiwNVX4gKapxNvXox2hw7VK5R9VqYgy30zK0rBJ4L1t969W6DIRAoGALGSzmNwAZftPsN7jSQY2osNNUxLdYUtuZkotB0GVgJygLZqBjwEoi04IcRyKcT5r2dtI4owLpEZKBA+KaPgjJByxlQoym2uOBvSGx8+pYEZQGu+H5Rof26RUSG9Cijmv4PBbg+l5HHG/n+2v851GHD7WPJ9hQIjKb4YptMsO+MECgYEAyD8rx2Vk2smh5chVkkiw1QMSoV91B+dJ8+B/G0Moxy9Hzp/s4O8mG4B2ByCkcRgkbMTJmNndk5MTd0gjX4C4C3FKf2vbdqFuCKAPzJ0rTs/rLcjz2/g8I7BMvVd/sEh77iewsVLvSLhF2ZRxD9Mc2qfffU4hq8F4WIyLVgvizFU=
24
   APP_PRIVATE_KEY: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCkrvqeBeJNNeKByYSBq8U+V0STFBh70IGaHi2oPa3TiF6u2WAJ7YlH2h1S4Zj2Ezojckfl0m8y/nqpPay6gSMBOpR38A+94gNiH7BVfyecuuQ9z+2BJdOxN5RkEBBkUqeW4oUbrgY4mRLPRrUKvAu/4Brd0eojkkEW0hJUxqgKj+C4H5tR+6DRowHcO23Q/98+4qlSRjhygLVK4m+u8+zb26RxF4v0ogooF+EAZQLOqz3N4uaZs2ajgnecG0drtei7mxbpyqHMr0idP4U4Lx63yXViRNWpHQ7u7byOBQNV9MFHWPHKt+aNOqZ61LCXpJt777usQPzQJggZj6TpRtT3AgMBAAECggEAHM36Sf+PeJ/PMZJU2fV4d5H+DZe7PJTYxmM26zF2oQQ+Q2kEElh45Zdx/5g0D/6G8cJAbyNijdHTFJ0UBD8oJ0Peyie0KStKGjSevCWUgSZzW5ht22QJZfrpuqLQqyuF4q9WRuQmdGnZz2V3rxv7FiGVsWzQ/k3LkrlFuYxRwh7lpJvHC/ed5o1NI4t+w0lBNp3qonJJ8QYsAGWoJR8iP/XrupErrTivRHkyzEos1DsDdPb5TPV21D+YO7FlqTb6/nqqJH6IOjxMI/PlWGRS3l12TeHqv8W2PWIrZvcTGBqMOiHKGt9Y2ZAIelKBGv+lr2G4yaSnWSXec+6V4x3sWQKBgQDv9r26pbBoEtwGd55zAXTr+0A4jwfgUtVm0Z2b/WG857k+iR5hdLX6PHinbgD7sFpRAhoWGNLPa88ZjPDD0JyFwVMEN176k6zEyrBSbbyoCYJeYbWikebdKdiKNE/WFqZGS3Olm3pdHxwD2Q92H61XHLveWRHmYGAlTi66txPh6wKBgQCvsFr8CUt4Y8RU0RGvBLG7JRpRIaVKF34r6YsHZhpAluQ1WAqJEezmYMTfLi81UNYUZHaw7SyG1O+WiEMpWH0Y+qV/z6OUn+37lll7RsIpy9EGLY4L51emCClBmcUIGp80sA2rfF4U8dc23lwIHpLSUWoKOlcQO4gqzLICTLwKJQKBgGjlCvrUAtD7rYKGN5U+RcYCBoiyvVap3u8bIjJWCKty/97+QXGIeyPv2y4VQAjFhjVzHcQbBcv17InWukheoI03fPqS2cnfU96SW5EstxMdVQe83pE6BhkXebiwNVX4gKapxNvXox2hw7VK5R9VqYgy30zK0rBJ4L1t969W6DIRAoGALGSzmNwAZftPsN7jSQY2osNNUxLdYUtuZkotB0GVgJygLZqBjwEoi04IcRyKcT5r2dtI4owLpEZKBA+KaPgjJByxlQoym2uOBvSGx8+pYEZQGu+H5Rof26RUSG9Cijmv4PBbg+l5HHG/n+2v851GHD7WPJ9hQIjKb4YptMsO+MECgYEAyD8rx2Vk2smh5chVkkiw1QMSoV91B+dJ8+B/G0Moxy9Hzp/s4O8mG4B2ByCkcRgkbMTJmNndk5MTd0gjX4C4C3FKf2vbdqFuCKAPzJ0rTs/rLcjz2/g8I7BMvVd/sEh77iewsVLvSLhF2ZRxD9Mc2qfffU4hq8F4WIyLVgvizFU=
25
-  ALIPAY_PUBLIC_KEY: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnJtkEz+TiJR/KbLDeP0rKQTSrQO7g8sGU0G0RYIN3KF6CiWd+eaT/ioM0BpR1Jx+IuAdpo3DFBqhLA6ABSHXFZPRikcxNlsyz2JgkwzfsRY+DxcPnYYNZFK7pUbku8L/AIxZiFQcbunwz36acazaZpun0zgrQlcBZqBCTCIgkT2fMQbPTm/MrmUKjDTE0VP+1mFyjYUVZWpJEYE5AJ3+x7jAPmuEdSMwKONUtOOTByDrkmXJ60RGE8zCmO/oUmOGxnTQRYfNjvBZ0lbVdP/bAw6qHVFBElzPHjNerbMK/geLuiLs3vkDY9tw7A4GQYMnjKuoetuMUhxZ6nRTH6NCeQIDAQAB
25
+  ALIPAY_PUBLIC_KEY: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnJtkEz+TiJR/KbLDeP0rKQTSrQO7g8sGU0G0RYIN3KF6CiWd+eaT/ioM0BpR1Jx+IuAdpo3DFBqhLA6ABSHXFZPRikcxNlsyz2JgkwzfsRY+DxcPnYYNZFK7pUbku8L/AIxZiFQcbunwz36acazaZpun0zgrQlcBZqBCTCIgkT2fMQbPTm/MrmUKjDTE0VP+1mFyjYUVZWpJEYE5AJ3+x7jAPmuEdSMwKONUtOOTByDrkmXJ60RGE8zCmO/oUmOGxnTQRYfNjvBZ0lbVdP/bAw6qHVFBElzPHjNerbMK/geLuiLs3vkDY9tw7A4GQYMnjKuoetuMUhxZ6nRTH6NCeQIDAQAB
26
+
27
+# 迎宾系统
28
+welcome:
29
+  communityId: 83
30
+  url: http://xxxxxxxx
31
+