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