kgdxpr 10 months ago
commit 3a525180b1

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/../dsBase" dumb="true">
<sourceFolder url="file://$MODULE_DIR$/../dsBase/src/main/resource" type="java-resource" />
</content>
</component>
</module>

@ -2,7 +2,6 @@ package com.dsideal.base.LoginPerson.Controller;
import com.alibaba.fastjson.JSONObject;
import com.dsideal.base.BaseApplication;
import com.dsideal.base.Const.RetBean;
import com.dsideal.base.Interceptor.*;
import com.dsideal.base.LoginPerson.Model.LoginPersonModel;
import com.dsideal.base.Util.*;
@ -15,6 +14,8 @@ import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@SuppressWarnings("unchecked")
@ -23,9 +24,30 @@ public class LoginPersonController extends Controller {
LoginPersonModel model = new LoginPersonModel();
@Before({POST.class})
public void doLogin(String username, String password, String platform) {
public void doLogin(String username, String password, String platform, int forVue) {
JSONObject jo = model.doLogin(username, password, platform, getResponse());
renderJson(jo);
if (forVue == 0) {
renderJson(jo);
} else {
boolean success = jo.getBoolean("success");
String msg = jo.getString("message");
if (!success) {
renderJson(RetKit.renderFail(msg));
return;
}
int identity_id = jo.getInteger("identity_id");
String person_id = jo.getString("person_id");
String bureau_id = jo.getString("bureau_id");
String person_name = jo.getString("person_name");
String jwt = jo.getString("jwt");
Map<String, Object> map = new HashMap<>();
map.put("identity_id", identity_id);
map.put("person_id", person_id);
map.put("bureau_id", bureau_id);
map.put("person_name", person_name);
map.put("jwt", jwt);
renderJson(RetKit.renderSuccess(msg, map));
}
}
@Before({GET.class})
@ -34,7 +56,7 @@ public class LoginPersonController extends Controller {
CookieUtil.remove(getRequest(), getResponse(), "person_id");
CookieUtil.remove(getRequest(), getResponse(), "bureau_id");
CookieUtil.remove(getRequest(), getResponse(), "token");
redirect("/html/login.html");
renderJson(CommonUtil.returnMessageJson(true, "退出登录成功!"));
}
/**

@ -333,7 +333,7 @@ public class LoginPersonModel {
//去掉限制
RedisKit.del(PassWordKey);
//防止用户攻击修改Cookie
Map _map = new HashMap<String, String>();
Map _map = new HashMap<String, Object>();
_map.put("identity_id", loginMap.get("identity_id"));
_map.put("person_id", loginMap.get("person_id"));
_map.put("bureau_id", loginMap.get("bureau_id"));

@ -284,7 +284,6 @@ public class CommonUtil {
}
/**
*
*
@ -402,16 +401,6 @@ public class CommonUtil {
return false;
}
/***
* delete CRLF; delete empty line ;delete blank lines
*
* @param input
* @return
*/
private static String deleteCRLFOnce(String input) {
return input.replaceAll("((\r\n)|\n)[\\s\t ]*(\\1)+", "$1");
}
public static boolean checkPass(String pass) {
//注释掉必须要有符号这个要求:&& pass.matches(".*[~!@#$%^&*\\.?]{1,}.*")
@ -426,5 +415,4 @@ public class CommonUtil {
String base64Rule = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
return Pattern.matches(base64Rule, str);
}
}

@ -0,0 +1,100 @@
package com.dsideal.base.Util;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RetKit {
/**
* VUEList<Record>
* <p>
* data: Map<String,Object>
*/
public static Map<String, Object> renderSuccess(List<Record> list) {
return renderSuccess(null, list, null, 0, 0, 0);
}
public static Map<String, Object> renderSuccess(String msg, List<Record> list) {
return renderSuccess(msg, list, null, 0, 0, 0);
}
public static Map<String, Object> renderSuccess(Page<Record> page) {
return renderSuccess(null, page.getList(), "list", page.getPageNumber(), page.getPageSize(), page.getTotalRow());
}
public static Map<String, Object> renderSuccess(String msg, Page<Record> page, String dataName) {
return renderSuccess(msg, page.getList(), dataName, page.getPageNumber(), page.getPageSize(), page.getTotalRow());
}
public static Map<String, Object> renderSuccess(String msg, Map<String, Object> map) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 200);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
rMap.put("data", map);
return rMap;
}
public static Map<String, Object> renderSuccess(cn.hutool.json.JSONArray jsonArray) {
return renderSuccess(null, jsonArray);
}
public static Map<String, Object> renderSuccess(String msg, cn.hutool.json.JSONArray jsonArray) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 200);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
rMap.put("data", jsonArray);
return rMap;
}
public static Map<String, Object> renderSuccess(String msg, List<Record> list, String dataName, int pageNum, int pageSize, int total) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 200);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
if (StrKit.isBlank(dataName)) {
//没有List的名称直接把list放到data中[]数组形式
rMap.put("data", list);
} else {
//有List的名称则把list放到data中,也需要把list的 size()做为一个属性放到data上的count属性中
Map<String, Object> _map = new HashMap<>();
_map.put(dataName, list);
_map.put("total", list.size());
if (pageNum > 0) {
_map.put("pageNum", pageNum);
}
if (pageSize > 0) {
_map.put("pageSize", pageSize);
}
if (total > 0) {
_map.put("total", total);
}
rMap.put("data", _map);
}
return rMap;
}
public static Map<String, Object> renderFail(String msg) {
return renderFail(msg, null);
}
public static Map<String, Object> renderFail(String msg, Map<String, Object> map) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 500);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
if (map != null) {
rMap.put("data", map);
}
return rMap;
}
}

