Browse Source

Merge remote-tracking branch 'origin/release_v5.0.6'

# Conflicts:
#	examcloud-exchange-api-provider/src/main/java/cn/com/qmth/examcloud/exchange/outer/api/provider/FaceOuterServiceProvider.java
deason 1 week ago
parent
commit
e59d0d1c59

+ 6 - 19
examcloud-exchange-api-provider/src/main/java/cn/com/qmth/examcloud/exchange/inner/api/provider/SmsCloudServiceProvider.java

@@ -18,8 +18,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
 
 /**
  * 短信发送
@@ -36,35 +34,24 @@ public class SmsCloudServiceProvider extends ControllerSupport implements SmsClo
     @Override
     @RequestMapping(method = RequestMethod.POST, value = "sendSms")
     public SendSmsResp sendSms(@RequestBody @Valid @ApiParam(required = true) SendSmsReq req) {
-
-        String smsAssemblyCode = req.getSmsAssemblyCode();
-        List<String> phoneList = req.getPhoneList();
-        Map<String, String> params = req.getParams();
-
-        smsService.sendSms(smsAssemblyCode, phoneList, params);
-
-        SendSmsResp resp = new SendSmsResp();
-        return resp;
+        smsService.sendSms(req.getSmsAssemblyCode(), req.getPhoneList(), req.getParams());
+        return new SendSmsResp();
     }
 
     @Override
     @WithoutStackTrace
     @RequestMapping(method = RequestMethod.POST, value = "sendSmsCode")
-    public SendSmsCodeResp sendSmsCode(
-            @RequestBody @Valid @ApiParam(required = true) SendSmsCodeReq req) {
+    public SendSmsCodeResp sendSmsCode(@RequestBody @Valid @ApiParam(required = true) SendSmsCodeReq req) {
         smsService.sendSmsCode(req.getPhone(), req.getCode());
-        SendSmsCodeResp sendSmsResp = new SendSmsCodeResp();
-        return sendSmsResp;
+        return new SendSmsCodeResp();
     }
 
     @Override
     @WithoutStackTrace
     @RequestMapping(method = RequestMethod.POST, value = "checkSmsCode")
-    public CheckSmsCodeResp checkSmsCode(
-            @RequestBody @Valid @ApiParam(required = true) CheckSmsCodeReq req) {
+    public CheckSmsCodeResp checkSmsCode(@RequestBody @Valid @ApiParam(required = true) CheckSmsCodeReq req) {
         smsService.validateSmsCode(req.getPhone(), req.getCode());
-        CheckSmsCodeResp resp = new CheckSmsCodeResp();
-        return resp;
+        return new CheckSmsCodeResp();
     }
 
 }

+ 43 - 8
examcloud-exchange-api-provider/src/main/java/cn/com/qmth/examcloud/exchange/outer/api/provider/FaceOuterServiceProvider.java

@@ -4,6 +4,10 @@ import cn.com.qmth.examcloud.api.commons.EnterpriseService;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.util.HttpClientUtil;
 import cn.com.qmth.examcloud.commons.util.ZipUtil;
+import cn.com.qmth.examcloud.core.basic.api.StudentCloudService;
+import cn.com.qmth.examcloud.core.basic.api.bean.StudentBean;
+import cn.com.qmth.examcloud.core.basic.api.request.GetStudentReq;
+import cn.com.qmth.examcloud.core.basic.api.response.GetStudentResp;
 import cn.com.qmth.examcloud.exchange.outer.service.FaceService;
 import cn.com.qmth.examcloud.support.util.IdUtil;
 import cn.com.qmth.examcloud.web.config.SystemProperties;
@@ -15,8 +19,10 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -33,17 +39,15 @@ import java.util.Map;
  *
  * @author WANGWEI
  * @date 2018年11月14日
- * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
  */
 @Api(tags = "学生照片相关接口")
 @RestController
 @RequestMapping("${$rmp.cloud.exchange.outer}/face")
 public class FaceOuterServiceProvider extends ControllerSupport implements EnterpriseService {
 
-    private static final long serialVersionUID = -6268268043341270752L;
+    private static final Logger log = LoggerFactory.getLogger(FaceOuterServiceProvider.class);
 
-    @Autowired
-    private SystemProperties systemConfig;
+    private static final long serialVersionUID = -6268268043341270752L;
 
     /**
      * ZIP最大50M
@@ -55,9 +59,40 @@ public class FaceOuterServiceProvider extends ControllerSupport implements Enter
      */
     private static final int MAX_SIZE = 500;
 
+    @Autowired
+    private SystemProperties systemConfig;
+
     @Autowired
     private FaceService faceService;
 
+    @Autowired
+    private StudentCloudService studentCloudService;
+
+    @ApiOperation(value = "获取学生照片URL", hidden = true)
+    @PostMapping("getPhotoUrl")
+    public String getPhotoUrl(
+            @RequestParam(required = false) @ApiParam(value = "顶级机构ID", example = "123") Long rootOrgId,
+            @RequestParam(required = false) @ApiParam(value = "学生证件号") String identityNumber,
+            @RequestParam(required = false) @ApiParam(value = "学号") String studentCode) {
+        if (rootOrgId == null) {
+            throw new StatusException("参数rootOrgId的值不能为空!");
+        }
+        if (StringUtils.isBlank(identityNumber) && StringUtils.isBlank(studentCode)) {
+            throw new StatusException("参数identityNumber和studentCode的值不能同时为空,至少传一个值!");
+        }
+        if (!getEnterpriseRootOrgId().equals(rootOrgId)) {
+            throw new StatusException("1000001", "参数rootOrgId的值无效!");
+        }
+
+        GetStudentReq req = new GetStudentReq();
+        req.setRootOrgId(rootOrgId);
+        req.setIdentityNumber(identityNumber);
+        req.setStudentCode(studentCode);
+        GetStudentResp resp = studentCloudService.getStudent(req);
+        StudentBean student = resp.getStudentInfo();
+        return student.getPhotoPath();
+    }
+
     @ApiOperation(value = "保存学生照片(图片URL)")
     @PostMapping("addPhotoByUrl")
     public void addPhotoByUrl(
@@ -97,9 +132,9 @@ public class FaceOuterServiceProvider extends ControllerSupport implements Enter
     @ApiOperation(value = "保存学生照片(图片文件)")
     @PostMapping("addPhoto")
     public void addPhoto(@RequestParam @ApiParam(value = "顶级机构ID", example = "123", required = true) Long rootOrgId,
-            @RequestParam @ApiParam(value = "学生证件号", required = true) String identityNumber,
-            @RequestParam @ApiParam(value = "操作者", required = true) String operator,
-            @RequestParam @ApiParam(value = "学生照片文件(文件名称=证件号+图片后缀)", required = true) CommonsMultipartFile file) {
+                         @RequestParam @ApiParam(value = "学生证件号", required = true) String identityNumber,
+                         @RequestParam @ApiParam(value = "操作者", required = true) String operator,
+                         @RequestParam @ApiParam(value = "学生照片文件(文件名称=证件号+图片后缀)", required = true) CommonsMultipartFile file) {
 
         if (!getEnterpriseRootOrgId().equals(rootOrgId)) {
             throw new StatusException("1000001", "rootOrgId is wrong");

+ 0 - 5
examcloud-exchange-service/src/main/java/cn/com/qmth/examcloud/exchange/inner/service/SmsService.java

@@ -5,11 +5,6 @@ import java.util.Map;
 
 public interface SmsService {
 
-    /**
-     * 验证码配置代码
-     */
-    String YZM_SMS_ASSEMBLY_CODE = "YZM";
-
     /**
      * 发送短信
      *

+ 9 - 76
examcloud-exchange-service/src/main/java/cn/com/qmth/examcloud/exchange/inner/service/impl/SmsServiceImpl.java

@@ -2,26 +2,16 @@ package cn.com.qmth.examcloud.exchange.inner.service.impl;
 
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.util.DateUtil;
-import cn.com.qmth.examcloud.commons.util.JsonUtil;
 import cn.com.qmth.examcloud.commons.util.UUID;
 import cn.com.qmth.examcloud.exchange.inner.service.SmsService;
 import cn.com.qmth.examcloud.exchange.inner.service.bean.ShortMessageInfo;
 import cn.com.qmth.examcloud.support.CacheConstants;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
 import cn.com.qmth.examcloud.support.cache.bean.SmsAssemblyCacheBean;
+import cn.com.qmth.examcloud.support.sms.SmsHelper;
 import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
-import com.aliyuncs.CommonRequest;
-import com.aliyuncs.CommonResponse;
-import com.aliyuncs.DefaultAcsClient;
-import com.aliyuncs.IAcsClient;
-import com.aliyuncs.http.MethodType;
-import com.aliyuncs.http.ProtocolType;
-import com.aliyuncs.profile.DefaultProfile;
 import com.google.common.collect.Maps;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import org.apache.tomcat.util.buf.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,40 +23,35 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * {@link StatusException} 状态码范围:101XXX<br>
- * <p>
- * 阿里云短信服务
+ * 短信发送
  *
  * @author WANGWEI
  * @date 2019年3月27日
- * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
  */
 @Service
 public class SmsServiceImpl implements SmsService {
 
-    @Autowired
-    RedisClient redisClient;
+    private static final Logger log = LoggerFactory.getLogger(SmsServiceImpl.class);
 
-    private static final Logger LOG = LoggerFactory.getLogger(SmsServiceImpl.class);
+    @Autowired
+    private RedisClient redisClient;
 
     @Override
-    public void sendSms(String smsAssemblyCode, List<String> phoneList,
-                        Map<String, String> params) {
+    public void sendSms(String smsAssemblyCode, List<String> phoneList, Map<String, String> params) {
         SmsAssemblyCacheBean smsAssembly = CacheHelper.getSmsAssembly(smsAssemblyCode);
         if (null == smsAssembly) {
             throw new StatusException("101040", "smsAssemblyCode is wrong");
         }
+
         boolean virtualEnable = PropertyHolder.getBoolean("sms.virtual.enable", false);
         if (!virtualEnable) {
-            execute(smsAssembly, "SendSms", phoneList, params);
+            SmsHelper.send(smsAssembly.getExt1(), smsAssembly.getExt2(), phoneList, params);
         }
     }
 
     @Override
     public void sendSmsCode(String phone, String code) {
-
         boolean virtualEnable = PropertyHolder.getBoolean("sms.smsCode.virtual.enable", false);
-
         if (virtualEnable) {
             return;
         }
@@ -82,7 +67,6 @@ public class SmsServiceImpl implements SmsService {
         }
 
         Date now = new Date();
-
         if (null == sm) {
             sm = new ShortMessageInfo();
             sm.setCreationTime(now);
@@ -107,7 +91,7 @@ public class SmsServiceImpl implements SmsService {
         }
         Map<String, String> params = Maps.newHashMap();
         params.put("code", code);
-        this.sendSms(YZM_SMS_ASSEMBLY_CODE, Arrays.asList(new String[]{phone}), params);
+        this.sendSms(SmsHelper.SMS_YZM, Arrays.asList(new String[]{phone}), params);
 
         sm.getSendTimeList().add(now);
         sm.setTimes(sm.getSendTimeList().size());
@@ -118,7 +102,6 @@ public class SmsServiceImpl implements SmsService {
 
     @Override
     public void validateSmsCode(String phone, String code) {
-
         boolean virtualEnable = PropertyHolder.getBoolean("sms.smsCode.virtual.enable", false);
 
         if (virtualEnable) {
@@ -150,56 +133,6 @@ public class SmsServiceImpl implements SmsService {
             sm.setLastMessage(UUID.randomUUID());
             redisClient.set(key, sm, 60 * 60 * 24);
         }
-
-    }
-
-    /**
-     * 执行
-     *
-     * @param smsAssembly
-     * @param action
-     * @param phoneList
-     * @param templateParams 短信模板参数
-     * @author WANGWEI
-     */
-    private void execute(SmsAssemblyCacheBean smsAssembly, String action, List<String> phoneList,
-                         Map<String, String> templateParams) {
-        String accessKeyId = PropertyHolder.getString("aliyun.sms.accessKeyId");
-        String accessSecret = PropertyHolder.getString("aliyun.sms.accessKeySecret");
-        String signName = smsAssembly.getExt1();
-        String templateCode = smsAssembly.getExt2();
-
-        DefaultProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessSecret);
-        IAcsClient client = new DefaultAcsClient(profile);
-
-        CommonRequest request = new CommonRequest();
-        request.setProtocol(ProtocolType.HTTPS);
-        request.setMethod(MethodType.POST);
-        request.setDomain("dysmsapi.aliyuncs.com");
-        request.setVersion("2017-05-25");
-        request.setAction(action);
-        String phoneNumbers = StringUtils.join(phoneList, ',');
-        request.putQueryParameter("PhoneNumbers", phoneNumbers);
-        request.putQueryParameter("SignName", signName);
-        request.putQueryParameter("TemplateCode", templateCode);
-        request.putQueryParameter("TemplateParam", JsonUtil.toJson(templateParams));
-        try {
-            CommonResponse response = client.getCommonResponse(request);
-            String data = response.getData();
-            JsonParser jp = new JsonParser();
-            JsonObject jsonObj = jp.parse(data).getAsJsonObject();
-            String code = jsonObj.get("Code").getAsString();
-
-            if (!code.equals("OK")) {
-                LOG.error("aliyun sms response: " + JsonUtil.toJson(response));
-                throw new StatusException("101001", "短信发送失败");
-            }
-
-        } catch (StatusException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new StatusException("101002", "短信发送失败", e);
-        }
     }
 
 }