package com.lilosoft.api.service; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.lilosoft.api.api.ApplyApi; import com.lilosoft.api.api.OcrApi; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; import okhttp3.ResponseBody; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import retrofit2.Response; import java.net.URLEncoder; import java.util.*; @Service public class PublicService { /** * 日志对象 */ public Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private ApplyApi applyApi; @Autowired private OcrApi ocrApi; /** * 网上申报 */ public String webApply(HashMap<String, Object> paramsMap, HashMap<String, Object> formData) throws Exception { logger.info(JSONUtil.toJsonStr(paramsMap)); String itemCode = paramsMap.get("ItemCode").toString();//事项code String objectType = paramsMap.get("objectType").toString();//表单服务对象类型,1:人员;2:项目 3:企业 String orgType = paramsMap.get("orgType").toString(); JSONArray materials = JSONUtil.parseArray(paramsMap.get("materials"));//材料列表 String result = "";//错误描述 String type = "info";//基本要素: "info",申请材料:"material" 非必填 //第一步 获取事项信息 HashMap<String, Object> project = applyApi.getItemInfoByItemCode("http://10.224.12.79:8085/sxgl/main/power/getItemInfoByItemCode", itemCode, ""); String state = project.get("state").toString(); if("1".equals(state)){ JSONObject itemInfo = JSONUtil.parseArray(project.get("ItemInfo")).getJSONObject(0); String id = itemInfo.getStr("ID");//事项ID String code = itemInfo.getStr("CODE");//事项编码 String version = itemInfo.getStr("VERSION");//版本号 String name = itemInfo.getStr("NAME");//事项名称 String regionCode = itemInfo.getStr("REGION_CODE");//区划编码 String regionName = itemInfo.getStr("REGION_NAME");//区划名称 String orgCode = itemInfo.getStr("ORG_CODE");//事项部门编码 String orgName = itemInfo.getStr("ORG_NAME");//事项部门名称 //第二步 根据事项ID获取表单 HashMap<String, Object> formInfo = applyApi.getFormInfo("http://10.224.12.79:9087/zhsl/Service/getFormInfo", itemCode); String state1 = formInfo.get("state").toString(); if("200".equals(state1)){ JSONObject info = JSONUtil.parseArray(formInfo.get("info")).getJSONObject(0); String formId = info.getStr("formId");//表单ID String formName = info.getStr("formName");//表单名称 //第三步 提交表单 HashMap<String, Object> submitForm = new HashMap<>(); submitForm.put("formId", formId); submitForm.put("formData", JSONUtil.toJsonStr(formData)); HashMap<String, Object> saveDataEx = applyApi.saveDataEx("http://10.224.12.79:9087/zhsl/Service/saveDataEx", submitForm); String state2 = saveDataEx.get("state").toString(); if("200".equals(state2)){ String dataId = saveDataEx.get("dataId").toString();//表单数据ID //第四步 上传材料 for (int n = 0, m = materials.size(); n < m ; n++) { JSONObject jsonObject1 = materials.getJSONObject(n); String fileName = jsonObject1.getStr("fileName");//上传文件名 String fileUrl = jsonObject1.getStr("fileUrl");//上传文件下载地址 HashMap<String, Object> upload = this.upload(fileName, fileUrl); if(upload != null){ String state3 = upload.get("code").toString(); if("0000".equals(state3)){ String uuid = upload.get("uuid").toString();//文件ID jsonObject1.putOpt("uuid", uuid); } else { jsonObject1.putOpt("uuid", "");//上传失败默认为空 result = "上传材料报错:" + upload.get("msg").toString(); } } } //组装metail数据结构 JSONArray material = JSONUtil.parseArray(project.get("material"));//事项材料列表 List<HashMap<String, String>> metail = new ArrayList<>(); HashMap<String, String> materialMap; for (int n = 0, m = materials.size(); n < m ; n++) { JSONObject jsonObject1 = materials.getJSONObject(n); String fileCode = jsonObject1.getStr("fileCode");//办件材料code String uuid = jsonObject1.getStr("uuid");//文件ID materialMap = new HashMap<>(); for (int i = 0, j = material.size(); i < j ; i++) { JSONObject jsonObject = material.getJSONObject(i); String mcode = jsonObject.getStr("MCODE");//MCODE String materialCode = jsonObject.getStr("CODE");//材料ID if(mcode.equals(fileCode) && StrUtil.isNotEmpty(uuid)){ String materialName = jsonObject.getStr("NAME");//材料名称 String fileName = jsonObject1.getStr("fileName");//上传文件名 materialMap.put("DOCUMENT_ID", materialCode);//材料ID materialMap.put("DOCUMENT_NAME", materialName);//材料名称 materialMap.put("TYPE", "1");//文件类型(纸质:0;电子:1) materialMap.put("FILE_NAME", fileName);//上传文件名,如:030411240740_01.jpg materialMap.put("FILE_PATH", uuid);//文件路径,通过上传材料获取uuid metail.add(materialMap); break; } } } //第五步 网上申报 //基本信息 Map<String, Object> infoMap = new LinkedHashMap<>(); //服务对象类型,objectType 1:人员;2:项目 3:企业 if("1".equals(objectType)){ infoMap.put("identityType", "10");//证件类型,默认身份证10 infoMap.put("idcardNo", paramsMap.get("idcardNo"));//证件号 infoMap.put("name", paramsMap.get("applyName"));//姓名 infoMap.put("linkPhone", paramsMap.get("linkPhone"));//联系电话 infoMap.put("linkAddress", paramsMap.get("linkAddress"));//联系地址 } if("2".equals(objectType)){ infoMap.put("projectName", paramsMap.get("projectName"));//项目名称 infoMap.put("projectCode", paramsMap.get("projectCode"));//项目编码 } if("3".equals(objectType)){ infoMap.put("orgName", paramsMap.get("orgName"));//组织机构名称 infoMap.put("orgCode", paramsMap.get("orgCode"));//组织机构代码 infoMap.put("orgType", orgType);//组织机构类型 infoMap.put("legalPerson", paramsMap.get("legalPerson"));//法定代表人 infoMap.put("linkMan", paramsMap.get("linkMan"));//企业联系人 infoMap.put("contactPhone", paramsMap.get("contactPhone"));//企业联系电话 infoMap.put("registerAddress", paramsMap.get("registerAddress"));//单位注册地址 } //服务清单 Map<String, Object> servicelist = new LinkedHashMap<>(); servicelist.put("ApplicantName", paramsMap.get("name"));//办事人 servicelist.put("ApplicantID", paramsMap.get("idcard"));//身份证号码 servicelist.put("ApplicantMobile", paramsMap.get("phone"));//办事人手机号 servicelist.put("ApplicantAddress", paramsMap.get("address"));//办事人联系地址 servicelist.put("SendType", "0");//邮寄方式,0为自取,1为投递 servicelist.put("ApplicantType", "10");//证件类型,详情看字典,暂定身份证 //最终提交数据 Map<String, Object> applyMap = new LinkedHashMap<>(); applyMap.put("State", "sp");//sp:外网首次提交; bqbz:外网二次提交 applyMap.put("ReceiveNum", "");//业务实例号,外网二次提交必填 applyMap.put("ItemId", id);//事项ID applyMap.put("ItemCode", code);//事项CODE applyMap.put("ItemName", name);//事项名称 applyMap.put("OrgCode", orgCode);//事项所属单位编码 applyMap.put("OrgName", regionName);//事项所属单位名称 applyMap.put("ObjectType", objectType);//服务对象类型,1:人员;2:项目 3:企业 applyMap.put("DataId", dataId);//表单数据ID applyMap.put("FormId", formId);//表单ID applyMap.put("metail", metail);//材料列表 list applyMap.put("servicelist", servicelist);//服务清单 list applyMap.put("info", infoMap);//基本信息 applyMap.put("IsPrejudication", "11");//办件状态,11:待预审 applyMap.put("ApplyFrom", "17");//申报来源 17预审机器人 JSONConfig jsonConfig = JSONConfig.create(); jsonConfig.setIgnoreNullValue(false); logger.info(JSONUtil.toJsonStr(applyMap, jsonConfig)); HashMap<String, Object> apply = applyApi.webApply("http://10.224.12.79:9087/zhsl/Service/webApply", JSONUtil.toJsonStr(applyMap, jsonConfig)); String state4 = apply.get("state").toString(); if("200".equals(state4)){ String receiveNum = apply.get("receiveNum").toString(); logger.info("办件申报成功,业务的办件编号:" + receiveNum); } else { result = "办件申报信息报错:"+ apply.get("error").toString(); } } else { result = "提交表单信息报错:"+ saveDataEx.get("error").toString(); } } else { result = "获取表单信息报错:"+ formInfo.get("detailMessage").toString(); } } else { result = "获取事项信息报错:"+ project.get("error").toString(); } if(StrUtil.isNotEmpty(result)){ logger.error("接口调用失败:" + result); } return result; } /** * 上传文件到审批系统 * @param fileName 上传文件名 * @param fileUrl 上传文件下载地址 * @return * @throws Exception */ public HashMap<String, Object> upload(String fileName, String fileUrl) throws Exception { HashMap<String, Object> upload = new HashMap<>();//返回值 upload.put("code", ""); upload.put("msg", ""); Response<ResponseBody> response = ocrApi.downloadFile(fileUrl, fileName, "1"); boolean successful = response.isSuccessful(); int code = response.code(); if(successful && code == 200){ ResponseBody responseBody = response.body(); //上传受理平台 if(responseBody != null){ byte[] bytes = responseBody.bytes(); if(bytes.length > 0){ HashMap<String, RequestBody> map = new HashMap<>(); map.put("uid", RequestBody.create(MediaType.parse("text/plain"), "3336"));//固定值,3336 map.put("type", RequestBody.create(MediaType.parse("text/plain"), "doc"));//固定值,doc map.put("folder_name", RequestBody.create(MediaType.parse("text/plain"), "//"));//固定值,// RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpg"), bytes); MultipartBody.Part body = MultipartBody.Part.createFormData("file", URLEncoder.encode(fileName, "UTF-8"), requestFile); upload = applyApi.upload("http://10.224.12.76:8084/WebDiskServerDemo/upload", body, map); logger.info("文件上传结果:"+ upload); } else { logger.error("下载文件失败,内容为空:"+ fileUrl); } } } else { String msg = "下载文件接口调用失败:"+ fileUrl; if(response.errorBody() != null){ msg = msg + ",ErrorMsg:"+ response.errorBody().string(); } logger.error(msg); } return upload; } }