diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java new file mode 100644 index 0000000..64b5120 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.register.service; + +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.service.IService; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IIrisDataService extends IService { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java new file mode 100644 index 0000000..64b5120 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.register.service; + +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.service.IService; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IIrisDataService extends IService { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java new file mode 100644 index 0000000..38fe2b1 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.register.service.impl; + +import com.casic.missiles.modular.register.dao.IrisDataMapper; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Service +public class IrisDataServiceImpl extends ServiceImpl implements IIrisDataService { + @Override + public Map selectByPersonId(String personId){ + return this.baseMapper.selectByPersonId(personId); + } +} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java new file mode 100644 index 0000000..64b5120 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.register.service; + +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.service.IService; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IIrisDataService extends IService { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java new file mode 100644 index 0000000..38fe2b1 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.register.service.impl; + +import com.casic.missiles.modular.register.dao.IrisDataMapper; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Service +public class IrisDataServiceImpl extends ServiceImpl implements IIrisDataService { + @Override + public Map selectByPersonId(String personId){ + return this.baseMapper.selectByPersonId(personId); + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java new file mode 100644 index 0000000..5e9403d --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.register.warpper; + + +import com.casic.missiles.core.base.warpper.BaseControllerWarpper; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.core.util.ToolUtil; +import org.springframework.beans.factory.annotation.Value; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +/** + * 虹膜数据的包装类 + * + * @date 2019年12月5日10:59:02 + */ +public class IrisDataWarpper extends BaseControllerWarpper { + + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + public IrisDataWarpper(Object list) { + super(list); + } + ICommonPermissionService service = SpringContextHolder.getBean(ICommonPermissionService.class); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Override + public void warpTheMap(Map map) { + + //解密身份证号 + if (!ToolUtil.isEmpty(map.get("idCardNo"))) { + String idCardNo = formatter.format(map.get("createTime")); + map.put("idCardNo",idCardNo); + } + //眼部图片加路径 + if (!ToolUtil.isEmpty(map.get("leftImage1"))) { + String leftImage1 = filePath + String.valueOf(map.get("leftImage1")); + map.put("leftImage1",leftImage1); + } + if (!ToolUtil.isEmpty(map.get("leftImage2"))) { + String leftImage2 = filePath + String.valueOf(map.get("leftImage2")); + map.put("leftImage2",leftImage2); + } + if (!ToolUtil.isEmpty(map.get("rightImage1"))) { + String rightImage1 = filePath + String.valueOf(map.get("rightImage1")); + map.put("rightImage1",rightImage1); + } + if (!ToolUtil.isEmpty(map.get("rightImage2"))) { + String rightImage2 = filePath + String.valueOf(map.get("rightImage2")); + map.put("rightImage2",rightImage2); + } + + + } + +} diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java new file mode 100644 index 0000000..64b5120 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.register.service; + +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.service.IService; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IIrisDataService extends IService { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java new file mode 100644 index 0000000..38fe2b1 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.register.service.impl; + +import com.casic.missiles.modular.register.dao.IrisDataMapper; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Service +public class IrisDataServiceImpl extends ServiceImpl implements IIrisDataService { + @Override + public Map selectByPersonId(String personId){ + return this.baseMapper.selectByPersonId(personId); + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java new file mode 100644 index 0000000..5e9403d --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.register.warpper; + + +import com.casic.missiles.core.base.warpper.BaseControllerWarpper; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.core.util.ToolUtil; +import org.springframework.beans.factory.annotation.Value; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +/** + * 虹膜数据的包装类 + * + * @date 2019年12月5日10:59:02 + */ +public class IrisDataWarpper extends BaseControllerWarpper { + + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + public IrisDataWarpper(Object list) { + super(list); + } + ICommonPermissionService service = SpringContextHolder.getBean(ICommonPermissionService.class); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Override + public void warpTheMap(Map map) { + + //解密身份证号 + if (!ToolUtil.isEmpty(map.get("idCardNo"))) { + String idCardNo = formatter.format(map.get("createTime")); + map.put("idCardNo",idCardNo); + } + //眼部图片加路径 + if (!ToolUtil.isEmpty(map.get("leftImage1"))) { + String leftImage1 = filePath + String.valueOf(map.get("leftImage1")); + map.put("leftImage1",leftImage1); + } + if (!ToolUtil.isEmpty(map.get("leftImage2"))) { + String leftImage2 = filePath + String.valueOf(map.get("leftImage2")); + map.put("leftImage2",leftImage2); + } + if (!ToolUtil.isEmpty(map.get("rightImage1"))) { + String rightImage1 = filePath + String.valueOf(map.get("rightImage1")); + map.put("rightImage1",rightImage1); + } + if (!ToolUtil.isEmpty(map.get("rightImage2"))) { + String rightImage2 = filePath + String.valueOf(map.get("rightImage2")); + map.put("rightImage2",rightImage2); + } + + + } + +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 6f4806a..9d289a4 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -202,6 +202,7 @@ groovy-all true + diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java new file mode 100644 index 0000000..64b5120 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.register.service; + +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.service.IService; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IIrisDataService extends IService { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java new file mode 100644 index 0000000..38fe2b1 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.register.service.impl; + +import com.casic.missiles.modular.register.dao.IrisDataMapper; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Service +public class IrisDataServiceImpl extends ServiceImpl implements IIrisDataService { + @Override + public Map selectByPersonId(String personId){ + return this.baseMapper.selectByPersonId(personId); + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java new file mode 100644 index 0000000..5e9403d --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.register.warpper; + + +import com.casic.missiles.core.base.warpper.BaseControllerWarpper; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.core.util.ToolUtil; +import org.springframework.beans.factory.annotation.Value; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +/** + * 虹膜数据的包装类 + * + * @date 2019年12月5日10:59:02 + */ +public class IrisDataWarpper extends BaseControllerWarpper { + + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + public IrisDataWarpper(Object list) { + super(list); + } + ICommonPermissionService service = SpringContextHolder.getBean(ICommonPermissionService.class); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Override + public void warpTheMap(Map map) { + + //解密身份证号 + if (!ToolUtil.isEmpty(map.get("idCardNo"))) { + String idCardNo = formatter.format(map.get("createTime")); + map.put("idCardNo",idCardNo); + } + //眼部图片加路径 + if (!ToolUtil.isEmpty(map.get("leftImage1"))) { + String leftImage1 = filePath + String.valueOf(map.get("leftImage1")); + map.put("leftImage1",leftImage1); + } + if (!ToolUtil.isEmpty(map.get("leftImage2"))) { + String leftImage2 = filePath + String.valueOf(map.get("leftImage2")); + map.put("leftImage2",leftImage2); + } + if (!ToolUtil.isEmpty(map.get("rightImage1"))) { + String rightImage1 = filePath + String.valueOf(map.get("rightImage1")); + map.put("rightImage1",rightImage1); + } + if (!ToolUtil.isEmpty(map.get("rightImage2"))) { + String rightImage2 = filePath + String.valueOf(map.get("rightImage2")); + map.put("rightImage2",rightImage2); + } + + + } + +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 6f4806a..9d289a4 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -202,6 +202,7 @@ groovy-all true + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 48d4599..5fa55b1 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.EnableTransactionManagement; + import java.io.FileNotFoundException; /** diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java new file mode 100644 index 0000000..64b5120 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.register.service; + +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.service.IService; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IIrisDataService extends IService { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java new file mode 100644 index 0000000..38fe2b1 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.register.service.impl; + +import com.casic.missiles.modular.register.dao.IrisDataMapper; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Service +public class IrisDataServiceImpl extends ServiceImpl implements IIrisDataService { + @Override + public Map selectByPersonId(String personId){ + return this.baseMapper.selectByPersonId(personId); + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java new file mode 100644 index 0000000..5e9403d --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.register.warpper; + + +import com.casic.missiles.core.base.warpper.BaseControllerWarpper; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.core.util.ToolUtil; +import org.springframework.beans.factory.annotation.Value; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +/** + * 虹膜数据的包装类 + * + * @date 2019年12月5日10:59:02 + */ +public class IrisDataWarpper extends BaseControllerWarpper { + + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + public IrisDataWarpper(Object list) { + super(list); + } + ICommonPermissionService service = SpringContextHolder.getBean(ICommonPermissionService.class); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Override + public void warpTheMap(Map map) { + + //解密身份证号 + if (!ToolUtil.isEmpty(map.get("idCardNo"))) { + String idCardNo = formatter.format(map.get("createTime")); + map.put("idCardNo",idCardNo); + } + //眼部图片加路径 + if (!ToolUtil.isEmpty(map.get("leftImage1"))) { + String leftImage1 = filePath + String.valueOf(map.get("leftImage1")); + map.put("leftImage1",leftImage1); + } + if (!ToolUtil.isEmpty(map.get("leftImage2"))) { + String leftImage2 = filePath + String.valueOf(map.get("leftImage2")); + map.put("leftImage2",leftImage2); + } + if (!ToolUtil.isEmpty(map.get("rightImage1"))) { + String rightImage1 = filePath + String.valueOf(map.get("rightImage1")); + map.put("rightImage1",rightImage1); + } + if (!ToolUtil.isEmpty(map.get("rightImage2"))) { + String rightImage2 = filePath + String.valueOf(map.get("rightImage2")); + map.put("rightImage2",rightImage2); + } + + + } + +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 6f4806a..9d289a4 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -202,6 +202,7 @@ groovy-all true + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 48d4599..5fa55b1 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.EnableTransactionManagement; + import java.io.FileNotFoundException; /** diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 73ecf80..658e892 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -3,7 +3,8 @@ ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://192.168.8.201:3306/casic_iris?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + //url: jdbc:mysql://192.168.8.201:3306/casic_iris?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://localhost:3306/casic_iris?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull username: root password: Casic203 initial-size: 2 diff --git a/casic-iris-register/pom.xml b/casic-iris-register/pom.xml new file mode 100644 index 0000000..7b6dbad --- /dev/null +++ b/casic-iris-register/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.casic + casic-iris-parent + 1.0.0-SNAPSHOT + ../pom.xml + + + casic-iris-register + ${pro.version} + jar + casic-iris-register + 虹膜注册 + + + + + + com.casic + casic-core + ${casic.version} + + + + com.casic + casic-iris-support + ${casic.version} + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-test + test + + + commons-io + commons-io + + + + org.apache.commons + commons-lang3 + + + + + + + + + + src/main/java + + **/*.xml + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java new file mode 100644 index 0000000..661b089 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisDataController.java @@ -0,0 +1,267 @@ +package com.casic.missiles.modular.register.controller; + + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.beans.factory.annotation.Autowired; +import com.baomidou.mybatisplus.plugins.Page; +import com.baomidou.mybatisplus.mapper.EntityWrapper; + +import java.io.*; +import java.net.Socket; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +/** + * 控制器 + * + * @author dev + * @Date 2019-11-29 17:41:20 + */ +@Controller +@RequestMapping("/irisData") +public class IrisDataController extends BaseController { + + @Value("${casic.file.uploadPath:C://casic//tmp//}") + private String filePath; + + @Autowired + private IIrisDataService irisDataService; + + /** + * 虹膜注册接口 + */ + @RequestMapping(value = "/add") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId,String idCardNo) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("已注册过该人员的虹膜数据"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = new IrisData(); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = personId+"_left_1.bmp"; + else if(i==1)fileName=personId+"_left_2.bmp"; + else if(i==2)fileName=personId+"_right_1.bmp"; + else if(i==3)fileName=personId+"_right_2.bmp"; + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + irisData.setLeftImage1(fileName); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + irisData.setLeftImage2(fileName); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + irisData.setRightImage1(fileName); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + irisData.setRightImage2(fileName); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisData.setIdCardNo(idCardNo); + irisData.setPersonId(Long.valueOf(personId)); + irisDataService.insert(irisData); + return ResponseData.success(); + } + + /** + * 修改虹膜数据接口 + */ + @RequestMapping(value = "/update") + @ResponseBody + public Object imageUpload(@RequestParam("images") List images,@RequestParam("personId")String personId) throws IOException { + Map map = null; + map = irisDataService.selectByPersonId(personId); + if(map!=null){ + return ResponseData.error("不存在该记录"); + } + + if(images.size()!=4){ + return ResponseData.error("虹膜图像必须为左眼2副,右眼2副,共4副"); + } + + IrisData irisData = irisDataService.selectById(map.get("id").toString()); + + int i = 0; + for (MultipartFile image : images) { + if (!image.isEmpty()) { + InputStream fis = image.getInputStream(); + byte[] result = getIrisCode(fis); + if(result != null && result.length==1024){ + String fileName=""; + if(i==0) fileName = irisData.getLeftImage1(); + else if(i==1)fileName= irisData.getLeftImage2(); + else if(i==2)fileName= irisData.getRightImage1(); + else if(i==3)fileName= irisData.getRightImage2(); + + String pathName = this.filePath + fileName; + File dir = new File(this.filePath); + if (!dir.exists()) { + dir.mkdirs(); + //logger.info("创建文件夹路径为:{}", dir.getPath()); + } + + image.transferTo(new File(pathName)); + + if(i==0) { + irisData.setLeftIrisCode1(result); + } + else if(i==1) { + irisData.setLeftIrisCode2(result); + } + else if(i==2) { + irisData.setRightIrisCode1(result); + } + else if(i==3){ + irisData.setRightIrisCode2(result); + } + i++; + }else { + return ResponseData.error("获取虹膜编码失败,请重试"); + } + } else { + return ResponseData.error("图像为空"); + } + } + + irisDataService.updateById(irisData); + return ResponseData.success(); + } + + /** + * 详情 + */ + @RequestMapping(value = "/detail") + @ResponseBody + public Object detail(@RequestParam("personId") String personId) { + Map irisData = null; + irisData = irisDataService.selectByPersonId(personId); + if(irisData==null){ + return ResponseData.error("不存在该条记录"); + } + return ResponseData.success(irisData); + } + + + /** + * 下发虹膜数据接口 + */ + @RequestMapping(value = "/sendData") + @ResponseBody + public Object sendData() throws IOException { + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = "update".getBytes(); + os.write(buf, 0, buf.length); + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + byte[] bufIn = new byte[1024]; + is.read(bufIn); + String msg = new String(bufIn); + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + if(!"ok".equals(msg)){ + return ResponseData.error("出现异常,下发失败"); + } + + return ResponseData.success(); + } + + + + //与c#的服务通信,获取虹膜编码 + private byte[] getIrisCode(InputStream fis) throws IOException { + byte[] irisCode = new byte[1024]; + + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket("localhost", 8888); + + //2.获取输出流,向服务器端发送信息 + OutputStream os=socket.getOutputStream();//字节输出流 + byte[] buf = new byte[4096]; + int len=0; + while((len = fis.read(buf))!=-1) { + os.write(buf, 0, len); + } + socket.shutdownOutput();//关闭输出流 + + //3.获取输入流,读取服务器端的响应信息 + InputStream is=socket.getInputStream(); + + byte[] bufIn = new byte[1024]; + int num =0; + int totalNum=0; + while ((num = is.read(bufIn))!=-1){ + System.arraycopy(bufIn,0,irisCode,totalNum,num); + totalNum = totalNum+num; + } + + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + if(totalNum==1024){ + return irisCode; + } + else return null; + } + + +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java new file mode 100644 index 0000000..45d1421 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/IrisDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.register.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * Mapper 接口 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IrisDataMapper extends BaseMapper { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml new file mode 100644 index 0000000..32d211a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dao/mapping/IrisDataMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID AS id, PERSON_ID AS personId, ID_CARD_NO AS idCardNo, LEFT_IRIS_CODE1 AS leftIrisCode1, LEFT_IRIS_CODE2 AS leftIrisCode2, LEFT_IRIS_CODE3 AS leftIrisCode3, RIGHT_IRIS_CODE1 AS rightIrisCode1, RIGHT_IRIS_CODE2 AS rightIrisCode2, RIGHT_IRIS_CODE3 AS rightIrisCode3 + ,LEFT_IMAGE1 as leftImage1,LEFT_IMAGE2 as leftImage2,LEFT_IMAGE3 as leftImage3,RIGHT_IMAGE1 as rightImage1,RIGHT_IMAGE2 as rightImage2,RIGHT_IMAGE3 as rightImage3 + + + + + + diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java new file mode 100644 index 0000000..d7f9d3a --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/model/IrisData.java @@ -0,0 +1,114 @@ +package com.casic.missiles.modular.register.model; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; + +import java.io.Serializable; +import java.util.Arrays; + +/** + *

+ * + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Data +@TableName("iris_data") +public class IrisData extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID",type= IdType.ID_WORKER) + private Long id; + /** + * 对应person表的主键 + */ + @TableField("PERSON_ID") + private Long personId; + /** + * 身份证号 + */ + @TableField("ID_CARD_NO") + private String idCardNo; + /** + * 左眼虹膜编码 + */ + @TableField("LEFT_IRIS_CODE1") + private byte[] leftIrisCode1; + /** + * 左眼虹膜编码2 + */ + @TableField("LEFT_IRIS_CODE2") + private byte[] leftIrisCode2; + @TableField("LEFT_IRIS_CODE3") + private byte[] leftIrisCode3; + /** + * 右眼虹膜编码1 + */ + @TableField("RIGHT_IRIS_CODE1") + private byte[] rightIrisCode1; + /** + * 右眼虹膜编码2 + */ + @TableField("RIGHT_IRIS_CODE2") + private byte[] rightIrisCode2; + /** + * 右眼虹膜编码3 + */ + @TableField("RIGHT_IRIS_CODE3") + private byte[] rightIrisCode3; + + @TableField("LEFT_IMAGE1") + private String leftImage1; + @TableField("LEFT_IMAGE2") + private String leftImage2; + @TableField("LEFT_IMAGE3") + private String leftImage3; + @TableField("RIGHT_IMAGE1") + private String rightImage1; + @TableField("RIGHT_IMAGE2") + private String rightImage2; + @TableField("RIGHT_IMAGE3") + private String rightImage3; + + + + + @Override + protected Serializable pkVal() { + return this.id; + } + + + @Override + public String toString() { + return "IrisData{" + + "id=" + id + + ", personId=" + personId + + ", idCardNo='" + idCardNo + '\'' + + ", leftIrisCode1=" + Arrays.toString(leftIrisCode1) + + ", leftIrisCode2=" + Arrays.toString(leftIrisCode2) + + ", leftIrisCode3=" + Arrays.toString(leftIrisCode3) + + ", rightIrisCode1=" + Arrays.toString(rightIrisCode1) + + ", rightIrisCode2=" + Arrays.toString(rightIrisCode2) + + ", rightIrisCode3=" + Arrays.toString(rightIrisCode3) + + ", leftImage1='" + leftImage1 + '\'' + + ", leftImage2='" + leftImage2 + '\'' + + ", leftImage3='" + leftImage3 + '\'' + + ", rightImage1='" + rightImage1 + '\'' + + ", rightImage2='" + rightImage2 + '\'' + + ", rightImage3='" + rightImage3 + '\'' + + '}'; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java new file mode 100644 index 0000000..64b5120 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/IIrisDataService.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.register.service; + +import com.casic.missiles.modular.register.model.IrisData; +import com.baomidou.mybatisplus.service.IService; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +public interface IIrisDataService extends IService { + Map selectByPersonId(@Param("personId") String personId); +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java new file mode 100644 index 0000000..38fe2b1 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/service/impl/IrisDataServiceImpl.java @@ -0,0 +1,26 @@ +package com.casic.missiles.modular.register.service.impl; + +import com.casic.missiles.modular.register.dao.IrisDataMapper; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author stylefeng123 + * @since 2019-11-29 + */ +@Service +public class IrisDataServiceImpl extends ServiceImpl implements IIrisDataService { + @Override + public Map selectByPersonId(String personId){ + return this.baseMapper.selectByPersonId(personId); + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java new file mode 100644 index 0000000..5e9403d --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/warpper/IrisDataWarpper.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.register.warpper; + + +import com.casic.missiles.core.base.warpper.BaseControllerWarpper; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.util.SpringContextHolder; +import com.casic.missiles.core.util.ToolUtil; +import org.springframework.beans.factory.annotation.Value; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +/** + * 虹膜数据的包装类 + * + * @date 2019年12月5日10:59:02 + */ +public class IrisDataWarpper extends BaseControllerWarpper { + + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + public IrisDataWarpper(Object list) { + super(list); + } + ICommonPermissionService service = SpringContextHolder.getBean(ICommonPermissionService.class); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Override + public void warpTheMap(Map map) { + + //解密身份证号 + if (!ToolUtil.isEmpty(map.get("idCardNo"))) { + String idCardNo = formatter.format(map.get("createTime")); + map.put("idCardNo",idCardNo); + } + //眼部图片加路径 + if (!ToolUtil.isEmpty(map.get("leftImage1"))) { + String leftImage1 = filePath + String.valueOf(map.get("leftImage1")); + map.put("leftImage1",leftImage1); + } + if (!ToolUtil.isEmpty(map.get("leftImage2"))) { + String leftImage2 = filePath + String.valueOf(map.get("leftImage2")); + map.put("leftImage2",leftImage2); + } + if (!ToolUtil.isEmpty(map.get("rightImage1"))) { + String rightImage1 = filePath + String.valueOf(map.get("rightImage1")); + map.put("rightImage1",rightImage1); + } + if (!ToolUtil.isEmpty(map.get("rightImage2"))) { + String rightImage2 = filePath + String.valueOf(map.get("rightImage2")); + map.put("rightImage2",rightImage2); + } + + + } + +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 6f4806a..9d289a4 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -202,6 +202,7 @@ groovy-all true + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index 48d4599..5fa55b1 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.EnableTransactionManagement; + import java.io.FileNotFoundException; /** diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 73ecf80..658e892 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -3,7 +3,8 @@ ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://192.168.8.201:3306/casic_iris?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + //url: jdbc:mysql://192.168.8.201:3306/casic_iris?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://localhost:3306/casic_iris?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull username: root password: Casic203 initial-size: 2 diff --git a/pom.xml b/pom.xml index 2e7a9b0..92aa7c3 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ casic-iris-acs casic-iris-device casic-iris-support + casic-iris-register @@ -86,6 +87,11 @@ casic-iris-support ${casic.version} + + com.casic + casic-iris-register + ${casic.version} +