U6|
ztn`$ezoxUc!eoa#~kt)hAnwZVbV(CYwg#kf<>N8
z6Wm(M2elu}V6~t1*8*ddy^n8W(Y??26GlC?fV}42Gtqf2@=88WI+JCd-r}Kq_pLn9
z4SG93Yg)PHxGl4uGe~-gU-X9ajUmq0yaTq<;YtZT?@7zW#4OlHQV_B2-0HX(w5WZ6
z=4?fO%N<08=6OpGkv@e?bbs~omgn+x@=YtA`7hq1GsJFez4fBI
zjfOSBmqOmi^LGU>Sh&7XI35Ei2nZ~ghnD+m3GGki5=Do5%l%m{@leuK{j7p<^O#wP
ziC8PpU-cDLRXdS%!O8Q~^wcQ-7~Ia_Tq`(8C}JFDoK6i3tL+trFFw2uMf5rsx{h=X
zRRv8>MNLP$N4+Op#C^WdC~hgtCMV}7HK#YSH*aq)nISIsKYHU2<+2wn7$lDGVGYoJ
zdxM-{BhVTP5V`S?FHRA6mc3DoWQ;L9s-1bQVk07iSZscVkX1CcclX+lg*hA651lyb$PkDWhW2
zv0z^P#-TM(5S+5})D$ks%w)lGO}Y*ds%wMT*ogXZ@0ZrA2C@-$jI))VgAB(0g3v`|
z&;=yeIYS64PYWE&?@Af#@F-sF^&H3RxD=bV!%5H89$Jvq8v~WKzPVmK&Uo8?C@wKS
z9k`D~<&CLK>bb(js^xHmrAC&QU6UD
z&aLL!!X?(G&$h5S>uX)l2z+eR#86HeYEN8SId>K^PgDIpO4iBF)8OcGeiKyLr-k80
z!|X8Ug=gvdfXn>!FRG)b2#sXx<=^D@KCF9d$)M#s&5K2Eq8n%)qxu*ZjyM!6%$g)fy9b%MKzy)Zb*hRZpY7nIQp<7=^uygVp7^Vf?6j11}IOWb67x85hXr!Iz!
z!O<8wNwGQ_6j^tZZ7ssGcbB-~YGx7Djb{!lR#9lzq{bBRgDyE6kfYo-;@%RWpnp94E
znTB$$1*?DbX)E-@N6+O1aiVwnWH`m$hjL*}A+2IPflho}v7Dc)uT8eLfz#75L)H=u
z={LMnb?4BM`|$QAPt$r0tk94HM&xFt{9tddBXqLIa5JhI&A7O#KH^L>1_sA!&;-o-
z%OaJ_nZ@CWEe;`fcq$H$rqAc1^4vZlp-C}lbBsJSlqY}>5Hlr(eqz0N05>S*z$90;
zv*6!#qEwYh(n}r|Le_(pvAOIZe9F*M1V7gZCuBT-ez9UFk#GY6e=3i0&CnkSts_a{
z+`UhX{&k+pd9&yj70#jK1y=JC>wSqN*_&&5g9twt+m;%c6`Bv&MF4sDX!BdZqqXH#()+21VN#6|&
z1K9{OM!#HR4<5Yn%|9__>{4Y71|%o@Q@CHeyLXUdkW&>wmO(p0KEV^r!%*_eLJw(Es-`IKj=F$$
zM@bF!|8NG;1P$K=W!uddBuu&)lPUzX}=%@|`
zM%pS~YLWw&f1y{|=QfK{r(?-{&<{oD$dB}AY6VNP(ynOETCe>8b
zh)DKK3TICdV9+ul@Z6;8Yu^(?;dhW#->>Q>O`VMJPtNVr$kf(jd6270eaWD$5V>l*
zOL?W<;UW&NqEG@BXtrs9SkP>d|(A&ogDfX*A2ey#CiN?o@vY2O0PI_Hqh6IjDpNN
zDsZxLK5eK0VtORRPeoiuw!~9g4WvIs{MD$>@*vQ?%mZ)&`hcHrC?&xdf>}QK=)Lmi
z9_GT=p*pC7DJ;CtPhrm4OeibGD1+tmaSgjDL*(OFS$d%{E#+TY&D5GU1P5^_f8Mzc
z%=eO3R(&Pcd+9m(QF1#;j&dkihg_Cry_8iTi@+iCX(p^Sd14XYy$wys)|wpO-AP3J
z<4)q&WcN?EPKrNl=#`zd%bOpD9!QE9
zt}71LT)nLpW9dA&gSCR@j^F`^cT{&Ml~vXT5Oclz($2!*y!!2PVEk1Y0eXNg}Om{8qMW)K5k8$7!__vWym#c
zI2XwM3)9CMer^nd;WA-?3(+!e!$-7bK!8E3MZZbxc31OK-EOd#FI%{mUU~w+TX=$V
zQM0%`1SkE|XC-F3DYimFY@hF8>ZLL{l55E;NAnC>HH3SeMf2_^cll**qbAGdby6%SDucjA!uJiQK#fx?|lUv+pOYl|A
zMuzRI9!xpTEwc{6Yg$nKj>!qKo!^t^DXG;a_Ane4*RjR|#)uhU7iaf$rwhYwiLW=j
zv-7z_8@w%4YP(RPw<+yE5$_=u5Y>;ibNH*
z!6$No-@ENqf~{*RFNa2z3u}9j@*I!kCpY#g=-s=r)9+r9I_(zF=LU
z7n1XKB%qF-sGW!xP9beKA~g-5KQQkk$Z@1VrHtKAd%#4tSO!-9ny?&O9vRxZN#v)W
ztbjL)AquD2mhUE`&crrc6!Mtw5+qjP@zZ{cM_!U}J(6?>*v&51G^Pswm2*VXW{
z4wfVPkPf-MkNY_!B8j#mDErB_kS6;hLPL&d4bUIAzwLkb77d(i=Fj9eLYcFmX#WQi!
zsBc>Kw*#(OSVnf%_)(;*Wwl|j2t+x*7?vnxid73v+BJWyjBqf`fdgM`B-}B2tGmr(Kw7)U1691KT5h
zj&o%@aGlcZoXT9}1S%Bov?e!T^30?gyjo^m@TcFI2LgAmA@BX?I>|K7`JMkX{mZC+
z-+^&gnEcs+VWsC}1pLnx|L+GA{Cn_Sj{yD89)X|T3BMkOsQ)ikpo@tM-5r{hHSl4V
zLAz9#`W@?kiSh33za1k#@O+tBy$I>MDVi#6LuPF@P;hjK(uE@nWG@(Er+BKo@rJifVFhU_Sabw
zhSnv()pQo%#>GK%$M$#JGkjh&=5c0A4KERbk7TX2behD-Jowh%!HN$ta;hTfP9CbU
z=bVqos7dI$-{jO#!sA`$^{_CRP-V7Rl3hQ}!{VMac978C%{+h%YS^Lx>=eGp2x(m<
z%(Z9mC`ChQdYIMEHYE0&h#k(WPg%?fGa!dKXmwZbmH|#TgoFof1PilJJLlz4vrd$G4Ox~GaN|A3wl!hvS1+|wbN
z#>^*I@GEL+)D_}AmJ^RQX+@iicP~HRNW_on#6N*idm(c69!r$s3XH_l$7yM-HAdCb
zd}@JnB|b=P)^}V-wnR~{!#-Ym#1+m`Db5gs#3C-}+9kBgkYWx%-am$KzHvO5yEovX
z2#vDxI|I)7hgba7u-N~<4Z_CG+Q!Jv!OX}Wxwq``hZm?2BaITb3r~!Ziq`nsQXhAL
zM6N&@vZNp`J1h8`#@BN+JK~h|ix9hnS}Lo}a7ojlmDHTs(oop|gM_}9-MGMOL`x$%
z4J%4Lee;rV!4{6l>%+nc%EZa;5m)WUZTQy%W+QzPiM&JI+?642ac+7D8b5ZZowsbA
z+nxBJyYDM0NGJ^G-*3CSB>FExh1eFjfBo+c_`&wGUE^V^(0vQf-;@cWxO@FC+k+me
zhkyKQa&@Qpzv%vtrSI0_Zm-?>ho7SU%5mRf^n>m>fPZm3bPzvze_hF+^4{~t|BKi0
zuLh)hgr75h*t&9`4E{}-pn*Ri{JSCPS1mrgwjuo+@a~xjD!xlb?{)BVMn9zbwFTx^
z#D|sJ`|F;+DH8-h{ypOFE`J`P-fRA01(oP;$h&7INEz+-s1IwvzoI>?YTZ{||E5e3
z$&=rs{k8`C5cYnFAD#vOsmyP8EB-rW{#qb=h=y#u%yRtAT+5NBo2lQ)v
ACjbBd
literal 0
HcmV?d00001
diff --git a/nxgx-ifsm-base/.gitignore b/nxgx-ifsm-base/.gitignore
new file mode 100644
index 0000000..561aff0
--- /dev/null
+++ b/nxgx-ifsm-base/.gitignore
@@ -0,0 +1,149 @@
+######################
+# Project Specific
+######################
+/target/www/**
+/src/test/javascript/coverage/
+/src/test/javascript/PhantomJS*/
+
+######################
+# Node
+######################
+/node/
+node_tmp/
+node_modules/
+npm-debug.log.*
+/.awcache/*
+
+######################
+# SASS
+######################
+.sass-cache/
+/*.jh
+/*.png
+
+######################
+# Eclipse
+######################
+*.pydevproject
+.project
+.metadata
+tmp/
+tmp/**/*
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+.factorypath
+/src/main/resources/rebel.xml
+
+# External tool builders
+.externalToolBuilders/**
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+######################
+# Intellij
+######################
+.idea/
+*.iml
+*.iws
+*.ipr
+*.ids
+*.orig
+classes/
+
+######################
+# Visual Studio Code
+######################
+.vscode/
+
+######################
+# Maven
+######################
+/log/
+/target/
+
+######################
+# Gradle
+######################
+.gradle/
+/build/
+
+######################
+# Package Files
+######################
+*.jar
+*.war
+*.ear
+*.db
+
+######################
+# Windows
+######################
+# Windows image file caches
+Thumbs.db
+
+# Folder config file
+Desktop.ini
+
+######################
+# Mac OSX
+######################
+.DS_Store
+.svn
+
+# Thumbnails
+._*
+
+# Files that might appear on external disk
+.Spotlight-V100
+.Trashes
+
+######################
+# Directories
+######################
+/bin/
+/deploy/
+
+######################
+# Logs
+######################
+*.log*
+
+######################
+# Others
+######################
+*.class
+*.*~
+*~
+.merge_file*
+
+######################
+# Gradle Wrapper
+######################
+!gradle/wrapper/gradle-wrapper.jar
+
+######################
+# Maven Wrapper
+######################
+!.mvn/wrapper/maven-wrapper.jar
+
+######################
+# ESLint
+######################
+.eslintcache
+
+yarn.lock
+
+/.apt_generated/
diff --git a/nxgx-ifsm-base/pom.xml b/nxgx-ifsm-base/pom.xml
new file mode 100644
index 0000000..e52e8d0
--- /dev/null
+++ b/nxgx-ifsm-base/pom.xml
@@ -0,0 +1,305 @@
+
+
+
+ nxgx-base
+ com.rootcloud
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ nxgx-ifsm-base
+
+ 1.3.0
+
+
+
+ com.gexin.platform
+ gexin-rp-sdk-http
+ 4.1.2.0
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.9
+
+
+ com.github.jsqlparser
+ jsqlparser
+ 1.4
+
+
+
+ net.sf.json-lib
+ json-lib
+ 2.4
+ jdk15
+
+
+ com.sun.xml.messaging.saaj
+ saaj-impl
+ 1.5.2
+
+
+ com.cookingfox
+ guava-preconditions
+ 0.1.5
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-undertow
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.projectlombok
+ lombok
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+ com.alibaba
+ fastjson
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ commons-io
+ commons-io
+
+
+ commons-beanutils
+ commons-beanutils
+ 1.9.4
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+
+
+
+
+
+ com.ejlchina
+ httputils
+ 2.3.0
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.version}
+
+
+ org.mybatis
+ mybatis
+
+
+ org.mybatis
+ mybatis-spring
+
+
+
+
+
+
+
+
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
+
+ io.springfox
+ springfox-boot-starter
+ ${swagger2.version}
+
+
+
+ org.mapstruct
+ mapstruct
+ 1.4.1.Final
+
+
+ org.mapstruct
+ mapstruct-processor
+ 1.4.1.Final
+
+
+
+ org.aspectj
+ aspectjweaver
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ org.apache.commons
+ commons-pool2
+ 2.8.0
+
+
+
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.mockito
+ mockito-core
+ 3.4.0
+ test
+
+
+ org.mockito
+ mockito-inline
+ 3.6.28
+ test
+
+
+
+
+ org.codehaus.groovy
+ groovy-all
+ 3.0.7
+ pom
+
+
+ com.rootcloud
+ apiconnector-engine
+ 0.0.2-SNAPSHOT
+
+
+ eu.bitwalker
+ UserAgentUtils
+ 1.21
+
+
+
+
+ org.springframework.amqp
+ spring-rabbit
+
+
+
+ cn.hutool
+ hutool-all
+ 5.8.3
+
+
+
+ cn.hutool
+ hutool-poi
+ 4.6.6
+
+
+
+ org.apache.poi
+ poi
+ 4.1.2
+
+
+ org.apache.poi
+ poi-ooxml
+ 4.1.2
+
+
+
+ org.apache.poi
+ poi-ooxml-schemas
+ 4.1.2
+
+
+
+ com.github.pagehelper
+ pagehelper
+ 5.0.1
+
+
+
+
+ junit
+ junit
+ test
+
+
+ org.springframework
+ spring-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-test
+ test
+
+
+
+ com.sun.jersey
+ jersey-client
+ 1.19.1
+
+
+
+ com.getui.push
+ restful-sdk
+ 1.0.0.14
+
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
\ No newline at end of file
diff --git a/nxgx-ifsm-base/src/main/docker/Dockerfile b/nxgx-ifsm-base/src/main/docker/Dockerfile
new file mode 100644
index 0000000..dfc99f5
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/docker/Dockerfile
@@ -0,0 +1,6 @@
+FROM private-registry.rootcloud.com/devops/jdk-11-dd:latest
+VOLUME /tmp
+ADD *.jar /data/app.jar
+WORKDIR /data
+ENV JAVA_OPTS="-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Duser.timezone=Asia/Shanghai"
+ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /data/app.jar" ]
diff --git a/nxgx-ifsm-base/src/main/java/com/rootcloud/NXGXBaseApp.java b/nxgx-ifsm-base/src/main/java/com/rootcloud/NXGXBaseApp.java
new file mode 100644
index 0000000..0e420ab
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/java/com/rootcloud/NXGXBaseApp.java
@@ -0,0 +1,56 @@
+package com.rootcloud;
+
+import com.rootcloud.common.constant.TemplateConstant;
+import com.rootcloud.domain.dao.ConfigDao;
+import com.rootcloud.domain.vo.ConfigVO;
+import org.mybatis.spring.annotation.MapperScan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import springfox.documentation.oas.annotations.EnableOpenApi;
+
+import java.util.List;
+
+@EnableScheduling //扫描定时器
+@EnableOpenApi
+@MapperScan({"com.rootcloud.domain.*.*","com.rootcloud.domain.*"})
+@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
+public class NXGXBaseApp implements CommandLineRunner {
+
+ private static final Logger log = LoggerFactory.getLogger(NXGXBaseApp.class);
+
+ public static void main(String[] args) {
+ SpringApplication app = new SpringApplication(NXGXBaseApp.class);
+ app.run(args);
+ }
+ @Override
+ public void run(String... args) throws Exception {
+ initData();
+ }
+
+ @Autowired
+ private ConfigDao configDao;
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+
+ private void initData(){
+ List zhidTableList= configDao.listTable_zhid();
+ for (ConfigVO ztable:zhidTableList) {
+ redisTemplate.opsForValue().set(TemplateConstant.NXGX_ZH_SPLIT_TABLES+ztable.getName(),ztable.getValue());
+ }
+ List szhidTableList= configDao.listTable_syzhid();
+ for (ConfigVO ztable:szhidTableList) {
+ redisTemplate.opsForValue().set(TemplateConstant.NXGX_ZH_SPLIT_TABLES+ztable.getName(),ztable.getValue());
+ }
+ }
+
+}
diff --git a/nxgx-ifsm-base/src/main/java/com/rootcloud/common/CheckSumBuilder.java b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/CheckSumBuilder.java
new file mode 100644
index 0000000..d0e9acd
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/CheckSumBuilder.java
@@ -0,0 +1,42 @@
+package com.rootcloud.common;
+
+
+import java.security.MessageDigest;
+
+public class CheckSumBuilder {
+ // 计算并获取CheckSum
+ public static String getCheckSum(String appSecret, String nonce, String curTime) {
+ return encode("sha1", appSecret + nonce + curTime);
+ }
+
+ // 计算并获取md5值
+ public static String getMD5(String requestBody) {
+ return encode("md5", requestBody);
+ }
+
+ private static String encode(String algorithm, String value) {
+ if (value == null) {
+ return null;
+ }
+ try {
+ MessageDigest messageDigest
+ = MessageDigest.getInstance(algorithm);
+ messageDigest.update(value.getBytes());
+ return getFormattedText(messageDigest.digest());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ private static String getFormattedText(byte[] bytes) {
+ int len = bytes.length;
+ StringBuilder buf = new StringBuilder(len * 2);
+ for (int j = 0; j < len; j++) {
+ buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
+ buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
+ }
+ return buf.toString();
+ }
+ private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+
+}
diff --git a/nxgx-ifsm-base/src/main/java/com/rootcloud/common/Constants.java b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/Constants.java
new file mode 100644
index 0000000..4f790b0
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/Constants.java
@@ -0,0 +1,84 @@
+package com.rootcloud.common;
+
+import com.rootcloud.common.vo.PrinterWorkBoxSize;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Constants {
+
+ /**
+ * 租户编号
+ */
+ public static final String CONFIG_CODE_TENANT_ID = "printer_tenant_id";
+
+ /**以下尺寸为计算打印效率、布图率的尺寸
+ */
+ public static final Map PRINTER_WORK_BOX_SIZE_MAP = new HashMap(16) {
+ {
+// put("2215", new PrinterWorkBoxSize().length(22F).width(15F).height(7F));
+// put("2218", new PrinterWorkBoxSize().length(22F).width(18F).height(7F));
+// put("2515", new PrinterWorkBoxSize().length(25F).width(15F).height(7F));
+// put("2518", new PrinterWorkBoxSize().length(25F).width(18F).height(7F));
+// put("1800", new PrinterWorkBoxSize().length(18F).width(11F).height(7F));//12F
+// put("Max", new PrinterWorkBoxSize().length(18F).width(10F).height(7F));
+// put("SDream", new PrinterWorkBoxSize().length(22F).width(12F).height(7.2F));
+// put("800", new PrinterWorkBoxSize().length(8F).width(5F).height(4F));
+// put("1000", new PrinterWorkBoxSize().length(10F).width(6F).height(5F));
+// put("2600", new PrinterWorkBoxSize().length(26F).width(20F).height(10F));
+//
+// put("2600B", new PrinterWorkBoxSize().length(25F).width(23.5F).height(10F));//24F
+// put("2500", new PrinterWorkBoxSize().length(25.24F).width(15.60F).height(10F)); //25F 15F 改为25.24F 15.60F
+// put("300", new PrinterWorkBoxSize().length(3F).width(2F).height(10F));
+// put("1800E", new PrinterWorkBoxSize().length(18F).width(10F).height(7F));
+// put("1200", new PrinterWorkBoxSize().length(12F).width(12F).height(3.5F));
+ //1200机型参数
+
+ //2022-03-02 修改1800、Max的长、宽参数
+ put("2215", new PrinterWorkBoxSize().length(22F).width(15F).height(7F));
+ put("2218", new PrinterWorkBoxSize().length(22F).width(18F).height(7F));
+ put("2515", new PrinterWorkBoxSize().length(25F).width(15F).height(7F));
+ put("2518", new PrinterWorkBoxSize().length(25F).width(18F).height(7F));
+ put("1800", new PrinterWorkBoxSize().length(17.3F).width(10.5F).height(7F));//18f 改为 17.3F 11F改为10.5F
+ put("Max", new PrinterWorkBoxSize().length(17.3F).width(10F).height(7F)); //18f 改为 17.3F
+ put("SDream", new PrinterWorkBoxSize().length(22F).width(12F).height(7.2F));
+ put("800", new PrinterWorkBoxSize().length(8F).width(5F).height(4F));
+ put("1000", new PrinterWorkBoxSize().length(10F).width(6F).height(5F));
+ put("2600", new PrinterWorkBoxSize().length(26F).width(20F).height(10F));
+
+ put("2600B", new PrinterWorkBoxSize().length(25F).width(23.5F).height(10F));//24F
+ put("2500", new PrinterWorkBoxSize().length(25.24F).width(15.60F).height(10F)); //25F 15F 改为25.24F 15.60F
+ put("300", new PrinterWorkBoxSize().length(3F).width(2F).height(10F));
+ put("1800E", new PrinterWorkBoxSize().length(18F).width(10F).height(7F));
+ put("1200", new PrinterWorkBoxSize().length(12F).width(12F).height(3.5F));
+
+ }
+ };
+
+ /**
+ * 以下尺寸为运维报告中计算砂利用率的尺寸
+ */
+ public static final Map PRINTER_WORK_BOX_SIZE_MAP_slyl = new HashMap(16) {
+ {
+ put("2215", new PrinterWorkBoxSize().length(22.6F).width(15.6F).height(7F));
+ put("2218", new PrinterWorkBoxSize().length(22.6F).width(18.6F).height(7F));
+ put("2515", new PrinterWorkBoxSize().length(25.6F).width(15.6F).height(7F));
+ put("2518", new PrinterWorkBoxSize().length(25.6F).width(18.6F).height(7F));
+ put("1800", new PrinterWorkBoxSize().length(18.6F).width(12F).height(7F));//12.6
+ put("Max", new PrinterWorkBoxSize().length(18.6F).width(10.6F).height(7F));
+ put("SDream", new PrinterWorkBoxSize().length(22.6F).width(12.6F).height(7.2F));
+ put("800", new PrinterWorkBoxSize().length(8.4F).width(5.4F).height(4F));
+ put("1000", new PrinterWorkBoxSize().length(10.4F).width(6.4F).height(5F));
+ put("2600", new PrinterWorkBoxSize().length(27.1F).width(20.6F).height(10F));
+
+ put("300", new PrinterWorkBoxSize().length(3.2F).width(2.2F).height(10F));
+ put("2500", new PrinterWorkBoxSize().length(25.24F).width(15.6F).height(10F));
+ put("2600B", new PrinterWorkBoxSize().length(25.6F).width(24.1F).height(10F));
+ put("1800E", new PrinterWorkBoxSize().length(18.6F).width(10.6F).height(10F));
+ put("1200", new PrinterWorkBoxSize().length(12F).width(12F).height(3.5F));
+ //1200机型参数
+ }
+ };
+
+
+}
diff --git a/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DESUtil.java b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DESUtil.java
new file mode 100644
index 0000000..ca37396
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DESUtil.java
@@ -0,0 +1,77 @@
+package com.rootcloud.common;
+
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESedeKeySpec;
+
+/**
+ * @author LiPingAn 2022/1/4 14:53
+ * @version 1.0
+ **/
+public class DESUtil {
+ private static final String KEY = "cf410f8f9a4a42cc7a7f48fc4134e8f9";
+ private static final String KEY_ALGORITHM = "DESede";
+ private static final String DEFAULT_CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";// 默认的加密算法
+
+ /**
+ * DESede 加密操作
+ * @param content 待加密内容
+ * @return 返回Base64转码后的加密数据
+ */
+ public static String encrypt(String content) {
+ try {
+ Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
+ // 创建密码器
+ byte[] byteContent = content.getBytes("utf-8");
+ cipher.init(Cipher.ENCRYPT_MODE, getSecretKey());
+ // 初始化为加密模式的密码器
+ byte[] result = cipher.doFinal(byteContent);// 加密
+ return Base64.encodeBase64String(result);// 通过Base64转码返回
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * } } DESede 解密操作
+ *
+ * @param content
+ * @return
+ */
+ public static String decrypt(String content) {
+ try {
+ // 实例化
+ Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM); // 使用密钥初始化,设置为解密模式
+ cipher.init(Cipher.DECRYPT_MODE, getSecretKey()); // 执行操作
+ byte[] result = cipher.doFinal(Base64.decodeBase64(content));
+ return new String(result, "utf-8");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * }
+ * 生成秘钥
+ * @return
+ */
+ private static SecretKey getSecretKey() {
+ //返回生成指定算法密钥生成器的KeyGenerator 对象
+ try {
+ // --解密的key
+ final DESedeKeySpec dks = new DESedeKeySpec(KEY.getBytes("UTF-8"));
+ final SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
+ final SecretKey securekey = keyFactory.generateSecret(dks);
+ return securekey;
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ }
+
+}
diff --git a/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DateUtil.java b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DateUtil.java
new file mode 100644
index 0000000..b7ce31b
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DateUtil.java
@@ -0,0 +1,992 @@
+package com.rootcloud.common;
+
+import jline.internal.Log;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * @ClassName DateUtil
+ * @Description TODO
+ * @Author w-liuyi01
+ * @Date 2022/4/22 10:49
+ * @Version 1.0
+ */
+public class DateUtil {
+
+ // Grace style
+ public static final String PATTERN_GRACE = "yyyy/MM/dd HH:mm:ss";
+ public static final String PATTERN_GRACE_NORMAL = "yyyy/MM/dd HH:mm";
+ public static final String PATTERN_GRACE_SIMPLE = "yyyy/MM/dd";// Classical style
+ public static final String PATTERN_CLASSICAL = "yyyy-MM-dd HH:mm:ss";
+ public static final String PATTERN_CLASSICAL_ISO = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
+ public static final String PATTERN_CLASSICAL_ISO_SIMPLE = "yyyy-MM-dd'T'HH:mm:ss'Z'";
+ public static final String PATTERN_CLASSICAL_NORMAL = "yyyy-MM-dd HH:mm";
+ public static final String PATTERN_CLASSICAL_SIMPLE = "yyyy-MM-dd";
+ //CH style
+ public static final String PATTERN_CH = "yyyy年MM月dd日 HH时mm分ss秒";
+ public static final String PATTERN_CH_NORMAL = "yyyy年MM月dd日 HH时mm分";
+ public static final String PATTERN_CH_SIMPLE = "yyyy年MM月dd日";
+ public static final String PATTERN_MMDD_SIMPLE = "MM-dd";
+
+
+ //把标准世界时转换为北京时间
+ public static String UTCtoBeijing(String Timestamp_Local)
+ {
+ //先去掉格式
+ Timestamp_Local = DateUtil.reverseHandlerTime(Timestamp_Local);
+ //转换为北京时间
+ LocalDateTime date = LocalDateTime.parse(Timestamp_Local, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).plusHours(8);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String formatedDateStr = date.format(formatter);
+ return formatedDateStr;
+ }
+
+ public static String UTCtoBeijing_1(String Timestamp_Local)
+ {
+ //先去掉格式
+ Timestamp_Local = DateUtil.reverseHandlerTime_1(Timestamp_Local);
+ //转换为北京时间
+ LocalDateTime date = LocalDateTime.parse(Timestamp_Local, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).plusHours(8);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String formatedDateStr = date.format(formatter);
+ return formatedDateStr;
+ }
+
+
+ // 获取当前时间
+ public static String getCurrentTime(){
+ Calendar calendar= Calendar.getInstance();
+ SimpleDateFormat dateFormat= new SimpleDateFormat(PATTERN_CLASSICAL);
+ return dateFormat.format(calendar.getTime());
+ }
+
+/**
+ * @Author w-liuyi01
+ * @Description //带时区的时间格式处理
+ * @Date 2022/4/22 10:55
+ * @Param [time]
+ * @return java.lang.String
+ **/
+ public static String handlerTime(String time) {
+ Date date = null;
+ try {
+ date = new SimpleDateFormat(PATTERN_CLASSICAL).parse(time);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ //国际时间格式转换东八区-8小时
+// calendar.set(Calendar.HOUR,calendar.get(Calendar.HOUR)-8);
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL_ISO);
+ //format将Date型转换为String型,parse将String型转换为Date型
+ String UTCDate = sdf.format(calendar.getTime());
+ return UTCDate;
+ }
+
+ public static String handlerTimeNoUTC(String time,int timeZone) {
+ Date date = null;
+ try {
+ date = new SimpleDateFormat(PATTERN_CLASSICAL_ISO).parse(time);
+ } catch (ParseException e) {
+ try {
+ date = new SimpleDateFormat(PATTERN_CLASSICAL_ISO_SIMPLE).parse(time);
+ }catch (ParseException ex) {
+ e.printStackTrace();
+ }
+ }
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ //国际时间格式转换东八区-8小时
+ calendar.set(Calendar.HOUR,calendar.get(Calendar.HOUR) + timeZone);
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL);
+ //format将Date型转换为String型,parse将String型转换为Date型
+ String UTCDate = sdf.format(calendar.getTime());
+ return UTCDate;
+ }
+
+
+ /**
+ * @Author w-lxf
+ * @Description 根据string日期获取时间戳
+ * @return
+ */
+ public static Long getTimesByString(String time){
+ Long result = 0l;
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL);
+// SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL_ISO);//yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
+ // 设置时区为CST,中国标准时区
+// sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+ try {
+ Date date = sdf.parse(time);
+ result = date.getTime();
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+ /**
+ * 根据string日期格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z'转化为long型时间戳
+ * @param time 日期格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
+ * @return
+ */
+ public static Long timeStringToLong(String time){
+ Long result = 0l;
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL_ISO);
+ sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+ try {
+ Date date = sdf.parse(time);
+ result = date.getTime();
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+ public static Long getTimesByStringType(String time){
+ Long result = 0l;
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL);
+ if (time.contains("Z")){
+ sdf = new SimpleDateFormat(PATTERN_CLASSICAL_ISO);
+ }
+ try {
+ Date date = sdf.parse(time);
+ result = date.getTime();
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+
+ /**
+ * 计算两个字符串时间相差天数
+ * @param date1
+ * @param date2
+ * @return
+ */
+ public static float dayDiff(String date1,String date2) throws ParseException{
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar calendar = Calendar.getInstance();
+
+ Date old = sdf.parse(date1);
+ calendar.setTime(old);
+ Long oTime = calendar.getTimeInMillis();
+
+ Date now = sdf.parse(date2);
+ calendar.setTime(now);
+ Long nTime = calendar.getTimeInMillis();
+ return (nTime - oTime)/(3600F * 1000 * 24);
+ }
+
+
+ /**
+ * UCT时间转换成北京时间
+ * @param time
+ * @return
+ */
+ public static String getDateByUct(String time){
+ String result = null;
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+ Date uctDate = null;
+ try {
+ //处理平台的utc时间格式统一为yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
+ String subTime = time.substring(time.indexOf(".")+1,time.length());
+ String fillTime = "";
+ if(subTime.length()<4){
+ time = time.substring(0,time.indexOf(".")+1);
+ for(int i=0;i<4-subTime.length();i++){
+ fillTime+="0";
+ }
+ time = time+fillTime+subTime;
+ }
+ uctDate = sdf.parse(time);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(uctDate);
+ //20220830时间不对去掉+8小时的逻辑
+// calendar.set(Calendar.HOUR,calendar.get(Calendar.HOUR)+8);
+// calendar.set(Calendar.HOUR,calendar.get(Calendar.HOUR));
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ result = simpleDateFormat.format(calendar.getTime());
+ } catch (ParseException e) {
+ Log.error("时间转换异常:"+e.getMessage());
+ //e.printStackTrace();
+ }
+ return result;
+ }
+
+
+ public static String reverseHandlerTimeByType(String time) {
+ Date date = null;
+ try {
+ if (time.contains("Z")){
+ time = time.replace("Z", " UTC");
+ date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z").parse(time);
+ }else{
+ date = new SimpleDateFormat(PATTERN_CLASSICAL).parse(time);
+ }
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL);
+ //format将Date型转换为String型,parse将String型转换为Date型
+ String UTCDate = sdf.format(date);
+ return UTCDate;
+ }
+
+
+ public static String reverseHandlerTime(String time) {
+ Date date = null;
+ try {
+ date = new SimpleDateFormat(PATTERN_CLASSICAL_ISO).parse(time);
+ } catch (ParseException e) {
+ try {
+ date = new SimpleDateFormat(PATTERN_CLASSICAL_ISO_SIMPLE).parse(time);
+ } catch (ParseException ex) {
+ ex.printStackTrace();
+ }
+ }
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ //国际时间格式转换东八区+8小时
+ calendar.set(Calendar.HOUR,calendar.get(Calendar.HOUR)+8);
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL);
+ //format将Date型转换为String型,parse将String型转换为Date型
+ String UTCDate = sdf.format(calendar.getTime());
+ return UTCDate;
+ }
+
+ public static String reverseHandlerTime_1(String time) {
+ Date date = null;
+ try {
+ if(time.length()<= 20)
+ {
+ time = time.replace('Z','.')+"000Z"; //2022-05-17T13:15:48Z 2022-05-14T15:00:15Z
+ date = new SimpleDateFormat(PATTERN_CLASSICAL_ISO).parse(time);
+ }
+ else
+ date = new SimpleDateFormat(PATTERN_CLASSICAL_ISO).parse(time);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_CLASSICAL);
+ //format将Date型转换为String型,parse将String型转换为Date型
+ String UTCDate = sdf.format(date);
+ return UTCDate;
+ }
+
+ /**
+ * 根据默认格式将指定字符串解析成日期
+ *
+ * @param str
+ * 指定字符串
+ * @return 返回解析后的日期
+ */
+ public static Date parse(String str) {
+ return parse(str, PATTERN_CLASSICAL);
+ }/**
+ * 根据指定格式将指定字符串解析成日期
+ *
+ * @param str
+ * 指定日期
+ * @param pattern
+ * 指定格式
+ * @return 返回解析后的日期
+ */
+ public static Date parse(String str, String pattern) {
+ SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+ try {
+ return sdf.parse(str);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }/**
+ * 根据默认格式将日期转格式化成字符串
+ *
+ * @param date
+ * 指定日期
+ * @return 返回格式化后的字符串
+ */
+ public static String format(Date date) {
+ return format(date, PATTERN_CLASSICAL);
+ }
+ /**
+ * 根据默认格式将日期转格式化成字符串
+ *
+ * @param date
+ * 指定日期
+ * @return 返回格式化后的字符串
+ */
+ public static String formatForDate(Date date) {
+ return format(date, PATTERN_CLASSICAL_SIMPLE);
+ }
+
+ /**
+ * 根据指定格式将指定日期格式化成字符串
+ *
+ * @param date
+ * 指定日期
+ * @param pattern
+ * 指定格式
+ * @return 返回格式化后的字符串
+ */
+ public static String format(Date date, String pattern) {
+ SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+ return sdf.format(date);
+ }/**
+ * 获取时间date1与date2相差的秒数
+ *
+ * @param date1
+ * 起始时间
+ * @param date2
+ * 结束时间
+ * @return 返回相差的秒数
+ */
+ public static int getOffsetSeconds(Date date1, Date date2) {
+ int seconds = (int) ((date2.getTime() - date1.getTime()) / 1000);
+ return seconds;
+ }/**
+ * 获取时间date1与date2相差的分钟数
+ *
+ * @param date1
+ * 起始时间
+ * @param date2
+ * 结束时间
+ * @return 返回相差的分钟数
+ */
+ public static int getOffsetMinutes(Date date1, Date date2) {
+ return getOffsetSeconds(date1, date2) / 60;
+ }/**
+ * 获取时间date1与date2相差的小时数
+ *
+ * @param date1
+ * 起始时间
+ * @param date2
+ * 结束时间
+ * @return 返回相差的小时数
+ */
+ public static int getOffsetHours(Date date1, Date date2) {
+ return getOffsetMinutes(date1, date2) / 60;
+ }/**
+ * 获取时间date1与date2相差的天数数
+ *
+ * @param date1
+ * 起始时间
+ * @param date2
+ * 结束时间
+ * @return 返回相差的天数
+ */
+ public static int getOffsetDays(Date date1, Date date2) {
+ return getOffsetHours(date1, date2) / 24;
+ }/**
+ * 获取时间date1与date2相差的周数
+ *
+ * @param date1
+ * 起始时间
+ * @param date2
+ * 结束时间
+ * @return 返回相差的周数
+ */
+ public static int getOffsetWeeks(Date date1, Date date2) {
+ return getOffsetDays(date1, date2) / 7;
+ }/**
+ * 获取重置指定日期的时分秒后的时间
+ *
+ * @param date
+ * 指定日期
+ * @param hour
+ * 指定小时
+ * @param minute
+ * 指定分钟
+ * @param second
+ * 指定秒
+ * @return 返回重置时分秒后的时间
+ */
+ public static Date getResetTime(Date date, int hour, int minute, int second) {
+ Calendar cal = Calendar.getInstance();
+ if (date != null) {
+ cal.setTime(date);
+ }
+ cal.set(Calendar.HOUR_OF_DAY, hour);
+ cal.set(Calendar.SECOND, minute);
+ cal.set(Calendar.MINUTE, second);
+ return cal.getTime();
+ }/**
+ * 返回指定日期的起始时间
+ *
+ * @param date
+ * 指定日期(例如2014-08-01)
+ * @return 返回起始时间(例如2014-08-01 00:00:00)
+ */
+ public static Date getIntegralStartTime(Date date) {
+ return getResetTime(date, 0, 0, 0);
+ }/**
+ * 返回指定日期的结束时间
+ *
+ * @param date
+ * 指定日期(例如2014-08-01)
+ * @return 返回结束时间(例如2014-08-01 23:59:59)
+ */
+ public static Date getIntegralEndTime(Date date) {
+ return getResetTime(date, 23, 59, 59);
+ }/**
+ * 获取指定日期累加年月日后的时间
+ *
+ * @param date
+ * 指定日期
+ * @param year
+ * 指定年数
+ * @param month
+ * 指定月数
+ * @param day
+ * 指定天数
+ * @return 返回累加年月日后的时间
+ */
+ public static Date rollDate(Date date, int year, int month, int day) {
+ Calendar cal = Calendar.getInstance();
+ if (date != null) {
+ cal.setTime(date);
+ }
+ cal.add(Calendar.YEAR, year);
+ cal.add(Calendar.MONTH, month);
+ cal.add(Calendar.DAY_OF_MONTH, day);
+ return cal.getTime();
+ }/**
+ * 获取指定日期累加指定月数后的时间
+ *
+ * @param date
+ * 指定日期
+ * @param month
+ * 指定月数
+ * @return 返回累加月数后的时间
+ */
+ public static Date rollMonth(Date date, int month) {
+ return rollDate(date, 0, month, 0);
+ }/**
+ * 获取指定日期累加指定天数后的时间
+ *
+ * @param date
+ * 指定日期
+ * @param day
+ * 指定天数
+ * @return 返回累加天数后的时间
+ */
+ public static Date rollDay(Date date, int day) {
+ return rollDate(date, 0, 0, day);
+ }/**
+ * 计算指定日期所在月份的天数
+ *
+ * @param date
+ * 指定日期
+ * @return 返回所在月份的天数
+ */
+ public static int getDayOfMonth(Date date) {
+ Calendar cal = Calendar.getInstance();
+ if (date != null) {
+ cal.setTime(date);
+ }
+ int dayOfMonth = cal.getActualMaximum(Calendar.DATE);
+ return dayOfMonth;
+ }/**
+ * 获取当月第一天的起始时间,例如2014-08-01 00:00:00
+ *
+ * @return 返回当月第一天的起始时间
+ */
+ public static Date getMonthStartTime() {
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 获取当月最后一天的结束时间,例如2014-08-31 23:59:59
+ *
+ * @return 返回当月最后一天的结束时间
+ */
+ public static Date getMonthEndTime() {
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.DAY_OF_MONTH, getDayOfMonth(cal.getTime()));
+ return getIntegralEndTime(cal.getTime());
+ }/**
+ * 获取上个月第一天的起始时间,例如2014-07-01 00:00:00
+ *
+ * @return 返回上个月第一天的起始时间
+ */
+ public static Date getLastMonthStartTime() {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.MONTH, -1);
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 获取上个月最后一天的结束时间,例如2014-07-31 23:59:59
+ *
+ * @return 返回上个月最后一天的结束时间
+ */
+ public static Date getLastMonthEndTime() {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.MONTH, -1);
+ cal.set(Calendar.DAY_OF_MONTH, getDayOfMonth(cal.getTime()));
+ return getIntegralEndTime(cal.getTime());
+ }/**
+ * 获取下个月第一天的起始时间,例如2014-09-01 00:00:00
+ *
+ * @return 返回下个月第一天的起始时间
+ */
+ public static Date getNextMonthStartTime() {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.MONTH, 1);
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 获取下个月最后一天的结束时间,例如2014-09-30 23:59:59
+ *
+ * @return 返回下个月最后一天的结束时间
+ */
+ public static Date getNextMonthEndTime() {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.MONTH, 1);
+ cal.set(Calendar.DAY_OF_MONTH, getDayOfMonth(cal.getTime()));
+ return getIntegralEndTime(cal.getTime());
+ }/**
+ * 获取当前季度第一天的起始时间
+ *
+ * @return 返回当前季度第一天的起始时间
+ */
+ public static Date getQuarterStartTime() {
+ Calendar cal = Calendar.getInstance();
+ int month = cal.get(Calendar.MONTH);
+ if (month < 3) {
+ cal.set(Calendar.MONTH, 0);
+ } else if (month < 6) {
+ cal.set(Calendar.MONTH, 3);
+ } else if (month < 9) {
+ cal.set(Calendar.MONTH, 6);
+ } else {
+ cal.set(Calendar.MONTH, 9);
+ }
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 获取当前季度最后一天的结束时间
+ *
+ * @return 返回当前季度最后一天的结束时间
+ */
+ public static Date getQuarterEndTime() {
+ Calendar cal = Calendar.getInstance();
+ int month = cal.get(Calendar.MONTH);
+ if (month < 3) {
+ cal.set(Calendar.MONTH, 2);
+ } else if (month < 6) {
+ cal.set(Calendar.MONTH, 5);
+ } else if (month < 9) {
+ cal.set(Calendar.MONTH, 8);
+ } else {
+ cal.set(Calendar.MONTH, 11);
+ }
+ cal.set(Calendar.DAY_OF_MONTH, getDayOfMonth(cal.getTime()));
+ return getIntegralEndTime(cal.getTime());
+ }/**
+ * 获取前一个工作日
+ *
+ * @return 返回前一个工作日
+ */
+ public static Date getPrevWorkday() {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, -1);
+ if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
+ cal.add(Calendar.DAY_OF_MONTH, -2);
+ }
+ if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
+ cal.add(Calendar.DAY_OF_MONTH, -1);
+ }
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 获取下一个工作日
+ *
+ * @return 返回下个工作日
+ */
+ public static Date getNextWorkday() {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
+ cal.add(Calendar.DAY_OF_MONTH, 2);
+ }
+ if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ }
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 获取当周的第一个工作日
+ *
+ * @return 返回第一个工作日
+ */
+ public static Date getFirstWorkday() {
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 获取当周的最后一个工作日
+ *
+ * @return 返回最后一个工作日
+ */
+ public static Date getLastWorkday() {
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
+ return getIntegralStartTime(cal.getTime());
+ }/**
+ * 判断指定日期是否是工作日
+ *
+ * @param date
+ * 指定日期
+ * @return 如果是工作日返回true,否则返回false
+ */
+ public static boolean isWorkday(Date date) {
+ Calendar cal = Calendar.getInstance();
+ if (date != null) {
+ cal.setTime(date);
+ }
+ int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
+ return !(dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY);
+ }/**
+ * 获取指定日期是星期几
+ *
+ * @param date
+ * 指定日期
+ * @return 返回星期几的描述
+ */
+ public static String getWeekdayDesc(Date date) {
+ final String[] weeks = new String[]{"星期日", "星期一", "星期二", "星期三", "星期四",
+ "星期五", "星期六"};
+ Calendar cal = Calendar.getInstance();
+ if (date != null) {
+ cal.setTime(date);
+ }
+ return weeks[cal.get(Calendar.DAY_OF_WEEK) - 1];
+ }/**
+ * 获取指定日期距离当前时间的时间差描述(如3小时前、1天前)
+ *
+ * @param date
+ * 指定日期
+ * @return 返回时间差的描述
+ */
+ public static String getTimeOffsetDesc(Date date) {
+ int seconds = getOffsetSeconds(date, new Date());
+ if (Math.abs(seconds) < 60) {
+ return Math.abs(seconds) + "秒" + (seconds > 0 ? "前" : "后");
+ }
+ int minutes = seconds / 60;
+ if (Math.abs(minutes) < 60) {
+ return Math.abs(minutes) + "分钟" + (minutes > 0 ? "前" : "后");
+ }
+ int hours = minutes / 60;
+ if (Math.abs(hours) < 60) {
+ return Math.abs(hours) + "小时" + (hours > 0 ? "前" : "后");
+ }
+ int days = hours / 24;
+ if (Math.abs(days) < 7) {
+ return Math.abs(days) + "天" + (days > 0 ? "前" : "后");
+ }
+ int weeks = days / 7;
+ if (Math.abs(weeks) < 5) {
+ return Math.abs(weeks) + "周" + (weeks > 0 ? "前" : "后");
+ }
+ int monthes = days / 30;
+ if (Math.abs(monthes) < 12) {
+ return Math.abs(monthes) + "个月" + (monthes > 0 ? "前" : "后");
+ }
+ int years = monthes / 12;
+ return Math.abs(years) + "年" + (years > 0 ? "前" : "后");
+ }
+
+ /**
+ * 根据时间区间获取时间段的所有日期
+ * @param startTime
+ * @param endTime
+ * @return
+ */
+ public static List getDates(Date startTime, Date endTime) {
+ startTime = getDateStart(startTime);
+ endTime = getDateStart(endTime);
+ List lDate = new ArrayList();
+ lDate.add(startTime);
+ Calendar calBegin = Calendar.getInstance();
+ // 使用给定的 Date 设置此 Calendar 的时间
+ calBegin.setTime(startTime);
+ Calendar calEnd = Calendar.getInstance();
+ // 使用给定的 Date 设置此 Calendar 的时间
+ calEnd.setTime(endTime);
+ // 测试此日期是否在指定日期之后
+ while (endTime.after(calBegin.getTime())){
+ // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
+ calBegin.add(Calendar.DAY_OF_MONTH, 1);
+ lDate.add(calBegin.getTime());
+ }
+ return lDate;
+ }
+
+ /**
+ * 获取指定日期的开始时间
+ * @param date
+ * @return
+ */
+ public static Date getDateStart(Date date){
+ if(date == null){
+ return null;
+ }
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
+ calendar.set(Calendar.MINUTE, 0);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ return calendar.getTime();
+ }
+
+ /**
+ * 获取指定日期的结束时间
+ * @return str
+ */
+ public static Date getDateEnd(Date date){
+ if(date == null){
+ return null;
+ }
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
+ calendar.set(Calendar.MINUTE, 59);
+ calendar.set(Calendar.SECOND, 59);
+ calendar.set(Calendar.MILLISECOND, 0);
+ return calendar.getTime();
+ }
+
+ /**
+ * 根据格式把date时间转为字符串
+ * @param date
+ * @param format
+ * @return
+ */
+ public static String dateToString(Date date, String format){
+ SimpleDateFormat dateFormat = new SimpleDateFormat(format);
+ return dateFormat.format(date);
+ }
+
+ public static Date stringToDate(String dateStr, String format) {
+ Date d = null;
+ SimpleDateFormat dateFormat = new SimpleDateFormat(format);
+ try {
+ dateFormat.setLenient(false);
+ d = dateFormat.parse(dateStr);
+ } catch (Exception e) {
+ d = null;
+ }
+ return d;
+ }
+
+ /**
+ * 时间戳转为date
+ * @param times
+ * @param format
+ * @return
+ */
+ public static Date timestampToDate(Long times, String format){
+ Date date = null;
+ try {
+ SimpleDateFormat dateFormat = new SimpleDateFormat(format);
+ String d = dateFormat.format(times);
+ date = dateFormat.parse(d);
+ }catch (Exception e){
+ date = null;
+ }
+ return date;
+ }
+
+ /**
+ * 时间戳转为date
+ * @param times
+ * @return
+ */
+ public static Date timestampToDate(Long times){
+ Date date = null;
+ try {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String d = dateFormat.format(times);
+ date = dateFormat.parse(d);
+ }catch (Exception e){
+ date = null;
+ }
+ return date;
+ }
+
+ /**
+ * 获取指定小时
+ * @param date 时间
+ * @param hours 小时数
+ * @param minutes 分钟数
+ * @return Date
+ */
+ public static Date getBeforeHour(Date date, int hours, int minutes){
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ calendar.add(Calendar.HOUR_OF_DAY, hours);
+ calendar.add(Calendar.MINUTE, minutes);
+ return calendar.getTime();
+ }
+
+
+ /**
+ * 时间戳转时间
+ */
+ public static String timeStamp2Time(Long timeStamp) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date date = new Date(timeStamp);
+ return sdf.format(date);
+ }
+
+
+ /**
+ * 得到几天前的时间
+ * @param date
+ * @param day
+ * @return
+ */
+ public static Date getDateBefore(Date date,int day){
+ Calendar now =Calendar.getInstance();
+ now.setTime(date);
+ now.set(Calendar.DATE,now.get(Calendar.DATE)-day);
+ return now.getTime();
+ }
+
+ /**
+ * 得到几天后的时间
+ * @param date
+ * @param day
+ * @return
+ */
+ public static Date getDateAfter(Date date,int day){
+ Calendar now = Calendar.getInstance();
+ now.setTime(date);
+ now.set(Calendar.DATE,now.get(Calendar.DATE)+day);
+ return now.getTime();
+ }
+
+
+ /**
+ * 得到几天后的时间
+ * @param date
+ * @param day
+ * @return
+ */
+ public static String getDateStringAfter(Date date,int day){
+ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+ Calendar now = Calendar.getInstance();
+ now.setTime(date);
+ now.set(Calendar.DATE,now.get(Calendar.DATE)+day);
+ return sf.format(now.getTime());
+ }
+
+ public static Boolean isSameYear(String date){
+ Calendar cal1 = Calendar.getInstance();
+ cal1.setTime(stringToDate(date, PATTERN_CLASSICAL));
+ int a = cal1.get(Calendar.YEAR);
+ Calendar cal2 = Calendar.getInstance();
+ int b = cal2.get(Calendar.YEAR);
+ return a == b;
+ }
+
+
+ public static String getSysdateStr() {
+ SimpleDateFormat formatter= new SimpleDateFormat(PATTERN_CLASSICAL);
+ Date date = new Date(System.currentTimeMillis());
+ return formatter.format(date);
+ }
+
+
+ public static String specialDate(String spcialString){
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+ Date date = null;
+ try {
+ date = df.parse(spcialString);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
+ Date date1 = null;
+ try {
+ date1 = df1.parse(date.toString());
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return df2.format(date1);
+ }
+
+ /**
+ * 获取两个日期之间的所有日期
+ * @param startTime 开始日期
+ * @param endTime 结束日期
+ * @return
+ */
+ public static List getDays(String startTime, String endTime) {
+ // 返回的日期集合
+ List days = new ArrayList();
+ DateFormat dateFormat = new SimpleDateFormat(DateUtil.PATTERN_CLASSICAL_SIMPLE);
+ try {
+ Date start = dateFormat.parse(startTime);
+ Date end = dateFormat.parse(endTime);
+ Calendar tempStart = Calendar.getInstance();
+ tempStart.setTime(start);
+ Calendar tempEnd = Calendar.getInstance();
+ tempEnd.setTime(end);
+ tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
+ while (tempStart.before(tempEnd)) {
+ days.add(dateFormat.format(tempStart.getTime()));
+ tempStart.add(Calendar.DAY_OF_YEAR, 1);
+ }
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return days;
+ }
+
+
+
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ String dateString = "2022-09-14T02:12:13Z";
+ String startDate = "2023-08-08";
+ String endDate = "2023-08-07";
+ System.out.println("固定时间段:" + DateUtil.getDays(startDate, endDate));
+ //System.out.println(DateUtil.handlerTimeNoUTC(dateString,8));
+// System.out.println(DateUtil.handlerTime(dateString));
+
+// Date date = new Date();
+// Date date1 = rollDay(date, -2);
+// Date date2 = rollMonth(date, -3);
+// System.out.println(format(date));
+// System.out.println(format(date1));
+// System.out.println(format(date2));
+// System.out.println(getTimeOffsetDesc(date1));
+// System.out.println(getTimeOffsetDesc(date2));
+// System.out.println("获取下个月第一天的起始时间:"+format(getNextMonthStartTime(),PATTERN_CH));
+// System.out.println("获取下个月最后一天的结束时间:"+format(getNextMonthEndTime()));
+// System.out.println("获取前一个工作日:"+format(getPrevWorkday(),PATTERN_CLASSICAL_SIMPLE));
+ System.out.println("获取后一个工作日:"+format(getNextWorkday(),PATTERN_CLASSICAL_SIMPLE));
+// System.out.println("获取当前季度第一天的起始时间:"+format(getQuarterStartTime()));
+// System.out.println("获取当前季度最后一天的结束时间:"+format(getQuarterEndTime()));
+// System.out.println("获取当周的第一个工作日:"+format(getFirstWorkday(),PATTERN_CLASSICAL_SIMPLE));
+// System.out.println("获取当周的最后一个工作日:"+format(getLastWorkday(),PATTERN_CLASSICAL_SIMPLE));
+// System.out.println(getWeekdayDesc(null));
+// System.out.println(getSysdateStr());
+ }
+
+}
diff --git a/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DeflaterUtils.java b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DeflaterUtils.java
new file mode 100644
index 0000000..7872c5c
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/DeflaterUtils.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed Materials - Property of ROOTCLOUD
+ * THIS MODULE IS "RESTRICTED MATERIALS OF ROOTCLOUD"
+ * (c) Copyright ROOTCLOUD Inc. 2018 All Rights Reserved
+ *
+ * The source code for this program is not published or
+ * otherwise divested of its trade secrets
+ */
+
+package com.rootcloud.common;
+
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+import java.util.zip.DataFormatException;
+import java.util.zip.Inflater;
+
+/**
+ * 解压缩字符串工具.
+ */
+public class DeflaterUtils {
+
+/*
+ */
+/**
+ * 压缩.
+ * @param unzipString {@code String}
+ * @return
+ *//*
+
+ public static String zipString(String unzipString) throws UnsupportedEncodingException {
+ */
+/*
+ * 0 ~ 9 压缩等级 低到高
+ * public static final int BEST_COMPRESSION = 9; 最佳压缩的压缩级别。
+ * public static final int BEST_SPEED = 1; 压缩级别最快的压缩。
+ * public static final int DEFAULT_COMPRESSION = -1; 默认压缩级别。
+ * public static final int DEFAULT_STRATEGY = 0; 默认压缩策略。
+ * public static final int DEFLATED = 8; 压缩算法的压缩方法(目前唯一支持的压缩方法)。
+ * public static final int FILTERED = 1; 压缩策略最适用于大部分数值较小且数据分布随机分布的数据。
+ * public static final int FULL_FLUSH = 3; 压缩刷新模式,用于清除所有待处理的输出并重置拆卸器。
+ * public static final int HUFFMAN_ONLY = 2; 仅用于霍夫曼编码的压缩策略。
+ * public static final int NO_COMPRESSION = 0; 不压缩的压缩级别。
+ * public static final int NO_FLUSH = 0; 用于实现最佳压缩结果的压缩刷新模式。
+ * public static final int SYNC_FLUSH = 2; 用于清除所有未决输出的压缩刷新模式;
+ * 可能会降低某些压缩算法的压缩率。
+ *//*
+
+ //使用指定的压缩级别创建一个新的压缩器。
+ Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION);
+ //设置压缩输入数据。
+ deflater.setInput(unzipString.getBytes("UTF-8"));
+ //当被调用时,表示压缩应该以输入缓冲区的当前内容结束。
+ deflater.finish();
+
+ final byte[] bytes = new byte[256];
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);
+
+ while (!deflater.finished()) {
+ //压缩输入数据并用压缩数据填充指定的缓冲区。
+ int length = deflater.deflate(bytes);
+ outputStream.write(bytes, 0, length);
+ }
+ //关闭压缩器并丢弃任何未处理的输入。
+ deflater.end();
+ return Base64.encodeToString(outputStream.toByteArray());
+ }
+*/
+
+ /**
+ * 解压.
+ * @param zipString {@code String}
+ * @return
+ */
+ public static String unzipString(String zipString) throws UnsupportedEncodingException {
+ byte[] decode = Base64.getDecoder().decode(zipString.getBytes("UTF-8"));
+ //创建一个新的解压缩器
+ Inflater inflater = new Inflater();
+ //设置解压缩的输入数据。
+ inflater.setInput(decode);
+
+ final byte[] bytes = new byte[256];
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);
+ try {
+ //finished() 如果已到达压缩数据流的末尾,则返回true。
+ while (!inflater.finished()) {
+ //将字节解压缩到指定的缓冲区中。
+ int length = inflater.inflate(bytes);
+ outputStream.write(bytes, 0, length);
+ }
+ } catch (DataFormatException e) {
+ e.printStackTrace();
+ return null;
+ } finally {
+ //关闭解压缩器并丢弃任何未处理的输入。
+ inflater.end();
+ }
+ return new String(outputStream.toByteArray(),"UTF-8");
+ }
+
+}
diff --git a/nxgx-ifsm-base/src/main/java/com/rootcloud/common/HttpClientUtil.java b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/HttpClientUtil.java
new file mode 100644
index 0000000..e70e6be
--- /dev/null
+++ b/nxgx-ifsm-base/src/main/java/com/rootcloud/common/HttpClientUtil.java
@@ -0,0 +1,302 @@
+/**
+ * Copyright (C), 2016-2019, 树根互联有限公司
+ * FileName: HttpClientUtil
+ * Author: yaqiang.zhao
+ * Date: 2019-9-25 17:22
+ * Description: 工具类
+ * History:
+ * |