Sfoglia il codice sorgente

Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Arbitrate-Backend into hjb

hejinbo 2 anni fa
parent
commit
ae2c8fe59f

+ 3
- 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java Vedi File

@@ -55,7 +55,10 @@ public class SysLoginController {
55 55
         IdentityAuthentication identityAuthentication=new IdentityAuthentication();
56 56
         identityAuthentication.setUserName(loginBody.getUsername());
57 57
         String status = identityAuthenticationService.checkIsAuthentication(identityAuthentication);
58
+
58 59
         ajax.put("certificationStatus", status);
60
+        ajax.put("userId", SecurityUtils.getUserId());
61
+        ajax.put("userName", SecurityUtils.getUsername());
59 62
         return ajax;
60 63
     }
61 64
 

+ 25
- 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/wisdomarbitrate/CaseApplicationController.java Vedi File

@@ -12,6 +12,7 @@ import com.ruoyi.common.exception.EsignDemoException;
12 12
 import com.ruoyi.common.exception.ServiceException;
13 13
 import com.ruoyi.common.utils.WxAppletNotifyUtils;
14 14
 import com.ruoyi.wisdomarbitrate.domain.*;
15
+import com.ruoyi.wisdomarbitrate.domain.vo.ReservedConferenceVO;
15 16
 import com.ruoyi.wisdomarbitrate.domain.vo.SendRoomNoMessageVO;
16 17
 import com.ruoyi.wisdomarbitrate.domain.vo.ToDoCount;
17 18
 import com.ruoyi.wisdomarbitrate.service.ICaseApplicationService;
@@ -349,5 +350,29 @@ public class CaseApplicationController extends BaseController {
349 350
         List<SmsSendRecord> list = caseApplicationService.getSmsSendRecord(smsSendRecord);
350 351
         return getDataTable(list);
351 352
     }
353
+    /**
354
+     * 获取userSign
355
+     * @param userId
356
+     * @return
357
+     */
358
+    @Anonymous
359
+    @GetMapping("/generateUserSign")
360
+    public AjaxResult generateUserSign(@RequestParam(required = true) String userId){
361
+        if(StrUtil.isEmpty(userId)){
362
+            error("参数校验失败");
363
+        }
364
+        return AjaxResult.success(caseApplicationService.generateUserSign(userId));
365
+    }
366
+    /**
367
+     * 预约会议
368
+     * @param reservedConferenceVO
369
+     * @return
370
+     */
371
+    @Anonymous
372
+    @PostMapping("/reservedConference")
373
+    public AjaxResult reservedConference(@Validated @RequestBody ReservedConferenceVO reservedConferenceVO) throws Exception {
374
+
375
+        return caseApplicationService.reservedConference(reservedConferenceVO);
376
+    }
352 377
 
353 378
 }

+ 7
- 1
ruoyi-admin/src/main/resources/application.yml Vedi File

@@ -172,4 +172,10 @@ identityAuthentication:
172 172
   credentialSecretId: AKID3xfHgroY4MQHvLXUXMwIQL1UjmbBX1Tv
173 173
   credentialSecretKey: INDrIXcT8YmomZBcsy0oNirnU0LTN4X7
174 174
   merchantId: 0NSJ2309281116194321
175
-  privateKeyHexDecodeinfo: 4c3b311bf7b98969994e85928e069574a1e95777f24d1c510679cc3c2f460faf
175
+  privateKeyHexDecodeinfo: 4c3b311bf7b98969994e85928e069574a1e95777f24d1c510679cc3c2f460faf
176
+# 腾讯云即时通信相关配置
177
+imConfig:
178
+  # sdkAppId
179
+  sdkAppId: 1600011167
180
+  # 密钥
181
+  secretKey: 17d136d9327576a247f991bdfed3a6d14cebc7d540a52245086829c3a1421a86

+ 5
- 0
ruoyi-system/pom.xml Vedi File

@@ -27,6 +27,11 @@
27 27
             <artifactId>pay</artifactId>
28 28
             <version>1.0.0-SNAPSHOT</version>
29 29
         </dependency>
30
+        <dependency>
31
+            <groupId>com.github.tencentyun</groupId>
32
+            <artifactId>tls-sig-api-v2</artifactId>
33
+            <version>1.2</version>
34
+        </dependency>
30 35
     </dependencies>
31 36
 
32 37
 </project>

+ 37
- 0
ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/domain/vo/ReservedConferenceVO.java Vedi File

