From 4dc585d5bf2fd0a01602aba0d9fa25adbaf4a7fb Mon Sep 17 00:00:00 2001 From: jiazx0107@163.com <jiazx0107@163.com> Date: 星期一, 18 九月 2023 18:45:03 +0800 Subject: [PATCH] 提交仓内抓拍和后台配置 --- igds-core/src/main/java/com/ld/igds/file/impl/CoreFileServiceImpl.java | 233 +++++++------ igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java | 62 +++ igds-security/src/main/java/com/ld/igds/sec/service/SecurityService.java | 3 igds-security/src/main/java/com/ld/igds/sec/service/SecSnapService.java | 62 +++ igds-security/src/main/java/com/ld/igds/sec/controller/FireController.java | 2 igds-core/src/main/java/com/ld/igds/data/ConfigData.java | 6 igds-core/src/main/java/com/ld/igds/camera/data/ApiCameraResp.java | 2 igds-security/src/main/java/com/ld/igds/sec/controller/PatrolController.java | 2 igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java | 22 - igds-security/src/main/java/com/ld/igds/sec/service/impl/CoreSecFireServiceImpl.java | 2 igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml | 149 +++++++++ igds-security/src/main/java/com/ld/igds/timer/JobLampService.java | 6 igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java | 145 +++++++++ /dev/null | 56 --- igds-core/src/main/java/com/ld/igds/file/CoreFileService.java | 10 igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java | 44 ++ igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java | 63 +++ igds-web/src/main/resources/application.yml | 4 igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java | 61 +- igds-web/src/main/java/com/ld/igds/TestAction.java | 8 20 files changed, 710 insertions(+), 232 deletions(-) diff --git a/igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java b/igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java new file mode 100644 index 0000000..7b36a45 --- /dev/null +++ b/igds-basic/src/main/java/com/ld/igds/timer/ScheduledBasic.java @@ -0,0 +1,62 @@ +package com.ld.igds.timer; + +import com.bstek.bdf2.core.model.DefaultCompany; +import com.ld.igds.common.CoreCommonService; +import com.ld.igds.view.manager.TempManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 鍩虹妯″潡鏍囧噯瀹氭椂鍣ㄤ笟鍔¢厤缃� + */ +@Slf4j +@Component(ScheduledBasic.BEAN_ID) +public class ScheduledBasic { + + public static final String BEAN_ID = "basic.scheduled"; + + @Resource + private TempManager thManager; + @Resource + private CoreCommonService coreCommonService; + + @Resource + private WeatherTimerService weatherTimerService; + + + /** + * 姣忛棿闅�30鍒嗛挓鎵ц涓�娆� + */ + @Scheduled(cron = "0 0/30 * * * ?") + public void scheduled30() { + + //瀹氭椂鑾峰彇鍒嗘満鐨勬俯婀垮害妫�娴嬬粨鏋� + doExeTh(); + + //瀹氭椂鑾峰彇姘旇薄淇℃伅 + weatherTimerService.doExe(); + } + + /** + * 瀹氭椂鑾峰彇鍒嗘満鐨勬俯婀垮害妫�娴嬬粨鏋� + */ + private void doExeTh() { + List<DefaultCompany> list = coreCommonService.getCompanyList(); + if (null == list || list.isEmpty()) return; + + try { + for (DefaultCompany company : list) { + log.info("===================绯荤粺瀹氭椂鑾峰彇鍒嗘満涓嬬殑娓╂箍搴︿俊鎭�-{}=======================", company.getId()); + thManager.scheduledCheck(company.getId()); + + Thread.sleep(500); + } + } catch (Exception e) { + e.getStackTrace(); + } + } +} diff --git a/igds-basic/src/main/java/com/ld/igds/timer/ThScheduled.java b/igds-basic/src/main/java/com/ld/igds/timer/ThScheduled.java deleted file mode 100644 index 19f78e6..0000000 --- a/igds-basic/src/main/java/com/ld/igds/timer/ThScheduled.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.ld.igds.timer; - -import com.bstek.bdf2.core.model.DefaultCompany; -import com.ld.igds.common.CoreCommonService; -import com.ld.igds.view.manager.TempManager; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.List; - -/** - * 绮儏绠$悊妯″潡鐨勫畾鏃跺櫒閰嶇疆锛� - * 1銆佹瘡闂撮殧1涓皬鏃惰幏鍙栦笅鎵�鏈夊垎鏈洪厤缃殑娓╂箍搴︿俊鎭� - */ -@Slf4j -@Component(ThScheduled.BEAN_ID) -public class ThScheduled { - - public static final String BEAN_ID = "basic.grainScheduled"; - - @Resource - private TempManager thManager; - - @Resource - private CoreCommonService coreCommonService; - - - /** - * 姣忓皬鏃舵墽琛屼竴娆★紝鎵ц鏃堕棿涓烘瘡涓皬鏃剁殑绗竴绉� - * 2022骞�6鏈�27鏃� 11:05:31 淇敼涓�20 鍒嗛挓鎵ц涓�娆� - */ - @Scheduled(cron = "0 0/20 * * * ?") - public void scheduled() { - List<DefaultCompany> list = coreCommonService.getCompanyList(); - if (null == list || list.isEmpty()) return; - - for (DefaultCompany company : list) { - doExe(company.getId()); - try { - Thread.sleep(500); - } catch (Exception e) { - e.getStackTrace(); - } - } - - } - - - public void doExe(String companyId) { - log.info("===================绯荤粺瀹氭椂鑾峰彇鍒嗘満涓嬬殑娓╂箍搴︿俊鎭�-{}=======================", companyId); - thManager.scheduledCheck(companyId); - } -} diff --git a/igds-basic/src/main/java/com/ld/igds/timer/WeatherScheduled.java b/igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java similarity index 87% rename from igds-basic/src/main/java/com/ld/igds/timer/WeatherScheduled.java rename to igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java index 64d944c..44b2ce3 100644 --- a/igds-basic/src/main/java/com/ld/igds/timer/WeatherScheduled.java +++ b/igds-basic/src/main/java/com/ld/igds/timer/WeatherTimerService.java @@ -24,9 +24,9 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; + import javax.annotation.Resource; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -46,7 +46,7 @@ */ @Slf4j @Component -public class WeatherScheduled { +public class WeatherTimerService { @Resource(name = NotifyWeatherService.BEAN_ID) private NotifyWeatherService notifyService; @@ -74,8 +74,7 @@ /** * 瀹氭椂鑾峰彇姘旇薄淇℃伅锛岃娉ㄦ剰锛岀敱浜庢皵璞℃敮鎸佸缃戝拰鑷畾涔夋皵璞$珯锛岀郴缁熼粯璁ゅ彧鎵ц鍏朵腑涓�绉嶆柟寮� */ - @Scheduled(cron = "0 0/30 * * * ?") - public void scheduled() { + public void doExe() { log.info("===========================绯荤粺瀹氭椂鑾疯幏鍙栨皵璞′俊鎭�======================"); @@ -179,9 +178,9 @@ private void getWeatherByRkV30(Date date, WeatherConf conf) { //鑻ョ敤鎴枫�佸瘑鐮併�両P鍦板潃鏈変竴涓虹┖鍒欒繑鍥� - if(StringUtils.isEmpty(conf.getAccount()) + if (StringUtils.isEmpty(conf.getAccount()) || StringUtils.isEmpty(conf.getPassword()) - || StringUtils.isEmpty(conf.getIp())){ + || StringUtils.isEmpty(conf.getIp())) { return; } @@ -199,15 +198,15 @@ String body = ans.getBody(); log.debug("-----褰撳墠寤哄ぇ浠佺骞冲彴鑾峰彇姘旇薄淇℃伅-----锛岃繑鍥炴暟鎹�={}", body); RkResult response = JSONObject.parseObject(body, RkResult.class); - if(StringUtils.isEmpty(response.getCode()) || !"1000".equals(response.getCode())){ + if (StringUtils.isEmpty(response.getCode()) || !"1000".equals(response.getCode())) { log.error("褰撳墠寤哄ぇ浠佺骞冲彴鑾峰彇姘旇薄淇℃伅澶辫触......"); return; } List<JSONObject> result = JSON.parseArray(JSONObject.toJSONString(response.getData()), JSONObject.class); - JSONArray lists = (JSONArray)result.get(0).get("dataItem"); + JSONArray lists = (JSONArray) result.get(0).get("dataItem"); List<RkDto> list = JSON.parseArray(JSONObject.toJSONString(lists), RkDto.class); - if(null == list || list.isEmpty()){ + if (null == list || list.isEmpty()) { return; } WeatherInfo info = new WeatherInfo(); @@ -221,55 +220,55 @@ //鏍规嵁鍦板潃鍒ゆ柇閫夐」 for (RkDto rkDto : list) { //娓╂箍搴� - if("11".equals(rkDto.getNodeId())){ + if ("11".equals(rkDto.getNodeId())) { dataList = rkDto.getRegisterItem(); for (RkData rkData : dataList) { //娓╁害 - if("1".equals(rkData.getRegisterId())){ + if ("1".equals(rkData.getRegisterId())) { info.setTemp(rkData.getData()); } //婀垮害 - if("2".equals(rkData.getRegisterId())){ + if ("2".equals(rkData.getRegisterId())) { info.setHumidity(rkData.getData()); } } } //椋庡姏椋庨�� - if("1".equals(rkDto.getNodeId())){ + if ("1".equals(rkDto.getNodeId())) { dataList = rkDto.getRegisterItem(); for (RkData rkData : dataList) { //椋庡姏 - if("1".equals(rkData.getRegisterId())){ + if ("1".equals(rkData.getRegisterId())) { info.setWindSpeed(rkData.getData() + "绾�"); } //椋庨�� - if("2".equals(rkData.getRegisterId())){ + if ("2".equals(rkData.getRegisterId())) { info.setWindMeter(rkData.getData()); } } } //椋庡悜 - if("2".equals(rkDto.getNodeId())){ + if ("2".equals(rkDto.getNodeId())) { dataList = rkDto.getRegisterItem(); for (RkData rkData : dataList) { //椋庡悜 - if("1".equals(rkData.getRegisterId())){ + if ("1".equals(rkData.getRegisterId())) { info.setWindDirection(rkData.getData()); } } } //澶ф皵鍘� - if("14".equals(rkDto.getNodeId())){ + if ("14".equals(rkDto.getNodeId())) { dataList = rkDto.getRegisterItem(); for (RkData rkData : dataList) { //澶ф皵鍘� - if("2".equals(rkData.getRegisterId())){ + if ("2".equals(rkData.getRegisterId())) { info.setPressure(rkData.getData()); } } } //闆ㄩ噺 - if("21".equals(rkDto.getNodeId())){ + if ("21".equals(rkDto.getNodeId())) { dataList = rkDto.getRegisterItem(); for (RkData rkData : dataList) { // //鐬椂闆ㄩ噺 @@ -277,33 +276,33 @@ // info.setRainfall(rkData.getData()); // } //褰撳墠闆ㄩ噺 - if("2".equals(rkData.getRegisterId())){ + if ("2".equals(rkData.getRegisterId())) { info.setRainfall(rkData.getData()); } } } //鏈夋棤闆ㄩ洩 - if("16".equals(rkDto.getNodeId())){ + if ("16".equals(rkDto.getNodeId())) { weatherList = rkDto.getRegisterItem(); } } for (RkData rkData : weatherList) { //澶╂皵 - if("1".equals(rkData.getRegisterId())){ + if ("1".equals(rkData.getRegisterId())) { info.setWeather(rkData.getData()); //鏈夐洦闆椂鍒ゆ柇褰撳墠闆ㄩ噺 - if("鏈夐洦闆�".equals(rkData.getData())){ + if ("鏈夐洦闆�".equals(rkData.getData())) { Double rainfall = Double.valueOf(info.getRainfall()); - if(rainfall <= 10){ + if (rainfall <= 10) { info.setWeather("灏忛洦"); } - if(rainfall > 10 && rainfall <= 25){ + if (rainfall > 10 && rainfall <= 25) { info.setWeather("涓洦"); } - if(rainfall > 25 && rainfall <= 50){ + if (rainfall > 25 && rainfall <= 50) { info.setWeather("澶ч洦"); } - if(rainfall > 50){ + if (rainfall > 50) { info.setWeather("鏆撮洦"); } } @@ -316,6 +315,7 @@ /** * 鑾峰彇韬唤璁よ瘉鐨勬巿鏉僡ccessToken + * * @param conf * @return */ @@ -334,7 +334,7 @@ } log.info("鑾峰彇鐨勮韩浠借璇佷俊鎭�={}", response); - if(StringUtils.isEmpty(response.getCode()) || !"1000".equals(response.getCode())){ + if (StringUtils.isEmpty(response.getCode()) || !"1000".equals(response.getCode())) { log.error("褰撳墠寤哄ぇ浠佺骞冲彴鑾峰彇韬唤璁よ瘉淇℃伅澶辫触......"); return null; } @@ -345,9 +345,10 @@ token = (String) result.get("token"); //灏唗oken瀛樺叆缂撳瓨, - redisUtil.set(key, token, 2*60*60); + redisUtil.set(key, token, 2 * 60 * 60); } return token; } + } diff --git a/igds-core/src/main/java/com/ld/igds/camera/data/ApiCameraResp.java b/igds-core/src/main/java/com/ld/igds/camera/data/ApiCameraResp.java index ee2bad9..87ea49c 100644 --- a/igds-core/src/main/java/com/ld/igds/camera/data/ApiCameraResp.java +++ b/igds-core/src/main/java/com/ld/igds/camera/data/ApiCameraResp.java @@ -13,6 +13,8 @@ private String msg; + private String fileName; + /** * 鎾斁鍦板潃 */ diff --git a/igds-core/src/main/java/com/ld/igds/data/ConfigData.java b/igds-core/src/main/java/com/ld/igds/data/ConfigData.java index 8d6318b..fbf9556 100644 --- a/igds-core/src/main/java/com/ld/igds/data/ConfigData.java +++ b/igds-core/src/main/java/com/ld/igds/data/ConfigData.java @@ -36,4 +36,10 @@ @Value("${igds.weather-path}") private String weatherPath; + /** + * 鎶撴媿鏃堕棿閰嶇疆 + */ + @Value("${igds.snap-time}") + private int snapTime = -1; + } diff --git a/igds-core/src/main/java/com/ld/igds/file/CoreFileService.java b/igds-core/src/main/java/com/ld/igds/file/CoreFileService.java index 15d5fb1..89be5d4 100644 --- a/igds-core/src/main/java/com/ld/igds/file/CoreFileService.java +++ b/igds-core/src/main/java/com/ld/igds/file/CoreFileService.java @@ -39,6 +39,16 @@ */ public String getInoutFilePath(Date date); + + /** + * 鏍规嵁鏃堕棿鑾峰彇绯荤粺閰嶇疆鐨勪粨鍐呰棰戞姄鎷嶈矾寰� + * 绯荤粺闄勪欢璺緞浠yyyMM涓虹洰褰曡繘琛屽垝鍒� + * + * @param date + * @return + */ + public String getSnapFilePath(Date date); + /** * 鏍规嵁鏃堕棿鑾峰彇绯荤粺閰嶇疆鐨勯檮浠惰矾寰勫湴鍧� * 绯荤粺闄勪欢璺緞浠yyyMM涓虹洰褰曡繘琛屽垝鍒� diff --git a/igds-core/src/main/java/com/ld/igds/file/impl/CoreFileServiceImpl.java b/igds-core/src/main/java/com/ld/igds/file/impl/CoreFileServiceImpl.java index 802235a..b8394e4 100644 --- a/igds-core/src/main/java/com/ld/igds/file/impl/CoreFileServiceImpl.java +++ b/igds-core/src/main/java/com/ld/igds/file/impl/CoreFileServiceImpl.java @@ -21,138 +21,149 @@ @Component public class CoreFileServiceImpl implements CoreFileService { - @Autowired - private FileServiceMapper fileServiceMapper; + @Autowired + private FileServiceMapper fileServiceMapper; - @Autowired - private ConfigData configData; + @Autowired + private ConfigData configData; - @Override - public String getInoutFilePath(Date date) { - if (null == date) date = new Date(); - String basePath = configData.getFilePath() + "INOUT/" + DateFormatUtils.format(date, "yyyyMM") + "/"; - File file = new File(basePath); - if (!file.exists()) { - file.mkdirs(); - } - return basePath; - } + @Override + public String getInoutFilePath(Date date) { + if (null == date) date = new Date(); + String basePath = configData.getFilePath() + "INOUT/" + DateFormatUtils.format(date, "yyyyMM") + "/"; + File file = new File(basePath); + if (!file.exists()) { + file.mkdirs(); + } + return basePath; + } - @Override - public String getCommonFilePath(Date date) { - if (null == date) - date = new Date(); + @Override + public String getSnapFilePath(Date date) { + if (null == date) date = new Date(); + String basePath = configData.getFilePath() + "SNAP/" + DateFormatUtils.format(date, "yyyyMM") + "/"; + File file = new File(basePath); + if (!file.exists()) { + file.mkdirs(); + } + return basePath; + } - String basePath = configData.getFilePath() + "COMMON/" + DateFormatUtils.format(date, "yyyyMM") + "/"; + @Override + public String getCommonFilePath(Date date) { + if (null == date) + date = new Date(); - File file = new File(basePath); - if (!file.exists()) { - file.mkdirs(); - } - return basePath; - } + String basePath = configData.getFilePath() + "COMMON/" + DateFormatUtils.format(date, "yyyyMM") + "/"; - @Override - public String getTempFilePath() { + File file = new File(basePath); + if (!file.exists()) { + file.mkdirs(); + } + return basePath; + } - String basePath = configData.getFilePath() + "TEMP/"; - File file = new File(basePath); - if (!file.exists()) { - file.mkdirs(); - } - return basePath; - } + @Override + public String getTempFilePath() { - @Override - public void baseImg2Disk(String basePath, String fileName, String imgData) { - Base64Util.generateImage(imgData, basePath + fileName); - } + String basePath = configData.getFilePath() + "TEMP/"; + File file = new File(basePath); + if (!file.exists()) { + file.mkdirs(); + } + return basePath; + } - @Override - public void addRecord(FileData fileData) { - fileServiceMapper.addFile(fileData); - } + @Override + public void baseImg2Disk(String basePath, String fileName, String imgData) { + Base64Util.generateImage(imgData, basePath + fileName); + } - @Override - public void saveInoutFiles(List<FileData> files, String companyId, - String bizId, String bizTag) throws Exception, SQLException { + @Override + public void addRecord(FileData fileData) { + fileServiceMapper.addFile(fileData); + } - if (null == files || files.size() == 0) return; + @Override + public void saveInoutFiles(List<FileData> files, String companyId, + String bizId, String bizTag) throws Exception, SQLException { - for (FileData data : files) { - // 濡傛灉娌℃湁闄勪欢鍚嶇О锛屽垯涓嶄繚瀛橀檮浠朵俊鎭� - if (StringUtils.isEmpty(data.getFileName())) { - continue; - } - data.setCreateTime(new Date()); - data.setBizId(bizId); - if(StringUtils.isNotEmpty(bizTag)){ - data.setBizTag(bizTag); - } - data.setCompanyId(companyId); - data.setFileId(ContextUtil.getUUID()); - fileServiceMapper.addFile(data); - } - } + if (null == files || files.size() == 0) return; - @Override - public List<FileData> listFile(String companyId, String bizId) { - if (StringUtils.isEmpty(companyId)) { - companyId = ContextUtil.getDefaultCompanyId(); - } + for (FileData data : files) { + // 濡傛灉娌℃湁闄勪欢鍚嶇О锛屽垯涓嶄繚瀛橀檮浠朵俊鎭� + if (StringUtils.isEmpty(data.getFileName())) { + continue; + } + data.setCreateTime(new Date()); + data.setBizId(bizId); + if (StringUtils.isNotEmpty(bizTag)) { + data.setBizTag(bizTag); + } + data.setCompanyId(companyId); + data.setFileId(ContextUtil.getUUID()); + fileServiceMapper.addFile(data); + } + } - if (StringUtils.isEmpty(bizId)) - return null; + @Override + public List<FileData> listFile(String companyId, String bizId) { + if (StringUtils.isEmpty(companyId)) { + companyId = ContextUtil.getDefaultCompanyId(); + } - List<FileData> listFile = fileServiceMapper.listFile(companyId, bizId); + if (StringUtils.isEmpty(bizId)) + return null; - if (null == listFile || listFile.isEmpty()) - return null; + List<FileData> listFile = fileServiceMapper.listFile(companyId, bizId); - return listFile; - } + if (null == listFile || listFile.isEmpty()) + return null; - @Override - public void delFile(String fileId) { - fileServiceMapper.delFile(fileId); - } + return listFile; + } + + @Override + public void delFile(String fileId) { + fileServiceMapper.delFile(fileId); + } - @Override - public void saveFiles(List<FileInfo> files, String bizId, String bizTag) { - if (null == files || files.size() == 0){ - return; - } - FileData fileData = null; - for (FileInfo data : files) { - if (StringUtils.isEmpty(data.getFileName())) { - continue; - } - if (StringUtils.isNotEmpty(data.getBizId())) { - continue; - } - if (null == data.getCreateTime()) { - data.setCreateTime(new Date()); - } - if (null == data.getBizTag()) { - data.setBizTag(bizTag); - } + @Override + public void saveFiles(List<FileInfo> files, String bizId, String bizTag) { + if (null == files || files.size() == 0) { + return; + } + FileData fileData = null; + for (FileInfo data : files) { + if (StringUtils.isEmpty(data.getFileName())) { + continue; + } + if (StringUtils.isNotEmpty(data.getBizId())) { + continue; + } + if (null == data.getCreateTime()) { + data.setCreateTime(new Date()); + } + if (null == data.getBizTag()) { + data.setBizTag(bizTag); + } - data.setBizId(bizId); - data.setCompanyId(ContextUtil.getCompanyId()); + data.setBizId(bizId); + data.setCompanyId(ContextUtil.getCompanyId()); - if (null == data.getFileId()) { - data.setFileId(ContextUtil.getUUID()); - } + if (null == data.getFileId()) { + data.setFileId(ContextUtil.getUUID()); + } - fileData = new FileData(); - fileData.setFileId(data.getFileId()); - fileData.setBizId(data.getBizId()); - fileData.setBizTag(data.getBizTag()); - fileData.setCompanyId(data.getCompanyId()); - fileData.setFileName(data.getFileName()); - fileData.setCreateTime(data.getCreateTime()); - fileServiceMapper.addFile(fileData); - } - } + fileData = new FileData(); + fileData.setFileId(data.getFileId()); + fileData.setBizId(data.getBizId()); + fileData.setBizTag(data.getBizTag()); + fileData.setCompanyId(data.getCompanyId()); + fileData.setFileName(data.getFileName()); + fileData.setCreateTime(data.getCreateTime()); + fileServiceMapper.addFile(fileData); + } + } } diff --git a/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java b/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java index 7732e83..1e0d7f0 100644 --- a/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java +++ b/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java @@ -126,27 +126,7 @@ } - /** - * @param param - * @return - */ -// public String noticeWeightDone(ApiInoutData param) { -// //鑾峰彇绉伴噸涓绘帶鍣ㄩ厤缃� -// InoutConf conf = getWeightGateway(param.getCompanyId(), param.getDeptId(), param.getSort()); -// -// if (null == conf) { -// return "绉伴噸涓绘帶鏈厤缃紝鏀寔澶辫触"; -// } -// -// ApiInoutData apiData = new ApiInoutData(conf); -// apiData.setPlateNum(param.getPlateNum()); -// apiData.setTime(new Date()); -// -// ApiInoutService inoutApiService = apiInoutManager.getApiService(conf.getProtocol()); -// -// // return inoutApiService.noticeWeightDone(apiData); TODO -// return null; -// } + /** * 鍑哄叆搴撴姄鎷� diff --git a/igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java b/igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java new file mode 100644 index 0000000..bf58aeb --- /dev/null +++ b/igds-security/src/main/java/com/ld/igds/models/SecSnapConf.java @@ -0,0 +1,44 @@ +package com.ld.igds.models; + +import com.bstek.dorado.annotation.PropertyDef; +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +/** + * 浠撳唴瑙嗛鎶撴媿閰嶇疆 + */ +@Data +@Entity +@Table(name = "D_SEC_SNAP_CONF") +public class SecSnapConf { + + @Id + @Column(name = "ID_", length = 40) + @PropertyDef(label = "涓婚敭") + private String id; + + @Column(name = "COMPANY_ID_", length = 10) + @PropertyDef(label = "缁勭粐缂栫爜") + private String companyId; + + @Column(name = "DEPT_ID_", length = 30) + @PropertyDef(label = "鎵�灞炲垎搴�") + private String deptId; + + @Column(name = "DEPOT_ID_", length = 50) + @PropertyDef(label = "鎵�灞炰粨搴�") + private String depotId; + + @Column(name = "CAMERA_ID_", length = 50) + @PropertyDef(label = "鍏宠仈鎽勫儚澶�") + private String cameraId; + + @Column(name = "UPDATE_TIME_", length = 1) + @PropertyDef(label = "鏇存柊鏃堕棿") + private Date updateTime; +} diff --git a/igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java b/igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java new file mode 100644 index 0000000..c15c721 --- /dev/null +++ b/igds-security/src/main/java/com/ld/igds/models/SecSnapDepot.java @@ -0,0 +1,63 @@ +package com.ld.igds.models; + +import com.alibaba.fastjson.annotation.JSONField; +import com.bstek.dorado.annotation.PropertyDef; +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +/** + * 浠撳唴瑙嗛鍥惧儚鏁版嵁琛� + */ +@Data +@Entity +@Table(name = "D_SEC_SNAP_DEPOT") +public class SecSnapDepot { + + @Id + @Column(name = "ID_", length = 40) + @PropertyDef(label = "涓婚敭") + private String id; + + @Column(name = "COMPANY_ID_", length = 10) + @PropertyDef(label = "缁勭粐缂栫爜") + private String companyId; + + @Column(name = "DEPT_ID_", length = 30) + @PropertyDef(label = "鎵�灞炲垎搴�") + private String deptId; + + @Column(name = "DEPOT_ID_", length = 50) + @PropertyDef(label = "鎵�灞炰粨搴�") + private String depotId; + + @Column(name = "CAMERA_ID_", length = 50) + @PropertyDef(label = "鍏宠仈鎽勫儚澶�") + private String cameraId; + + @Column(name = "RESULT_", length = 30) + @PropertyDef(label = "鎶撴媿缁撴灉") + private String result="SUCCESS"; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @Column(name = "UPDATE_TIME_", length = 1) + @PropertyDef(label = "鎶撴媿鏃堕棿") + private Date updateTime; + + @Column(name = "FILE_SUFFIX_", length = 6) + @PropertyDef(label = "鍥惧儚鏂囦欢鍚庣紑鍚�") + private String fileSuffix = "jpg"; + + @Column(name = "FILE_NAME_", length = 100) + @PropertyDef(label = "鏂囦欢鍚嶇О") + private String fileName; + + @Column(name = "PRESET_ ", length = 4) + @PropertyDef(label = "棰勭疆浣嶇紪鍙�") + private String preset; + +} diff --git a/igds-security/src/main/java/com/ld/igds/sec/controller/FireController.java b/igds-security/src/main/java/com/ld/igds/sec/controller/FireController.java index 540cec5..fdfd779 100644 --- a/igds-security/src/main/java/com/ld/igds/sec/controller/FireController.java +++ b/igds-security/src/main/java/com/ld/igds/sec/controller/FireController.java @@ -8,7 +8,6 @@ import com.ld.igds.sec.dto.SecurityParam; import com.ld.igds.sec.manager.SecManager; import com.ld.igds.util.ContextUtil; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -17,7 +16,6 @@ /** * 瀹夐槻--娑堥槻绠$悊鎺у埗灞� */ -@Slf4j @RestController @RequestMapping("basic/security") public class FireController { diff --git a/igds-security/src/main/java/com/ld/igds/sec/controller/PatrolController.java b/igds-security/src/main/java/com/ld/igds/sec/controller/PatrolController.java index 00cae55..8c105e3 100644 --- a/igds-security/src/main/java/com/ld/igds/sec/controller/PatrolController.java +++ b/igds-security/src/main/java/com/ld/igds/sec/controller/PatrolController.java @@ -2,7 +2,6 @@ import com.ld.igds.sec.dto.SecPatrolRecordDto; import com.ld.igds.sec.manager.SecManager; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -11,7 +10,6 @@ /** * 瀹夐槻--鐢靛瓙宸℃洿绠$悊鎺у埗灞� */ -@Slf4j @RestController @RequestMapping("basic/security") public class PatrolController { diff --git a/igds-security/src/main/java/com/ld/igds/sec/service/SecSnapService.java b/igds-security/src/main/java/com/ld/igds/sec/service/SecSnapService.java new file mode 100644 index 0000000..7dce8b4 --- /dev/null +++ b/igds-security/src/main/java/com/ld/igds/sec/service/SecSnapService.java @@ -0,0 +1,62 @@ +package com.ld.igds.sec.service; + +import com.bstek.bdf2.core.orm.hibernate.HibernateDao; +import com.ld.igds.models.SecSnapConf; +import com.ld.igds.models.SecSnapDepot; +import com.ld.igds.util.ContextUtil; +import org.apache.commons.lang3.StringUtils; +import org.hibernate.Session; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class SecSnapService extends HibernateDao { + + + /** + * 鏍规嵁鏉′欢鑾峰彇閰嶇疆绫诲埆 + * + * @param companyId 缁勭粐缂栫爜锛屼笉鍙负绌� + * @param deptId 鎵�灞炲垎搴擄紝鍙负绌� + * @return 鏌ヨ缁撴灉 + */ + public List<SecSnapConf> listSnapConf(String companyId, String deptId) { + String hql = " from " + SecSnapConf.class.getName() + + " where companyId=:companyId"; + + Map<String, Object> args = new HashMap<>(); + args.put("companyId", companyId); + if (StringUtils.isNotEmpty(deptId)) { + hql += " and deptId =:deptId"; + args.put("deptId", deptId); + } + + return this.query(hql, args); + } + + public void addData(SecSnapConf snapConf, String fileName, String result) { + Session session = this.getSessionFactory().openSession(); + try { + SecSnapDepot data = new SecSnapDepot(); + data.setId(ContextUtil.getUUID()); + data.setCompanyId(snapConf.getCompanyId()); + data.setDeptId(snapConf.getDeptId()); + data.setCameraId(snapConf.getCameraId()); + data.setResult(result); + data.setUpdateTime(new Date()); + data.setFileSuffix("jpg"); + data.setFileName(fileName); + + session.save(data); + } catch (Exception e) { + e.printStackTrace(); + } finally { + session.flush(); + session.close(); + } + } +} diff --git a/igds-security/src/main/java/com/ld/igds/sec/service/SecurityService.java b/igds-security/src/main/java/com/ld/igds/sec/service/SecurityService.java index 418ed6a..15878a8 100644 --- a/igds-security/src/main/java/com/ld/igds/sec/service/SecurityService.java +++ b/igds-security/src/main/java/com/ld/igds/sec/service/SecurityService.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -19,7 +20,7 @@ @Component public class SecurityService extends HibernateDao { - @Autowired + @Resource private CoreSecCameraService coreSecCameraService; public List<SecCamera> listCamera(Map<String, Object> param) { diff --git a/igds-security/src/main/java/com/ld/igds/sec/service/impl/CoreSecFireServiceImpl.java b/igds-security/src/main/java/com/ld/igds/sec/service/impl/CoreSecFireServiceImpl.java index 9b905c2..1430e27 100644 --- a/igds-security/src/main/java/com/ld/igds/sec/service/impl/CoreSecFireServiceImpl.java +++ b/igds-security/src/main/java/com/ld/igds/sec/service/impl/CoreSecFireServiceImpl.java @@ -16,8 +16,6 @@ @Autowired private SecFireServiceMapper serviceMapper; - @Autowired - private RedisUtil redisUtil; @Override public List<SecFireDto> getAllFire(String companyId) { diff --git a/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml b/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml new file mode 100644 index 0000000..0a73e8e --- /dev/null +++ b/igds-security/src/main/java/com/ld/igds/sec/view/SecSnapDepot.view.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ViewConfig> + <Arguments/> + <Context/> + <Model> + <DataType name="dtMain"> + <Property name="creationType">com.ld.igds.models.SecSnapDepot</Property> + <PropertyDef name="id"> + <Property></Property> + <Property name="label">涓婚敭</Property> + </PropertyDef> + <PropertyDef name="companyId"> + <Property></Property> + <Property name="label">缁勭粐缂栫爜</Property> + </PropertyDef> + <PropertyDef name="deptId"> + <Property></Property> + <Property name="label">鎵�灞炲垎搴�</Property> + </PropertyDef> + <PropertyDef name="depotId"> + <Property></Property> + <Property name="label">鎵�灞炰粨搴�</Property> + </PropertyDef> + <PropertyDef name="cameraId"> + <Property></Property> + <Property name="label">鍏宠仈鎽勫儚澶�</Property> + </PropertyDef> + <PropertyDef name="updateTime"> + <Property name="dataType">Date</Property> + <Property name="label">鏇存柊鏃堕棿</Property> + </PropertyDef> + <PropertyDef name="zpsj"> + <Property name="dataType">Date</Property> + <Property name="label">鎶撴媿鏃堕棿</Property> + </PropertyDef> + <PropertyDef name="txwjhzm"> + <Property></Property> + <Property name="label">鍥惧儚鏂囦欢鍚庣紑鍚�</Property> + </PropertyDef> + <PropertyDef name="wjmc"> + <Property></Property> + <Property name="label">鏂囦欢鍚嶇О</Property> + </PropertyDef> + <PropertyDef name="yzwbh"> + <Property></Property> + <Property name="label">棰勭疆浣嶇紪鍙�</Property> + </PropertyDef> + </DataType> + <DataType name="dtConf"> + <Property name="creationType">com.ld.igds.models.SecSnapConf</Property> + <PropertyDef name="id"> + <Property></Property> + <Property name="label">涓婚敭</Property> + </PropertyDef> + <PropertyDef name="companyId"> + <Property></Property> + <Property name="label">缁勭粐缂栫爜</Property> + </PropertyDef> + <PropertyDef name="deptId"> + <Property></Property> + <Property name="label">鎵�灞炲垎搴�</Property> + </PropertyDef> + <PropertyDef name="depotId"> + <Property></Property> + <Property name="label">鎵�灞炰粨搴�</Property> + </PropertyDef> + <PropertyDef name="cameraId"> + <Property></Property> + <Property name="label">鍏宠仈鎽勫儚澶�</Property> + </PropertyDef> + <PropertyDef name="updateTime"> + <Property name="dataType">Date</Property> + <Property name="label">鏇存柊鏃堕棿</Property> + </PropertyDef> + </DataType> + </Model> + <View layout="padding:5;regionPadding:5"> + <Property name="packages">font-awesome,css-common</Property> + <DataSet id="dsMain"> + <Property name="loadMode">lazy</Property> + <Property name="dataType">[dtMain]</Property> + </DataSet> + <DataSet id="dsConf"> + <Property name="dataType">[dtConf]</Property> + </DataSet> + <ToolBar> + <ToolBarLabel> + <Property name="text">鑿滃崟鏍忥細</Property> + </ToolBarLabel> + <Fill/> + <ToolBarButton> + <ClientEvent name="onClick">view.get("#dialogConf").show();
 +</ClientEvent> + <Property name="caption">鎶撴媿閰嶇疆</Property> + </ToolBarButton> + </ToolBar> + <Container layout="regionPadding:10" layoutConstraint="center"> + <Property name="exClassName">bg-color</Property> + <DataGrid layoutConstraint="center padding:5px"> + <Property name="dataSet">dsMain</Property> + <Property name="readOnly">true</Property> + <RowNumColumn> + <Property name="width">50</Property> + </RowNumColumn> + <DataColumn name="depotId"> + <Property name="property">depotId</Property> + </DataColumn> + <DataColumn name="updateTime"> + <Property name="property">updateTime</Property> + </DataColumn> + <DataColumn name="zpsj"> + <Property name="property">zpsj</Property> + </DataColumn> + <DataColumn name="txwjhzm"> + <Property name="property">txwjhzm</Property> + </DataColumn> + <DataColumn name="wjmc"> + <Property name="property">wjmc</Property> + </DataColumn> + <DataColumn name="yzwbh"> + <Property name="property">yzwbh</Property> + </DataColumn> + </DataGrid> + </Container> + <Dialog id="dialogConf"> + <Buttons/> + <Children> + <ToolBar> + <ToolBarButton> + <Property name="caption">鏂板</Property> + </ToolBarButton> + </ToolBar> + <DataGrid> + <Property name="dataSet">dsConf</Property> + <DataColumn name="depotId"> + <Property name="property">depotId</Property> + </DataColumn> + <DataColumn name="cameraId"> + <Property name="property">cameraId</Property> + </DataColumn> + <DataColumn name="updateTime"> + <Property name="property">updateTime</Property> + </DataColumn> + </DataGrid> + </Children> + <Tools/> + </Dialog> + </View> +</ViewConfig> diff --git a/igds-security/src/main/java/com/ld/igds/timer/JobLampService.java b/igds-security/src/main/java/com/ld/igds/timer/JobLampService.java index 28c5fde..b4725a5 100644 --- a/igds-security/src/main/java/com/ld/igds/timer/JobLampService.java +++ b/igds-security/src/main/java/com/ld/igds/timer/JobLampService.java @@ -15,6 +15,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -28,9 +30,9 @@ @Service(Constant.JOB_BEAN_LAMP) public class JobLampService implements Job { - @Autowired + @Resource private LampManager lampManager; - @Autowired + @Resource private CoreDeviceService coreDeviceService; @Override diff --git a/igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java b/igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java new file mode 100644 index 0000000..faa3667 --- /dev/null +++ b/igds-security/src/main/java/com/ld/igds/timer/ScheduledSec.java @@ -0,0 +1,145 @@ +package com.ld.igds.timer; + +import com.bstek.bdf2.core.model.DefaultCompany; +import com.ld.igds.camera.ApiCameraManager; +import com.ld.igds.camera.CameraUtil; +import com.ld.igds.camera.data.ApiCameraResp; +import com.ld.igds.camera.data.ApiSnapReq; +import com.ld.igds.common.CoreCommonService; +import com.ld.igds.data.ConfigData; +import com.ld.igds.file.CoreFileService; +import com.ld.igds.models.SecCamera; +import com.ld.igds.models.SecSnapConf; +import com.ld.igds.models.SecSnapDepot; +import com.ld.igds.models.SnapSer; +import com.ld.igds.sec.service.CoreSecCameraService; +import com.ld.igds.sec.service.SecSnapService; +import com.ld.igds.sec.service.SecurityService; +import com.ld.igds.util.ContextUtil; +import com.ld.igds.util.DateUtil; +import com.ld.igds.view.manager.TempManager; +import com.ld.igds.view.service.SnapSerService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 瀹夐槻妯″潡鏍囧畾鏃跺櫒閰嶇疆 + */ +@Slf4j +@Component(ScheduledSec.BEAN_ID) +public class ScheduledSec { + + public static final String BEAN_ID = "sec.scheduled"; + + @Resource + private ConfigData configData; + @Resource + private SecSnapService secSnapService; + @Resource + private CoreSecCameraService coreSecCameraService; + @Resource + private SnapSerService snapSerService; + @Resource + private CoreFileService fileService; + @Resource + private ApiCameraManager apiCameraManager; + + /** + * 姣忛棿闅�30鍒嗛挓鎵ц涓�娆� + */ + @Scheduled(cron = "0 0/30 * * * ?") + public void scheduled30() { + + //鎵ц鎶撴媿鍒ゆ柇 + doExeSnap(new Date()); + } + + /** + * 瀹氭椂鎵ц鎶撴媿 + */ + private void doExeSnap(Date date) { + + if (configData.getSnapTime() < 0) return; + + //鑾峰彇褰撳墠绯荤粺鏃堕棿 + int curHour = DateUtil.getHour(date); + if (curHour != configData.getSnapTime()) return; + + log.info("===================绯荤粺鎵ц瀹氭椂浠撳唴瑙嗛鎶撴媿=================="); + + + try { + + List<SecSnapConf> list = secSnapService.listSnapConf(configData.getDefaultCompanyId(), null); + + if (null == list || list.isEmpty()) return; + + SecCamera secCamera; + Map<String, SnapSer> snapSerMap = new HashMap<>(); + SnapSer snapSer; + for (SecSnapConf snapConf : list) { + + if (null == snapConf.getDepotId()) continue; + + secCamera = coreSecCameraService.getCameraById(snapConf.getCompanyId(), snapConf.getCameraId()); + + if (null == secCamera) continue; + + snapSer = snapSerMap.get(snapConf.getDeptId()); + if (null == snapSer) { + snapSer = snapSerService.getCacheByDeptId(snapConf.getDeptId()); + snapSerMap.put(snapConf.getDeptId(), snapSer); + } + + if (null == snapSer) { + log.error("------------鎶撴媿涓洪厤缃姄鎷嶅垎鏈�----------"); + continue; + } + + doExeSnapToData(secCamera, snapSer, snapConf); + + Thread.sleep(500); + } + } catch (Exception e) { + log.error("----------鎶撴媿鍚庡彴鍑洪敊---------{}", e); + } + } + + private void doExeSnapToData(SecCamera secCamera, SnapSer snapSer, SecSnapConf snapConf) { + ApiSnapReq req = new ApiSnapReq(); + req.setCompanyId(secCamera.getCompanyId()); + req.setDeptId(secCamera.getDeptId()); + req.setSn(secCamera.getSn()); + req.setSnapType(secCamera.getSnapType()); + req.setPlayType(secCamera.getPlayType()); + req.setSerSn(snapSer.getSn()); + req.setCameraName(secCamera.getName()); + req.setBizId(null); + + req.setMediaAddr(CameraUtil.updateMediaAddr(secCamera.getMediaAddr(), secCamera.getLoginId(), + secCamera.getPwd(), secCamera.getIpIn(), secCamera.getPortInC(), secCamera.getChanNum())); + + String filePath = fileService.getSnapFilePath(new Date()); + + req.setFilePath(filePath); + + //璋冩暣闄勪欢鍚嶇О锛岄伩鍏嶅嚭鐜颁腑鏂� + String fileName = snapConf.getDepotId() + "_" + ContextUtil.getTimeId(1000) + ".jpg"; + req.setFileName(fileName); + + //鎵ц鎶撴媿 + ApiCameraResp resp = apiCameraManager.getApiCameraService(secCamera.getPlayType()).snapImg(req); + resp.setFileName(fileName); + + //鎵ц璁板綍淇濆瓨 + secSnapService.addData(snapConf, fileName, resp.getCode()); + } +} diff --git a/igds-web/src/main/java/com/ld/igds/TestAction.java b/igds-web/src/main/java/com/ld/igds/TestAction.java index 5fb216b..75db25c 100644 --- a/igds-web/src/main/java/com/ld/igds/TestAction.java +++ b/igds-web/src/main/java/com/ld/igds/TestAction.java @@ -11,7 +11,7 @@ import com.ld.igds.grain.service.CoreGrainService; import com.ld.igds.models.WeatherConf; import com.ld.igds.models.WeatherInfo; -import com.ld.igds.timer.WeatherScheduled; +import com.ld.igds.timer.WeatherTimerService; import com.ld.igds.util.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -37,7 +37,7 @@ @Autowired private RedisUtil redisUtil; @Autowired - private WeatherScheduled weatherScheduled; + private WeatherTimerService weatherTimerService; @Override public String getUrl() { @@ -137,7 +137,7 @@ } if (t.equals("weather11")) { - weatherScheduled.scheduled(); + weatherTimerService.doExe(); } } @@ -168,7 +168,7 @@ log.info("-----娴嬭瘯璋冪敤姘旇薄----deptId={},cityId={}", deptId, cityId); Date date = new Date(); - WeatherInfo info = weatherScheduled.getWeatherByWeb(date, conf); + WeatherInfo info = weatherTimerService.getWeatherByWeb(date, conf); if (null == info) { response.getWriter().print("MSG:ERROR"); } else { diff --git a/igds-web/src/main/resources/application.yml b/igds-web/src/main/resources/application.yml index 8a08300..2e7f083 100644 --- a/igds-web/src/main/resources/application.yml +++ b/igds-web/src/main/resources/application.yml @@ -1,7 +1,7 @@ ########################## Server ########################## 涓规1鍩庡叧鐪佺伯椋熷偍澶囧簱 spring: profiles: - active: linux + active: dev application: name: igds main: @@ -47,6 +47,8 @@ phone: 400-627-1116 website: http://www.fzzygf.com address: 閮戝窞甯傞珮鏂板尯闀挎た璺�11鍙锋渤鍗楃渷鍥藉澶у绉戞妧鍥鍖�1鍙锋ゼ + ##浠撳唴瑙嗛鎶撴媿鏃堕棿閰嶇疆0-24 + snap-time: 12 file-path: D:/IGDS/FILE/ ## 鎺ㄩ�佸井淇″钩鍙扮殑鍦板潃 warn-path: http://124.71.162.207:8299/igds-wx/gateway -- Gitblit v1.9.3