From c6512655e722d9ca80dd8c34b79f6d3923ecf86c Mon Sep 17 00:00:00 2001
From: 罗元桥 <2376770955@qq.com>
Date: 星期二, 22 六月 2021 16:07:50 +0800
Subject: [PATCH] Merge branch 'test' into 'test_screen'

---
 springcloud_k8s_panzhihuazhihuishequ/service_api/src/main/java/com/panzhihua/serviceapi/biz/impl/LcApiServiceImpl.java |  247 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 247 insertions(+), 0 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_api/src/main/java/com/panzhihua/serviceapi/biz/impl/LcApiServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_api/src/main/java/com/panzhihua/serviceapi/biz/impl/LcApiServiceImpl.java
new file mode 100644
index 0000000..3685d5f
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_api/src/main/java/com/panzhihua/serviceapi/biz/impl/LcApiServiceImpl.java
@@ -0,0 +1,247 @@
+package com.panzhihua.serviceapi.biz.impl;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.JsonObject;
+import com.panzhihua.common.api.LangchaoApiConstants;
+import com.panzhihua.common.api.LcReturnObject;
+import com.panzhihua.common.constants.TokenConstant;
+import com.panzhihua.common.enums.LocalEventToLangChaoEventTypeEnum;
+import com.panzhihua.common.model.dtos.api.EventFile;
+import com.panzhihua.common.model.dtos.api.EventInfo;
+import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.model.vos.grid.EventDetailsVO;
+import com.panzhihua.common.model.vos.grid.EventGridDataDetailsVO;
+import com.panzhihua.common.model.vos.grid.EventResourceVO;
+import com.panzhihua.common.service.grid.GridService;
+import com.panzhihua.serviceapi.biz.LcApiService;
+import com.panzhihua.serviceapi.model.dto.LcGridData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * program 攀枝花智慧社区项目
+ * description 第三方浪潮市平台对接接口管理API
+ *
+ * @author manailin
+ * Date 2021-01-22 15:30
+ **/
+@Slf4j
+@Service
+public class LcApiServiceImpl implements LcApiService {
+
+    @Resource
+    private GridService gridService;
+
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
+    /**
+     * 从redis获取token
+     *
+     * @return String 浪潮对接的token
+     */
+    private String getAuthToken() {
+        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
+        if (valueOperations.get(LangchaoApiConstants.LANG_CHAO_TOKEN) == null) {
+            saveTokenFromRemoteRequest("18080799023", "123456");
+        }
+        return valueOperations.get(LangchaoApiConstants.LANG_CHAO_TOKEN);
+    }
+
+    @Override
+    public String saveTokenFromRemoteRequest(String name, String password) {
+        if (redisTemplate.hasKey(LangchaoApiConstants.LANG_CHAO_TOKEN)) {
+            //如果redis存在token,直接返回redis存储的token
+            ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
+            return valueOperations.get(LangchaoApiConstants.LANG_CHAO_TOKEN);
+        } else {
+            //如果第一次请求浪潮的token请求,请求完成后,保存对于的token到数据库中。便于12小时内重复调用
+            HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_GET_TOKEN_URL.replace("#username", name).replace("#password", password));
+            HttpResponse result = request.execute();
+            ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
+            valueOperations.set(LangchaoApiConstants.LANG_CHAO_TOKEN, result.body(), TokenConstant.EXPIRETIME, TimeUnit.MINUTES);
+            return result.toString();
+        }
+    }
+
+    @Override
+    public String getAllEventTypeList() {
+        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_EVENT_CATEGORY_URL);
+        request.auth(getAuthToken());
+        HttpResponse result = request.execute();
+        return result.body();
+    }
+
+    @Override
+    public String submitEventRegister(EventInfo eventInfo) {
+        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_REGIST_EVENT_URL);
+        request.auth(getAuthToken());
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            //对象转map
+            Map m = mapper.readValue(mapper.writeValueAsString(eventInfo), Map.class);
+            request.form(m);
+        } catch (JsonProcessingException e) {
+            log.info("方法submitEventRegister发生错误:{}", e.getMessage());
+        }
+        HttpResponse result = request.execute();
+        log.info("submit上传浪潮事件信息:{}",result.body());
+        return result.body();
+    }
+
+    @Override
+    public R submitEventRelationFile(EventFile eventFile) {
+        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_EVENT_FILE_UPLOAD_URL);
+        request.auth(getAuthToken());
+        try {
+            HttpURLConnection httpUrl = (HttpURLConnection) new URL(eventFile.getFiles()).openConnection();
+            httpUrl.connect();
+            File file = inputStreamToFile(httpUrl.getInputStream(), eventFile.getFileName());
+            request.form("files", file);
+            httpUrl.disconnect();
+            request.form("dataId", eventFile.getDataId());
+            request.form("type", eventFile.getType());
+            request.form("module", eventFile.getModule());
+            HttpResponse result = request.execute();
+            file.delete();
+            return R.ok(result.body());
+        } catch (Exception e) {
+            log.info("方法submitEventRelationFile发生错误:{}", e.getMessage());
+        }
+        return R.fail();
+    }
+
+    @Override
+    public String getEventInfoById(String eventId) {
+        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_APP_EVENT_INFO_DETAIL_URL);
+        request.auth(getAuthToken());
+        request.form("eventId", eventId);
+        HttpResponse result = request.execute();
+        return result.body();
+    }
+
+    @Override
+    public List<LcGridData> getGridListByAreaId(String areaId) {
+        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_GET_EVENT_INFO_AREA_ID_URL);
+        request.auth(getAuthToken());
+        request.form("areaId", areaId);
+        HttpResponse result = request.execute();
+        return JSONArray.parseArray(result.body(), LcGridData.class);
+    }
+
+    @Override
+    public String getGridMemberListByAreaIdOrName(String areaId) {
+        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_GET_GETALL_SEARCH_PAGE_URL);
+        request.auth(getAuthToken());
+        request.form("areaId", areaId);
+        HttpResponse result = request.execute();
+        return result.body();
+    }
+
+    @Override
+    public void automationUploadEventAndFile() {
+        List<EventDetailsVO> unUploadEventList = gridService.getUnUploadEvent();
+        unUploadEventList.forEach(eventInfoVo -> {
+            log.info("定时向浪潮服务器提交网格事件登记开始");
+            EventInfo eventInfo = new EventInfo();
+            String lcGrid = gridService.getLcGridIdByLocal(eventInfoVo.getGridId());
+            String lcGridUserId = gridService.getLcUserIdByLocalUserId(eventInfoVo.getGridMemberId().toString());
+            eventInfo.setGridId(lcGrid);
+            R grid = gridService.eventGridDataDetails(eventInfoVo.getGridId());
+            EventGridDataDetailsVO gridData = (EventGridDataDetailsVO) grid.getData();
+            eventInfo.setGridName(gridData.getGridName());
+            eventInfo.setCaseTypeCode(LocalEventToLangChaoEventTypeEnum.getCodeByName(eventInfoVo.getEventType()));
+            String caseTypeName= LocalEventToLangChaoEventTypeEnum.getEventNameByCode(eventInfoVo.getEventType());
+            eventInfo.setCaseTypeName(caseTypeName);
+            if (eventInfoVo.getEventCategory() != 1L) {
+                eventInfo.setHappenTime(String.valueOf(eventInfoVo.getPropagandaTime().getTime()));
+            } else {
+                eventInfo.setHappenTime(String.valueOf(eventInfoVo.getHappenTime().getTime()));
+            }
+            eventInfo.setHappenAddress(eventInfoVo.getHappenAddress());
+            String[] data = eventInfoVo.getHappentLatLng().split(",");
+            eventInfo.setLongitude(data[0]);
+            eventInfo.setLatitude(data[1]);
+            eventInfo.setCaseDescription(eventInfoVo.getEventDes());
+            eventInfo.setCaseRecordTime(String.valueOf(eventInfoVo.getCreateAt().getTime()));
+            eventInfo.setHandleType("REPORT");
+            eventInfo.setHandleDescription(eventInfoVo.getProcessDesc());
+            eventInfo.setDataId(eventInfoVo.getId().toString());
+            //获取系统网格员映射的浪潮网格员对于的用户ID
+            eventInfo.setUserId(lcGridUserId);
+            if (eventInfoVo.getProcessDate() != null) {
+                eventInfo.setHandleTime(String.valueOf(eventInfoVo.getProcessDate().getTime()));
+            }
+            eventInfo.setCaseName(gridData.getGridName().concat(caseTypeName).concat(eventInfoVo.getEventTitle()));
+            String remoteData = submitEventRegister(eventInfo);
+            LcReturnObject lcReturnObject=JSONObject.parseObject(remoteData, LcReturnObject.class);
+            log.info("提交浪潮服务器,接口返回结果为:{}",remoteData);
+            if(lcReturnObject.getSuccess()){
+                log.info("定时向浪潮服务器提交网格事件登记结束");
+                log.info("开始上传附件信息");
+                List<EventResourceVO> picsList = eventInfoVo.getPics();
+                uploadLcApiEventFile(eventInfoVo, picsList, "png");
+                List<EventResourceVO> audiosList = eventInfoVo.getAudios();
+                uploadLcApiEventFile(eventInfoVo, audiosList, "mp3");
+                List<EventResourceVO> videoList = eventInfoVo.getVideos();
+                uploadLcApiEventFile(eventInfoVo, videoList, "mp4");
+                log.info("结束上传附件信息");
+                gridService.updateLcUploadFlag(eventInfoVo.getId());
+            }
+        });
+    }
+
+    private void uploadLcApiEventFile(EventDetailsVO eventInfoVo, List<EventResourceVO> picsList, String type) {
+        picsList.forEach(eventResourceVO -> {
+            EventFile eventFile = new EventFile();
+            eventFile.setDataId(eventInfoVo.getId().toString());
+            eventFile.setFiles(eventResourceVO.getUrl());
+            eventFile.setType(type);
+            eventFile.setModule("event");
+            eventFile.setFileName(eventResourceVO.getResourceName());
+            submitEventRelationFile(eventFile);
+        });
+    }
+
+    /**
+     * 工具方法
+     * inputStream 转 File
+     */
+    public static File inputStreamToFile(InputStream ins, String name) throws Exception {
+        File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
+        log.info(System.getProperty("java.io.tmpdir") + File.separator + name);
+        if (file.exists()) {
+            return file;
+        }
+        OutputStream os = new FileOutputStream(file);
+        int bytesRead;
+        int len = 8192;
+        byte[] buffer = new byte[len];
+        while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
+            os.write(buffer, 0, bytesRead);
+        }
+        os.close();
+        ins.close();
+        return file;
+    }
+}

--
Gitblit v1.7.1