Commit fca14483 authored by 廖旭伟's avatar 廖旭伟

道路运输从业资格证件换发(限本地户籍)

parent 6de43254
package com.lilosoft.business.rocr.service.project.yibin; 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.bean.RobotCase;
import com.lilosoft.business.rocr.service.BaseProjectService; 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 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* 道路运输从业资格证件换发(限本地户籍) * 道路运输从业资格证件换发(限本地户籍)
...@@ -13,8 +28,398 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -13,8 +28,398 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional(readOnly = false) @Transactional(readOnly = false)
@Slf4j @Slf4j
public class DLYSCYZGZHFBDHJService extends BaseProjectService { public class DLYSCYZGZHFBDHJService extends BaseProjectService {
@Autowired
public RobotCaseApi robotCaseApi;
@Override @Override
public void accept(String fileData, RobotCase rc) throws Exception { 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>> certificateCheckData = dests.get("certificateCheckData") != null ? (List) dests.get("certificateCheckData") : new ArrayList<>();//资格证原件
//身份证资料识别数据
List<Map<String, String>> idcardCheckData = dests.get("idcardCheckData") != null ? (List) dests.get("idcardCheckData") : new ArrayList<>();//身份证
//资格证复印件
List<Map<String, String>> certificateCopyCheckData = dests.get("certificateCopyCheckData") != null ? (List) dests.get("certificateCopyCheckData") : new ArrayList<>();//资格证复印件
//登记表是否通过
boolean isPetitionOk = true;
//驾驶证是否通过
boolean isDriverLicenseOk = true;
//资格证原件是否通过
boolean isCertificateOk = true;
//身份证验证结果是否通过
boolean isIdcardOk = true;
//资格证复印件是否正确
boolean isCertificateCopyOk = 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(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 (!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(certificateCheckData)) {
isCertificateOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
//isCertificateOk = auditSeal(busiDesc, certificateCheckData, reportList);
}
} catch (Exception e) {
isCertificateOk = false;
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 {
busiDesc = "资格证复印件";
if (ObjectUtils.isEmpty(certificateCopyCheckData)) {
isCertificateCopyOk = false;
reportList.add(getPubProjectService().createResultInfo("", busiDesc, String.format("请提交%s!", busiDesc), 2));
} else {
//isCertificateCopyOk = auditSeal(busiDesc, certificateCopyCheckData, reportList);
}
} catch (Exception e) {
isCertificateCopyOk = 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 (isCertificateOk) {
reportList.add(getPubProjectService().createResultInfo(certificateCheckData.get(0).get("fileId"), "资格证原件", "初审通过!", 0));
} else {
isOk = false;
}
if (isCertificateCopyOk) {
reportList.add(getPubProjectService().createResultInfo(certificateCopyCheckData.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("certificateCopyCheckData") == null){
dests.put("certificateCopyCheckData",new ArrayList<>());
}
//资格证原件
if(dests.get("certificateCheckData") == null){
dests.put("certificateCheckData",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>> certificateCopyCheckData = (List) dests.get("certificateCopyCheckData");//资格证复印件
List<Map<String, String>> certificateCheckData = (List) dests.get("certificateCheckData");//资格证原件
/************************************调用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("道路")){
certificateCheckData.add(tempCheckData);
name.add("资格证");
if(name.contains("资格证")){
certificateCopyCheckData.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("经营性") && tempStr.contains("道路") ) {//资格证
certificateCheckData.add(tempCheckData);
name.add("资格证");
if(name.contains("资格证")){
certificateCopyCheckData.add(tempCheckData);
name.add("资格证复印件");
}
} else {
name.add("其他");
}
} else if ("idcard".equals(code)) {//身份证
tempCheckData = ConvertJsonToMap.wordConvertJsonToMap(checkData, sealImageId);
idcardCheckData.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