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<Api1102> 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<Object> list = (List<Object>)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 (SH2023Constant.SH_2023_API_CODE_1101.equals(inteId)) {
|
return JSON.toJSONString(data);
|
} else {
|
return JSON.toJSONString(data);
|
}
|
}
|
|
}
|