Commit 5f1e7669 authored by 廖旭伟's avatar 廖旭伟

经营性道路货物运输驾驶员从业资格证申领;网络预约出租汽车驾驶员证核发

parent fca14483
......@@ -35,8 +35,6 @@ public class DLYSCYZGZHFBDHJService extends BaseProjectService {
@Override
public void accept(String fileData, RobotCase rc) throws Exception {
JSONArray fileDataArray = JSONArray.parseArray(fileData);
log.info(fileData);
log.info(JSONObject.toJSONString(rc));
Map<String, Object> dests = new HashMap<>();
String busiDesc = "";
Map<String, Object> returnMap = new HashMap<>();
......@@ -117,22 +115,27 @@ public class DLYSCYZGZHFBDHJService extends BaseProjectService {
}
try {
//身份证应与驾驶证上一致
if (!ObjectUtils.isEmpty(idcardCheckData) && idcardCheckData.size() == 1) {
boolean personIdcard = false;
String textAll = driverLicenseCheckData.get(0).get("textAll");
for (Map<String, String> checkData : idcardCheckData) {
String tempName = checkData.get("name").replaceAll(" ", "");// 身份证上的姓名
if (!ObjectUtils.isEmpty(tempName) && !textAll.contains(tempName)) {
personIdcard = true;
break;
if(!ObjectUtils.isEmpty(driverLicenseCheckData)){
if (!ObjectUtils.isEmpty(idcardCheckData) && idcardCheckData.size() == 1) {
boolean personIdcard = false;
String textAll = JSONObject.toJSONString(driverLicenseCheckData.get(0));
for (Map<String, String> checkData : idcardCheckData) {
String tempName = checkData.get("name").replaceAll(" ", "");// 身份证上的姓名
if(textAll==null){
textAll = tempName;
}
if (!ObjectUtils.isEmpty(tempName) && textAll.contains(tempName)) {
personIdcard = true;
break;
}
}
if (!personIdcard) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("身份证上姓名与驾驶证上不一致!", busiDesc), 2));
}
}
if (!personIdcard) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("身份证上姓名与驾驶证上不一致!", busiDesc), 2));
}
}
} catch (Exception e) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
......@@ -153,29 +156,7 @@ public class DLYSCYZGZHFBDHJService extends BaseProjectService {
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
try {
//身份证应与资格证上一致
if (!ObjectUtils.isEmpty(idcardCheckData) && idcardCheckData.size() == 1) {
boolean personIdcard = false;
String textAll = certificateCheckData.get(0).get("textAll");
for (Map<String, String> checkData : idcardCheckData) {
String tempName = checkData.get("name").replaceAll(" ", "");// 身份证上的姓名
if (!ObjectUtils.isEmpty(tempName) && !textAll.contains(tempName)) {
personIdcard = true;
break;
}
}
if (!personIdcard) {
isCertificateOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("身份证上姓名与资格证上不一致!", busiDesc), 2));
}
}
} catch (Exception e) {
isCertificateOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
/************************************资格证复印件************************************/
try {
......@@ -357,9 +338,10 @@ public class DLYSCYZGZHFBDHJService extends BaseProjectService {
driverLicenseCheckData.add(tempCheckData);
name.add("驾驶证");
}else if(checkDataStr.contains("从业资格") && checkDataStr.contains("经营性") && checkDataStr.contains("道路")){
certificateCheckData.add(tempCheckData);
name.add("资格证");
if(name.contains("资格证")){
if(ObjectUtils.isEmpty(certificateCheckData)) {
certificateCheckData.add(tempCheckData);
name.add("资格证");
}else {
certificateCopyCheckData.add(tempCheckData);
name.add("资格证复印件");
}
......@@ -373,9 +355,10 @@ public class DLYSCYZGZHFBDHJService extends BaseProjectService {
driverLicenseCheckData.add(tempCheckData);
name.add("驾驶证");
} else if (tempStr.contains("从业资格") && tempStr.contains("经营性") && tempStr.contains("道路") ) {//资格证
certificateCheckData.add(tempCheckData);
name.add("资格证");
if(name.contains("资格证")){
if(ObjectUtils.isEmpty(certificateCheckData)) {
certificateCheckData.add(tempCheckData);
name.add("资格证");
}else {
certificateCopyCheckData.add(tempCheckData);
name.add("资格证复印件");
}
......@@ -386,6 +369,10 @@ public class DLYSCYZGZHFBDHJService extends BaseProjectService {
tempCheckData = ConvertJsonToMap.wordConvertJsonToMap(checkData, sealImageId);
idcardCheckData.add(tempCheckData);
name.add("身份证");
} else if ("js_card".equals(code)) {//驾驶证
tempCheckData = ConvertJsonToMap.wordConvertJsonToMap(checkData, sealImageId);
driverLicenseCheckData.add(tempCheckData);
name.add("身份证");
} else {
name.add("其他");
}
......
package com.lilosoft.business.rocr.service.project.yibin;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lilosoft.business.jdbc.bean.RobotCaseMaterial;
import com.lilosoft.business.rocr.api.RobotCaseApi;
import com.lilosoft.business.rocr.bean.RobotCase;
import com.lilosoft.business.rocr.service.BaseProjectService;
import com.lilosoft.business.rocr.utils.ConvertJsonToMap;
import com.lilosoft.core.result.JsonResult;
import com.lilosoft.core.utils.Base64Helper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
/**
* 经营性道路货物运输驾驶员从业资格证申领(限本地户籍)
*/
@Service
@Transactional(readOnly = false)
@Slf4j
public class JYXDLHWYSJSYCYZGZSLBDHJService extends BaseProjectService {
@Autowired
public RobotCaseApi robotCaseApi;
@Override
public void accept(String fileData, RobotCase rc) throws Exception {
JSONArray fileDataArray = JSONArray.parseArray(fileData);
log.info(fileData);
log.info(JSONObject.toJSONString(rc));
Map<String, Object> dests = new HashMap<>();
String busiDesc = "";
Map<String, Object> returnMap = new HashMap<>();
for (int i = 0; i < fileDataArray.size(); i++) {
String fileId = fileDataArray.getJSONObject(i).getString("fileId");
HashMap<String, Object> map = robotCaseMaterialService.getByFileId(fileId);
if (map != null) {
returnMap.put("fileId", fileId);
returnMap.put("result", map.get("jsonData"));
RobotCaseMaterial material = BeanUtil.toBean(map, RobotCaseMaterial.class);
material.setBatchId(rc.getBatchId());
material.setCaseId(rc.getId());
robotCaseMaterialService.save(material);
preprocessResult(dests, returnMap);
}
}
/************************************判断材料集合是否为空************************************/
try {
//登记表
List<Map<String, String>> petitionCheckData = dests.get("petitionCheckData") != null ? (List) dests.get("petitionCheckData") : new ArrayList<>();//登记表
//驾驶证
List<Map<String, String>> driverLicenseCheckData = dests.get("driverLicenseCheckData") != null ? (List) dests.get("driverLicenseCheckData") : new ArrayList<>();//驾驶证
//安全驾驶记录
List<Map<String, String>> safeDrivingLogCheckData = dests.get("safeDrivingLogCheckData") != null ? (List) dests.get("safeDrivingLogCheckData") : new ArrayList<>();//资格证原件
//身份证资料识别数据
List<Map<String, String>> idcardCheckData = dests.get("idcardCheckData") != null ? (List) dests.get("idcardCheckData") : new ArrayList<>();//身份证
//登记表是否通过
boolean isPetitionOk = true;
//驾驶证是否通过
boolean isDriverLicenseOk = true;
//安全驾驶记录是否通过
boolean isSafeDrivingOk = true;
//身份证验证结果是否通过
boolean isIdcardOk = true;
//存放报告结果
List<Map<String, Object>> reportList = new ArrayList<Map<String, Object>>();
//最终的结果报告
List<Map<String, Object>> reportResultList;
Map<String, Object> params = new HashMap<>();
Map<String, Object> rpaParams = new HashMap<>();//rpa、页面表单需要的数据
params.put("certificateName", "");//资格证姓名
params.put("driverName", "");//驾驶员姓名
/************************************登记表************************************/
try {
busiDesc = "申领表";
if (ObjectUtils.isEmpty(petitionCheckData)) {
isPetitionOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
isPetitionOk = auditSeal(busiDesc, petitionCheckData, reportList);
}
} catch (Exception e) {
isPetitionOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
/************************************驾驶证************************************/
try {
busiDesc = "驾驶证";
if (ObjectUtils.isEmpty(driverLicenseCheckData)) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
//isDriverLicenseOk = auditSeal(busiDesc, driverLicenseCheckData, reportList);
}
} catch (Exception e) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
try {
//身份证应与驾驶证上一致
if(!ObjectUtils.isEmpty(driverLicenseCheckData)) {
if (!ObjectUtils.isEmpty(idcardCheckData) && idcardCheckData.size() == 1) {
boolean personIdcard = false;
String textAll = JSONObject.toJSONString(driverLicenseCheckData.get(0));
for (Map<String, String> checkData : idcardCheckData) {
String tempName = checkData.get("name").replaceAll(" ", "");// 身份证上的姓名
if (textAll == null) {
textAll = tempName;
}
if (!ObjectUtils.isEmpty(tempName) && textAll.contains(tempName)) {
personIdcard = true;
break;
}
}
if (!personIdcard) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("身份证上姓名与驾驶证上不一致!", busiDesc), 2));
}
}
}
} catch (Exception e) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
/************************************安全驾驶记录************************************/
try {
busiDesc = "安全驾驶记录";
if (ObjectUtils.isEmpty(safeDrivingLogCheckData)) {
isSafeDrivingOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
isSafeDrivingOk = auditSeal(busiDesc, safeDrivingLogCheckData, reportList);
}
} catch (Exception e) {
isSafeDrivingOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
/************************************身份证************************************/
try {
busiDesc = "身份证";
if (ObjectUtils.isEmpty(idcardCheckData)) {
isIdcardOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
isIdcardOk = auditSeal(busiDesc, idcardCheckData, reportList);
}
} catch (Exception e) {
isIdcardOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
//全部资料识别验证是否通过
boolean isOk = true;
if (isPetitionOk) {
reportList.add(getPubProjectService().createResultInfo(petitionCheckData.get(0).get("fileId"), "申领表", "初审通过!", 0));
} else {
isOk = false;
}
if (isDriverLicenseOk) {
reportList.add(getPubProjectService().createResultInfo(driverLicenseCheckData.get(0).get("fileId"), "驾驶证", "初审通过!", 0));
} else {
isOk = false;
}
if (isSafeDrivingOk) {
reportList.add(getPubProjectService().createResultInfo(safeDrivingLogCheckData.get(0).get("fileId"), "安全驾驶记录", "初审通过!", 0));
} else {
isOk = false;
}
if (isIdcardOk) {
reportList.add(getPubProjectService().createResultInfo(idcardCheckData.get(0).get("fileId"), "身份证", "初审通过!", 0));
} else {
isOk = false;
}
/************************************rpa字段************************************/
Map<String, Object> userData = new HashMap<>();
rpaParams.put("isPrintWord", "false");
//是否打印word
userData.put("isPrintWord", rpaParams.get("isPrintWord") != null ? rpaParams.get("isPrintWord") : "false");
//申请单位名称
userData.put("companyNameByBusiness", rpaParams.get("companyNameByBusiness") != null ? rpaParams.get("companyNameByBusiness") : "");
//申请单位地址
userData.put("address", rpaParams.get("address") != null ? rpaParams.get("address") : "");
//法定代表人
userData.put("personNameByBusiness", rpaParams.get("personNameByBusiness") != null ? rpaParams.get("personNameByBusiness") : "");
//法定代表人地址
userData.put("personAddress", rpaParams.get("personAddress") != null ? rpaParams.get("personAddress") : "");
//委托人姓名
userData.put("agentPersonName", rpaParams.get("agentPersonName") != null ? rpaParams.get("agentPersonName") : "");
//委托人办理
if (!rc.getName().equals(params.get("personNameByBusiness"))) {
//委托人手机号
userData.put("agentPersonMobile", rc.getPhone());
} else {
//本人手机号
userData.put("head_phone", rc.getPhone());//手机号
}
userData.put("projectId", rc.getProjectId());//事项ID
userData.put("batchId", rc.getBatchId());//机器人办件流水号
userData.put("serviceId", rc.getServiceId());//机器人ID
//获取rpa账号列表
JsonResult authListResult = robotCaseApi.getAuthList(rc.getProjectId());
List<Map<String, String>> authList = (List) authListResult.getObj();
if (authList.size() > 0) {
Map<String, String> authMap = authList.get(new Random().nextInt(authList.size()));
userData.put("userName", authMap.get("userName"));//rap账号用户名
userData.put("password", authMap.get("password"));//rap账号用密码
rc.setRpaUrl(authMap.get("rpaUrl"));
//rpa接口地址
userData.put("rpaUrl", authMap.get("rpaUrl"));
} else {
userData.put("userName", "");
userData.put("password", "");
}
logger.info("userData===========================" + userData.toString());
reportResultList = getPubProjectService().groupResultInfo(reportList); //错误消息分组
rc.setArtificialType("0");
rc.setIsSkip("0");
rc.setIsRpa(rc.getIsRpa());
// rc.setPageUrl(serverUrl + "lilo/aiCase/skipSanitationRegister?pageUrl=rpaForm/sichuan/web/ZPSZXKAJ_New");//页面跳转路径
logger.info("Base64Helper----------" + Base64Helper.encode(JSON.toJSONString(userData).getBytes()), "UTF-8");
rc.setRpaData(Base64Helper.encode(JSON.toJSONString(userData).getBytes()));
getPubProjectService().genCaseResult(reportResultList, rc, isOk);
} catch (Exception e) {
logger.error("经营性道路货物运输驾驶员从业资格证申领资料识别最终结果验证处理异常!", e);
getPubProjectService().genCaseResult(null, rc, false);
}
}
/**
* 数据解析预处理
* @param dests
* @param result
*/
public void preprocessResult(Map<String,Object> dests, Map<String,Object> result){
//驾驶证
if(dests.get("driverLicenseCheckData") == null){
dests.put("driverLicenseCheckData",new ArrayList<>());
}
//申请书
if(dests.get("petitionCheckData") == null){
dests.put("petitionCheckData",new ArrayList<>());
}
//身份证
if(dests.get("idcardCheckData") == null){
dests.put("idcardCheckData",new ArrayList<>());
}
//安全驾驶记录
if(dests.get("safeDrivingLogCheckData") == null){
dests.put("safeDrivingLogCheckData",new ArrayList<>());
}
List<Map<String, String>> driverLicenseCheckData = (List) dests.get("driverLicenseCheckData");//驾驶证
List<Map<String, String>> petitionCheckData = (List) dests.get("petitionCheckData");//申请书
List<Map<String, String>> idcardCheckData = (List) dests.get("idcardCheckData");//身份证
List<Map<String, String>> safeDrivingLogCheckData = (List) dests.get("safeDrivingLogCheckData");//安全驾驶记录
/************************************调用orc接口************************************/
String fileId = result.get("fileId").toString();
String resultJSONStr = result.get("result") == null ? "" : result.get("result").toString();
resultJSONStr = resultJSONStr.replaceAll(" ", "");
if (StringUtils.isNotEmpty(resultJSONStr)) {
log.info("fileId:"+fileId);
JSONObject resultJSON = JSONObject.parseObject(resultJSONStr);
log.info("resultJSONStr:"+resultJSONStr);
if (resultJSON != null && StringUtils.isNotEmpty(resultJSON.getString("status")) && resultJSON.getIntValue("status") == 200) {
JSONArray datas = resultJSON.getJSONArray("data");
String sealImageId = resultJSON.getString("sealImageId");
List<String> name = new ArrayList<>();
dests.put("artificialType", "0");
for (Object data : datas) {
String checkDataStr = JSON.toJSONString(data);
JSONObject checkData = JSONObject.parseObject(checkDataStr);
if (checkData != null) {
Map<String, String> tempCheckData = new HashMap<>();
tempCheckData.put("fileId", fileId);
String code = checkData.getString("code");
//表格类
if ("table".equals(code)) {
tempCheckData = ConvertJsonToMap.tableConvertJsonToMap(checkData, sealImageId);
if (checkDataStr.contains("经营性道路货物运输驾驶员") && checkDataStr.contains("从业资格证")) {
petitionCheckData.add(tempCheckData);
name.add("经营性道路货物运输驾驶员从业资格证登记表申领表");
}else if(checkDataStr.contains("中华人民共和国机动车驾驶证")){
driverLicenseCheckData.add(tempCheckData);
name.add("驾驶证");
}else if(checkDataStr.contains("机动车驾驶人") && checkDataStr.contains("安全驾驶记录")){
safeDrivingLogCheckData.add(tempCheckData);
name.add("安全驾驶记录");
} else {
name.add("其他");
}
} else if ("text".equals(code)) {//文书类
tempCheckData = ConvertJsonToMap.textConvertJsonToMap(checkData, sealImageId);
String tempStr = tempCheckData.get("textAll");
if (tempStr.contains("机动车") && tempStr.contains("驾驶证") || tempStr.contains("驾驶证副页")) {//驾驶证
driverLicenseCheckData.add(tempCheckData);
name.add("驾驶证");
} else if (tempStr.contains("机动车驾驶人") && tempStr.contains("安全驾驶记录") ) {//安全驾驶记录
safeDrivingLogCheckData.add(tempCheckData);
name.add("安全驾驶记录");
} else {
name.add("其他");
}
} else if ("idcard".equals(code)) {//身份证
tempCheckData = ConvertJsonToMap.wordConvertJsonToMap(checkData, sealImageId);
idcardCheckData.add(tempCheckData);
name.add("身份证");
} else if ("js_card".equals(code)) {//驾驶证
tempCheckData = ConvertJsonToMap.wordConvertJsonToMap(checkData, sealImageId);
driverLicenseCheckData.add(tempCheckData);
name.add("身份证");
} else {
name.add("其他");
}
tempCheckData.put("fileId", fileId);
tempCheckData.put("sealImageId", sealImageId);
} else {
logger.error("该图片送检分析失败!文件id为:" + fileId);
}
}
} else {
logger.error("该图片送检分析失败!文件id为:" + fileId);
}
} else {
logger.error("该图片送检分析失败!文件id为:" + fileId);
}
}
private boolean auditSeal(String busiDesc, List<Map<String, String>> checkData, List<Map<String, Object>> reportList) {
boolean isApplyFormOk = true;
AtomicReference<Boolean> isGZ = new AtomicReference<>(false);
checkData.forEach(signboardData -> {
String sealImageId = signboardData.get("sealImageId");
JSONObject json = robotOcrApi.approvalSeal(sealImageId);
String hasJCBGSeal = json.getString("message");
String officialSeal = json.getString("officialSeal");
if ("SUCCESS".equals(hasJCBGSeal))//
isGZ.set(true);
});
if (!isGZ.get()) {
isApplyFormOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("%s未加盖公章!", busiDesc), 2));
}
return isApplyFormOk;
}
}
package com.lilosoft.business.rocr.service.project.yibin;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lilosoft.business.jdbc.bean.RobotCaseMaterial;
import com.lilosoft.business.rocr.api.RobotCaseApi;
import com.lilosoft.business.rocr.bean.RobotCase;
import com.lilosoft.business.rocr.service.BaseProjectService;
import com.lilosoft.business.rocr.utils.ConvertJsonToMap;
import com.lilosoft.core.result.JsonResult;
import com.lilosoft.core.utils.Base64Helper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
/**
* 网络预约出租汽车驾驶员证核发(限本地户籍)
*/
@Service
@Transactional(readOnly = false)
@Slf4j
public class WLYYCZQCJSYZHFBDHJService extends BaseProjectService {
@Autowired
public RobotCaseApi robotCaseApi;
@Override
public void accept(String fileData, RobotCase rc) throws Exception {
JSONArray fileDataArray = JSONArray.parseArray(fileData);
log.info(fileData);
log.info(JSONObject.toJSONString(rc));
Map<String, Object> dests = new HashMap<>();
String busiDesc = "";
Map<String, Object> returnMap = new HashMap<>();
for (int i = 0; i < fileDataArray.size(); i++) {
String fileId = fileDataArray.getJSONObject(i).getString("fileId");
HashMap<String, Object> map = robotCaseMaterialService.getByFileId(fileId);
if (map != null) {
returnMap.put("fileId", fileId);
returnMap.put("result", map.get("jsonData"));
RobotCaseMaterial material = BeanUtil.toBean(map, RobotCaseMaterial.class);
material.setBatchId(rc.getBatchId());
material.setCaseId(rc.getId());
robotCaseMaterialService.save(material);
preprocessResult(dests, returnMap);
}
}
/************************************判断材料集合是否为空************************************/
try {
//登记表
List<Map<String, String>> petitionCheckData = dests.get("petitionCheckData") != null ? (List) dests.get("petitionCheckData") : new ArrayList<>();//登记表
//驾驶证
List<Map<String, String>> driverLicenseCheckData = dests.get("driverLicenseCheckData") != null ? (List) dests.get("driverLicenseCheckData") : new ArrayList<>();//驾驶证
//巡游驾驶员证
List<Map<String, String>> patrolDriverCheckData = dests.get("patrolDriverCheckData") != null ? (List) dests.get("patrolDriverCheckData") : new ArrayList<>();//资格证原件
//身份证资料识别数据
List<Map<String, String>> idcardCheckData = dests.get("idcardCheckData") != null ? (List) dests.get("idcardCheckData") : new ArrayList<>();//身份证
//登记表是否通过
boolean isPetitionOk = true;
//驾驶证是否通过
boolean isDriverLicenseOk = true;
//巡游驾驶员证是否通过
boolean isPatrolDriverOk = true;
//身份证验证结果是否通过
boolean isIdcardOk = true;
//存放报告结果
List<Map<String, Object>> reportList = new ArrayList<Map<String, Object>>();
//最终的结果报告
List<Map<String, Object>> reportResultList;
Map<String, Object> params = new HashMap<>();
Map<String, Object> rpaParams = new HashMap<>();//rpa、页面表单需要的数据
params.put("certificateName", "");//资格证姓名
params.put("driverName", "");//驾驶员姓名
/************************************登记表************************************/
try {
busiDesc = "申领表";
if (ObjectUtils.isEmpty(petitionCheckData)) {
isPetitionOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
isPetitionOk = auditSeal(busiDesc, petitionCheckData, reportList);
}
} catch (Exception e) {
isPetitionOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
/************************************驾驶证************************************/
try {
busiDesc = "驾驶证";
if (ObjectUtils.isEmpty(driverLicenseCheckData)) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
//isDriverLicenseOk = auditSeal(busiDesc, driverLicenseCheckData, reportList);
}
} catch (Exception e) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
try {
//身份证应与驾驶证上一致
if(!ObjectUtils.isEmpty(driverLicenseCheckData)) {
if (!ObjectUtils.isEmpty(driverLicenseCheckData)) {
if (!ObjectUtils.isEmpty(idcardCheckData) && idcardCheckData.size() == 1) {
boolean personIdcard = false;
String textAll = JSONObject.toJSONString(driverLicenseCheckData.get(0));
for (Map<String, String> checkData : idcardCheckData) {
String tempName = checkData.get("name").replaceAll(" ", "");// 身份证上的姓名
if (textAll == null) {
textAll = tempName;
}
if (!ObjectUtils.isEmpty(tempName) && !textAll.contains(tempName)) {
personIdcard = true;
break;
}
}
if (!personIdcard) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("身份证上姓名与驾驶证上不一致!", busiDesc), 2));
}
}
}
}
} catch (Exception e) {
isDriverLicenseOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
/************************************巡游驾驶员证************************************/
try {
busiDesc = "巡游驾驶员证";
if (ObjectUtils.isEmpty(patrolDriverCheckData)) {
isPatrolDriverOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
isPatrolDriverOk = auditSeal(busiDesc, patrolDriverCheckData, reportList);
}
} catch (Exception e) {
isPatrolDriverOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
try {
//身份证应与巡游驾驶员证一致
if(!ObjectUtils.isEmpty(driverLicenseCheckData)) {
if (!ObjectUtils.isEmpty(idcardCheckData) && idcardCheckData.size() == 1) {
boolean personIdcard = false;
String textAll = JSONObject.toJSONString(patrolDriverCheckData.get(0));
for (Map<String, String> checkData : idcardCheckData) {
String tempName = checkData.get("name").replaceAll(" ", "");// 身份证上的姓名
if (textAll == null) {
textAll = tempName;
}
if (!ObjectUtils.isEmpty(tempName) && !textAll.contains(tempName)) {
personIdcard = true;
break;
}
}
if (!personIdcard) {
isPatrolDriverOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("身份证上姓名与巡游驾驶员证上不一致!", busiDesc), 2));
}
}
}
} catch (Exception e) {
isPatrolDriverOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
/************************************身份证************************************/
try {
busiDesc = "身份证";
if (ObjectUtils.isEmpty(idcardCheckData)) {
isIdcardOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
isIdcardOk = auditSeal(busiDesc, idcardCheckData, reportList);
}
} catch (Exception e) {
isIdcardOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("识别提取%s失败", busiDesc), 2));
log.error(String.format("%s识别验证处理异常!", busiDesc), e);
}
//全部资料识别验证是否通过
boolean isOk = true;
if (isPetitionOk) {
reportList.add(getPubProjectService().createResultInfo(petitionCheckData.get(0).get("fileId"), "申领表", "初审通过!", 0));
} else {
isOk = false;
}
if (isDriverLicenseOk) {
reportList.add(getPubProjectService().createResultInfo(driverLicenseCheckData.get(0).get("fileId"), "驾驶证", "初审通过!", 0));
} else {
isOk = false;
}
if (isPatrolDriverOk) {
reportList.add(getPubProjectService().createResultInfo(patrolDriverCheckData.get(0).get("fileId"), "巡游驾驶员证", "初审通过!", 0));
} else {
isOk = false;
}
if (isIdcardOk) {
reportList.add(getPubProjectService().createResultInfo(idcardCheckData.get(0).get("fileId"), "身份证", "初审通过!", 0));
} else {
isOk = false;
}
/************************************rpa字段************************************/
Map<String, Object> userData = new HashMap<>();
rpaParams.put("isPrintWord", "false");
//是否打印word
userData.put("isPrintWord", rpaParams.get("isPrintWord") != null ? rpaParams.get("isPrintWord") : "false");
//申请单位名称
userData.put("companyNameByBusiness", rpaParams.get("companyNameByBusiness") != null ? rpaParams.get("companyNameByBusiness") : "");
//申请单位地址
userData.put("address", rpaParams.get("address") != null ? rpaParams.get("address") : "");
//法定代表人
userData.put("personNameByBusiness", rpaParams.get("personNameByBusiness") != null ? rpaParams.get("personNameByBusiness") : "");
//法定代表人地址
userData.put("personAddress", rpaParams.get("personAddress") != null ? rpaParams.get("personAddress") : "");
//委托人姓名
userData.put("agentPersonName", rpaParams.get("agentPersonName") != null ? rpaParams.get("agentPersonName") : "");
//委托人办理
if (!rc.getName().equals(params.get("personNameByBusiness"))) {
//委托人手机号
userData.put("agentPersonMobile", rc.getPhone());
} else {
//本人手机号
userData.put("head_phone", rc.getPhone());//手机号
}
userData.put("projectId", rc.getProjectId());//事项ID
userData.put("batchId", rc.getBatchId());//机器人办件流水号
userData.put("serviceId", rc.getServiceId());//机器人ID
//获取rpa账号列表
JsonResult authListResult = robotCaseApi.getAuthList(rc.getProjectId());
List<Map<String, String>> authList = (List) authListResult.getObj();
if (authList.size() > 0) {
Map<String, String> authMap = authList.get(new Random().nextInt(authList.size()));
userData.put("userName", authMap.get("userName"));//rap账号用户名
userData.put("password", authMap.get("password"));//rap账号用密码
rc.setRpaUrl(authMap.get("rpaUrl"));
//rpa接口地址
userData.put("rpaUrl", authMap.get("rpaUrl"));
} else {
userData.put("userName", "");
userData.put("password", "");
}
logger.info("userData===========================" + userData.toString());
reportResultList = getPubProjectService().groupResultInfo(reportList); //错误消息分组
rc.setArtificialType("0");
rc.setIsSkip("0");
rc.setIsRpa(rc.getIsRpa());
// rc.setPageUrl(serverUrl + "lilo/aiCase/skipSanitationRegister?pageUrl=rpaForm/sichuan/web/ZPSZXKAJ_New");//页面跳转路径
logger.info("Base64Helper----------" + Base64Helper.encode(JSON.toJSONString(userData).getBytes()), "UTF-8");
rc.setRpaData(Base64Helper.encode(JSON.toJSONString(userData).getBytes()));
getPubProjectService().genCaseResult(reportResultList, rc, isOk);
} catch (Exception e) {
logger.error("经营性道路货物运输驾驶员从业资格证申领资料识别最终结果验证处理异常!", e);
getPubProjectService().genCaseResult(null, rc, false);
}
}
/**
* 数据解析预处理
* @param dests
* @param result
*/
public void preprocessResult(Map<String,Object> dests, Map<String,Object> result){
//驾驶证
if(dests.get("driverLicenseCheckData") == null){
dests.put("driverLicenseCheckData",new ArrayList<>());
}
//申请书
if(dests.get("petitionCheckData") == null){
dests.put("petitionCheckData",new ArrayList<>());
}
//身份证
if(dests.get("idcardCheckData") == null){
dests.put("idcardCheckData",new ArrayList<>());
}
//巡游驾驶员证
if(dests.get("patrolDriverCheckData") == null){
dests.put("patrolDriverCheckData",new ArrayList<>());
}
List<Map<String, String>> driverLicenseCheckData = (List) dests.get("driverLicenseCheckData");//驾驶证
List<Map<String, String>> petitionCheckData = (List) dests.get("petitionCheckData");//申请书
List<Map<String, String>> idcardCheckData = (List) dests.get("idcardCheckData");//身份证
List<Map<String, String>> patrolDriverCheckData = (List) dests.get("patrolDriverCheckData");//巡游驾驶员证
/************************************调用orc接口************************************/
String fileId = result.get("fileId").toString();
String resultJSONStr = result.get("result") == null ? "" : result.get("result").toString();
resultJSONStr = resultJSONStr.replaceAll(" ", "");
if (StringUtils.isNotEmpty(resultJSONStr)) {
log.info("fileId:"+fileId);
JSONObject resultJSON = JSONObject.parseObject(resultJSONStr);
log.info("resultJSONStr:"+resultJSONStr);
if (resultJSON != null && StringUtils.isNotEmpty(resultJSON.getString("status")) && resultJSON.getIntValue("status") == 200) {
JSONArray datas = resultJSON.getJSONArray("data");
String sealImageId = resultJSON.getString("sealImageId");
List<String> name = new ArrayList<>();
dests.put("artificialType", "0");
for (Object data : datas) {
String checkDataStr = JSON.toJSONString(data);
JSONObject checkData = JSONObject.parseObject(checkDataStr);
if (checkData != null) {
Map<String, String> tempCheckData = new HashMap<>();
tempCheckData.put("fileId", fileId);
String code = checkData.getString("code");
//表格类
if ("table".equals(code)) {
tempCheckData = ConvertJsonToMap.tableConvertJsonToMap(checkData, sealImageId);
if (checkDataStr.contains("经营性道路货物运输驾驶员") && checkDataStr.contains("从业资格证")) {
petitionCheckData.add(tempCheckData);
name.add("经营性道路货物运输驾驶员从业资格证登记表申领表");
}else if(checkDataStr.contains("中华人民共和国机动车驾驶证")){
driverLicenseCheckData.add(tempCheckData);
name.add("驾驶证");
}else if(checkDataStr.contains("发证机关") && checkDataStr.contains("二维码区") && checkDataStr.contains("准驾车型")){
patrolDriverCheckData.add(tempCheckData);
name.add("巡游驾驶员证");
} else {
name.add("其他");
}
} else if ("text".equals(code)) {//文书类
tempCheckData = ConvertJsonToMap.textConvertJsonToMap(checkData, sealImageId);
String tempStr = tempCheckData.get("textAll");
if (tempStr.contains("机动车") && tempStr.contains("驾驶证") || tempStr.contains("驾驶证副页")) {//驾驶证
driverLicenseCheckData.add(tempCheckData);
name.add("驾驶证");
} else if (tempStr.contains("发证机关") && tempStr.contains("二维码区") ) {//巡游驾驶员证
patrolDriverCheckData.add(tempCheckData);
name.add("巡游驾驶员证");
} else {
name.add("其他");
}
} else if ("idcard".equals(code)) {//身份证
tempCheckData = ConvertJsonToMap.wordConvertJsonToMap(checkData, sealImageId);
idcardCheckData.add(tempCheckData);
name.add("身份证");
} else if ("js_card".equals(code)) {//驾驶证
tempCheckData = ConvertJsonToMap.wordConvertJsonToMap(checkData, sealImageId);
driverLicenseCheckData.add(tempCheckData);
name.add("身份证");
} else {
name.add("其他");
}
tempCheckData.put("fileId", fileId);
tempCheckData.put("sealImageId", sealImageId);
} else {
logger.error("该图片送检分析失败!文件id为:" + fileId);
}
}
} else {
logger.error("该图片送检分析失败!文件id为:" + fileId);
}
} else {
logger.error("该图片送检分析失败!文件id为:" + fileId);
}
}
private boolean auditSeal(String busiDesc, List<Map<String, String>> checkData, List<Map<String, Object>> reportList) {
boolean isApplyFormOk = true;
AtomicReference<Boolean> isGZ = new AtomicReference<>(false);
checkData.forEach(signboardData -> {
String sealImageId = signboardData.get("sealImageId");
JSONObject json = robotOcrApi.approvalSeal(sealImageId);
String hasJCBGSeal = json.getString("message");
String officialSeal = json.getString("officialSeal");
if ("SUCCESS".equals(hasJCBGSeal))//
isGZ.set(true);
});
if (!isGZ.get()) {
isApplyFormOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("%s未加盖公章!", busiDesc), 2));
}
return isApplyFormOk;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment