diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java index 1d3b4ec..bb379bc 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -1,21 +1,44 @@ package com.casic.missiles.modular.register.controller; +import com.baomidou.mybatisplus.toolkit.IdWorker; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import java.util.ArrayList; -import java.util.List; +import java.io.IOException; +import java.util.*; @Controller public class IrisOfflineController { @Autowired private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; @RequestMapping("/dept/listAll") @ResponseBody @@ -27,4 +50,147 @@ } return ResponseData.success(deptDTOS); } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java index 1d3b4ec..bb379bc 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -1,21 +1,44 @@ package com.casic.missiles.modular.register.controller; +import com.baomidou.mybatisplus.toolkit.IdWorker; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import java.util.ArrayList; -import java.util.List; +import java.io.IOException; +import java.util.*; @Controller public class IrisOfflineController { @Autowired private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; @RequestMapping("/dept/listAll") @ResponseBody @@ -27,4 +50,147 @@ } return ResponseData.success(deptDTOS); } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java index 1d3b4ec..bb379bc 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -1,21 +1,44 @@ package com.casic.missiles.modular.register.controller; +import com.baomidou.mybatisplus.toolkit.IdWorker; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import java.util.ArrayList; -import java.util.List; +import java.io.IOException; +import java.util.*; @Controller public class IrisOfflineController { @Autowired private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; @RequestMapping("/dept/listAll") @ResponseBody @@ -27,4 +50,147 @@ } return ResponseData.success(deptDTOS); } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java index 1d3b4ec..bb379bc 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -1,21 +1,44 @@ package com.casic.missiles.modular.register.controller; +import com.baomidou.mybatisplus.toolkit.IdWorker; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import java.util.ArrayList; -import java.util.List; +import java.io.IOException; +import java.util.*; @Controller public class IrisOfflineController { @Autowired private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; @RequestMapping("/dept/listAll") @ResponseBody @@ -27,4 +50,147 @@ } return ResponseData.success(deptDTOS); } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} 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 index 105479d..e384542 100644 --- 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 @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java index 1d3b4ec..bb379bc 100644 --- a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/controller/IrisOfflineController.java @@ -1,21 +1,44 @@ package com.casic.missiles.modular.register.controller; +import com.baomidou.mybatisplus.toolkit.IdWorker; import com.casic.missiles.core.base.response.ResponseData; import com.casic.missiles.core.common.service.ICommonDeptService; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.core.common.service.ICommonPersonService; +import com.casic.missiles.core.util.DateUtil; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.register.dto.DeptDTO; +import com.casic.missiles.modular.register.dto.PersonErrorDTO; +import com.casic.missiles.modular.register.dto.PersonUploadDTO; +import com.casic.missiles.modular.register.model.IrisData; +import com.casic.missiles.modular.register.model.IrisPersonPhoto; +import com.casic.missiles.modular.register.service.IIrisDataService; +import com.casic.missiles.modular.register.service.IIrisPersonPhotoService; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Person; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import java.util.ArrayList; -import java.util.List; +import java.io.IOException; +import java.util.*; @Controller public class IrisOfflineController { @Autowired private ICommonDeptService deptService; + @Autowired + private IIrisDataService iIrisDataService; + @Autowired + private ICommonFileService fileService; + @Autowired + private ICommonPersonService commonPersonService; + @Autowired + private IIrisPersonPhotoService personPhotoService; @RequestMapping("/dept/listAll") @ResponseBody @@ -27,4 +50,147 @@ } return ResponseData.success(deptDTOS); } + + @RequestMapping("/person/uploadPerson") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public Object uploadPerson(@RequestBody List uploadList) throws IOException { + List personList = new ArrayList<>(); + List irisList = new ArrayList<>(); + List photoList = new ArrayList<>(); + List repeatList = new ArrayList<>(); + List deptErrorList = new ArrayList<>(); + + List depts = deptService.getDeptByTips(null); + + for (PersonUploadDTO uploadDTO : uploadList) { + byte[] irisL1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL1())) { + irisL1 = Base64.getDecoder().decode(uploadDTO.getIrisL1()); + } + + byte[] irisL2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisL2())) { + irisL2 = Base64.getDecoder().decode(uploadDTO.getIrisL2()); + } + + byte[] irisR1 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR1())) { + irisR1 = Base64.getDecoder().decode(uploadDTO.getIrisR1()); + } + + byte[] irisR2 = null; + if(ToolUtil.isNotEmpty(uploadDTO.getIrisR2())) { + irisR2 = Base64.getDecoder().decode(uploadDTO.getIrisR2()); + } + + // 1.1 判重 + Long recognize = iIrisDataService.recognize(irisL1,irisL2,irisR1,irisR2); + if(recognize >= 0){ + repeatList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + continue; + } + + // 1.2 验证组织机构 + boolean deptValid = false; + for (Dept dept : depts) { + if(dept.getId().equals(uploadDTO.getDeptId())){ + deptValid = true; + break; + } + } + if(!deptValid){ + deptErrorList.add(new PersonErrorDTO(uploadDTO.getDeptId(),uploadDTO.getName())); + } + + // 2. 生成人员 + Person person = new Person(); + Long id = IdWorker.getId(); + person.setId(id); + if(ToolUtil.isNotEmpty(uploadDTO.getStaffNo())){ + person.setPersonCode(uploadDTO.getStaffNo()); + }else { + person.setPersonCode(String.valueOf(id)); + } + person.setIdCardNo(uploadDTO.getIdCardNo()); + person.setName(uploadDTO.getName()); + person.setSex(uploadDTO.getSex()); + // TODO 验证组织机构 + person.setDeptid(Long.valueOf(uploadDTO.getDeptId())); + person.setNation(uploadDTO.getNationCode()); + if(ToolUtil.isNotEmpty(uploadDTO.getBirthday())){ + person.setBirthday(DateUtil.parseDate(uploadDTO.getBirthday())); + } + person.setRemarks(uploadDTO.getRemarks()); + // TODO 采集类型 + Map mapExt = new HashMap<>(); + mapExt.put("certificationUnit",uploadDTO.getCerAuth()); + mapExt.put("address",uploadDTO.getAddr()); + person.setExt(mapExt); + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())){ + String photoPath = fileService.saveFileBase64Image(uploadDTO.getPhotoData()); + person.setPhoto(photoPath); + } + personList.add(person); + + // 3.生成虹膜 + IrisData irisData = new IrisData(); + irisData.setPersonId(id); + irisData.setIdCardNo(uploadDTO.getIdCardNo()); + irisData.setLeftIrisCode1(irisL1); + irisData.setLeftIrisCode2(irisL2); + irisData.setRightIrisCode1(irisR1); + irisData.setRightIrisCode2(irisR2); + String imageL1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL1Data())){ + imageL1Path = fileService.saveFileBase64Image(uploadDTO.getImageL1Data()); + } + irisData.setLeftImage1(imageL1Path); + String imageL2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageL2Data())){ + imageL2Path = fileService.saveFileBase64Image(uploadDTO.getImageL2Data()); + } + irisData.setLeftImage2(imageL2Path); + String imageR1Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR1Data())){ + imageR1Path = fileService.saveFileBase64Image(uploadDTO.getImageR1Data()); + } + irisData.setRightImage1(imageR1Path); + String imageR2Path = null; + if(ToolUtil.isNotEmpty(uploadDTO.getImageR2Data())){ + imageR2Path = fileService.saveFileBase64Image(uploadDTO.getImageR2Data()); + } + irisData.setRightImage2(imageR2Path); + irisList.add(irisData); + + // 4. 生成照片 + if(ToolUtil.isNotEmpty(uploadDTO.getPhotoData())) { + IrisPersonPhoto irisPersonPhoto = new IrisPersonPhoto(); + irisPersonPhoto.setPersonId(id); + irisPersonPhoto.setPhotoData(uploadDTO.getPhotoData()); + photoList.add(irisPersonPhoto); + } + } + + if(ToolUtil.isNotEmpty(personList)){ + commonPersonService.addPersons(personList); + } + if(ToolUtil.isNotEmpty(irisList)){ + iIrisDataService.insertBatch(irisList); + } + if(ToolUtil.isNotEmpty(photoList)) { + personPhotoService.insertBatch(photoList); + } + + if(!ToolUtil.isAllEmpty(repeatList,deptErrorList)){ + int code = 501; + String msg = "上传失败"; + Map data = new HashMap<>(); + data.put("repeatList",repeatList); + data.put("deptErrorList",deptErrorList); + return ResponseData.error(code,msg,data); + }else{ + return ResponseData.success(); + } + } } diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java new file mode 100644 index 0000000..a20ce40 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonErrorDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonErrorDTO { + private String deptId; + private String name; + + public PersonErrorDTO(String deptId, String name) { + this.deptId = deptId; + this.name = name; + } +} diff --git a/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java new file mode 100644 index 0000000..3275065 --- /dev/null +++ b/casic-iris-register/src/main/java/com/casic/missiles/modular/register/dto/PersonUploadDTO.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.register.dto; + +import lombok.Data; + +@Data +public class PersonUploadDTO { + private String staffNo; + private String idCardNo; + private String name; + private String sex; + private String deptId; + private String nationCode; + private String birthday; + private String cerAuth; + private String addr; + private String remarks; + private String irisL1; + private String irisR1; + private String irisL2; + private String irisR2; + private String imageL1Data; + private String imageR1Data; + private String imageL2Data; + private String imageR2Data; + private String collType; + private String photoData; +} 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 index 105479d..e384542 100644 --- 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 @@ -20,4 +20,6 @@ Map selectByPersonId(@Param("personId") String personId); String addIrisData(String leftFilePath1,String leftFilePath2,String rightFilePath1,String rightFilePath2,String personId,String idCardNo) throws IOException; + + Long recognize(byte[] irisL1,byte[] irisL2,byte[] irisR1,byte[] irisR2) throws IOException; } 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 index 03b88a1..71ba6a8 100644 --- 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.register.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.metadata.service.IMetadataSupportService; import com.casic.missiles.modular.register.dao.IrisDataMapper; import com.casic.missiles.modular.register.model.IrisData; @@ -11,10 +12,7 @@ import org.springframework.stereotype.Service; import sun.misc.BASE64Decoder; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; import java.util.HashMap; import java.util.Map; @@ -103,6 +101,21 @@ return "注册成功"; } + @Override + public Long recognize(byte[] irisL1, byte[] irisL2, byte[] irisR1, byte[] irisR2) throws IOException{ + byte[][] irisCodes = new byte[][]{irisL1,irisL2,irisR1,irisR2}; + for (byte[] irisCode : irisCodes) { + if(ToolUtil.isNotEmpty(irisCode)){ + Long personId = matchIris(irisCode); + // 左眼匹配成功,获取personId并返回 + if(ToolUtil.isNotEmpty(personId) && personId >= 0) { + return personId; + } + } + } + return -1L; + } + //与c#的服务通信,获取虹膜编码 public byte[] getIrisCode(InputStream fis) throws IOException { byte[] irisCode = new byte[1024]; @@ -140,4 +153,45 @@ else return null; } + /** + * 与C#通信,根据虹膜编码匹配 + * @param irisCode 虹膜编码 + * @return 返回personId,未匹配返回-1 + */ + public Long matchIris(byte[] irisCode) throws IOException { + + InputStream fis = new ByteArrayInputStream(irisCode); + //1.创建客户端Socket,指定服务器地址和端口 + Socket socket=new Socket(recServiceHost, recServicePort); + //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]; + StringBuilder sb = new StringBuilder(); + int num =0; + while ((num = is.read(bufIn))!=-1){ + sb.append(new String(bufIn, 0, num,"UTF-8")); + } + //4.关闭资源 + is.close(); + os.close(); + socket.close(); + + Long personId; + if(ToolUtil.isNotEmpty(sb.toString())) { + personId = Long.valueOf(sb.toString()); + }else { + personId = -1L; + } + + return personId; + } + }