From 6f7cc7c14b4532120e9e6827ca0feb2c9aa4c2c7 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 24 一月 2025 04:10:16 +0800 Subject: [PATCH] 利旧设备Osd,ping任务离线时间点取最近两条,工单审核bug,重点指挥图像调整 --- /dev/null | 35 -------- ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml | 12 ++ ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java | 113 +++++++++++++++++++++++++--- ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java | 16 ++++ ycl-server/src/main/java/com/ycl/task/OsdTask.java | 20 ++++ ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 2 ycl-server/src/main/java/com/ycl/task/UYTask.java | 2 ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java | 9 +- ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 3 ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java | 12 ++ 10 files changed, 164 insertions(+), 60 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java b/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java index 5d3b406..d38155f 100644 --- a/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java +++ b/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java @@ -2,6 +2,7 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; +import com.sun.jna.Structure; import com.sun.jna.ptr.IntByReference; import com.ycl.api.DH.lib.NetSDKLib; import com.ycl.api.DH.lib.NetSDKLib.LLong; @@ -17,12 +18,17 @@ import java.io.File; import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.List; +import static com.ycl.api.DH.lib.NetSDKLib.CFG_CMD_VIDEOWIDGET; +import static com.ycl.api.DH.lib.NetSDKLib.NET_DEV_VIDEO_OSD_CFG; import static com.ycl.api.DH.lib.NetSDKLib.NET_EM_OSD_BLEND_TYPE.NET_EM_OSD_BLEND_TYPE_MAIN; import static com.ycl.api.DH.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_CUSTOMTITLE; import static com.ycl.api.DH.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_GBMODE; @@ -153,14 +159,13 @@ return bRet; } - public static OSDResult getOsd(String serialNumber,LLong loginId) { + public static OSDResult getOsd(String serialNumber, LLong loginId) { OSDResult osdResult = new OSDResult(); NetSDKLib.NET_TIME deviceTime = new NetSDKLib.NET_TIME(); if (!netsdk.CLIENT_QueryDeviceTime(loginId, deviceTime, 3000)) { // log.error("CLIENT_QueryDeviceTime Failed!" + ToolKits.getErrorCodePrint()); return null; } - log.info("OSD鏃堕棿鍘熷鏁版嵁鏍煎紡,{},toString鏍煎紡{}",deviceTime,deviceTime.toStringTime()); Date checkTime = new Date(); osdResult.setCheckTime(checkTime); String date = deviceTime.toStringTime(); @@ -173,7 +178,6 @@ // log.error("鏃堕棿瑙f瀽澶辫触"); } NET_CFG_GBMODE_INFO reserve = new NET_CFG_GBMODE_INFO(); - NET_CFG_GBMODE_INFO osdInfo = new NET_CFG_GBMODE_INFO(); osdInfo.write(); boolean b = false; @@ -183,9 +187,9 @@ * 瀵逛簬澶у崕鏉ヨ锛� 鍥芥爣鍊�7: 0/鍏ㄦ櫙/閫氶亾1 1/缁嗚妭/閫氶亾2 * 瀹囪鍗曢�氶亾涓嶈�冭檻 */ - if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_All ) { + if (serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_All) { b = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_GBMODE, 0, osdInfo.getPointer(), osdInfo.size(), 3000, reserve.getPointer()); - }else if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_Detail){ + } else if (serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_Detail) { b = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_GBMODE, 1, osdInfo.getPointer(), osdInfo.size(), 3000, reserve.getPointer()); } @@ -193,12 +197,20 @@ // log.error("CLIENT_GetConfig Failed!" + ToolKits.getErrorCodePrint()); return null; } else { + osdInfo.read(); NET_GBMODE_CUSTOMTITLE_INFO[] stuCustomTitle = osdInfo.stuCustomTitle; for (NET_GBMODE_CUSTOMTITLE_INFO title : stuCustomTitle) { - log.info("OSD鍘熷鏁版嵁鏍煎紡{}",title); String position = new String(title.szPositon, StandardCharsets.UTF_8).trim(); - if("LeftDown".equals(position)) { + NET_TITLE_OSD_INFO[] stuOSD1 = title.stuOSD; + for (NET_TITLE_OSD_INFO osd : stuOSD1) { + String osdStr = null; + osdStr = new String(osd.szText, StandardCharsets.UTF_8).trim(); + if (!StringUtils.isEmpty(osdStr)) { + osdResult.setOSD4(osdStr); + } + } + if ("LeftDown".equals(position)) { NET_TITLE_OSD_INFO[] stuOSD = title.stuOSD; for (NET_TITLE_OSD_INFO osd : stuOSD) { String osdStr = null; @@ -208,7 +220,7 @@ osdResult.setOSD4(osdStr); } } - }else if("RightDown".equals(position)){ + } else if ("RightDown".equals(position)) { NET_TITLE_OSD_INFO[] stuOSD = title.stuOSD; int num = 0; for (NET_TITLE_OSD_INFO osd : stuOSD) { @@ -216,13 +228,13 @@ osdStr = new String(osd.szText, StandardCharsets.UTF_8).trim(); // log.info("TEXT锛�"+osdStr); if (!StringUtils.isEmpty(osdStr)) { - if(num ==0){ + if (num == 0) { osdResult.setOSD1(osdStr); - }else if(num ==1){ + } else if (num == 1) { osdResult.setOSD2(osdStr); - }else if(num ==2){ + } else if (num == 2) { osdResult.setOSD3(osdStr); - }else if(num ==3){ + } else if (num == 3) { osdResult.setName(osdStr); } } @@ -235,4 +247,81 @@ return osdResult; } + /** + * 閽堝鍒╂棫璁惧鑾峰彇OSD鐨勬柟娉� + * @param serialNumber + * @param loginId + * @return + */ + public static OSDResult getOsdOld(String serialNumber, LLong loginId) { + OSDResult result = new OSDResult(); + NetSDKLib.NET_OSD_CUSTOM_TITLE osdInfo4 = new NetSDKLib.NET_OSD_CUSTOM_TITLE(); + osdInfo4.emOsdBlendType = NetSDKLib.NET_EM_OSD_BLEND_TYPE.NET_EM_OSD_BLEND_TYPE_MAIN; + NetSDKLib.NET_OSD_CUSTOM_TITLE reserve4 = new NetSDKLib.NET_OSD_CUSTOM_TITLE(); + osdInfo4.write(); + boolean e = false; + e = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_CUSTOMTITLE, 0, osdInfo4.getPointer(), osdInfo4.size(), 3000, reserve4.getPointer()); + if (!e) { + log.error("e涓虹┖,灏濊瘯鍙︿竴涓�氶亾"); + e = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_CUSTOMTITLE, 1, osdInfo4.getPointer(), osdInfo4.size(), 3000, reserve4.getPointer()); + } + if(e) { + osdInfo4.read(); + NetSDKLib.NET_CUSTOM_TITLE_INFO[] stuCustomTitle = osdInfo4.stuCustomTitle; + for (NetSDKLib.NET_CUSTOM_TITLE_INFO net_custom_title_info : stuCustomTitle) { + String name = new String(net_custom_title_info.szText, StandardCharsets.UTF_8).trim(); + log.info("name:{}",name); + if(StringUtils.isNotEmpty(name) && name.contains("|")){ + String[] osdNames = name.split("\\|"); + //鍓旈櫎鎺夌┖涓� + List<String> nonEmptyList = new ArrayList<>(); + for (String osd : osdNames) { + if (StringUtils.isNotEmpty(osd)) { + nonEmptyList.add(osd); + } + } + result.setOSD1(nonEmptyList.get(0)); + result.setOSD2(nonEmptyList.get(1)); + result.setOSD3(nonEmptyList.get(2)); + result.setName(nonEmptyList.get(3)); + } + } + }else { + log.error(serialNumber,"鍒╂棫osd涓虹┖"); + } + return result; + } + + /** + * 鑾峰彇鍗曚釜閰嶇疆 + * @param hLoginHandle 鐧婚檰鍙ユ焺 + * @param nChn 閫氶亾鍙凤紝-1 琛ㄧず鍏ㄩ�氶亾 + * @param strCmd 閰嶇疆鍚嶇О + * @param cmdObject 閰嶇疆瀵瑰簲鐨勭粨鏋勪綋瀵硅薄 + * @return 鎴愬姛杩斿洖 true + */ + public static boolean GetDevConfig(LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) { + boolean result = false; + IntByReference error = new IntByReference(0); + int nBufferLen = 2*1024*1024; + byte[] strBuffer = new byte[nBufferLen]; + + if(netsdk.CLIENT_GetNewDevConfig( hLoginHandle, strCmd , nChn, strBuffer, nBufferLen,error,3000,null)) { + cmdObject.write(); + if (netsdk.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), + cmdObject.size(), null)) { + cmdObject.read(); + result = true; + } else { + System.err.println("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint()); + result = false; + } + } else { + System.err.println("璋冪敤澶辫触"); + result = false; + } + + return result; + } + } diff --git a/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java b/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java index b53a7eb..c25df84 100644 --- a/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java +++ b/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java @@ -15,7 +15,23 @@ return null; } OSDResult osd = LoginModule.getOsd(serialNumber,loginId); + if(osd!=null && osd.getOSD1() ==null &&osd.getOSD2()==null && osd.getOSD3()==null &&osd.getName()==null) { + OSDResult osdOld = LoginModule.getOsdOld(serialNumber, loginId); + osd.setOSD1(osdOld.getOSD1()); + osd.setOSD2(osdOld.getOSD2()); + osd.setOSD3(osdOld.getOSD3()); + osd.setName(osdOld.getName()); + } LoginModule.logout(loginId); return osd; } + public static OSDResult getOsdOld(String serialNumber,String ip, String userName, String password){ + NetSDKLib.LLong loginId = LoginModule.login(ip, 80, userName, password); + if(loginId.longValue() ==0){ + return null; + } + OSDResult osdOld = LoginModule.getOsdOld(serialNumber, loginId); + LoginModule.logout(loginId); + return osdOld; + } } diff --git a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java index 9398f7d..0e274f4 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java @@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 璁$畻瑙嗛璁惧鐐逛綅鍦ㄧ嚎鐜囥�侀噸鐐圭偣浣嶅湪绾跨巼銆侀噸鐐规寚鎸ュ浘鍍忓湪绾跨巼銆侀儴绾х偣浣嶅湪绾跨巼 @@ -65,7 +66,16 @@ } } }); - + //閲嶇偣鎸囨尌鍥惧儚鐗规畩澶勭悊锛岀粺涓�閲囩敤鍖哄幙鏁版嵁 + Map<Long, BigDecimal> keyCommandMap = checkIndexVideos.stream().filter(checkIndexVideo -> !checkIndexVideo.getDeptTag() && !checkIndexVideo.getProvinceTag()) + .collect(Collectors.toMap(checkIndexVideo -> checkIndexVideo.getDeptId(), checkIndexVideo -> checkIndexVideo.getKeyCommandImageOnline())); + for (CheckIndexVideo checkIndexVideo : checkIndexVideos) { + //鏇挎崲鐪佸巺鍜岄儴绾� 閲嶇偣鎸囨尌鍥惧儚 + if(checkIndexVideo.getProvinceTag() || checkIndexVideo.getDeptTag()){ + BigDecimal keyCommand = keyCommandMap.get(checkIndexVideo.getDeptId()); + checkIndexVideo.setKeyCommandImageOnline(keyCommand); + } + } checkIndexVideoService.saveOrUpdateBatch(checkIndexVideos); } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java index dbf36b9..5d2b201 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java @@ -116,9 +116,8 @@ } List<String> offLineTime = item.getOffLineTimeStr(); if(!CollectionUtils.isEmpty(offLineTime)) { - //鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟) if (offLineTime.size() > 1) { - offLineTime = offLineTime.subList(0, 2); + offLineTime = offLineTime.subList(offLineTime.size() - 2, offLineTime.size()); } item.setOffLineTimeStr(offLineTime); } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java index 45b302c..8a08b68 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java @@ -536,7 +536,7 @@ ywPointService.updateRecovery(serialNumbers, 0); //绛涢�夊嚭绂荤嚎宸ュ崟ip骞朵慨鏀瑰湪绾跨姸鎬� if (!CollectionUtils.isEmpty(serialNumbers)) { - Map<String, List<String>> errorTypes = workOrderErrorTypeMapper.getErrorListByNumbers(serialNumbers).stream().collect(Collectors.groupingBy( + Map<String, List<String>> errorTypes = workOrderErrorTypeMapper.getErrorListByNumbers(workOrderNoList).stream().collect(Collectors.groupingBy( WorkOrderVO::getIp, Collectors.mapping( WorkOrderVO::getErrorType, diff --git a/ycl-server/src/main/java/com/ycl/task/OsdTask.java b/ycl-server/src/main/java/com/ycl/task/OsdTask.java index 83c71f5..5f4f8b9 100644 --- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java +++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java @@ -11,6 +11,7 @@ import com.ycl.api.HK.HKApi; import com.ycl.api.YS.YSApi; import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.result.BaseResult; import com.ycl.platform.domain.result.OSDResult; import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.result.UY.OsdCheckResult; @@ -142,8 +143,19 @@ //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 Query pyQuery = new Query(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); - DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); + List<OsdCheckResult> osdCheckResults = mongoTemplate.find(pyQuery, OsdCheckResult.class); pointService.setDeviceTagByGB(checkResults, CheckConstants.Rule_Category_Video); + //娣诲姞鏃ф暟鎹繘鍘� + List<String> resultNos = checkResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(osdCheckResults)) { + for (OsdCheckResult mongoResult : osdCheckResults) { + //濡傛灉鏂扮殑缁撴灉涓病鏈夋棫鏁版嵁閭d箞鍔犺繘鍘� + if (!resultNos.contains(mongoResult.getNo())) { + checkResults.add(mongoResult); + } + } + } + DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); //瀛樻斁鍦╩ongo涓� mongoTemplate.insertAll(checkResults); // 宸ュ崟鐢熸垚 @@ -231,7 +243,9 @@ public void test() throws ExecutionException, InterruptedException { log.info("娴嬭瘯鑾峰彇OSD"); - OSDResult osd3 = DHApi.getOsd("51030446001320141102","51.95.68.3", DHUserName, DHPassword); - log.info("澶у崕缁撴灉鏁版嵁:{}",osd3); + OSDResult osd3 = DHApi.getOsdOld("51030340001320207201", "51.95.34.20", DHUserName, DHPassword); + log.info("osd3:{}", osd3); + OSDResult osd4 = DHApi.getOsdOld("51030342001320173201", "51.95.33.174", DHUserName, DHPassword); + log.info("osd4:{}", osd4); } } diff --git a/ycl-server/src/main/java/com/ycl/task/UYTask.java b/ycl-server/src/main/java/com/ycl/task/UYTask.java index d75304f..cfa9685 100644 --- a/ycl-server/src/main/java/com/ycl/task/UYTask.java +++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java @@ -75,7 +75,7 @@ private String passwd; private static final ExecutorService executorService = new ThreadPoolExecutor(16, - 128, + 64, 5000, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000), diff --git a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java index 9f873da..3263723 100644 --- a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java +++ b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java @@ -54,12 +54,14 @@ String prefix = "http://"; if ("127.0.0.1".equals(monitor.getIp())) { monitor.setPingOnline(Boolean.FALSE); + log.error("ip鏈夎"+monitor.getIp()); return monitor; } try { res = selfHttpUtil.get(prefix + monitor.getIp(), null, null); monitor.setPingOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode()); } catch (Exception e) { + log.error("web妫�娴嬬绾�"+monitor.getIp()); monitor.setPingOnline(Boolean.FALSE); } // 濡傛灉http寰楀埌鐨勪笉鍦ㄧ嚎锛岄偅涔堝啀ping涓�涓� @@ -87,8 +89,9 @@ try { reachable = InetAddress.getByName(monitor.getIp()).isReachable(5000); } catch (IOException e) { - e.printStackTrace(); + log.error("Ping寮傚父{}",e.getMessage()); } + if(!reachable) log.error("ping妫�娴嬬绾�"+monitor.getIp()); monitor.setPingOnline(reachable); } if (!monitor.getPingOnline()) { @@ -98,19 +101,17 @@ Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); offTimeList.add(dateFormat.format(now)); + monitor.setOffLineTimeStr(offTimeList); //鍒拌揪浜х敓宸ュ崟鐨勯槇鍊兼鏁� if (continueOffTimes>=times) { //浜х敓浜嗗伐鍗曟墠浼氬瓨鍌ㄧ绾挎椂闂�,瀛樺偍鏈�杩戜竴娆′骇鐢熷伐鍗曠殑杩欏嚑涓绾挎椂闂寸偣 - monitor.setOffLineTimeStr(offTimeList); monitor.setCreateWorkOrder(Boolean.TRUE); //浜х敓浜嗕竴娆″伐鍗曞垯娓呴櫎 continueOffTimes = 0; - offTimeList = new ArrayList<>(); } }else { //濡傛灉鍦ㄧ嚎浜嗭紝娓呯┖杩炵画绂荤嚎娆℃暟锛屾竻绌虹绾挎椂闂� continueOffTimes = 0; - offTimeList = new ArrayList<>(); } map.put("checkTimes", checkTimes); map.put("offLineTimes", offLineTimes); diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml index de62a44..fb0e3b3 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml @@ -99,13 +99,23 @@ <select id="getErrorListByNumbers" resultType="com.ycl.platform.domain.vo.WorkOrderVO"> - SELECT oer.serial_number,oer.ip,da.dict_value as errorType + SELECT m.ip,da.dict_value as errorType FROM t_work_order_error_type oer INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value + left join t_work_order wo on oer.work_order_no = wo.work_order_no + left join t_monitor m on m.serial_number = wo.serial_number WHERE oer.work_order_no in <foreach collection="workOrderNos" separator="," open="(" close=")" item="workOrderNo"> #{workOrderNo} </foreach> ORDER BY oer.create_time </select> + + <select id="getErrorList" resultType="com.ycl.system.entity.SysDictData"> + SELECT da.dict_value, da.dict_label + FROM t_work_order_error_type oer + INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value + WHERE oer.work_order_no = #{workOrderNo} + ORDER BY oer.create_time + </select> </mapper> diff --git a/ycl-server/src/test/java/com/ycl/Test.java b/ycl-server/src/test/java/com/ycl/Test.java deleted file mode 100644 index 1cf81f4..0000000 --- a/ycl-server/src/test/java/com/ycl/Test.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ycl; - -import org.springframework.boot.test.context.SpringBootTest; - -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.logging.SimpleFormatter; - -@SpringBootTest -public class Test { - - - @org.junit.jupiter.api.Test - public void demo (){ - // 鑾峰彇褰撳墠鏃ュ巻瀹炰緥 - Calendar calendar = Calendar.getInstance(); - - // 鑾峰彇褰撳墠鏃ユ湡 - Date now = calendar.getTime(); - - // 璁剧疆涓哄綋鍓嶆湀浠界殑绗竴澶� - calendar.setTime(now); - calendar.set(Calendar.DAY_OF_MONTH, 1); - Date firstDayOfMonth = calendar.getTime(); - - // 璁剧疆涓哄綋鍓嶆湀浠界殑鏈�鍚庝竴澶╋紙涓嬩釜鏈堢殑绗竴澶╁噺涓�锛� - calendar.add(Calendar.MONTH, 1); - calendar.set(Calendar.DAY_OF_MONTH, 0); // Calendar.DAY_OF_MONTH璁句负0琛ㄧず涓婁釜鏈堟渶鍚庝竴澶╋紝浣嗚繖閲屾槸涓轰簡寰楀埌鏈湀鏈�鍚庝竴澶╋紝鎵�浠ュ厛鍔犱竴鏈� - Date lastDayOfMonth = calendar.getTime(); - SimpleDateFormat simpleFormatter = new SimpleDateFormat("yyyy-MM-dd"); - String format = simpleFormatter.format(lastDayOfMonth); - System.out.println("鏈�鍚庝竴澶�"+format); - } -} -- Gitblit v1.8.0