Преглед на файлове

Merge branch 'master' of http://10.12.10.70:3000/CSS/simulation-cloud

zuoqingtong преди 2 години
родител
ревизия
a3132f7441

+ 7 - 0
api-common/pom.xml

@@ -17,9 +17,16 @@
         <jackson-core.version>2.13.1</jackson-core.version>
         <sshd-netty.version>2.8.0</sshd-netty.version>
         <dom4j.version>2.1.3</dom4j.version>
+        <tencentcloud-sdk-java.version>3.1.600</tencentcloud-sdk-java.version>
     </properties>
 
     <dependencies>
+        <!-- 腾讯云服务 -->
+        <dependency>
+            <groupId>com.tencentcloudapi</groupId>
+            <artifactId>tencentcloud-sdk-java</artifactId>
+            <version>${tencentcloud-sdk-java.version}</version>
+        </dependency>
 
         <!-- xml 处理库 -->
         <dependency>

+ 122 - 0
api-common/src/main/java/api/common/util/TencentSMSUtil.java

@@ -0,0 +1,122 @@
+package api.common.util;
+
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.sms.v20210111.SmsClient;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
+import lombok.SneakyThrows;
+
+
+/**
+ * <!-- 腾讯云服务 -->
+ * <dependency>
+ * <groupId>com.tencentcloudapi</groupId>
+ * <artifactId>tencentcloud-sdk-java</artifactId>
+ * <version>${tencentcloud-sdk-java.version}</version>
+ * </dependency>
+ * 1. 登录腾讯云账号
+ * 2. 进入控制台
+ * 3. 云产品搜索短信
+ * 4. 创建正文模板
+ */
+public class TencentSMSUtil {
+
+    @SneakyThrows
+    public static void send(String secretId, String secretKey, String sdkAppId, String signName, String templateId, String[] templateParamSet, String[] phoneNumberSet) {
+        /* 必要步骤:
+         * 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
+         * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
+         * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
+         * 以免泄露密钥对危及你的财产安全。
+         * SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
+        Credential cred = new Credential(secretId, secretKey);
+        // 实例化一个http选项,可选,没有特殊需求可以跳过
+        HttpProfile httpProfile = new HttpProfile();
+        // 设置代理(无需要直接忽略)
+        // httpProfile.setProxyHost("真实代理ip");
+        // httpProfile.setProxyPort(真实代理端口);
+        /* SDK默认使用POST方法。
+         * 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
+        httpProfile.setReqMethod("POST");
+        /* SDK有默认的超时时间,非必要请不要进行调整
+         * 如有需要请在代码中查阅以获取最新的默认值 */
+        httpProfile.setConnTimeout(60);
+        /* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com */
+        httpProfile.setEndpoint("sms.tencentcloudapi.com");
+
+        /* 非必要步骤:
+         * 实例化一个客户端配置对象,可以指定超时时间等配置 */
+        ClientProfile clientProfile = new ClientProfile();
+        /* SDK默认用TC3-HMAC-SHA256进行签名
+         * 非必要请不要修改这个字段 */
+        clientProfile.setSignMethod("HmacSHA256");
+        clientProfile.setHttpProfile(httpProfile);
+        /* 实例化要请求产品(以sms为例)的client对象
+         * 第二个参数是地域信息,可以直接填写字符串ap-beijing,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
+        SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
+        /* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
+         * 你可以直接查询SDK源码确定接口有哪些属性可以设置
+         * 属性可能是基本类型,也可能引用了另一个数据结构
+         * 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */
+        SendSmsRequest req = new SendSmsRequest();
+
+        /* 填充请求参数,这里request对象的成员变量即对应接口的入参
+         * 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
+         * 基本类型的设置:
+         * 帮助链接:
+         * 短信控制台: https://console.cloud.tencent.com/smsv2
+         * 腾讯云短信小助手: https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81 */
+
+        /* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
+        // 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
+        req.setSmsSdkAppId(sdkAppId);
+
+        /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
+        // 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
+        req.setSignName(signName);
+
+        /* 模板 ID: 必须填写已审核通过的模板 ID */
+        // 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
+        req.setTemplateId(templateId);
+
+        /* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
+        req.setTemplateParamSet(templateParamSet);
+
+        /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
+         * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号 */
+        req.setPhoneNumberSet(phoneNumberSet);
+
+        /* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
+        String sessionContext = "";
+        req.setSessionContext(sessionContext);
+
+        /* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
+        String extendCode = "";
+        req.setExtendCode(extendCode);
+
+        /* 国际/港澳台短信 SenderId(无需要可忽略): 国内短信填空,默认未开通,如需开通请联系 [腾讯云短信小助手] */
+        String senderid = "";
+        req.setSenderId(senderid);
+
+        /* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
+         * 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
+        SendSmsResponse res = client.SendSms(req);
+
+        // 输出json格式的字符串回包
+        System.out.println(SendSmsResponse.toJsonString(res));
+
+        // 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
+        // System.out.println(res.getRequestId());
+
+        /* 当出现以下错误码时,快速解决方案参考
+         * [FailedOperation.SignatureIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.signatureincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
+         * [FailedOperation.TemplateIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.templateincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
+         * [UnauthorizedOperation.SmsSdkAppIdVerifyFail](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunauthorizedoperation.smssdkappidverifyfail-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
+         * [UnsupportedOperation.ContainDomesticAndInternationalPhoneNumber](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunsupportedoperation.containdomesticandinternationalphonenumber-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
+         * 更多错误,可咨询[腾讯云助手](https://tccc.qcloud.com/web/im/index.html#/chat?webAppId=8fa15978f85cb41f7e2ea36920cb3ae1&title=Sms)
+         */
+    }
+
+}

