diff --git a/Doc/微信图片_20221212150334.jpg b/Doc/微信图片_20221212150334.jpg
new file mode 100644
index 0000000..8a1cbd4
Binary files /dev/null and b/Doc/微信图片_20221212150334.jpg differ
diff --git a/Doc/新-人员名单.xlsx b/Doc/新-人员名单.xlsx
new file mode 100644
index 0000000..cfc077e
Binary files /dev/null and b/Doc/新-人员名单.xlsx differ
diff --git a/Doc/需求.txt b/Doc/需求.txt
new file mode 100644
index 0000000..2a65766
--- /dev/null
+++ b/Doc/需求.txt
@@ -0,0 +1,28 @@
+此程序占25分,这25分里面,有评委会的10分,有群众15分。
+
+评委会得分= 1.0 * 评委会投票人数/评委会总人数 *10
+群众得分= 1.0 * 群众投票人数/群从总人数 *15
+
+投一票是一票,统计票数即可
+
+群众可投票人数:30人
+评审小组可投票人数:7人
+
+
+投票规则:
+高级是5选2,中级是3选2.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WebRoot/html/toupiao_login.html b/WebRoot/html/toupiao_login.html
new file mode 100644
index 0000000..c642ef4
--- /dev/null
+++ b/WebRoot/html/toupiao_login.html
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+ 长春市教育技术装备与信息中心职称评审系统
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/dsideal/FengHuang/Index/Controller/IndexController.java b/src/main/java/com/dsideal/FengHuang/Index/Controller/IndexController.java
index fd3d633..c7108d7 100644
--- a/src/main/java/com/dsideal/FengHuang/Index/Controller/IndexController.java
+++ b/src/main/java/com/dsideal/FengHuang/Index/Controller/IndexController.java
@@ -24,7 +24,7 @@ public class IndexController extends Controller {
@Before({GET.class})
public void index() {
- redirect("/html/login.html");
+ redirect("/html/toupiao_login.html");
}
diff --git a/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java b/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java
index d29eb0a..2f47dd9 100644
--- a/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java
+++ b/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java
@@ -18,6 +18,7 @@ import com.jfinal.ext.interceptor.POST;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
+import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.redis.Redis;
@@ -26,6 +27,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -35,6 +37,143 @@ public class LoginPersonController extends Controller {
//实例化model
LoginPersonModel model = new LoginPersonModel();
+ @ActionApi(remark = "验证登录", summary = "验证登录", sort = 1)
+ @Params({
+ @Param(name = "username", remark = "用户名", required = true),
+ @Param(name = "password", remark = "密码", required = true),
+ @Param(name = "captcha", remark = "验证码", required = true)
+ })
+ public void touPiaodoLogin(String username, String password, String captcha) {
+ JSONObject resultJson = new JSONObject();
+ try {
+ if (StrKit.isBlank(captcha)) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "验证码不能为空!");
+ renderJson(resultJson);
+ return;
+ }
+ if (getSession().getAttribute("captcha") == null) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "在浏览器会话中没有检查到验证码,你的行为将会记录!");
+ renderJson(resultJson);
+ return;
+ }
+ String memory_captcha = getSession().getAttribute("captcha").toString().toLowerCase();
+
+ //验证码错误次数
+ String checkCodeKey = "Yzm_error_" + username;
+ int CheckCodeErrCnt = 4; //最多允许错几次 4+1
+ int CheckCodecntNum = 0; //错几次了
+ if (Redis.use().exists(checkCodeKey))
+ CheckCodecntNum = Integer.parseInt(Redis.use().get(checkCodeKey).toString());
+ if (CheckCodecntNum > CheckCodeErrCnt) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "账号已被停用5分钟,请稍后再试!");
+ renderJson(resultJson);
+ return;
+ }
+ if (!memory_captcha.equals(captcha.toLowerCase())) {
+ CheckCodecntNum = 1;
+ if (Redis.use().exists(checkCodeKey))
+ CheckCodecntNum = Integer.parseInt(Redis.use().get(checkCodeKey).toString()) + CheckCodecntNum;
+ Redis.use().set(checkCodeKey, CheckCodecntNum);
+ Redis.use().expire(checkCodeKey, 60 * 5);
+
+ if (CheckCodecntNum == CheckCodeErrCnt) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "验证码连续输入错误" + CheckCodecntNum + "次,再错误一次将被封号5分钟!");
+ renderJson(resultJson);
+ return;
+ }
+ if (CheckCodecntNum > CheckCodeErrCnt) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "验证码连续输入错误5次,账号被停用5分钟,请稍后再试!");
+ renderJson(resultJson);
+ return;
+ }
+ resultJson.put("success", false);
+ resultJson.put("msg", "验证码不正确!");
+ renderJson(resultJson);
+ return;
+ }
+ if (StrKit.isBlank(username)) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "用户名不允许为空!");
+ renderJson(resultJson);
+ return;
+ }
+ if (StrKit.isBlank(password)) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "密码不允许为空!");
+ renderJson(resultJson);
+ return;
+ }
+
+ //检查缓存中此账号错误了几次
+ String PassWordKey = "WrongPassWord_" + username;
+ int ErrCnt = 4; //最多允许错几次 4+1
+ int cntNum = 0; //错几次了
+ if (Redis.use().exists(PassWordKey)) cntNum = Integer.parseInt(Redis.use().get(PassWordKey).toString());
+ if (cntNum > ErrCnt) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "账号被停用5分钟,请稍后再试!");
+ renderJson(resultJson);
+ return;
+ }
+ //与前端配合RSA通用加密解密
+ try {
+ password = RsaUtils.decryptDataOnJava(password, RsaUtils.PRIVATEKEY);
+ } catch (Exception err) {
+ password = "!@#$%^&&*^*&(*)(*_)^%^$%$^%$^%";
+ }
+
+ String sql = "select * from t_toupiao_toupiaoren where toupiaoren_tel=?";
+ List list = Db.find(sql, username);
+ if (list.size() == 0) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "用户名或密码错误!");
+ renderJson(resultJson);
+ return;
+ }
+
+ if (!password.equals(username.substring(username.length()-6))) {
+ //扩展支持连续输入用户名密码错误,停用账号5分钟功能 2022.06.07
+ cntNum = 1;
+ if (Redis.use().exists(PassWordKey))
+ cntNum = Integer.parseInt(Redis.use().get(PassWordKey).toString()) + cntNum;
+ Redis.use().set(PassWordKey, cntNum);
+ Redis.use().expire(PassWordKey, 60 * 5);
+ if (cntNum > ErrCnt) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "密码连续输入" + (ErrCnt + 1) + "次全部错误,账号将被停用5分钟!");
+ renderJson(resultJson);
+ return;
+ }
+ if (cntNum == ErrCnt) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "用户名或密码连续错误,你还有1次机会,再次错误后账号将被封掉5分钟!");
+ renderJson(resultJson);
+ return;
+ }
+ resultJson.put("success", false);
+ resultJson.put("msg", "用户名或密码错误!");
+ renderJson(resultJson);
+ return;
+ }
+ //去掉限制
+ Redis.use().del(PassWordKey);
+ Redis.use().del(checkCodeKey);
+ CookieUtil.set(getResponse(), "toupiaoren_tel", username, false, true);
+ resultJson.put("success", true);
+ resultJson.put("toupiaoren_tel", username);
+ renderJson(resultJson);
+ } catch (Exception e) {
+ resultJson.put("success", false);
+ resultJson.put("msg", "登录异常!");
+ renderJson(resultJson);
+ }
+ }
+
@ActionApi(remark = "验证登录", summary = "验证登录", sort = 1)
@Params({
@Param(name = "username", remark = "用户名", required = true),
diff --git a/src/main/java/com/dsideal/FengHuang/Start.java b/src/main/java/com/dsideal/FengHuang/Start.java
index 3c9a460..3ca58a8 100644
--- a/src/main/java/com/dsideal/FengHuang/Start.java
+++ b/src/main/java/com/dsideal/FengHuang/Start.java
@@ -18,6 +18,7 @@ import com.dsideal.FengHuang.Swagger.controller.SwaggerController;
import com.dsideal.FengHuang.Teacher.Controller.TeacherController;
import com.dsideal.FengHuang.TeacherYd.Controller.TeacherYdController;
import com.dsideal.FengHuang.Test.Controller.TestController;
+import com.dsideal.FengHuang.TouPiao.Controller.TouPiaoController;
import com.dsideal.FengHuang.Util.FileUtil;
import com.dsideal.FengHuang.Util.LogBackLogFactory;
import com.dsideal.FengHuang.Util.PkUtil;
@@ -85,9 +86,8 @@ public class Start extends JFinalConfig {
me.add("/studentYd", StudentYdController.class);
//菜单管理
me.add("/menu", MenuController.class);
-
- //测试
- me.add("/test", TestController.class);
+ //投票
+ me.add("/TouPiao", TouPiaoController.class);
// 配置Swagger UI访问路由
// http://127.0.0.1:9000/FengHuang/swagger/index
diff --git a/src/main/java/com/dsideal/FengHuang/TouPiao/Controller/TouPiaoController.java b/src/main/java/com/dsideal/FengHuang/TouPiao/Controller/TouPiaoController.java
new file mode 100644
index 0000000..ea27348
--- /dev/null
+++ b/src/main/java/com/dsideal/FengHuang/TouPiao/Controller/TouPiaoController.java
@@ -0,0 +1,33 @@
+package com.dsideal.FengHuang.TouPiao.Controller;
+
+import com.dsideal.FengHuang.Interceptor.IsLoginInterface;
+import com.dsideal.FengHuang.TouPiao.Model.TouPiaoModel;
+import com.dsideal.FengHuang.Util.CommonUtil;
+import com.jfinal.aop.Before;
+import com.jfinal.core.Controller;
+import com.jfinal.ext.interceptor.GET;
+import com.jfinal.ext.interceptor.POST;
+import com.jfinal.plugin.activerecord.Record;
+
+import java.util.List;
+
+@SuppressWarnings("unchecked")
+public class TouPiaoController extends Controller {
+ TouPiaoModel tm = new TouPiaoModel();
+
+ /**
+ * 功能:获取侯选人名单
+ * 作者:黄海
+ * 日期:2022-12-11
+ 高级
+ http://10.10.11.124:9000/FengHuang/TouPiao/getHouXuanRenList?type_id=1
+ 中级
+ http://10.10.11.124:9000/FengHuang/TouPiao/getHouXuanRenList?type_id=2
+ */
+ @Before({GET.class})
+ @IsLoginInterface({})
+ public void getHouXuanRenList(int type_id) {
+ List list = tm.getHouXuanRenList(type_id);
+ renderJson(CommonUtil.renderJsonForLayUI(list));
+ }
+}
diff --git a/src/main/java/com/dsideal/FengHuang/TouPiao/Model/TouPiaoModel.java b/src/main/java/com/dsideal/FengHuang/TouPiao/Model/TouPiaoModel.java
new file mode 100644
index 0000000..61b7f27
--- /dev/null
+++ b/src/main/java/com/dsideal/FengHuang/TouPiao/Model/TouPiaoModel.java
@@ -0,0 +1,24 @@
+package com.dsideal.FengHuang.TouPiao.Model;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.dsideal.FengHuang.Util.CommonUtil;
+import com.dsideal.FengHuang.Util.IpUtil;
+import com.dsideal.FengHuang.Util.MysqlAesUtil;
+import com.dsideal.FengHuang.Util.PkUtil;
+import com.jfinal.plugin.activerecord.Db;
+import com.jfinal.plugin.activerecord.Page;
+import com.jfinal.plugin.activerecord.Record;
+import com.jfinal.plugin.activerecord.SqlPara;
+
+import java.util.List;
+import java.util.UUID;
+
+@SuppressWarnings("unchecked")
+public class TouPiaoModel {
+
+ public List getHouXuanRenList(int type_id) {
+ String sql = "select * from t_toupiao_houxuanren where type_id=?";
+ return Db.find(sql, type_id);
+ }
+}
\ No newline at end of file