Моя первая официальная бэкэнд-программа на Java

Java задняя часть Android JUnit
  • Предыстория проекта: у компании есть новый розничный магазин, арендодатель должен взимать арендную плату в соответствии с ежедневными продажами и должен в фоновом режиме передавать данные о ежедневных заказах третьей стороне. Ключевым моментом является то, что эти данные находятся не в нашем закулисье, а в закулисье Youzan.Из-за нехватки рабочей силы в компании руководитель напрямую устроил мне это, ладно! Загрузка Андроида не насыщена, а бэкенд грядет!
  • пройти черезHttpЗапросить сторонние необработанные данные, а затем сшить необработанные данные в нужныеjson, затем используйтеWebServicesПуш на третьих лиц!Это просто такой процесс.

1. Стыковка с группой WeChat, стыковка документов

微信群
image.png

  • какого хрена? ? ? черный знак вопроса,WebServicesВ первый раз, когда вы проводите внутренний код, вы можете дать мне егоWebServicesДа как мне играть? Выпейте немного воды, успокойтесь и поблагодарите главного босса компании Хунчжэня за его идеи!

  • Здесь есть эпизод.Документ стыковки,предоставленный другими,неверный.Меня это реально убивает,новичка.Хочется тут поругать людей.Мне на несколько секунд жалко малыша,который не младенец!

    image.png

  • Найдите интерфейс, предоставленный документом, если к нему можно получить доступ, то первый шаг должен быть в порядке.

    正常访问的结果

2. Создайте соответствующий пакет jar

2

3. Теперь проблема состоит в том, чтобы превратить эту кучу кода в банку

2

  • Генерируются следующие файлы
    3

4

  • нажмитеBuild

    5

  • Затем перейдите в выходной каталог, чтобы найти пакет jar.

    6

  • Это то, что я могу использоватьjar, Если позже вам потребуется перейти на формальный адрес, вам также необходимо сгенерировать формальный адресjar

3, сгенерированныйjarпомещатьMaven Nexus3

  • У меня нет разрешения! Привет

    image.png

  • К счастью, наш архитектор помог мне загрузить его.

    2

  • настроитьpom

       <dependency>
            <groupId>net.ticp.asiatic</groupId>
            <artifactId>ftp-pingan-sdk</artifactId>
            <version>1.0.0</version>
        </dependency>
  • запустить проект,what fuck ???
    问题
  • Блин, я не знаю этой ошибки! Спросите босса, еще раз спасибо за вашу помощь.
    1

4. Напишите логику кода

  • Еще раз спасибо другому большому человеку в компании, Мао Мао, потому что этот процесс заключается в том, что я запрашиваю серверную часть третьей стороны для получения ключевых данных, а затем интегрирую ключевые данные черезWebServicesпередать третьим лицам. Я человек Android, у которого мало опыта в этой области, и он выполнил небольшой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, общий объем данных, переданных третьей стороне, неверен.
  • Общая сумма товарных чеков по каждому заказу не равна сумме подзаказов в нем!
    问题

image.png

image.png

  • Наконец добрался до этого шага, жду когда выпустят версию
    image.png

6. Несколько заключительных замечаний