@@ -0,0 +1,37 @@
1
+package com.ruoyi.wisdomarbitrate.domain.vo;
2
+
3
+import lombok.Data;
4
+
5
+import javax.validation.constraints.NotEmpty;
6
+import javax.validation.constraints.NotNull;
7
+
8
+/**
9
+ * @author wangqiong
10
+ * @description 预约会议
11
+ * @date 2023-11-08 11:05
12
+ */
13
+@Data
14
+public class ReservedConferenceVO {
15
+    /**
16
+     * 房主id
17
+     */
18
+    @NotEmpty(message = "房主id不能为空")
19
+    private String ownerId;
20
+    /**
21
+     * 房间号id
22
+     */
23
+    @NotEmpty(message = "房主id不能为空")
24
+    private String roomId;
25
+    /**
26
+     * 会议开始时间
27
+     */
28
+    @NotNull(message = "会议开始时间不能为空")
29
+    private Integer scheduleStartTime;
30
+    /**
31
+     * 会议结束时间
32
+     */
33
+    @NotNull(message = "会议结束时间不能为空")
34
+    private Integer scheduleEndTime;
35
+    @NotNull(message = "案件id不能为空")
36
+    private Long caseId;
37
+}

+ 16
- 0
ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/ICaseApplicationService.java Vedi File

@@ -3,6 +3,7 @@ package com.ruoyi.wisdomarbitrate.service;
3 3
 import com.ruoyi.common.core.domain.AjaxResult;
4 4
 import com.ruoyi.common.exception.EsignDemoException;
5 5
 import com.ruoyi.wisdomarbitrate.domain.*;
6
+import com.ruoyi.wisdomarbitrate.domain.vo.ReservedConferenceVO;
6 7
 import com.ruoyi.wisdomarbitrate.domain.vo.SendRoomNoMessageVO;
7 8
 import com.ruoyi.wisdomarbitrate.domain.vo.ToDoCount;
8 9
 import org.springframework.web.multipart.MultipartFile;
@@ -78,4 +79,19 @@ public interface ICaseApplicationService {
78 79
      * @return
79 80
      */
80 81
     List<SmsSendRecord> getSmsSendRecord(SmsSendRecord smsSendRecord);
82
+
83
+    /**
84
+     * 获取userSign
85
+     * @param userId
86
+     * @return
87
+     */
88
+    String generateUserSign(String userId);
89
+
90
+    /**
91
+     * 预约会议
92
+     * @param reservedConferenceVO
93
+     * @return
94
+     * @throws Exception
95
+     */
96
+     AjaxResult reservedConference(ReservedConferenceVO reservedConferenceVO) throws Exception;
81 97
 }

+ 82
- 72
ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/CaseApplicationServiceImpl.java Vedi File

@@ -3,8 +3,6 @@ package com.ruoyi.wisdomarbitrate.service.impl;
3 3
 
4 4
 import cn.hutool.core.collection.CollectionUtil;
5 5
 import cn.hutool.core.util.StrUtil;
6
-
7
-
8 6
 import com.alibaba.fastjson.JSONArray;
9 7
 import com.alibaba.fastjson.JSONObject;
10 8
 import com.google.gson.Gson;
@@ -12,10 +10,8 @@ import com.google.gson.JsonArray;
12 10
 import com.google.gson.JsonObject;
13 11
 import com.ruoyi.common.annotation.DataScope;
14 12
 import com.ruoyi.common.constant.CaseApplicationConstants;
15
-import com.ruoyi.common.constant.Constants;
16 13
 import com.ruoyi.common.core.domain.AjaxResult;
17 14
 import com.ruoyi.common.core.domain.entity.*;
18
-
19 15
 import com.ruoyi.common.core.domain.model.LoginUser;
20 16
 import com.ruoyi.common.exception.EsignDemoException;
21 17
 import com.ruoyi.common.exception.ServiceException;
@@ -26,6 +22,7 @@ import com.ruoyi.system.domain.SysUserRole;
26 22
 import com.ruoyi.system.mapper.SysRoleMapper;
27 23
 import com.ruoyi.system.mapper.SysUserMapper;
28 24
 import com.ruoyi.system.mapper.SysUserRoleMapper;
25
+import com.ruoyi.wisdomarbitrate.domain.vo.ReservedConferenceVO;
29 26
 import com.ruoyi.wisdomarbitrate.domain.vo.ToDoCount;
