package com.xjrsoft.xjrsoftboot;

import cn.dev33.satoken.secure.SaSecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.xjrsoft.XjrSoftApplication;
import com.xjrsoft.module.schedule.entity.JianyueData;
import com.xjrsoft.module.schedule.mapper.JianyueDataMapper;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

// 简约课表测试
//@RunWith(SpringRunner.class)
//@SpringBootTest(classes = XjrSoftApplication.class)
public class ScheduleFlowTest {

    public static final String ALGORITHM = "HmacSHA256";
    public static final String apiUrl = "https://live.jianyuekb.com/api/v1/ScheduleFlowV2/OpenApi/";
    @Autowired
    private JianyueDataMapper jianyueDataMapper;

    public static String calculateHMac(String key, String data) throws Exception {
        Mac sha256_HMAC = Mac.getInstance(ALGORITHM);

        SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), ALGORITHM);
        sha256_HMAC.init(secret_key);

        return byteArrayToHex(sha256_HMAC.doFinal(data.getBytes("UTF-8")));
    }

    public static String byteArrayToHex(byte[] a) {
        StringBuilder sb = new StringBuilder(a.length * 2);
        for (byte b : a)
            sb.append(String.format("%02x", b));
        return sb.toString();
    }


    /**
     * 将加密后的字节数组转换成字符串
     *
     * @param b 字节数组
     * @return 字符串
     */
    private static String byteArrayToHexString(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toLowerCase();
    }

    /**
     * https://live.jianyuekb.com/api/v1/ScheduleFlowV2/OpenApi/
     * schoolId：UUFM5TID45X
     * secert：UUFM5TID45X
     * password：Jh&NAbn6Rm#p@6ZZ
     */
    @Test
    public void ScheduleFlowTest() throws Exception {
        long timestamp = System.currentTimeMillis();
        System.out.println("timestamp:" + timestamp);
        String md5Str = SaSecureUtil.md5("@ak8To$xSHFoT6FoqsqYb3" + timestamp);


        String sign = calculateHMac("UUXQ8G4W9IU", md5Str);
        System.out.println("sign:" + sign);

        //查询校区id
        String schoolDistrictId = insertSchoolDistrictData(sign, timestamp);
        System.out.println("schoolDistrictId:" + schoolDistrictId);
        //新增年级，并返回添加好的年级id
//        Map<Long, String> gradeMap = insertGrade(sign, timestamp, schoolDistrictId);
//        //新增年级，并返回添加好的年级id
//        insertSemester(sign, timestamp);
//        //新增课程
//        insertCourse(sign, timestamp);
//        //新增教师
//        insertTeacher(sign, timestamp);
//
//        insertStudent(sign, timestamp, gradeMap);
//
//        insertClassRoom(sign, timestamp,schoolDistrictId);

        //先查寻出年级序列号
//        JsonArray schoolDistrictData = getSchoolDistrictData(sign, timestamp);
//        List<String> gradeInfo = getGradeInfo(sign, timestamp, schoolDistrictData);
//
//        //班级信息
//        List<String> classInfo = getClassInfo(sign, timestamp);
//
//        //查询课表信息
//        List<JianyueData> baseClass = jianyueDataMapper.selectList(new QueryWrapper<JianyueData>().lambda().eq(JianyueData::getTableName, "base_class"));
//        List<String> classInfo = new ArrayList<>();
//        for (JianyueData aClass : baseClass) {
//            classInfo.add(aClass.getJianyueId());
//        }
//        JsonArray scheduleInfo = getScheduleInfo(sign, timestamp, classInfo);
//        System.out.println(scheduleInfo);

//

    }

    @Test
    void test(){
        System.out.println();
    }

    List<String> getClassInfo(String sign, Long timestamp){
        JsonParser jsonParser = new JsonParser();
        String url  = apiUrl + "Class/page";
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("pageSize", "200");
        jsonObject.addProperty("pageIndex", "1");
        String result = doPost(url, jsonObject.toString(), sign, timestamp);
        System.out.println("ClassInfo:" + result);
        JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
        JsonArray jsonArray = resultJson.get("data").getAsJsonObject().get("dataList").getAsJsonArray();
        List<String> resultArray = new ArrayList<>();
        for (JsonElement jsonElement : jsonArray) {
            JsonObject asJsonObject = jsonElement.getAsJsonObject();
            resultArray.add(asJsonObject.get("serialNo").getAsString());
        }
        return resultArray;
    }
    JsonArray getSchoolDistrictData(String sign, Long timestamp){
        JsonParser jsonParser = new JsonParser();
//        String url  = apiUrl + "SchoolDistrict/Create";
//        JsonObject jsonObject = new JsonObject();
//        jsonObject.addProperty("name", "test1");
//        jsonObject.addProperty("shortName", "本部112");
//        jsonObject.addProperty("note", "本部211");
//        jsonObject.addProperty("sort", "2");
//        String result = doPost(url, jsonObject.toString(), sign, timestamp);
//        JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();

        String url  = apiUrl + "SchoolDistrict/page";
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("pageSize", "15");
        jsonObject.addProperty("pageIndex", "1");
        String result = doPost(url, jsonObject.toString(), sign, timestamp);
        JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();

        JsonArray jsonArray = resultJson.get("data").getAsJsonObject().get("dataList").getAsJsonArray();
        JsonArray resultArray = new JsonArray();
        for (JsonElement jsonElement : jsonArray) {
            JsonObject asJsonObject = jsonElement.getAsJsonObject();
            resultArray.add(asJsonObject.get("id").getAsString());
        }
        return resultArray;
    }

    List<String> getGradeInfo(String sign, Long timestamp, JsonArray schoolDistrictIds){
        JsonParser jsonParser = new JsonParser();
        String url  = apiUrl + "TimeTable/List";
        JsonObject jsonObject = new JsonObject();
//        jsonObject.addProperty("schoolDistrictIds", schoolDistrictIds.toString());
        jsonObject.addProperty("pageSize", "15");
        jsonObject.addProperty("pageIndex", "1");
        String result = doPost(url, jsonObject.toString(), sign, timestamp);
        System.out.println("grade:" + result);
        JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
        JsonArray data = resultJson.get("data").getAsJsonArray();
        if(data.size() == 0){
            return new ArrayList<>();
        }
        JsonArray gradeArray = resultJson.get("data").getAsJsonObject().get("dataList").getAsJsonArray();
        List<String> gradeIds = new ArrayList<>();
        for (JsonElement jsonElement : gradeArray) {
            JsonObject asJsonObject = jsonElement.getAsJsonObject();
            gradeIds.add(asJsonObject.get("serialNo").getAsString());
        }
        
        return gradeIds;
    }

    JsonArray getScheduleInfo(String sign, Long timestamp, List<String> ids) throws IOException {
        JsonParser jsonParser = new JsonParser();
        String url  = apiUrl + "TimeTable/List";
        if(ids.isEmpty()){
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("startDate", "2024-01-01 00:00:00");
            jsonObject.addProperty("endDate", "2024-02-21 23:59:59");
            String result = doPost(url, jsonObject.toString(), sign, timestamp);
            File file = new File("D:\\workspace\\其他\\课表\\file.txt");
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
            writer.write(result); // 写入字符串内容
            writer.close();
            return null;
        }
        for (String id : ids) {
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("classSerialNo", id);
            jsonObject.addProperty("startDate", "2024-01-01 00:00:00");
            jsonObject.addProperty("endDate", "2024-02-21 23:59:59");
            String result = doPost(url, jsonObject.toString(), sign, timestamp);
            System.out.println(id + ":" + result);
        }

        return null;
    }