@ -1,6 +1,5 @@
package com.dsideal.gw.Bean;
import com.alibaba.fastjson.JSONObject;
import lombok.Getter;
import lombok.Setter;
@ -16,20 +15,17 @@ public class RetBean {
*/
private int code;
private String msg;
private JSONObject data;
public static final Integer SUCCESS = 200;
public static final Integer ERROR = 500;
public static final Integer OVERDUE = 401;
public static final Integer TIMEOUT = 30000;
public RetBean(int code, String msg, JSONObject data) {
public RetBean(int code, String msg) {
this.code = code;
this.msg = msg;
this.data = data;
}
public String toJsonString() {
return JSONObject.toJSONString(this);
}
public String toString() {
return "{\"code\":" + code + ",\"msg\":\"" + msg + "\"}";
}
}

@ -1,6 +1,5 @@
package com.dsideal.gw.Handler;
import com.alibaba.fastjson.JSONObject;
import com.dsideal.gw.Bean.RetBean;
import com.dsideal.gw.GwApplication;
import com.dsideal.gw.Util.CommonUtil;
@ -39,32 +38,14 @@ public class RouterHandler extends Handler {
* JSON
*
* @param res
* @param jo
*/
public void renderJson(HttpServletResponse res, JSONObject jo) {
public void renderJson(HttpServletResponse res, String body) {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Cache-Control", "no-cache");
res.setCharacterEncoding("UTF-8");
res.setContentType("application/json");
try {
RetBean ret;
String msg = "";
if (jo.containsKey("msg")) {
msg = jo.getString("msg");
jo.remove("msg");
} else if (jo.containsKey("message")) {
msg = jo.getString("message");
jo.remove("message");
}
if (jo.getBoolean("success")) {
jo.remove("success");
ret = new RetBean(RetBean.SUCCESS, msg, jo);
} else {
jo.remove("success");
ret = new RetBean(RetBean.ERROR, msg, jo);
}
res.getWriter().println(ret.toJsonString());
res.getWriter().println(body);
res.getWriter().flush();
} catch (IOException e) {
throw new RuntimeException(e);
@ -79,13 +60,9 @@ public class RouterHandler extends Handler {
if (response.body() != null) {
responseBody = response.body().string();
}
JSONObject jo = JSONObject.parseObject(responseBody);
renderJson(res, jo);
renderJson(res, responseBody);
} else {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "请求失败!");
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "请求失败!").toString());
}
}
@ -160,16 +137,13 @@ public class RouterHandler extends Handler {
if (req.getHeader("Authorization") != null) {
String jwtToken = req.getHeader("Authorization");
Claims claims = JwtUtil.getClaims(jwtToken);
if (claims == null) {
if (claims != null) {
canPass = true;
}
}
}
if (!canPass) {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "登录已过期,请重新登录!");
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "登录已过期,请重新登录!").toString());
isHandled[0] = true; //停止filter
return;
}
@ -182,20 +156,14 @@ public class RouterHandler extends Handler {
//action名称
String action = servletPath.substring(xie2 + 1);
if (xie1 == -1 || xie2 == -1) {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "输入的字符串格式不正确,没有找到两个 '/'。");
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "输入的字符串格式不正确,没有找到两个 '/'。").toString());
isHandled[0] = true; //停止filter
return;
}
String prefix = servletPath.substring(xie1 + 1, xie2); // 截取两个 '/' 之间的内容
if (!GwApplication.routeList.containsKey(prefix)) {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", prefix + "前缀没有找到合适的路由表,请检查是否请求正确!");
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, prefix + "前缀没有找到合适的路由表,请检查是否请求正确!").toString());
isHandled[0] = true; //停止filter
return;
}
@ -209,10 +177,7 @@ public class RouterHandler extends Handler {
MultipartRequest mp = new MultipartRequest(req);
List<UploadFile> files = mp.getFiles();
if (files.isEmpty()) {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "没有上传文件!");
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "没有上传文件!").toString());
isHandled[0] = true;//停止filter
return;
}
@ -235,10 +200,7 @@ public class RouterHandler extends Handler {
isHandled[0] = true;//停止filter
return;
} catch (Exception e) {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "请求失败!" + e);
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "请求失败!" + e).toString());
isHandled[0] = true;//停止filter
return;
}
@ -263,10 +225,7 @@ public class RouterHandler extends Handler {
isHandled[0] = true;//停止filter
return;
} catch (IOException e) {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "请求失败!" + e);
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "请求失败!" + e).toString());
isHandled[0] = true;//停止filter
return;
}
@ -292,20 +251,14 @@ public class RouterHandler extends Handler {
isHandled[0] = true;//停止filter
return;
} catch (IOException e) {
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "请求失败!" + e);
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "请求失败!" + e).toString());
isHandled[0] = true;//停止filter
return;
}
}
//4、其它的OPTIONS
JSONObject jo = new JSONObject();
jo.put("success", false);
jo.put("message", "系统只支持GET,POST其它的OPTIONS不支持文件上传请使用S3协议进行直传不通过JAVA处理JAVA只处理授权");
renderJson(res, jo);
renderJson(res, new RetBean(RetBean.ERROR, "系统只支持GET,POST其它的OPTIONS不支持文件上传请使用S3协议进行直传不通过JAVA处理JAVA只处理授权").toString());
//停止filter
isHandled[0] = true;
}

