学校运营系统设计

本文主要探讨了学校运营系统的建表过程,详细介绍了如何构建高效、实用的数据表结构,以支撑学校日常运营管理工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:建表

package com.whty.common.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.StringUtils;
import com.whty.common.annotation.Verif;

public class InterfaceClient {
	public static String url = UrlUtil.URL;
	public static String appKey = UrlUtil.APPKEY;
	public static String appSecret = UrlUtil.APPSECRET;
	public static String messageFormat = UrlUtil.MESSAGEFORMAT;
	public static String v = UrlUtil.INTERFACE_V;
	public static String timeoutStr = UrlUtil.TIMEOUT;
	private static Object obj;
	private static String method;
	public static String result = "";
	
	/**
	 * 调用接口
	 * @param obj 请求对象参数
	 * @param method 请求的接口名
	 * @return
	 */
	public static String interfaceClient(Object object,String methodName){
		setMethod(methodName);
		setObj(object);
		int timeout = getTimeOut(methodName);
		
		 Runnable rb=new Runnable() {  
            @Override  
            public void run() {  
            	InterfaceClient ic=new InterfaceClient();  
                ic.dosth();//调用外部接口  
            }  
        };  
	        
        try {  
            long s=Calendar.getInstance().getTimeInMillis();  
            callSth(rb,TimeUnit.MILLISECONDS,timeout);  
            System.out.println(">>>>>调用外部接口("+methodName+")运行时间:"+(Calendar.getInstance().getTimeInMillis()-s)+"毫秒,入参:"+JsonUtils.toJson(object));  
        } catch (Exception e) {   
        	result = "";
            System.err.println(">>>>>超时设置为:"+timeout+",你调用外部接口("+methodName+")超时了!,入参:"+JsonUtils.toJson(object));  
        }  
	        
		return result;
	}
	
	/**
	 * 
	 * @Description:调用接口
	 * @param obj 请求对象参数
	 * @param method 请求的接口名
	 * @param sessionId sessionId
	 * @return
	 * String
	 */
	public static String interfaceClient(Object obj,String method,String sessionId){
		
		try {
			String result = HTTPUtil.doPost(url, bingParam(obj,method,sessionId), "utf-8");
			return result;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static String initparam(Map<String, String> form,String appSecret){
		 String [] keyAndValue = null;
		 String [] temp = null;
		 //参与签名参数
		 String sign="";
		 if(StringUtils.isNotEmpty(sign)){
			 sign = sign.substring(0,sign.length()-4);
			 keyAndValue = sign.split("val_");
			 for(int i=0;i<keyAndValue.length;i++){
				 temp = keyAndValue[i].split("key_");
				 form.put(temp[0], temp[1]);
			 }
		 }
		 String signStr = Sign.sign(form, appSecret);
	     form.put("sign", signStr);
		return signStr;
	}
	
	/**
	 * 封装参数
	 * @param obj
	 * @param method
	 * @return
	 */
	public static TreeMap<String, String> bingParam(Object obj,String method,String sessionId){
		TreeMap<String, String> para = new TreeMap<String, String>();//不需要签名
		Map<String, String> sign = new  HashMap<String, String>();//需要签名
		if(obj != null){
			Field[] fields = obj.getClass().getDeclaredFields();
			for (Field field : fields) {
				if(field.isAnnotationPresent(Verif.class)){
					String result = getFieldValueByName(field.getName(), obj).toString();
					if(StringUtils.isNotBlank(result)){
						Verif value = field.getAnnotation(Verif.class);
						if(value.sign()){
							sign.put(field.getName(), result);
						}else{
							para.put(field.getName(), result);
						}
					}
				}
			}
		}
		sign.put("appKey", appKey);
		sign.put("messageFormat", messageFormat);
		sign.put("method", method);
		sign.put("v", v);
		//登录接口权限验证
		if(StringUtils.isNotBlank(sessionId)){
			sign.put("sessionId", sessionId);
		}
		sign.put("sign", InterfaceClient.initparam(sign,appSecret));
		para.putAll(sign);
		return para;
	}
	
	/**
	 * 获取实体中属性的值
	 * @param fieldName
	 * @param o
	 * @return
	 */
	public static Object getFieldValueByName(String fieldName, Object o) {  
      try {    
    	   String getter = "";
    	   //判断第二个字母是不是小写
    	   if (Character.isLowerCase(fieldName.toString().charAt(1))) {
    		   String firstLetter = fieldName.substring(0, 1).toUpperCase();    
               getter = "get" + firstLetter + fieldName.substring(1);  
    	   } else {
               getter = "get" + fieldName;    
    	   }
           Method method = o.getClass().getMethod(getter, new Class[] {});    
           Object value = method.invoke(o, new Object[] {});
           if(null == value) value="";
           return value;    
       } catch (Exception e) {    
           return "";    
       }    
	}

	public static void setObj(Object obj) {
		InterfaceClient.obj = obj;
	}

	public static void setMethod(String method) {
		InterfaceClient.method = method;
	}
	
	/**
	 * 特殊接口超时配置
	 * @param method
	 * @return
	 */
	public static int getTimeOut(String method){
		int timeout = 10;
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("t.report.examReport", 30);//查询报告接口
		map.put("t.report.markExam", 300);//查询报告接口
		map.put("t.report.queryExamBindStudent", 150);//查询报告接口
		map.put("t.report.examQuestionScoreInfo", 30);//查询报告接口
		map.put("aam.setUserInfo", 30);//修改学生信息(教育云平台)
		map.put("t.report.saveExamScoreReport", 300);//生成报告接口
		map.put("t.ep.saveUpdatePaper", 40);//存储答题卡信息
		map.put("t.report.createExamAnswerSheet", 40);//存储答题卡坐标信息
		map.put("t.placementtest.createByClass", 40);//按班级布置测验
		map.put("t.placementFile.uploader", 60);//布置测验-自定义导入
		map.put("aam.classQueryForClassPublish", 40);//布置测验-初始化
		map.put("ylPrint.newBindUserBatchV1", 900);//批量绑卡接口
		if(map.containsKey(method) ){
			timeout = map.get(method);
		}else{
			if(null != timeoutStr && !"null".equals(timeoutStr) && !"".equals(timeoutStr) )
				timeout = Integer.parseInt(timeoutStr);
		}
		return timeout*1000;
	}
	
	private static ExecutorService executor=Executors.newCachedThreadPool(new ThreadFactory() {  
        int ncount=0;  
        @Override  
        public Thread newThread(Runnable r) {  
            ncount++;  
            Thread invokeThread=new Thread(r);  
            invokeThread.setName("Invoker-thread-"+ncount);  
            invokeThread.setDaemon(true);  
            return invokeThread;  
        }  
    });  
      
    public static void callSth(Runnable task,TimeUnit unit,long timeout)throws Exception{  
        Future<?> futureResult=executor.submit(task);  
        futureResult.get(timeout, unit);  
    }
    
    //调用外部接口
    public void dosth(){
    	try {
    		result = HTTPUtil.doPost(url, bingParam(obj,method,null), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值