//    List<String> insertClass(String sign, Long timestamp, String schoolDistrictId) throws InterruptedException {
//        List<ClassroomJianyuekbVo> dataList = baseClassroomMapper.getJianyueList();
//        String url  = apiUrl + "class/create";
//        List<String> idList = new ArrayList<>();
//        JsonParser jsonParser = new JsonParser();
//
//        String findUrl = apiUrl + "class/page";
//
//        for (ClassroomJianyuekbVo classroom : dataList) {
//            JsonObject paramJson = new JsonObject();
//            paramJson.addProperty("schoolDistrictId", schoolDistrictId);
//            paramJson.addProperty("name", classroom.getName());
//
////            paramJson.addProperty("peopleCount", classroom.getPeopleCount());
////            paramJson.addProperty("location", classroom.getLocation());
//            paramJson.addProperty("peopleCount", 50);
//            paramJson.addProperty("location", "无");
//            paramJson.addProperty("extendId", classroom.getExtendId());
//            paramJson.addProperty("floor", classroom.getFloor());
////            String findResult = doPost(findUrl, paramJson.toString(), sign, timestamp);
////            if(findResult != null){
////                JsonObject resultJson = jsonParser.parse(findResult).getAsJsonObject();
////                JsonObject data = resultJson.get("data").getAsJsonObject();
////                if(data.get("total").getAsInt() != 0){
////                    //调用update
////                }
////            }
//
//            String result = doPost(url, paramJson.toString(), sign, timestamp);
//            if(result == null){
//                System.out.println(paramJson.toString());
//                continue;
//            }
//            JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
//            idList.add(resultJson.get("data").getAsString());
//        }
//        return idList;
//    }
//
//    List<String> insertClassRoom(String sign, Long timestamp, String schoolDistrictId) throws InterruptedException {
//        List<ClassroomJianyuekbVo> dataList = baseClassroomMapper.getJianyueList();
//        String url  = apiUrl + "classroom/create";
//        List<String> idList = new ArrayList<>();
//        JsonParser jsonParser = new JsonParser();
//
//        String findUrl = apiUrl + "ClassRoom/page";
//
//        for (ClassroomJianyuekbVo classroom : dataList) {
//            JsonObject paramJson = new JsonObject();
//            paramJson.addProperty("schoolDistrictId", schoolDistrictId);
//            paramJson.addProperty("name", classroom.getName());
//
////            paramJson.addProperty("peopleCount", classroom.getPeopleCount());
////            paramJson.addProperty("location", classroom.getLocation());
//            paramJson.addProperty("peopleCount", 50);
//            paramJson.addProperty("location", "无");
//            paramJson.addProperty("extendId", classroom.getExtendId());
//            paramJson.addProperty("floor", classroom.getFloor());
////            String findResult = doPost(findUrl, paramJson.toString(), sign, timestamp);
////            if(findResult != null){
////                JsonObject resultJson = jsonParser.parse(findResult).getAsJsonObject();
////                JsonObject data = resultJson.get("data").getAsJsonObject();
////                if(data.get("total").getAsInt() != 0){
////                    //调用update
////                }
////            }
//
//            String result = doPost(url, paramJson.toString(), sign, timestamp);
//            if(result == null){
//                System.out.println(paramJson.toString());
//                continue;
//            }
//            JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
//            idList.add(resultJson.get("data").getAsString());
//        }
//        return idList;
//    }
//
//    List<String> insertStudent(String sign, Long timestamp, Map<Long, String> gradeMap) throws Exception {
//
//        List<StudentJianyuekbVo> dataList = baseStudentMapper.getJianyueStudentList();
//        String url  = apiUrl + "student/create";
//        List<String> idList = new ArrayList<>();
//        JsonParser jsonParser = new JsonParser();
//
//        String findUrl = apiUrl + "Student/page";
//
//        for (StudentJianyuekbVo student : dataList) {
//            JsonObject paramJson = new JsonObject();
//            paramJson.addProperty("registerNo", student.getRegisterNo());
//            paramJson.addProperty("gender", student.getGender());
//
//            paramJson.addProperty("realName", student.getRealName());
//            paramJson.addProperty("alias", student.getAlias());
//            paramJson.addProperty("extendId", student.getExtendId());
//            paramJson.addProperty("gradeSerialNo", gradeMap.get(student.getGradeSerialNo()));
////            String findResult = doPost(findUrl, paramJson.toString(), sign, timestamp);
////            if(findResult != null){
////                JsonObject resultJson = jsonParser.parse(findResult).getAsJsonObject();
////                JsonObject data = resultJson.get("data").getAsJsonObject();
////                if(data.get("total").getAsInt() != 0){
////                    //调用update
////                }
////            }
//            timestamp = System.currentTimeMillis();
//            System.out.println("timestamp:" + timestamp);
//            String md5Str = SaSecureUtil.md5("Jh&NAbn6Rm#p@6ZZ" + timestamp);
//
//
//            sign = calculateHMac("UUFM5TID45X", md5Str);
//            System.out.println("sign:" + sign);
//            String result = doPost(url, paramJson.toString(), sign, timestamp);
//            if(result == null){
//                System.out.println(paramJson.toString());
//                continue;
//            }
//            JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
//            idList.add(resultJson.get("data").getAsString());
//        }
//        return idList;
//    }
//
//    List<String> insertTeacher(String sign, Long timestamp) throws InterruptedException {
//        List<XjrUser> xjrUsers = xjrUserMapper.selectJoinList(
//            XjrUser.class, new MPJLambdaWrapper<XjrUser>()
//            .innerJoin("xjr_user_role_relation t2 on t.id = t2.user_id")
//            .eq("t2.role_id", 2)
//        );
//        String url  = apiUrl + "teacher/create";
//        List<String> idList = new ArrayList<>();
//        JsonParser jsonParser = new JsonParser();
//
//        String findUrl = apiUrl + "/Teacher/Page";
//
//        for (XjrUser user : xjrUsers) {
//            Thread.sleep(1000);
//            JsonObject paramJson = new JsonObject();
//            paramJson.addProperty("jobNumber", user.getUserName());
//            paramJson.addProperty("gender", user.getGender());
//
//            String name = user.getName().substring(0, 1) + user.getUserName();
//            paramJson.addProperty("name", name);
//            paramJson.addProperty("alias", name);
//            paramJson.addProperty("extendId", user.getId().toString());
//            String findResult = doPost(findUrl, paramJson.toString(), sign, timestamp);
//            if(findResult != null){
//                JsonObject resultJson = jsonParser.parse(findResult).getAsJsonObject();
//                JsonObject data = resultJson.get("data").getAsJsonObject();
//                if(data.get("total").getAsInt() != 0){
//                    //调用update
//                }
//            }
//
//            String result = doPost(url, paramJson.toString(), sign, timestamp);
//            if(result == null){
//                System.out.println(paramJson.toString());
//                continue;
//            }
//            JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
//            idList.add(resultJson.get("data").getAsString());
//        }
//        return idList;
//    }
//
//    List<String> insertCourse(String sign, Long timestamp){
//        List<BaseCourseSubject> list = baseCourseSubjectService.list(
//                new QueryWrapper<BaseCourseSubject>().lambda()
//                        .eq(BaseCourseSubject::getDeleteMark, DeleteMark.NODELETE.getCode())
//        );
//        String url  = apiUrl + "courseclass/Create";
//        List<String> idList = new ArrayList<>();
//        JsonParser jsonParser = new JsonParser();
//        for (BaseCourseSubject courseSubject : list) {
//            JsonObject paramJson = new JsonObject();
//            paramJson.addProperty("name", courseSubject.getName() + courseSubject.getCode());
//            paramJson.addProperty("code", courseSubject.getCode());
//            paramJson.addProperty("extendId", courseSubject.getId().toString());
//            String result = doPost(url, paramJson.toString(), sign, timestamp);
//            if(result == null){
//                System.out.println("result is null, paramJson: " + paramJson.toString());
//                continue;
//            }
//            JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
//            if(resultJson.get("code").getAsInt() == -1){
//                System.out.println("paramJson: " + paramJson.toString() + ", 返回结果：" + result);
//            }
//            idList.add(resultJson.get("data").getAsString());
//        }
//
//        return idList;
//    }
//
//
//
//    List<String> insertSemester(String sign, Long timestamp){
//        List<BaseSemester> list = baseSemesterService.list(
//            new QueryWrapper<BaseSemester>().lambda()
//            .eq(BaseSemester::getDeleteMark, DeleteMark.NODELETE.getCode())
//        );
//        String url  = apiUrl + "semester/Create";
//        List<String> idList = new ArrayList<>();
//        JsonParser jsonParser = new JsonParser();
//        SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String spring = "春";
//        String autumn = "秋";
//
//        for (BaseSemester semester : list) {
//            JsonObject paramJson = new JsonObject();
//
//            paramJson.addProperty("schoolYear", Integer.parseInt(sdfYear.format(semester.getStartDate())));
//            Integer period = null;
//            if(semester.getName().contains(String.valueOf(spring))){
//                period = 1;
//            }else if(semester.getName().contains(autumn)){
//                period = 2;
//            }
//            paramJson.addProperty("period", period);
//            paramJson.addProperty("startDate", sdf.format(semester.getStartDate()));
//            paramJson.addProperty("endDate", sdf.format(semester.getEndDate()));
//            paramJson.addProperty("extendId", semester.getId().toString());
//
//            if(semester.getStartDate() != null && semester.getEndDate() != null && semester.getEndDate().getTime() > timestamp && semester.getStartDate().getTime() < timestamp){
//                paramJson.addProperty("isCurrent", Boolean.TRUE);
//            }else{
//                paramJson.addProperty("isCurrent", Boolean.FALSE);
//            }
//            System.out.println(paramJson.toString());
//            String result = doPost(url, paramJson.toString(), sign, timestamp);
//
//            JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
//            idList.add(resultJson.get("data").getAsString());
//        }
//
//        return idList;
//    }

    /**
     *  由于简约中校区中的本部不能删除，如果没有多的校区，就只查询本部的id即可
     * @param sign 签名
     * @param timestamp 时间戳
     * @return 返回添加好的校区id
     */
    String insertSchoolDistrictData(String sign, Long timestamp){
        JsonParser jsonParser = new JsonParser();
//        String url  = apiUrl + "SchoolDistrict/Create";
//        JsonObject jsonObject = new JsonObject();
//        jsonObject.addProperty("name", "test1");
//        jsonObject.addProperty("shortName", "本部112");
//        jsonObject.addProperty("note", "本部211");
//        jsonObject.addProperty("sort", "2");
//        String result = doPost(url, jsonObject.toString(), sign, timestamp);
//        JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();

        String url  = apiUrl + "SchoolDistrict/page";
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("keyword", "本部");
        jsonObject.addProperty("pageSize", "15");
        jsonObject.addProperty("pageIndex", "1");
        String result = doPost(url, jsonObject.toString(), sign, timestamp);
        JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();

        String id = resultJson.get("data").getAsJsonObject().get("dataList").getAsJsonArray().get(0).getAsJsonObject().get("id").getAsString();
        return id;
    }

