Pārlūkot izejas kodu

Merge branch 'dev' of huangzhanpeng/wlyy_management into dev

lyr 8 gadi atpakaļ
vecāks
revīzija
01abd24f09

+ 133 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/third/verified/VerifiedService.java

@ -0,0 +1,133 @@
package com.yihu.wlyy.service.third.verified;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.dict.SystemDict;
import com.yihu.wlyy.service.system.SystemDictService;
import com.yihu.wlyy.service.third.ehr.EhrService;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.DesUtils;
import com.yihu.wlyy.util.HttpClientUtil;
import com.yihu.wlyy.util.SystemConf;
import org.apache.axis.encoding.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by hzp on 2016/11/21.
 * 实名认证接口
 */
@Service
public class VerifiedService {
    //基卫服务地址
    private String jwUrl = SystemConf.getInstance().getJwUrl();
    //授权码
    private String appkey = "9683dbd88e0111e69beb0050569a506a";
    //对称加密
    private String desKey = "5063ebf54d76b16551e175fc71b0e5c7";
    @Autowired
    private ObjectMapper objectMapper = new ObjectMapper();
    /**
     * 获取随机数
     * @return
     * @throws Exception
     */
    private JSONObject getRandomNumber()  throws Exception
    {
        JSONObject data =  new JSONObject();
        String url = "http://auth.xmca.com.cn:9846/identification/api/v1.0/getRandomNumber.json";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("sessionID", "1"));
        params.add(new BasicNameValuePair("appKey", appkey));
        String response = HttpClientUtil.post(url, params, "UTF-8");
        JSONObject responseJson = new JSONObject(response);
        if("200".equals(responseJson.optString("code")))
        {
            data = responseJson.getJSONObject("data");
        }
        else{
            throw new Exception("获取随机数失败:"+responseJson.optString("message"));
        }
        return data;
    }
    /**
     * 对称加密
     */
    private String getDesString(String str)  throws Exception
    {
        return DesUtils.encode(str,desKey);
    }
    /********************************************************************************************************************/
    /**
     * 身份认证
     */
    public void faceVerified(String idcard, String username, String picData) throws Exception {
        JSONObject random = getRandomNumber();
        String businessSerial = random.optString("businessSerial");
        String randomNumber = random.optString("randomNumber");
        String sessionID = random.optString("sessionID");
        String url = "http://auth.xmca.com.cn:9846/identification/api/v1.0/authenticate.json";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("idcard", getDesString(idcard)));
        params.add(new BasicNameValuePair("username", getDesString(username)));
        //params.add(new BasicNameValuePair("validityStartDate", validityStartDate));
        //validityEndDate
        params.add(new BasicNameValuePair("authenMode", "8"));
        params.add(new BasicNameValuePair("picData", picData));
        //authenData
        //idData
        params.add(new BasicNameValuePair("businessSerial", businessSerial));
        params.add(new BasicNameValuePair("sessionID", sessionID));
        params.add(new BasicNameValuePair("appKey", appkey));
        String response = HttpClientUtil.post(url, params, "UTF-8");
        JSONObject responseJson = new JSONObject(response);
        if("200".equals(responseJson.optString("code")))
        {
            JSONObject data = responseJson.getJSONObject("data");
            String result = responseJson.optString("authenResult");
            if(!result.startsWith("00"))
            {
               if(result.startsWith("1"))
               {
                   throw new Exception("DN及保留数据匹配失败!");
               }
                else if(result.startsWith("01")){
                   throw new Exception("人像匹配失败!");
               }
            }
        }
        else{
            throw new Exception("身份认证失败:"+responseJson.optString("message"));
        }
    }
}

+ 76 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/util/DesUtils.java

@ -0,0 +1,76 @@
/**
 * Copyright 2015 Software innovation and R & D center. All rights reserved.
 * File Name: DesUtils.java
 * Encoding UTF-8
 * Version: 0.0.1
 * History:	2016年10月31日
 */
package com.yihu.wlyy.util;
import org.apache.shiro.codec.Base64;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
/**
 * 3des加密解密(base64)
 * @author: qigui.su
 * @version Revision: 0.0.1
 * @Date: 2016年10月31日
 */
public class DesUtils {
	 // 向量  
    private final static String iv = "01234567" ;  
    // 加解密统一使用的编码方式  
    private final static String encoding = "utf-8" ;  
       
    /** 
     * 3DES加密 
     * @author: qigui.su
     * @param plainText 内容
     * @param key 密匙不小于24
     * @return
     * @throws Exception
     */
    public static String encode(String plainText,String key) throws Exception {  
        Key deskey = null ;  
        DESedeKeySpec spec = new DESedeKeySpec(key.getBytes());  
        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "DESede" );  
        deskey = keyfactory.generateSecret(spec);  
       
        Cipher cipher = Cipher.getInstance( "DESede/CBC/PKCS5Padding" );  
        IvParameterSpec ips = new IvParameterSpec(iv.getBytes());  
        cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);  
        byte [] encryptData = cipher.doFinal(plainText.getBytes(encoding));  
        return Base64.encodeToString(encryptData);
    }  
       
    /** 
     * 3des解密
     * @author: qigui.su
     * @param encryptText 内容
     * @param key 密匙不小于24位
     * @return
     * @throws Exception
     */
    public static String decode(String encryptText, String key) throws Exception {  
        Key deskey = null ;  
        DESedeKeySpec spec = new DESedeKeySpec(key.getBytes());   
        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "DESede" );  
        deskey = keyfactory.generateSecret(spec);  
        Cipher cipher = Cipher.getInstance( "DESede/CBC/PKCS5Padding" );  
        IvParameterSpec ips = new IvParameterSpec(iv.getBytes());  
        cipher.init(Cipher.DECRYPT_MODE, deskey, ips);  
       
        byte [] decryptData = cipher.doFinal(Base64.decode(encryptText));  
       
        return new String(decryptData, encoding);  
    }  
}

+ 77 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/verified/VerifiedController.java

@ -0,0 +1,77 @@
package com.yihu.wlyy.web.common.verified;
import com.yihu.wlyy.service.third.verified.VerifiedService;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.ImageCompress;
import com.yihu.wlyy.util.SystemConf;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.apache.commons.io.FileUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import sun.misc.BASE64Encoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
@Controller
@RequestMapping(value = "/verified", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "实名认证")
public class VerifiedController extends BaseController {
	@Autowired
	private VerifiedService verifiedService;
	/**
	 * 人脸识别
	 */
	@RequestMapping(value = "face", method = RequestMethod.POST)
	@ResponseBody
	public String face(
			@ApiParam(name="idcard",value="身份证号码",defaultValue = "350628198802200051")
			@RequestParam(value="idcard",required = true) String idcard,
			@ApiParam(name="username",value="姓名",defaultValue = "黄展鹏")
			@RequestParam(value="username",required = true) String username,
			@ApiParam(name="picData",value="图片Base64转化后的输入流",defaultValue = "")
			@RequestBody String picData) throws Exception {
		try {
			/*// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
			String imgFile = "D:/1.jpg";// 待处理的图片
			InputStream in = null;
			byte[] data = null;
			// 读取图片字节数组
			try {
				in = new FileInputStream(imgFile);
				data = new byte[in.available()];
				in.read(data);
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			// 对字节数组Base64编码
			BASE64Encoder encoder = new BASE64Encoder();
			picData = encoder.encode(data);*/
			verifiedService.faceVerified(idcard,username,picData);
			return write(200, "人脸识别成功!");
		} catch (Exception e) {
			e.printStackTrace();
			return error(-1, e.getMessage());
		}
	}
}