@ -0,0 +1,23 @@
# 上传文件的临时路径
uploadTempPath: /tmp
# JWT
SECRET: ZXZnZWVr5b+r5LmQ5L2g55qE5Ye66KGM
# 生成Token的密码
CookieMd5SingPwd: DsideaL4r5t6y7u
# 路由
route:
# 基础数据
dsBase:
url: http://ds-base:8001
# 资源库
dsRes:
url: http://ds-res:8002
# 白名单
whitelist:
# 全局变量获取
- /dsBase/global/getGlobalValueByKey
# 登录
- /dsBase/loginPerson/doLogin

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/dsRes" dumb="true">
<sourceFolder url="file://$MODULE_DIR$/dsRes/src/main/resource" type="java-resource" />
</content>
</component>
</module>

@ -0,0 +1,26 @@
package com.dsideal.resource.Base.Controller;
import com.dsideal.resource.Base.Model.BaseModel;
import com.dsideal.resource.Util.RetKit;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import java.util.List;
public class BaseController extends Controller {
BaseModel bm = new BaseModel();
/**
*
*/
public void getStageList() {
List<Record> list = bm.getStageList();
Page<Record> page=new Page<>();
page.setList(list);
page.setPageSize(20);
page.setTotalRow(list.size());
page.setPageNumber(1);
renderJson(RetKit.renderSuccess(page));
}
}

