package com.ruoyi;

import cn.hutool.json.JSONUtil;
import com.ruoyi.common.utils.SnowflakeUtil;
import com.ruoyi.domain.ReviewStandard;
import com.ruoyi.service.ReviewStandardService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class ReviewStandardTest {

    @Autowired
    private ReviewStandardService reviewStandardService;

    @Test
    public void converterTest() {
        String json = "[{\"id\":1735216941104238592,\"type\":\"system\",\"chapter\":\"5.1\",\"text\":\"车辆制造商应具备车辆全生命周期的汽车信息安全管理体系。注:车辆全生命周期包括车辆的开发阶段、生产阶段及后生产阶段。\",\"keyPointList\":[{\"id\":1735216941104238593,\"text\":\"车辆制造商是否建立汽车信息安全管理制度。\",\"reviewStandardId\":1735216941104238592,\"reviewDetailsList\":[{\"id\":1735216941104238594,\"text\":\"车辆制造商是否能够提供/展示汽车信息安全管理制度正式发布的证明材料。\",\"reviewKeypointId\":1735216941104238593,\"reviewSceneList\":[{\"id\":1735216941104238595,\"text\":\"1.管理制度发布会红头文件\",\"reviewDetailsId\":1735216941104238594},{\"id\":1735217011274944512,\"text\":\"2.管理制度正式发布会议纪要\",\"reviewDetailsId\":1735216941104238594},{\"id\":1735217022993829888,\"text\":\"3.专用系统正式发布流程或记录\",\"reviewDetailsId\":1735216941104238594},{\"id\":1737393098847203330,\"text\":\"修改一个场景\",\"reviewDetailsId\":1735216941104238594}]}]}],\"standardId\":1,\"name\":\"汽车整车信息安全技术要求-报批稿\",\"standardNo\":\"---\",\"file\":\"/vehicle-quality-review-oss/2024/01/04/汽车整车信息安全技术要求-报批稿_20240104170818A002.pdf\"},{\"id\":1735217023899799552,\"type\":\"system\",\"chapter\":\"5.2\",\"text\":\"汽车信息安全管理体系应包括以下内容。建立企业内部管理汽车信息安全的过程。\",\"keyPointList\":[{\"id\":1735217023899799553,\"text\":\"车辆制造商汽车信息安全管理制度是否建立并明确汽车信息安全管理制度的组织架构及权责。\",\"reviewStandardId\":1735217023899799552,\"reviewDetailsList\":[{\"id\":1735217023899799554,\"text\":\"车辆制造商汽车信息安全管理制度的角色应覆盖车辆/车辆产品在生命周期中的信息安全活动。\",\"reviewKeypointId\":1735217023899799553,\"reviewSceneList\":[{\"id\":1735217023899799555,\"text\":\"1.汽车信息安全管理制度或其配套的流程文件中包含流程图,定义了信息安全活动及对应的角色,并有角色的权责定义。\",\"reviewDetailsId\":1735217023899799554}]},{\"id\":1735217024327618560,\"text\":\"车辆制造商汽车信息安全管理制度的角色应与车辆制造商的组织架构匹配。\",\"reviewKeypointId\":1735217023899799553,\"reviewSceneList\":[{\"id\":1735217024327618561,\"text\":\"1.汽车信息安全管理制度中定义的角色与车辆制造商的组织架构岗位名称一致。\",\"reviewDetailsId\":1735217024327618560},{\"id\":1735217024608636928,\"text\":\"2.汽车信息安全管理制度中定义的角色与车辆制造商的组织架构岗位有映射关系。\",\"reviewDetailsId\":1735217024327618560}]}]},{\"id\":1735217025212616704,\"text\":\"车辆制造商汽车信息安全管理制度是否明确为保障汽车信息安全需求实现和维持所投入的资源。\",\"reviewStandardId\":1735217023899799552,\"reviewDetailsList\":[{\"id\":1735217025212616705,\"text\":\"车辆制造商应提供在信息安全方面提供资源支持的证明材料,包括投入的场地、基础软硬件设备、技术人员和资金等。\",\"reviewKeypointId\":1735217025212616704,\"reviewSceneList\":[{\"id\":1735217025212616706,\"text\":\"1.典型的资源要求为人力投入,例如负责网络安全风险管理的人员、研发人员和事件管理响应人员。\",\"reviewDetailsId\":1735217025212616705}]}]},{\"id\":1735217025887899648,\"text\":\"车辆制造商汽车信息安全管理制度是否明确与其它管理流程(如QMS、ISMS)的适配性。\",\"reviewStandardId\":1735217023899799552,\"reviewDetailsList\":[{\"id\":1735217025887899649,\"text\":\"车辆制造商应提供信息安全管理制度在建设实施中与企业其他管理流程相适配的证明材料。\",\"reviewKeypointId\":1735217025887899648,\"reviewSceneList\":[{\"id\":1735217025887899650,\"text\":\"1.明确信息安全管理要求融合到现有管理制度流程中,如在现有ISMS制度中增加汽车信息安全管理要求。\",\"reviewDetailsId\":1735217025887899649},{\"id\":1735217026223443968,\"text\":\"2.在信息安全管理制度中明确与其它管理流程的接口。\",\"reviewDetailsId\":1735217025887899649}]}]}],\"standardId\":1,\"name\":\"汽车整车信息安全技术要求-报批稿\",\"standardNo\":\"---\",\"file\":\"/vehicle-quality-review-oss/2024/01/04/汽车整车信息安全技术要求-报批稿_20240104170818A002.pdf\"}]";

        List<ReviewStandard> list = JSONUtil.toList(JSONUtil.parseArray(json), ReviewStandard.class);
        reviewStandardService.initData(list);
        System.out.println(list);

    }

    @Test
    public void findTreeTestSystem() {
        List<ReviewStandard> tree = reviewStandardService.findTree(1L, ReviewStandard.TYPE_SYSTEM);
        System.out.println(JSONUtil.toJsonPrettyStr(tree));
    }

    @Test
    public void findTreeTestCar() {
        List<ReviewStandard> tree = reviewStandardService.findTree(1L, ReviewStandard.TYPE_CAR);
        System.out.println(JSONUtil.toJsonPrettyStr(tree));
    }

    @Test
    public void generateId() {
        for(int i=0; i<38; i++)
        System.out.println(SnowflakeUtil.generate());
    }

}