package com.fzzy.push.sh2023; import com.alibaba.fastjson.JSON; import com.fzzy.api.data.ApiParam; import com.fzzy.api.data.PushProtocol; import com.fzzy.api.dto.ResponseDto; import com.fzzy.api.entity.Api1102; import com.fzzy.api.entity.ApiConfs; import com.fzzy.api.entity.ApiLog; import com.fzzy.api.service.ApiCommonService; import com.fzzy.api.service.ApiRemoteService; import com.fzzy.api.service.ApiTriggerService; import com.fzzy.api.utils.*; import com.fzzy.api.view.repository.Api1102Rep; import com.fzzy.api.view.repository.ApiLogRep; import com.fzzy.push.sh2023.dto.SH2023ReqDto; import com.fzzy.push.sh2023.dto.SH2023RespDto; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; /** * 上海市平台2023版-上传数据服务类 * * @author czt * @date 2023/08/17 */ @Slf4j @Data @Service public class SH2023ApiRemoteService implements ApiRemoteService { @Autowired private RedisUtil redisUtil; @Autowired private ApiCommonService apiCommonService; @Autowired private ApiTriggerService apiTriggerService; @Autowired private ApiLogRep apiLogRep; @Autowired private Api1102Rep api1102Rep; @Override public String getProtocol() { return PushProtocol.SB_SH_2023.getCode(); } @Override public ResponseDto pushData(ApiParam param, Object data) { return pushData(param, null, data); } @Override public ResponseDto pushData(ApiParam param, ApiConfs conf, Object data) { String inteId = param.getInteId(); String kqdm = param.getKqdm(); try { if (null == conf) { conf = apiCommonService.getConf(kqdm); } //添加日志 ApiLog apiLog = new ApiLog(); apiLog.setId(ContextUtil.getUUID()); apiLog.setInteId(inteId); String jsonData = getJsonData(inteId, data); log.info("接口数据信息=" + jsonData); if (StringUtils.isEmpty(inteId)) { ResponseDto responseDto = new ResponseDto(99, "没有获取到接口"); apiLog.setStatus(99); apiLog.setResult("没有获取到接口"); apiLogRep.save(apiLog); return responseDto; } apiLog.setData(jsonData); apiLog.setKqdm(kqdm); apiLog.setUploadTime(new Date()); if (conf == null) { ResponseDto responseDto = new ResponseDto(99, "没有获取到上传配置"); apiLog.setStatus(99); apiLog.setResult("没有获取到上传配置"); apiLogRep.save(apiLog); return responseDto; } //封装推送数据 SH2023ReqDto reqData = new SH2023ReqDto(); reqData.setId(ContextUtil.getUUID()); //获取身份ID,即行政区划码 List api1102List = api1102Rep.findPushData(conf.getKqdm()); if(null == api1102List || api1102List.isEmpty()){ ResponseDto responseDto = new ResponseDto(99, "没有获取到身份ID"); apiLog.setStatus(99); apiLog.setResult("没有获取到身份ID"); apiLogRep.save(apiLog); return responseDto; } reqData.setUid(api1102List.get(0).getXzqhdm()); //指令id reqData.setOrderid(param.getOrderid()); //身份签名,对地区行政区划代码_当天日期进行MD5算法签名 reqData.setAccess_token(RSAUtils.encryptData(reqData.getUid() + "_" + DateFormatUtils.format(new Date(), "yyyy-MM-dd"),conf.getPublicKey())); //数据总条数 List list = (List)data; reqData.setDatalength(list.size()); //数据进行SM4加密 reqData.setData(jsonData); //摘要,数据主体的MD5值 reqData.setDigst(MyMD5Util.encrypt(jsonData)); SH2023RespDto responseDto = SH2023HttpClientUtil.postPushData(conf.getApiUrl() + inteId, reqData, conf); apiLog.setStatus(responseDto.getCode() == 200 ? 0 : responseDto.getCode()); apiLog.setResult(responseDto.getResult()); apiLogRep.save(apiLog); ResponseDto resd = new ResponseDto(); resd.setSuccess(responseDto.getCode() == 200 ? 0 : responseDto.getCode()); resd.setMsg(responseDto.getResult()); return resd; } catch (Exception e) { log.error(e.getMessage(), e); return new ResponseDto(99, e.getMessage()); } } /** * 调整数据封装,获取json数据 * * @param inteId * @param data * @return * @throws Exception */ private String getJsonData(String inteId, Object data) { //具体根据接口进行封装 if ("1101".equals(inteId)) { return JSON.toJSONString(data); } else { return JSON.toJSONString(data); } } }