30 27
 import com.ruoyi.wisdomarbitrate.utils.CaseLogUtils;
31 28
 import com.ruoyi.system.mapper.SysDeptMapper;
@@ -35,12 +32,19 @@ import com.ruoyi.wisdomarbitrate.mapper.*;
35 32
 import com.ruoyi.wisdomarbitrate.service.ICaseApplicationService;
36 33
 import com.ruoyi.wisdomarbitrate.utils.SignAward;
37 34
 import com.ruoyi.wisdomarbitrate.utils.UnZipFileUtils;
35
+import com.tencentyun.TLSSigAPIv2;
36
+import org.apache.http.HttpEntity;
37
+import org.apache.http.client.methods.CloseableHttpResponse;
38
+import org.apache.http.client.methods.HttpPost;
39
+import org.apache.http.entity.StringEntity;
40
+import org.apache.http.impl.client.CloseableHttpClient;
41
+import org.apache.http.impl.client.HttpClients;
42
+import org.apache.http.util.EntityUtils;
38 43
 import org.springframework.beans.factory.annotation.Autowired;
44
+import org.springframework.beans.factory.annotation.Value;
39 45
 import org.springframework.stereotype.Service;
40 46
 import org.springframework.transaction.annotation.Transactional;
41
-import org.springframework.web.bind.annotation.RequestParam;
42 47
 import org.springframework.web.multipart.MultipartFile;
43
-
44 48
 import java.io.*;
45 49
 import java.math.BigDecimal;
46 50
 import java.math.RoundingMode;
@@ -51,6 +55,7 @@ import java.text.SimpleDateFormat;
51 55
 import java.time.LocalDate;
52 56
 import java.time.ZoneId;
53 57
 import java.util.*;
58
+import java.util.concurrent.ThreadLocalRandom;
54 59
 import java.util.regex.Pattern;
55 60
 import java.util.stream.Collectors;
56 61
 
@@ -61,6 +66,12 @@ import static com.ruoyi.common.utils.SecurityUtils.getUsername;
61 66
 
62 67
 @Service
