package cn.huge.module.thirdByRmtj.service; import cn.huge.base.common.exception.MethodException; import cn.huge.base.common.utils.*; import cn.huge.module.cases.domain.po.CaseInfo; import cn.huge.module.cases.domain.po.CaseInfoUnfold; import cn.huge.module.cases.domain.po.CaseMediator; import cn.huge.module.cases.domain.po.CasePerson; import cn.huge.module.cases.service.CaseInfoService; import cn.huge.module.cases.service.CaseInfoUnfoldService; import cn.huge.module.cases.service.CaseMediatorService; import cn.huge.module.cases.service.CasePersonService; import cn.huge.module.client.api.impl.SysClientImpl; import cn.huge.module.cust.constant.UserBaseConsts; import cn.huge.module.cust.dto.CtUnitDTO; import cn.huge.module.ftp.utils.FtpUtils; import cn.huge.module.mediate.constant.CaseBaseConsts; import cn.huge.module.mediate.constant.CaseBaseConstsEnum; import cn.huge.module.sys.dto.FileInfoBaseDTO; import cn.huge.module.thirdByRmtj.consts.*; import cn.huge.module.thirdByRmtj.domain.dto.*; import cn.huge.module.thirdByRmtj.domain.po.ThRmtjUnit; import cn.huge.module.thirdByRmtj.domain.po.ThRmtjUser; import cn.huge.module.thirdByRmtj.utils.SsfjToken; import cn.huge.module.thirdByRmtj.utils.SsfjUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @title: 第三方系统对接-转人民调解系统申请审核记录表业务逻辑处理 * @Description JPA的单表数据查询以由BaseService完成 * @company hugeinfo * @author liyj * @Time 2023-02-07 15:44:59 * @version 1.0.0 */ @Slf4j @Service public class ThRmtjService { @Autowired private ThRmtjAuditService thRmtjAuditService; @Autowired private ThRmtjApplyService thRmtjApplyService; @Autowired private CaseInfoService caseInfoService; @Autowired private CaseInfoUnfoldService caseInfoUnfoldService; @Autowired private CasePersonService casePersonService; @Autowired private CaseMediatorService caseMediatorService; @Autowired private SysClientImpl sysClient; @Autowired private ThRmtjUserService thRmtjUserService; @Autowired private ThRmtjUnitService thRmtjUnitService; public static final String uri = "https://gzsrmtj.gzsfj.gov.cn/admin/"; public static final String username = "develop"; public static final String password = "Tj@66442"; public static final String code = "440111"; // token过期时间,10分钟 public static final int expireIn = 10; /** * 获取token * @throws Exception */ public void getToken() throws Exception{ try{ String url = uri + "api/auth/token"; Map params = Maps.newHashMap(); params.put("username", username); params.put("password", password); // 无accessToken过期,获取 if (ObjectUtils.isEmpty(SsfjToken.expireTime) || ObjectUtils.isEmpty(SsfjToken.accessToken)) { String result = HttpClientUtils.httpPostForm(url, params, null, null); JSONObject jsonObject = JSONObject.fromObject(result); int code = jsonObject.getInt("code"); if (code == 200) { JSONObject dataJson = jsonObject.getJSONObject("data"); SsfjToken.accessToken = dataJson.getString("accessToken"); SsfjToken.refreshToken = dataJson.getString("refreshToken"); SsfjToken.expireTime = DateUtils.addSecond(DateUtils.getNowDate(), expireIn); } else { throw new Exception(jsonObject.toString()); } } // accessToken过期,重新获取 if (SsfjToken.expireTime.before(DateUtils.getNowDate())){ String result = HttpClientUtils.httpPostForm(url, params, null, null); JSONObject jsonObject = JSONObject.fromObject(result); int code = jsonObject.getInt("code"); if (code == 200) { JSONObject dataJson = jsonObject.getJSONObject("data"); SsfjToken.accessToken = dataJson.getString("accessToken"); SsfjToken.refreshToken = dataJson.getString("refreshToken"); SsfjToken.expireTime = DateUtils.addSecond(DateUtils.getNowDate(), expireIn); } else { throw new Exception(jsonObject.toString()); } } }catch (Exception e){ throw new Exception(e.getMessage(), e); } } /** * 案件导入广州市人民调解系统 * @throws Exception */ public String dyhToRmtj(String caseId, Date rmtjTime){ try{ // 判断获取token this.getToken(); // 开始封装案件信息报文 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); CaseInfo caseInfo = caseInfoService.getById(caseId); CaseInfoUnfold caseInfoUnfold = caseInfoUnfoldService.getById(caseId); // 调解员 ThRmtjUser tjy = thRmtjUserService.getByUserId(caseInfoUnfold.getMediatorId()); if (ObjectUtils.isEmpty(tjy)){ // 找不到人民调解账号,挂在管理员下 tjy = thRmtjUserService.getAdminByUnitId(caseInfoUnfold.getMediateUnitId()); // 村居的管理员找不到,挂在镇街管理员下 if (ObjectUtils.isEmpty(tjy)){ CtUnitDTO ctUnitDTO = thRmtjUnitService.getUnitById(caseInfoUnfold.getMediateUnitId()); if (UserBaseConsts.UNIT_GRADE_4 == ctUnitDTO.getUnitGrade()){ tjy = thRmtjUserService.getAdminByUnitId(ctUnitDTO.getParentId()); if (ObjectUtils.isEmpty(tjy)){ tjy = new ThRmtjUser(); } }else if (UserBaseConsts.UNIT_GRADE_3 == ctUnitDTO.getUnitGrade() && UserBaseConsts.UNIT_TYPE_101 != ctUnitDTO.getUnitType()){ tjy = thRmtjUserService.getAdminByUnitId(ctUnitDTO.getParentId()); if (ObjectUtils.isEmpty(tjy)){ tjy = new ThRmtjUser(); } } } tjy.setName(caseInfoUnfold.getMediator()); } // 调解组织 ThRmtjUnit tjzz = thRmtjUnitService.getByCode(tjy.getCommitteeId()); List ownerIds = new ArrayList<>(); ownerIds.add(caseInfo.getId()); CaseUpdateDTO caseUpdateDTO = new CaseUpdateDTO(); // === 案件信息 === CaseInfoFormDTO caseInfoFormDTO = new CaseInfoFormDTO(); caseInfoFormDTO.setSfdajh(0); if (caseInfo.getPeopleNum()> 10) { caseInfoFormDTO.setSfqtxaj(1); }else { caseInfoFormDTO.setSfqtxaj(0); } caseInfoFormDTO.setSlrq(sdf.format(caseInfo.getCreateTime())); caseInfoFormDTO.setAjbh(caseInfo.getId()); caseInfoFormDTO.setAjly(RmtjSourceEnum.getCode(caseInfo.getSource())); if (ObjectUtils.isNotEmpty(caseInfo.getOccurTime())) { caseInfoFormDTO.setJffsrq(sdf.format(caseInfo.getOccurTime())); }else { caseInfoFormDTO.setJffsrq(sdf.format(caseInfo.getCreateTime())); } caseInfoFormDTO.setTjzz(tjzz.getName()); caseInfoFormDTO.setTjy(tjy.getDisputeMediatorId()); caseInfoFormDTO.setMediator(tjy.getName()); QueryWrapper caseMediatorQueryWrapper = new QueryWrapper<>(); caseMediatorQueryWrapper.eq("case_id", caseInfo.getId()).eq("mediator_type", CaseBaseConsts.MEDIATOR_TYPE_1); List caseMediatorList = caseMediatorService.list(caseMediatorQueryWrapper); if(CollectionUtils.isNotEmpty(caseMediatorList)){ CaseMediator caseMediator = caseMediatorList.get(0); if (org.apache.commons.lang3.StringUtils.isNotEmpty(caseMediator.getMediatorId())) { ThRmtjUser qttjy = thRmtjUserService.getByUserId(caseMediator.getMediatorId()); if (ObjectUtils.isNotEmpty(qttjy)) { caseInfoFormDTO.setQttjy(qttjy.getDisputeMediatorId()); caseInfoFormDTO.setOtherMediator(qttjy.getName()); } else { caseInfoFormDTO.setOtherMediator(caseMediator.getMediatorName()); } }else { caseInfoFormDTO.setOtherMediator(caseMediator.getMediatorName()); } } if (ObjectUtils.isNotEmpty(caseInfo.getVisitTime())) { caseInfoFormDTO.setDjrq(sdf.format(caseInfo.getVisitTime())); }else { caseInfoFormDTO.setDjrq(sdf.format(caseInfo.getCreateTime())); } caseInfoFormDTO.setJflx(RmtjCauseEnum.getCode(caseInfo.getOldCaseType())); QueryWrapper casePersonQueryWrapper = new QueryWrapper<>(); casePersonQueryWrapper.eq("case_id", caseInfo.getId()); List casePersonList = casePersonService.list(casePersonQueryWrapper); caseInfoFormDTO.setJfzt(SsfjUtils.perTypeMapping(casePersonList)); caseInfoFormDTO.setDsrrs(casePersonList.size()); caseInfoFormDTO.setSjzrs(caseInfo.getPeopleNum()); caseInfoFormDTO.setBh(caseInfo.getId()); caseInfoFormDTO.setSjrq(RmtjCrowdEnum.getCode(caseInfo.getCrowd())); if(org.apache.commons.lang3.StringUtils.isNotEmpty(caseInfo.getCaseDes())) { caseInfoFormDTO.setJfss(caseInfo.getCaseDes()); }else { caseInfoFormDTO.setJfss("详见申请材料"); } caseInfoFormDTO.setSqsx(caseInfo.getCaseClaim()); caseInfoFormDTO.setAjzt(RmtjAjztEnum.AJZT_4.getCode()); caseInfoFormDTO.setSlrzj(tjy.getDisputeUserId()); caseInfoFormDTO.setCjrzj(tjy.getDisputeUserId()); if (ObjectUtils.isNotEmpty(caseInfo.getUpdateTime())) { caseInfoFormDTO.setCjsj(sdf.format(caseInfo.getCreateTime())); }else { caseInfoFormDTO.setCjsj(sdf.format(caseInfo.getVisitTime())); } if (ObjectUtils.isNotEmpty(caseInfo.getUpdateTime())) { caseInfoFormDTO.setZhgxsj(sdf.format(caseInfo.getUpdateTime())); }else { caseInfoFormDTO.setZhgxsj(sdf.format(caseInfo.getVisitTime())); } caseInfoFormDTO.setDelete(0); caseInfoFormDTO.setOrgName(tjzz.getName()); caseUpdateDTO.setCaseInfoForm(caseInfoFormDTO); // === 办结信息 === GzCaseFinishDTO gzCaseFinishDTO = new GzCaseFinishDTO(); gzCaseFinishDTO.setAjyc(1); gzCaseFinishDTO.setCjsj(sdf.format(caseInfo.getCreateTime())); gzCaseFinishDTO.setDelete(0); gzCaseFinishDTO.setDsrsfmy(RmtjDsrsfmyEnum.getCode(caseInfoUnfold.getPartyJoy())); gzCaseFinishDTO.setFjhqk(1); gzCaseFinishDTO.setJlry(tjy.getName()); gzCaseFinishDTO.setJlryid(tjy.getDisputeMediatorId()); gzCaseFinishDTO.setSfkjjf(1); gzCaseFinishDTO.setSflsylja(0); gzCaseFinishDTO.setSfynfzjf(0); if (ObjectUtils.isNotEmpty(caseInfoUnfold.getAcceptTime())) { gzCaseFinishDTO.setSlrq(sdf.format(caseInfoUnfold.getAcceptTime())); } gzCaseFinishDTO.setTjjg(Integer.valueOf(SsfjUtils.mediResultMapping(caseInfoUnfold.getMediResult()))); if (ObjectUtils.isNotEmpty(caseInfoUnfold.getCloseTime())) { gzCaseFinishDTO.setTjjsrq(sdf.format(caseInfoUnfold.getCloseTime())); } if (ObjectUtils.isNotEmpty(caseInfoUnfold.getMediStartTime())) { gzCaseFinishDTO.setTjksrq(sdf.format(caseInfoUnfold.getMediStartTime())); } gzCaseFinishDTO.setTjy(caseInfoFormDTO.getMediator()); gzCaseFinishDTO.setTjyid(caseInfoFormDTO.getTjy()); gzCaseFinishDTO.setTjzt(SsfjUtils.gzCaseFinishTjztMapping(caseInfoUnfold.getMediResult())); gzCaseFinishDTO.setTjzz(caseInfoUnfold.getMediateUnitName()); gzCaseFinishDTO.setTjzzid(tjzz.getCode()); gzCaseFinishDTO.setZhgxsj(caseInfoFormDTO.getZhgxsj()); // 人民调解系统办结日期取转入时间 gzCaseFinishDTO.setBjrq3(sdf.format(rmtjTime)); caseUpdateDTO.setGzCaseFinish(gzCaseFinishDTO); // === 当事人信息 === List parties = new ArrayList<>(); int countApplicant = 0; int countRespondent = 0; for (CasePerson casePerson: casePersonList){ if(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())){ countApplicant ++; } if(CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())){ countRespondent ++; } } for (CasePerson casePerson: casePersonList){ ownerIds.add(casePerson.getId()); PartiesDTO partiesDTO = new PartiesDTO(); partiesDTO.setAjlx(2); if(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())){ partiesDTO.setBfdsrsl(countApplicant); }else{ partiesDTO.setBfdsrsl(countRespondent); } if (ObjectUtils.isNotEmpty(casePerson.getCreateTime())) { partiesDTO.setCjsj(sdf.format(casePerson.getCreateTime())); }else { partiesDTO.setCjsj(sdf.format(caseInfo.getCreateTime())); } partiesDTO.setDelete(0); if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())) { partiesDTO.setDsrbs(1); }else{ partiesDTO.setDsrbs(2); } if (org.apache.commons.lang3.StringUtils.isNumeric(casePerson.getMobile())) { partiesDTO.setDsrdh(casePerson.getMobile()); } if(CaseBaseConstsEnum.PERSON_CLASS_1.getIndex().equals(casePerson.getPerClass())){ partiesDTO.setDsrxm(casePerson.getTrueName()); }else { partiesDTO.setDsrxm(casePerson.getDeputy()); partiesDTO.setDwm(casePerson.getTrueName()); } partiesDTO.setDwdzhzz(casePerson.getAddr()); partiesDTO.setMz(RmtjMzEnum.getCode(casePerson.getNation())); if (CaseBaseConstsEnum.PERSON_CLASS_1.getIndex().equals(casePerson.getPerClass())) { partiesDTO.setRylb(1); }else if(CaseBaseConstsEnum.PERSON_CLASS_2.getIndex().equals(casePerson.getPerClass())){ partiesDTO.setRylb(2); }else if(CaseBaseConstsEnum.PERSON_CLASS_3.getIndex().equals(casePerson.getPerClass())){ partiesDTO.setRylb(3); } partiesDTO.setXb(SsfjUtils.sexMapping(casePerson.getSex())); if (ObjectUtils.isNotEmpty(casePerson.getUpdateTime())) { partiesDTO.setZhgxsj(sdf.format(casePerson.getUpdateTime())); }else { partiesDTO.setZhgxsj(caseInfoFormDTO.getZhgxsj()); } partiesDTO.setZjhm(casePerson.getCertiNo()); partiesDTO.setZjlx(SsfjUtils.cardTypeMapping(casePerson.getCertiType())); parties.add(partiesDTO); } caseUpdateDTO.setParties(parties); // === 附件信息 === List files = this.fileUpload(ownerIds); caseUpdateDTO.setFiles(files); // === 归档信息 === GzCaseArchivedDTO gzCaseArchivedDTO = new GzCaseArchivedDTO(); gzCaseArchivedDTO.setAjlx(2); if (ObjectUtils.isNotEmpty(caseInfoUnfold.getFileLimitYear())) { gzCaseArchivedDTO.setBgnx(caseInfoUnfold.getFileLimitYear()); }else { gzCaseArchivedDTO.setBgnx(5); } gzCaseArchivedDTO.setBz(caseInfoUnfold.getWindupContent()); gzCaseArchivedDTO.setCjsj(sdf.format(caseInfo.getCreateTime())); gzCaseArchivedDTO.setDelete(0); if (ObjectUtils.isNotEmpty(caseInfoUnfold.getFileBookNo())) { gzCaseArchivedDTO.setJh(caseInfoUnfold.getFileBookNo()); }else { gzCaseArchivedDTO.setJh(caseInfo.getId()); } if (ObjectUtils.isNotEmpty(caseInfoUnfold.getFileBookName())) { gzCaseArchivedDTO.setJm(caseInfoUnfold.getFileBookName()); }else { gzCaseArchivedDTO.setJm(caseInfo.getId()); } gzCaseArchivedDTO.setJzlb(RmtjCauseEnum.getCode(caseInfo.getCaseType())); gzCaseArchivedDTO.setJzqksm(caseInfoUnfold.getFileContent()); gzCaseArchivedDTO.setLjr(tjy.getName()); gzCaseArchivedDTO.setLjrid(tjy.getDisputeMediatorId()); if (ObjectUtils.isNotEmpty(caseInfoUnfold.getFileTime())) { gzCaseArchivedDTO.setLjrq(sdf.format(caseInfoUnfold.getFileTime())); } if (org.apache.commons.lang3.StringUtils.isNotEmpty(caseInfoUnfold.getFileYear())) { gzCaseArchivedDTO.setNd(caseInfoUnfold.getFileYear().replace("年", "")); } if (ObjectUtils.isNotEmpty(caseInfoUnfold.getMediEndTime())) { gzCaseArchivedDTO.setTjjsrq(sdf.format(caseInfoUnfold.getMediEndTime())); } if (ObjectUtils.isNotEmpty(caseInfoUnfold.getMediStartTime())) { gzCaseArchivedDTO.setTjksrq(sdf.format(caseInfoUnfold.getMediStartTime())); } gzCaseArchivedDTO.setZhgxsj(caseInfoFormDTO.getZhgxsj()); gzCaseArchivedDTO.setTjy(tjy.getName()); gzCaseArchivedDTO.setTjyid(tjy.getDisputeMediatorId()); gzCaseArchivedDTO.setTjzz(tjzz.getName()); gzCaseArchivedDTO.setTjzzid(tjzz.getCode()); caseUpdateDTO.setGzCaseArchived(gzCaseArchivedDTO); // 传输案件信息 String url = uri+"api/receive/update"; Map headers = Maps.newHashMap(); headers.put("Authorization", SsfjToken.accessToken); JsonMapper jsonMapper = new JsonMapper(); String dataJson = jsonMapper.toJson(caseUpdateDTO); log.info(caseInfo.getId()+"传输案件报文:"+dataJson); String result = HttpClientUtils.httpPutRaw(url, dataJson, headers, null); log.info(caseInfo.getId()+"传输返回报文:"+result); return result; }catch (Exception e){ log.error("案件信息转入广州市人民调解系统失败,封装案件信息失败:"+e.getMessage(), e); throw new MethodException("案件信息转入广州市人民调解系统失败,封装案件信息失败:"+e.getMessage(), e); } } /** * 人民调解系统同步-文件上传 * @throws Exception */ public List fileUpload(List ownerIds) throws Exception{ try{ // 判断获取token this.getToken(); // 开始封装案件附件报文 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List filesDTOS = new ArrayList<>(); List files = new ArrayList<>(); List fileInfoBaseDTOList = thRmtjAuditService.listByOwnerIs(ownerIds); for (FileInfoBaseDTO fileInfoBaseDTO: fileInfoBaseDTOList){ FtpUtils ftpUtil = new FtpUtils(); InputStream inputStream = ftpUtil.retrieveFileStream(fileInfoBaseDTO.getFullPath()); if (ObjectUtils.isNotEmpty(inputStream)) { File file = new File(fileInfoBaseDTO.getName() + "." + fileInfoBaseDTO.getSuffix()); FileUtils.copyInputStreamToFile(inputStream, file); files.add(file); } } // 传输案件附件 String url = uri+"api/common/file_upload"; Map headers = Maps.newHashMap(); headers.put("Authorization", SsfjToken.accessToken); String result = HttpClientUtils.httpPostFormFiles(url, null, "files", files, headers, null); JSONObject jsonObject = JSONObject.fromObject(result); int code = jsonObject.getInt("code"); if (code == 200){ JSONArray dataArray = jsonObject.getJSONArray("data"); for (int i=0; i headers = Maps.newHashMap(); headers.put("Authorization", SsfjToken.accessToken); String result = HttpClientUtils.httpGet(url, headers, null); return result; }catch (Exception e){ log.error("获取调解员信息失败:"+e.getMessage(), e); throw new MethodException("获取调解员信息失败:"+e.getMessage(), e); } } /** * 人民调解系统-获取调解单位信息 * @throws Exception */ public String listRmtjUnit(){ try{ String url = uri+"api/receive/get_committee?code="+code; Map headers = Maps.newHashMap(); headers.put("Authorization", SsfjToken.accessToken); String result = HttpClientUtils.httpGet(url, headers, null); return result; }catch (Exception e){ log.error("获取调解单位信息失败:"+e.getMessage(), e); throw new MethodException("获取调解单位信息失败:"+e.getMessage(), e); } } }