我的第一个正式的Java后端程序

  • 项目背景: 公司有家新零售店,出租方是要根据每天的销售额度去收取租金,需要把后台的每天的订单数据给推送到第三方。关键这个数据不在我们的后台,是在有赞后台,由于公司人手紧张,领导直接安排我做,好吧!安卓工作量不饱和,后端来凑!
  • 通过Http请求获取第三方原始数据,然后把原始数据拼接成想要的json,然后使用WebServices推送到第三方!就是这么的一个过程。

    1、对接微信群,对接文档开干

    微信群
    image.png
  • what fuck???黑人问号, WebServices 第一次撸后端代码,你就给我来个WebServices的,我怎么玩?喝点水,冷静下,在此感谢公司的后端大佬宏真哥给出的思路!

  • 在这里有个插曲,别人提供的对接文档是错误,真的是搞死我这个小白了,在这里想骂人,心疼宝宝几秒,谁不是个宝宝啊!
    image.png

  • 找到文档提供的接口,如果能够正常的访问的话,那么第一步就应该可以了
    正常访问的结果

2、生成对应的jar包

2

2

  • 生成了如下的文件
    3

4

  • 点击 Build
    5

  • 接下来就去输出目录找jar包了
    6

  • 这就是我可以使用的 jar,如果后续需要改为正式的地址,还需要生成一个正式的jar

3、把生成的 jar放到Maven Nexus3

  • 我没有权限!哎哎
    image.png
  • 还好我们架构师帮我上传了
    2

  • 配置pom

    1
    2
    3
    4
    5
    <dependency>
    <groupId>net.ticp.asiatic</groupId>
    <artifactId>ftp-pingan-sdk</artifactId>
    <version>1.0.0</version>
    </dependency>
  • 开始运行项目, what fuck ???
    问题

  • 完蛋,这个错误不认识啊!问大佬,再次感谢大佬的相助。
    1

4、写代码逻辑

  • 再次感谢公司的另外一个大佬毛毛,因为这个流程是我请求第三方的后台然后获取关键数据,然后把关键数据整合通过WebServices推送给第三方。我一个做安卓的在这方面经验不足,他这边完成了一个小Demo,也没叫我看,我自己看他的代码,改动的逻辑,啊哈哈

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98

    /**
    * 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,导致推送到第三方的数据总额不正确,我这一口老血啊,吐你一脸。
  • 每个订单的销售收款总额竟然不等于里面的子订单的总和!
    问题

image.png

image.png

  • 最后到了这一步,等待他们发版本
    image.png

6、最后说明几点


 上一篇
Linux学习 Linux学习
安卓的爸爸:Linux 爸爸的github 这个才是真爸爸,向爸爸致敬:林纳斯·托瓦兹 历史 是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。[4][5],在加上用户空间的应用
2018-11-26 Shiming_Li
下一篇 
Spring Boot整合Swagger2、Mybatis构建RESTfulAPI Spring Boot整合Swagger2、Mybatis构建RESTfulAPI
首先推荐一个好玩的网站 ASCll ,可以把你想要的字母生成文本的图形,然后copy到banner.txt,即可替换Spring Boot的开启图标 12345678910111213141516171819202122
2018-09-27 Shiming_Li
  目录