mitao
2025-05-20 179c4d64313c9b7572778da4aaaf6c6584fe457d
springcloud_k8s_panzhihuazhihuishequ/service_api/src/main/java/com/panzhihua/serviceapi/biz/impl/LcApiServiceImpl.java
@@ -1,8 +1,23 @@
package com.panzhihua.serviceapi.biz.impl;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
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;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -14,7 +29,6 @@
import com.panzhihua.common.model.dtos.api.EventInfo;
import com.panzhihua.common.model.dtos.grid.LcEventVisitingTasksListDTO;
import com.panzhihua.common.model.vos.BcDictionaryItemVO;
import com.panzhihua.common.model.vos.BcDictionaryVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.ComMngPopulationVO;
import com.panzhihua.common.model.vos.grid.EventDetailsVO;
@@ -24,35 +38,26 @@
import com.panzhihua.common.service.grid.GridService;
import com.panzhihua.common.utlis.CopyUtil;
import com.panzhihua.common.utlis.DateUtils;
import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.serviceapi.biz.LcApiService;
import com.panzhihua.serviceapi.model.dto.*;
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;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
/**
 * program 攀枝花智慧社区项目
 * description 第三方浪潮市平台对接接口管理API
 * program 攀枝花智慧社区项目 description 第三方浪潮市平台对接接口管理API
 *
 * @author manailin
 * Date 2021-01-22 15:30
 * @author manailin Date 2021-01-22 15:30
 **/
