wei.zhou

提交代码

......@@ -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 -- 响应时间
......
......@@ -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;
}
}
......
......@@ -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_";
}
......
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;
......
......@@ -24,7 +24,7 @@ public class ChmConsignmentDetail implements Serializable {
* 运单明细表ID,自动增加
*/
@Id
@GeneratedValue
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
......
......@@ -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;
}
......
......@@ -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;
......
......@@ -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());
......
......@@ -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);
}
......
......@@ -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();
......
......@@ -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> {
......
......@@ -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());
}
//境内目的地/境内货源地
......
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.getOtherCurr());
DictionaryEntries fromCountryDictionaryEntries = Constant.dictionaryEntriesCache.get(Constant.COUNTRY+mawb.getTradeCountry());
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());
}
}
}
......
......@@ -26,6 +26,7 @@ public class DictionaryEntriesService {
try {
result=dictionaryEntriesRepository.findAllDictionaryEntries();
}catch (Exception e){
e.printStackTrace();
log.error("getAllDictionaryEntries() error:"+e.getMessage());
}
return result;
......
......@@ -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);
......
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);
}
}
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;
}
}
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() {
}
}
......
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)));
}
}
......