63 68
 public class CaseApplicationServiceImpl implements ICaseApplicationService {
69
+    // 腾讯云即时通信sdkAppId
70
+    @Value("${imConfig.sdkAppId}")
71
+    private long sdkAppId;
72
+    // 腾讯云即时通信密钥
73
+    @Value("${imConfig.secretKey}")
74
+    private String secretKey;
64 75
     @Autowired
65 76
     private CaseApplicationMapper caseApplicationMapper;
66 77
 
@@ -2436,74 +2447,73 @@ public class CaseApplicationServiceImpl implements ICaseApplicationService {
2436 2447
     }
2437 2448
 
2438 2449
 
2439
-//    @Transactional
2440
-//    public void fixExecuteSelectFlowDetailUtils() throws EsignDemoException {
2441
-//
2442
-//        Gson gson = new Gson();
2443
-//
2444
-//        SealSignRecord sealSignRecordselect = new SealSignRecord();
2445
-//        sealSignRecordselect.setSignFlowStatus(1);
2446
-//
2447
-//        List<SealSignRecord> sealSignRecords = sealSignRecordMapper.selectSealSignRecord(sealSignRecordselect);
2448
-//        if(sealSignRecords!=null&&sealSignRecords.size()>0){
2449
-//            for (int i = 0; i < sealSignRecords.size(); i++) {
2450
-//                SealSignRecord sealSignRecord = sealSignRecords.get(i);
2451
-//                EsignHttpResponse signFlowDetail = SignAward.signFlowDetail(sealSignRecord);
2452
-//                JsonObject signFlowDetailJsonObject = gson.fromJson(signFlowDetail.getBody(),JsonObject.class);
2453
-//                JsonObject flowDetailData = signFlowDetailJsonObject.getAsJsonObject("data");
2454
-//                JsonArray signersArray = flowDetailData.get("signers").getAsJsonArray();
2455
-//                for (int j = 0; j < signersArray.size(); j++) {
2456
-//                    JsonObject signerObject = (JsonObject)signersArray.get(j);
2457
-//                    Integer psnsignStatus ;
2458
-//                    Integer orgsignStatus ;
2459
-//                    if(!(signerObject.get("psnSigner").toString()).equals("null")){
2460
-//                        JsonObject psnSignerData = signerObject.getAsJsonObject("psnSigner");
2461
-//                        if(psnSignerData!=null){
2462
-//                            psnsignStatus = signerObject.get("signStatus").getAsInt();
2463
-//                            sealSignRecord.setPsnsignStatus(psnsignStatus);
2464
-//
2465
-//                            if(psnsignStatus.intValue()==2){
2466
-//                                //更新立案申请状态为待用印
2467
-//                                CaseApplication caseApplication = new CaseApplication();
2468
-//                                caseApplication.setCaseStatus(CaseApplicationConstants.ARBITRATED_SEAL);
2469
-//                                caseApplicationMapper.submitCaseApplication(caseApplication);
2470
-//
2471
-//                                //修改"签署用印记录表"的状态为待用印
2472
-//                                sealSignRecord.setSignFlowStatus(2);
2473
-//                                sealSignRecordMapper.updataSealSignRecord(sealSignRecord);
2474
-//
2475
-//                            }
2476
-//                        }
2477
-//                    }
2478
-//                    if(!(signerObject.get("orgSigner").toString()).equals("null")){
2479
-//                        JsonObject orgSignerData = signerObject.getAsJsonObject("orgSigner");
2480
-//                        if(orgSignerData!=null){
2481
-//                            orgsignStatus = signerObject.get("signStatus").getAsInt();
2482
-//                            sealSignRecord.setOrgsignStatus(orgsignStatus);
2483
-//                            //更新立案申请状态为待送达
2484
-//                            CaseApplication caseApplication = new CaseApplication();
2485
-//                            caseApplication.setCaseStatus(CaseApplicationConstants.ARBITRATION_DELIVERY);
2486
-//                            caseApplicationMapper.submitCaseApplication(caseApplication);
2487
-//
2488
-//                            //修改"签署用印记录表"的状态为签署完成
2489
-//                            sealSignRecord.setSignFlowStatus(3);
2490
-//                            sealSignRecordMapper.updataSealSignRecord(sealSignRecord);
2491
-//
2492
-//                            //下载审核完成的裁决书,
2493
-////                    SaaSAPIFileUtils.fileDownloadUrl();
2494
-//
2495
-//                        }
2496
-//
2497
-//                    }
2498
-//
2499
-//                }
2500
-//
2501
-//            }
2502
-//
2503
-//        }
2450
+    /**
2451
+     * 获取userSign,默认过期时间10小时
2452
+     * @param userId
2453
+     * @return
2454
+     */
2455
+    public String generateUserSign(String userId){
2456
+        TLSSigAPIv2 tlsSigAPIv2 = new TLSSigAPIv2(sdkAppId, secretKey);
2457
+        return tlsSigAPIv2.genUserSig(userId, 60 * 60 * 10);
2458
+    }
2504 2459
 
2505 2460
 
2506
-//    }
2461
+    /**
2462
+     * 预约会议
2463
+     * @param reservedConferenceVO
2464
+     * @return
2465
+     * @throws Exception
2466
+     */
2467
+    @Transactional
2468
+    @Override
2469
+    public AjaxResult reservedConference(ReservedConferenceVO reservedConferenceVO) throws Exception {
2470
+        // 生成administrator的userSig
2471
+        String administrator = "administrator";
2472
+        String userSign = generateUserSign(administrator);
2473
+        if (StrUtil.isEmpty(userSign)) {
2474
+            return AjaxResult.error("生成userSign失败");
2475
+        }
2476
+        int random = ThreadLocalRandom.current().nextInt(0, 214748364);
2477
+        String url="https://roomkit.trtc.tencent-cloud.com/room_api/v1/roomctl/create?usersig=" + userSign + "&identifier=" + administrator + "&sdkappid=" + sdkAppId + "&random=" +random + "&contenttype=json";
2478
+        HttpPost post = new HttpPost(url);
2479
+        String result = "";
2480
+
2481
+
2482
+        //添加参数
2483
+        JSONObject bodyParams = new JSONObject();
2484
+        bodyParams.put("ownerId", reservedConferenceVO.getOwnerId());
2485
+        bodyParams.put("roomId", reservedConferenceVO.getRoomId());
2486
+        bodyParams.put("scheduleStartTime", reservedConferenceVO.getScheduleStartTime());
2487
+        bodyParams.put("scheduleEndTime", reservedConferenceVO.getScheduleEndTime());
2488
+        StringEntity postingString = new StringEntity(bodyParams.toString());
2489
+        post.setEntity(postingString);
2490
+        CloseableHttpClient client = HttpClients.createDefault();
2491
+        //启动执行请求,并获得返回值
2492
+        CloseableHttpResponse response = client.execute(post);
2493
+        //得到返回的entity对象
2494
+        HttpEntity entity = response.getEntity();
2495
+        //把实体对象转换为string
2496
+        result = EntityUtils.toString(entity, "UTF-8");
2497
+        if (StrUtil.isNotEmpty(result)) {
2498
+            JSONObject resJson = JSONObject.parseObject(result);
2499
+            if ((int) resJson.get("errorCode") == 0 ) {
2500
+                // 绑定房间号和案件id
2501
+                caseApplicationMapper.bindCaseId(reservedConferenceVO.getCaseId(),reservedConferenceVO.getRoomId());
2502
+                return AjaxResult.success("预约会议成功");
2503
+            } else if((int) resJson.get("errorCode") == 42003){
2504
+                return AjaxResult.error("请求频繁");
2505
+            }else if((int) resJson.get("errorCode") == 84005){
2506
+                return AjaxResult.error("房间号已被占用");
2507
+            }else {
2508
+                return AjaxResult.error("预约会议失败");
2509
+            }
2510
+
2511
+        }else {
2512
+            return AjaxResult.error("预约会议失败");
2513
+        }
2514
+    }
2507 2515
 
2508 2516
 
2509 2517
 }
