- 项目背景: 公司有家新零售店,出租方是要根据每天的销售额度去收取租金,需要把后台的每天的订单数据给推送到第三方。关键这个数据不在我们的后台,是在有赞后台,由于公司人手紧张,领导直接安排我做,好吧!安卓工作量不饱和,后端来凑!
- 通过
Http
请求获取第三方原始数据,然后把原始数据拼接成想要的json
,然后使用WebServices
推送到第三方!就是这么的一个过程。
1、对接微信群,对接文档开干
what fuck???黑人问号,
WebServices
第一次撸后端代码,你就给我来个WebServices
的,我怎么玩?喝点水,冷静下,在此感谢公司的后端大佬宏真哥给出的思路!-
在这里有个插曲,别人提供的对接文档是错误,真的是搞死我这个小白了,在这里想骂人,心疼宝宝几秒,谁不是个宝宝啊!
-
找到文档提供的接口,如果能够正常的访问的话,那么第一步就应该可以了
2、生成对应的jar包
- 感谢文章 Intellij Idea 下 生成WebServiceClient (WS客户端)
- 拿到测试的地址了,访问也正常了,使用
ide
生成代码,来开始动起来,如下步骤
- 我遇到了一个问题,在此感谢 软件包 junit.framework 不存在的解决方法
-
如果一切顺利的话,那么就会看到这个界面
3、那么现在的问题是把这堆代码打成jar
- 感谢这个博客对我的帮助 Idea 将新写的项目中的一个java文件搞成jar包方法
-
生成了如下的文件
-
点击
Build
-
接下来就去输出目录找jar包了
这就是我可以使用的
jar
,如果后续需要改为正式的地址,还需要生成一个正式的jar
3、把生成的 jar
放到Maven Nexus3
-
我没有权限!哎哎
-
还好我们架构师帮我上传了
配置
pom
<dependency>
<groupId>net.ticp.asiatic</groupId>
<artifactId>ftp-pingan-sdk</artifactId>
<version>1.0.0</version>
</dependency>
- 开始运行项目,
what fuck ???
-
完蛋,这个错误不认识啊!问大佬,再次感谢大佬的相助。
4、写代码逻辑
- 再次感谢公司的另外一个大佬毛毛,因为这个流程是我请求第三方的后台然后获取关键数据,然后把关键数据整合通过
WebServices
推送给第三方。我一个做安卓的在这方面经验不足,他这边完成了一个小Demo
,也没叫我看,我自己看他的代码,改动的逻辑,啊哈哈
/**
* author: Created by shiming on 2018/9/30 17:14
* mailbox:lamshiming@sina.com
*/
@Service
@ElasticJobConf(name="YouzanPushOrderPingAnSynJob",cron = "*/5 * * * * ?")
public class YouzanPushOrderPingAnSynJob implements SimpleJob {
@Resource
private YZClientService yzClientService;
/**
* 每页数量
*/
private static final Long PAGE_SIZE = 20L;
private static final Logger logger = LoggerFactory.getLogger(YouzanPushOrderPingAnSynJob.class);
@Override
public void execute(ShardingContext shardingContext) {
YouzanRetailOpenDeliveryorderQuery youzanRetailOpenDeliveryorderQuery = buildQueryApi();
YouzanRetailOpenDeliveryorderQueryResult result = yzClientService.invoke(youzanRetailOpenDeliveryorderQuery);
// 总页数
Long pages = parsePages(result.getPaginator().getTotalCount());
int j=0;
int k=0;
OrderPushUtils.m=0;
// 分页查询
for (long pageNo = 1; pageNo <= pages ; pageNo++) {
// 设置分页
setPage(youzanRetailOpenDeliveryorderQuery,pageNo);
// 查询结果
result = yzClientService.invoke(youzanRetailOpenDeliveryorderQuery);
// 处理查询结果
YouzanRetailOpenDeliveryorderQueryResult.OpenDeliveryOrderDTO[] deliveryOrders = result.getDeliveryOrders();
if (deliveryOrders!=null&&deliveryOrders.length>0){
for (int i=0;i<deliveryOrders.length;i++){
//平安店的数据 这样才能正确 而且还是线下店才好
if (YouzanConst.ORDER_FORM_PINGANDIAN.equals(deliveryOrders[i].getWarehouseCode())&&YouzanConst.SALE_WAY_OFFLINE.equals(deliveryOrders[i].getSaleWay())) {
// 这里就是满足平安店的订单
OrderPushUtils.pushOrder(deliveryOrders[i]);
j++;
System.out.println("一共有多少平安店的单 ::"+j);
if (i==2){
String s = new Gson().toJson(result);
System.out.println("result=="+s);
}
}
if (YouzanConst.ORDER_FORM_CHEGONGMIAO.equals(deliveryOrders[i].getWarehouseCode())&&YouzanConst.SALE_WAY_OFFLINE.equals(deliveryOrders[i].getSaleWay())) {
k++;
System.out.println("一共有车公庙的单 ::"+k);
}
}
}
}
}
int i=1;
private YouzanRetailOpenDeliveryorderQuery buildQueryApi() {
// 当前时间前一天的时间
Date currentDate = new Date(System.currentTimeMillis()-86400*1000*i);
i++;
// 查询开始时间
Date queryStart = DateUtils.getDateStart(currentDate);
// 查询结束时间
Date queryEnd = DateUtils.getDateEnd(currentDate);
String queryEndTime = DateUtils.formatDateTime(queryEnd);
String queryStartTime = DateUtils.formatDateTime(queryStart);
logger.info("查询有赞后台的开始时间"+queryStartTime);
logger.info("查询有赞后台的结束时间"+queryEndTime);
Date date = new Date();
String nowTime = DateUtils.formatDateTime(date);
logger.info("当前查询的时间"+nowTime);
YouzanRetailOpenDeliveryorderQueryParams youzanRetailOpenDeliveryorderQueryParams = new YouzanRetailOpenDeliveryorderQueryParams();
youzanRetailOpenDeliveryorderQueryParams.setPageNo(1L);
youzanRetailOpenDeliveryorderQueryParams.setPageSize(1L);
youzanRetailOpenDeliveryorderQueryParams.setCreateTimeStart(DateUtils.formatDate(queryStart));
youzanRetailOpenDeliveryorderQueryParams.setCreateTimeEnd(DateUtils.formatDate(queryEnd));
youzanRetailOpenDeliveryorderQueryParams.setCreateTimeStart(queryStartTime);
youzanRetailOpenDeliveryorderQueryParams.setCreateTimeEnd(queryEndTime);
YouzanRetailOpenDeliveryorderQuery youzanRetailOpenDeliveryorderQuery = new YouzanRetailOpenDeliveryorderQuery();
youzanRetailOpenDeliveryorderQuery.setAPIParams(youzanRetailOpenDeliveryorderQueryParams);
return youzanRetailOpenDeliveryorderQuery;
}
private void setPage(YouzanRetailOpenDeliveryorderQuery queryApi,Long pageNo){
YouzanRetailOpenDeliveryorderQueryParams queryAPIParams = (YouzanRetailOpenDeliveryorderQueryParams)queryApi.getAPIParams();
queryAPIParams.setPageNo(pageNo);
queryAPIParams.setPageSize(PAGE_SIZE);
}
private Long parsePages(long totalCount){
if (totalCount == -1) {
return 1L;
}
return totalCount / PAGE_SIZE + ((totalCount % PAGE_SIZE == 0) ? 0 : 1);
}
}
-
OrderPushUtils.pushOrder(deliveryOrders[i]);
这个方法我要去区分是哪家零售店的数据,同时在组装json数据,就不贴出来了
5、万万没有想到
- 第三方接口有
bug
,导致推送到第三方的数据总额不正确,我这一口老血啊,吐你一脸。 -
每个订单的销售收款总额竟然不等于里面的子订单的总和!
-
最后到了这一步,等待他们发版本
-
2018.10.16 感动天,感动地,最后感动了自己,真心觉得,少扯皮的程序员太少了,不懂就问嘛,又不丢人,数据结果正确,等待发包了
-
2018.10.18 为啥调通了,今天签名失败了!日了狗了
20181107更新上面的问题
由于最近在开发后台,就一直忘了更新,签名失败的原因,是我电脑的问题,由于在加密
token
的时候,获取时间戳的时候,我的电脑时间快了2分钟左右,哈哈虽然后续检查出来,改正了,但是也给别人赵成了麻烦!希望后面的开发之旅越来越顺利
-
20181205
-
由于对方的服务器宕机了,我也不知道他们为啥把这个服务器给关闭了,然后一直推送不成功,我只好跑了本地的程序给他们推送
-
-
记录下
cron
表达式- */5 * * * * ? 每隔5秒执行一次
- 0 */1 * * * ? 每隔1分钟执行一次
- 0 0 5-15 * * ? 每天5-15点整点触发
- 0 0/3 * * * ? 每三分钟触发一次
- 0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
- 0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
- 0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
- 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
- 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
作者:bigabo_1993
来源:CSDN
原文:https://blog.csdn.net/weixin_40426638/article/details/78959972
版权声明:本文为博主原创文章,转载请附上博文链接!