@ -0,0 +1,16 @@
package com.dsideal.resource.Base.Model;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import java.util.List;
public class BaseModel {
/**
*
* @return
*/
public List<Record> getStageList(){
String sql="select * from t_dm_stage order by stage_id";
return Db.find(sql);
}
}

@ -1,4 +1,4 @@
package com.dsideal.base.Const;
package com.dsideal.resource.Const;
import com.alibaba.fastjson.JSONObject;
import lombok.Getter;

@ -1,4 +1,4 @@
package com.dsideal.resource.Controller;
package com.dsideal.resource.Index;
import com.jfinal.core.Controller;

@ -0,0 +1,39 @@
package com.dsideal.resource.Menu.Controller;
import cn.hutool.json.JSONUtil;
import com.dsideal.resource.Menu.Model.MenuModel;
import com.dsideal.resource.Util.CommonUtil;
import com.dsideal.resource.Util.JwtUtil;
import com.dsideal.resource.Util.RetKit;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.ext.interceptor.GET;
import io.jsonwebtoken.Claims;
import java.util.List;
public class MenuController extends Controller {
MenuModel mm = new MenuModel();
/**
*
*/
@Before({GET.class})
public void getPersonMenu() {
//当前登录的人员是谁?
String token = getRequest().getHeader("Authorization");
if (token == null) {
renderJson(RetKit.renderFail("JWT token 为空,无法解析人员信息,请重新登录!"));
return;
}
Claims claims = JwtUtil.getClaims(token);
int identity_id = Integer.parseInt(claims.get("identity_id").toString());
String person_id = claims.get("person_id").toString();
//所有菜单
List<MenuModel.Menu> menuList = mm.fetchMenu(160);
renderJson(RetKit.renderSuccess(JSONUtil.parseArray(menuList)));
//后续需要根据人员角色菜单关系,去掉不可见菜单
}
}

