manailin
2021-06-27 c3a5a9ae94e5604160f0ba4ac6148934db84f26b
springcloud_k8s_panzhihuazhihuishequ/service_api/src/main/java/com/panzhihua/serviceapi/biz/impl/LcApiServiceImpl.java
@@ -7,20 +7,27 @@
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.panzhihua.common.api.LangchaoApiConstants;
import com.panzhihua.common.api.LcApiConstants;
import com.panzhihua.common.api.LcRequestEnum;
import com.panzhihua.common.api.LcReturnObject;
import com.panzhihua.common.api.LcVisitRecordKeyPersonLabelEnum;
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.dtos.grid.LcEventVisitingTasksListDTO;
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.community.CommunityService;
import com.panzhihua.common.service.grid.GridService;
import com.panzhihua.common.utlis.DateUtils;
import com.panzhihua.serviceapi.biz.LcApiService;
import com.panzhihua.serviceapi.model.dto.LcFlowPersonVisitRecordDTO;
import com.panzhihua.serviceapi.model.dto.LcGridData;
import com.panzhihua.serviceapi.model.dto.LcKeyPersonVisitRecordDTO;
import com.panzhihua.serviceapi.model.dto.LcKeyPersonVisitRecordQueryDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
@@ -55,6 +62,9 @@
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Resource
    private CommunityService communityService;
    /**
     * 从redis获取token
     *
@@ -62,31 +72,32 @@
     */
    private String getAuthToken() {
        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
        if (valueOperations.get(LangchaoApiConstants.LANG_CHAO_TOKEN) == null) {
            saveTokenFromRemoteRequest("18080799023", "123456");
        if (valueOperations.get(LcApiConstants.LANG_CHAO_TOKEN) == null) {
            saveTokenFromRemoteRequest(LcApiConstants.LC_UPLOAD_NAME, LcApiConstants.LC_UPLOAD_PASSWORD);
        }
        return valueOperations.get(LangchaoApiConstants.LANG_CHAO_TOKEN);
        return valueOperations.get(LcApiConstants.LANG_CHAO_TOKEN);
    }
    @Override
    public String saveTokenFromRemoteRequest(String name, String password) {
        if (redisTemplate.hasKey(LangchaoApiConstants.LANG_CHAO_TOKEN)) {
        Boolean authToken = redisTemplate.hasKey(LcApiConstants.LANG_CHAO_TOKEN);
        if (authToken != null) {
            //如果redis存在token,直接返回redis存储的token
            ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
            return valueOperations.get(LangchaoApiConstants.LANG_CHAO_TOKEN);
            return valueOperations.get(LcApiConstants.LANG_CHAO_TOKEN);
        } else {
            //如果第一次请求浪潮的token请求,请求完成后,保存对于的token到数据库中。便于12小时内重复调用
            HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_GET_TOKEN_URL.replace("#username", name).replace("#password", password));
            HttpRequest request = HttpUtil.createPost(LcApiConstants.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);
            valueOperations.set(LcApiConstants.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);
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_EVENT_CATEGORY_URL);
        request.auth(getAuthToken());
        HttpResponse result = request.execute();
        return result.body();
@@ -94,7 +105,7 @@
    @Override
    public String submitEventRegister(EventInfo eventInfo) {
        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_REGIST_EVENT_URL);
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_REGIST_EVENT_URL);
        request.auth(getAuthToken());
        ObjectMapper mapper = new ObjectMapper();
        try {
@@ -110,8 +121,8 @@
    }
    @Override
    public R submitEventRelationFile(EventFile eventFile) {
        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_EVENT_FILE_UPLOAD_URL);
    public R submitEventOrVisitRecordRelationFile(EventFile eventFile) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_EVENT_FILE_UPLOAD_URL);
        request.auth(getAuthToken());
        try {
            HttpURLConnection httpUrl = (HttpURLConnection) new URL(eventFile.getFiles()).openConnection();
@@ -133,7 +144,7 @@
    @Override
    public String getEventInfoById(String eventId) {
        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_APP_EVENT_INFO_DETAIL_URL);
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_APP_EVENT_INFO_DETAIL_URL);
        request.auth(getAuthToken());
        request.form("eventId", eventId);
        HttpResponse result = request.execute();
