package com.fzzy.push.whhpjl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; 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.WhjlPullReqDto; import com.fzzy.push.whhpjl.dto.WhjlPullRespDto; 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.codehaus.jackson.map.ObjectMapper; 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)); //操作类型 JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(data)); String czbz = jsonObject.getString("czbz"); if("u".equals(czbz)){ czbz = "update"; }else if("d".equals(czbz)){ czbz = "delete"; }else { czbz = "insert"; } reqData.setOperator(czbz); 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_YGXX; case "1107": return WhjlConstant.API_CODE_AJXX; case "1108": return WhjlConstant.API_CODE_HWXX; case "1109": return WhjlConstant.API_CODE_CCSSDZDA; case "1110": return WhjlConstant.API_CODE_CCSSWHJL; case "1111": return WhjlConstant.API_CODE_CCSSBFJL; case "1112": return WhjlConstant.API_CODE_CCSBXX; case "1113": return WhjlConstant.API_CODE_CCSBWHJL; case "1114": return WhjlConstant.API_CODE_CCSBWXJL; case "1115": return WhjlConstant.API_CODE_CCSBBFJL; case "11145": 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_DDXX; case "1206": return WhjlConstant.API_CODE_HTXX; case "1207": return WhjlConstant.API_CODE_KCTZ; case "1208": return WhjlConstant.API_CODE_KCTZPCXX; case "1209": return WhjlConstant.API_CODE_KCTZCRJL; case "1210": return WhjlConstant.API_CODE_KCPDJL; case "1211": return WhjlConstant.API_CODE_KNZCJL; case "1212": return WhjlConstant.API_CODE_CRKJL; case "1213": return WhjlConstant.API_CODE_CRKJSJL; case "1214": return WhjlConstant.API_CODE_ZJJG; case "1215": return WhjlConstant.API_CODE_YPDJXX; case "1216": return WhjlConstant.API_CODE_ZJBG; case "1217": return WhjlConstant.API_CODE_BZQYJGZ; case "1218": return WhjlConstant.API_CODE_BZQYJJL; case "1219": return WhjlConstant.API_CODE_WZKCYJGZ; case "1220": return WhjlConstant.API_CODE_WZKCYJJL; case "1221": return WhjlConstant.API_CODE_CCJH; case "1301": return WhjlConstant.API_CODE_WSDJCJL; case "1302": return WhjlConstant.API_CODE_YSHJJCJL; case "1303": return WhjlConstant.API_CODE_WSDGJJL; case "1304": return WhjlConstant.API_CODE_NHJL; case "1305": return WhjlConstant.API_CODE_DDPSRW; case "1306": return WhjlConstant.API_CODE_BDWZXX; case "1307": return WhjlConstant.API_CODE_YSRWBDXX; case "1308": return WhjlConstant.API_CODE_SPYJGJ; case "1309": return WhjlConstant.API_CODE_STSJ; case "1401": return WhjlConstant.API_CODE_SCZLL; case "1402": return WhjlConstant.API_CODE_KGPJ; case "1403": return WhjlConstant.API_CODE_DYQY; case "1404": return WhjlConstant.API_CODE_DYSP; case "1405": return WhjlConstant.API_CODE_DYXY; case "1406": return WhjlConstant.API_CODE_DYXYBG; case "1407": return WhjlConstant.API_CODE_DYXYZXMX; case "1408": return WhjlConstant.API_CODE_DYNL; case "1409": return WhjlConstant.API_CODE_DYYJ; case "1410": return WhjlConstant.API_CODE_SCJGDD; case "1411": return WhjlConstant.API_CODE_CLXX; case "1412": return WhjlConstant.API_CODE_CLYSHJ; case "1413": return WhjlConstant.API_CODE_YSLX; case "1414": return WhjlConstant.API_CODE_BDZDSB; case "2001": return WhjlConstant.API_CODE_SHARE_SBFL; case "2002": return WhjlConstant.API_CODE_SHARE_CPFL; case "2003": return WhjlConstant.API_CODE_SHARE_JLDW; case "2004": return WhjlConstant.API_CODE_SHARE_JLGLJG; case "2005": return WhjlConstant.API_CODE_SHARE_JLGYSXX; case "2006": return WhjlConstant.API_CODE_SHARE_JLPPXX; case "2007": return WhjlConstant.API_CODE_SHARE_JLCPXX; case "2008": return WhjlConstant.API_CODE_SHARE_JLCCJH; case "2009": return WhjlConstant.API_CODE_SHARE_HTMB; case "2010": return WhjlConstant.API_CODE_SHARE_ZLJCBZ; case "2011": return WhjlConstant.API_CODE_SHARE_ZLJCXM; case "2012": return WhjlConstant.API_CODE_SHARE_YJFAXX; default: return inteId; } } @Override public ResponseDto pullData(ApiParam param, ApiConfs conf) { 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); inteId = getInteId(inteId); if (StringUtils.isEmpty(inteId)) { ResponseDto responseDto = new ResponseDto(99, "没有获取到接口"); apiLog.setStatus(99); apiLog.setResult("没有获取到接口"); apiLogRep.save(apiLog); return responseDto; } if (conf == null) { ResponseDto responseDto = new ResponseDto(99, "没有获取到上传配置"); apiLog.setStatus(99); apiLog.setResult("没有获取到上传配置"); apiLogRep.save(apiLog); return responseDto; } //封装数据 WhjlPullReqDto reqData = new WhjlPullReqDto(); //报文标识ID reqData.setId(ContextUtil.getUUID()); //身份ID reqData.setUid(conf.getUserName()); //应用码 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)); String url = conf.getApiUrl().replace("secure", "share"); WhjlPullRespDto responseDto = whjl2023HttpClientUtil.postPullData(url + inteId, reqData); apiLog.setStatus(responseDto.getCode() == 200 ? 0 : responseDto.getCode()); apiLog.setKqdm(kqdm); apiLog.setUploadTime(new Date()); apiLogRep.save(apiLog); ResponseDto resd = new ResponseDto(); resd.setSuccess(responseDto.getCode() == 200 ? 0 : responseDto.getCode()); resd.setData(responseDto.getData()); return resd; } catch (Exception e) { log.error(e.getMessage(), e); return new ResponseDto(99, e.getMessage()); } } }