@ -1,128 +0,0 @@
package com.dsideal.resource.Menu;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.jfinal.kit.Prop;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.hikaricp.HikariCpPlugin;
import com.dsideal.resource.Plugin.YamlProp;
import com.jfinal.plugin.activerecord.Record;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
public class GetVueMenu {
//子类1菜单
@Getter
@Setter
public static class Menu {
private String path;
private String name;
private String component;
private Meta meta;
private List<Menu> children=new ArrayList<>();
}
//子类2:LinkMeta
@Getter
@Setter
public static class Meta {
private String icon;
private String title;
private String isLink;
private boolean isHide;
private boolean isFull;
private boolean isAffix;
private boolean isKeepAlive;
}
public static GetVueMenu gm=new GetVueMenu();
public static void main(String[] args) throws JsonProcessingException {
String configFile = "application_dev.yaml";
Prop PropKit = new YamlProp(configFile);
HikariCpPlugin hp = new HikariCpPlugin(PropKit.get("mysql.jdbcUrl"), PropKit.get("mysql.user"),
PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName"));
hp.start();
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(hp);
arp.start();
List<Menu> rootMenu = gm.fetchMenu(-1); // 从父ID为-1开始递归
//输出JSON格式
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(rootMenu.getFirst());
//去掉children为空的节点
JsonNode root = mapper.readTree(json);
removeEmptyChildren(root);
String cleanedJson = mapper.writeValueAsString(root);
System.out.println(cleanedJson);
}
/**
* JSONchildren
*
* @param node
*/
private static void removeEmptyChildren(JsonNode node) {
if (node.isObject()) {
ObjectNode objectNode = (ObjectNode) node;
if (objectNode.has("children")) {
JsonNode children = objectNode.get("children");
if (children.isArray() && ((ArrayNode) children).isEmpty()) {
objectNode.remove("children");
} else if (children.isArray()) {
ArrayNode arrayNode = (ArrayNode) children;
for (int i = 0; i < arrayNode.size(); i++) {
removeEmptyChildren(arrayNode.get(i));
}
}
}
}
}
/**
*
*
* @param parent_id ID
* @return
*/
private List<Menu> fetchMenu(int parent_id) {
String sql = "select * from t_base_menu where parent_id = ?";
List<Record> list = Db.find(sql, parent_id);
List<Menu> res = new ArrayList<>();
for (Record rs : list) {
if (rs == null) return null;
Menu sMenu = new Menu();
String url = rs.getStr("url");
sMenu.setPath(url);
sMenu.setName(rs.getStr("menu_name"));
sMenu.setComponent(url);
Meta meta = new Meta();
meta.setIcon(rs.getStr("icon"));
meta.setTitle(rs.getStr("menu_name"));
meta.setIsLink("");
meta.setHide(false);
if (rs.get("is_full") == null || rs.getInt("is_full") == 0) {
meta.setFull(false);
} else {
meta.setFull(true);
}
meta.setAffix(true);
meta.setKeepAlive(true);
sMenu.setMeta(meta);
// 递归查找子菜单
List<Menu> childMenu = fetchMenu(rs.getInt("menu_id"));
sMenu.setChildren(childMenu);
res.add(sMenu);
}
return res;
}
}

@ -0,0 +1,80 @@
package com.dsideal.resource.Menu.Model;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
public class MenuModel {
//子类1菜单
@Getter
@Setter
public static class Menu {
private String path;
private String component;
private Meta meta;
private List<Menu> children = new ArrayList<>();
}
//子类2:LinkMeta
@Getter
@Setter
public static class Meta {
private String icon;
private String title;
private String isLink;
private boolean isHide;
private boolean isFull;
private boolean isAffix;
private String name;
private boolean isKeepAlive;
}
/**
*
*
* @param parent_id ID
* @return
*/
public List<Menu> fetchMenu(int parent_id) {
String sql = "select * from t_base_menu where parent_id = ? order by sort_id";
List<Record> list = Db.find(sql, parent_id);
List<Menu> res = new ArrayList<>();
for (Record rs : list) {
if (rs == null) return null;
Menu sMenu = new Menu();
String url = rs.getStr("url");
sMenu.setPath(url);
sMenu.setComponent(url);
Meta meta = new Meta();
meta.setIcon(rs.getStr("icon"));
meta.setTitle(rs.getStr("menu_name"));
meta.setIsLink("");
meta.setHide(false);
meta.setName(rs.getStr("menu_name"));
meta.setAffix(false);
if (rs.getStr("menu_name").equals("首页")) {
meta.setAffix(true);
}
if (rs.get("is_full") == null || rs.getInt("is_full") == 0) {
meta.setFull(false);
} else {
meta.setFull(true);
}
meta.setKeepAlive(true);
sMenu.setMeta(meta);
// 递归查找子菜单
List<Menu> childMenu = fetchMenu(rs.getInt("menu_id"));
sMenu.setChildren(childMenu);
res.add(sMenu);
}
return res;
}
}

@ -1,7 +1,9 @@
package com.dsideal.resource;
import com.dsideal.resource.Controller.IndexController;
import com.dsideal.resource.Base.Controller.BaseController;
import com.dsideal.resource.Index.IndexController;
import com.dsideal.resource.Interceptor.*;
import com.dsideal.resource.Menu.Controller.MenuController;
import com.dsideal.resource.Plugin.YamlProp;
import com.dsideal.resource.Util.FileUtil;
import com.dsideal.resource.Util.LogBackLogFactory;
@ -57,6 +59,10 @@ public class ResApplication extends JFinalConfig {
public void configRoute(Routes me) {
//默认页面
me.add("/", IndexController.class);
//菜单
me.add("/menu", MenuController.class);
//资源基础管理
me.add("/base", BaseController.class);
}
@Override

@ -284,7 +284,6 @@ public class CommonUtil {
}
/**
*
*
@ -427,4 +426,5 @@ public class CommonUtil {
return Pattern.matches(base64Rule, str);
}
}

@ -0,0 +1,100 @@
package com.dsideal.resource.Util;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RetKit {
/**
* VUEList<Record>
* <p>
* data: Map<String,Object>
*/
public static Map<String, Object> renderSuccess(List<com.jfinal.plugin.activerecord.Record> list) {
return renderSuccess(null, list, null, 0, 0, 0);
}
public static Map<String, Object> renderSuccess(String msg, List<com.jfinal.plugin.activerecord.Record> list) {
return renderSuccess(msg, list, null, 0, 0, 0);
}
public static Map<String, Object> renderSuccess(Page<com.jfinal.plugin.activerecord.Record> page) {
return renderSuccess(null, page.getList(), "list", page.getPageNumber(), page.getPageSize(), page.getTotalRow());
}
public static Map<String, Object> renderSuccess(String msg, Page<com.jfinal.plugin.activerecord.Record> page, String dataName) {
return renderSuccess(msg, page.getList(), dataName, page.getPageNumber(), page.getPageSize(), page.getTotalRow());
}
public static Map<String, Object> renderSuccess(String msg, Map<String, Object> map) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 200);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
rMap.put("data", map);
return rMap;
}
public static Map<String, Object> renderSuccess(cn.hutool.json.JSONArray jsonArray) {
return renderSuccess(null, jsonArray);
}
public static Map<String, Object> renderSuccess(String msg, cn.hutool.json.JSONArray jsonArray) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 200);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
rMap.put("data", jsonArray);
return rMap;
}
public static Map<String, Object> renderSuccess(String msg, List<Record> list, String dataName, int pageNum, int pageSize, int total) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 200);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
if (StrKit.isBlank(dataName)) {
//没有List的名称直接把list放到data中[]数组形式
rMap.put("data", list);
} else {
//有List的名称则把list放到data中,也需要把list的 size()做为一个属性放到data上的count属性中
Map<String, Object> _map = new HashMap<>();
_map.put(dataName, list);
_map.put("total", list.size());
if (pageNum > 0) {
_map.put("pageNum", pageNum);
}
if (pageSize > 0) {
_map.put("pageSize", pageSize);
}
if (total > 0) {
_map.put("total", total);
}
rMap.put("data", _map);
}
return rMap;
}
public static Map<String, Object> renderFail(String msg) {
return renderFail(msg, null);
}
public static Map<String, Object> renderFail(String msg, Map<String, Object> map) {
Map<String, Object> rMap = new HashMap<>();
rMap.put("code", 500);
if (!StrKit.isBlank(msg)) {
rMap.put("msg", msg);
}
if (map != null) {
rMap.put("data", map);
}
return rMap;
}
}