2518
+
2519
+

+ 0
- 18
ruoyi-system/src/main/java/com/ruoyi/wisdomarbitrate/service/impl/WeChatUserServiceImpl.java Vedi File

@@ -1,34 +1,23 @@
1 1
 package com.ruoyi.wisdomarbitrate.service.impl;
2 2
 
3 3
 import cn.hutool.core.util.StrUtil;
4
-import cn.hutool.http.HttpUtil;
5
-import cn.hutool.json.JSONUtil;
6
-import com.alibaba.fastjson2.JSONArray;
7
-import com.alibaba.fastjson2.JSONObject;
8 4
 import com.ruoyi.common.constant.CacheConstants;
9 5
 import com.ruoyi.common.core.domain.AjaxResult;
10
-import com.ruoyi.common.core.domain.entity.SysDictData;
11 6
 import com.ruoyi.common.core.domain.entity.SysUser;
12
-import com.ruoyi.common.core.domain.model.LoginUser;
13 7
 import com.ruoyi.common.core.redis.RedisCache;
14 8
 import com.ruoyi.common.utils.SecurityUtils;
15 9
 import com.ruoyi.common.utils.SmsUtils;
16 10
 import com.ruoyi.common.utils.StringUtils;
17
-import com.ruoyi.common.utils.http.HttpUtils;
18 11
 import com.ruoyi.common.utils.spring.SpringUtils;
19 12
 import com.ruoyi.system.mapper.SysUserMapper;
20 13
 import com.ruoyi.wisdomarbitrate.domain.IdentityAuthentication;
21 14
 import com.ruoyi.wisdomarbitrate.domain.vo.WeChatUserVO;
22 15
 import com.ruoyi.wisdomarbitrate.mapper.IdentityAuthenticationMapper;
23
-import com.ruoyi.wisdomarbitrate.mapper.WeChatUserMapper;
24 16
 import com.ruoyi.wisdomarbitrate.service.WeChatUserService;
25 17
 import lombok.extern.slf4j.Slf4j;
26 18
 import org.springframework.beans.factory.annotation.Autowired;
27 19
 import org.springframework.stereotype.Service;
28 20
 import org.springframework.transaction.annotation.Transactional;
29
-
30
-import java.util.HashMap;
31
-import java.util.List;
32 21
 import java.util.Random;
33 22
 import java.util.concurrent.TimeUnit;
34 23
 
@@ -40,13 +29,6 @@ import java.util.concurrent.TimeUnit;
40 29
 @Service
41 30
 @Slf4j
42 31
 public class WeChatUserServiceImpl implements WeChatUserService {
43
-    String appid="wx91cb8459dca561b4";//自行获取
44
-    //小程序secret
45
-    String secret="190aaa3bda96a65d25318fbb0e133fc6";//自己去公众号后台获取
46
-    // 获取openId
47
-    String openIdUrl = "https://api.weixin.qq.com/sns/jscode2session";
48
-    @Autowired
49
-    private WeChatUserMapper weChatUserMapper;
50 32
     @Autowired
51 33
     private SysUserMapper sysUserMapper;
52 34
     @Autowired