我的第一個(gè)正式的Java后端程序(一)

  • 項(xiàng)目背景: 公司有家新零售店,出租方是要根據(jù)每天的銷售額度去收取租金,需要把后臺的每天的訂單數(shù)據(jù)給推送到第三方。關(guān)鍵這個(gè)數(shù)據(jù)不在我們的后臺,是在有贊后臺,由于公司人手緊張,領(lǐng)導(dǎo)直接安排我做,好吧!安卓工作量不飽和,后端來湊!
  • 通過Http請求獲取第三方原始數(shù)據(jù),然后把原始數(shù)據(jù)拼接成想要的json,然后使用WebServices推送到第三方!就是這么的一個(gè)過程。

1、對接微信群,對接文檔開干

微信群

image.png
  • what fuck???黑人問號, WebServices 第一次擼后端代碼,你就給我來個(gè)WebServices的,我怎么玩?喝點(diǎn)水,冷靜下,在此感謝公司的后端大佬宏真哥給出的思路!

  • 在這里有個(gè)插曲,別人提供的對接文檔是錯誤,真的是搞死我這個(gè)小白了,在這里想罵人,心疼寶寶幾秒,誰不是個(gè)寶寶啊!


    image.png
  • 找到文檔提供的接口,如果能夠正常的訪問的話,那么第一步就應(yīng)該可以了


    正常訪問的結(jié)果

2、生成對應(yīng)的jar包

2

3、那么現(xiàn)在的問題是把這堆代碼打成jar

2
  • 生成了如下的文件


    3
4
  • 點(diǎn)擊 Build

    5

  • 接下來就去輸出目錄找jar包了


    6
  • 這就是我可以使用的 jar,如果后續(xù)需要改為正式的地址,還需要生成一個(gè)正式的jar

3、把生成的 jar放到Maven Nexus3

  • 我沒有權(quán)限!哎哎


    image.png
  • 還好我們架構(gòu)師幫我上傳了


    2
  • 配置pom

       <dependency>
            <groupId>net.ticp.asiatic</groupId>
            <artifactId>ftp-pingan-sdk</artifactId>
            <version>1.0.0</version>
        </dependency>
  • 開始運(yùn)行項(xiàng)目, what fuck ???
    問題
  • 完蛋,這個(gè)錯誤不認(rèn)識??!問大佬,再次感謝大佬的相助。


    1

4、寫代碼邏輯

  • 再次感謝公司的另外一個(gè)大佬毛毛,因?yàn)檫@個(gè)流程是我請求第三方的后臺然后獲取關(guān)鍵數(shù)據(jù),然后把關(guān)鍵數(shù)據(jù)整合通過WebServices推送給第三方。我一個(gè)做安卓的在這方面經(jīng)驗(yàn)不足,他這邊完成了一個(gè)小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;
    /**
     * 每頁數(shù)量
     */
    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);
        // 總頁數(shù)
        Long pages = parsePages(result.getPaginator().getTotalCount());
        int j=0;
        int k=0;
        OrderPushUtils.m=0;
        // 分頁查詢
        for (long pageNo = 1; pageNo <= pages ; pageNo++) {
            // 設(shè)置分頁
            setPage(youzanRetailOpenDeliveryorderQuery,pageNo);
            // 查詢結(jié)果
            result = yzClientService.invoke(youzanRetailOpenDeliveryorderQuery);
            // 處理查詢結(jié)果
            YouzanRetailOpenDeliveryorderQueryResult.OpenDeliveryOrderDTO[] deliveryOrders = result.getDeliveryOrders();
            if (deliveryOrders!=null&&deliveryOrders.length>0){
                for (int i=0;i<deliveryOrders.length;i++){
                    //平安店的數(shù)據(jù) 這樣才能正確 而且還是線下店才好
                    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() {
        // 當(dāng)前時(shí)間前一天的時(shí)間
        Date currentDate = new Date(System.currentTimeMillis()-86400*1000*i);
        i++;
        // 查詢開始時(shí)間
        Date queryStart = DateUtils.getDateStart(currentDate);
        // 查詢結(jié)束時(shí)間
        Date queryEnd = DateUtils.getDateEnd(currentDate);
        String queryEndTime = DateUtils.formatDateTime(queryEnd);
        String queryStartTime = DateUtils.formatDateTime(queryStart);
        logger.info("查詢有贊后臺的開始時(shí)間"+queryStartTime);
        logger.info("查詢有贊后臺的結(jié)束時(shí)間"+queryEndTime);
        Date date = new Date();
        String nowTime = DateUtils.formatDateTime(date);
        logger.info("當(dāng)前查詢的時(shí)間"+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]); 這個(gè)方法我要去區(qū)分是哪家零售店的數(shù)據(jù),同時(shí)在組裝json數(shù)據(jù),就不貼出來了

5、萬萬沒有想到

  • 第三方接口有bug,導(dǎo)致推送到第三方的數(shù)據(jù)總額不正確,我這一口老血啊,吐你一臉。
  • 每個(gè)訂單的銷售收款總額竟然不等于里面的子訂單的總和!


    問題
image.png
image.png
  • 最后到了這一步,等待他們發(fā)版本


    image.png
  • 2018.10.16 感動天,感動地,最后感動了自己,真心覺得,少扯皮的程序員太少了,不懂就問嘛,又不丟人,數(shù)據(jù)結(jié)果正確,等待發(fā)包了


    一張無比可愛的圖
  • 2018.10.18 為啥調(diào)通了,今天簽名失敗了!日了狗了


    error
哎哎
  • 20181107更新上面的問題

  • 由于最近在開發(fā)后臺,就一直忘了更新,簽名失敗的原因,是我電腦的問題,由于在加密token的時(shí)候,獲取時(shí)間戳的時(shí)候,我的電腦時(shí)間快了2分鐘左右,哈哈

  • 雖然后續(xù)檢查出來,改正了,但是也給別人趙成了麻煩!希望后面的開發(fā)之旅越來越順利

  • 20181205

    • 由于對方的服務(wù)器宕機(jī)了,我也不知道他們?yōu)樯栋堰@個(gè)服務(wù)器給關(guān)閉了,然后一直推送不成功,我只好跑了本地的程序給他們推送


      image.png
  • 記錄下 cron表達(dá)式

    • */5 * * * * ? 每隔5秒執(zhí)行一次
    • 0 */1 * * * ? 每隔1分鐘執(zhí)行一次
    • 0 0 5-15 * * ? 每天5-15點(diǎn)整點(diǎn)觸發(fā)
    • 0 0/3 * * * ? 每三分鐘觸發(fā)一次
    • 0 0-5 14 * * ? 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā)
    • 0 0/5 14 * * ? 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā)
    • 0 0/5 14,18 * * ? 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā)
    • 0 0/30 9-17 * * ? 朝九晚五工作時(shí)間內(nèi)每半小時(shí)
    • 0 0 10,14,16 * * ? 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn)

作者:bigabo_1993
來源:CSDN
原文:https://blog.csdn.net/weixin_40426638/article/details/78959972
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

6、最后說明幾點(diǎn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容