@ -0,0 +1,19 @@
#!/bin/bash
# 容器名称
CONTAINER_NAME=dsRes
# 登录镜像仓库
docker login --username=东师黄海 registry.cn-hangzhou.aliyuncs.com --password DsideaL4r5t6y7u
# 镜像名称
IMAGE_NAME=registry.cn-hangzhou.aliyuncs.com/dsideal/ds_base:dev_20240924140624
# 删除容器
docker rm -f ${CONTAINER_NAME}
# 运行容器
docker run -d --network=host --name "${CONTAINER_NAME}" \
--privileged=true --env WORKING_ENV=dev -w /home -p 8002:8002 -v "$PWD/logs:/home/logs" --restart=always "${IMAGE_NAME}"
# 查看日志
docker logs -f --tail 500 "${CONTAINER_NAME}"

@ -0,0 +1,18 @@
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:GetBucketLocation", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::dsideal"]
}, {
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::dsideal/*"]
}]
}

@ -0,0 +1,19 @@
#!/bin/bash
# 容器名称
CONTAINER_NAME=dsRes
# 登录镜像仓库
docker login --username=东师黄海 registry.cn-hangzhou.aliyuncs.com --password DsideaL4r5t6y7u
# 镜像名称
IMAGE_NAME=registry.cn-hangzhou.aliyuncs.com/dsideal/ds_base:dev_20240924140624
# 删除容器
docker rm -f ${CONTAINER_NAME}
# 运行容器
docker run -d --network=host --name "${CONTAINER_NAME}" \
--privileged=true --env WORKING_ENV=dev -w /home -p 8002:8002 -v "$PWD/logs:/home/logs" --restart=always "${IMAGE_NAME}"
# 查看日志
docker logs -f --tail 500 "${CONTAINER_NAME}"

@ -0,0 +1,31 @@
# 上传文件的临时路径
uploadTempPath: /tmp
# JWT
SECRET: ZXZnZWVr5b+r5LmQ5L2g55qE5Ye66KGM
# 生成Token的密码
CookieMd5SingPwd: DsideaL4r5t6y7u
mysql:
# 数据库信息
driverClassName: com.mysql.cj.jdbc.Driver
user: ylt
password: Ycharge666
jdbcUrl : jdbc:mysql://rm-bp1ux6tuk49er80t9.mysql.rds.aliyuncs.com:3306/ds_db?useUnicode=true&characterEncoding=UTF-8
redis:
ip: r-bp14c1p5j5lkpw1jc2.redis.rds.aliyuncs.com
port: 6379
password: Ycharge666
# ==============================================================
jwt:
# 生成Token的密码
CookieMd5SingPwd: DsideaL4r5t6y7u
excel:
# 导出excel 的模板配置路径
excelExportTemplatePathSuffix: /ExcelExportTemplate/
# 导入excel 的模板配置路径
ExcelImportTemplatePathSuffix: /ExcelImportTemplate/

@ -0,0 +1,28 @@
# 上传文件的临时路径
uploadTempPath: c:/Windows/Temp
# JWT
SECRET: ZXZnZWVr5b+r5LmQ5L2g55qE5Ye66KGM
# 生成Token的密码
CookieMd5SingPwd: DsideaL4r5t6y7u
mysql:
# 数据库信息
driverClassName: com.mysql.cj.jdbc.Driver
user: root
password: DsideaL147258369
jdbcUrl : jdbc:mysql://10.10.14.210:22066/ds_db?rewriteBatchedStatements=true&useUnicode=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
redis:
ip: 10.10.14.210
port: 18890
password:
# ==============================================================
excel:
# 导出excel 的模板配置路径
excelExportTemplatePathSuffix: /ExcelExportTemplate/
# 导入excel 的模板配置路径
ExcelImportTemplatePathSuffix: /ExcelImportTemplate/

@ -0,0 +1,28 @@
# 上传文件的临时路径
uploadTempPath: /tmp
# JWT
SECRET: ZXZnZWVr5b+r5LmQ5L2g55qE5Ye66KGM
# 生成Token的密码
CookieMd5SingPwd: DsideaL4r5t6y7u
mysql:
# 数据库信息
driverClassName: com.mysql.cj.jdbc.Driver
user: root
password: DsideaL147258369
jdbcUrl : jdbc:mysql://10.10.14.210:22066/ds_db?rewriteBatchedStatements=true&useUnicode=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
redis:
ip: 10.10.14.210
port: 18890
password:
# ==============================================================
excel:
# 导出excel 的模板配置路径
excelExportTemplatePathSuffix: /ExcelExportTemplate/
# 导入excel 的模板配置路径
ExcelImportTemplatePathSuffix: /ExcelImportTemplate/

@ -0,0 +1,12 @@
log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.mq=org.apache.rocketmq.logappender.log4j.RocketmqLog4jAppender
log4j.appender.mq.Topic=TOPIC_MEIWEI_SMS_NOTICE_TEST
log4j.appender.mq.Tag=PID_MEIWEI_SMS_RETRY_TIMEOUT
log4j.appender.mq.ProducerGroup=meiwei-producer-retry
log4j.appender.mq.NameServerAddress=127.0.0.1:9876;127.0.0.1:9877
log4j.appender.mq.layout=org.apache.log4j.PatternLayout
log4j.appender.mq.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-4r [%t] (%F:%L) %

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/usr/local/tomcat8/logs"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %boldYellow([%thread]) %highlight(%-5level) %boldGreen(%logger{40})
- %msg%n
</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/dsBase.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/dsBase.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<logger level="debug" additivity="false">
</logger>
</configuration>

@ -0,0 +1,11 @@
$$\ $$$$$$$\
$$ | $$ __$$\
$$$$$$$ | $$$$$$$\ $$ | $$ | $$$$$$\ $$$$$$$\
$$ __$$ |$$ _____|$$$$$$$ |$$ __$$\ $$ _____|
$$ / $$ |\$$$$$$\ $$ __$$< $$$$$$$$ |\$$$$$$\
$$ | $$ | \____$$\ $$ | $$ |$$ ____| \____$$\
\$$$$$$$ |$$$$$$$ |$$ | $$ |\$$$$$$$\ $$$$$$$ |
\_______|\_______/ \__| \__| \_______|\_______/
power by http://patorjk.com/software/taag/

@ -0,0 +1,34 @@
# true 值支持热加载
undertow.devMode=true
undertow.port=8002
undertow.host=0.0.0.0
# 目录名称
undertow.contextPath=/dsRes
# 设定I/O线程数.
server.undertow.io-threads=8
# 设定工作线程数
server.undertow.worker-threads=60
# 查询当前某程序的线程或进程数
# yum install psmisc -y
# ps -e | grep java | awk '{print $1}
# pstree -p 15453 | wc -l
# gzip 压缩开关
undertow.gzip.enable=true
# 配置压缩级别,默认值 -1。 可配置 1 到 9。 1 拥有最快压缩速度9 拥有最高压缩率
undertow.gzip.level=-1
# 触发压缩的最小内容长度
undertow.gzip.minLength=1024
# 开启access日志
server.undertow.accesslog.enabled=true
server.undertow.accesslog.pattern=%t %a "%r" %s (%D ms)
# ssl 开启时,是否开启 http2。检测该配置是否生效在 chrome 地址栏中输入: chrome://net-internals/#http2
#undertow.http2.enable=true
#http://www.jfinal.com/doc/1-4

@ -0,0 +1,34 @@
# true 值支持热加载
undertow.devMode=true
undertow.port=8002
undertow.host=0.0.0.0
# 目录名称
undertow.contextPath=/dsRes
# 设定I/O线程数.
server.undertow.io-threads=8
# 设定工作线程数
server.undertow.worker-threads=60
# 查询当前某程序的线程或进程数
# yum install psmisc -y
# ps -e | grep java | awk '{print $1}
# pstree -p 15453 | wc -l
# gzip 压缩开关
undertow.gzip.enable=true
# 配置压缩级别,默认值 -1。 可配置 1 到 9。 1 拥有最快压缩速度9 拥有最高压缩率
undertow.gzip.level=-1
# 触发压缩的最小内容长度
undertow.gzip.minLength=1024
# 开启access日志
server.undertow.accesslog.enabled=true
server.undertow.accesslog.pattern=%t %a "%r" %s (%D ms)
# ssl 开启时,是否开启 http2。检测该配置是否生效在 chrome 地址栏中输入: chrome://net-internals/#http2
#undertow.http2.enable=true
#http://www.jfinal.com/doc/1-4

@ -838,5 +838,12 @@ kubectl delete rs <name>
```
$kubectl create secret docker-registry \
registry-secret-smokelee.com \
--docker-server=registry.i.smokelee.com:5000 \
--docker-username=opuser --docker-password=123
```

Loading…
Cancel
Save