Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Fedex
/
iClear-api
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
wei.zhou
2021-06-18 19:47:08 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0a0b3aa334a0b1efca31155f165b28a527009266
0a0b3aa3
1 parent
f0eeb7a3
提交代码
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1884 additions
and
70 deletions
doc/建表语句.sql
doc/数据推送接口文档v3.docx
src/main/java/com/erry/iclear/dateInterface/api/CustomsDataInterface.java
src/main/java/com/erry/iclear/dateInterface/common/Constant.java
src/main/java/com/erry/iclear/dateInterface/entity/ChmConsignment.java
src/main/java/com/erry/iclear/dateInterface/entity/ChmConsignmentDetail.java
src/main/java/com/erry/iclear/dateInterface/entity/DictionaryEntries.java
src/main/java/com/erry/iclear/dateInterface/entity/IClearApiLog.java
src/main/java/com/erry/iclear/dateInterface/init/IClearApiSystemInit.java
src/main/java/com/erry/iclear/dateInterface/repository/ChmConsignmentRepository.java
src/main/java/com/erry/iclear/dateInterface/repository/DictionaryEntriesRepository.java
src/main/java/com/erry/iclear/dateInterface/repository/MawbDetailRepository.java
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentDetailService.java
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentService.java
src/main/java/com/erry/iclear/dateInterface/service/DictionaryEntriesService.java
src/main/java/com/erry/iclear/dateInterface/service/IClearApiLogService.java
src/main/java/com/erry/iclear/dateInterface/util/DateUtils.java
src/test/java/com/erry/iclear/dateInterface/ChmConsignmentServiceTest.java
src/test/java/com/erry/iclear/dateInterface/IClearApiApplicationTests.java
src/test/java/com/erry/iclear/dateInterface/SHA256Test.java
doc/建表语句.sql
View file @
0a0b3aa
...
...
@@ -29,11 +29,12 @@ INSERT INTO T_ICLEAR_API_APPINFO VALUES(1,'CTM','iClearExport','b92131f03f19a348
CREATE
TABLE
T_ICLEAR_API_LOG
(
MSGID
int
identity
(
1
,
1
)
primary
key
--PK
,
MSG_TYPE
VARCHAR
(
20
)
--类型
,
MSG_TYPE
VARCHAR
(
20
)
--类型
: C D
,
APPID
VARCHAR
(
20
)
--用户ID
,
APPKEY
VARCHAR
(
20
)
--用户key
,
CREATE_TIME
datetime
--创建时间
,
UPDATE_TIME
datetime
--更新时间
,
PUSH_TIME
datetime
--消息推送时间
--,REQUEST_MSG VARCHAR(500)
,
RECEIVE_RESULT
VARCHAR
(
100
)
--记录接收后是否验证通过的结果
,
RESPONSE_TIME
datetime
-- 响应时间
...
...
doc/数据推送接口文档v3.docx
View file @
0a0b3aa
No preview for this file type
src/main/java/com/erry/iclear/dateInterface/api/CustomsDataInterface.java
View file @
0a0b3aa
...
...
@@ -3,11 +3,9 @@ package com.erry.iclear.dateInterface.api;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.api.response.ResultRS
;
import
com.erry.iclear.dateInterface.common.Constant
;
import
com.erry.iclear.dateInterface.entity.ChmConsignment
;
import
com.erry.iclear.dateInterface.entity.ChmConsignmentDetail
;
import
com.erry.iclear.dateInterface.entity.IClearApiLog
;
import
com.erry.iclear.dateInterface.service.*
;
import
com.erry.iclear.dateInterface.util.
MD5Util
;
import
com.erry.iclear.dateInterface.util.
DateUtils
;
import
com.erry.iclear.dateInterface.util.SHA256Util
;
import
com.google.gson.Gson
;
import
io.swagger.annotations.ApiOperation
;
...
...
@@ -65,8 +63,9 @@ public class CustomsDataInterface {
sw
.
start
(
"save log"
);
String
appId
=(
String
)
request
.
getHeader
(
"Appid"
);
String
appkey
=(
String
)
request
.
getHeader
(
"Appkey"
);
IClearApiLog
saveIClearApiLogResult
=
iClearApiLogService
.
saveIClearApiLog
(
iClearApiLogService
.
convertToIClearApiLog
(
mawb
,
appId
,
appkey
));
String
appKey
=(
String
)
request
.
getHeader
(
"Appkey"
);
String
timeStamp
=(
String
)
request
.
getHeader
(
"TimeStamp"
);
IClearApiLog
saveIClearApiLogResult
=
iClearApiLogService
.
saveIClearApiLog
(
iClearApiLogService
.
convertToIClearApiLog
(
mawb
,
appId
,
appKey
,
DateUtils
.
convertToDate
(
timeStamp
)));
if
(!
Objects
.
equals
(
saveIClearApiLogResult
,
null
)){
...
...
@@ -110,22 +109,10 @@ public class CustomsDataInterface {
//4、保存运单到iclear中
sw
.
start
(
"saveToIClear"
);
if
(
result
.
getSuccess
()==
true
){
ChmConsignment
chmConsignment
=
chmConsignmentService
.
convertToChmConsignment
(
mawb
);
List
<
ChmConsignmentDetail
>
chmConsignmentDetailList
=
new
ArrayList
<>();
mawb
.
getMawbDetailList
().
forEach
(
detail
->{
chmConsignmentDetailList
.
add
(
chmConsignmentDetailService
.
convertToChmConsignmentDetail
(
detail
));
});
chmConsignment
.
setChmConsignmentDetailList
(
chmConsignmentDetailList
);
ChmConsignment
chmConsignmentSaveResult
=
chmConsignmentService
.
saveChmConsignment
(
chmConsignment
);
if
(!
Objects
.
equals
(
chmConsignmentSaveResult
,
null
)){
log
.
info
(
"主单"
+
mawb
.
getBillNo
()+
" 保存成功,chmConsignmentId:"
+
chmConsignmentSaveResult
.
getId
());
}
else
{
log
.
info
(
"主单"
+
mawb
.
getBillNo
()+
" 保存失败"
);
}
chmConsignmentService
.
processChmConsignment
(
mawb
,
timeStamp
);
}
sw
.
stop
();
...
...
@@ -150,6 +137,8 @@ public class CustomsDataInterface {
}
/**
* 校验用户
* @param request
...
...
@@ -220,6 +209,21 @@ public class CustomsDataInterface {
}
/**
* 检查状态是否小于已报关
* @param statusCode
* @return
* true:报关之前
* false:报关之后
*/
private
boolean
compareStatusCode
(
String
statusCode
){
return
false
;
}
}
...
...
src/main/java/com/erry/iclear/dateInterface/common/Constant.java
View file @
0a0b3aa
...
...
@@ -47,5 +47,9 @@ public class Constant {
public
static
String
NEW_PACKAGE_TYPE
=
"NewPackageType_"
;
public
static
String
TRANSFER_WAY_BILL_STATUS
=
"transferWaybillStatus_"
;
public
static
String
SUPERVISION_MODE
=
"supervisionMode_"
;
}
...
...
src/main/java/com/erry/iclear/dateInterface/entity/ChmConsignment.java
View file @
0a0b3aa
package
com
.
erry
.
iclear
.
dateInterface
.
entity
;
import
com.erry.iclear.dateInterface.api.request.MawbDetail
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
...
...
@@ -28,7 +27,7 @@ public class ChmConsignment implements Serializable {
* 运单表ID,自动增加
*/
@Id
@GeneratedValue
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"ID"
)
private
Long
id
;
...
...
src/main/java/com/erry/iclear/dateInterface/entity/ChmConsignmentDetail.java
View file @
0a0b3aa
...
...
@@ -24,7 +24,7 @@ public class ChmConsignmentDetail implements Serializable {
* 运单明细表ID,自动增加
*/
@Id
@GeneratedValue
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"ID"
)
private
Long
id
;
...
...
src/main/java/com/erry/iclear/dateInterface/entity/DictionaryEntries.java
View file @
0a0b3aa
...
...
@@ -20,47 +20,52 @@ public class DictionaryEntries implements Serializable {
private
static
final
long
serialVersionUID
=
-
8423170334642989557L
;
@Id
@GeneratedValue
@Column
(
name
=
"ID"
)
private
Long
id
;
@Column
(
name
=
"CODE"
)
private
String
code
;
@Column
(
name
=
"DICT_CODE"
)
private
String
dictCode
;
@Column
(
name
=
"CHINESE_NAME"
)
private
String
chineseName
;
@Column
(
name
=
"ENGLISH_NAME"
)
private
String
englishName
;
@Column
(
name
=
"DESCRIPTION"
)
private
String
description
;
@Column
(
name
=
"STATUS"
)
private
Integer
status
;
@Column
(
name
=
"EXT1"
)
private
Integer
ext1
;
@Column
(
name
=
"EXT2"
)
private
String
ext2
;
@Column
(
name
=
"EXT3"
)
private
String
ext3
;
@Column
(
name
=
"EXT4"
)
private
BigDecimal
ext4
;
@Column
(
name
=
"EXT5"
)
private
Integer
ext5
;
@Column
(
name
=
"ORDINAL"
)
private
Integer
ordinal
;
@Column
(
name
=
"EXT6"
)
private
String
ext6
;
// @Column(name = "DICT_CODE")
// private String dictCode;
//
// @Column(name = "ENGLISH_NAME")
// private String englishName;
//
// @Column(name = "DESCRIPTION")
// private String description;
//
// @Column(name = "STATUS")
// private Integer status;
//
// @Column(name="DICT_ID")
// private String dictId;
//
// @Column(name = "EXT1")
// private Integer ext1;
//
// @Column(name = "EXT2")
// private String ext2;
//
// @Column(name = "EXT3")
// private String ext3;
//
// @Column(name = "EXT4")
// private BigDecimal ext4;
//
// @Column(name = "EXT5")
// private Integer ext5;
//
// @Column(name = "ORDINAL")
// private Integer ordinal;
//
// @Column(name = "EXT6")
// private String ext6;
}
...
...
src/main/java/com/erry/iclear/dateInterface/entity/IClearApiLog.java
View file @
0a0b3aa
...
...
@@ -38,6 +38,8 @@ public class IClearApiLog implements Serializable {
//收到的json,用 T_ICLEAR_API_MAWB表保存
//@Column(name= "REQUEST_MSG")
//private String request_msg;
@Column
(
name
=
"PUSH_TIME"
)
private
Date
pushTime
;
@Column
(
name
=
"RECEIVE_RESULT"
)
private
String
receiveResult
;
...
...
src/main/java/com/erry/iclear/dateInterface/init/IClearApiSystemInit.java
View file @
0a0b3aa
...
...
@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StopWatch
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -48,6 +49,8 @@ public class IClearApiSystemInit implements InitializingBean, ApplicationContext
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
try
{
StopWatch
sw
=
new
StopWatch
(
"initSystemCache"
);
sw
.
start
(
"initCache"
);
log
.
info
(
"init initAppInfo start>>>>>>>>>"
);
appInfoService
.
initAppInfo
();
log
.
info
(
"init initAppInfo end>>>>>>>>>"
);
...
...
@@ -68,6 +71,8 @@ public class IClearApiSystemInit implements InitializingBean, ApplicationContext
chmCarryPortService
.
initChmCarryPort
();
log
.
info
(
"init initChmCarryPort start>>>>>>>>>"
);
sw
.
stop
();
System
.
out
.
println
(
sw
.
prettyPrint
());
}
catch
(
Exception
e
){
log
.
error
(
"init afterPropertiesSet error:"
+
e
.
getMessage
());
...
...
src/main/java/com/erry/iclear/dateInterface/repository/ChmConsignmentRepository.java
View file @
0a0b3aa
...
...
@@ -4,6 +4,7 @@ import com.erry.iclear.dateInterface.entity.ChmConsignment;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.data.repository.query.Param
;
import
org.springframework.stereotype.Repository
;
import
java.util.Date
;
...
...
@@ -22,4 +23,13 @@ public interface ChmConsignmentRepository extends JpaSpecificationExecutor<ChmCo
@Query
(
nativeQuery
=
true
,
value
=
"select * from T_CHM_CONSIGNMENT where CONSIGNMENT_CODE IN ?1 and CREATE_TIME > ?2 "
)
public
List
<
ChmConsignment
>
findChmByCodeListAndCreateTime
(
List
chmConCodeList
,
Date
createTime
);
/**
* 根据运单号查找
* @param consignmentCode
* @param startDate
* @return
*/
@Query
(
nativeQuery
=
true
,
value
=
"select * from T_CHM_CONSIGNMENT where CONSIGNMENT_CODE = ?1 and CREATE_TIME>= ?2"
)
public
ChmConsignment
findChmConsignmentByConsignmentCode
(
String
consignmentCode
,
Date
startDate
);
}
...
...
src/main/java/com/erry/iclear/dateInterface/repository/DictionaryEntriesRepository.java
View file @
0a0b3aa
...
...
@@ -15,7 +15,7 @@ import java.util.List;
*/
@Repository
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
interface
DictionaryEntriesRepository
extends
JpaRepository
<
IClearApiLog
,
Integer
>,
JpaSpecificationExecutor
<
IClearApiLog
>
{
public
interface
DictionaryEntriesRepository
extends
JpaRepository
<
DictionaryEntries
,
Integer
>,
JpaSpecificationExecutor
<
DictionaryEntries
>
{
/**
* 根据code查找
...
...
@@ -30,7 +30,7 @@ public interface DictionaryEntriesRepository extends JpaRepository<IClearApiLog
* 查找全部DictionaryEntries
* @return
*/
@Query
(
nativeQuery
=
true
,
value
=
"select
*
from T_BI_DICTIONARY_ENTRIES where STATUS=1"
)
@Query
(
nativeQuery
=
true
,
value
=
"select
ID,CODE,CHINESE_NAME
from T_BI_DICTIONARY_ENTRIES where STATUS=1"
)
public
List
<
DictionaryEntries
>
findAllDictionaryEntries
();
...
...
src/main/java/com/erry/iclear/dateInterface/repository/MawbDetailRepository.java
View file @
0a0b3aa
...
...
@@ -6,6 +6,9 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* @author Administrator
*/
@Repository
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
interface
MawbDetailRepository
extends
JpaRepository
<
MawbDetail
,
Integer
>,
JpaSpecificationExecutor
<
MawbDetail
>
{
...
...
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentDetailService.java
View file @
0a0b3aa
...
...
@@ -4,9 +4,11 @@ import com.erry.iclear.dateInterface.api.request.MawbDetail;
import
com.erry.iclear.dateInterface.common.Constant
;
import
com.erry.iclear.dateInterface.entity.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.util.Objects
;
/**
* @author Administrator
...
...
@@ -84,9 +86,12 @@ public class ChmConsignmentDetailService {
//申报货物英文名称
result
.
setContentDescription
(
mawbDetail
.
getDeclGoodsEname
());
//目的地代码
if
(
StringUtils
.
isNotBlank
(
mawbDetail
.
getDestCode
())){
OrigplacecodeMapping
origplacecodeMapping
=
Constant
.
origplacecodeMappingCache
.
get
(
mawbDetail
.
getDestCode
());
result
.
setOrigplacecodeMapping
(
origplacecodeMapping
);
result
.
setOrigplacecode
(
origplacecodeMapping
.
getOrigplaceName
());
}
//境内目的地/境内货源地
...
...
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentService.java
View file @
0a0b3aa
package
com
.
erry
.
iclear
.
dateInterface
.
service
;
import
cn.hutool.core.date.DateUtil
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.common.Constant
;
import
com.erry.iclear.dateInterface.entity.ChmCarryPort
;
import
com.erry.iclear.dateInterface.entity.ChmConsignment
;
import
com.erry.iclear.dateInterface.entity.ChmConsignmentDetail
;
import
com.erry.iclear.dateInterface.entity.DictionaryEntries
;
import
com.erry.iclear.dateInterface.repository.ChmConsignmentRepository
;
import
com.erry.iclear.dateInterface.util.DateUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.transaction.Transactional
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Objects
;
/**
* @author Administrator
*/
@Service
@Slf4j
@Transactional
(
rollbackOn
=
Exception
.
class
)
public
class
ChmConsignmentService
{
@Autowired
private
ChmConsignmentRepository
chmConsignmentRepository
;
@Autowired
private
ChmConsignmentDetailService
chmConsignmentDetailService
;
/**
* 转换主单
* @return
*/
public
ChmConsignment
convertToChmConsignment
(
Mawb
mawb
){
public
ChmConsignment
convertToChmConsignment
(
Mawb
mawb
,
Date
pushTime
){
ChmConsignment
result
=
new
ChmConsignment
();
try
{
//进出口标志:固定值 E
...
...
@@ -37,9 +49,15 @@ public class ChmConsignmentService {
result
.
setDeclaredUnitName
(
mawb
.
getAgentName
());
//申报单位名称:固定值 联邦快递(中国)有限公司
//提单号:有总单号则取值“总单号_运单号”,没有总单号则取值“运单号”
String
billNo
[]=
mawb
.
getBillNo
().
split
(
"_"
);
String
[]
billNo
=
mawb
.
getBillNo
().
split
(
"_"
);
if
(
billNo
.
length
==
1
){
result
.
setConsignmentCode
(
billNo
[
0
]);
}
if
(
billNo
.
length
==
2
){
result
.
setConsignmentHeadCode
(
billNo
[
0
]);
result
.
setConsignmentCode
(
billNo
[
1
]);
}
//合同号
result
.
setContractCode
(
mawb
.
getContrNo
());
//主管海关(申报地海关)
...
...
@@ -97,13 +115,13 @@ public class ChmConsignmentService {
//预录入编号
result
.
setEnteringNo
(
mawb
.
getPreEntryId
());
//启运国/运抵国
DictionaryEntries
fromCountryDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
COUNTRY
+
mawb
.
get
OtherCurr
());
DictionaryEntries
fromCountryDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
COUNTRY
+
mawb
.
get
TradeCountry
());
result
.
setFromCountryDic
(
fromCountryDictionaryEntries
);
result
.
setFromCountry
(
fromCountryDictionaryEntries
.
getChineseName
());
//监管方式
DictionaryEntries
tradeModeDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
COUNTRY
+
mawb
.
getOtherCurr
());
DictionaryEntries
tradeModeDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
SUPERVISION_MODE
+
mawb
.
getTradeMode
());
result
.
setTradeModeDic
(
tradeModeDictionaryEntries
);
result
.
setTradeMode
(
tradeModeDictionaryEntries
.
getChineseName
());
...
...
@@ -117,8 +135,9 @@ public class ChmConsignmentService {
//境内收发货人名称
result
.
setOperateUnitName
(
mawb
.
getTradeName
());
//成交方式
DictionaryEntries
dealModeDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
CLINCH_TYPE
+
mawb
.
getTransMode
());
//TODO 成交方式
// DictionaryEntries dealModeDictionaryEntries = Constant.dictionaryEntriesCache.get(Constant.CLINCH_TYPE+mawb.getTransMode());
DictionaryEntries
dealModeDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
CLINCH_TYPE
+
"CIF"
);
result
.
setDealModeDic
(
dealModeDictionaryEntries
);
result
.
setDealMode
(
dealModeDictionaryEntries
.
getChineseName
());
...
...
@@ -151,7 +170,15 @@ public class ChmConsignmentService {
result
.
setOverseasConsignorFnCname
(
mawb
.
getOverseasConsigneeEname
());
//运单状态: 待申报海关
DictionaryEntries
transferWaybillStatusDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
TRANSFER_WAY_BILL_STATUS
+
"5"
);
result
.
setConsStatusDic
(
transferWaybillStatusDictionaryEntries
);
result
.
setConsStatus
(
transferWaybillStatusDictionaryEntries
.
getChineseName
());
//推送时间作为创建时间,可以用来校验数据的有序性,如果新的推送时间小于已有的创建时间,就不更新数据
result
.
setCreateTime
(
pushTime
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
log
.
error
(
"convertToChmConsignment() error:"
+
e
.
getMessage
());
}
return
result
;
...
...
@@ -173,4 +200,80 @@ public class ChmConsignmentService {
}
/**
* 根据运单号查找数据
* @param consignmentCode
* @return
*/
public
ChmConsignment
findChmConsignmentByConsignmentCode
(
String
consignmentCode
,
Date
startDate
){
try
{
return
chmConsignmentRepository
.
findChmConsignmentByConsignmentCode
(
consignmentCode
,
startDate
);
}
catch
(
Exception
e
){
log
.
error
(
"findChmConsignmentByConsignmentCode() error:"
+
e
.
getMessage
());
}
return
null
;
}
/**
* 保存或更新 iclear中的运单信息
* @param mawb
* @param timeStamp
*/
public
void
processChmConsignment
(
Mawb
mawb
,
String
timeStamp
)
{
try
{
Date
pushTime
=
DateUtils
.
timeStampToDate
(
Long
.
valueOf
(
timeStamp
));
ChmConsignment
chmConsignment
=
this
.
convertToChmConsignment
(
mawb
,
pushTime
);
List
<
ChmConsignmentDetail
>
chmConsignmentDetailList
=
new
ArrayList
<>();
mawb
.
getMawbDetailList
().
forEach
(
detail
->{
chmConsignmentDetailList
.
add
(
chmConsignmentDetailService
.
convertToChmConsignmentDetail
(
detail
));
});
chmConsignment
.
setChmConsignmentDetailList
(
chmConsignmentDetailList
);
//校验 7天+运单 ,如果有数据并且 还未报关就更新,如果数据就插入
ChmConsignment
chmConsignmentDB
=
this
.
findChmConsignmentByConsignmentCode
(
mawb
.
getBillNo
(),
DateUtils
.
addDate
(
DateUtils
.
getCurrentDate
(),-
7
));
//新增:如果没有就插入
if
(
Objects
.
equals
(
chmConsignmentDB
,
null
)){
log
.
info
(
"新增主单"
+
mawb
.
getBillNo
());
ChmConsignment
chmConsignmentSaveResult
=
this
.
saveChmConsignment
(
chmConsignment
);
if
(!
Objects
.
equals
(
chmConsignmentSaveResult
,
null
)){
log
.
info
(
"主单"
+
mawb
.
getBillNo
()+
" 保存成功,chmConsignmentId:"
+
chmConsignmentSaveResult
.
getId
());
}
else
{
log
.
info
(
"主单"
+
mawb
.
getBillNo
()+
" 保存失败"
);
}
//更新:
//如果有数据并且满足条件后才能更新数据
//条件1、状态为 待申报海关
//条件2、推送时间小于 上次推送的时间
}
else
if
(!
Objects
.
equals
(
chmConsignmentDB
,
null
)
&&
Objects
.
equals
(
chmConsignmentDB
.
getConsStatusDic
().
getCode
(),
"transferWaybillStatus_5"
)
&&
pushTime
.
getTime
()<
chmConsignmentDB
.
getCreateTime
().
getTime
()){
//TODO 更新数据
log
.
info
(
"更新主单"
+
mawb
.
getBillNo
());
}
}
catch
(
Exception
e
){
log
.
error
(
""
+
e
.
getMessage
());
}
}
}
...
...
src/main/java/com/erry/iclear/dateInterface/service/DictionaryEntriesService.java
View file @
0a0b3aa
...
...
@@ -26,6 +26,7 @@ public class DictionaryEntriesService {
try
{
result
=
dictionaryEntriesRepository
.
findAllDictionaryEntries
();
}
catch
(
Exception
e
){
e
.
printStackTrace
();
log
.
error
(
"getAllDictionaryEntries() error:"
+
e
.
getMessage
());
}
return
result
;
...
...
src/main/java/com/erry/iclear/dateInterface/service/IClearApiLogService.java
View file @
0a0b3aa
...
...
@@ -38,7 +38,7 @@ public class IClearApiLogService {
* 创建日志
* @return
*/
public
IClearApiLog
convertToIClearApiLog
(
Mawb
mawb
,
String
appId
,
String
appKey
){
public
IClearApiLog
convertToIClearApiLog
(
Mawb
mawb
,
String
appId
,
String
appKey
,
Date
pushTime
){
IClearApiLog
result
=
new
IClearApiLog
();
try
{
result
.
setMsgType
(
Constant
.
MSG_TYPE_D
);
...
...
@@ -46,6 +46,7 @@ public class IClearApiLogService {
result
.
setAppKey
(
appKey
);
result
.
setCreateTime
(
new
Date
());
result
.
setUpdateTime
(
new
Date
());
result
.
setPushTime
(
pushTime
);
result
.
setReceiveResult
(
null
);
result
.
setResponseTime
(
null
);
result
.
setSpendTime
(
null
);
...
...
src/main/java/com/erry/iclear/dateInterface/util/DateUtils.java
0 → 100644
View file @
0a0b3aa
package
com
.
erry
.
iclear
.
dateInterface
.
util
;
import
java.text.DateFormat
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.GregorianCalendar
;
import
java.util.HashMap
;
import
java.util.LinkedHashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.util.Assert
;
/**
* @author Administrator
*/
@Slf4j
public
class
DateUtils
{
private
DateUtils
()
{
};
public
static
String
YEAR_MONTH
=
"yyyyMM"
;
public
static
String
SHORT_DATE
=
"yyyyMMdd"
;
/**
* 功能:计算两个日期之间相差多少天 ((date2-date1)后取整)
*
* @param date1 减日期
* @param date2 被减日期
* @return
*/
public
static
int
dateDiff
(
Date
date1
,
Date
date2
)
{
Calendar
calendar1
=
Calendar
.
getInstance
();
Calendar
calendar2
=
Calendar
.
getInstance
();
calendar1
.
setTime
(
date1
);
calendar2
.
setTime
(
date2
);
calendar1
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
calendar1
.
set
(
Calendar
.
MINUTE
,
0
);
calendar1
.
set
(
Calendar
.
SECOND
,
0
);
calendar1
.
set
(
Calendar
.
MILLISECOND
,
0
);
calendar2
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
calendar2
.
set
(
Calendar
.
MINUTE
,
0
);
calendar2
.
set
(
Calendar
.
SECOND
,
0
);
calendar2
.
set
(
Calendar
.
MILLISECOND
,
0
);
long
l
=
Math
.
abs
(
calendar2
.
getTimeInMillis
()
-
calendar1
.
getTimeInMillis
());
long
increaseDate
=
l
/
1000
/
60
/
60
/
24
;
if
((
l
%
(
1000
*
60
*
60
*
24
))
>
0
)
{
increaseDate
=
increaseDate
+
1
;
}
return
(
int
)
increaseDate
;
}
/**
* date2 是否是date1 的下一天
*
* @param date1
* @param date2
* @return
*/
public
static
boolean
isNextDate
(
Date
date1
,
Date
date2
)
{
if
(
date2
.
after
(
date1
)
&&
dateDiff
(
date1
,
date2
)
==
1
)
{
return
true
;
}
return
false
;
}
/**
* 功能:按yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd转换为日期
*
* @param s
* @return
* @throws Exception
*/
public
static
Date
parseToDate
(
String
s
)
throws
Exception
{
DateFormat
df
;
if
(
s
==
null
)
{
return
null
;
}
if
(
s
.
contains
(
":"
))
{
try
{
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
return
df
.
parse
(
s
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
throw
e
;
}
}
else
{
try
{
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
return
df
.
parse
(
s
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
throw
e
;
}
}
}
/**
* date1 > date2+before-->true
*
* @param date1
* @param date2
* @param before
* @return
*/
public
static
boolean
isOverTime
(
Date
date1
,
Date
date2
,
int
before
)
{
try
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date2
);
calendar
.
add
(
Calendar
.
HOUR
,
-
1
*
before
);
// 如果参数 Date 等于此 Date,则返回值 0;
// 如果此 Date 在 Date 参数之前,则返回小于 0 的值;
// 如果此 Date 在 Date 参数之后,则返回大于 0 的值。
if
(
date1
.
compareTo
(
calendar
.
getTime
())
>
0
)
{
return
true
;
}
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
}
return
false
;
}
/**
* 功能:判断时间是否是凌晨(0-6),默认当前系统时间
*
* @param date
* @return
* @throws Exception
*/
public
static
boolean
isDawn
(
Date
date
)
throws
Exception
{
boolean
isDawn
=
false
;
Calendar
tempCal
=
Calendar
.
getInstance
();
if
(
date
!=
null
)
{
tempCal
.
setTime
(
date
);
}
int
hour
=
tempCal
.
get
(
Calendar
.
HOUR_OF_DAY
);
if
(
0
<=
hour
&&
hour
<=
6
)
{
isDawn
=
true
;
}
return
isDawn
;
}
/**
* 功能:根据传入的字符串,得到holdTime,得到的时间为1970年的HH:mm:ss
* 如果格式不对(不为例如:23:12:23或着23:56或着23),抛出异常
*
* @param str
* @return
*/
public
static
Date
getHoldTimeDate
(
String
str
)
throws
Exception
{
boolean
flag
=
false
;
Pattern
p1
=
Pattern
.
compile
(
"(0\\d{1}|1\\d{1}|2[0-3]):[0-5]\\d{1}:([0-5]\\d{1})"
);
Matcher
m1
=
p1
.
matcher
(
str
);
Pattern
p2
=
Pattern
.
compile
(
"(0\\d{1}|1\\d{1}|2[0-3])"
);
Matcher
m2
=
p2
.
matcher
(
str
);
Pattern
p3
=
Pattern
.
compile
(
"(0\\d{1}|1\\d{1}|2[0-4]):[0-5]\\d{1}"
);
Matcher
m3
=
p3
.
matcher
(
str
);
if
(
m1
.
matches
()
||
m2
.
matches
()
||
m3
.
matches
())
{
flag
=
true
;
if
(
m3
.
matches
())
{
return
string2Date
(
str
,
"HH:mm"
);
}
if
(
m1
.
matches
())
{
return
string2Date
(
str
,
"HH:mm:ss"
);
}
if
(
m2
.
matches
())
{
return
string2Date
(
str
,
"HH"
);
}
}
if
(!
flag
)
{
throw
new
RuntimeException
(
"holdTime format is invalid!"
);
}
return
null
;
}
/**
* 日期转为HoldTime格式HH:mm
*
* @param date
* @return
*/
public
static
String
date2HoldTime
(
Date
date
)
{
if
(
date
==
null
){
return
""
;
}
SimpleDateFormat
dateformat
=
new
SimpleDateFormat
(
"HH:mm"
);
return
dateformat
.
format
(
date
);
}
/**
* 功能:算出两个日期中所包含的月份
*
* @param fromDate
* @param toDate
* @return
*/
public
static
Set
<
String
>
getMonthBetweenTwoDate
(
Date
fromDate
,
Date
toDate
)
{
long
begin
=
fromDate
.
getTime
();
long
end
=
toDate
.
getTime
();
long
inter
=
end
-
begin
;
if
(
inter
<
0
)
{
inter
=
inter
*
(-
1
);
}
long
dateMillSec
=
86400000
;
long
dateCnt
=
inter
/
dateMillSec
;
long
remainder
=
inter
%
dateMillSec
;
if
(
remainder
!=
0
)
{
dateCnt
++;
}
Set
<
String
>
set
=
new
LinkedHashSet
<
String
>();
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
fromDate
);
cl
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cl
.
set
(
Calendar
.
MINUTE
,
0
);
cl
.
set
(
Calendar
.
SECOND
,
0
);
cl
.
set
(
Calendar
.
MILLISECOND
,
0
);
set
.
add
(
getDateyyyyMM
(
cl
.
getTime
()));
for
(
int
i
=
1
;
i
<=
dateCnt
;
i
++)
{
cl
.
add
(
Calendar
.
DAY_OF_YEAR
,
1
);
set
.
add
(
getDateyyyyMM
(
cl
.
getTime
()));
}
return
set
;
}
/**
* 功能:获取yyyyMM的年月
*
* @param date
* @return
*/
public
static
String
getDateyyyyMM
(
Date
date
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyyMM"
);
return
df
.
format
(
date
);
}
/**
* 功能:获取yyyyMMdd的年月日
*
* @param date
* @return
*/
public
static
String
getDateyyyyMMdd
(
Date
date
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyyMMdd"
);
return
df
.
format
(
date
);
}
/**
* 功能:获取yyyyMM的年月
*
* @param month
* @return
*/
public
static
Date
parseDateyyyyMM
(
String
month
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyyMM"
);
try
{
return
df
.
parse
(
month
);
}
catch
(
ParseException
e
)
{
}
return
null
;
}
/**
* 功能:格式yyyyMMdd日期
*
*
* @param date
* @return
*/
public
static
Date
parseDateyyyyMMdd
(
String
date
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyyMMdd"
);
try
{
return
df
.
parse
(
date
);
}
catch
(
ParseException
e
)
{
}
return
null
;
}
/**
* 功能:根据两个日期,算出某个月份的第一天,或者最后一天
*
* @param dateFrom
* @param dateTo
* @param month
* @param flag start
* @return
*/
public
static
int
getDayBetweenDateStartOrEnd
(
Date
dateFrom
,
Date
dateTo
,
Date
month
,
String
flag
)
{
if
(
dateFrom
.
getTime
()
>
dateTo
.
getTime
())
{
Date
temp
=
dateFrom
;
dateFrom
=
dateTo
;
dateTo
=
temp
;
}
if
(
getDateyyyyMM
(
month
).
compareTo
(
getDateyyyyMM
(
dateFrom
))
>
0
&&
getDateyyyyMM
(
month
).
compareTo
(
getDateyyyyMM
(
dateTo
))
<
0
)
{
if
(
"start"
.
equals
(
flag
)){
return
1
;
}
return
getMonthsMaxDay
(
month
);
}
else
if
(
getDateyyyyMM
(
month
).
compareTo
(
getDateyyyyMM
(
dateFrom
))
==
0
&&
getDateyyyyMM
(
month
).
compareTo
(
getDateyyyyMM
(
dateTo
))
<
0
)
{
if
(
"start"
.
equals
(
flag
)){
return
getDayOfMonth
(
dateFrom
);
}
return
getMonthsMaxDay
(
month
);
}
else
if
(
getDateyyyyMM
(
month
).
compareTo
(
getDateyyyyMM
(
dateFrom
))
>
0
&&
getDateyyyyMM
(
month
).
compareTo
(
getDateyyyyMM
(
dateTo
))
==
0
)
{
if
(
"start"
.
equals
(
flag
)){
return
1
;
}
return
getDayOfMonth
(
dateTo
);
}
else
{
if
(
"start"
.
equals
(
flag
))
{
return
getDayOfMonth
(
dateFrom
);
}
return
getDayOfMonth
(
dateTo
);
}
}
/**
* 功能:根据一个日期,算出是这个月中的第几天
*
* @param date
* @return
*/
public
static
int
getDayOfMonth
(
Date
date
)
{
Calendar
cal1
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date
);
return
cal1
.
get
(
Calendar
.
DAY_OF_MONTH
);
}
/**
* 功能:取出一个月中某天的日期
*
* @param month
* @param num
* @return
*/
public
static
Date
getDateOfMonthByNum
(
String
month
,
int
num
)
{
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
parseDateyyyyMM
(
month
));
cl
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cl
.
set
(
Calendar
.
MINUTE
,
0
);
cl
.
set
(
Calendar
.
SECOND
,
0
);
cl
.
set
(
Calendar
.
MILLISECOND
,
0
);
cl
.
add
(
Calendar
.
DAY_OF_YEAR
,
num
-
1
);
return
cl
.
getTime
();
}
/**
* 功能:得到本周第一天日期
*
* @return
*/
public
static
Date
getCurrentWeekMonday
()
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
int
index
=
cal
.
get
(
Calendar
.
DAY_OF_WEEK
);
// 转成中国的习惯,如果是第一天,则转化为第七天(星期天外国为一周的第一天,而中国为每周的最后一天)
if
(
index
==
1
){
index
=
8
;
}
cal
.
add
(
Calendar
.
DATE
,
-(
index
-
2
));
return
cal
.
getTime
();
}
/**
* 功能:得到本周最后一天的日期
*
* @return
*/
public
static
Date
getCurrentWeekSaturday
()
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
int
index
=
cal
.
get
(
Calendar
.
DAY_OF_WEEK
);
if
(
index
==
1
){
index
=
8
;
}
cal
.
add
(
Calendar
.
DATE
,
-(
index
-
2
));
cal
.
add
(
Calendar
.
DATE
,
6
);
return
cal
.
getTime
();
}
/**
* 功能:从指定日期移动一定的天数
*
* @param date
* @param day
* @return
*/
public
static
Date
moveDay
(
Date
date
,
int
day
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
cal
.
add
(
Calendar
.
DAY_OF_MONTH
,
day
);
return
cal
.
getTime
();
}
/**
* 功能:从当天日期移动一定的月数
*
* @param month
* @return
*/
public
static
Date
getMoveMonthDate
(
int
month
)
{
Date
nowDate
=
new
Date
();
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
nowDate
);
cl
.
add
(
Calendar
.
MONDAY
,
month
-
1
);
Date
date1
=
cl
.
getTime
();
return
date1
;
}
/**
* 功能:获取昨天
*
* @return
*/
public
static
Date
getYesterday
()
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
cal
.
add
(
Calendar
.
DAY_OF_MONTH
,
-
1
);
return
cal
.
getTime
();
}
/**
* 功能:根据某个日期,返回本月第一天
*
* @param date 任何一天
* @return Date 当月第一天
*/
public
static
Date
getMonthsFirstDay
(
Date
date
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
cal
.
set
(
Calendar
.
DATE
,
1
);
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
return
cal
.
getTime
();
}
/**
* 功能:根据某个日期,返回本月最后一天
*
* @param date 任何一天
* @return Date 当月第一天
*/
public
static
Date
getMonthsLastDay
(
Date
date
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
cal
.
set
(
Calendar
.
DATE
,
1
);
cal
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cal
.
set
(
Calendar
.
MINUTE
,
0
);
cal
.
set
(
Calendar
.
SECOND
,
0
);
cal
.
set
(
Calendar
.
MILLISECOND
,
0
);
cal
.
add
(
Calendar
.
MONTH
,
1
);
cal
.
add
(
Calendar
.
DATE
,
-
1
);
return
cal
.
getTime
();
}
/**
* 功能:获取起始日期和终止日期之间的日期(包含起始和终止日期)
*
* @param startDate
* @param endDate
* @return
*/
public
static
Set
<
String
>
getDayList
(
Date
startDate
,
Date
endDate
)
{
long
begin
=
startDate
.
getTime
();
long
end
=
endDate
.
getTime
();
long
inter
=
end
-
begin
;
if
(
inter
<
0
)
{
inter
=
inter
*
(-
1
);
}
long
dateMillSec
=
86400000
;
long
dateCnt
=
inter
/
dateMillSec
;
Set
<
String
>
set
=
new
LinkedHashSet
<
String
>();
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
startDate
);
cl
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cl
.
set
(
Calendar
.
MINUTE
,
0
);
cl
.
set
(
Calendar
.
SECOND
,
0
);
cl
.
set
(
Calendar
.
MILLISECOND
,
0
);
set
.
add
(
getDateyyyyMMdd
(
cl
.
getTime
()));
for
(
int
i
=
1
;
i
<=
dateCnt
;
i
++)
{
cl
.
add
(
Calendar
.
DAY_OF_YEAR
,
1
);
set
.
add
(
getDateyyyyMMdd
(
cl
.
getTime
()));
}
set
.
add
(
getDateyyyyMMdd
(
endDate
));
return
set
;
}
/**
* 功能:取得两个日期中最小的日期,如果两个日期参数都为null则返回null
*
* @param date1
* @param date2
* @return Date or null
*/
public
static
Date
getMinimizeDate
(
Date
date1
,
Date
date2
)
{
if
(
date1
==
null
)
{
return
date2
;
}
if
(
date2
==
null
)
{
return
date1
;
}
if
(
date1
.
compareTo
(
date2
)
>
0
)
{
return
date2
;
}
return
date1
;
}
/**
* 功能:取得两个日期中最大的日期,如果两个日期参数都为null则返回null
*
* @param date1
* @param date2
* @return
*/
public
static
Date
getMaxmizeDate
(
Date
date1
,
Date
date2
)
{
if
(
date1
==
null
)
{
return
date2
;
}
if
(
date2
==
null
)
{
return
date1
;
}
if
(
date1
.
compareTo
(
date2
)
<
0
)
{
return
date2
;
}
return
date1
;
}
/**
* 功能:获取指定日期和天数的星期几
*
* @param date 指定日期
* @param day 指定天数
* @return
*/
public
static
int
getDayofWeek
(
Date
date
,
int
day
)
{
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
);
calendar
.
set
(
Calendar
.
DAY_OF_MONTH
,
calendar
.
get
(
Calendar
.
DAY_OF_MONTH
)
+
day
-
1
);
return
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
);
}
/**
* 功能:判断两个Date是否为一天
*
* @param date1
* @param date2
* @return
*/
public
static
boolean
isSameDay
(
Date
date1
,
Date
date2
)
{
try
{
return
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
isSameDay
(
date1
,
date2
);
}
catch
(
Exception
e
)
{
return
false
;
}
}
/**
* 功能:把date1的小时,分钟,秒换成date2的小时,分钟,秒,返回换值后的date1
*
* @param date1
* @param date2
* @return
*/
public
static
Date
changeTheHourMinuteSecond
(
Date
date1
,
Date
date2
)
{
Calendar
cl1
=
Calendar
.
getInstance
();
cl1
.
setTime
(
date1
);
cl1
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cl1
.
set
(
Calendar
.
MINUTE
,
0
);
cl1
.
set
(
Calendar
.
SECOND
,
0
);
Calendar
cl2
=
Calendar
.
getInstance
();
cl2
.
setTime
(
date2
);
cl1
.
set
(
Calendar
.
HOUR_OF_DAY
,
cl2
.
get
(
Calendar
.
HOUR_OF_DAY
));
cl1
.
set
(
Calendar
.
MINUTE
,
cl2
.
get
(
Calendar
.
MINUTE
));
cl1
.
set
(
Calendar
.
SECOND
,
cl2
.
get
(
Calendar
.
SECOND
));
return
cl1
.
getTime
();
}
/**
* 功能:把date1的小时,分钟,秒换成23:59:59
*
* @param date1
* @return yyyy-MM-dd 23:59:59
*/
public
static
Date
getDayOfMaxHourMinuteSecond
(
Date
date1
)
{
Calendar
cl1
=
Calendar
.
getInstance
();
cl1
.
setTime
(
date1
);
cl1
.
set
(
Calendar
.
HOUR_OF_DAY
,
23
);
cl1
.
set
(
Calendar
.
MINUTE
,
59
);
cl1
.
set
(
Calendar
.
SECOND
,
59
);
return
cl1
.
getTime
();
}
/**
* 功能:添加天数
*
* @param basicDate
* @param days 正、负 整数 或0
* @return
*/
public
static
String
addDays
(
String
basicDate
,
int
days
)
{
try
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
java
.
sql
.
Date
.
valueOf
(
basicDate
));
cal
.
add
(
GregorianCalendar
.
DATE
,
days
);
return
formatDate
(
cal
.
getTime
(),
"yyyy-MM-dd"
);
}
catch
(
Exception
e
)
{
return
""
;
}
}
/**
* 功能:对日期进行格式化输出
*
* @param date 日期
* @param format
* @return
*/
public
static
String
formatDate
(
Date
date
,
String
format
)
{
try
{
if
(
format
!=
null
&&
!
""
.
equals
(
format
)
&&
date
!=
null
)
{
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
format
);
return
formatter
.
format
(
date
);
}
}
catch
(
Exception
e
)
{
return
""
;
}
return
""
;
}
/**
* 功能:获取两个日期之间的天数
*
* @param dateFrom 起始日期
* @param dateEnd 结束日期
* @return
*/
public
static
long
getDaysBetweenTwoDatesMath
(
String
dateFrom
,
String
dateEnd
)
{
Date
dtFrom
=
null
;
Date
dtEnd
=
null
;
dtFrom
=
string2Date
(
dateFrom
,
"yyyy-MM-dd"
);
dtEnd
=
string2Date
(
dateEnd
,
"yyyy-MM-dd"
);
long
begin
=
dtFrom
.
getTime
();
long
end
=
dtEnd
.
getTime
();
long
inter
=
end
-
begin
;
long
dateMillSec
=
24
*
60
*
60
*
1000
;
long
dateCnt
=
inter
/
dateMillSec
;
long
remainder
=
inter
%
dateMillSec
;
if
(
remainder
!=
0
)
{
dateCnt
++;
}
return
dateCnt
;
}
/**
* 功能:把日期字符串格式化为日期类型
*
* @param datetext 日期字符串
* @param format 日期格式,如果不传则使用"yyyy-MM-dd HH:mm:ss"格式
* @return
*/
public
static
Date
string2Date
(
String
datetext
,
String
format
)
{
try
{
SimpleDateFormat
df
;
if
(
datetext
==
null
||
""
.
equals
(
datetext
.
trim
()))
{
return
new
Date
();
}
if
(
format
!=
null
)
{
df
=
new
SimpleDateFormat
(
format
);
}
else
{
datetext
=
datetext
.
replaceAll
(
"/"
,
"-"
);
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
}
Date
date
=
df
.
parse
(
datetext
);
return
date
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
new
Date
();
}
}
/**
* 功能:取得两天之间的日期数组,包含开始日期与结束日期
*
* @param startDateStr 开始日期
* @param endDateStr 结束日期
* @return Date[] 日期数组
*/
public
static
Date
[]
getBetweenTwoDayArray
(
String
startDateStr
,
String
endDateStr
)
{
Date
startDate
=
string2Date
(
startDateStr
,
"yyyy-MM-dd"
);
int
dateNum
=
Integer
.
parseInt
(
getDaysBetweenTwoDates
(
startDateStr
,
endDateStr
))
+
1
;
Date
[]
dataArray
=
new
Date
[
dateNum
];
for
(
int
i
=
0
;
i
<
dateNum
;
i
++)
{
dataArray
[
i
]
=
startDate
;
startDate
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addDays
(
startDate
,
1
);
}
return
dataArray
;
}
/**
* 功能:获取两日期之间的天数
*
* @param dateFrom 起始日期
* @param dateEnd 结束日期
* @return
*/
public
static
String
getDaysBetweenTwoDates
(
String
dateFrom
,
String
dateEnd
)
{
Date
dtFrom
=
null
;
Date
dtEnd
=
null
;
dtFrom
=
string2Date
(
dateFrom
,
"yyyy-MM-dd"
);
dtEnd
=
string2Date
(
dateEnd
,
"yyyy-MM-dd"
);
long
begin
=
dtFrom
.
getTime
();
long
end
=
dtEnd
.
getTime
();
long
inter
=
end
-
begin
;
if
(
inter
<
0
)
{
inter
=
inter
*
(-
1
);
}
long
dateMillSec
=
24
*
60
*
60
*
1000
;
long
dateCnt
=
inter
/
dateMillSec
;
long
remainder
=
inter
%
dateMillSec
;
if
(
remainder
!=
0
)
{
dateCnt
++;
}
return
String
.
valueOf
(
dateCnt
);
}
/**
* 功能: 待确定
*
* @param startDateStr
* @param endDateStr
* @return
*/
public
static
String
[]
getBetweenTwoDayMonthArray
(
String
startDateStr
,
String
endDateStr
)
{
Date
[]
dateArray
=
getBetweenTwoDayArray
(
startDateStr
,
endDateStr
);
String
monthFirstDay
=
formatDateYyyyMmDd
(
dateArray
[
0
]).
substring
(
2
,
7
);
List
<
String
>
dayList
=
new
ArrayList
<
String
>();
dayList
.
add
(
monthFirstDay
);
for
(
int
i
=
0
;
i
<
dateArray
.
length
;
i
++)
{
if
(!
monthFirstDay
.
equals
(
formatDateYyyyMmDd
(
dateArray
[
i
]).
substring
(
2
,
7
)))
{
monthFirstDay
=
formatDateYyyyMmDd
(
dateArray
[
i
]).
substring
(
2
,
7
);
dayList
.
add
(
monthFirstDay
);
}
}
String
[]
strArray
=
new
String
[
dayList
.
size
()];
for
(
int
i
=
0
;
i
<
strArray
.
length
;
i
++)
{
strArray
[
i
]
=
dayList
.
get
(
i
).
substring
(
0
,
2
)
+
dayList
.
get
(
i
).
substring
(
3
,
5
);
}
return
strArray
;
}
/**
* 功能:获取星期几 SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, and
* SATURDAY
*
* @param date
* @return
*/
public
static
int
getWeekByDate
(
Date
date
)
{
Calendar
cl1
=
Calendar
.
getInstance
();
cl1
.
setTime
(
date
);
cl1
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
cl1
.
set
(
Calendar
.
MINUTE
,
0
);
cl1
.
set
(
Calendar
.
SECOND
,
0
);
return
cl1
.
get
(
Calendar
.
DAY_OF_WEEK
);
}
/**
* 功能:字符串转换为日期
*
* @param datetext yyyy/MM/dd
* @return
*/
public
static
Date
formatDateYyyyMmDd
(
String
datetext
)
{
try
{
SimpleDateFormat
df
;
if
(
datetext
==
null
||
""
.
equals
(
datetext
.
trim
()))
{
return
null
;
}
datetext
=
datetext
.
replaceAll
(
"/"
,
"-"
);
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
date
=
df
.
parse
(
datetext
);
return
date
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 功能: 添加Minute
*
* @param cdate
* @param amount
* @return
*/
public
static
Date
addMinute
(
Date
cdate
,
int
amount
)
{
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
cdate
);
cl
.
add
(
Calendar
.
MINUTE
,
amount
);
return
cl
.
getTime
();
}
/**
* 功能: 添加Hour
*
* @param cdate
* @param amount
* @return
*/
public
static
Date
addHour
(
Date
cdate
,
int
amount
)
{
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
cdate
);
cl
.
add
(
Calendar
.
HOUR_OF_DAY
,
amount
);
return
cl
.
getTime
();
}
/**
* 功能: 添加Date
*
* @param cdate
* @param amount
* @return
*/
public
static
Date
addDate
(
Date
cdate
,
int
amount
)
{
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
cdate
);
cl
.
add
(
Calendar
.
DAY_OF_MONTH
,
amount
);
return
cl
.
getTime
();
}
/**
* 功能: 添加Year
*
* @param basicDate
* @param year
* @return
*/
public
static
String
addYeas
(
String
basicDate
,
int
year
)
{
try
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
java
.
sql
.
Date
.
valueOf
(
basicDate
));
cal
.
add
(
GregorianCalendar
.
YEAR
,
year
);
return
formatDate
(
cal
.
getTime
(),
"yyyy-MM-dd"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
/**
* 添加Month
*
* @param cdate
* @param amount
* @return
*/
public
static
Date
addMonth
(
Date
cdate
,
int
amount
)
{
Calendar
cl
=
Calendar
.
getInstance
();
cl
.
setTime
(
cdate
);
cl
.
add
(
Calendar
.
MONTH
,
amount
);
return
cl
.
getTime
();
}
public
static
String
formatDateYyyyMmDd
(
Date
date
)
{
try
{
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
return
formatter
.
format
(
date
);
}
catch
(
Exception
e
)
{
return
null
;
}
}
/**
* 功能: 日期转换为字符串
*
* @param dd
* @return yyyy/MM/dd
*/
public
static
String
convertDateToStr
(
Date
dd
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
dd
);
int
day
=
calendar
.
get
(
Calendar
.
DAY_OF_MONTH
);
int
month
=
calendar
.
get
(
Calendar
.
MONTH
)
+
1
;
int
year
=
calendar
.
get
(
Calendar
.
YEAR
);
String
testDate
=
""
;
testDate
=
testDate
+
year
+
"/"
;
if
(
month
<
10
)
{
testDate
=
testDate
+
"0"
+
month
+
"/"
;
}
else
{
testDate
+=
month
+
"/"
;
}
if
(
day
<
10
)
{
testDate
=
testDate
+
"0"
+
day
;
}
else
{
testDate
+=
day
;
}
return
testDate
;
}
/**
* 功能:根据某个日期,返回本月的天数
*
* @param date 本月任何一天
* @return 天数
*/
public
static
int
getMonthsMaxDay
(
Date
date
)
{
Calendar
cal1
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date
);
return
cal1
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
);
}
/**
* 功能:获取指定日 开始本月的之后天数
*
* @param stringDate yyyy-MM-dd
* @return 天数(eg:"1,2,3,")
*/
public
static
String
getMonthsResidualDayNum
(
String
stringDate
)
{
Date
date
=
formatDateYyyyMmDd
(
stringDate
);
Calendar
cal1
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date
);
String
dayList
=
""
;
for
(
int
i
=
Integer
.
parseInt
(
stringDate
.
substring
(
8
));
i
<
cal1
.
getActualMaximum
(
Calendar
.
DATE
)
+
1
;
i
++)
{
dayList
+=
i
+
","
;
}
return
dayList
;
}
/**
* 功能:获取指定日 开始本月的之前天数
*
* @param stringDate yyyy-MM-dd
* @return 天数(eg:"1,2,3,")
*/
public
static
String
getMonthsAlreadyDayNum
(
String
stringDate
)
{
String
dayList
=
""
;
for
(
int
i
=
1
;
i
<
Integer
.
parseInt
(
stringDate
.
substring
(
8
))
+
1
;
i
++)
{
dayList
+=
i
+
","
;
}
return
dayList
;
}
/**
* 功能:获取指定日 开始本月的所有天数
*
* @param stringDate yyyy-MM-dd
* @return 天数(eg:"1,2,3,")
*/
public
static
String
getMonthsDayNum
(
String
stringDate
)
{
Date
date
=
formatDateYyyyMmDd
(
stringDate
);
Calendar
cal1
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date
);
String
dayList
=
""
;
for
(
int
i
=
1
;
i
<
cal1
.
getActualMaximum
(
Calendar
.
DATE
)
+
1
;
i
++)
{
dayList
+=
i
+
","
;
}
return
dayList
;
}
/**
* 功能:三个月的指定日期
*
* @param stringDate
* @return
*/
public
static
Date
[]
getNextThreeMonths
(
String
stringDate
)
{
Date
date1
=
formatDateYyyyMmDd
(
stringDate
);
Date
date2
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addMonths
(
date1
,
1
);
Date
date3
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addMonths
(
date2
,
1
);
Date
[]
dataArray
=
{
date1
,
date2
,
date3
};
return
dataArray
;
}
/**
* 功能:根据某个日期,返回本月的所有日期数组
*
* @param date 给定日期
* @return 本月的所有日期数组
*/
public
static
Date
[]
getOneMonthsDayArray
(
Date
date
)
{
Calendar
cal1
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date
);
cal1
.
set
(
Calendar
.
DATE
,
1
);
int
dayTimes
=
cal1
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
);
Date
[]
dataArray
=
new
Date
[
dayTimes
];
for
(
int
i
=
0
;
i
<
dayTimes
;
i
++)
{
dataArray
[
i
]
=
cal1
.
getTime
();
cal1
.
setTime
(
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addDays
(
dataArray
[
i
],
1
));
}
return
dataArray
;
}
/**
* 功能:根据某个日期,返回monthNum个月的第一天数组
*
* @param date 开始日期
* @param monthNum 月份个数
* @return 每个月的第一天数组
*/
public
static
Date
[]
getXMonthsFirstDayArray
(
Date
date
,
int
monthNum
)
{
Date
[]
dataArray
=
new
Date
[
monthNum
];
Calendar
cal1
=
Calendar
.
getInstance
();
cal1
.
setTime
(
date
);
cal1
.
set
(
Calendar
.
DATE
,
1
);
for
(
int
i
=
0
;
i
<
monthNum
;
i
++)
{
dataArray
[
i
]
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addMonths
(
cal1
.
getTime
(),
i
);
}
return
dataArray
;
}
/**
* 功能:根据1个日期,返回N天之内的日期数组
*
* @param startDateStr 开始日期
* @param dayTimes 天数
* @return 这段时间之间的日期数组
*/
public
static
Date
[]
getBetweenTwoDayArray
(
String
startDateStr
,
int
dayTimes
)
{
Date
startDate
=
formatDateYyyyMmDd
(
startDateStr
);
Date
[]
dataArray
=
new
Date
[
dayTimes
];
for
(
int
i
=
0
;
i
<
dayTimes
;
i
++)
{
dataArray
[
i
]
=
startDate
;
startDate
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addDays
(
startDate
,
1
);
}
return
dataArray
;
}
/**
* 功能:根据1个日期,返回N天之内的yy-MM月份数组
*
* @param startDateStr 开始日期
* @param dayTimes 天数
* @return 这段时间之间的日期数组
*/
public
static
String
[]
getBetweenTwoDayMonthArray
(
String
startDateStr
,
int
dayTimes
)
{
Date
[]
dateArray
=
getBetweenTwoDayArray
(
startDateStr
,
dayTimes
);
String
monthFirstDay
=
formatDateYyyyMmDd
(
dateArray
[
0
]).
substring
(
2
,
7
);
List
<
String
>
dayList
=
new
ArrayList
<
String
>();
dayList
.
add
(
monthFirstDay
);
for
(
int
i
=
0
;
i
<
dateArray
.
length
;
i
++)
{
if
(!
monthFirstDay
.
equals
(
formatDateYyyyMmDd
(
dateArray
[
i
]).
substring
(
2
,
7
)))
{
monthFirstDay
=
formatDateYyyyMmDd
(
dateArray
[
i
]).
substring
(
2
,
7
);
dayList
.
add
(
monthFirstDay
);
}
}
String
[]
strArray
=
new
String
[
dayList
.
size
()];
for
(
int
i
=
0
;
i
<
strArray
.
length
;
i
++)
{
strArray
[
i
]
=
dayList
.
get
(
i
).
substring
(
0
,
2
)
+
dayList
.
get
(
i
).
substring
(
3
,
5
);
}
return
strArray
;
}
/**
* 功能:根据1个日期,返回上N个月的第一天
*
* @param date 日期
* @param month 上N月
* @return 上N个月的第一天
*/
public
static
Date
rollMonth
(
Date
date
,
int
month
)
{
try
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
cal
.
set
(
Calendar
.
DATE
,
1
);
cal
.
roll
(
Calendar
.
MONTH
,
month
);
return
cal
.
getTime
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* @return yyyy-MM-dd HH:mm:ss
*/
public
static
String
getDateTime
()
{
Date
dateTime
=
new
Date
();
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
String
strTime
=
format
.
format
(
dateTime
);
return
strTime
;
}
/**
* @return yyyy-MM-dd
*/
public
static
String
getDate
()
{
Date
dateTime
=
new
Date
();
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
strTime
=
format
.
format
(
dateTime
);
return
strTime
;
}
/**
* Get the date of monday in this week
*
* @return yyyy-MM-dd
*/
public
static
String
getMondayOfThisWeek
()
{
String
strTemp
=
""
;
Calendar
c
=
Calendar
.
getInstance
();
int
dayofweek
=
c
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
if
(
dayofweek
==
0
){
dayofweek
=
7
;
}
c
.
add
(
Calendar
.
DATE
,
-
dayofweek
+
1
);
strTemp
=
c
.
get
(
1
)
+
"-"
;
if
(
c
.
get
(
2
)
+
1
<
10
){
strTemp
+=
"0"
;
}
strTemp
=
strTemp
+
(
c
.
get
(
2
)
+
1
)
+
"-"
;
if
(
c
.
get
(
5
)
<
10
){
strTemp
+=
"0"
;
}
strTemp
+=
c
.
get
(
5
);
return
strTemp
;
}
/**
* Get the date of sunday in this week
*
* @return yyyy-MM-dd
*/
public
static
String
getSundayOfThisWeek
()
{
String
strTemp
=
""
;
Calendar
c
=
Calendar
.
getInstance
();
int
dayofweek
=
c
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
if
(
dayofweek
==
0
){
dayofweek
=
7
;
}
c
.
add
(
Calendar
.
DATE
,
-
dayofweek
+
7
);
strTemp
=
c
.
get
(
1
)
+
"-"
;
if
(
c
.
get
(
2
)
+
1
<
10
){
strTemp
+=
"0"
;
}
strTemp
=
strTemp
+
(
c
.
get
(
2
)
+
1
)
+
"-"
;
if
(
c
.
get
(
5
)
<
10
){
strTemp
+=
"0"
;
}
strTemp
+=
c
.
get
(
5
);
return
strTemp
;
}
/**
* Get the date of AfterDays
*
* @param day
* @return yyyy-MM-dd
*/
public
static
String
getTheDayAfterDays
(
int
day
)
{
String
strTemp
=
""
;
Calendar
c
=
Calendar
.
getInstance
();
c
.
add
(
Calendar
.
DATE
,
day
);
strTemp
=
c
.
get
(
1
)
+
"-"
;
if
(
c
.
get
(
2
)
+
1
<
10
){
strTemp
+=
"0"
;
}
strTemp
=
strTemp
+
(
c
.
get
(
2
)
+
1
)
+
"-"
;
if
(
c
.
get
(
5
)
<
10
){
strTemp
+=
"0"
;
}
strTemp
+=
c
.
get
(
5
);
return
strTemp
;
}
/**
* Get data time in user's specific format
*
* @param strFormat
* @return String strDtTime
*/
public
static
String
getLocalDateTime
(
String
strFormat
)
{
String
strDtTime
=
""
;
if
(
strFormat
!=
null
&&
!
strFormat
.
equals
(
""
))
{
SimpleDateFormat
simpledateformat
=
new
SimpleDateFormat
(
strFormat
);
long
lngVal
=
System
.
currentTimeMillis
();
strDtTime
=
simpledateformat
.
format
(
new
Date
(
lngVal
));
}
return
strDtTime
;
}
/**
* Get data time in yyyyMMddHHmmss format
*
* @return String strDtTime
*/
public
static
String
getDateTimeStamp
()
{
SimpleDateFormat
simpledateformat
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
long
lngVal
=
System
.
currentTimeMillis
();
String
strDtTime
=
simpledateformat
.
format
(
new
Date
(
lngVal
));
return
strDtTime
;
}
/**
* Get date time in yyyyMMdd format
*
* @return String strDtTime
*/
public
static
String
getDateStamp
()
{
SimpleDateFormat
simpledateformat
=
new
SimpleDateFormat
(
"yyyyMMdd"
);
long
lngVal
=
System
.
currentTimeMillis
();
String
strDtTime
=
simpledateformat
.
format
(
new
Date
(
lngVal
));
return
strDtTime
;
}
/**
* Get date time in HHmmss format
*
* @return String strDtTime
*/
public
static
String
getTimeStamp
()
{
SimpleDateFormat
simpledateformat
=
new
SimpleDateFormat
(
"HHmmss"
);
long
lngVal
=
System
.
currentTimeMillis
();
String
strDtTime
=
simpledateformat
.
format
(
new
Date
(
lngVal
));
return
strDtTime
;
}
/**
* Get date time in yyyy年MM月dd日hh:mm:ss format
*
* @return String sb
*/
public
static
String
getDateTimeCN
()
{
StringBuffer
stringbuffer
=
new
StringBuffer
();
Calendar
calendar
=
Calendar
.
getInstance
();
stringbuffer
.
setLength
(
0
);
stringbuffer
.
append
(
calendar
.
get
(
1
));
stringbuffer
.
append
(
'年'
);
stringbuffer
.
append
(
calendar
.
get
(
2
)
+
1
);
stringbuffer
.
append
(
'月'
);
stringbuffer
.
append
(
calendar
.
get
(
5
));
stringbuffer
.
append
(
'日'
);
stringbuffer
.
append
(
calendar
.
get
(
11
));
stringbuffer
.
append
(
':'
);
if
(
calendar
.
get
(
12
)
<
10
){
stringbuffer
.
append
(
0
);
}
stringbuffer
.
append
(
calendar
.
get
(
12
));
stringbuffer
.
append
(
':'
);
if
(
calendar
.
get
(
13
)
<
10
){
stringbuffer
.
append
(
0
);
}
stringbuffer
.
append
(
calendar
.
get
(
13
));
return
stringbuffer
.
toString
();
}
/**
* Get date time in Hashmap
*
* @return a HashMap
*/
public
static
Map
<
String
,
Integer
>
getDateTimeToHashMap
()
{
Map
<
String
,
Integer
>
hpDt
=
new
HashMap
<
String
,
Integer
>();
Calendar
cal
=
Calendar
.
getInstance
();
hpDt
.
put
(
"YEAR"
,
new
Integer
(
cal
.
get
(
Calendar
.
YEAR
)));
hpDt
.
put
(
"MONTH"
,
new
Integer
(
cal
.
get
(
Calendar
.
MONTH
)
+
1
));
hpDt
.
put
(
"DAY"
,
new
Integer
(
cal
.
get
(
Calendar
.
DAY_OF_MONTH
)));
hpDt
.
put
(
"HOUR"
,
new
Integer
(
cal
.
get
(
Calendar
.
HOUR_OF_DAY
)));
hpDt
.
put
(
"MINUTE"
,
new
Integer
(
cal
.
get
(
Calendar
.
MINUTE
)));
hpDt
.
put
(
"SECOND"
,
new
Integer
(
cal
.
get
(
Calendar
.
SECOND
)));
return
hpDt
;
}
/**
* Format time 2005-10-08 10:03:41.0 to 2005-10-08 10:03:41 .
*
* @param str the time string
* @return String
*/
public
static
String
getFormatTimeStamp
(
String
str
)
{
str
=
(
str
==
null
)
?
""
:
str
;
String
strTemp
=
""
;
for
(
int
i
=
0
;
i
<
str
.
length
();
i
++)
{
if
(
str
.
charAt
(
i
)
==
'.'
)
{
break
;
}
strTemp
+=
str
.
charAt
(
i
);
}
return
strTemp
;
}
public
static
String
getFormatDate
(
String
str
)
{
str
=
(
str
==
null
)
?
""
:
str
;
String
strTemp
=
""
;
for
(
int
i
=
0
;
i
<
str
.
length
();
i
++)
{
if
(
str
.
charAt
(
i
)
==
' '
)
{
break
;
}
strTemp
+=
str
.
charAt
(
i
);
}
return
strTemp
;
}
public
static
boolean
isInDayRange
(
Date
availDate
,
Date
indateFrom
,
Date
indateTo
)
{
Assert
.
notNull
(
availDate
);
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
availDate
);
c
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
c
.
set
(
Calendar
.
MINUTE
,
0
);
c
.
set
(
Calendar
.
SECOND
,
0
);
c
.
set
(
Calendar
.
MILLISECOND
,
0
);
if
(
indateFrom
!=
null
)
{
Calendar
c1
=
Calendar
.
getInstance
();
c1
.
setTime
(
indateFrom
);
c1
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
c1
.
set
(
Calendar
.
MINUTE
,
0
);
c1
.
set
(
Calendar
.
SECOND
,
0
);
c1
.
set
(
Calendar
.
MILLISECOND
,
0
);
if
(
c
.
before
(
c1
)){
return
false
;
}
}
if
(
indateTo
!=
null
)
{
Calendar
c2
=
Calendar
.
getInstance
();
c2
.
setTime
(
indateTo
);
c2
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
c2
.
set
(
Calendar
.
MINUTE
,
0
);
c2
.
set
(
Calendar
.
SECOND
,
0
);
c2
.
set
(
Calendar
.
MILLISECOND
,
0
);
if
(
c
.
after
(
c2
))
return
false
;
}
return
true
;
}
/**
* 获取从start到end之间的日期(格式yyyyMM)
*
* @param start
* @param end
* @return
*/
public
static
List
<
String
>
getBetweenMonths
(
Date
start
,
Date
end
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
YEAR_MONTH
);
Date
_start
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
truncate
(
start
,
Calendar
.
MONTH
);
List
<
String
>
months
=
new
ArrayList
<
String
>();
while
(!
_start
.
after
(
end
))
{
months
.
add
(
df
.
format
(
_start
));
_start
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addMonths
(
_start
,
1
);
}
return
months
;
}
/**
* 获取从start到end之间的日期(格式yyyyMMdd)
*
* @param start
* @param end
* @return
*/
public
static
List
<
String
>
getBetweenDays
(
Date
start
,
Date
end
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
SHORT_DATE
);
Date
_start
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
truncate
(
start
,
Calendar
.
DAY_OF_MONTH
);
List
<
String
>
days
=
new
ArrayList
<
String
>();
while
(!
_start
.
after
(
end
))
{
days
.
add
(
df
.
format
(
_start
));
_start
=
org
.
apache
.
commons
.
lang3
.
time
.
DateUtils
.
addDays
(
_start
,
1
);
}
return
days
;
}
/**
* 将字符串日期转换为Date
*
* @param s
* @return
*/
public
static
Date
convertToDate
(
String
s
)
{
DateFormat
df
;
if
(
s
==
null
)
{
return
null
;
}
if
(
s
.
contains
(
":"
))
{
try
{
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
return
df
.
parse
(
s
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
return
null
;
}
}
else
{
try
{
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
return
df
.
parse
(
s
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
return
null
;
}
}
}
/**
* 获取当期日期
*
* @return
*/
public
static
Date
getCurrentDate
(){
Calendar
curDate
=
Calendar
.
getInstance
();
curDate
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
curDate
.
set
(
Calendar
.
MINUTE
,
0
);
curDate
.
set
(
Calendar
.
SECOND
,
0
);
curDate
.
set
(
Calendar
.
MILLISECOND
,
0
);
return
curDate
.
getTime
();
}
public
static
Date
timeStampToDate
(
long
timeStamp
){
return
new
Date
(
timeStamp
);
}
}
src/test/java/com/erry/iclear/dateInterface/ChmConsignmentServiceTest.java
0 → 100644
View file @
0a0b3aa
package
com
.
erry
.
iclear
.
dateInterface
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.api.request.MawbDetail
;
import
com.erry.iclear.dateInterface.service.ChmConsignmentService
;
import
org.junit.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
public
class
ChmConsignmentServiceTest
extends
IClearApiApplicationTests
{
@Autowired
private
ChmConsignmentService
chmConsignmentService
;
@Test
public
void
testProcessChmConsignment
(){
try
{
Mawb
mawb
=
this
.
createNewMawb
();
String
timeStamp
=
String
.
valueOf
(
new
Date
().
getTime
());
chmConsignmentService
.
processChmConsignment
(
mawb
,
timeStamp
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
}
private
Mawb
createNewMawb
(){
MawbDetail
d1
=
new
MawbDetail
();
d1
.
setClassMark
(
""
);
d1
.
setCodeTS
(
"69125472"
);
d1
.
setDeclPrice
(
BigDecimal
.
valueOf
(
111.123
));
d1
.
setDeclTotal
(
BigDecimal
.
valueOf
(
788
));
d1
.
setDutyMode
(
"1"
);
d1
.
setExgNo
(
""
);
d1
.
setExgVersion
(
""
);
d1
.
setFirstUnit
(
"001"
);
d1
.
setFirstQty
(
11
);
d1
.
setGUnit
(
"007"
);
d1
.
setGModel
(
"商品规格、型号"
);
d1
.
setGName
(
"餐桌"
);
d1
.
setGNo
(
"1"
);
d1
.
setGQty
(
1
);
d1
.
setOriginCountry
(
"US"
);
d1
.
setSecondUnit
(
"007"
);
d1
.
setSecondQty
(
2
);
d1
.
setTradeCurr
(
"USD"
);
d1
.
setUseTo
(
""
);
d1
.
setWorkUsd
(
null
);
d1
.
setDestinationCountry
(
"CN"
);
d1
.
setCiqCode
(
""
);
d1
.
setDeclGoodsEname
(
""
);
d1
.
setDestCode
(
""
);
d1
.
setDistrictCode
(
"4408W"
);
MawbDetail
d2
=
new
MawbDetail
();
d2
.
setClassMark
(
""
);
d2
.
setCodeTS
(
"69125472"
);
d2
.
setDeclPrice
(
BigDecimal
.
valueOf
(
45.72
));
d2
.
setDeclTotal
(
BigDecimal
.
valueOf
(
33
));
d2
.
setDutyMode
(
"1"
);
d2
.
setExgNo
(
""
);
d2
.
setExgVersion
(
""
);
d2
.
setFirstUnit
(
"001"
);
d2
.
setFirstQty
(
11
);
d2
.
setGUnit
(
"007"
);
d2
.
setGModel
(
"商品规格、型号"
);
d2
.
setGName
(
"餐桌"
);
d2
.
setGNo
(
"2"
);
d2
.
setGQty
(
22
);
d2
.
setOriginCountry
(
"US"
);
d2
.
setSecondUnit
(
"007"
);
d2
.
setSecondQty
(
3
);
d2
.
setTradeCurr
(
"USD"
);
d2
.
setUseTo
(
""
);
d2
.
setWorkUsd
(
null
);
d2
.
setDestinationCountry
(
"CN"
);
d2
.
setCiqCode
(
""
);
d2
.
setDeclGoodsEname
(
""
);
d2
.
setDestCode
(
""
);
d2
.
setDistrictCode
(
"4408W"
);
List
<
MawbDetail
>
mawbDetailList
=
new
ArrayList
<
MawbDetail
>();
mawbDetailList
.
add
(
d1
);
mawbDetailList
.
add
(
d2
);
Mawb
mawb
=
new
Mawb
();
mawb
.
setIEFlag
(
"E"
);
mawb
.
setType
(
"EX"
);
mawb
.
setAgentCode
(
"1111980005"
);
mawb
.
setAgentName
(
"联邦快递(中国)有限公司"
);
mawb
.
setBillNo
(
"202105210784"
);
mawb
.
setContrNo
(
"NO.565733"
);
mawb
.
setCustomMaster
(
"0101"
);
mawb
.
setCutMode
(
"1"
);
//TODO levyType_1 到底是什么code?
mawb
.
setDeclTrnRel
(
"0"
);
mawb
.
setDistinatePort
(
"ASM000"
);
mawb
.
setEdiId
(
"001"
);
mawb
.
setEntryId
(
"25512456"
);
mawb
.
setFeeCurr
(
"USD"
);
mawb
.
setFeeMark
(
"3"
);
mawb
.
setFeeRate
(
BigDecimal
.
valueOf
(
100.58
));
mawb
.
setGrossWet
(
500
);
mawb
.
setIEPort
(
"0101"
);
mawb
.
setInputerName
(
""
);
mawb
.
setInsurCurr
(
"MOP"
);
mawb
.
setInsurMark
(
"3"
);
mawb
.
setInsurRate
(
BigDecimal
.
valueOf
(
23.44
));
mawb
.
setManualNo
(
"备案号"
);
mawb
.
setNetWt
(
BigDecimal
.
valueOf
(
80
));
mawb
.
setOtherCurr
(
"USD"
);
mawb
.
setOtherRate
(
BigDecimal
.
valueOf
(
10
));
mawb
.
setOtherMark
(
""
);
mawb
.
setOwnerCode
(
"Z321654987"
);
mawb
.
setOwnerName
(
"上海保险"
);
mawb
.
setPackNo
(
1
);
mawb
.
setPreEntryId
(
""
);
mawb
.
setTradeCountry
(
"US"
);
mawb
.
setTradeMode
(
"110"
);
mawb
.
setTradeCode
(
"Z321654987"
);
mawb
.
setTrafMode
(
"1"
);
mawb
.
setTradeName
(
"上海铢怡国际货物运输代理有限公司"
);
mawb
.
setTransMode
(
"3"
);
mawb
.
setWrapType
(
"22"
);
mawb
.
setTradeCodeScc
(
"A74125896321456987"
);
mawb
.
setOwnerCodeScc
(
"A74125896321456987"
);
mawb
.
setTradeAreaCode
(
"US"
);
mawb
.
setMarkNo
(
"N/M"
);
mawb
.
setEntyPortCode
(
"310302"
);
mawb
.
setGoodsPlace
(
""
);
mawb
.
setDeclareName
(
"张安"
);
mawb
.
setOverseasConsignorCode
(
"Z785421"
);
mawb
.
setOverseasConsigneeCode
(
"Z785421"
);
mawb
.
setOverseasConsigneeEname
(
"出口时必填收件人公司名(原)"
);
mawb
.
setMawbDetailList
(
mawbDetailList
);
return
mawb
;
}
}
src/test/java/com/erry/iclear/dateInterface/IClearApiApplicationTests.java
View file @
0a0b3aa
package
com
.
erry
.
iclear
.
dateInterface
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.ActiveProfiles
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
@WebAppConfiguration
@ActiveProfiles
(
"dev"
)
class
IClearApiApplicationTests
{
@Test
void
contextLoads
()
{
public
void
contextLoads
()
{
}
}
...
...
src/test/java/com/erry/iclear/dateInterface/SHA256Test.java
View file @
0a0b3aa
package
com
.
erry
.
iclear
.
dateInterface
;
import
cn.hutool.core.date.DateUtil
;
import
com.erry.iclear.dateInterface.util.DateUtils
;
import
com.erry.iclear.dateInterface.util.SHA256Util
;
import
java.util.Date
;
public
class
SHA256Test
{
public
static
void
main
(
String
[]
args
)
{
long
time
=
System
.
currentTimeMillis
();
System
.
out
.
println
(
time
);
String
str
=
"CTM"
+
"iClearExport"
+
"b92131f03f19a348"
+
time
;
System
.
out
.
println
(
SHA256Util
.
getSHA256String
(
str
));
//
long time =System.currentTimeMillis();
//
System.out.println(time);
//
String str = "CTM"+"iClearExport"+"b92131f03f19a348"+time;
//
//
//
System.out.println(SHA256Util.getSHA256String(str));
//
// 1623920478192
// eaf279997145f440ab5064e43f1a9cfdac15322886936801d57e022cde29919b
//
// //String s ="aaa_2222";
// String s ="2222";
// String str[]=s.split("_");
// System.out.println(str[0]);
// //System.out.println(str[1]);
//
// System.out.println(DateUtils.addDate(DateUtils.getCurrentDate(),-7));
//
Date
currentDate
=
new
Date
();
long
timeStamp
=
currentDate
.
getTime
();
System
.
out
.
println
(
timeStamp
);
String
tStr
=
String
.
valueOf
(
timeStamp
);
System
.
out
.
println
(
tStr
);
System
.
out
.
println
(
Long
.
valueOf
(
tStr
));
System
.
out
.
println
(
DateUtils
.
timeStampToDate
(
Long
.
valueOf
(
tStr
)));
}
}
...
...
Please
register
or
login
to post a comment