package com.fzzy.push.whhpjl; 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.*; 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.*; import com.fzzy.push.whhpjl.dto.WhjlReqDto; import com.fzzy.push.whhpjl.dto.WhjlRespDto; import com.fzzy.otherview.whhpjl.WhjlConstant; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /** * 武汉军粮省平台-上传数据服务类 * * @author czt * @date 2023/08/04 */ @Slf4j @Data @Service public class WhjlApiRemoteService implements ApiRemoteService { @Autowired private RedisUtil redisUtil; @Autowired private ApiCommonService apiCommonService; @Autowired private ApiTriggerService apiTriggerService; @Autowired private ApiLogRep apiLogRep; @Autowired private Whjl2023HttpClientUtil whjl2023HttpClientUtil; @Override public String getProtocol() { return PushProtocol.SB_WHJL_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(data); log.info("接口数据信息=" + jsonData); inteId = getInteId(inteId); 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; } //封装推送数据 WhjlReqDto reqData = new WhjlReqDto(); //报文标识ID reqData.setId(ContextUtil.getUUID()); //身份ID reqData.setUid(conf.getUserName()); //获取指令id String key = RedisConst.buildKey(RedisConst.KYE_ORDER, conf.getKqdm()); String orderId = (String)redisUtil.get(key); if(StringUtils.isEmpty(orderId)){ orderId = reqData.getId(); } reqData.setOrderid(orderId); //应用码 reqData.setAppcode(conf.getAppCode()); //时间戳 reqData.setTimestamp(Long.valueOf(ContextUtil.getCurTimeMillis())); //身份签名,对应用码_授权码_站点编码_报文ID_时间戳进行MD5算法签名 String accessToken = reqData.getAppcode() +"_" + conf.getPassword() +"_" + reqData.getUid() + "_" + reqData.getId() + "_" + reqData.getTimestamp(); log.info("身份签名:" + accessToken); reqData.setAccesstoken(MyMD5Util.encrypt(accessToken)); //数据总条数 reqData.setDatalength(1); //数据主体,进行SM4加密 reqData.setData(SM4Util.encryptEcb(conf.getPublicKey(), jsonData)); //摘要,数据主体的MD5值 reqData.setDigest(MyMD5Util.encrypt(jsonData)); //操作类型 reqData.setOperator("insert"); WhjlRespDto responseDto = whjl2023HttpClientUtil.postPushData(conf.getApiUrl() + inteId, reqData); 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()); } } /** * 调整数据封装成list,获取json数据 * * @param data * @return * @throws Exception */ private String getJsonData(Object data) { List list = new ArrayList<>(); list.add(data); return JSON.toJSONString(list); } private String getInteId(String inteId) { switch (inteId) { case "1101": return WhjlConstant.API_CODE_JLQYXX; case "1102": return WhjlConstant.API_CODE_JLZDXX; case "1103": return WhjlConstant.API_CODE_JLRYXX; case "1104": return WhjlConstant.API_CODE_FXLYD; case "1105": return WhjlConstant.API_CODE_CFXX; case "1106": return WhjlConstant.API_CODE_AJXX; case "1107": return WhjlConstant.API_CODE_HWXX; case "1108": return WhjlConstant.API_CODE_CCSSDZDA; case "1109": return WhjlConstant.API_CODE_CCSSWHJL; case "1110": return WhjlConstant.API_CODE_CCSSBFJL; case "1111": return WhjlConstant.API_CODE_CCSBXX; case "1112": return WhjlConstant.API_CODE_CCSBWHJL; case "1113": return WhjlConstant.API_CODE_CCSBWXJL; case "1114": return WhjlConstant.API_CODE_CCSBBFJL; case "1201": return WhjlConstant.API_CODE_FSGYSXX; case "1202": return WhjlConstant.API_CODE_FSPPXX; case "1203": return WhjlConstant.API_CODE_FSCPXX; case "1204": return WhjlConstant.API_CODE_KHXX; case "1205": return WhjlConstant.API_CODE_CCJL; case "1206": return WhjlConstant.API_CODE_DDXX; case "1207": return WhjlConstant.API_CODE_HTXX; case "1208": return WhjlConstant.API_CODE_KCTZ; case "1209": return WhjlConstant.API_CODE_KCTZPCXX; case "1210": return WhjlConstant.API_CODE_KCTZCRJL; case "1211": return WhjlConstant.API_CODE_KCPDJL; case "1212": return WhjlConstant.API_CODE_KNZCJL; case "1213": return WhjlConstant.API_CODE_CRKJL; case "1301": return WhjlConstant.API_CODE_ZJJG; case "1302": return WhjlConstant.API_CODE_ZJBG; case "1303": return WhjlConstant.API_CODE_LQJCJL; case "1304": return WhjlConstant.API_CODE_NHJL; case "1401": return WhjlConstant.API_CODE_DYQY; case "1402": return WhjlConstant.API_CODE_DYXY; case "1403": return WhjlConstant.API_CODE_DYNL; case "1404": return WhjlConstant.API_CODE_DYYJ; case "1405": return WhjlConstant.API_CODE_SCJGDD; case "1406": return WhjlConstant.API_CODE_YSLX; case "1407": return WhjlConstant.API_CODE_YJDD; default: return inteId; } } }