+ 17 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/configuration/sms/SmsConfiguration.java

@@ -0,0 +1,17 @@
+package com.css.simulation.resource.configuration.sms;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConfigurationProperties(prefix = "sms")
+@Data
+public class SmsConfiguration {
+    private String secretId;
+    private String secretKey;
+    private String sdkAppId;
+    private String signName;
+    private String templateIdForReset;
+    private String templateIdForCreate;
+}

+ 5 - 4
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -3493,17 +3493,18 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             zos = new ZipOutputStream(response.getOutputStream());
             int i = 1;
 //            ArrayList<String> fileList = CollectionUtil.createArrayList("Ego.csv", "evaluation.csv");
-            for (ManualProjectTaskVo v : manualProjectTaskVos) {
-                String runResultFilePath = v.getRunResultFilePath();
+            for (ManualProjectTaskVo task : manualProjectTaskVos) {
+                String taskId = task.getId();
+                String runResultFilePath = task.getRunResultFilePath();
                 if (!isEmpty(runResultFilePath)) {
 
                     //获取场景名
-                    SceneBaseInfoVo sceneBaseInfoVo = getSceneNameAndOther(v.getSceneId(), v.getSceneType());
+                    SceneBaseInfoVo sceneBaseInfoVo = getSceneNameAndOther(task.getSceneId(), task.getSceneType());
                     String sceneName = sceneBaseInfoVo.getCommonSceneName();
 
                     //任务包路径
 //                    String taskPagePath = rootPath + File.separator + sceneName + "(" + i + ")";
-                    String taskPagePath = rootPath + File.separator + sceneName;
+                    String taskPagePath = rootPath + File.separator + sceneName + "- " + taskId.substring(0, 8);
 
                     //视频文件路径
                     MinioParameter minioParameter1 = new MinioParameter();

+ 5 - 5
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/ScenePackageController.java

@@ -12,9 +12,9 @@ import com.css.simulation.resource.scene.service.ScenePackageService;
 import com.css.simulation.resource.system.service.ParameterService;
 import com.github.pagehelper.PageInfo;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -28,13 +28,13 @@ public class ScenePackageController {
 
     @Resource
     ScenePackageService scenePackageService;
-    @Autowired
+    @Resource
     ParameterService parameterService;
 
     //查询主表列表
     @PostMapping("/queryScenePackageList")
     @ResponseBody
-    public ResponseBodyVO<List<ScenePackageVO>> queryScenePackageList(@RequestBody ScenePackageParam parms) {
+    public ResponseBodyVO<PageInfo<ScenePackageVO>> queryScenePackageList(@RequestBody ScenePackageParam parms) {
         PageUtil.setPageInfo(parms);
         List<ScenePackagePO> list = scenePackageService.queryScenePackageList(parms);
         PageInfo<ScenePackagePO> objectPageInfo = new PageInfo<>(list);
@@ -44,9 +44,9 @@ public class ScenePackageController {
             BeanUtils.copyProperties(po, vo);
             list1.add(vo);
         }
-        PageInfo pageInfo = new PageInfo<>(list1);
+        PageInfo<ScenePackageVO> pageInfo = new PageInfo<>(list1);
         pageInfo.setTotal(objectPageInfo.getTotal());
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, pageInfo);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, pageInfo);
     }
 
 

+ 15 - 17
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/ScenePackageService.java

@@ -66,9 +66,9 @@ public class ScenePackageService {
         List<ScenePackageSublistPO> treeList = instShareListTree(listSublictTree, uuId, uuId, poList, "0", 1);
         //校验指标名称唯一
         if (treeList == null || treeList.size() < 1) {
-            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "指标数据为空,请检查");
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "指标数据为空,请检查");
         }
-        if (treeList != null && treeList.size() > 1) {
+        if (treeList.size() > 1) {
             Set set = new HashSet();
             Map map = new HashMap<>();
             for (ScenePackageSublistPO vo : treeList) {
@@ -80,13 +80,13 @@ public class ScenePackageService {
                 }
             }
             if (ObjectUtil.isNotNull(set)) {
-                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该条数据中指标名称:" + set + "重复,请检查");
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "该条数据中指标名称:" + set + "重复,请检查");
             }
         }
         scenePackageMapper.saveScenePackage(po);
         scenePackageSublistMapper.saveScenePackageSublistAll(treeList);
         LogUtil.insert();
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
     //查询测试包主表列表
@@ -95,8 +95,7 @@ public class ScenePackageService {
         if (params != null && params.getShare() != null && params.getShare().equals("0")) {
             params.setCreateUserId(AuthUtil.getCurrentUserId());
         }
-        List<ScenePackagePO> list = scenePackageMapper.queryScenePackageList(params);
-        return list;
+        return scenePackageMapper.queryScenePackageList(params);
     }
 
     //修改主表数据
@@ -128,9 +127,9 @@ public class ScenePackageService {
         List<ScenePackageSublistPO> poList = new ArrayList<>();
         List<ScenePackageSublistPO> treeList = instShareListTree(listSublictTree, po.getPackageId(), po.getPackageId(), poList, "0", 1);
         if (treeList == null || treeList.size() < 1) {
-            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "指标数据为空,请检查");
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "指标数据为空,请检查");
         }
-        if (treeList != null && treeList.size() > 1) {
+        if (treeList.size() > 1) {
             Set set = new HashSet();
             Map map = new HashMap<>();
             for (ScenePackageSublistPO vo : treeList) {
@@ -142,14 +141,14 @@ public class ScenePackageService {
                 }
             }
             if (ObjectUtil.isNotNull(set)) {
-                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该条数据中指标名称:" + set + "重复,请检查");
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "该条数据中指标名称:" + set + "重复,请检查");
             }
         }
         scenePackageMapper.updateScenePackage(po);
         scenePackageSublistMapper.deleteScenePackageSublist(po.getPackageId());
         scenePackageSublistMapper.saveScenePackageSublistAll(treeList);
         LogUtil.update();
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
     //删除测试包
@@ -183,15 +182,14 @@ public class ScenePackageService {
         root.setTreeNode(vo.getTreeNode());
         scenePackageSublistVOS.add(0, root);
         //list转tree
-        List<ScenePackageSublistVO> tree = listToTree(scenePackageSublistVOS);
-        return tree;
+        return listToTree(scenePackageSublistVOS);
     }
 
     /**
      * list转tree
      */
     public static List<ScenePackageSublistVO> listToTree(List<ScenePackageSublistVO> list) {
-        List<ScenePackageSublistVO> treeList = new ArrayList<ScenePackageSublistVO>();
+        List<ScenePackageSublistVO> treeList = new ArrayList<>();
         for (ScenePackageSublistVO vo : list) {
             if ("0".equals(vo.getParentId())) {
                 treeList.add(findChildren(vo, list));
@@ -207,7 +205,7 @@ public class ScenePackageService {
         for (ScenePackageSublistVO node : list) {
             if (vo.getId().equals(node.getParentId())) {
                 if (vo.getChildren() == null || vo.getChildren().size() == 0) {
-                    vo.setChildren(new ArrayList<ScenePackageSublistVO>());
+                    vo.setChildren(new ArrayList<>());
                 }
                 vo.getChildren().add(findChildren(node, list));
             }
@@ -261,7 +259,7 @@ public class ScenePackageService {
         po.setPackageName(scenePackagePO.getPackageName());
         List<ScenePackageNewVO> listName = scenePackageMapper.queryByPackageName(po);
         if (listName != null && listName.size() > 0) {
-            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "测试包名称:" + listName.get(0).getPackageName() + "的测试包已存在,请检查");
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "测试包名称:" + listName.get(0).getPackageName() + "的测试包已存在,请检查");
         }
         BeanUtils.copyProperties(scenePackagePO, po);
         po.setCreateTime(TimeUtil.getNowForMysql());
@@ -287,13 +285,13 @@ public class ScenePackageService {
                 }
             }
             if (ObjectUtil.isNotNull(set)) {
-                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该条数据中指标名称:" + set + "重复,请检查");
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "该条数据中指标名称:" + set + "重复,请检查");
             }
         }
         scenePackageMapper.saveScenePackage(po);
         scenePackageSublistMapper.saveScenePackageSublistAll(treeList);
         LogUtil.insert();
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
     /**

+ 14 - 17
simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/UserCtrl.java

@@ -39,20 +39,20 @@ public class UserCtrl {
      */
     @RequestMapping("/saveUser")
     @ResponseBody
-    public ResponseBodyVO<UserPO> saveUser(@RequestBody UserPO userPO) throws Exception {
+    public ResponseBodyVO<UserPO> saveUser(@RequestBody UserPO userPO) {
         if(ObjectUtil.isNull(userPO)){
-            return new ResponseBodyVO(false, 400, "参数必传!",null);
+            return new ResponseBodyVO<>(false, 400, "参数必传!",null);
         }
-        ResponseBodyVO<UserPO> response = new ResponseBodyVO<UserPO>(ResponseBodyVO.Response.SUCCESS);
+        ResponseBodyVO<UserPO> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         userPO = userService.saveUser(userPO);
         if(ObjectUtil.isNull(userPO)){
-            return new ResponseBodyVO(false, 400, "没有创建账户的权限!",null);
+            return new ResponseBodyVO<>(false, 400, "没有创建账户的权限!",null);
         }
         if("checkUsername".equals(userPO.getId())){
-            return new ResponseBodyVO(false, 400, "账户名重复!",null);
+            return new ResponseBodyVO<>(false, 400, "账户名重复!",null);
         }
         if("subUserNum".equals(userPO.getId())){
-            return new ResponseBodyVO(false, 400, "超出可创建子账户数量!",null);
+            return new ResponseBodyVO<>(false, 400, "超出可创建子账户数量!",null);
         }
         response.setInfo(userPO);
         return response;
@@ -63,15 +63,12 @@ public class UserCtrl {
      */
     @RequestMapping("/saveDefaultPassword")
     @ResponseBody
-    public ResponseBodyVO saveDefaultPassword(@RequestBody UserPO userPO) throws Exception {
-        if(ObjectUtil.isNull(userPO)){
-            return new ResponseBodyVO(false, 400, "参数必传!",null);
-        }
-        if(ObjectUtil.isNull(userPO.getId())){
-            return new ResponseBodyVO(false, 400, "参数必传!",null);
+    public ResponseBodyVO<String> saveDefaultPassword(@RequestBody UserPO userPO) {
+        if(ObjectUtil.isNull(userPO)||ObjectUtil.isNull(userPO.getId())){
+            return new ResponseBodyVO<>(false, 400, "参数必传!",null);
         }
         userService.saveDefaultPassword(userPO);
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
     /**
@@ -79,15 +76,15 @@ public class UserCtrl {
      */
     @RequestMapping("/saveVisible")
     @ResponseBody
-    public ResponseBodyVO saveVisible(@RequestBody UserPO userPO) throws Exception {
+    public ResponseBodyVO<String> saveVisible(@RequestBody UserPO userPO) throws Exception {
         if(ObjectUtil.isNull(userPO)){
-            return new ResponseBodyVO(false, 400, "参数必传!",null);
+            return new ResponseBodyVO<>(false, 400, "参数必传!",null);
         }
         if(ObjectUtil.isNull(userPO.getId()) || ObjectUtil.isNull(userPO.getVisible())){
-            return new ResponseBodyVO(false, 400, "参数必传!",null);
+            return new ResponseBodyVO<>(false, 400, "参数必传!",null);
         }
         userService.saveVisible(userPO);
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
 

+ 72 - 46
simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/UserService.java

@@ -9,16 +9,19 @@ import api.common.pojo.vo.system.UserVO;
 import api.common.util.EncryptUtil;
 import api.common.util.ObjectUtil;
 import api.common.util.StringUtil;
+import api.common.util.TencentSMSUtil;
 import com.css.simulation.resource.common.oauth.OauthParameter;
 import com.css.simulation.resource.common.utils.AuthUtil;
 import com.css.simulation.resource.common.utils.PageUtil;
 import com.css.simulation.resource.common.utils.PoUtil;
+import com.css.simulation.resource.configuration.sms.SmsConfiguration;
 import com.css.simulation.resource.log.service.LogService;
 import com.css.simulation.resource.system.mapper.UserMapper;
 import com.github.pagehelper.PageInfo;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.SneakyThrows;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Map;
@@ -27,20 +30,18 @@ import java.util.Map;
 @Service
 public class UserService {
 
-    @Autowired
+    @Resource
     UserMapper userMapper;
-
-    @Autowired
+    @Resource
     OauthParameter oauthParameter;
-
-    @Autowired
+    @Resource
     LogService logService;
-
-    @Autowired
+    @Resource
     DictService dictService;
-
-    @Autowired
+    @Resource
     ParameterService parameterService;
+    @Resource
+    SmsConfiguration smsConfiguration;
 
     public UserVO getCurrentUserInfo() {
         String userId = AuthUtil.getCurrentUserId();
@@ -54,106 +55,131 @@ public class UserService {
 
     public PageInfo<UserVO> getUserPageList(UserParam pageParam) {
         PageUtil.setPageInfo(pageParam);
-        List<UserVO> list = null;
+        List<UserVO> list;
         String currentUserRoleCode = AuthUtil.getCurrentUserRoleCode();
-        if(DictConstants.ROLE_CODE_SYSADMIN.equals(currentUserRoleCode)){//超级管理员
+        if (DictConstants.ROLE_CODE_SYSADMIN.equals(currentUserRoleCode)) {//超级管理员
             list = userMapper.getUserPageLista(pageParam);
-        }else if(DictConstants.ROLE_CODE_ADMIN.equals(currentUserRoleCode)){//子管理员
+        } else if (DictConstants.ROLE_CODE_ADMIN.equals(currentUserRoleCode)) {//子管理员
             list = userMapper.getUserPageListb(pageParam);
-        }else if(DictConstants.ROLE_CODE_UESR.equals(currentUserRoleCode)){//普通用户
+        } else if (DictConstants.ROLE_CODE_UESR.equals(currentUserRoleCode)) {//普通用户
             //只查询自己创建的子账户
             pageParam.setCreateUserId(AuthUtil.getCurrentUserId());
             list = userMapper.getUserPageListc(pageParam);
-        }else{
+        } else {
             return null;
         }
         //字典翻译
         Map<String, Map<String, String>> dictMaps = dictService.getDictMapsByTypes(DictConstants.ROLE_CODE);
-        list.forEach(po ->{
+        list.forEach(po -> {
             po.setRoleCode(dictMaps.get(DictConstants.ROLE_CODE).get(po.getRoleCode()));
         });
         return new PageInfo<>(list);
     }
 
-    public UserPO saveUser(UserPO userPO) throws NoSuchAlgorithmException {
+    @SneakyThrows
+    public UserPO saveUser(UserPO userPO) {
         //权限校验
         String currentUserRoleCode = AuthUtil.getCurrentUserRoleCode();
-        if(DictConstants.ROLE_CODE_SYSADMIN.equals(currentUserRoleCode)){//超级管理员
-            if(DictConstants.ROLE_CODE_ADMIN.equals(userPO.getRoleCode())){
+        if (DictConstants.ROLE_CODE_SYSADMIN.equals(currentUserRoleCode)) {// 超级管理员
+            if (DictConstants.ROLE_CODE_ADMIN.equals(userPO.getRoleCode())) {
                 userPO.setRoleCode(DictConstants.ROLE_CODE_ADMIN);
-            }else{
+            } else {
                 userPO.setRoleCode(DictConstants.ROLE_CODE_UESR);
             }
-        }else if(DictConstants.ROLE_CODE_ADMIN.equals(currentUserRoleCode)){//子管理员
+        } else if (DictConstants.ROLE_CODE_ADMIN.equals(currentUserRoleCode)) {// 子管理员
             userPO.setRoleCode(DictConstants.ROLE_CODE_UESR);
-        }else if(DictConstants.ROLE_CODE_UESR.equals(currentUserRoleCode)){//普通用户
+        } else if (DictConstants.ROLE_CODE_UESR.equals(currentUserRoleCode)) { //普通用户
             //新增参数校验
-            if(ObjectUtil.isNull(userPO.getId())){
+            if (ObjectUtil.isNull(userPO.getId())) {
                 ParameterVO parameter = parameterService.getParameterByUserId();
-                if(ObjectUtil.isNull(parameter)){
+                if (ObjectUtil.isNull(parameter)) {
                     return null;
                 }
-                int num = parameter.getNumCreateUser();//最大用户数
+                int num = parameter.getNumCreateUser(); // 最大用户数
                 int subUserNum = 0;
                 String userId = AuthUtil.getCurrentUserId();
                 List<UserPO> subUsers = userMapper.getSubUser(userId);
-                if(ObjectUtil.isNotNull(subUsers)){
+                if (ObjectUtil.isNotNull(subUsers)) {
                     subUserNum = subUsers.size();
                 }
-                if(subUserNum >= num ){
+                if (subUserNum >= num) {
                     userPO.setId("subUserNum");
                     return userPO;
                 }
             }
             userPO.setRoleCode(DictConstants.ROLE_CODE_SUBUESR);
-            //普通用户创建子账户时,占用类型继承
+            // 普通用户创建子账户时,占用类型继承
             userPO.setUseType(AuthUtil.getCurrentUseType());
-        }else{
+        } else {
             return null;
         }
         //重名校验
         List<UserPO> list = userMapper.checkUsername(userPO);
-        if(ObjectUtil.isNotNull(list)){
+        if (ObjectUtil.isNotNull(list)) {
             userPO.setId("checkUsername");
             return userPO;
         }
         PoUtil.initAddPo(userPO);
         String id = userPO.getId();
-        if(ObjectUtil.isNull(id)){//新增
+        if (ObjectUtil.isNull(id)) {//新增
             userPO.setId(StringUtil.getRandomUUID());
-            //初始密码
+            // 初始密码
             userPO.setPassword(EncryptUtil.getLowerMD5(oauthParameter.getSimulationDefaultPassword()));
             userPO.setVisible("1");
             userMapper.insert(userPO);
-            logService.logUser(LogConstants.SYS_LOG_USER_INSERT,userPO);
-        }else{
+            logService.logUser(LogConstants.SYS_LOG_USER_INSERT, userPO);
+
+            // 发送短信
+            TencentSMSUtil.send(
+                    smsConfiguration.getSecretId(),
+                    smsConfiguration.getSecretKey(),
+                    smsConfiguration.getSdkAppId(),
+                    smsConfiguration.getSignName(),
+                    smsConfiguration.getTemplateIdForCreate(),
+                    new String[]{},
+                    new String[]{userPO.getPhone()}
+            );
+
+        } else {
             userMapper.update(userPO);
-            logService.logUser(LogConstants.SYS_LOG_USER_UPDATE,userPO);
+            logService.logUser(LogConstants.SYS_LOG_USER_UPDATE, userPO);
         }
-        //密码清空
+        // 密码清空
         userPO.setPassword(null);
         return userPO;
     }
 
-    public void saveDefaultPassword(UserPO userPO) throws NoSuchAlgorithmException {
+    @SneakyThrows
+    public void saveDefaultPassword(UserPO userPO) {
         userPO.setPassword(EncryptUtil.getLowerMD5(oauthParameter.getSimulationDefaultPassword()));
         PoUtil.initUpdatePo(userPO);
         userMapper.saveDefaultPassword(userPO);
-        logService.logUser(LogConstants.SYS_LOG_USER_RESET,userPO);
+        logService.logUser(LogConstants.SYS_LOG_USER_RESET, userPO);
+
+        // 发送短信
+        TencentSMSUtil.send(
+                smsConfiguration.getSecretId(),
+                smsConfiguration.getSecretKey(),
+                smsConfiguration.getSdkAppId(),
+                smsConfiguration.getSignName(),
+                smsConfiguration.getTemplateIdForReset(),
+                new String[]{},
+                new String[]{userPO.getPhone()}
+        );
     }
 
     public void saveVisible(UserPO userPO) {
         PoUtil.initUpdatePo(userPO);
         userMapper.saveVisible(userPO);
-        if("1".equals(userPO.getVisible())){
-            logService.logUser(LogConstants.SYS_LOG_USER_START,userPO);
-        }else{//停用
+        if ("1".equals(userPO.getVisible())) {
+            logService.logUser(LogConstants.SYS_LOG_USER_START, userPO);
+        } else { // 停用
             UserVO userInfo = userMapper.getUserInfo(userPO.getId());
             String roleCode = userInfo.getRoleCode();
-            if(DictConstants.ROLE_CODE_UESR.equals(roleCode)){//停用普通用户时-停用子账户
+            if (DictConstants.ROLE_CODE_UESR.equals(roleCode)) {  // 停用普通用户时-停用子账户
                 List<UserPO> subUsers = userMapper.getSubUser(userPO.getId());
-                if(ObjectUtil.isNotNull(subUsers)){
-                    subUsers.forEach(po->{
+                if (ObjectUtil.isNotNull(subUsers)) {
+                    subUsers.forEach(po -> {
                         PoUtil.initUpdatePo(po);
                         po.setVisible("0");
                         userMapper.saveVisible(po);
@@ -161,7 +187,7 @@ public class UserService {
                 }
             }
             //只记录普通账户日志
-            logService.logUser(LogConstants.SYS_LOG_USER_STOP,userPO);
+            logService.logUser(LogConstants.SYS_LOG_USER_STOP, userPO);
         }
 
     }
@@ -175,7 +201,7 @@ public class UserService {
         //确认原密码是否正确
         userVO.setPassword(EncryptUtil.getLowerMD5(userVO.getPassword()));
         List<UserVO> list = userMapper.checkPassword(userVO);
-        if(ObjectUtil.isNull(list)){
+        if (ObjectUtil.isNull(list)) {
             return null;
         }
         //修改密码