- 專案背景: 公司有家新零售店,出租方是要根據每天的銷售額度去收取租金,需要把後臺的每天的訂單資料給推送到第三方。關鍵這個資料不在我們的後臺,是在有贊後臺,由於公司人手緊張,領導直接安排我做,好吧!安卓工作量不飽和,後端來湊!
- 通過
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
,導致推送到第三方的資料總額不正確,我這一口老血啊,吐你一臉。 - 每個訂單的銷售收款總額竟然不等於裡面的子訂單的總和!
- 最後到了這一步,等待他們發版本