@@ -142,7 +153,7 @@
    @Override
    public List<LcGridData> getGridListByAreaId(String areaId) {
        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_GET_EVENT_INFO_AREA_ID_URL);
        HttpRequest request = HttpUtil.createPost(LcApiConstants.GRID_GET_EVENT_INFO_AREA_ID_URL);
        request.auth(getAuthToken());
        request.form("areaId", areaId);
        HttpResponse result = request.execute();
@@ -151,7 +162,7 @@
    @Override
    public String getGridMemberListByAreaIdOrName(String areaId) {
        HttpRequest request = HttpUtil.createPost(LangchaoApiConstants.GRID_GET_GETALL_SEARCH_PAGE_URL);
        HttpRequest request = HttpUtil.createGet(LcApiConstants.GRID_GET_GETALL_SEARCH_PAGE_URL);
        request.auth(getAuthToken());
        request.form("areaId", areaId);
        HttpResponse result = request.execute();
@@ -210,6 +221,201 @@
        });
    }
    @Override
    public String getFlowPersonVisitRecordDetailById(String recordId) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.VISIT_RECORD_FLOW_PERSON_DETAIL_URL);
        request.auth(getAuthToken());
        request.form("id", recordId);
        HttpResponse result = request.execute();
        return result.body();
    }
    @Override
    public String getFlowPersonVisitRecordPage(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO, Long loginUserId) {
        HttpResponse result = getHttpResponse(personVisitRecordQueryDTO, loginUserId, 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);
        request.auth(getAuthToken());
        ObjectMapper mapper = new ObjectMapper();
        try {
            //对象转map
            Map m = mapper.readValue(mapper.writeValueAsString(lcFlowPersonVisitRecordDTO), Map.class);
            request.form(m);
        } catch (JsonProcessingException e) {
            log.info("方法uploadFlowPersonVisitRecord发生错误:{}", e.getMessage());
        }
        HttpResponse result = request.execute();
        log.info("submit上传浪潮事件信息:{}", result.body());
        return result.body();
    }
    @Override
    public String uploadKeyPersonVisitRecord(LcKeyPersonVisitRecordDTO lcKeyPersonVisitRecordDTO) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.VISIT_RECORD_KEY_PERSON_SAVE_REMOTE_URL);
        request.auth(getAuthToken());
        ObjectMapper mapper = new ObjectMapper();
        try {
            //对象转map
            Map m = mapper.readValue(mapper.writeValueAsString(lcKeyPersonVisitRecordDTO), Map.class);
            request.form(m);
        } catch (JsonProcessingException e) {
            log.info("方法uploadKeyPersonVisitRecord发生错误:{}", e.getMessage());
        }
        HttpResponse result = request.execute();
        log.info("submit上传浪潮事件信息:{}", result.body());
        return result.body();
    }
    @Override
    public String getKeyPersonVisitRecordDetailById(String recordId) {
        HttpRequest request = HttpUtil.createPost(LcApiConstants.VISIT_RECORD_KEY_PERSON_DETAIL_URL);
        request.auth(getAuthToken());
        request.form("id", recordId);
        HttpResponse result = request.execute();
        return result.body();
    }
    @Override
    public String getKeyPersonVisitRecordPage(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO, Long loginUserId) {
        HttpResponse result = getHttpResponse(personVisitRecordQueryDTO, loginUserId, LcApiConstants.VISIT_RECORD_KEY_PERSON_PAGE_URL, "keyPersonId");
        return result.body();
    }
    @Override
    public void automationUploadVisitRecord() {
        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());
            R grid = gridService.eventGridDataDetails(lcEventVisitingTasksListDTO.getGridId());
            EventGridDataDetailsVO gridData = (EventGridDataDetailsVO) grid.getData();
            String[] data = lcEventVisitingTasksListDTO.getHappentLatLng().split(",");
            if (lcEventVisitingTasksListDTO.getVisiterType() != null) {
                log.info("上传数据导重点人口走访记录表");
                LcReturnObject lcReturnObject = requestLcKeyPersonVisitRecord(lcEventVisitingTasksListDTO, lcGrid, lcGridUserId, populationDetail.getData(), 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, populationDetail.getData(), gridData.getGridName(), data);
                if (LcRequestEnum.SUCCESS.getCode().equals(lcReturnObject.getCode())) {
                    uploadVisitRecord(lcEventVisitingTasksListDTO);
                    gridService.updateLcUploadFlagVisitingTask(lcEventVisitingTasksListDTO.getId());
                }
            }
        });
    }
    private void uploadVisitRecord(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO) {
        log.info("开始上传走访任务附件文件");
        List<EventResourceVO> picsList = lcEventVisitingTasksListDTO.getPics();
        uploadVisitRecordFile(lcEventVisitingTasksListDTO, picsList, "IMAGE");
        List<EventResourceVO> audiosList = lcEventVisitingTasksListDTO.getAudios();
        uploadVisitRecordFile(lcEventVisitingTasksListDTO, audiosList, "AUDIO");
        List<EventResourceVO> videoList = lcEventVisitingTasksListDTO.getVideos();
        uploadVisitRecordFile(lcEventVisitingTasksListDTO, videoList, "VIDEO");
        log.info("结束上传走访任务附件文件");
    }
    private void uploadVisitRecordFile(LcEventVisitingTasksListDTO lcEventVisitingTasksListDTO, List<EventResourceVO> picsList, String type) {
        picsList.forEach(eventResourceVO -> {
            EventFile eventFile = new EventFile();
            eventFile.setDataId(lcEventVisitingTasksListDTO.getId().toString());
            eventFile.setFiles(eventResourceVO.getUrl());
            eventFile.setType(type);
            eventFile.setModule("key_person");
            eventFile.setFileName(eventResourceVO.getResourceName());
            submitEventOrVisitRecordRelationFile(eventFile);
        });
    }
    @Override
    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);
        lcFlowPersonVisitRecordDTO.setComMngPopulation(population.toJSONString());
        lcFlowPersonVisitRecordDTO.setGridId(lcGrid);
        lcFlowPersonVisitRecordDTO.setGridName(gridName);
        lcFlowPersonVisitRecordDTO.setWorkWithPoliceMan("0");
        lcFlowPersonVisitRecordDTO.setPoliceManName(null);
        lcFlowPersonVisitRecordDTO.setPoliceManPhone(null);
        lcFlowPersonVisitRecordDTO.setPoliceManWorkContent(null);
        lcFlowPersonVisitRecordDTO.setVisitTime(lcEventVisitingTasksListDTO.getHappenTime().getTime());
        lcFlowPersonVisitRecordDTO.setVisitAddress(lcEventVisitingTasksListDTO.getHappentAddress());
        lcFlowPersonVisitRecordDTO.setLongitude(Double.valueOf(data[0]));
        lcFlowPersonVisitRecordDTO.setLatitude(Double.valueOf(data[1]));
        lcFlowPersonVisitRecordDTO.setHouseType(null);
        lcFlowPersonVisitRecordDTO.setHouseAddress(lcEventVisitingTasksListDTO.getHappentAddress());
        lcFlowPersonVisitRecordDTO.setIsReportInfo(null);
        lcFlowPersonVisitRecordDTO.setHaveCertificate("0");
        lcFlowPersonVisitRecordDTO.setCertificateType("身份证");
        lcFlowPersonVisitRecordDTO.setCertificateNumber(population.getString("cardNo"));
        lcFlowPersonVisitRecordDTO.setCertificateDeadTime("0");
        lcFlowPersonVisitRecordDTO.setIsPropaganda("1");
        lcFlowPersonVisitRecordDTO.setIsCheckReview("1");
        lcFlowPersonVisitRecordDTO.setIsAbnormal(lcEventVisitingTasksListDTO.getException().toString());
        lcFlowPersonVisitRecordDTO.setAbnormalSituation(lcEventVisitingTasksListDTO.getTableContentJson());
        lcFlowPersonVisitRecordDTO.setRemark(lcEventVisitingTasksListDTO.getEventDes());
        log.info("事件请求数据:{}", JSONObject.toJSONString(lcFlowPersonVisitRecordDTO));
        String flowPersonData = uploadFlowPersonVisitRecord(lcFlowPersonVisitRecordDTO);
        LcReturnObject lcReturnObject = JSONObject.parseObject(flowPersonData, LcReturnObject.class);
        log.info("提交浪潮服务器,接口返回结果为:{}", lcReturnObject);
        return lcReturnObject;
    }
    @Override
    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);
        keyPersonVisitRecordDTO.setGridPersonName(lcEventVisitingTasksListDTO.getGridMemberName());
        keyPersonVisitRecordDTO.setGridPersonPhone(lcEventVisitingTasksListDTO.getGridMenberTele());
        keyPersonVisitRecordDTO.setComMngPopulation(JSONObject.toJSONString(populationDetail));
        keyPersonVisitRecordDTO.setGridId(lcGrid);
        keyPersonVisitRecordDTO.setGridName(gridName);
        keyPersonVisitRecordDTO.setVisitTime(lcEventVisitingTasksListDTO.getHappenTime().getTime());
        keyPersonVisitRecordDTO.setVisitAddress(lcEventVisitingTasksListDTO.getHappentAddress());
        keyPersonVisitRecordDTO.setLongitude(Double.valueOf(data[0]));
        keyPersonVisitRecordDTO.setLatitude(Double.valueOf(data[1]));
        keyPersonVisitRecordDTO.setFamilyMemberContact(lcEventVisitingTasksListDTO.getFamilyPhone());
        keyPersonVisitRecordDTO.setHowLive(lcEventVisitingTasksListDTO.getFamilySource());
        keyPersonVisitRecordDTO.setIsAbnormal(lcEventVisitingTasksListDTO.getException().toString());
        keyPersonVisitRecordDTO.setAbnormalSituation(null);
        keyPersonVisitRecordDTO.setAbnormalDes(lcEventVisitingTasksListDTO.getTableContentJson());
        keyPersonVisitRecordDTO.setRemark(lcEventVisitingTasksListDTO.getEventDes());
        keyPersonVisitRecordDTO.setType(LcVisitRecordKeyPersonLabelEnum.getCnDescByName(lcEventVisitingTasksListDTO.getVisiterType()));
        log.info("事件请求数据:{}", JSONObject.toJSONString(keyPersonVisitRecordDTO));
        String remoteData = uploadKeyPersonVisitRecord(keyPersonVisitRecordDTO);
        LcReturnObject lcReturnObject = JSONObject.parseObject(remoteData, LcReturnObject.class);
        log.info("提交浪潮服务器,接口返回结果为:{}", remoteData);
        return lcReturnObject;
    }
    private HttpResponse getHttpResponse(LcKeyPersonVisitRecordQueryDTO personVisitRecordQueryDTO, Long loginUserId, String requestUrl, String flowPeopleId) {
        HttpRequest request = HttpUtil.createPost(requestUrl);
        request.auth(getAuthToken());
        request.form("userId", loginUserId);
        request.form("gridId", personVisitRecordQueryDTO.getGridId());
        request.form("limit", personVisitRecordQueryDTO.getLimit());
        request.form("startNumber", personVisitRecordQueryDTO.getStartNumber());
        request.form(flowPeopleId, personVisitRecordQueryDTO.getPersonId());
        return request.execute();
    }
    private void uploadLcApiEventFile(EventDetailsVO eventInfoVo, List<EventResourceVO> picsList, String type) {
        picsList.forEach(eventResourceVO -> {
            EventFile eventFile = new EventFile();
@@ -218,7 +424,7 @@
            eventFile.setType(type);
            eventFile.setModule("event");
            eventFile.setFileName(eventResourceVO.getResourceName());
            submitEventRelationFile(eventFile);
            submitEventOrVisitRecordRelationFile(eventFile);
        });
    }
@@ -226,7 +432,7 @@
     * 工具方法
     * inputStream 转 File
     */
    public static File inputStreamToFile(InputStream ins, String name) throws Exception {
    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()) {