//    Map<Long, String> insertGrade(String sign, Long timestamp, String schoolDistrictId){
//        List<BaseGrade> list = baseGradeService.list(
//            new QueryWrapper<BaseGrade>().lambda()
//            .eq(BaseGrade::getDeleteMark, DeleteMark.NODELETE.getCode())
//        );
//        String url = apiUrl + "eduyear/create";
//        JsonParser jsonParser = new JsonParser();
//        Map<Long, String> idMap = new HashMap<>();
//        for (BaseGrade baseGrade : list) {
//            JsonObject paramJson = new JsonObject();
//            paramJson.addProperty("schoolDistrictId", schoolDistrictId);
//            paramJson.addProperty("period", 4);
//            paramJson.addProperty("startYear", baseGrade.getTitle().replaceAll("年", ""));
//            paramJson.addProperty("extendId", baseGrade.getId().toString());
//            paramJson.addProperty("year", 3);
//
//            String result = doPost(url, paramJson.toString(), sign, timestamp);
//
//            JsonObject resultJson = jsonParser.parse(result).getAsJsonObject();
//
//            idMap.put(baseGrade.getId(), resultJson.get("data").getAsString());
//        }
//
//        return idMap;
//    }



    public static String doGet(String httpurl) throws Exception {
        long timestamp = System.currentTimeMillis();

        String password = "";

        String md5Str = SaSecureUtil.md5(String.format("Jh&NAbn6Rm#p@6ZZ%d", timestamp));

        System.out.println(md5Str);

        String sign = calculateHMac("a7dbed0dfc70ebd92934cf9292de8749e9af01a2405217be881f9e77f6ba5320", md5Str);

        System.out.println(sign);


        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;// 返回结果字符串
        try {
            // 创建远程url连接对象
            URL url = new URL(httpurl);
            // 通过远程url连接对象打开一个连接，强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("schoolId","UUFM5TID45X");
            connection.setRequestProperty("sign",sign);
            connection.setRequestProperty("timestamp",String.format("%d",timestamp));
            // 设置连接方式：get
            connection.setRequestMethod("GET");
            // 设置连接主机服务器的超时时间：15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间：60000毫秒
            connection.setReadTimeout(60000);
            // 发送请求
            connection.connect();
            // 通过connection连接，获取输入流
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 封装输入流is，并指定字符集
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                // 存放数据
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            connection.disconnect();// 关闭远程连接
        }
        return result;
    }

    public static String doPost(String httpUrl, String param, String sign, Long timestamp) {
        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        String result = null;
        OutputStreamWriter writer = null;
        try {
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("schoolId","UUFM5TID45X");
            connection.setRequestProperty("sign",sign);
            connection.setRequestProperty("timestamp",String.format("%d",timestamp));
            // 设置连接请求方式
            connection.setRequestMethod("POST");
            // 设置连接主机服务器超时时间：15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取主机服务器返回数据超时时间：60000毫秒
            connection.setReadTimeout(60000);
            // 默认值为：false，当向远程服务器传送数据/写数据时，需要设置为true
            connection.setDoOutput(true);
            // 默认值为：true，当前向远程服务读取数据时，设置为true，该参数可有可无
            connection.setDoInput(true);
            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type", "application/json");
            // 设置鉴权信息：Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
//            connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
            writer = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
            //body参数放这里
            writer.write(param);
            writer.flush();

            writer.close();
            // 通过连接对象获取一个输出流
//            os = connection.getOutputStream();
//            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
//            os.write(param.getBytes());
            // 通过连接对象获取一个输入流，向远程读取
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }else{
                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                System.out.println(sbf.toString());
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 断开与远程地址url的连接
            connection.disconnect();
        }
        return result;
    }

    public static String doPost(String httpUrl) {
        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        String result = null;
        OutputStreamWriter writer = null;
        try {
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("schoolId","UUFM5TID45X");
            // 设置连接请求方式
            connection.setRequestMethod("POST");
            // 设置连接主机服务器超时时间：15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取主机服务器返回数据超时时间：60000毫秒
            connection.setReadTimeout(60000);
            // 默认值为：false，当向远程服务器传送数据/写数据时，需要设置为true
            connection.setDoOutput(true);
            // 默认值为：true，当前向远程服务读取数据时，设置为true，该参数可有可无
            connection.setDoInput(true);
            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type", "application/json");
            // 设置鉴权信息：Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
//            connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
            writer = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
            //body参数放这里
            writer.flush();

            writer.close();
            // 通过连接对象获取一个输出流
//            os = connection.getOutputStream();
//            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
//            os.write(param.getBytes());
            // 通过连接对象获取一个输入流，向远程读取
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 断开与远程地址url的连接
            connection.disconnect();
        }
        return result;
    }
}
