Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
a75ac353d8
  1. BIN
      app.db
  2. 7
      src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java
  3. 1
      src/main/java/a8k/hardware/type/a8kcanprotocol/A8kEcode.java
  4. 72
      src/main/java/a8k/service/app/appctrl/AppDeviceCtrlService.java
  5. 3
      src/main/java/a8k/service/app/appstate/ConsumablesMgrService.java
  6. 34
      src/main/java/a8k/service/app/appstate/EmergencySamplePosStateMgrService.java
  7. 1
      src/main/java/a8k/service/app/appstate/IncubationPlateMgrService.java
  8. 26
      src/main/java/a8k/service/app/appstate/TubeStateMgrService.java
  9. 6
      src/main/java/a8k/service/db/SampleRecordDBService.java
  10. 2
      src/main/java/a8k/service/db/type/SampleRecord.java
  11. 429
      src/main/java/a8k/utils/DateUtil.java

BIN
app.db

7
src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java

@ -8,15 +8,10 @@ public enum ExtApiTabConfig {
AppTubeSettingMgrService("应用控制.试管(样本)配置", true),//OK
EmergencySamplePosStateMgrService("应用控制.急诊位状态管理", true),//OK
ConsumablesMgrService("应用状态.耗材状态管理", true),
IncubationPlateMgrService("应用状态.孵育板管理", true),//OK
AppUserMgrService("应用数据.用户管理", true), //Ok
AppSettingsMgr("应用数据.设备配置管理", true), //OK
AppProjInfoMgrService("应用数据.项目信息管理", true), //OK
AppProjInfoMgrService("应用数据.项目与ID卡管理", true), //OK
AppReactionResultMgrService("应用数据.反应结果管理", true), //OK
AppSampleMgrService("应用数据.样本管理", true), //OK
ActionReactorService("底层调试.单步调试", false),//OK
Hbot2DCodeScanPos("参数.Hbot二维码扫描坐标参数", false),

1
src/main/java/a8k/hardware/type/a8kcanprotocol/A8kEcode.java

@ -63,6 +63,7 @@ public enum A8kEcode {
ProjIndexIsEmpty(144),//项目ID为空
CanNotFindProjInfo(145),//找不到项目信息
ProjInfoIsNotExist(146),//项目信息不存在
ACTION_IS_NOT_ALLOWED_WHEN_WORKING(147),//设备忙
/**
* 特殊服务错误码

72
src/main/java/a8k/service/app/appctrl/AppDeviceCtrlService.java

@ -4,12 +4,15 @@ import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction;
import a8k.service.app.appstate.type.MainFlowCtrlState;
import a8k.service.app.appstate.type.TubeHolder;
import a8k.service.app.appstate.ConsumablesMgrService;
import a8k.service.app.appstate.type.*;
import a8k.service.app.appstate.type.state.OptScanModuleState;
import a8k.service.debug.AppDebugHelperService;
import a8k.type.Consumable;
import a8k.type.ConsumableGroup;
import a8k.type.checkpoint.CheckResult;
import a8k.service.app.appstate.GStateService;
import a8k.type.consumables.ConsumableState;
import a8k.type.exception.AppException;
import freemarker.debug.impl.DebuggerService;
import jakarta.annotation.Resource;
@ -30,6 +33,8 @@ public class AppDeviceCtrlService {
MainFlowCtrlService mainFlowCtrlSampleScanService; //主流程控制模块
@Resource
ConsumablesScanService consumablesScanService; //耗材扫描模块
@Resource
ConsumablesMgrService consumablesMgrService; //耗材管理模块
@Resource
AppDebugHelperService appDebugHelperService;
@ -96,7 +101,8 @@ public class AppDeviceCtrlService {
* 设备状态
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
@ExtApiFn(name = "获取设备工作状态", group = "设备状态")
@ExtApiFn(name = "获取主流程工作状态", group = "设备状态")
public MainFlowCtrlState getDeviceWorkState() {
return gstate.mainFlowCtrlState;
}
@ -106,38 +112,71 @@ public class AppDeviceCtrlService {
return gstate.mainFlowCtrlState.isPending();
}
@ExtApiFn(name = "获取运行步骤状态", group = "设备状态")
public List<A8kStepAction> getA8kStepActionList() {
return mainFlowCtrlSampleScanService.getA8kStepActionList();
}
@ExtApiFn(name = "获取正在处理的试管架状态", group = "设备状态")
@ExtApiFn(name = "获取<试管架>状态", group = "设备状态")
public TubeHolder getTubeHolderState() {
return gstate.getTubeHolder();
}
@ExtApiFn(name = "获取设备状态(调试使用)", group = "设备状态")
@ExtApiFn(name = "获取<孵育盘>的状态", group = "设备状态")
public IncubationPlate getIncubationPlate() {
return gstate.getIncubationPlate();
}
@ExtApiFn(name = "获取<光学模组>状态", group = "设备状态")
public OptScanModule getOptScanModuleState() {
return gstate.getOptScanModule();
}
@ExtApiFn(name = "获取<急诊位>状态", group = "设备状态")
public EmergencyTubePos getEmergencyTubePosState() {
return gstate.getEmergencyTubePos();
}
@ExtApiFn(name = "获取<耗材>状态", group = "设备状态")
public ConsumableState getConsumablesState() {
return gstate.getConsumableState();
}
@ExtApiFn(name = "获取运行步骤状态", group = "调试")
public List<A8kStepAction> getA8kStepActionList() {
return mainFlowCtrlSampleScanService.getA8kStepActionList();
}
@ExtApiFn(name = "获取设备状态(调试使用)", group = "调试")
public GStateService getGState() {
return gstate;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 系统控制
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
@ExtApiFn(name = "关机", group = "主机")
public void shutdown() {
//TODO:
@ExtApiFn(name = "获取应用版本", group = "系统状态")
public String getAppVersion() {
return gstate.getAppVersion();
}
@ExtApiFn(name = "获取MCU版本", group = "系统状态")
public String getMcuVersion() {
return gstate.getMcuVersion();
}
@ExtApiFn(name = "获取设备SN", group = "系统状态")
public String getSn() {
return gstate.getSn();
}
@ExtApiFn(name = "获取设备IP", group = "主机")
@ExtApiFn(name = "获取设备IP", group = "系统状态")
public String readdeviceip() {
//TODO:
return "192.168.8.10";
}
Boolean beepState = false;
@ExtApiFn(name = "关机", group = "主机")
public void shutdown() {
//TODO:
}
Boolean beepState = false;
@ExtApiFn(name = "打开蜂鸣器", group = "主机")
public void startBeepWarning() {
beepState = true;
@ -153,5 +192,4 @@ public class AppDeviceCtrlService {
return false;
}
}

3
src/main/java/a8k/service/app/appstate/ConsumablesMgrService.java

@ -28,7 +28,6 @@ import java.util.List;
* takeXXXX,申请并减少数量
* setXXXX, 设置数量
*/
@ExtApiTab(cfg = ExtApiTabConfig.ConsumablesMgrService)
@Component
public class ConsumablesMgrService {
@Resource
@ -222,7 +221,6 @@ public class ConsumablesMgrService {
* @param group Tip组
* @param num 数量
*/
@ExtApiFn(name = "设置Tip数量")
synchronized public void setTipNum(Integer group, Integer num) {
var cState = gstate.getConsumableState();
cState.tips[group].tipNum = num;
@ -233,7 +231,6 @@ public class ConsumablesMgrService {
* @param group 耗材组
* @param num 数量
*/
@ExtApiFn(name = "设置耗材数量")
synchronized public void setCounsumableNum(ConsumableGroup group, Integer num) {
priSetConsumableGroupNum(group, num);
}

34
src/main/java/a8k/service/app/appstate/EmergencySamplePosStateMgrService.java

@ -8,6 +8,7 @@ import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.service.app.appdata.AppProjInfoMgrService;
import a8k.service.app.appstate.type.EmergencyTubePos;
import a8k.service.app.appstate.type.Tube;
import a8k.service.app.appstate.type.state.A8kWorkState;
import a8k.service.app.appstate.type.state.TubeState;
import a8k.type.exception.AppException;
import a8k.type.type.BloodType;
@ -50,22 +51,25 @@ public class EmergencySamplePosStateMgrService {
Tube tube = emergencyTubePos.tube;
List<Integer> projIndex = new ArrayList<>();
List<ProjBriefInfo> projInfo = new ArrayList<>();
if (tube.state.equals(TubeState.EMPTY) || tube.state.equals(TubeState.PROCESS_COMPLETE)) {
for (String index : projIndexList.split(",")) {
projIndex.add(Integer.parseInt(index));
}
if (gstate.getMainFlowCtrlState().workState.equals(A8kWorkState.WORKING)) {
throw new AppException(A8kEcode.ACTION_IS_NOT_ALLOWED_WHEN_WORKING);
}
if (projIndex.isEmpty()) {
throw new AppException(A8kEcode.ProjIndexIsEmpty);
}
for (String index : projIndexList.split(",")) {
projIndex.add(Integer.parseInt(index));
}
projInfo = appProjInfoMgrService.getProjBrifInfo(projIndex);
if (projInfo == null || projInfo.size() != projIndex.size()) {
throw new AppException(A8kEcode.CanNotFindProjInfo);
}
if (projIndex.isEmpty()) {
throw new AppException(A8kEcode.ProjIndexIsEmpty);
}
projInfo = appProjInfoMgrService.getProjBrifInfo(projIndex);
if (projInfo == null || projInfo.size() != projIndex.size()) {
throw new AppException(A8kEcode.CanNotFindProjInfo);
}
if (tube.state.equals(TubeState.EMPTY) || tube.state.equals(TubeState.PROCESS_COMPLETE)) {
tube.userid = userid;
tube.bloodType = bloodType;
tube.sampleBarcode = sampleBarcode;
@ -74,6 +78,14 @@ public class EmergencySamplePosStateMgrService {
tube.state = TubeState.TO_BE_PROCESSED;
tubeStateMgrService.createNewEmergencyTubeContext(tube);
logger.info("添加紧急样本设置成功 {}", ZJsonHelper.objectToJson(tube));
} else if (tube.state.equals(TubeState.TO_BE_PROCESSED)) {
tube.userid = userid;
tube.bloodType = bloodType;
tube.sampleBarcode = sampleBarcode;
tube.isEmergency = true;
tube.projInfo = projInfo;
tubeStateMgrService.updateTubeContext(tube);
logger.info("更新紧急样本设置成功 {}", ZJsonHelper.objectToJson(tube));
} else {
throw new AppException(A8kEcode.EmergencySampleIsProcessing);
}

1
src/main/java/a8k/service/app/appstate/IncubationPlateMgrService.java

@ -16,7 +16,6 @@ import java.util.Date;
import java.util.List;
@Component
@ExtApiTab(cfg = ExtApiTabConfig.IncubationPlateMgrService)
public class IncubationPlateMgrService {
@Resource

26
src/main/java/a8k/service/app/appstate/TubeStateMgrService.java

@ -8,7 +8,6 @@ import a8k.service.app.appstate.type.state.TubeState;
import a8k.type.Consumable;
import a8k.type.IncubatorPos;
import a8k.type.TipPos;
import a8k.service.db.type.A8kIdCardInfo;
import a8k.utils.A8kProjCfg;
import a8k.utils.ProjBriefInfo;
import jakarta.annotation.Resource;
@ -26,7 +25,6 @@ import a8k.service.db.SampleRecordDBService;
@Component
public class TubeStateMgrService {
@Resource
GStateService gstate;
@Resource
@ -46,7 +44,6 @@ public class TubeStateMgrService {
return sampleid;
}
void assignTubeProcessContext(TubeProcessContext cxt, Tube tube) {
cxt.sampleid = tube.sampleid;
cxt.isHighTube = tube.isHighTube;
@ -59,7 +56,6 @@ public class TubeStateMgrService {
}
private void addSampleRecord(Tube[] tube) {
Date intertime = new Date();
for (int i = 0; i < tube.length; i++) {
@ -73,7 +69,7 @@ public class TubeStateMgrService {
record.bloodType = tube[i].bloodType;
record.sampleBarcode = tube[i].sampleBarcode;
record.userid = tube[i].userid;
record.date = intertime;
record.createDate = intertime;
record.isEmergency = tube[i].isEmergency;
record.sampleid = generateSampleId(intertime, i);
record.projIndex = ProjBriefInfo.toPorjIndex((tube[i].projInfo));
@ -90,7 +86,7 @@ public class TubeStateMgrService {
record.bloodType = tube.bloodType;
record.sampleBarcode = tube.sampleBarcode;
record.userid = tube.userid;
record.date = intertime;
record.createDate = intertime;
record.isEmergency = true;
record.sampleid = generateSampleId(intertime, -1);
record.projIndex = ProjBriefInfo.toPorjIndex(tube.projInfo);
@ -98,11 +94,9 @@ public class TubeStateMgrService {
sampleRecordDBService.add(record);
}
synchronized public void createNewEmergencyTubeContext(Tube tube) {
assert tube != null;
assert !tube.sampleid.isEmpty();
addEmergencySampleRecord(tube);
TubeProcessContext context = new TubeProcessContext();
assignTubeProcessContext(context, tube);
contexts.add(context);
@ -117,6 +111,12 @@ public class TubeStateMgrService {
}
}
synchronized public void updateTubeContext(Tube tube) {
TubeProcessContext processContext = getTubeContext(tube.sampleid);
if (processContext != null)
assignTubeProcessContext(processContext, tube);
}
synchronized public TubeProcessContext getTubeContext(String sampleid) {
for (TubeProcessContext context : contexts) {
if (context.sampleid.equals(sampleid)) {
@ -126,8 +126,8 @@ public class TubeStateMgrService {
return null;
}
synchronized public void createProjProcessContext(@NotNull Tube tube, @NotNull A8kProjCfg projCfg, @NotNull Consumable consumable, @NotNull List<TipPos> tipPos,
synchronized public void createProjProcessContext(@NotNull Tube tube, @NotNull A8kProjCfg projCfg,
@NotNull Consumable consumable, @NotNull List<TipPos> tipPos,
@NotNull IncubatorPos incubatorPos) {
ProjProcessContext context = new ProjProcessContext();
context.projInfo = projCfg.getProjBriefInfo();
@ -141,7 +141,6 @@ public class TubeStateMgrService {
tube.projProcessContexts.add(context);
}
synchronized public void setCurTubeState(TubeState state) {
Tube tube = gstate.getCurProcessingTube();
assert tube != null;
@ -149,7 +148,8 @@ public class TubeStateMgrService {
tube.state = state;
}
synchronized public void setTubeResourceIsReady(@NotNull List<A8kProjCfg> a8kconfig, @NotNull List<Consumable> consumable, @NotNull List<List<TipPos>> tipPos,
synchronized public void setTubeResourceIsReady(@NotNull List<A8kProjCfg> a8kconfig,
@NotNull List<Consumable> consumable, @NotNull List<List<TipPos>> tipPos,
@NotNull List<IncubatorPos> incubatorPos) {
Tube tube = gstate.getCurProcessingTube();
assert tube != null;

6
src/main/java/a8k/service/db/SampleRecordDBService.java

@ -2,6 +2,7 @@ package a8k.service.db;
import a8k.service.db.type.SampleRecord;
import a8k.service.app.appdata.UtilsProjectColorAllocer;
import a8k.utils.DateUtil;
import a8k.utils.ZSqliteJdbcHelper;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
@ -12,6 +13,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.sql.ResultSet;
import java.util.Date;
import java.util.List;
@Component
@ -51,7 +53,9 @@ public class SampleRecordDBService {
}
public Integer getRecordCntToday(){
return jdbcTemplate.queryForObject("select count(*) from " + tableName + " where between date('now','start of day') and date('now','start of day','+1 day')", Integer.class);
Long startOfDay = DateUtil.getDayStartTime(new Date());
Long endOfDay = DateUtil.getDayEndTime(new Date());
return jdbcTemplate.queryForObject("select count(*) from " + tableName + " where createDate >= ? and createDate < ?", Integer.class, startOfDay, endOfDay);
}
}

2
src/main/java/a8k/service/db/type/SampleRecord.java

@ -12,7 +12,7 @@ import java.util.List;
public class SampleRecord {
public int id = 0;
public String sampleid; // generated by system , year%100+month+day+时分 241230_1203_01
public Date date;
public Date createDate;
public BloodType bloodType = BloodType.WHOLE_BLOOD; //血液类型
public Boolean isEmergency = false; //是否急诊
public String sampleBarcode = ""; //用于请求用户信息的条码ID

429
src/main/java/a8k/utils/DateUtil.java

@ -0,0 +1,429 @@
package a8k.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* @Author : JCccc
* @CreateTime : 2020/2/27
* @Description :
**/
public class DateUtil {
/**
* 获取今天开始时间和结束时间
*
* @return
*/
public static Map getTodayTime() {
Long startTime = getStartTime();
//Long endTime = getEndTime(); //当期时间
Long endTime = new Date().getTime(); //当期时间
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String startTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()));
String endTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault()));
Map map = new HashMap();
map.put("startDate", startTimeStr);
map.put("endDate", endTimeStr);
return map;
}
//获取今天日期 年月日
public static Date getTodayYmd(){
Date now = new Date();
Calendar cal1 = Calendar.getInstance();
cal1.setTime(now);
// 将时分秒,毫秒域清零
cal1.set(Calendar.HOUR_OF_DAY, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
return cal1.getTime();
}
//获取昨天日期 年月日
public static Date getYesterdayYmd() {
Calendar cal = new GregorianCalendar();
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();
}
/**
* 获取昨天开始时间和结束时间
*
* @return
*/
public static Map getYesterdayTime() {
Long startTime = getBeginDayOfYesterday();
Long endTime = getEndDayOfYesterDay();
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String startTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()));
String endTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault()));
Map map = new HashMap();
map.put("startDate", startTimeStr);
map.put("endDate", endTimeStr);
return map;
}
/**
* 获取当月开始时间和结束时间
*
* @return
*/
public static Map getMonthTime() {
Long startTime = getMonthStartTime();
Long endTime = getMonthEndTime();
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String startTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()));
String endTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault()));
Map map = new HashMap();
map.put("startDate", startTimeStr);
map.put("endDate", endTimeStr);
return map;
}
/**
* 获取上个月月开始时间和结束时间
*
* @return
*/
public static Map getLastMonthTime() throws Exception {
Long startTime = getLastMonthStartTime();
Long endTime = getLastMonthEndTime();
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String startTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()));
String endTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault()));
Map map = new HashMap();
map.put("startDate", startTimeStr);
map.put("endDate", endTimeStr);
return map;
}
//获取月均开始和结束时间
public static Map getAverageTime(String minCreateTime) throws ParseException {
Long yesterdayTimeEnd =getEndDayOfYesterDay();
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//昨天的时间
String yesterdayStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(yesterdayTimeEnd), ZoneId.systemDefault()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String yesterdayBefore30Str = "";
Calendar calc = Calendar.getInstance();
calc.setTime(sdf.parse(yesterdayStr));
calc.add(calc.DATE, -30);
calc.set(Calendar.HOUR_OF_DAY, 0);
calc.set(Calendar.MINUTE, 0);
calc.set(Calendar.SECOND, 0);
calc.set(Calendar.MILLISECOND, 0);
Date minDate = calc.getTime();
yesterdayBefore30Str = sdf.format(minDate);
int num = daysBetween(yesterdayBefore30Str, yesterdayStr);
int checkNum = daysBetween(minCreateTime, yesterdayBefore30Str);
System.out.println("checkNum:"+checkNum);
Map map = new HashMap();
if (checkNum < 0) {
int numNew = daysBetween(minCreateTime, yesterdayStr);
map.put("startDate", minCreateTime);
map.put("endDate", yesterdayStr);
map.put("num", Math.abs(numNew)); //取绝对值
return map;
}
map.put("startDate", yesterdayBefore30Str);
map.put("endDate", yesterdayStr);
map.put("num", num);
return map;
}
public static int daysBetween(String smdate, String bdate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 获取今天开始时间
*/
private static Long getStartTime() {
Calendar todayStart = Calendar.getInstance();
todayStart.set(Calendar.HOUR_OF_DAY, 0);
todayStart.set(Calendar.MINUTE, 0);
todayStart.set(Calendar.SECOND, 0);
todayStart.set(Calendar.MILLISECOND, 0);
return todayStart.getTimeInMillis();
}
/**
* 获取今天结束时间
*/
private static Long getEndTime() {
Calendar todayEnd = Calendar.getInstance();
todayEnd.set(Calendar.HOUR, 23);
todayEnd.set(Calendar.MINUTE, 59);
todayEnd.set(Calendar.SECOND, 59);
todayEnd.set(Calendar.MILLISECOND, 999);
return todayEnd.getTime().getTime();
}
/**
* 获取当月开始时间
*/
public static Long getMonthStartTime() {
Long currentTime = System.currentTimeMillis();
String timeZone = "GMT+8:00";
Calendar calendar = Calendar.getInstance();// 获取当前日期
calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
calendar.setTimeInMillis(currentTime);
calendar.add(Calendar.YEAR, 0);
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
/**
* 获取当月的结束时间戳
*/
public static Long getMonthEndTime() {
Long currentTime = System.currentTimeMillis();
String timeZone = "GMT+8:00";
Calendar calendar = Calendar.getInstance();// 获取当前日期
calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
calendar.setTimeInMillis(currentTime);
calendar.add(Calendar.YEAR, 0);
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTimeInMillis();
}
public static Long getLastMonthStartTime() throws Exception {
Long currentTime = System.currentTimeMillis();
String timeZone = "GMT+8:00";
Calendar calendar = Calendar.getInstance();// 获取当前日期
calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
calendar.setTimeInMillis(currentTime);
calendar.add(Calendar.YEAR, 0);
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
public static Long getLastMonthEndTime() {
Long currentTime = System.currentTimeMillis();
String timeZone = "GMT+8:00";
Calendar calendar = Calendar.getInstance();// 获取当前日期
calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
calendar.setTimeInMillis(currentTime);
calendar.add(Calendar.YEAR, 0);
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTimeInMillis();
}
public static Long getBeginDayOfYesterday() {
Calendar cal = new GregorianCalendar();
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.getTimeInMillis();
}
public static Long getEndDayOfYesterDay() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTimeInMillis();
}
//获取今年是哪一年
public static Integer getNowYear() {
Date date = new Date();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return Integer.valueOf(gc.get(1));
}
public static Map getThisYearTime() throws Exception {
Long startTime = getBeginDayOfYear();
Long endTime = getEndDayOfYear();
DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String startTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()));
String endTimeStr = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault()));
Map map = new HashMap();
map.put("startDate", startTimeStr);
map.put("endDate", endTimeStr);
return map;
}
//获取本年的开始时间
public static Long getBeginDayOfYear() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getNowYear());
// cal.set
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 1);
return getDayStartTime(cal.getTime());
}
//获取本年的结束时间
public static Long getEndDayOfYear() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getNowYear());
cal.set(Calendar.MONTH, Calendar.DECEMBER);
cal.set(Calendar.DATE, 31);
return getDayEndTime(cal.getTime());
}
//获取某个日期的开始时间
public static Long getDayStartTime(Date d) {
Calendar calendar = Calendar.getInstance();
if(null != d) calendar.setTime(d);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
//获取某个日期的结束时间
public static Long getDayEndTime(Date d) {
Calendar calendar = Calendar.getInstance();
if(null != d) calendar.setTime(d);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTimeInMillis();
}
public static void main(String[] args) throws Exception {
Map todayTime = getTodayTime();
System.out.println("今天:" + todayTime.toString());
Map yesterdayTime = getYesterdayTime();
System.out.println("昨天:" + yesterdayTime.toString());
Map monthTime = getMonthTime();
System.out.println("当月:" + monthTime.toString());
Map lastMonthTime = getLastMonthTime();
System.out.println("上个月:" + lastMonthTime.toString());
}
}
Loading…
Cancel
Save