Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev

This commit was merged in pull request #142.
This commit is contained in:
2024-04-18 09:36:46 +08:00
committed by Gitea
2 changed files with 6 additions and 242 deletions
@@ -103,18 +103,13 @@ public interface MsCaseApplicationService {
*/ */
AjaxResult userIdentify(MultipartFile file); AjaxResult userIdentify(MultipartFile file);
/** /**
* 生成调解申请书 * 生成调解申请书
* @param req * @param req
* @return * @return
*/ */
AjaxResult generateApplication(MsCaseApplicationReq req); AjaxResult generateApplication(MsCaseApplicationReq req);
/**
* 生成调解申请书
* @param req
* @return
*/
AjaxResult generateApplication1(MsCaseApplicationReq req);
/** /**
* 根据批次号和流程id查找未锁定的案件 * 根据批次号和流程id查找未锁定的案件
@@ -232,8 +227,7 @@ public interface MsCaseApplicationService {
* @param bookmarkList 标签 * @param bookmarkList 标签
* @param dictDataList 内置字段 * @param dictDataList 内置字段
*/ */
void createMediateApplication(MsCaseApplication application, List<MsCaseAffiliate> affiliates, String templatePath, List<String> bookmarkList, List<SysDictData> dictDataList, Integer templateType) ; void createMediateApplication(MsCaseApplication application, List<MsCaseAffiliate> affiliates, String templatePath, List<String> bookmarkList, List<SysDictData> dictDataList, Integer templateType) ;
void createMediateApplication1(MsCaseApplication application, List<MsCaseAffiliate> affiliates, String templatePath, List<String> bookmarkList, List<SysDictData> dictDataList, Integer templateType) ;
/** /**
* 调解书上传到onlyoffice服务器 * 调解书上传到onlyoffice服务器
* @param annexPath * @param annexPath
@@ -683,7 +683,7 @@ public class MsCaseApplicationServiceImpl implements MsCaseApplicationService {
// 生成调解申请书 // 生成调解申请书
req.setTemplateType(TemplateTypeEnum.PERSON_MEDIATION_APPLICATION.getCode()); req.setTemplateType(TemplateTypeEnum.PERSON_MEDIATION_APPLICATION.getCode());
req.setTemplateId(String.valueOf(caseApplication.getTemplateId())); req.setTemplateId(String.valueOf(caseApplication.getTemplateId()));
caseApplicationService.generateApplication1(req); caseApplicationService.generateApplication(req);
// 保存案件附件 // 保存案件附件
if (CollectionUtil.isNotEmpty(caseAttachList)) { if (CollectionUtil.isNotEmpty(caseAttachList)) {
for (MsCaseAttach caseAttach : caseAttachList) { for (MsCaseAttach caseAttach : caseAttachList) {
@@ -1057,7 +1057,7 @@ public class MsCaseApplicationServiceImpl implements MsCaseApplicationService {
// 自然人 // 自然人
req.setTemplateType(TemplateTypeEnum.PERSON_MEDIATION_APPLICATION.getCode()); req.setTemplateType(TemplateTypeEnum.PERSON_MEDIATION_APPLICATION.getCode());
req.setTemplateId(String.valueOf(selectByPrimaryKey.getTemplateId())); req.setTemplateId(String.valueOf(selectByPrimaryKey.getTemplateId()));
caseApplicationService.generateApplication1(req); caseApplicationService.generateApplication(req);
// 新增日志 // 新增日志
CaseLogUtils.insertCaseLog(caseApplication.getId(), 0, "修改案件",null); CaseLogUtils.insertCaseLog(caseApplication.getId(), 0, "修改案件",null);
@@ -1443,85 +1443,6 @@ public class MsCaseApplicationServiceImpl implements MsCaseApplicationService {
// MsCaseAffiliate affiliate = affiliateMap.get(application.getId()); // MsCaseAffiliate affiliate = affiliateMap.get(application.getId());
// if(affiliate==null){ // if(affiliate==null){
// continue; // continue;
// }
// caseApplicationService.createMediateApplication(application, affiliate, templatePath, bookmarkList,dictDataList,req.getTemplateType());
}
}else {
// 单独生成调解申请书
// 根据案件id查询案件信息
MsCaseApplication application = msCaseApplicationMapper.selectByPrimaryKey(req.getId());
// 查询案件关联人员
List<MsCaseAffiliate> msCaseAffiliates = selectAffliatesByCaseId(req.getId());
if (application == null || msCaseAffiliates == null) {
throw new ServiceException("该案件不存在");
}
caseApplicationService.createMediateApplication(application, msCaseAffiliates, templatePath, bookmarkList,dictDataList,req.getTemplateType());
}
return AjaxResult.success();
}
/**
* 生成调解申请书
* @param req
* @return
*/
@Transactional
@Override
public AjaxResult generateApplication1(MsCaseApplicationReq req) {
// 根据模板id查询申请书
if(req.getTemplateId()==null || req.getTemplateType()==null){
return AjaxResult.error("模板id不能为空");
}
TemplateManage templateManage=templateManageMapper.selectByIdAndType(Long.valueOf(req.getTemplateId()),req.getTemplateType());
if(templateManage==null||StrUtil.isEmpty(templateManage.getTemOrigPath())){
throw new ServiceException("未找到模板");
}
String templatePath = "/home/ruoyi" + templateManage.getTemOrigPath();
templatePath=templatePath.replace("/profile","/uploadPath");
try {
File file = new File(templatePath);
} catch (Exception e) {
throw new ServiceException("未找到模板");
}
// // 获取模板中的占位符key
List<String> bookmarkList = getBookmarkByDocx(templatePath);
if (CollectionUtil.isEmpty(bookmarkList)) {
throw new ServiceException("请检查模板是否配置正确,未获取到占位符");
}
// 在系统表中查询案件内置字段
SysDictData sysDictData = new SysDictData();
sysDictData.setDictType("case_built_type");
List<SysDictData> dictDataList = dictDataMapper.selectDictDataList(sysDictData);
if(CollectionUtil.isEmpty(dictDataList)){
throw new ServiceException("未找到系统内置字段");
}
// 如果批号不为空,则为批量操作,根据批号查询未锁定的案件
if(StrUtil.isNotEmpty(req.getBatchNumber())){
List<MsCaseApplication> caseApplicationList=listByBatchNumber(req.getBatchNumber(),req.getCaseFlowId());
if(CollectionUtil.isEmpty(caseApplicationList)){
throw new ServiceException("该批次号下未找到案件");
}
// 案件ids
List<Long> caseIds = caseApplicationList.stream().map(MsCaseApplication::getId).collect(Collectors.toList());
// 根据ids查询案件关联人员
Example afflicateExample = new Example(MsCaseAffiliate.class);
afflicateExample.createCriteria().andIn("caseAppliId", caseIds);
List<MsCaseAffiliate> affiliateList = msCaseAffiliateMapper.selectByExample(afflicateExample);
if(CollectionUtil.isEmpty(affiliateList)){
throw new ServiceException("该批次号下未找到案件关联人员");
}
Map<Long, MsCaseAffiliate> affiliateMap = affiliateList.stream().collect(Collectors.toMap(MsCaseAffiliate::getCaseAppliId, Function.identity()));
// 循环生成调解申请书
for (MsCaseApplication application : caseApplicationList) {
// todo 批量的未改案件相关人员,结构已发生变化
// MsCaseAffiliate affiliate = affiliateMap.get(application.getId());
// if(affiliate==null){
// continue;
// } // }
// caseApplicationService.createMediateApplication(application, affiliate, templatePath, bookmarkList,dictDataList,req.getTemplateType()); // caseApplicationService.createMediateApplication(application, affiliate, templatePath, bookmarkList,dictDataList,req.getTemplateType());
@@ -1536,7 +1457,7 @@ public class MsCaseApplicationServiceImpl implements MsCaseApplicationService {
throw new ServiceException("该案件不存在"); throw new ServiceException("该案件不存在");
} }
caseApplicationService.createMediateApplication1(application, msCaseAffiliates, templatePath, bookmarkList,dictDataList,req.getTemplateType()); caseApplicationService.createMediateApplication(application, msCaseAffiliates, templatePath, bookmarkList,dictDataList,req.getTemplateType());
} }
@@ -3175,7 +3096,7 @@ public class MsCaseApplicationServiceImpl implements MsCaseApplicationService {
req.setTemplateType(TemplateTypeEnum.MEDIATION_AGREEMENT.getCode()); req.setTemplateType(TemplateTypeEnum.MEDIATION_AGREEMENT.getCode());
} }
AjaxResult result = caseApplicationService.generateApplication1(req); AjaxResult result = caseApplicationService.generateApplication(req);
// 修改案件结果 // 修改案件结果
application.setMediaResult(req.getMediaResult()); application.setMediaResult(req.getMediaResult());
msCaseApplicationMapper.updateByPrimaryKeySelective(application); msCaseApplicationMapper.updateByPrimaryKeySelective(application);
@@ -3231,159 +3152,8 @@ public class MsCaseApplicationServiceImpl implements MsCaseApplicationService {
return nextFlow; return nextFlow;
} }
/**
* 生成调解申请书
* @param application 案件基本信息
* @param affiliates 案件相关人员
* @param templatePath 模板路径
* @param bookmarkList 标签
* @param dictDataList 内置字段
*/
@Transactional @Transactional
public void createMediateApplication(MsCaseApplication application, List<MsCaseAffiliate> affiliates, String templatePath, List<String> bookmarkList, List<SysDictData> dictDataList,Integer templateType) { public void createMediateApplication(MsCaseApplication application, List<MsCaseAffiliate> affiliates, String templatePath, List<String> bookmarkList, List<SysDictData> dictDataList,Integer templateType) {
// 申请书需要的字段和内容,valueMap<占位符,替换的值>
Map<String, String> valueMap = new HashMap<>();
// 操作人信息
Map<Integer, List<MsCaseAffiliate>> operatorMap = affiliates.stream().collect(Collectors.groupingBy(MsCaseAffiliate::getOperatorFlag, Collectors.toList()));
// 按角色分类
Map<Integer, MsCaseAffiliate> roleTypeMap = affiliates.stream().collect(Collectors.toMap(MsCaseAffiliate::getRoleType, Function.identity(), (k1, k2) -> k1));
// Map<Integer, List<MsCaseAffiliate>> roleTypeMap = affiliates.stream().collect(Collectors.groupingBy(MsCaseAffiliate::getRoleType, Collectors.toList()));
for (SysDictData dictData : dictDataList) {
if (CASE_BASE_COLUMN.contains(dictData.getDictValue())) {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(application, dictData.getDictValue()));
} else {
// todo 相关人员字段,如果有多个申请人,被申请人,模板需要变化,待讨论,暂做成取第一个操作人
List<MsCaseAffiliate> msCaseAffiliates = operatorMap.get(1);
if(CollectionUtil.isNotEmpty(msCaseAffiliates)) {
Map<Integer, MsCaseAffiliate> roleTypeOperatorMap = msCaseAffiliates.stream().collect(Collectors.toMap(MsCaseAffiliate::getRoleType, Function.identity(), (k1, k2) -> k1));
if(dictData.getDictLabel().contains("被申请人")){
if(roleTypeOperatorMap.get(3)!=null ) {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeOperatorMap.get(3), dictData.getDictValue()));
}else {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeMap.get(3), dictData.getDictValue()));
}
}else if(dictData.getDictLabel().contains("被申请人委托代理人")){
if(roleTypeOperatorMap.get(4)!=null ) {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeOperatorMap.get(4), dictData.getDictValue()));
}else {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeMap.get(4), dictData.getDictValue()));
}
}else if(dictData.getDictLabel().contains("申请人")
|| dictData.getDictLabel().equals("统一社会信用代码")
|| dictData.getDictLabel().equals("法定代表人")
){
if(roleTypeOperatorMap.get(1)!=null ) {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeOperatorMap.get(1), dictData.getDictValue()));
}else {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeMap.get(1), dictData.getDictValue()));
}
}else if(dictData.getDictLabel().contains("委托代理人")){
if(roleTypeOperatorMap.get(2)!=null ) {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeOperatorMap.get(2), dictData.getDictValue()));
}else {
valueMap.put(dictData.getDictLabel(), ObjectFieldUtils.getValue(roleTypeMap.get(2), dictData.getDictValue()));
}
}
}
}
}
// 书签对应值
Map<String, Object> bookmarkValueMap = new HashMap<>();
// 读取调节申请书,找到占位符,替换值
// 遍历书签,给书签赋值
replaceBookmark(bookmarkList, bookmarkValueMap, valueMap);
// 申请书生成时间
LocalDate now = LocalDate.now();
int year = now.getYear();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
// 格式化当前日期
String formattedDate = now.format(formatter);
bookmarkValueMap.put("日期", formattedDate);
String month = String.format("%02d", now.getMonthValue());
String day = String.format("%02d", now.getDayOfMonth());
String saveFolderPath = RuoYiConfig.getUploadPath()+"/"+ year + "/" + month + "/" + day;
Integer annexType = null;
if(templateType==null
|| templateType.equals(TemplateTypeEnum.MEDIATION_APPLICATION.getCode())
|| templateType.equals(TemplateTypeEnum.PERSON_MEDIATION_APPLICATION.getCode()) ){
// 调解申请书
annexType = AnnexTypeEnum.MEDIATION_APPLICATION.getCode();
}else if(templateType.equals(TemplateTypeEnum.MEDIATION_AGREEMENT.getCode())
|| templateType.equals(TemplateTypeEnum.MEDIATE_BOOK.getCode()) ){
// 调解书和解协议
annexType = AnnexTypeEnum.MEDIATE_BOOK.getCode();
}
String orgFileName = "调解申请书";
if (annexType != null && annexType.equals(AnnexTypeEnum.MEDIATE_BOOK.getCode())) {
orgFileName = "调解书";
}
String fileName = UUID.randomUUID().toString().replace("-", "")+orgFileName + ".docx";
String resultFilePath = saveFolderPath + "/" + fileName;
// 将word中的标签替换掉,生成新的word
wordChangeText(templatePath, bookmarkValueMap,saveFolderPath,resultFilePath);
MsCaseAttach caseAttach = null;
String annexPath=resultFilePath.replace(RuoYiConfig.getProfile(),Constants.RESOURCE_PREFIX);
// 如果是调解书或者调解协议上传到onlyoffice服务器
if(annexType != null && annexType.equals(AnnexTypeEnum.MEDIATE_BOOK.getCode())){
JSONArray jsonArray = caseApplicationService.uploadOnlyOffice(annexPath,application.getId());
if(jsonArray!=null && jsonArray.size() > 0){
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
caseAttach= MsCaseAttach.builder()
.caseAppliId(application.getId())
.annexName(jsonObject.getString("fileName"))
.annexPath(jsonObject.getString("filePath"))
.annexType(annexType)
.onlyOfficeFileId(jsonObject.getString("fileId"))
.build();
}
//保存到附件表里,先删除之前的在保存
msCaseAttachMapper.deleteCaseAttachByCasedIdAndType(caseAttach.getCaseAppliId(), annexType);
msCaseAttachMapper.save(caseAttach);
}
}else {
caseAttach = MsCaseAttach.builder()
.caseAppliId(application.getId())
.annexName(orgFileName+".docx")
.annexPath(resultFilePath.replace(RuoYiConfig.getProfile(),Constants.RESOURCE_PREFIX))
.annexType(annexType)
.build();
// 查找已经存在的附件
List<MsCaseAttach> existAttach = msCaseAttachMapper.listCaseAttachByCaseIdAndType(application.getId(), annexType);
if(CollectionUtil.isNotEmpty(existAttach)){
// todo 对接北明,同步案件状态,删除
for (MsCaseAttach msCaseAttach : existAttach) {
if(StrUtil.isEmpty(msCaseAttach.getOtherSysFileId())||StrUtil.isEmpty(msCaseAttach.getAnnexPath())){
continue;
}
beiMingInterfaceService.deleteAttachmentInfo(application.getCaseNum(), msCaseAttach.getOtherSysFileId(), FileUtil.getName(msCaseAttach.getAnnexPath()));
}
}
msCaseAttachMapper.deleteCaseAttachByCasedIdAndType(caseAttach.getCaseAppliId(), annexType);
if(StrUtil.isEmpty(application.getCaseSource())) {
// 北明推送
String path = "/home/ruoyi" + caseAttach.getAnnexPath();
File file = new File(path.replace("/profile", "/uploadPath"));
MsCaseFileInfo caseFileInfo = beiMingInterfaceService.pushAttachmentInfo(BMUserName, BMPassword, file, BMSyncSource, application.getCaseNum(), AttachmentOperateTypeEnum.ADD, DocumentTypeEnum.EVEDENT_APPLY_BOOK);
// 更新附件表
if (caseFileInfo != null && StrUtil.isNotEmpty(caseFileInfo.getFileId())) {
caseAttach.setOtherSysFileId(caseFileInfo.getFileId());
}
}
msCaseAttachMapper.save(caseAttach);
}
}
@Transactional
public void createMediateApplication1(MsCaseApplication application, List<MsCaseAffiliate> affiliates, String templatePath, List<String> bookmarkList, List<SysDictData> dictDataList,Integer templateType) {
// 申请书需要的字段和内容,valueMap<占位符,替换的值> // 申请书需要的字段和内容,valueMap<占位符,替换的值>
Map<String, String> valueMap = new HashMap<>(); Map<String, String> valueMap = new HashMap<>();
for (SysDictData dictData : dictDataList) { for (SysDictData dictData : dictDataList) {