@Slf4j
@Service
public class LcApiServiceImpl implements LcApiService {
    @Value("${langchao.url}")
    private String host;
    @Resource
    private GridService gridService;
@@ -62,6 +67,27 @@
    @Resource
    private CommunityService communityService;
    /**
     * 工具方法 inputStream 转 File
     */
    private 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;
    }
    /**
     * 从redis获取token
@@ -80,22 +106,25 @@
    public String saveTokenFromRemoteRequest(String name, String password) {
        Boolean authToken = redisTemplate.hasKey(LcApiConstants.LANG_CHAO_TOKEN);
        if (authToken != null) {
            //如果redis存在token,直接返回redis存储的token
            // 如果redis存在token,直接返回redis存储的token
            ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
            return valueOperations.get(LcApiConstants.LANG_CHAO_TOKEN);
        } else {
            //如果第一次请求浪潮的token请求,请求完成后,保存对于的token到数据库中。便于12小时内重复调用
            HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_GET_TOKEN_URL.replace("#username", name).replace("#password", password));
            // 如果第一次请求浪潮的token请求,请求完成后,保存对于的token到数据库中。便于12小时内重复调用
            HttpRequest request = HttpUtil.createPost(
                host +
                LcApiConstants.GRID_GET_TOKEN_URL.replace("#username", name).replace("#password", password));
            HttpResponse result = request.execute();
            ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
            valueOperations.set(LcApiConstants.LANG_CHAO_TOKEN, result.body(), TokenConstant.EXPIRETIME, TimeUnit.MINUTES);
            valueOperations.set(LcApiConstants.LANG_CHAO_TOKEN, result.body(), TokenConstant.EXPIRETIME,
                TimeUnit.MINUTES);
            return result.toString();
        }
    }
    @Override
    public String getAllEventTypeList() {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_EVENT_CATEGORY_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.GRID_EVENT_CATEGORY_URL);
        request.auth(getAuthToken());
        HttpResponse result = request.execute();
        return result.body();
@@ -103,11 +132,11 @@
    @Override
    public String submitEventRegister(EventInfo eventInfo) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_REGIST_EVENT_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.GRID_REGIST_EVENT_URL);
        request.auth(getAuthToken());
        ObjectMapper mapper = new ObjectMapper();
        try {
            //对象转map
            // 对象转map
            Map m = mapper.readValue(mapper.writeValueAsString(eventInfo), Map.class);
            request.form(m);
        } catch (JsonProcessingException e) {
@@ -120,10 +149,10 @@
    @Override
    public R submitEventOrVisitRecordRelationFile(EventFile eventFile) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_EVENT_FILE_UPLOAD_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.GRID_EVENT_FILE_UPLOAD_URL);
        request.auth(getAuthToken());
        try {
            HttpURLConnection httpUrl = (HttpURLConnection) new URL(eventFile.getFiles()).openConnection();
            HttpURLConnection httpUrl = (HttpURLConnection)new URL(eventFile.getFiles()).openConnection();
            httpUrl.connect();
            File file = inputStreamToFile(httpUrl.getInputStream(), eventFile.getFileName());
            request.form("files", file);
@@ -142,7 +171,7 @@
    @Override
    public String getEventInfoById(String eventId) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_APP_EVENT_INFO_DETAIL_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.GRID_APP_EVENT_INFO_DETAIL_URL);
        request.auth(getAuthToken());
        request.form("eventId", eventId);
        HttpResponse result = request.execute();
@@ -150,8 +179,20 @@
    }
    @Override
    public List<LcGridData> getGridListByAreaId(String areaId) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_GET_EVENT_INFO_AREA_ID_URL);
    public List<LcGridData> getGridTreeByAreaId(String areaId) {
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.GRID_GET_EVENT_INFO_AREA_ID_URL);
        request.auth(getAuthToken());
        request.form("areaId", areaId);
        request.form("level", 4);
        HttpResponse result = request.execute();
        return JSONArray.parseArray(result.body(), LcGridData.class);
    }
    @Override
    public List<LcGridData> getGridDataListByAreaId(String areaId) {
        log.info("浪潮请求url");
        log.info(host + LcApiConstants.GRID_GET_GRID_DATA_AREA_ID_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.GRID_GET_GRID_DATA_AREA_ID_URL);
        request.auth(getAuthToken());
        request.form("areaId", areaId);
        HttpResponse result = request.execute();
@@ -159,11 +200,14 @@
    }
    @Override
    public List<GridMemberPageListDTO> getGridMemberListByAreaIdOrName(String areaId,String param) {
        HttpRequest request = HttpUtil.createGet(LcApiConstants.GRID_GET_GETALL_SEARCH_PAGE_URL);
    public List<GridMemberPageListDTO> getGridMemberListByAreaIdOrName(String areaId, String param, Long pageNum,
        Long pageSize) {
        HttpRequest request = HttpUtil.createGet(host + LcApiConstants.GRID_GET_GETALL_SEARCH_PAGE_URL);
        request.auth(getAuthToken());
        request.form("areaId", areaId);
        if(param !=null){
        request.form("limit", pageSize);
        request.form("page", pageNum);
        if (StringUtils.isNotEmpty(param)) {
            request.form("param", param);
        }
        HttpResponse result = request.execute();
@@ -181,7 +225,7 @@
            String lcGridUserId = gridService.getLcUserIdByLocalUserId(eventInfoVo.getGridMemberId().toString());
            eventInfo.setGridId(lcGrid);
            R grid = gridService.eventGridDataDetails(eventInfoVo.getGridId());
            EventGridDataDetailsVO gridData = (EventGridDataDetailsVO) grid.getData();
            EventGridDataDetailsVO gridData = (EventGridDataDetailsVO)grid.getData();
            eventInfo.setGridName(gridData.getGridName());
            eventInfo.setCaseTypeCode(LocalEventToLangChaoEventTypeEnum.getCodeByName(eventInfoVo.getEventType()));
            String caseTypeName = LocalEventToLangChaoEventTypeEnum.getEventNameByCode(eventInfoVo.getEventType());
@@ -200,7 +244,7 @@
            eventInfo.setHandleType("REPORT");
            eventInfo.setHandleDescription(eventInfoVo.getProcessDesc());
            eventInfo.setDataId(eventInfoVo.getId().toString());
            //获取系统网格员映射的浪潮网格员对于的用户ID
            // 获取系统网格员映射的浪潮网格员对于的用户ID
            eventInfo.setUserId(lcGridUserId);
            eventInfo.setHandleTime(DateUtils.getCurrentDateTimeStamp().toString());
            eventInfo.setCaseName(gridData.getGridName().concat(caseTypeName));
@@ -225,7 +269,7 @@
    @Override
    public String getFlowPersonVisitRecordDetailById(String recordId) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.VISIT_RECORD_FLOW_PERSON_DETAIL_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.VISIT_RECORD_FLOW_PERSON_DETAIL_URL);
        request.auth(getAuthToken());
        request.form("id", recordId);
        HttpResponse result = request.execute();
@@ -233,18 +277,21 @@
    }
    @Override
    public String getFlowPersonVisitRecordPage(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO, Long loginUserId) {
        HttpResponse result = getHttpResponse(personVisitRecordQueryDTO, loginUserId, LcApiConstants.VISIT_RECORD_FLOW_PERSON_PAGE_URL, "flowPeopleId");
    public String getFlowPersonVisitRecordPage(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO,
        Long loginUserId) {
        HttpResponse result = getHttpResponse(personVisitRecordQueryDTO, loginUserId,
            host +
            LcApiConstants.VISIT_RECORD_FLOW_PERSON_PAGE_URL, "flowPeopleId");
        return result.body();
    }
    @Override
    public String uploadFlowPersonVisitRecord(LcFlowPersonVisitRecordDTO lcFlowPersonVisitRecordDTO) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.VISIT_RECORD_FLOW_PERSON_SAVE_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.VISIT_RECORD_FLOW_PERSON_SAVE_URL);
        request.auth(getAuthToken());
        ObjectMapper mapper = new ObjectMapper();
        try {
            //对象转map
            // 对象转map
            Map m = mapper.readValue(mapper.writeValueAsString(lcFlowPersonVisitRecordDTO), Map.class);
            request.form(m);
        } catch (JsonProcessingException e) {
@@ -257,11 +304,11 @@
    @Override
    public String uploadKeyPersonVisitRecord(LcKeyPersonVisitRecordDTO lcKeyPersonVisitRecordDTO) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.VISIT_RECORD_KEY_PERSON_SAVE_REMOTE_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.VISIT_RECORD_KEY_PERSON_SAVE_REMOTE_URL);
        request.auth(getAuthToken());
        ObjectMapper mapper = new ObjectMapper();
        try {
            //对象转map
            // 对象转map
            Map m = mapper.readValue(mapper.writeValueAsString(lcKeyPersonVisitRecordDTO), Map.class);
            request.form(m);
        } catch (JsonProcessingException e) {
@@ -274,7 +321,7 @@
    @Override
    public String getKeyPersonVisitRecordDetailById(String recordId) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.VISIT_RECORD_KEY_PERSON_DETAIL_URL);
        HttpRequest request = HttpUtil.createPost(host + LcApiConstants.VISIT_RECORD_KEY_PERSON_DETAIL_URL);
        request.auth(getAuthToken());
        request.form("id", recordId);
        HttpResponse result = request.execute();
@@ -282,8 +329,11 @@
    }
    @Override
    public String getKeyPersonVisitRecordPage(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO, Long loginUserId) {
        HttpResponse result = getHttpResponse(personVisitRecordQueryDTO, loginUserId, LcApiConstants.VISIT_RECORD_KEY_PERSON_PAGE_URL, "keyPersonId");
    public String getKeyPersonVisitRecordPage(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO,
        Long loginUserId) {
        HttpResponse result = getHttpResponse(personVisitRecordQueryDTO, loginUserId,
            host +
            LcApiConstants.VISIT_RECORD_KEY_PERSON_PAGE_URL, "keyPersonId");
        return result.body();
    }
@@ -292,27 +342,32 @@
        List<LcEventVisitingTasksListDTO> unUploadTaskList = gridService.getUnUploadVisitingTask();
        unUploadTaskList.forEach(lcEventVisitingTasksListDTO -> {
            String lcGrid = gridService.getLcGridIdByLocal(lcEventVisitingTasksListDTO.getGridId());
            String lcGridUserId = gridService.getLcUserIdByLocalUserId(lcEventVisitingTasksListDTO.getGridMember().toString());
            R populationDetail = communityService.detailPopulation(lcEventVisitingTasksListDTO.getVisiterId());
            ComMngPopulationVO comMngPopulationVO = (ComMngPopulationVO) populationDetail.getData();
            BcDictionaryItemVO diction = communityService.getByCode(DictionItemConstants.LC_CULTURE_LEVEL, comMngPopulationVO.getCultureLevel().toString());
            ComMngPopulationDTO comMngPopulationDTO = CopyUtil.copyProperties(comMngPopulationVO, ComMngPopulationDTO.class);
            String lcGridUserId =
                gridService.getLcUserIdByLocalUserId(lcEventVisitingTasksListDTO.getGridMember().toString());
            R populationDetail = communityService.detailPopulation(lcEventVisitingTasksListDTO.getVisiterId(), null);
            ComMngPopulationVO comMngPopulationVO = (ComMngPopulationVO)populationDetail.getData();
            BcDictionaryItemVO diction = communityService.getByCode(DictionItemConstants.LC_CULTURE_LEVEL,
                comMngPopulationVO.getCultureLevel().toString());
            ComMngPopulationDTO comMngPopulationDTO =
                CopyUtil.copyProperties(comMngPopulationVO, ComMngPopulationDTO.class);
            if (diction != null) {
                comMngPopulationDTO.setCultureLevel(diction.getDictItemName());
            }
            R grid = gridService.eventGridDataDetails(lcEventVisitingTasksListDTO.getGridId());
            EventGridDataDetailsVO gridData = (EventGridDataDetailsVO) grid.getData();
            EventGridDataDetailsVO gridData = (EventGridDataDetailsVO)grid.getData();
            String[] data = lcEventVisitingTasksListDTO.getHappentLatLng().split(",");
            if (lcEventVisitingTasksListDTO.getVisiterType() != null) {
                log.info("上传数据导重点人口走访记录表");
                LcReturnObject lcReturnObject = requestLcKeyPersonVisitRecord(lcEventVisitingTasksListDTO, lcGrid, lcGridUserId, comMngPopulationDTO, gridData.getGridName(), data);
                LcReturnObject lcReturnObject = requestLcKeyPersonVisitRecord(lcEventVisitingTasksListDTO, lcGrid,
                    lcGridUserId, comMngPopulationDTO, gridData.getGridName(), data);
                if (LcRequestEnum.SUCCESS.getCode().equals(lcReturnObject.getCode())) {
                    uploadVisitRecord(lcEventVisitingTasksListDTO);
                    gridService.updateLcUploadFlagVisitingTask(lcEventVisitingTasksListDTO.getId());
                }
            } else {
                log.info("上传数据导流动人口走访记录表");
                LcReturnObject lcReturnObject = requestLcFlowPersonVisitRecord(lcEventVisitingTasksListDTO, lcGrid, lcGridUserId, comMngPopulationDTO, gridData.getGridName(), data);
                LcReturnObject lcReturnObject = requestLcFlowPersonVisitRecord(lcEventVisitingTasksListDTO, lcGrid,
                    lcGridUserId, comMngPopulationDTO, gridData.getGridName(), data);
                if (LcRequestEnum.SUCCESS.getCode().equals(lcReturnObject.getCode())) {
                    uploadVisitRecord(lcEventVisitingTasksListDTO);
                    gridService.updateLcUploadFlagVisitingTask(lcEventVisitingTasksListDTO.getId());
@@ -332,7 +387,8 @@
        log.info("结束上传走访任务附件文件");
    }
    private void uploadVisitRecordFile(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO, List<EventResourceVO> picsList, String type) {
    private void uploadVisitRecordFile(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO,
        List<EventResourceVO> picsList, String type) {
        picsList.forEach(eventResourceVO -> {
            EventFile eventFile = new EventFile();
            eventFile.setDataId(lcEventVisitingTasksListDTO.getId().toString());
@@ -344,16 +400,16 @@
        });
    }
    @Override
    public LcReturnObject requestLcFlowPersonVisitRecord(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO, String lcGrid, String lcGridUserId, Object populationDetail, String gridName, String[] data) {
        //如果是流动人口走访
    public LcReturnObject requestLcFlowPersonVisitRecord(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO,
        String lcGrid, String lcGridUserId, Object populationDetail, String gridName, String[] data) {
        // 如果是流动人口走访
        LcFlowPersonVisitRecordDTO lcFlowPersonVisitRecordDTO = new LcFlowPersonVisitRecordDTO();
        lcFlowPersonVisitRecordDTO.setId(lcEventVisitingTasksListDTO.getId().toString());
        lcFlowPersonVisitRecordDTO.setUserId(lcGridUserId);
        lcFlowPersonVisitRecordDTO.setGridPersonName(lcEventVisitingTasksListDTO.getGridMemberName());
        lcFlowPersonVisitRecordDTO.setGridPersonPhone(lcEventVisitingTasksListDTO.getGridMenberTele());
        JSONObject population = (JSONObject) JSONObject.toJSON(populationDetail);
        JSONObject population = (JSONObject)JSONObject.toJSON(populationDetail);
        lcFlowPersonVisitRecordDTO.setComMngPopulation(population.toJSONString());
        lcFlowPersonVisitRecordDTO.setGridId(lcGrid);
        lcFlowPersonVisitRecordDTO.setGridName(gridName);
@@ -385,7 +441,8 @@
    }
    @Override
    public LcReturnObject requestLcKeyPersonVisitRecord(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO, String lcGrid, String lcGridUserId, Object populationDetail, String gridName, String[] data) {
    public LcReturnObject requestLcKeyPersonVisitRecord(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO,
        String lcGrid, String lcGridUserId, Object populationDetail, String gridName, String[] data) {
        LcKeyPersonVisitRecordDTO keyPersonVisitRecordDTO = new LcKeyPersonVisitRecordDTO();
        keyPersonVisitRecordDTO.setId(lcEventVisitingTasksListDTO.getId().toString());
        keyPersonVisitRecordDTO.setUserId(lcGridUserId);
@@ -404,7 +461,8 @@
        keyPersonVisitRecordDTO.setAbnormalSituation(null);
        keyPersonVisitRecordDTO.setAbnormalDes(lcEventVisitingTasksListDTO.getTableContentJson());
        keyPersonVisitRecordDTO.setRemark(lcEventVisitingTasksListDTO.getEventDes());
        keyPersonVisitRecordDTO.setType(LcVisitRecordKeyPersonLabelEnum.getCnDescByName(lcEventVisitingTasksListDTO.getVisiterType()));
        keyPersonVisitRecordDTO
            .setType(LcVisitRecordKeyPersonLabelEnum.getCnDescByName(lcEventVisitingTasksListDTO.getVisiterType()));
        log.info("requestLcKeyPersonVisitRecord事件请求数据:{}", JSONObject.toJSONString(keyPersonVisitRecordDTO));
        String remoteData = uploadKeyPersonVisitRecord(keyPersonVisitRecordDTO);
        LcReturnObject lcReturnObject = JSONObject.parseObject(remoteData, LcReturnObject.class);
@@ -412,8 +470,8 @@
        return lcReturnObject;
    }
    private HttpResponse getHttpResponse(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO, Long loginUserId, String requestUrl, String flowPeopleId) {
    private HttpResponse getHttpResponse(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO, Long loginUserId,
        String requestUrl, String flowPeopleId) {
        HttpRequest request = HttpUtil.createPost(requestUrl);
        request.auth(getAuthToken());
        request.form("userId", loginUserId);
@@ -434,27 +492,5 @@
            eventFile.setFileName(eventResourceVO.getResourceName());
            submitEventOrVisitRecordRelationFile(eventFile);
        });
    }
    /**
     * 工具方法
     * inputStream 转 File
     */
    private 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;
    }
}