Kaynağa Gözat

考生端登录界面图片

xiatian 3 yıl önce
ebeveyn
işleme
196dfaddbe

+ 81 - 0
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/OrgController.java

@@ -63,13 +63,18 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
+import javax.imageio.ImageIO;
 import javax.persistence.criteria.Predicate;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -1138,6 +1143,9 @@ public class OrgController extends ControllerSupport {
         if (!StringUtils.equals(prop.get("OE_STUDENT_SYS_NAME"), old.get("OE_STUDENT_SYS_NAME"))) {
             sb.append("系统名称,");
         }
+        if (!StringUtils.equals(prop.get("STUDENT_CLIENT_BG_PICTURE_URL"), old.get("STUDENT_CLIENT_BG_PICTURE_URL"))) {
+            sb.append("考生端登录页图片,");
+        }
         if (!StringUtils.equals(prop.get("LOGO_FILE_URL"), old.get("LOGO_FILE_URL"))) {
             sb.append("学校logo,");
         }
@@ -1361,6 +1369,79 @@ public class OrgController extends ControllerSupport {
         ReportsUtil.report(new AdminOperateReport(accessUser.getRootOrgId(), accessUser.getUserId(), "考生端配置-上传学校logo", null));
         return url;
     }
+    
+    private void checkPicSize(File image) throws FileNotFoundException, IOException {
+    	BufferedImage sourceImg =ImageIO.read(new FileInputStream(image));
+    	int w=sourceImg.getWidth();
+    	int h=sourceImg.getHeight();
+    	BigDecimal bw = new BigDecimal(w);
+    	BigDecimal bh = new BigDecimal(h);
+    	double ret = bw.divide(bh,1, BigDecimal.ROUND_HALF_UP).doubleValue();
+    	if(ret!=1.5) {
+    		throw new StatusException("图片宽高比例必须是3:2");
+    	}
+    	if(w<1200||w>2000) {
+    		throw new StatusException("图片宽度必须在1200px-2000px");
+    	}
+    }
+    
+    @ApiOperation(value = "导入考生端登录界面图片")
+    @PostMapping("importClientBgPicture/{orgId}")
+    @Transactional
+    public String importClientBgPicture(@PathVariable Long orgId, HttpServletRequest request,
+                             @RequestParam CommonsMultipartFile file) throws IOException {
+
+        OrgEntity orgEntity = GlobalHelper.getEntity(orgRepo, orgId, OrgEntity.class);
+        if (null == orgEntity) {
+            throw new StatusException("140002", "orgEntity is null");
+        }
+
+        validateRootOrgIsolation(orgEntity.getRootId());
+
+        DiskFileItem fileItem = (DiskFileItem) file.getFileItem();
+        File storeLocation = fileItem.getStoreLocation();
+        String name = file.getOriginalFilename();
+
+        if (1*1024*1024 < storeLocation.length()) {
+            throw new StatusException("140082", "文件过大");
+        }
+
+        String fileSuffix = null;
+        if (name.endsWith(".jpg")) {
+            fileSuffix = ".jpg";
+        } else if (name.endsWith(".jpeg")) {
+            fileSuffix = ".jpeg";
+        } else if (name.endsWith(".png")) {
+            fileSuffix = ".png";
+        } else {
+            throw new StatusException("101001", "文件格式错误");
+        }
+        checkPicSize(storeLocation);
+
+        DynamicEnumManager manager = OrgProperty.getDynamicEnumManager();
+        DynamicEnum logoFileUrl = manager.getByName("STUDENT_CLIENT_BG_PICTURE_URL");
+
+
+        //通用存储
+        FileStoragePathEnvInfo env = new FileStoragePathEnvInfo();
+        env.setFileSuffix(fileSuffix);
+        env.setRootOrgId(orgEntity.getRootId().toString());
+        YunPathInfo pi = FileStorageUtil.saveFile("client_bg_picture", env, storeLocation, null);
+        String url = pi.getUrl();
+
+        OrgPropertyEntity logoFileUrlEntity = orgPropertyRepo.findByOrgIdAndKeyId(orgId,
+                logoFileUrl.getId());
+        if (null == logoFileUrlEntity) {
+            logoFileUrlEntity = new OrgPropertyEntity();
+            logoFileUrlEntity.setKeyId(logoFileUrl.getId());
+            logoFileUrlEntity.setOrgId(orgId);
+        }
+        logoFileUrlEntity.setValue(url);
+        orgPropertyRepo.save(logoFileUrlEntity);
+        User accessUser = getAccessUser();
+        ReportsUtil.report(new AdminOperateReport(accessUser.getRootOrgId(), accessUser.getUserId(), "考生端配置-上传考生端登录界面图片", null));
+        return url;
+    }
 
     @ApiOperation(value = "导入离线考试答题纸", notes = "导入离线考试答题纸")
     @PostMapping("importAnswers/{orgId}")

+ 7 - 1
examcloud-core-basic-starter/src/main/resources/aliyun.xml

@@ -54,5 +54,11 @@
         <maxSize>10M</maxSize>
         <path>/sys_notice/org_${rootOrgId}${fileSuffix}</path>
     </site>
-
+    <site>
+        <id>client_bg_picture</id>
+        <name>考生端登录界面图片</name>
+        <aliyunId>1</aliyunId>
+        <maxSize>1M</maxSize>
+        <path>/client_bg_picture/${rootOrgId}/${timeMillis}${fileSuffix}</path>
+    </site>
 </sites>

+ 204 - 198
examcloud-core-basic-starter/src/main/resources/org-properties.xml

@@ -1,201 +1,207 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <enums>
-    <enum>
-        <id>0</id>
-        <name>ROOT_ORG_ID</name>
-        <desc>顶级机构ID</desc>
-        <valueType>LONG</valueType>
-    </enum>
-    <enum>
-        <id>1</id>
-        <name>LOGO_FILE</name>
-        <desc>机构图标文件(文件转字符串存储)</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>2</id>
-        <name>OE_STUDENT_SYS_NAME</name>
-        <desc>网考学生端系统名称</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>3</id>
-        <name>LOGO_FILE_SUFFIX</name>
-        <desc>机构图标文件后缀</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>4</id>
-        <name>LOGO_FILE_URL</name>
-        <desc>机构图标URL</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>5</id>
-        <name>LOGIN_TYPE</name>
-        <desc>登录方式</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>6</id>
-        <name>PREVENT_CHEATING_CONFIG</name>
-        <desc>防作弊配置</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>7</id>
-        <name>STUDENT_CLIENT_DEFAULT_SIZE</name>
-        <desc>考生端默认大小(长*宽)</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>8</id>
-        <name>STUDENT_CLIENT_CONSOLE_CONFIG</name>
-        <desc>控制台配置</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>9</id>
-        <name>STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY</name>
-        <desc>是否使用第三方登录</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>10</id>
-        <name>STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL</name>
-        <desc>第三方登录页地址</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>11</id>
-        <name>SHOW_QMTH_LOGO</name>
-        <desc>是否展示我司logo</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>12</id>
-        <name>SHOW_STUDENT_CLIENT_APP_QRCODE</name>
-        <desc>是否展示APP下载二维码</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>13</id>
-        <name>STUDENT_CODE_LOGIN_ALIAS</name>
-        <desc>学号登录别名</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>14</id>
-        <name>IDENTITY_NUMBER_LOGIN_ALIAS</name>
-        <desc>身份证号登录别名</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>15</id>
-        <name>APP_ENABLED</name>
-        <desc>开放APP</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>16</id>
-        <name>WEIXIN_ANSWER_ENABLED</name>
-        <desc>开放微信小程序作答</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>17</id>
-        <name>THIRD_PARTY_API_DEFAULT_EXAM_ID</name>
-        <desc>服务接口默认考试ID</desc>
-        <valueType>LONG</valueType>
-    </enum>
-    <enum>
-        <id>18</id>
-        <name>IDENTIFICATION_OF_LIVING_BODY_SCHEME</name>
-        <desc>活体检测方案</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>19</id>
-        <name>STUDENT_CLIENT_VERSION</name>
-        <desc>学生端版本</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>20</id>
-        <name>ID_NUMBER_PRIVATE_MODE</name>
-        <desc>证件号隐私模式</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>21</id>
-        <name>LOGIN_SUPPORT</name>
-        <desc>学生端登录支持</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>22</id>
-        <name>CUS_MENU_LOGO_FILE</name>
-        <desc>机构自定义菜单图标文件(文件转字符串存储)</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>23</id>
-        <name>CUS_MENU_LOGO_FILE_SUFFIX</name>
-        <desc>机构自定义菜单图标文件后缀</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>24</id>
-        <name>CUS_MENU_LOGO_FILE_URL</name>
-        <desc>机构自定义菜单图标URL</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>25</id>
-        <name>IS_CUSTOM_MENU_LOGO</name>
-        <desc>机构是否自定义菜单</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>26</id>
-        <name>ANSWERS_TEMPLATE</name>
-        <desc>机构答题纸模板</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>27</id>
-        <name>PC_CLIENT_ENABLED</name>
-        <desc>启用C端考生端</desc>
-        <valueType>BOOLEAN</valueType>
-    </enum>
-    <enum>
-        <id>28</id>
-        <name>ACTION_ALERT</name>
-        <desc>指定动作检测提醒N秒后开始检测</desc>
-        <valueType>LONG</valueType>
-    </enum>
-    <enum>
-        <id>29</id>
-        <name>ACTION_NUM</name>
-        <desc>动作个数</desc>
-        <valueType>LONG</valueType>
-    </enum>
-    <enum>
-        <id>30</id>
-        <name>ACTION_OPTIONS</name>
-        <desc>动作选项</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>31</id>
-        <name>ACTION_ORDER</name>
-        <desc>动作顺序</desc>
-        <valueType>STRING</valueType>
-    </enum>
-    <enum>
-        <id>32</id>
-        <name>ACTION_DURATION</name>
-        <desc>单个动作最大时长</desc>
-        <valueType>LONG</valueType>
-    </enum>
+	<enum>
+		<id>0</id>
+		<name>ROOT_ORG_ID</name>
+		<desc>顶级机构ID</desc>
+		<valueType>LONG</valueType>
+	</enum>
+	<enum>
+		<id>1</id>
+		<name>LOGO_FILE</name>
+		<desc>机构图标文件(文件转字符串存储)</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>2</id>
+		<name>OE_STUDENT_SYS_NAME</name>
+		<desc>网考学生端系统名称</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>3</id>
+		<name>LOGO_FILE_SUFFIX</name>
+		<desc>机构图标文件后缀</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>4</id>
+		<name>LOGO_FILE_URL</name>
+		<desc>机构图标URL</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>5</id>
+		<name>LOGIN_TYPE</name>
+		<desc>登录方式</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>6</id>
+		<name>PREVENT_CHEATING_CONFIG</name>
+		<desc>防作弊配置</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>7</id>
+		<name>STUDENT_CLIENT_DEFAULT_SIZE</name>
+		<desc>考生端默认大小(长*宽)</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>8</id>
+		<name>STUDENT_CLIENT_CONSOLE_CONFIG</name>
+		<desc>控制台配置</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>9</id>
+		<name>STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY</name>
+		<desc>是否使用第三方登录</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>10</id>
+		<name>STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL</name>
+		<desc>第三方登录页地址</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>11</id>
+		<name>SHOW_QMTH_LOGO</name>
+		<desc>是否展示我司logo</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>12</id>
+		<name>SHOW_STUDENT_CLIENT_APP_QRCODE</name>
+		<desc>是否展示APP下载二维码</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>13</id>
+		<name>STUDENT_CODE_LOGIN_ALIAS</name>
+		<desc>学号登录别名</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>14</id>
+		<name>IDENTITY_NUMBER_LOGIN_ALIAS</name>
+		<desc>身份证号登录别名</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>15</id>
+		<name>APP_ENABLED</name>
+		<desc>开放APP</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>16</id>
+		<name>WEIXIN_ANSWER_ENABLED</name>
+		<desc>开放微信小程序作答</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>17</id>
+		<name>THIRD_PARTY_API_DEFAULT_EXAM_ID</name>
+		<desc>服务接口默认考试ID</desc>
+		<valueType>LONG</valueType>
+	</enum>
+	<enum>
+		<id>18</id>
+		<name>IDENTIFICATION_OF_LIVING_BODY_SCHEME</name>
+		<desc>活体检测方案</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>19</id>
+		<name>STUDENT_CLIENT_VERSION</name>
+		<desc>学生端版本</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>20</id>
+		<name>ID_NUMBER_PRIVATE_MODE</name>
+		<desc>证件号隐私模式</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>21</id>
+		<name>LOGIN_SUPPORT</name>
+		<desc>学生端登录支持</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>22</id>
+		<name>CUS_MENU_LOGO_FILE</name>
+		<desc>机构自定义菜单图标文件(文件转字符串存储)</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>23</id>
+		<name>CUS_MENU_LOGO_FILE_SUFFIX</name>
+		<desc>机构自定义菜单图标文件后缀</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>24</id>
+		<name>CUS_MENU_LOGO_FILE_URL</name>
+		<desc>机构自定义菜单图标URL</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>25</id>
+		<name>IS_CUSTOM_MENU_LOGO</name>
+		<desc>机构是否自定义菜单</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>26</id>
+		<name>ANSWERS_TEMPLATE</name>
+		<desc>机构答题纸模板</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>27</id>
+		<name>PC_CLIENT_ENABLED</name>
+		<desc>启用C端考生端</desc>
+		<valueType>BOOLEAN</valueType>
+	</enum>
+	<enum>
+		<id>28</id>
+		<name>ACTION_ALERT</name>
+		<desc>指定动作检测提醒N秒后开始检测</desc>
+		<valueType>LONG</valueType>
+	</enum>
+	<enum>
+		<id>29</id>
+		<name>ACTION_NUM</name>
+		<desc>动作个数</desc>
+		<valueType>LONG</valueType>
+	</enum>
+	<enum>
+		<id>30</id>
+		<name>ACTION_OPTIONS</name>
+		<desc>动作选项</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>31</id>
+		<name>ACTION_ORDER</name>
+		<desc>动作顺序</desc>
+		<valueType>STRING</valueType>
+	</enum>
+	<enum>
+		<id>32</id>
+		<name>ACTION_DURATION</name>
+		<desc>单个动作最大时长</desc>
+		<valueType>LONG</valueType>
+	</enum>
+	<enum>
+		<id>33</id>
+		<name>STUDENT_CLIENT_BG_PICTURE_URL</name>
+		<desc>考生端登录页图片URL</desc>
+		<valueType>STRING</valueType>
+	</enum>
 </enums>