PlanGenerateTest.java 11.2 KB
package com.bsth.service.schedule;

import com.bsth.BaseTest_junit4;
import com.bsth.TestApplication;
import com.bsth.service.schedule.plan.process._2_generate._1_calcu._2_timetable.PlanProcessGenerateCalcuTimeTableService;
import com.bsth.service.schedule.plan.process._2_generate._1_calcu._2_timetable.PlanProcessGenerateCalcuTimeTableService.*;
import com.bsth.service.schedule.plan.process._2_generate._1_calcu._2_timetable.PlanProcessGenerateCalcuTimeTableServiceDroolsImpl;
import org.joda.time.format.DateTimeFormat;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.api.KieBase;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.*;

/**
 * 排班计划生成测试。
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {TestApplication.class})
public class PlanGenerateTest extends BaseTest_junit4 {
    @Override
    public Map<String, String> getDbunitTestDbFileClassPathMap() {
        Map<String, String> dbFileMap = new HashMap<>();
        dbFileMap.put("_2_generate_calcu_timetable_test_case1", "testdata/_2_generate_calcu_timetable.xml");
        dbFileMap.put("_2_generate_calcu_timetable_test_case2", "testdata/_2_generate_calcu_timetable.xml");
        return dbFileMap;
    }

    @Autowired
    @Qualifier("kBaseGenerateCalcuTimeTable_plus")
    private KieBase kBaseGenerateCalcuTimeTable;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 正常计算时刻表路牌启用,总班次数验证
     * @throws Exception
     */
    @Test
    public void _2_generate_calcu_timetable_test_case1() {
        LOG.info("--------------- 正常计算时刻表路牌启用,总班次数验证 ------------");

        // 使用builder创建服务
        PlanProcessGenerateCalcuTimeTableService planProcessGenerateCalcuTimeTableService =
                PlanProcessGenerateCalcuTimeTableServiceDroolsImpl.getBuilder()
                    .setkBaseGenerateCalcuTimeTable(kBaseGenerateCalcuTimeTable)
                    .setJdbcTemplate(jdbcTemplate)
                    .build();

        // 注意:数据有当日重复的时刻表匹配(包括特殊节假日重复和平日重复)
        // 1、当日重复时刻表在业务上一般是错误的(由前置验证规则过滤)
        // 2、到了排班的阶段,计算时刻表重复时是不会过滤的
        List<TTinfoDetailByLpResult> tTinfoDetailByLpResultList = planProcessGenerateCalcuTimeTableService.generateCalcuTTInfos(
                1,
                DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2019-01-05").toDate(),
                DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2019-01-14").toDate()
        );
        Assert.assertArrayEquals(
                "时刻表路牌班次信息不匹配",
                new Object[] {33},
                new Object[] {tTinfoDetailByLpResultList.size()}
        );

    }

    /**
     * 单独测试某一天的时刻表路牌班次明细属性是否正常。
     * @throws Exception
     */
    @Test
    public void _2_generate_calcu_timetable_test_case2() {
        LOG.info("--------------- 单独测试某一天的时刻表路牌班次明细属性 ------------");

        // 使用builder创建服务
        PlanProcessGenerateCalcuTimeTableService planProcessGenerateCalcuTimeTableService =
                PlanProcessGenerateCalcuTimeTableServiceDroolsImpl.getBuilder()
                        .setkBaseGenerateCalcuTimeTable(kBaseGenerateCalcuTimeTable)
                        .setJdbcTemplate(jdbcTemplate)
                        .build();

        // 注意:数据有当日重复的时刻表匹配(包括特殊节假日重复和平日重复)
        // 1、当日重复时刻表在业务上一般是错误的(由前置验证规则过滤)
        // 2、到了排班的阶段,计算时刻表重复时是不会过滤的
        List<TTinfoDetailByLpResult> tTinfoDetailByLpResultList = planProcessGenerateCalcuTimeTableService.generateCalcuTTInfos(
                1,
                DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2019-01-01").toDate(),
                DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2019-01-01").toDate()
        );
        Assert.assertArrayEquals(
                "时刻表路牌班次信息不匹配",
                new Object[] {5},
                new Object[] {tTinfoDetailByLpResultList.size()}
        );

        // 找出时刻表1路牌1数据,路牌2,路牌3的班次数据,时刻表2的路牌1数据,路牌2数据
        TTinfoDetailByLpResult t1_lp1_info = null;
        TTinfoDetailByLpResult t1_lp2_info = null;
        TTinfoDetailByLpResult t1_lp3_info = null;
        TTinfoDetailByLpResult t2_lp1_info = null;
        TTinfoDetailByLpResult t2_lp2_info = null;
        for (TTinfoDetailByLpResult ttInfoLpInfoResult : tTinfoDetailByLpResultList) {
            if (ttInfoLpInfoResult.getTTinfoResult().getId() == 1) {
                if (ttInfoLpInfoResult.getLpInfoResult().getId() == 1L) {
                    t1_lp1_info = ttInfoLpInfoResult;
                } else if (ttInfoLpInfoResult.getLpInfoResult().getId() == 2L) {
                    t1_lp2_info = ttInfoLpInfoResult;
                } else if (ttInfoLpInfoResult.getLpInfoResult().getId() == 3L) {
                    t1_lp3_info = ttInfoLpInfoResult;
                }
            } else if (ttInfoLpInfoResult.getTTinfoResult().getId() == 2) {
                if (ttInfoLpInfoResult.getLpInfoResult().getId() == 1L) {
                    t2_lp1_info = ttInfoLpInfoResult;
                } else if (ttInfoLpInfoResult.getLpInfoResult().getId() == 2L) {
                    t2_lp2_info = ttInfoLpInfoResult;
                }
            }
        }

        Assert.assertArrayEquals(
                "时刻表1 路牌1 最小发车顺序号 最大发车顺序号 开始分班顺序号 不一致",
                new Object[] {1L, 1L, 1, 6, 6},
                new Object[] {t1_lp1_info.getTTinfoResult().getId(), t1_lp1_info.getLpInfoResult().getId(),
                        t1_lp1_info.getMinFcno(), t1_lp1_info.getMaxFcno(), t1_lp1_info.getStartFbFcno()});
        Assert.assertArrayEquals(
                "时刻表1 路牌2 最小发车顺序号 最大发车顺序号 开始分班顺序号 不一致",
                new Object[] {1L, 2L, 2, 5, null},
                new Object[] {t1_lp2_info.getTTinfoResult().getId(), t1_lp2_info.getLpInfoResult().getId(),
                        t1_lp2_info.getMinFcno(), t1_lp2_info.getMaxFcno(), t1_lp2_info.getStartFbFcno()});
        Assert.assertArrayEquals(
                "时刻表1 路牌3 最小发车顺序号 最大发车顺序号 开始分班顺序号 不一致",
                new Object[] {1L, 3L, 3, 3, null},
                new Object[] {t1_lp3_info.getTTinfoResult().getId(), t1_lp3_info.getLpInfoResult().getId(),
                        t1_lp3_info.getMinFcno(), t1_lp3_info.getMaxFcno(), t1_lp3_info.getStartFbFcno()});

        Assert.assertArrayEquals(
                "时刻表2 路牌1 最小发车顺序号 最大发车顺序号 开始分班顺序号 不一致",
                new Object[] {2L, 1L, 1, 1, null},
                new Object[] {t2_lp1_info.getTTinfoResult().getId(), t2_lp1_info.getLpInfoResult().getId(),
                        t2_lp1_info.getMinFcno(), t2_lp1_info.getMaxFcno(), t2_lp1_info.getStartFbFcno()});
        Assert.assertArrayEquals(
                "时刻表2 路牌2 最小发车顺序号 最大发车顺序号 开始分班顺序号 不一致",
                new Object[] {2L, 2L, 2, 2, null},
                new Object[] {t2_lp2_info.getTTinfoResult().getId(), t2_lp2_info.getLpInfoResult().getId(),
                        t2_lp2_info.getMinFcno(), t2_lp2_info.getMaxFcno(), t2_lp2_info.getStartFbFcno()});

        // 验证路牌1 ttinfo中的第一个班次的属性
        Collections.sort(t1_lp1_info.getTTinfoDetailResultList(), new Comparator<TTinfoDetailResult>() {
            @Override
            public int compare(TTinfoDetailResult o1, TTinfoDetailResult o2) {
                return o1.getFcno() - o2.getFcno();
            }
        });
        Assert.assertArrayEquals(
                "路牌1的第一个班次 对象属性不能为空",
                new Object[] {
                        true,
                        true,
                        true
                },
                new Object[] {
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getXl() != null,
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getTtInfo() != null,
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getLp() != null
                }
        );
        Assert.assertArrayEquals(
                "路牌1的第一个班次 属性不一致",
                new Object[] {
                        1L,
                        1,
                        1L,
                        1L,
                        1,
                        "0",
                        "#1",
                        "上行起点站",
                        "#2",
                        "上行终点站",
                        "08:30",
                        1,
                        30D,
                        30,
                        "normal",
                        "mark一下",
                        1,
                        false,
                        false
                },
                new Object[] {
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getId(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getXl().getId(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getTtInfo().getId(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getLp().getId(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getFcno(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getXlDir(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getQdzCode(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getQdzName(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getZdzCode(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getZdzName(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getFcsj(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getBcs(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getJhlc(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getBcsj(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getBcType(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getRemark(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getLineVersion(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getIsFB(),
                        t1_lp1_info.getTTinfoDetailResultList().get(0).getIsTS()
                }
        );
    }
}