Verify.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  1. package cn.com.ty.lift.common.verify;
  2. import cn.hutool.core.util.ObjectUtil;
  3. /**
  4. * <p>
  5. * 条件判断,如果不符合条件,抛出异常
  6. * </p>
  7. * @author wcz
  8. * @since 2020/1/9 8:46
  9. */
  10. public interface Verify {
  11. String IDENTIFIER_INVALID = "标识ID无效";
  12. String MUST_GT0 = "数值必须大于0";
  13. String MUST_LT0 = "数值必须小于0";
  14. String MUST_EQ0 = "数值必须等于0";
  15. String MUST_NGT0 = "数值必须大于或等于0";
  16. String MUST_NLT0 = "数值必须小于或等于0";
  17. String MUST_NEQ0 = "数值必须不等于0";
  18. String DATA_MUST_EMPTY = "数据必须为空";
  19. String DATA_MISSING_INCORRECT = "缺少相关数据";
  20. String DATA_INVALID_CONDITIONS = "数据无效或条件不成立";
  21. static VerifyException judgeException(String message){
  22. return new VerifyException(message);
  23. }
  24. static boolean yesNull(Object value){
  25. return null == value;
  26. }
  27. static boolean noNull(Object value){
  28. return null != value;
  29. }
  30. static int compare0(Number value){
  31. if(isLong(value)){
  32. return Long.compare(value.longValue(), 0);
  33. }else if (isInteger(value)){
  34. return Integer.compare(value.intValue(), 0);
  35. }else if(isDouble(value)){
  36. return Double.compare(value.doubleValue(), 0);
  37. }else if(isFloat(value)){
  38. return Float.compare(value.floatValue(), 0);
  39. }else if(isByte(value)){
  40. return Byte.compare(value.byteValue(), (byte) 0);
  41. }else if(isShort(value)){
  42. return Short.compare(value.shortValue(), (short) 0);
  43. }else {
  44. return -2;
  45. }
  46. }
  47. //compare0 > 0
  48. static boolean gt0(Number value) {
  49. return compare0(value) > 0;
  50. }
  51. //compare0 < 0
  52. static boolean lt0(Number value) {
  53. return compare0(value) < 0;
  54. }
  55. static boolean gte0(Number value) {
  56. return compare0(value) >= 0;
  57. }
  58. static boolean lte0(Number value) {
  59. return compare0(value) <= 0;
  60. }
  61. static boolean eq0(Number value){
  62. return compare0(value) == 0;
  63. }
  64. static boolean neq0(Number value){
  65. return compare0(value) != 0;
  66. }
  67. static boolean isLong(Object value){
  68. return (value instanceof Long);
  69. }
  70. static boolean isInteger(Object value){
  71. return (value instanceof Integer);
  72. }
  73. static boolean isDouble(Object value){
  74. return (value instanceof Double);
  75. }
  76. static boolean isFloat(Object value){
  77. return (value instanceof Float);
  78. }
  79. static boolean isByte(Object value){
  80. return (value instanceof Byte);
  81. }
  82. static boolean isShort(Object value){
  83. return (value instanceof Short);
  84. }
  85. /**
  86. * 判断对象object是否为空,如果不为空,直接抛出异常,返回message
  87. *
  88. * @param object 参数值
  89. * @param message 抛出异常的消息
  90. */
  91. static void isNull(Object object, String message) {
  92. notTrue(noNull(object), message);
  93. }
  94. /**
  95. * 判断对象object是否为空,如果不为空,直接抛出异常,返回默认消息
  96. *
  97. * @param object 参数值
  98. */
  99. static void isNull(Object object) {
  100. isNull(object, DATA_MISSING_INCORRECT);
  101. }
  102. /**
  103. * 判断对象object是否为空,如果为真,直接抛出异常,返回message
  104. *
  105. * @param object 参数值
  106. * @param message 抛出异常的消息
  107. */
  108. static void notNull(Object object, String message) {
  109. notTrue(yesNull(object), message);
  110. }
  111. /**
  112. * 判断对象object是否为空,如果为真,直接抛出异常,返回默认消息
  113. *
  114. * @param object 参数值
  115. */
  116. static void notNull(Object object) {
  117. notNull(object, DATA_MISSING_INCORRECT);
  118. }
  119. /**
  120. * 判断表达式是否为真,如果为假,直接抛出异常,返回message
  121. *
  122. * @param expression 需要判断的布尔表达式
  123. * @param message 抛出异常的消息
  124. */
  125. static void isTrue(boolean expression, String message) {
  126. if (!expression) {
  127. throw judgeException(message);
  128. }
  129. }
  130. /**
  131. * 判断表达式是否为真,如果为假,直接抛出异常,返回
  132. *
  133. * @param expression 需要判断的布尔表达式
  134. */
  135. static void isTrue(boolean expression) {
  136. isTrue(expression, DATA_INVALID_CONDITIONS);
  137. }
  138. /**
  139. * 判断表达式是否为真,如果为真,直接抛出异常,返回message
  140. *
  141. * @param expression 需要判断的布尔表达式
  142. * @param message 抛出异常的消息
  143. */
  144. static void notTrue(boolean expression, String message) {
  145. if (expression) {
  146. throw judgeException(message);
  147. }
  148. }
  149. /**
  150. * 判断表达式是否为真,如果为真,直接抛出异常,返回
  151. *
  152. * @param expression 需要判断的布尔表达式
  153. */
  154. static void notTrue(boolean expression) {
  155. notTrue(expression, DATA_INVALID_CONDITIONS);
  156. }
  157. /**
  158. * id == null || id <= 0 throw new VerifyException(message)
  159. * @param id id值
  160. * @param message 抛出异常消息
  161. */
  162. static void id(Long id, String message) {
  163. notNull(id, message);
  164. notTrue(lte0(id), message);
  165. }
  166. /**
  167. * id == null || id <= 0 throw new VerifyException(IDENTIFIER_INVALID)
  168. *
  169. * @param ids 不定个id值
  170. */
  171. static void id(Long... ids) {
  172. notNull(ids, IDENTIFIER_INVALID);
  173. for (Long id : ids) {
  174. notTrue(yesNull(id) || lte0(id), IDENTIFIER_INVALID);
  175. }
  176. }
  177. /**
  178. * value == null || value <= 0 throw new VerifyException(message);
  179. *
  180. * @param value 数值型的参数值
  181. * @param message 抛出异常中的消息
  182. */
  183. static void gt0(Number value, String message) {
  184. notNull(value, message);
  185. isTrue(gt0(value) ,message);
  186. }
  187. /**
  188. * value == null || value <= 0 throw new VerifyException(message);
  189. *
  190. * @param values 不定个数的数值型的值
  191. */
  192. static void gt0(Number... values) {
  193. notNull(values, MUST_GT0);
  194. for (Number value : values) {
  195. gt0(value, MUST_GT0);
  196. }
  197. }
  198. /**
  199. * value == null || value >= 0 throw new VerifyException(message);
  200. *
  201. * @param value 数值型的值
  202. * @param message 抛出异常的消息值
  203. */
  204. static void lt0(Number value, String message) {
  205. notNull(value, message);
  206. isTrue(lt0(value), message);
  207. }
  208. /**
  209. * value == null || value >= 0 throw new VerifyException(message);
  210. *
  211. * @param values 一个或多个的数值
  212. */
  213. static void lt0(Number... values) {
  214. notNull(values, MUST_LT0);
  215. for (Number value : values) {
  216. lt0(value, MUST_LT0);
  217. }
  218. }
  219. /**
  220. * value == null || value != 0 throw new VerifyException(message);
  221. *
  222. * @param value 数值型的值
  223. * @param message 抛出异常的消息
  224. */
  225. static void eq0(Number value, String message) {
  226. notNull(value, message);
  227. isTrue(eq0(value), message);
  228. }
  229. /**
  230. * value == null || value != 0 throw new VerifyException(message);
  231. * @param values 一个或多个数的数值
  232. */
  233. static void eq0(Number... values) {
  234. notNull(values, MUST_EQ0);
  235. for (Number value : values) {
  236. eq0(value, MUST_EQ0);
  237. }
  238. }
  239. /**
  240. * value == null || value < 0 throw new VerifyException(message)
  241. *
  242. * @param value 数值型的值
  243. * @param message 抛出异常的消息
  244. */
  245. static void nogt0(Number value, String message) {
  246. notNull(value, message);
  247. isTrue(lte0(value), message);
  248. }
  249. /**
  250. * value == null || value < 0 throw new VerifyException(message);
  251. *
  252. * @param values 一个或多个数的数值型的值
  253. */
  254. static void nogt0(Number... values) {
  255. notNull(values, MUST_NGT0);
  256. for (Number value : values) {
  257. nogt0(value, MUST_NGT0);
  258. }
  259. }
  260. /**
  261. * value == null || value > 0 throw new VerifyException(message);
  262. *
  263. * @param value 数值型的值
  264. * @param message 抛出异常的消息
  265. */
  266. static void nolt0(Number value, String message) {
  267. notNull(value, message);
  268. isTrue(gte0(value), message);
  269. }
  270. /**
  271. * value == null || value > 0 throw new VerifyException(message);
  272. *
  273. * @param values 一个或多个数的数值
  274. */
  275. static void nolt0(Number... values) {
  276. notNull(values, MUST_NLT0);
  277. for (Number value : values) {
  278. nolt0(value, MUST_NLT0);
  279. }
  280. }
  281. /**
  282. * value == null || value == 0 throw new VerifyException(message);
  283. *
  284. * @param value 数值型的值
  285. * @param message 抛出异常的消息
  286. */
  287. static void noeq0(Number value, String message) {
  288. notNull(value, message);
  289. isTrue(neq0(value), message);
  290. }
  291. /**
  292. * value == null || value != 0 throw new VerifyException(message);
  293. *
  294. * @param values 一个或多个数的数值
  295. */
  296. static void noeq0(Number... values) {
  297. notNull(values, MUST_NEQ0);
  298. for (Number value : values) {
  299. noeq0(value, MUST_NEQ0);
  300. }
  301. }
  302. static void notEmpty(Object object, String message) {
  303. notTrue(ObjectUtil.isEmpty(object), message);
  304. }
  305. static void notEmpty(Object object) {
  306. notEmpty(object, DATA_MISSING_INCORRECT);
  307. }
  308. static void isEmpty(Object object, String message) {
  309. notTrue(ObjectUtil.isNotEmpty(object), message);
  310. }
  311. static void isEmpty(Object object) {
  312. isEmpty(object, DATA_MUST_EMPTY);
  313. }
  314. static void isBlank(CharSequence cs, String message) {
  315. isNull(cs, message);
  316. isTrue(cs.toString().trim().isEmpty(), message);
  317. }
  318. static void notBlank(CharSequence cs, String message) {
  319. notNull(cs, message);
  320. notTrue(cs.toString().trim().isEmpty(), message);
  321. }
  322. //======================年检相关状态值和判断方法======================================
  323. interface Inspection{
  324. /**
  325. * 年检未开始0
  326. */
  327. int STEP_NOT_START = 0;
  328. /**
  329. * 判断年检是否开始
  330. * @param step
  331. * @return
  332. */
  333. static boolean notStart(int step){
  334. return STEP_NOT_START == step;
  335. }
  336. /**
  337. * 年检 第一阶段
  338. */
  339. int STEP_ONE = 1;
  340. /**
  341. * 判断是否为年检阶段一
  342. * @param step
  343. * @return
  344. */
  345. static boolean stepOne(int step){
  346. return STEP_ONE == step;
  347. }
  348. /**
  349. * 年检 第二阶段
  350. */
  351. int STEP_TWO = 2;
  352. /**
  353. * 判断是否为年检阶段二
  354. * @param step
  355. * @return
  356. */
  357. static boolean stepTwo(int step){
  358. return STEP_TWO == step;
  359. }
  360. /**
  361. * 年检 第三阶段
  362. */
  363. int STEP_THREE = 3;
  364. /**
  365. * 判断是否为年检阶段三
  366. * @param step
  367. * @return
  368. */
  369. static boolean stepThree(int step){
  370. return STEP_THREE == step;
  371. }
  372. /**
  373. * 年检 第四阶段
  374. */
  375. int STEP_FOUR = 4;
  376. /**
  377. * 判断是否为年检阶段四
  378. * @param step
  379. * @return
  380. */
  381. static boolean stepFour(int step){
  382. return STEP_FOUR == step;
  383. }
  384. /**
  385. * 0 年检计划初始状态
  386. */
  387. int STATUS_NOT_START = 0;
  388. static boolean statusNotStart(int status){
  389. return STEP_NOT_START == status;
  390. }
  391. /**
  392. * 1 维保工确认年检计划
  393. */
  394. int STATUS_CONFIRM = 1;
  395. String confirm = "年检不存在,请确认年检计划";
  396. static boolean statusConfirm(int status){
  397. return STATUS_CONFIRM == status;
  398. }
  399. /**
  400. * 2 维保工上传自检报告,选择自检时间 或者 文员设置 是否检查限速器和荷载年检设置,
  401. * 文员也可以上传自检报告或者确认自检报告和自检时间,自检时间以最后设置的为准
  402. */
  403. int STATUS_SELFCHECK = 2;
  404. String selfcheckUpload = "请完善自检报告信息";
  405. String selfcheckDate = "请设置自检时间";
  406. String selfcheckReportImg = "请设置自检报告";
  407. static boolean statusSelfcheck(int status){
  408. return STATUS_SELFCHECK == status;
  409. }
  410. /**
  411. * 3 企业文员确认现场检验时间
  412. * 录入人员信息,政府质检,企业质检,联系电话
  413. */
  414. int STATUS_CHECK_CONFIRM = 3;
  415. String checkConfirm = "请确认检验结果";
  416. String checkDate = "请设置现场检验时间";
  417. String checkResultImg = "请设置现场检验结果";
  418. String inspector = "请设置政府质检人员";
  419. String operator = "请设置公司质检人员";
  420. String telephone = "请设置人员联系电话";
  421. static boolean statusCheckConfirm(int status){
  422. return STATUS_CHECK_CONFIRM == status;
  423. }
  424. /**
  425. * 4 维保工上传检验结果
  426. */
  427. int STATUS_CHECK_UPLOAD = 4;
  428. static boolean statusCheckUpload(int status){
  429. return STATUS_CHECK_UPLOAD == status;
  430. }
  431. /**
  432. * 5 企业文员确认检验结果-合格 --> 不能算年检超期
  433. */
  434. int STATUS_CHECK_QUALIFIED = 5;
  435. static boolean statusCheckQualified(int status){
  436. return STATUS_CHECK_QUALIFIED == status;
  437. }
  438. /**
  439. * 6 企业文员确认检验结果-整改 --> 回到第二阶段
  440. */
  441. int STATUS_CHECK_RECTIFICATION = 6;
  442. static boolean statusCheckRectification(int status){
  443. return STATUS_CHECK_RECTIFICATION == status;
  444. }
  445. /**
  446. * 7 企业文员确认检验结果-不合格 --> 可以算年检超期
  447. */
  448. int STATUS_CHECK_UNQUALIFIED = 7;
  449. static boolean statusCheckUnqualified(int status){
  450. return STATUS_CHECK_UNQUALIFIED == status;
  451. }
  452. /**
  453. * 8 维保工上传年检报告和合格证
  454. */
  455. int STATUS_CERTIFICATE_REPORT_UPLOAD = 8;
  456. String certificateReportUpload = "请上传年检报告和合格证";
  457. static boolean statusCertificateReportUpload(int status){
  458. return STATUS_CERTIFICATE_REPORT_UPLOAD == status;
  459. }
  460. /**
  461. * 9 企业文员确认年检报告和合格证-合格
  462. */
  463. int STATUS_CERTIFICATE_REPORT_QUALIFIED = 9;
  464. String nextInspectionTime = "请设置下次年检时间";
  465. static boolean statusCertificateReportQualified(int status){
  466. return STATUS_CERTIFICATE_REPORT_QUALIFIED == status;
  467. }
  468. /**
  469. * 10 企业文员确认年检报告和合格证-不合格 -->停用电梯
  470. */
  471. int STATUS_CERTIFICATE_REPORT_UNQUALIFIED = 10;
  472. static boolean statusCertificateReportUnqualified(int status){
  473. return STATUS_CERTIFICATE_REPORT_UNQUALIFIED == status;
  474. }
  475. String statusError = "年检状态有误";
  476. /**
  477. * 根据年检的状态值返回成年检的状态阶段
  478. * @param stepStatus 年检状态值
  479. * @return int
  480. */
  481. static int status2StepName(Integer stepStatus){
  482. int stepName;
  483. switch (stepStatus){
  484. case STATUS_NOT_START:
  485. stepName = 0;
  486. break;
  487. case STATUS_CONFIRM:
  488. case STATUS_SELFCHECK:
  489. stepName = 1;
  490. break;
  491. case STATUS_CHECK_CONFIRM:
  492. stepName = 2;
  493. break;
  494. case STATUS_CHECK_UPLOAD:
  495. case STATUS_CHECK_QUALIFIED:
  496. case STATUS_CHECK_RECTIFICATION:
  497. case STATUS_CHECK_UNQUALIFIED:
  498. stepName = 3;
  499. break;
  500. case STATUS_CERTIFICATE_REPORT_UPLOAD:
  501. case STATUS_CERTIFICATE_REPORT_QUALIFIED:
  502. case STATUS_CERTIFICATE_REPORT_UNQUALIFIED:
  503. stepName = 4;
  504. break;
  505. default:
  506. stepName = -1;
  507. break;
  508. }
  509. return stepName;
  510. }
  511. /**
  512. * 判断年检状态是否处于其他阶段之间 min < middle < max
  513. * @param middle 中间值
  514. * @param min 最小值
  515. * @param max 最大值
  516. * @return boolean
  517. */
  518. static boolean inStatus(int min, int middle,int max){
  519. return min <= middle && middle <= max;
  520. }
  521. /**
  522. * 判断两个年检状态是否一样 one == two
  523. * @param one 一个值
  524. * @param other 另一个值
  525. * @return boolean
  526. */
  527. static boolean sameStatus(int one,int other){
  528. return one == other;
  529. }
  530. /**
  531. * 判断年检中一个状态是否为另一个状态的下一个状态
  532. * @param front 前一个值
  533. * @param behind 后一个值
  534. * @return boolean
  535. */
  536. static boolean nextStatus(int front,int behind){
  537. return front + 1 == behind;
  538. }
  539. /**
  540. * 判断年检中两个状态相同或者为下一个状态
  541. * @param front 前一个值
  542. * @param behind 后一个值
  543. * @return boolean
  544. */
  545. static boolean sameNext(int front,int behind){
  546. return front == behind || front + 1 == behind;
  547. }
  548. //==============================================================================
  549. }
  550. interface Repair{
  551. //===================急修相关状态值和判断方法======================================
  552. /**
  553. * 急修状态(-1 暂停中)
  554. */
  555. int STATUS_STOPING = -1;
  556. static boolean statusStoping(int status){
  557. return STATUS_STOPING == status;
  558. }
  559. /**
  560. * 急修状态(0 待修理)
  561. */
  562. int STATUS_TO_REPAIRED = 0;
  563. static boolean statusToRepaired(int status){
  564. return STATUS_TO_REPAIRED == status;
  565. }
  566. /**
  567. * 急修状态(1 修理中)
  568. */
  569. int STATUS_REPAIRING = 1;
  570. static boolean statusRepairing(int status){
  571. return STATUS_REPAIRING == status;
  572. }
  573. /**
  574. * 急修状态(2 完成)
  575. */
  576. int STATUS_FINISH = 2;
  577. static boolean statusFinish(int status){
  578. return STATUS_FINISH == status;
  579. }
  580. /**
  581. * 急修状态(3 关闭)
  582. */
  583. int STATUS_CLOSE = 3;
  584. static boolean statusClose(int status){
  585. return STATUS_CLOSE == status;
  586. }
  587. String haveUnfinisedRepair = "该电梯存在未完成的急修,无法创建";
  588. String repairHadTaked = "急修已经接单,不能转派";
  589. String mustToRepair = "待急修才能操作";
  590. String mustInRepairing = "急修中才能操作";
  591. String missingFault = "缺少故障信息";
  592. String mustFinish = "急修完成后才能操作";
  593. String hadEvaluate = "急修已经评价了";
  594. String incorrectAmount = "金额有误";
  595. String inspection = "电梯正在年检中,无法创建";
  596. //==============================================================================
  597. }
  598. interface Upload{
  599. //===================上传相关状态值和判断方法======================================
  600. /**
  601. * 图片上传最大大小10M * 1024 * 1024
  602. */
  603. long maxSizePic = 10 << 20;
  604. String maxSizePicDesc = "10M";
  605. /**
  606. * 文件上传最大大小50M * 1024 * 1024
  607. */
  608. long maxSizeFile = 50 << 20;
  609. String maxSizeFileDesc = "50M";
  610. /**
  611. * 视频上传最大大小100M * 1024 * 1024
  612. */
  613. long maxSizeVideo = 100 << 20;
  614. String maxSizeVideoDesc = "100M";
  615. /**
  616. * 上传图片文件类型
  617. */
  618. String[] pics = {".jpg",".jpeg", ".png", ".bmp", ".gif"};
  619. /**
  620. * 上传其他文件类型
  621. */
  622. String[] files = {".pdf",".txt",".rar",".zip",".7z", ".xls", ".xlsx", ".doc",".docx",".ppt",".pptx"};
  623. /**
  624. * 上传视频文件类型
  625. */
  626. String[] videos = {".mov",".mp4", ".avi",".mpg",".mpeg",".rm",".rmvb",".wmv"};
  627. String fileDataMissing = "没有文件数据";
  628. String fileUploadFail = "上传文件失败";
  629. String fileFormatNotSupport = "文件格式暂时不支持";
  630. String fileFormatIllegal = "文件格式不合法";
  631. //==============================================================================
  632. }
  633. /**
  634. * 操作证相关常量
  635. */
  636. interface LiftCert{
  637. //0:无证,1:待审核,2:审核未通过,3:审核通过,4:超期
  638. int Status_Unlicense = 0;
  639. int Status_ToAudit = 1;
  640. int Status_AuditFail = 2;
  641. int Status_AuditPass = 3;
  642. int Status_Overdue = 4;
  643. String MustToAudit = "待审核才能操作";
  644. String CertHadExist = "操作证已存在";
  645. String CertNotExist = "操作证不存在";
  646. static boolean unlicense(int status){
  647. return status == Status_Unlicense;
  648. }
  649. static boolean toAudit(int status){
  650. return status == Status_ToAudit;
  651. }
  652. static boolean auditFail(int status){
  653. return status == Status_AuditFail;
  654. }
  655. static boolean auditPass(int status){
  656. return status == Status_AuditPass;
  657. }
  658. static boolean overdue(int status){
  659. return status == Status_Overdue;
  660. }
  661. }
  662. /**
  663. * 签到相关常量
  664. */
  665. interface Attend{
  666. String SetAmTime = "请设置上午的上/下班时间";
  667. String SetPmTime = "请设置下午的上/下班时间";
  668. String SetOtTime = "请设置加班的上/下班时间";
  669. String InvalidAmTime = "上午的上/下班时间有误";
  670. String InvalidPmTime = "下午的上/下班时间有误";
  671. String InvalidOtTime = "加班的上/下班时间有误";
  672. String AmTopClock = "上午上班打卡";
  673. String AmDownClock = "上午下班打卡";
  674. String PmTopClock = "下午上班打卡";
  675. String PmDownClock = "下午下班打卡";
  676. String OtTopClock = "加班上班打卡";
  677. String OtDownClock = "加班下班打卡";
  678. String hadClock = "打卡记录已存在";
  679. String missingTime = "请至少设置一组打卡时间";
  680. String AmDownPmTop = "下午的上班时间不得早于上午的下班时间";
  681. String PmDownOtTop = "加班的上班时间不得早于下午的下班时间";
  682. }
  683. interface Excel{
  684. String ValidDataMissing = "未解析到有效数据";
  685. String FormatSupport = "文件格式不支持,暂时只支持xls,xlsx";
  686. String[] excelSuffix = {".xls",".xlsx"};
  687. /**
  688. * 一次导入表格的最大有效记录数
  689. */
  690. int maxRows = 5000;
  691. String outMaxRows = "一次性导入不能超过5000条数据";
  692. }
  693. }