SystemConstant.java 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161
  1. package com.qmth.teachcloud.common.contant;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.aventrix.jnanoid.jnanoid.NanoIdUtils;
  4. import com.qmth.boot.core.uid.service.UidService;
  5. import com.qmth.teachcloud.common.annotation.DBVerify;
  6. import com.qmth.teachcloud.common.bean.result.DBVerifyResult;
  7. import com.qmth.teachcloud.common.config.DictionaryConfig;
  8. import com.qmth.teachcloud.common.entity.BasicSchool;
  9. import com.qmth.teachcloud.common.entity.SysConfig;
  10. import com.qmth.teachcloud.common.entity.SysUser;
  11. import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
  12. import com.qmth.teachcloud.common.enums.LocalCatalogEnum;
  13. import com.qmth.teachcloud.common.enums.TFCustomTypeEnum;
  14. import com.qmth.teachcloud.common.enums.UploadFileEnum;
  15. import com.qmth.teachcloud.common.service.CommonCacheService;
  16. import com.qmth.teachcloud.common.util.Base64Util;
  17. import com.qmth.teachcloud.common.util.FileStoreUtil;
  18. import com.qmth.teachcloud.common.util.ServletUtil;
  19. import com.qmth.teachcloud.common.util.Zip4jUtil;
  20. import org.apache.commons.codec.digest.DigestUtils;
  21. import org.apache.commons.io.IOUtils;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.slf4j.Logger;
  24. import org.slf4j.LoggerFactory;
  25. import java.io.*;
  26. import java.lang.reflect.Field;
  27. import java.math.BigDecimal;
  28. import java.math.RoundingMode;
  29. import java.net.URLEncoder;
  30. import java.nio.charset.Charset;
  31. import java.nio.charset.StandardCharsets;
  32. import java.time.LocalDateTime;
  33. import java.util.*;
  34. import java.util.stream.Collectors;
  35. /**
  36. * @Description: 系统常量
  37. * @Param:
  38. * @return:
  39. * @Author: wangliang
  40. * @Date: 2019/10/11
  41. */
  42. public class SystemConstant {
  43. private final static Logger log = LoggerFactory.getLogger(SystemConstant.class);
  44. /**
  45. * mq中台
  46. */
  47. public static final String GDPU_TODOTASK_URL = "/api/open/mq/gdpu/todotask";
  48. public static final String GDPU_DONETASK_URL = "/api/open/mq/gdpu/donetask";
  49. public static final String INIT_PASSWORD = "12345678";
  50. public static final String OLD_INIT_PASSWORD = "123456";
  51. /**
  52. * 分布式印刷api前缀
  53. */
  54. public static final String PREFIX_URL_COMMON = "/admin/common";
  55. public static final String PREFIX_URL_SYS = "/admin/sys";
  56. public static final String PREFIX_URL_BASIC = "/admin/basic";
  57. public static final String PREFIX_URL_EXAM = "/admin/exam";
  58. public static final String PREFIX_URL_DATA = "/admin/data";
  59. public static final String PREFIX_URL_WORK = "/admin/work";
  60. public static final String PREFIX_URL_CLIENT = "/admin/client";
  61. public static final String PREFIX_URL_STATISTICS = "/admin/statistics";
  62. public static final String PREFIX_URL_SYNC = "/admin/sync";
  63. public static final String PREFIX_URL_SET = "/admin/set";
  64. public static final String PREFIX_URL_CUSTOM_FLOW = "/admin/custom/flow";
  65. public static final String PREFIX_URL_TEACH = "/admin/teach";
  66. public static final String PREFIX_URL_AUTH = "/admin/auth";
  67. public static final String PREFIX_URL_OPEN = "/admin/print/open";
  68. public static final String PREFIX_URL_NOTIFY = "/admin/print/notify";
  69. public static final String PREFIX_URL_GRADE = "/admin/grade";
  70. /**
  71. * 教研分析api前缀
  72. */
  73. public static final String PREFIX_URL_REPORT_WUDA = "/report/wuda/open";
  74. public static final String PREFIX_URL_REPORT_SCHOOL = "/report/school";
  75. public static final String PREFIX_URL_REPORT_COURSE = "/report/course";
  76. public static final String PREFIX_URL_REPORT_EXAM_STUDENT = "/report/exam_student";
  77. public static final String PREFIX_URL_REPORT_DATASOURCE = "/report/datasource";
  78. public static final String PREFIX_URL_REPORT_ANALYZE = "/report/analyze";
  79. public static final String PREFIX_URL_REPORT_OPEN = "/report/open";
  80. public static final String PREFIX_URL_REPORT_SSO = "/report/sso";
  81. public static final String PREFIX_URL_REPORT_SET = "/report/set";
  82. /**
  83. * 云阅卷api
  84. */
  85. public static final String CLOUD_MARK_SCHOOL_SAVE_API = "/api/school/sub/save";
  86. public static final String CLOUD_MARK_EXAM_SAVE_API = "/api/exam/save";
  87. public static final String CLOUD_MARK_SUBJECT_SAVE_API = "/api/exam/subject/save";
  88. public static final String CLOUD_MARK_EXAM_LIST_API = "/api/exams";
  89. public static final String CLOUD_MARK_EXAM_STUDENT_SAVE_API = "/api/exam/student/save";
  90. public static final String CLOUD_MARK_FILE_UPLOAD_API = "/api/file/{type}/upload";
  91. public static final String CLOUD_MARK_EXAM_PAPER_QUERY_API = "/api/exam/paper/query";
  92. public static final String CLOUD_MARK_OPEN_MARK_LOGIN_API = "/open/mark/login";
  93. public static final String CLOUD_MARK_OPEN_SUBJECT_HEADER_LOGIN_API = "/open/subject_header/login";
  94. public static final String CLOUD_MARK_EXAM_STUDENT_COUNT_API = "/api/exam/student/count";
  95. public static final String CLOUD_MARK_EXAM_STUDENT_SCORE_API = "/api/exam/student/score";
  96. public static final String CLOUD_MARK_EXAM_PAPER_SAVE_API = "/api/exam/paper/save";
  97. public static final String CLOUD_MARK_USER_EXTERNAL_SAVE_API = "/api/user/external/save";
  98. public static final String CLOUD_MARK_EXAM_MARK_GROUP_SAVE_API = "/api/exam/mark_group/save";
  99. public static final String CLOUD_MARK_EXAM_MARK_GROUP_COUNT_API = "/api/exam/mark_group/count";
  100. public static final String CLOUD_MARK_EXAM_MARK_GROUP_DELETE_API = "/api/exam/mark_group/delete";
  101. public static final String CLOUD_MARK_EXAM_MARKER_SAVE_API = "/api/exam/marker/save";
  102. public static final String CLOUD_MARK_EXAM_SUBJECT_HEADER_SAVE_API = "/api/exam/subject_header/save";
  103. /**
  104. * 教研分析api
  105. */
  106. public static final String TEACHCLOUD_REPORT_OPEN_SEMESTER_EDIT_API = "/api/report/open/semester_edit";
  107. public static final String TEACHCLOUD_REPORT_OPEN_EXAM_EDIT_API = "/api/report/open/exam_edit";
  108. public static final String TEACHCLOUD_REPORT_OPEN_EXAM_DELETE_API = "/api/report/open/exam_delete";
  109. public static final String TEACHCLOUD_REPORT_OPEN_COURSE_EDIT_API = "/api/report/open/course_edit";
  110. // public static final String TEACHCLOUD_REPORT_OPEN_COURSE_DEL_API = "/api/report/open/course_del";
  111. public static final String TEACHCLOUD_REPORT_OPEN_CALCULATE_API = "/api/report/open/calculate";
  112. public static final String TEACHCLOUD_REPORT_OPEN_PUBLISH_API = "/api/report/open/publish";
  113. public static final String TEACHCLOUD_REPORT_SSO_LOGIN_API = "/api/report/sso/login";
  114. /**
  115. * 分布式印刷api
  116. */
  117. public static final String TEACHCLOUD_PRINT_NOTIFY_ANALYSIS_PROGRESS_API = "/api/admin/print/notify/analysis/progress";
  118. public static final String TEACHCLOUD_PRINT_OPEN_PAPER_CONFIG_API = "/api/admin/print/open/paper_config";
  119. public static final String TEACHCLOUD_PRINT_OPEN_PAPER_DIMENSION_API = "/api/admin/print/open/paper_dimension";
  120. public static final String TEACHCLOUD_PRINT_OPEN_PAPER_STRUCTURE_API = "/api/admin/print/open/paper_structure";
  121. public static final String TEACHCLOUD_PRINT_OPEN_PAPER_EVALUATION_API = "/api/admin/print/open/paper_evaluation";
  122. public static final String TEACHCLOUD_PRINT_OPEN_EXAM_STUDENT_SCORE_API = "/api/admin/print/open/exam_student_score";
  123. /**
  124. * 题库cas登录地址
  125. */
  126. public static final String QUESTION_CAS_ADMIN_LOGIN_OPEN_API = "/admin/login-open";
  127. /**
  128. * 系统配置
  129. */
  130. public static final String EXAM_TASK = "examTask";
  131. public static final String START_PARENT = "../";
  132. public static final String DATE_TIME_FORMAT = "%02d";
  133. public static final String PRINT_DELETE_DATA_FILE_NAME = "db/4、delete-data.sql";
  134. // public static final String SYS_USER_INIT_PASSWORD = "sys.user.initPassword";
  135. // public static final String SYS_WARNING_DAYS = "sys.warning.days";
  136. public static final String SYS_CODE_ENABLE = "sys.code.enable";
  137. // public static final String SYS_MESSAGE_ENABLE = "sys.message.enable";
  138. // public static final String SYS_MESSAGE_RESEND_COUNT = "sys.message.resendCount";
  139. public static final String SYS_CONFIG_KEY_CHARSETS = "sys.txt.charset";
  140. public static final String SYS_PDF_SIZE_LIST = "sys.pdf.size.list";
  141. public static final String ADMIN_LOGO_URL = "admin.logo.url";
  142. public static final String ATTACHMENT_TYPE = "attachment.type";
  143. public static final String ATTACHMENT_LENGTH = "attachment.length";
  144. public static final String ATTACHMENT_SIZE = "attachment.size";
  145. public static final String AUTO_CREATE_PDF_RESET_MAX_COUNT = "auto.create.pdf.reset.max.count";
  146. public static final String THREAD_POOL_CORE_SIZE = "thread.pool.core.size";
  147. public static final String CUSTOM_THREAD_POOL_CORE_SIZE = "custom.thread.pool.core.size";
  148. public static final String SESSION_ACTIVE = "session.active";
  149. public static final String CLOUDMARK_SYNC_MODE = "cloudmark.sync.mode";
  150. public static final String CLOUDMARK_HOST_URL = "cloudmark.host.url";
  151. public static final String SMS_NORMAL_CODE = "sms.normal.code";
  152. public static final String CODE_EXPIRED_TIME = "code.expired.time";
  153. public static final String CODE_SEND_INTERVAL = "code.send.interval";
  154. public static final String TEACHCLOUD_REPORT_HOST_URL = "teachcloud.report.host.url";
  155. public static final String TEACHCLOUD_PRINT_OPEN_CALLBACK_PWD = "teachcloud.print.open.callback.pwd";
  156. public static final String QUESTION_HOST_URL = "question.host.url";
  157. public static final String TEACHCLOUD_REPORT_STUDENT_URL = "teachcloud.report.student.url";
  158. public static final String TEACHCLOUD_REPORT_LOGIN_URL = "teachcloud.report.login.url";
  159. public static final String TEACHCLOUD_PRINT_HOST_URL = "teachcloud.print.host.url";
  160. public static final String TEACHCLOUD_REPORT_LOCATION_URL = "teachcloud.report.location.url";
  161. public static final String TEACHCLOUD_PRINT_HOST_DEFAULT_URL = "teachcloud.print.host.default.url";
  162. public static final String OPEN_FLOW_MESSAGE_PUSH = "open.flow.message.push";//是否开启消息推送
  163. public static final String FLOW_MESSAGE_TYPE = "flow.message.type";//消息类型,标准/非标准
  164. public static final String MQ_HOST_URL = "mq.host.url";//消息中心地址,目前是cas单点登录地址
  165. public static final String SMS_SIGN_NAME = "sms.sign.name";
  166. public static final String SMS_TPL_CODE = "sms.tpl.code";
  167. public static final String SMS_AUDIT_PASS_CODE = "sms.audit.pass.code";
  168. public static final String SMS_AUDIT_NOT_PASS_CODE = "sms.audit.not.pass.code";
  169. public static final String SMS_EXAM_TASK_CREATE_CODE = "sms.exam.task.create.code";
  170. public static final String SMS_EXAM_TASK_WILL_EXPIRE_CODE = "sms.exam.task.will.expire.code";
  171. public static final String SMS_EXAM_TASK_OVERDUE_CODE = "sms.exam.task.overdue.code";
  172. public static final String SMS_ALLOCATION_WILL_EXPIRE_CODE = "sms.allocation.will.expire.code";
  173. public static final String SMS_ALLOCATION_OVERDUE_CODE = "sms.allocation.overdue.code";
  174. public static final String SMS_AUDIT_CREATE_CODE = "sms.audit.create.code";
  175. public static final String SMS_AUDIT_REVIEW_CODE = "sms.audit.review.code";
  176. public static final String SMS_AUDIT_WILL_EXPIRE_CODE = "sms.audit.will.expire.code";
  177. public static final String SMS_AUDIT_OVERDUE_CODE = "sms.audit.overdue.code";
  178. public static final String SMS_AUDIT_REJECT_CODE = "sms.audit.reject.code";
  179. public static final String SMS_UPLOAD_STRUCTURE_CODE = "sms.upload.structure.code";
  180. public static final String SMS_AUDIT_COPY_USER_CODE = "sms.audit.copy.user.code";
  181. /**
  182. * 系统学校配置
  183. */
  184. public static final String ACCOUNT_SMS_VERIFY = "account.sms.verify";
  185. public static final String TEACHCLOUD_EXCHANGE_HOST_URL = "teachcloud.exchange.host.url";
  186. public static final String PDF_SIZE_LIST = "pdf.size.list";
  187. /**
  188. * 系统常量
  189. */
  190. public static final String SEND_FLOW_MQ = "sendFlowMq";
  191. public static final String SEND_FLOW_START_MQ = "sendFlowStartMq";
  192. public static final String PT = "PT";
  193. public static final String CHARSET_NAME = "UTF-8";
  194. // public static final String CHARSET_GB2312 = "gb2312";
  195. public static final String CHARSET_GBK = "gbk";
  196. public static final Charset CHARSET = Charset.forName(CHARSET_NAME);
  197. public static final String MD5 = "MD5";
  198. public static final String SUCCESS = "success";
  199. public static final String EXTEND_COLUMN = "extendColumn";
  200. public static final String USER_DIR = "user.dir";
  201. public static final String OS_NAME = "os.name";
  202. public static final String TMP_DIR = "java.io.tmpdir";
  203. // public static final String PDF_TEMP = "pdf-temp";
  204. // public static final String FILE_TEMP = "file-temp";
  205. public static final String TEMP = "temp";
  206. public static final String SESSION = "session:";
  207. public static final String TASK = "task";
  208. public static final String ORG_PREFIX = "code";
  209. public static final String TB_TASK_ID = "tbTaskId";
  210. public static final String TB_SYNC_TASK = "tbSyncTask";
  211. public static final String TB_SYNC_TASK_ID = "tbSyncTaskId";
  212. public static final String USER = "account";
  213. public static final String SCHOOL_ID = "schoolId";
  214. public static final String SCHOOL = "school";
  215. public static final String ORG = "org";
  216. public static final String ERROR = "/error";
  217. public static final String METHOD = "post";
  218. public static final String DEFAULT_PASSWORD = "MTIzNDU2";
  219. public static final String UPDATE_TIME = "updateTime";
  220. public static final String PATH = "path";
  221. public static final String PDF_PATH = "pdfPath";
  222. public static final String HTML_PATH = "htmlPath";
  223. public static final String TYPE = "type";
  224. public static final String LOCAL = "local";
  225. public static final String OSS = "oss";
  226. public static final String LOGO = "logo";
  227. public static final String UPLOAD_TYPE = "uploadType";
  228. public static final String ID = "id";
  229. public static final String MODEL = "model";
  230. public static final String VERSION = "version";
  231. public static final String VERSION_VALUE = "3.2.6.1";
  232. public static final String FLOW_ENTITY_ID = "flowEntityId";
  233. public static final String CUSTOM_FLOW_ID = "customFlowId";
  234. public static final String ACT_FLOW_ID = "actFlowId";
  235. public static final String FLOW_PROCESS_VAR_MAP = "flowProcessVarMap";
  236. public static final String PROCESS_DEFINITION_ID = "processDefinitionId";
  237. public static final String FILE = "file";
  238. public static final String SIZE = "size";
  239. public static final String HTML_PREFIX = ".html";
  240. public static final String PDF_PREFIX = ".pdf";
  241. public static final String JSON_PREFIX = ".json";
  242. public static final String FTL_PREFIX = ".ftl";
  243. public static final String ZIP_PREFIX = ".zip";
  244. public static final String TXT_PREFIX = ".txt";
  245. public static final String WINDOWS = "Windows";
  246. public static final String EXCEL_PREFIX = ".xlsx";
  247. public static final String JPG_PREFIX = ".jpg";
  248. public static final String TEMP_PREFIX = ".temp";
  249. public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
  250. public static final String DATE_PATTERN = "yyyy-MM-dd";
  251. public static final String TIME_PATTERN = "HH:mm";
  252. public static final String BACK_UP_DATE_PATTERN = "yyyyMMddHHmmss";
  253. public static final int PAGE_NUMBER = 0;
  254. public static final int PAGE_SIZE = 10000000;
  255. public static final int PAGE_SIZE_MIN = 10;
  256. public static final int PAGE_SIZE_MAX = 500;
  257. public static final int PAGE_NUMBER_MIN = 1;
  258. public static final int IN_SIZE_MAX = 1000;
  259. public static final int ALL_CARD = -1;
  260. public static final String MANUAL = "manual";
  261. public static final String DELIMITER = ":";
  262. public static final String COMMA = ",";
  263. public static final int FINAL_SCALE = 1;
  264. public static final int CALCULATE_SCALE = 4;
  265. // public static final int OPER_SCALE = 8;
  266. public static final BigDecimal PERCENT = new BigDecimal(100);
  267. public static final String HYPHEN = "-";
  268. public static final String DEFAULT_SIGN = "#";
  269. public static final String PARENT_ORG = "教务处";
  270. public static final String SCHOOL_CODE = "wdfx";
  271. public static final String ADMIN_CODE = "admin";
  272. public static final String AUTH = "auth";//命题老师id
  273. // public static final int MAX_RETRY_CREATE_PDF_COUNT = 5;
  274. //英文字母、数字、中文括号、英文括号、下划线(_)、减号(-)、中文横线(—)
  275. public static final String REGULAR_EXPRESSION_OF_CODE = "[a-zA-Z0-9](\\w+)?-?(\\w+)?—?(\\w+)?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\w+)?";
  276. public static final String REGULAR_EXPRESSION_OF_PHONE = "((\\d{3,4})|(\\(\\d{3,4}\\)-))?\\d{7,8}";
  277. public static final String REGULAR_EXPRESSION_OF_CODE_PRIMARY_DIMENSION = "[A-Z]";
  278. public static final String REGULAR_EXPRESSION_OF_CODE_SECOND_DIMENSION = "[A-Z][1-9][0-9]*";
  279. public static final String SYS_USER = "sysUser";
  280. public static final String ERROR_DATA_LIST = "errorDataList";
  281. public static final String DATA_COUNT = "dataCount";
  282. public static final String SUCCESS_DATA_COUNT = "successDataCount";
  283. public static final String ERROR_DATA_COUNT = "errorDataCount";
  284. public static final List<Long> MENU_MANAGE = Arrays.asList(507L, 508L, 530L, 531L, 675L, 676L, 795L, 796L, 797L, 798L, 799L, 800L, 801L, 802L);
  285. public static final float PAPER_DEVIATION = 2;
  286. public static final String COMMA_OF_ENGLISH = ",";
  287. public static final String COMMA_OF_CHINESE = ",";
  288. public static final String PAUSE_SIGN = "、";
  289. public static final String ORG_SPLIT = "/";
  290. public static final String PUSH_OPERATE_NOTICE = "操作成功,请去基础配置 -> 系统设置 -> 同步管理中查看结果";
  291. public static final String EXCEL_PROTECT_KEY = "Qmth87863577";
  292. public static final String ZIP_ENCRYPT_PWD = "qmthzip";
  293. public static final String GET = "get";
  294. public static final String PARAMS = "params";
  295. public static final String RETURN_URL = "returnUrl";
  296. public static final String SIGNATURE = "signature";
  297. public static final String GET_UNKNOWN = "?";
  298. public static final String GET_SYMBOL = "&";
  299. public static final String GET_EQUAL = "=";
  300. public static final String PATH_MATCH = "*";
  301. public static final String CATALOG_LINK = "->";
  302. public static final String OPERATE_LINK = "--";
  303. public static final Integer DEFAULT_BACKUP_COUNT = 1;
  304. /**
  305. * oss url过期时间
  306. */
  307. // public static final int OSS_URL_EXPIRE = 5 * 60 * 1000;//过期时间5分钟
  308. /**
  309. * 缓存配置
  310. */
  311. public static final String USER_OAUTH_CACHE = "user:oauth:cache";
  312. public static final String USER_ACCOUNT_CACHE = "user:account:cache";
  313. public static final String USER_MENU_CACHE = "user:menu:cache";
  314. public static final String SCHOOL_CACHE = "school:cache";
  315. public static final String SCHOOL_CODE_CACHE = "school:code:cache";
  316. public static final String ORG_CACHE = "org:cache";
  317. public static final String PRIVILEGE_URL_CACHE = "privilege:url:cache";
  318. public static final String ROLE_PRIVILEGE_CACHE = "role:privilege:cache";
  319. public static final String USER_ROLE_PRIVILEGE_CACHE = "user:role:privilege:cache";
  320. public static final String ROLE_CACHE = "role:cache";
  321. // public static final String AUTH_INFO_CACHE = "auth:info:cache";
  322. public static final String SYS_CONFIG_CACHE = "sys:config:cache";
  323. public static final String SCHOOL_PRIVILEGE_CACHE = "school:privilege:cache";
  324. public static final String SCHOOL_ROLE_CACHE = "school:role:cache";
  325. public static final String CUSTOM_PRIVILEGE_CACHE = "custom:privilege:cache";
  326. public static final String CUSTOM_ROLE_CACHE = "custom:role:cache";
  327. public static final String NUMBER_CACHE = "school:number:cache:";
  328. public static final String ORG_COLLEGE_LEVEL_CACHE = "org:college:level:cache";
  329. public static final String ORG_CODE_CACHE = "org:code:cache";
  330. public static final String EXAM_TASK_SEQUENCE_CACHE = "exam:task:sequence:cache";
  331. /**
  332. * 报表缓存
  333. */
  334. public static final String EXAM_STUDENT_REPORT = "report:cache:examStudent";
  335. public static final String COLLEGE_DEAN_REPORT = "report:cache:collegeDean";
  336. public static final String COLLEGE_COURSE_REPORT = "report:cache:collegeCourse";
  337. public static final String SURVEY_TEACHER_VIEW_REPORT = "report:cache:surveyTeacherView";
  338. // public static final String TEACHER_VIEW_REPORT = "report:cache:teacherView";
  339. // public static final String TEACHER_ANSWER_VIEW_REPORT = "report:cache:teacherAnswerView";
  340. /**
  341. * 鉴权
  342. */
  343. public static final String HEADER_AUTHORIZATION = "Authorization";
  344. public static final String HEADER_TIME = "time";
  345. public static final String HEADER_PLATFORM = "platform";
  346. public static final String HEADER_DEVICE_ID = "deviceId";
  347. public static final String CURRENT_PRIVILEGE_ID = "privilegeId";
  348. public static final String TOKEN = "token";
  349. public static final String SIGN = "sign";
  350. /**
  351. * redis
  352. */
  353. public static final int DEFAULT_SESSION_EXPIRE = 1;//过期时间1天
  354. public static final long REDIS_DEFAULT_EXPIRE_TIME = 24 * 60L * 60L;//过期时间24小时
  355. public static final long REDIS_THIRD_USER_AUTH_EXPIRE_TIME = 2 * 60L;//过期时间2分钟
  356. /**
  357. * redis mq
  358. */
  359. public static final String REDIS_LOCK_MQ_PREFIX = "redis:lock:mq:";
  360. public static final int REDIS_MQ_MAX_RECONSUME = 5;
  361. public static final String MQ_TOPIC_BUFFER_LIST = "mq:topic:buffer:list";
  362. public static final String REDIS_LOCK_BATCH_NO_PREFIX = "redis:lock:batchNo:";//
  363. public static final String REDIS_LOCK_GRADE_COURSE_DELETE_PREFIX = "redis:lock:courseInfo:";
  364. public static final String REDIS_LOCK_GRADE_EXAM_DELETE_PREFIX = "redis:lock:exam:";
  365. /**
  366. * redis lock
  367. */
  368. public static final int MAX_RETRY_COUNT = 30;
  369. public static final long REDIS_CACHE_TIME_OUT = 60L;
  370. public static final long REDIS_LOCK_MQ_TIME_OUT = 60L;
  371. public static final long REDIS_LOCK_BATCH_NO_TIME_OUT = 60L * 30;
  372. /**
  373. * aes相关
  374. */
  375. public static final String AES = "AES";
  376. public static final String AES_MODE_PKCS5 = "AES/CBC/PKCS5Padding";//用这个模式,规则必须为16位
  377. public static final String AES_MODE_PKCS7 = "AES/CBC/PKCS7Padding";//用这个模式,规则必须为16位
  378. public static final String AES_RULE = "1234567890123456";//aes密钥
  379. /**
  380. * 变量
  381. */
  382. // public static String TEMP_FILES_DIR;
  383. // public static String PDF_TEMP_FILES_DIR;
  384. /**
  385. * excel相关
  386. */
  387. public static final String XLSX = "xlsx";
  388. public static final String XLS = "xls";
  389. /**
  390. * 线程池配置
  391. */
  392. public static final String THREAD_POOL_NAME = "taskThreadPool";
  393. // public static final int THREAD_POOL_CORE_POOL_SIZE = 5;
  394. // public static final int THREAD_POOL_MAX_POOL_SIZE = 100;
  395. public static final int THREAD_POOL_KEEP_ALIVE_SECONDS = 10;
  396. public static final int THREAD_POOL_QUEUE_CAPACITY = 500;
  397. /**
  398. * mq消息
  399. */
  400. public static final int DELIVERED_ACK_TYPE = 0;//消息"已发出",但尚未处理结束
  401. public static final int POSION_ACK_TYPE = 1;//消息"错误",通常表示"抛弃"此消息,比如消息重发多次后,都无法正确处理时,消息将会被删除或者DLQ(死信队列)
  402. public static final int STANDARD_ACK_TYPE = 2;//"标准"类型,通常表示为消息"处理成功",broker端可以删除消息了
  403. public static final int REDELIVERED_ACK_TYPE = 3;//消息需"重发",比如consumer处理消息时抛出了异常,broker稍后会重新发送此消息
  404. // public static final int INDIVIDUAL_ACK_TYPE = 4;//表示只确认"单条消息",无论在任何ACK_MODE下
  405. // public static final int UNMATCHED_ACK_TYPE = 5;//BROKER间转发消息时,接收端"拒绝"消息
  406. // public static final int UNSEND_ACK_TYPE = 6;//消息未发出
  407. /**
  408. * activiti
  409. */
  410. public static final String APPROVE_ID = "approveId";//审批id
  411. public static final String FLOW_SUBMIT = "flowSubmit";//命题提交申请
  412. public static final String FLOW_JOIN_TYPE = "flowJoinType";//流程关联类型
  413. public static final String OLD_FLOW_ID = "oldFlowId";//旧流程id
  414. public static final String FLOW_TYPE = "flowType";//流程类型
  415. public static final String FLOW_ID = "flowId";//流程id
  416. public static final String FLOW_TASK_ID = "flowTaskId";//流程任务id
  417. public static final String APPROVE = "approve";//流程审核变量
  418. public static final String AGGINESS_MAP = "agginessMap";//流程审批人变量
  419. public static final String APPROVE_PASS_MAP = "approvePassMap";//流程审批通过变量
  420. public static final String APPROVE_REJECT_MAP = "approveRejectMap";//流程审批驳回变量
  421. public static final String APPROVE_USER_IDS = "approveUserIds";//流程审批人列表
  422. public static final String SETUP_MAP = "setupMap";//流程步骤变量
  423. public static final String APPROVE_SETUP = "approveSetup";//流程节点
  424. public static final String APPROVE_OPERATION = "approveOperation";//流程操作
  425. public static final String FLOW_STATUS = "flowStatus";//流程状态
  426. public static final String APPROVE_REMARK = "approveRemark";//流程审批意见
  427. public static final String OBJECT_ID = "objectId";
  428. public static final String OBJECT_DATA = "objectData";
  429. public static final String APPROVE_TF_FLOW_LOG = "TFFlowLog";//流程院长自动审批
  430. public static final String APPROVE_TF_FLOW_APPROVE = "TFFlowAppove";//流程流转记录
  431. public static final String FLOW_WORK_MESSAGE = "workMsg";
  432. public static final String FLOW_VIEW_MESSAGE = "viewMsg";
  433. public static final String PAPAER_ATTACHMENT_IDS = "paperAttachmentIds";//命题附件ids
  434. public static final String REDIS_LOCK_FLOW_TASK_PREFIX = "redis:lock:flow:task:";//流程节点锁
  435. public static final String REDIS_LOCK_EXAM_TASK_FLOW_PREFIX = "redis:lock:exam:task:flow:";//考试任务流程节点锁
  436. public static final String REDIS_LOCK_PAPER_NUMBER_PREFIX = "redis:lock:paper:number:";//试卷编号锁
  437. public static final String REDIS_LOCK_COURSE_CODE_SEQUENCE_PREFIX = "redis:lock:courseCode:sequence:";//课程序号锁
  438. public static final long REDIS_LOCK_FLOW_TASK_TIME_OUT = 60L * 2;
  439. public static final long REDIS_LOCK_EXAM_TASK_FLOW_TIME_OUT = 60L * 2;
  440. public static final String REDIS_LOCK_FLOW_PREFIX = "redis:lock:flow:";//流程锁
  441. public static final long REDIS_LOCK_FLOW_TIME_OUT = 60L * 2;
  442. public static final String REDIS_LOCK_CUSTOM_FLOW_PREFIX = "redis:lock:custom:flow:";//自定义流程锁
  443. public static final long REDIS_LOCK_CUSTOM_FLOW_TIME_OUT = 60L * 2;
  444. public static final String REDIS_LOCK_CALCULATE_PREFIX = "redis:lock:calculate:";//计算锁
  445. public static final long REDIS_LOCK_CALCULATE_TIME_OUT = 60L * 60;
  446. public static final long REDIS_LOCK_PAPER_NUMBER_TIME_OUT = 60L * 2;
  447. /**
  448. * 机器心跳
  449. */
  450. public static final String CURRENT_TASK_MACHINE_ID = "current_task_machine_id";//当前机器id
  451. public static final String TASK_MACHINE_ID = "task_machine_id:";//任务机器id
  452. public static final String TASK_MACHINE_ID_LIKE = "task_machine_id*";//任务机器like
  453. public static final String LOG_ERROR = "请求出错:{}";
  454. /**
  455. * http设置
  456. */
  457. public static final int CONNECT_TIME_OUT = 1000 * 60 * 2;//请求超时
  458. public static final int SOCKET_CONNECT_TIME_OUT = 1000 * 60 * 30;//读取数据超时
  459. // /**
  460. // * 初始化附件文件路径
  461. // */
  462. // public static void initTempFiles() {
  463. // File fileTempDir = null, pdfTempDir = null;
  464. // DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
  465. //
  466. // if (Objects.nonNull(dictionaryConfig.sysDomain().getFileTempPath()) && !Objects.equals("", dictionaryConfig.sysDomain().getFileTempPath())) {
  467. // fileTempDir = new File(dictionaryConfig.sysDomain().getFileTempPath().trim());
  468. // } else {
  469. // StringJoiner fileTempLocalPath = new StringJoiner("").add(System.getProperty(USER_DIR));
  470. // String mkdir = fileTempLocalPath.toString().substring(0, fileTempLocalPath.toString().lastIndexOf(File.separator));
  471. // fileTempDir = new File(new StringBuffer(mkdir).append(File.separator).append(FILE_TEMP).toString());
  472. // }
  473. // if (Objects.nonNull(fileTempDir) && !fileTempDir.exists()) {
  474. // fileTempDir.mkdirs();
  475. // }
  476. //
  477. // if (Objects.nonNull(dictionaryConfig.sysDomain().getPdfTempPath()) && !Objects.equals("", dictionaryConfig.sysDomain().getPdfTempPath())) {
  478. // pdfTempDir = new File(dictionaryConfig.sysDomain().getPdfTempPath().trim());
  479. // } else {
  480. // StringJoiner pdfTempLocalPath = new StringJoiner("").add(System.getProperty(USER_DIR));
  481. // String mkdir = pdfTempLocalPath.toString().substring(0, pdfTempLocalPath.toString().lastIndexOf(File.separator));
  482. // pdfTempDir = new File(new StringBuffer(mkdir).append(File.separator).append(PDF_TEMP).toString());
  483. // }
  484. // if (Objects.nonNull(pdfTempDir) && !pdfTempDir.exists()) {
  485. // pdfTempDir.mkdirs();
  486. // }
  487. // TEMP_FILES_DIR = fileTempDir.getPath();
  488. // PDF_TEMP_FILES_DIR = pdfTempDir.getPath();
  489. // }
  490. /**
  491. * id转换为long
  492. *
  493. * @return
  494. */
  495. public static Long convertIdToLong(String id) {
  496. return Objects.nonNull(id) && id.length() > 0 ? Long.parseLong(id) : null;
  497. }
  498. // /**
  499. // * 获取全局uuid
  500. // *
  501. // * @return
  502. // */
  503. // public static String getUuid() {
  504. // return String.valueOf(UUID.randomUUID()).replaceAll(SystemConstant.HYPHEN, "");
  505. // }
  506. /**
  507. * 获取全局uuid
  508. *
  509. * @return
  510. */
  511. public static String getNanoId() {
  512. return NanoIdUtils.randomNanoId();
  513. }
  514. /**
  515. * 获取根目录
  516. *
  517. * @return
  518. */
  519. public static String getUserDir() {
  520. return System.getProperty(SystemConstant.USER_DIR);
  521. }
  522. /**
  523. * 获取数据库uuid
  524. *
  525. * @return
  526. */
  527. public static Long getDbUuid() {
  528. UidService uidservice = SpringContextHolder.getBean(UidService.class);
  529. return uidservice.getId();
  530. }
  531. /**
  532. * 试卷类型转换
  533. *
  534. * @param paperType
  535. * @return
  536. */
  537. public static String convertPaperType(String paperType) {
  538. paperType = paperType.toLowerCase();
  539. int ascii = (int) paperType.charAt(0);
  540. return String.valueOf(ascii + 704);
  541. }
  542. /**
  543. * 模糊查询时调用以去除符号"%","_"特殊字符对查询结果的影响
  544. *
  545. * @param param 要校验的参数
  546. * @return 转译后的参数
  547. */
  548. public static String translateSpecificSign(String param) {
  549. if (param == null) {
  550. return null;
  551. }
  552. if (param.contains("%")) {
  553. param = param.replaceAll("%", "\\\\%");
  554. }
  555. if (param.contains("_")) {
  556. param = param.replaceAll("_", "\\\\_");
  557. }
  558. return param;
  559. }
  560. public static void verifyLength(String str, int length, String name) {
  561. if (str == null || str.length() == 0 || str.equals("null")) {
  562. throw ExceptionResultEnum.ERROR.exception(name + "不能为空");
  563. }
  564. if (str.length() > length) {
  565. throw ExceptionResultEnum.ERROR.exception("[" + name + ":" + str + "]' 超过长度限制 : " + length);
  566. }
  567. }
  568. public static boolean strNotNull(String str) {
  569. return str != null && str.length() > 0 && !str.equals("null");
  570. }
  571. /**
  572. * Long 类型的参数不为空
  573. *
  574. * @param x 参数
  575. * @return true:不为空、false:为空
  576. */
  577. public static boolean longNotNull(Long x) {
  578. return x != null && x > 0;
  579. }
  580. public static Long getHeadOrUserSchoolId() {
  581. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  582. Long schoolId;
  583. if (Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild())) {
  584. schoolId = Long.parseLong(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString());
  585. } else {
  586. schoolId = sysUser.getSchoolId();
  587. }
  588. return schoolId;
  589. }
  590. /**
  591. * 检验字段
  592. *
  593. * @param obj 被检验的映射类对象
  594. * @param clazz 该对象的类
  595. * @return 检验结果(状态 、 信息)
  596. * @throws IllegalAccessException 异常
  597. */
  598. public static DBVerifyResult verifyDBFields(Object obj, Class<?> clazz) throws IllegalAccessException {
  599. Field[] fields = clazz.getDeclaredFields();
  600. for (Field field : fields) {
  601. field.setAccessible(true); // 解除封装
  602. String fieldValue = String.valueOf(field.get(obj));
  603. DBVerify dbVerify = field.getAnnotation(DBVerify.class);
  604. if (Objects.isNull(dbVerify)) {
  605. continue;
  606. }
  607. String value = dbVerify.value();
  608. boolean required = dbVerify.required();
  609. int min = dbVerify.min();
  610. int max = dbVerify.max();
  611. if (required) {
  612. if (fieldValue == null || fieldValue.length() == 0 || fieldValue.equals("null")) {
  613. return new DBVerifyResult(false, "[" + value + "]为必须字段,不能为空");
  614. }
  615. }
  616. if (fieldValue != null && min > 0) {
  617. if (fieldValue.length() < min) {
  618. return new DBVerifyResult(false, "[" + value + "]低于最小长度限制,最小限制[" + min + "]");
  619. }
  620. }
  621. if (fieldValue != null && max > 0) {
  622. if (fieldValue.length() > max) {
  623. return new DBVerifyResult(false, "[" + value + "]超过最大长度限制,最大限制[" + max + "]");
  624. }
  625. }
  626. }
  627. return new DBVerifyResult(true, "成功");
  628. }
  629. /**
  630. * 验证参数任意一个为空
  631. *
  632. * @param objects 要非空校验的参数
  633. */
  634. public static boolean isOneNull(Object... objects) {
  635. boolean result = false;
  636. for (Object object : objects) {
  637. if (Objects.isNull(object)) {
  638. result = true;
  639. } else if (object instanceof String) {
  640. String param = String.valueOf(object);
  641. if (param.length() == 0 || param.equals("null")) {
  642. result = true;
  643. }
  644. } else if (object instanceof Long) {
  645. Long param = SystemConstant.convertIdToLong(String.valueOf(object));
  646. if (param == null || param == 0) {
  647. result = true;
  648. }
  649. } else if (object instanceof Integer) {
  650. int param = Integer.parseInt(String.valueOf(object));
  651. if (param == 0) {
  652. result = true;
  653. }
  654. }
  655. }
  656. return result;
  657. }
  658. /**
  659. * 构建流程变量
  660. *
  661. * @param objectId
  662. * @param o
  663. * @param tfCustomTypeEnum
  664. * @param approveId
  665. * @param flowSubmit
  666. * @return
  667. */
  668. public static Map<String, Object> buildFlowVar(Long objectId,
  669. Object o,
  670. TFCustomTypeEnum tfCustomTypeEnum,
  671. Long approveId,
  672. boolean flowSubmit) {
  673. Map<String, Object> map = new HashMap<>();
  674. map.computeIfAbsent(SystemConstant.OBJECT_ID, v -> objectId);
  675. map.computeIfAbsent(SystemConstant.OBJECT_DATA, v -> o);
  676. map.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> tfCustomTypeEnum);
  677. map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> approveId);
  678. map.computeIfAbsent(SystemConstant.FLOW_SUBMIT, v -> flowSubmit);
  679. return map;
  680. }
  681. /**
  682. * 跨步数组(将list集合按照cpu核心数量拆分成多个集合)
  683. *
  684. * @param datasource 数据源
  685. * @param <T> 泛型
  686. * @return 拆分好地集合的集合
  687. */
  688. public static <T> List<List<T>> getStepList(List<T> datasource) {
  689. int cpuNum = Runtime.getRuntime().availableProcessors();
  690. int step = datasource.size() / cpuNum + 1;
  691. List<List<T>> result = new ArrayList<>();
  692. int size = datasource.size();
  693. for (int i = 0; i < size; i = i + step) {
  694. List<T> cell = datasource.stream().skip(i).limit(step).collect(Collectors.toList());
  695. result.add(cell);
  696. }
  697. return result;
  698. }
  699. /**
  700. * URL 编码, Encode默认为UTF-8.
  701. */
  702. public static String urlEncode(String part) {
  703. try {
  704. return URLEncoder.encode(part, SystemConstant.CHARSET_NAME);
  705. } catch (UnsupportedEncodingException e) {
  706. throw ExceptionResultEnum.ERROR.exception(e.getMessage());
  707. }
  708. }
  709. /**
  710. * 图片转换
  711. *
  712. * @param imgBase64
  713. * @param filePath
  714. * @throws IOException
  715. */
  716. public static void base64ToImage(String imgBase64, String filePath) throws IOException {
  717. OutputStream out = null;
  718. try {
  719. byte[] b = Base64Util.decode(imgBase64);
  720. out = new FileOutputStream(filePath);
  721. IOUtils.write(b, out);
  722. } catch (Exception e) {
  723. e.printStackTrace();
  724. } finally {
  725. if (Objects.nonNull(out)) {
  726. out.flush();
  727. out.close();
  728. }
  729. }
  730. }
  731. /**
  732. * 获取本地文件host
  733. *
  734. * @param hostUrl
  735. * @return
  736. */
  737. public static String getLocalFileHost(String hostUrl) {
  738. CommonCacheService commonCacheService = SpringContextHolder.getBean(CommonCacheService.class);
  739. SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
  740. BasicSchool basicSchool = commonCacheService.schoolCache(sysUser.getSchoolId());
  741. return SystemConstant.getHost(hostUrl, basicSchool.getCode());
  742. }
  743. /**
  744. * 获取host
  745. *
  746. * @param hostUrl
  747. * @param schoolCode
  748. * @return
  749. */
  750. public static String getHost(String hostUrl, String schoolCode) {
  751. if (hostUrl.contains(SystemConstant.PATH_MATCH)) {
  752. hostUrl = hostUrl.replace(SystemConstant.PATH_MATCH, schoolCode);
  753. }
  754. return hostUrl;
  755. }
  756. /**
  757. * 获取本地文件路径
  758. *
  759. * @param filePath
  760. * @return
  761. */
  762. public static String getLocalFilePath(String filePath) {
  763. DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
  764. FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
  765. boolean oss = dictionaryConfig.sysDomain().isOss();
  766. if (oss || (!oss && dictionaryConfig.fssPublicDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {
  767. if (!filePath.startsWith("http") || !filePath.startsWith("https")) {
  768. return filePath;
  769. } else {
  770. filePath = fileStoreUtil.getPrivateUrl(filePath, UploadFileEnum.FILE.getFssType());
  771. }
  772. } else {
  773. if (filePath.contains(dictionaryConfig.fssPublicDomain().getServer())) {
  774. filePath = filePath.substring(filePath.indexOf(dictionaryConfig.fssPublicDomain().getServer()), filePath.length());
  775. } else if (filePath.contains(dictionaryConfig.fssPrivateDomain().getServer())) {
  776. filePath = filePath.substring(filePath.indexOf(dictionaryConfig.fssPrivateDomain().getServer()), filePath.length());
  777. }
  778. }
  779. return filePath;
  780. }
  781. /**
  782. * 删除缓存
  783. *
  784. * @param userId
  785. */
  786. public static void deleteUserCache(Long userId) {
  787. CommonCacheService commonCacheService = SpringContextHolder.getBean(CommonCacheService.class);
  788. commonCacheService.removeUserCache(userId);
  789. commonCacheService.removeUserAuthCache(userId);
  790. commonCacheService.removeUserMenuCache(userId);
  791. commonCacheService.removeUserRolePrivilegeCache(userId);
  792. }
  793. /**
  794. * 获取临时文件
  795. *
  796. * @param suffix
  797. * @return
  798. */
  799. public static File getFileTempVar(String suffix) throws IOException {
  800. File fileTmpDir = new File(System.getProperty(SystemConstant.TMP_DIR));
  801. if (!fileTmpDir.exists()) {
  802. fileTmpDir.mkdirs();
  803. }
  804. File file = File.createTempFile(SystemConstant.TEMP, suffix);
  805. log.info("getFileTempVar_absolutePath:{}", file.getAbsolutePath());
  806. return file;
  807. }
  808. /**
  809. * 获取临时文件
  810. *
  811. * @param suffix
  812. * @return
  813. */
  814. public static File getFileTempDirVar(String suffix) {
  815. File fileTmpDir = new File(System.getProperty(SystemConstant.TMP_DIR));
  816. if (!fileTmpDir.exists()) {
  817. fileTmpDir.mkdirs();
  818. }
  819. File file = new File(System.getProperty(SystemConstant.TMP_DIR), SystemConstant.getNanoId() + suffix);
  820. log.info("getFileTempDirVar_absolutePath:{}", file.getAbsolutePath());
  821. return file;
  822. }
  823. /**
  824. * 获取临时文件
  825. *
  826. * @param fileName
  827. * @param suffix
  828. * @return
  829. */
  830. public static File getFileTempDirVar(String fileName, String suffix) {
  831. File file = getFileTempDirVarForZip(fileName, suffix);
  832. if (!file.exists()) {
  833. file.getParentFile().mkdirs();
  834. try {
  835. file.createNewFile();
  836. } catch (IOException e) {
  837. e.printStackTrace();
  838. }
  839. }
  840. log.info("getFileTempDirVar_absolutePath:{}", file.getAbsolutePath());
  841. return file;
  842. }
  843. /**
  844. * 获取临时文件
  845. *
  846. * @param fileName
  847. * @param suffix
  848. * @return
  849. */
  850. public static File getFileTempDirVarForZip(String fileName, String suffix) {
  851. File fileTmpDir = new File(System.getProperty(SystemConstant.TMP_DIR));
  852. if (!fileTmpDir.exists()) {
  853. fileTmpDir.mkdirs();
  854. }
  855. String fileNameNew = null;
  856. if (!StringUtils.isBlank(suffix)) {
  857. fileNameNew = fileName + suffix;
  858. } else {
  859. fileNameNew = fileName;
  860. }
  861. File file = new File(System.getProperty(SystemConstant.TMP_DIR), fileNameNew);
  862. log.info("getFileTempDirVar_absolutePath:{}", file.getAbsolutePath());
  863. return file;
  864. }
  865. /**
  866. * 获取dirname
  867. *
  868. * @param uploadFileEnum
  869. * @param fileSpearator
  870. * @return
  871. */
  872. public static StringJoiner getDirName(UploadFileEnum uploadFileEnum, boolean fileSpearator) {
  873. LocalDateTime nowTime = LocalDateTime.now();
  874. StringJoiner stringJoiner = new StringJoiner("");
  875. stringJoiner.add(uploadFileEnum.getTitle()).add(File.separator)
  876. .add(String.valueOf(nowTime.getYear())).add(File.separator)
  877. .add(String.format(SystemConstant.DATE_TIME_FORMAT, nowTime.getMonthValue())).add(File.separator)
  878. .add(String.format(SystemConstant.DATE_TIME_FORMAT, nowTime.getDayOfMonth()));
  879. if (fileSpearator) {
  880. stringJoiner.add(File.separator);
  881. }
  882. return stringJoiner;
  883. }
  884. /**
  885. * 获取dirname
  886. *
  887. * @param stringJoiner
  888. * @param uploadFileEnum
  889. * @param fileSpearator
  890. * @return
  891. */
  892. public static StringJoiner getDirName(StringJoiner stringJoiner, UploadFileEnum uploadFileEnum, boolean fileSpearator) {
  893. LocalDateTime nowTime = LocalDateTime.now();
  894. stringJoiner.add(uploadFileEnum.getTitle()).add(File.separator)
  895. .add(String.valueOf(nowTime.getYear())).add(File.separator)
  896. .add(String.format(SystemConstant.DATE_TIME_FORMAT, nowTime.getMonthValue())).add(File.separator)
  897. .add(String.format(SystemConstant.DATE_TIME_FORMAT, nowTime.getDayOfMonth()));
  898. if (fileSpearator) {
  899. stringJoiner.add(File.separator);
  900. }
  901. return stringJoiner;
  902. }
  903. /**
  904. * 获取pdf文件路径
  905. *
  906. * @param pdfDirName
  907. * @param file
  908. * @return
  909. * @throws Exception
  910. */
  911. public static String getPdfFilePath(String pdfDirName, File file) throws Exception {
  912. DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
  913. FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
  914. boolean oss = dictionaryConfig.sysDomain().isOss();
  915. if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {
  916. fileStoreUtil.ossUpload(pdfDirName, file, DigestUtils.md5Hex(new FileInputStream(file)), fileStoreUtil.getUploadEnumByPath(pdfDirName).getFssType());
  917. } else {
  918. fileStoreUtil.localUpload(pdfDirName, new FileInputStream(file), DigestUtils.md5Hex(new FileInputStream(file)), LocalCatalogEnum.LOCAL_PDF);
  919. }
  920. return pdfDirName;
  921. }
  922. /**
  923. * 创建txt文件
  924. *
  925. * @param message
  926. * @return
  927. * @throws Exception
  928. */
  929. public static JSONObject createTxt(String message) throws Exception {
  930. File txtFileTemp = null;
  931. try {
  932. FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
  933. DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
  934. boolean oss = dictionaryConfig.sysDomain().isOss();
  935. String ossStr = null;
  936. StringJoiner stringJoiner = new StringJoiner("");
  937. if (!oss && Objects.nonNull(dictionaryConfig.fssPublicDomain()) && !StringUtils.isBlank(dictionaryConfig.fssPublicDomain().getConfig()) && !dictionaryConfig.fssPublicDomain().getConfig().startsWith(SystemConstant.START_PARENT)) {
  938. stringJoiner.add(dictionaryConfig.fssPublicDomain().getConfig()).add(File.separator);
  939. }
  940. stringJoiner = SystemConstant.getDirName(stringJoiner, UploadFileEnum.FILE, true);
  941. stringJoiner.add(SystemConstant.getNanoId()).add(SystemConstant.TXT_PREFIX);
  942. String txtDirName = stringJoiner.toString();
  943. txtFileTemp = SystemConstant.getFileTempVar(SystemConstant.TXT_PREFIX);
  944. String charset = SystemConstant.CHARSET_NAME;
  945. CommonCacheService commonCacheService = SpringContextHolder.getBean(CommonCacheService.class);
  946. SysConfig sysConfig = commonCacheService.addSysConfigCache(SystemConstant.SYS_CONFIG_KEY_CHARSETS);
  947. if (Objects.nonNull(sysConfig) && StringUtils.isNotBlank(sysConfig.getConfigValue())) {
  948. charset = sysConfig.getConfigValue();
  949. }
  950. IOUtils.write(message.getBytes(charset), new FileOutputStream(txtFileTemp));
  951. String txtFileMd5 = DigestUtils.md5Hex(new FileInputStream(txtFileTemp));
  952. if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {
  953. ossStr = oss ? SystemConstant.OSS : SystemConstant.LOCAL;
  954. fileStoreUtil.ossUpload(txtDirName, txtFileTemp, txtFileMd5, fileStoreUtil.getUploadEnumByPath(txtDirName).getFssType());
  955. } else {
  956. ossStr = SystemConstant.LOCAL;
  957. fileStoreUtil.localUpload(txtDirName, new FileInputStream(txtFileTemp), txtFileMd5, LocalCatalogEnum.LOCAL_FILE);
  958. }
  959. JSONObject json = new JSONObject();
  960. json.put(SystemConstant.PATH, stringJoiner.toString());
  961. json.put(SystemConstant.TYPE, ossStr);
  962. json.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
  963. return json;
  964. } finally {
  965. if (Objects.nonNull(txtFileTemp)) {
  966. txtFileTemp.delete();
  967. }
  968. }
  969. }
  970. /**
  971. * 创建加密的zip
  972. *
  973. * @param zipFile
  974. * @param zipLocalRootPath
  975. * @param zipDirName
  976. * @return
  977. * @throws Exception
  978. */
  979. public static JSONObject createZip(File zipFile, String zipLocalRootPath, String zipDirName) throws Exception {
  980. FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
  981. DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
  982. Zip4jUtil.zipEncryptFile(zipFile.getPath(), zipLocalRootPath, SystemConstant.ZIP_ENCRYPT_PWD);
  983. boolean oss = dictionaryConfig.sysDomain().isOss();
  984. JSONObject jsonObject = new JSONObject();
  985. jsonObject.put(SystemConstant.PATH, zipDirName);
  986. String zipFileMd5 = DigestUtils.md5Hex(new FileInputStream(zipFile));
  987. if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
  988. fileStoreUtil.ossUpload(zipDirName, zipFile, zipFileMd5, fileStoreUtil.getUploadEnumByPath(zipDirName).getFssType());
  989. jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);
  990. } else {
  991. fileStoreUtil.localUpload(zipDirName, new FileInputStream(zipFile), zipFileMd5, LocalCatalogEnum.LOCAL_FILE);
  992. jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
  993. }
  994. jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
  995. return jsonObject;
  996. }
  997. /**
  998. * 创建加密的zip
  999. *
  1000. * @param zipFile
  1001. * @param sourceFileList
  1002. * @param zipDirName
  1003. * @return
  1004. * @throws Exception
  1005. */
  1006. public static JSONObject createZip(File zipFile, List<File> sourceFileList, String zipDirName) throws Exception {
  1007. FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
  1008. DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
  1009. Zip4jUtil.zipEncryptFile(zipFile.getPath(), sourceFileList, SystemConstant.ZIP_ENCRYPT_PWD);
  1010. boolean oss = dictionaryConfig.sysDomain().isOss();
  1011. JSONObject jsonObject = new JSONObject();
  1012. jsonObject.put(SystemConstant.PATH, zipDirName);
  1013. String zipFileMd5 = DigestUtils.md5Hex(new FileInputStream(zipFile));
  1014. if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {//上传至oss
  1015. fileStoreUtil.ossUpload(zipDirName, zipFile, zipFileMd5, fileStoreUtil.getUploadEnumByPath(zipDirName).getFssType());
  1016. jsonObject.put(SystemConstant.TYPE, oss ? SystemConstant.OSS : SystemConstant.LOCAL);
  1017. } else {
  1018. fileStoreUtil.localUpload(zipDirName, new FileInputStream(zipFile), zipFileMd5, LocalCatalogEnum.LOCAL_FILE);
  1019. jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
  1020. }
  1021. jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
  1022. return jsonObject;
  1023. }
  1024. public static int calcBackupCount(Double backupCount, Integer studentCount, Integer defaultValue) {
  1025. if (defaultValue == null) {
  1026. defaultValue = DEFAULT_BACKUP_COUNT;
  1027. }
  1028. if (backupCount == null || backupCount <= 0) {
  1029. return defaultValue;
  1030. }
  1031. // <1按比例,>=1按数量
  1032. if (backupCount < 1) {
  1033. if (studentCount == null || studentCount == 0) {
  1034. return defaultValue;
  1035. } else {
  1036. BigDecimal bigDecimal = new BigDecimal(studentCount).multiply(new BigDecimal(backupCount)).setScale(0, RoundingMode.CEILING);
  1037. if (bigDecimal.intValue() == 0) {
  1038. return defaultValue;
  1039. } else {
  1040. return bigDecimal.intValue();
  1041. }
  1042. }
  1043. } else {
  1044. return backupCount.intValue();
  1045. }
  1046. }
  1047. /**
  1048. * 生成文件
  1049. *
  1050. * @param url 文件路径+文件名称
  1051. * @param content 要生成的文件内容
  1052. */
  1053. public static File createJsonFile(String url, String content) {
  1054. File file = new File(url);
  1055. try {
  1056. if (!file.exists()) {
  1057. file.getParentFile().mkdirs();
  1058. file.createNewFile();
  1059. }
  1060. IOUtils.write(content.getBytes(StandardCharsets.UTF_8), new FileOutputStream(file));
  1061. } catch (Exception e) {
  1062. log.error(SystemConstant.LOG_ERROR, e);
  1063. }
  1064. return file;
  1065. }
  1066. // /**
  1067. // * 获取版本号
  1068. // *
  1069. // * @return
  1070. // */
  1071. // public static String getVersion() {
  1072. // MavenXpp3Reader reader = new MavenXpp3Reader();
  1073. // Model model = null;
  1074. // String version = null;
  1075. // try {
  1076. // model = reader.read(new FileReader("pom.xml"));
  1077. // version = model.getVersion();
  1078. // } catch (Exception e) {
  1079. // log.error(SystemConstant.LOG_ERROR, e);
  1080. // }
  1081. // return version;
  1082. // }
  1083. }