FenginClient 调swagger接口

本文介绍了如何使用FenginClient调用Swagger定义的接口进行数据同步。首先,讲解了Swagger接口所需的输入数据和预期的返回信息。接着,展示了在FenginClient中配置接口URL和参数的步骤。然后,定义了一个每10秒执行一次的定时任务,用于轮询同步出库数据到生产供应。此外,还详细说明了获取和管理token的定时任务,以及如何利用MD5加密方法处理密码安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 swagger .要传的数据!
在这里插入图片描述
二 要返回的数据信息
在这里插入图片描述
三 fenginClient 配置接口url 以及 参数
在这里插入图片描述
四 定义定时任务 10秒一次定时轮询同步
/**

  • 出库数据同步到生产供应

*/
@Component
@EnableScheduling
public class SynProductDetailTask {
private static final Logger logger = LoggerFactory
.getLogger(SynProductDetailTask.class);
@Autowired
private ProductDetailFeignClient productDetailFeignClient;
@Autowired
private ProductDetailService productDetailService;
@Autowired
private StockBillDetailArgs stockBillDetailArgs;
@Autowired
private TokenTask tokenTask;

// 每10s执行一次
@Scheduled(fixedDelay = Constant.uploadTime)
public void synProductDetail() {
	logger.info("调出库码数据上传接口开始执行... ...start");
	long startTime = System.currentTimeMillis();
	String token="";
	try {
		// 查询所有未同步的数据
		Map<String, Object> columnMap = new HashMap<>();
		columnMap.put("_status", 0);
		List<ProductDetail> productDetailList = productDetailService
				.selectByMap(columnMap);
		if (null != productDetailList && productDetailList.size() > 0) {
			// 遍历所有未同步的数据
			for (int i = 0; i < productDetailList.size(); i++) {
				// 将位同步的数据组装成生产供应需要的数据格式
				StockBillDetailArgs stockBillDetailArgs = new StockBillDetailArgs();
				stockBillDetailArgs.setCreateTime(productDetailList.get(i)
						.getCreateTime());// 创建时间
				stockBillDetailArgs.setFactoryCode(productDetailList.get(i)
						.getFactoryCode());// 工厂CODE
				/*
				 * stockBillDetailArgs.setCode(productDetailList.get(i));//单据号
				 * stockBillDetailArgs
				 * .setCourierCompany(productDetailList.get(i));//快递公司
				 * stockBillDetailArgs
				 * .setFactoryId(productDetailList.get(i));//工厂code
				 * stockBillDetailArgs.setId(productDetailList.get(i));//id
				 * stockBillDetailArgs
				 * .setOperationTime(productDetailList.get(i));
				 * stockBillDetailArgs
				 * .setRecordId(productDetailList.get(i));
				 * stockBillDetailArgs
				 * .setRelativeBill(productDetailList.get(i));
				 * stockBillDetailArgs
				 * .setRemark(productDetailList.get(i).get);//备注
				 * stockBillDetailArgs
				 * .setSource(productDetailList.get(i));//出库方
				 * stockBillDetailArgs
				 * .setSourceNumber(productDetailList.get(i));//出库方编码
				 * stockBillDetailArgs
				 * .setSourceType(productDetailList.get(i));//出库方类型
				 */stockBillDetailArgs.setSourceCode(productDetailList.get(
						i).getSourceCode());// 第三方单号
				stockBillDetailArgs.setStatus(productDetailList.get(i)
						.getStatus());// 状态
				stockBillDetailArgs
						.setStockProductDetailList(productDetailList.get(i)
								.getStockProductDetaillist());// 出入库信息
				// 获取token
				if (StringUtils.isNotEmpty(System
						.getProperty(Constant.TOKEN_KEY))) {
					 token=System.getProperty(Constant.TOKEN_KEY);
				}else{
					 token=tokenTask.getToken();
				}
				// 调用生产供应接口
				logger.info("调用生产供应请求token为:"+token+"参数为:"+JSONObject.toJSONString(stockBillDetailArgs));
				ReponseUpload ResultProductModel = productDetailFeignClient
						.getUpload(token,stockBillDetailArgs);
				logger.info("调用生产供应返回信息为:"+JSONObject.toJSONString(ResultProductModel));
				if (ResultProductModel.getCode().equals(
						HttpCode.SUCCESS_CODE)) {
					//将该单据状态改成已同步状态  1为已经同步
					ProductDetail  productDetail=productDetailList.get(i);
					productDetail.setStatus(1);
					int count=productDetailService.updateById(productDetail);
					if(count>0){
						System.out.println("更新同步生产供应数据为已同步成功");
					}else{
						System.out.println("更新同步生产供应数据为已同步失败");
					}
					productDetail=null;
			    	} else {
					logger.info("将数据同步生产供应失败");
				}
			}
		} else {
			logger.info("当前没有需要同步到生产供应的出库数据");
		}
	} catch (Throwable e) {
		logger.error("出库码数据上传失败:" + e);
	}
	long endTime = System.currentTimeMillis();
	logger.info("调出库码数据上传接口任务结束... ...end,耗时" + (endTime - startTime)
			+ "毫秒");

}

}
五 定时任务10s
在这里插入图片描述
六 token url
在这里插入图片描述
七 调 token的定时任务
@Component
@EnableScheduling
public class TokenTask {
private static Logger logger = LoggerFactory.getLogger(TokenTask.class);

@Autowired
private TokenFeignClient tokenFeignClient;
@Value("${jiashibo.eseCode}")
private String eseCode;
@Value("${token.username}")
private String username;
@Value("${token.password}")
private String password;

@Scheduled(fixedDelay = Constant.REFRESH_TIME)
public void refreshToken() {
	logger.info("refreshToken runing");
	try{
		String resToken= getPlatformToken();

// System.setProperty(TOKEN_KEY, token);
logger.info(“");
logger.info(“当前token为:”+resToken);
logger.info("
”);

	} catch(Throwable e) {
		logger.error("刷新token失败", e);
	}
}

/**
 * 实际获取token的方法,调用平台登录接口获取token,该类内部使用
 * @return
 */
private String getPlatformToken() {
	String token = "";
	try{
		String convertPassword = getPassword(password);
		UserToken user = new UserToken(username, convertPassword);
		Result<LoginMode> loginMode = tokenFeignClient.getToken(eseCode, user);
		if(loginMode.getCode().equals(HttpCode.SUCCESS_CODE)) {
			token = loginMode.getData().getToken();
		}else{
			token = Constant.TOKEN_EMPTY;
		}
	}catch(Exception e) {
		logger.error("getPlatformToken fail", e);
		token = Constant.TOKEN_ERROR;
	}
	// 放入System中
	System.setProperty(Constant.TOKEN_KEY, token);
	return token;
}
/**
 * 获取token,外部类调取该方法
 * @return
 */
public String getToken() {
	String currentToken = System.getProperty(Constant.TOKEN_KEY);
	if(StringUtils.isEmpty(currentToken)
			||currentToken.equals(Constant.TOKEN_ERROR)
			||currentToken.equals(Constant.TOKEN_EMPTY)) {
		String newCurrentToken = getPlatformToken();
		logger.info("token有异常:{},重新获取为:{}", currentToken, newCurrentToken);

// System.setProperty(TOKEN_KEY, newCurrentToken); // getPlatformToken方法已放入
currentToken = newCurrentToken;
}
return currentToken;
}
/**
* 获取平台规则的密码
*
* @param target 密码原文
* @param salt
* 盐
* @return
*/
public String getPassword(String target) {
String salt = DateUtil.getCurrentDateStr(DateUtil.YYYYMMDD);
target = MD5Utils.getMD5Code(target);
return MD5Utils.getMD5Code(format("%s%s", target, salt));
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值