|
|
@@ -11,6 +11,7 @@ import com.ruoyi.common.core.redis.RedisCache;
|
|
11
|
11
|
import com.ruoyi.common.utils.DateUtils;
|
|
12
|
12
|
import com.ruoyi.common.utils.SmsUtils;
|
|
13
|
13
|
import com.ruoyi.wisdomarbitrate.domain.vo.BookSendVO;
|
|
|
14
|
+import com.ruoyi.wisdomarbitrate.domain.vo.ColumnValue;
|
|
14
|
15
|
import com.ruoyi.wisdomarbitrate.mapper.*;
|
|
15
|
16
|
import com.ruoyi.wisdomarbitrate.utils.CaseLogUtils;
|
|
16
|
17
|
import com.ruoyi.common.utils.EmailOutUtil;
|
|
|
@@ -25,11 +26,16 @@ import lombok.extern.slf4j.Slf4j;
|
|
25
|
26
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
26
|
27
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
27
|
28
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
|
|
29
|
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
|
|
30
|
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
|
|
|
31
|
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
|
|
28
|
32
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
29
|
33
|
import org.springframework.mail.MailSendException;
|
|
30
|
34
|
import org.springframework.mail.javamail.JavaMailSender;
|
|
31
|
35
|
import org.springframework.stereotype.Service;
|
|
32
|
36
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
37
|
+import org.w3c.dom.Node;
|
|
|
38
|
+import org.w3c.dom.NodeList;
|
|
33
|
39
|
|
|
34
|
40
|
import java.io.*;
|
|
35
|
41
|
import java.math.BigDecimal;
|
|
|
@@ -43,7 +49,9 @@ import java.text.NumberFormat;
|
|
43
|
49
|
import java.text.SimpleDateFormat;
|
|
44
|
50
|
import java.time.LocalDate;
|
|
45
|
51
|
import java.util.*;
|
|
|
52
|
+import java.util.regex.Matcher;
|
|
46
|
53
|
import java.util.regex.Pattern;
|
|
|
54
|
+import java.util.stream.Collectors;
|
|
47
|
55
|
|
|
48
|
56
|
import static com.ruoyi.common.utils.SecurityUtils.getUsername;
|
|
49
|
57
|
|
|
|
@@ -72,284 +80,230 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
|
|
72
|
80
|
private SendMailRecordMapper sendMailRecordMapper;
|
|
73
|
81
|
@Autowired
|
|
74
|
82
|
private SmsRecordMapper smsRecordMapper;
|
|
75
|
|
-
|
|
|
83
|
+ @Autowired
|
|
|
84
|
+ private TemplateManageMapper templateManageMapper;
|
|
|
85
|
+ @Autowired
|
|
|
86
|
+ private ColumnValueMapper columnValueMapper;
|
|
|
87
|
+ // 仲裁反请求模板内容
|
|
|
88
|
+ private final String counterclaim= "在《2022年版仲裁规则》第十八条第(一)项规定的期限内,被申请人向秘书处提交了" +
|
|
|
89
|
+ "《仲裁反请求申请书》及证据材料。仲裁委依据《2022年版仲裁规则》第十八条的规定受理了该仲裁反请求案申请。" +
|
|
|
90
|
+ "仲裁反请求案件受理后,秘书处向被申请人发送了仲裁反请求通知书及附件,向申请人发送了仲裁反请求通知书及附件、仲裁反请求申请书及附件。";
|
|
|
91
|
+ // 财产保全内容
|
|
|
92
|
+ String preservation = "本案受理后,申请人向仲裁委提交了财产保全申请,仲裁委根据《中华人民共和国仲裁法》" +
|
|
|
93
|
+ "第二十八条之规定,将该申请提交至法院。";
|
|
|
94
|
+ // 管辖权异议
|
|
|
95
|
+ String jurisdictionalObjection = "本案受理后,被申请人向仲裁委提交了《管辖异议申请书》,认为" +
|
|
|
96
|
+ ",仲裁委经审理,当庭驳回了被申请人的管辖异议申请,并告知被申请人具体的事实和理由将在裁决书中一并列明。";
|
|
|
97
|
+ // 线上开庭时+线上仲裁
|
|
|
98
|
+ String onLineDate="{{onLineDate}}";
|
|
|
99
|
+ String onLine = "仲裁庭审阅了申请人提交的仲裁申请书、证据材料后,于"+onLineDate+"通过仲裁委智慧仲裁平台开庭审理了本案。";
|
|
|
100
|
+ // 开庭+线下仲裁
|
|
|
101
|
+ String offLineDate="{{offLineDate}}";
|
|
|
102
|
+ String offLine = "仲裁庭审阅了申请人提交的仲裁申请书、证据材料后,于 "+offLineDate+"在仲裁委所在地开庭审理了本案。";
|
|
|
103
|
+ //书面仲裁时
|
|
|
104
|
+ String writtenDate="{{writtenDate}}";
|
|
|
105
|
+ String written = "仲裁庭审阅了申请人提交的仲裁申请书、证据材料后,于"+writtenDate+"在仲裁委所在地开庭审理了本案。";
|
|
|
106
|
+ //开庭+缺席审理
|
|
|
107
|
+ String absent = "申请人的特别授权委托代理人{{agentName}}"+"出席了庭审。被申请人经依法送达开庭通知,无正当理由未出席庭审,故仲裁庭依据" +
|
|
|
108
|
+ "《2022年版仲裁规则》第四十条第(二)项的规定,对本案进行了缺席审理。庭审中,申请人陈述了仲裁请求事项及事实与理由,出示了证据材料并进行了说明,\" +\n" +
|
|
|
109
|
+ " \"发表了意见,回答了仲裁庭的提问,并作了最后陈述。因被申请人缺席庭审,故仲裁庭无法组织调解。"+"综上,仲裁庭依据《上海仲裁委员会仲裁规则》(2022年7月1日起施行的版本)" +
|
|
|
110
|
+ "第四十条第(二)项、第五十一条的规定,缺席裁决如下:";
|
|
|
111
|
+ // 开庭+出席
|
|
|
112
|
+ String attend="申请人的特别授权委托代理人{{agentName}}和被申请人本人出席了庭审。 ";
|
|
|
113
|
+ // 开庭+出席+被申提供证据
|
|
|
114
|
+ String onLineAttendFile="庭审中,申请人陈述了仲裁请求事项及所依据的事实与理由,被申请人进行了答辩;双方当事人均出示了证据材料并对对方的证据材料进行了质证;双方当事人均回答了仲裁庭的提问,进行了辩论,并分别作了最后陈述。双方当事人在仲裁庭的主持下进行了调解,但未能达成调解协议。 ";
|
|
|
115
|
+ // 开庭+出席+被申未提供证据
|
|
|
116
|
+ String onLineAttend="庭审中,申请人陈述了仲裁请求事项及所依据的事实与理由,被申请人进行了答辩;申请人出示了证据材料,被申请人对对方的证据材料进行了质证; 双方当事人均回答了仲裁庭的提问,进行了辩论,并分别作了最后陈述。双方当事人在仲裁庭的主持下进行了调解,但未能达成调解协议。 ";
|
|
|
117
|
+ // 被申请人出席答辩意见
|
|
|
118
|
+ String resAttendOpinion="\n(二)被申请人的答辩意见 \n(三)当事人提供的证据材料及对方的质证意见\n" +
|
|
|
119
|
+ "申请人为证明其主张的事实和理由,向仲裁庭提交了如下证据材料:\n{{applicantFile}}\n被申请人对上述材料的质证意见为:{{respondentOpinion}}\n";
|
|
|
120
|
+ // 被申请人出席+被申请人提供了资料
|
|
|
121
|
+ String resFile="被申请人向仲裁庭提交了如下证据材料:\n{{resFile}}" +
|
|
|
122
|
+ "申请人对上述材料的质证意见为:{{applicantOpinion}}";
|
|
|
123
|
+ // 被申请人缺席
|
|
|
124
|
+ String resAbsent="(二)当事人提供的证据材料\n" +
|
|
|
125
|
+ "申请人为证明其主张的事实和理由,向仲裁庭提交了如下证据材料:\n{{applicantFile}}";
|
|
76
|
126
|
@Override
|
|
77
|
127
|
@Transactional
|
|
78
|
|
- public AjaxResult createDocument(CaseApplication caseApplication) {
|
|
|
128
|
+ public AjaxResult createDocument(CaseApplication caseApplicationReq) {
|
|
|
129
|
+ String templatePath="";
|
|
|
130
|
+ String templateName="";
|
|
|
131
|
+ String agentName="";
|
|
|
132
|
+ String resName="";
|
|
79
|
133
|
try {
|
|
80
|
134
|
Map<String, Object> datas = new HashMap<>();
|
|
81
|
|
- Long id = caseApplication.getId();
|
|
|
135
|
+ Long id = caseApplicationReq.getId();
|
|
82
|
136
|
if (id == null) {
|
|
83
|
|
- return null;
|
|
|
137
|
+ return AjaxResult.error("案件id不能为空");
|
|
84
|
138
|
}
|
|
|
139
|
+
|
|
85
|
140
|
//获取案件详细信息
|
|
86
|
|
- CaseApplication caseApplication1 = caseApplicationMapper.selectCaseApplication(caseApplication);
|
|
87
|
|
- //生成编码
|
|
88
|
|
- String equipmentNo = getNewEquipmentNo();
|
|
89
|
|
- datas.put("num", equipmentNo);
|
|
|
141
|
+ CaseApplication caseApplicationById = caseApplicationService.selectCaseApplication(caseApplicationReq);
|
|
|
142
|
+
|
|
|
143
|
+ if(caseApplicationById==null){
|
|
|
144
|
+ return AjaxResult.error("案件不存在");
|
|
|
145
|
+ }
|
|
|
146
|
+ // 根据模板id查找对应的模板
|
|
|
147
|
+ if(caseApplicationById.getTemplateId()!=null) {
|
|
|
148
|
+ TemplateManage templateManage = new TemplateManage();
|
|
|
149
|
+ templateManage.setId(caseApplicationById.getTemplateId());
|
|
|
150
|
+ List<TemplateManage> templateManages = templateManageMapper.selectTemplateList(templateManage);
|
|
|
151
|
+ if(CollectionUtil.isEmpty(templateManages)){
|
|
|
152
|
+ return AjaxResult.error("请先指定裁决书模板");
|
|
|
153
|
+ }
|
|
|
154
|
+ templatePath=templateManages.get(0).getTemOrigPath();
|
|
|
155
|
+ templateName=templateManages.get(0).getFileName();
|
|
|
156
|
+ }
|
|
90
|
157
|
//获取仲裁记录表里的相关信息
|
|
91
|
158
|
ArbitrateRecord arbitrateRecord = new ArbitrateRecord();
|
|
92
|
159
|
arbitrateRecord.setCaseAppliId(id);
|
|
93
|
|
- ArbitrateRecord arbitrateRecord1 = arbitrateRecordMapper.selectArbitrateRecord(arbitrateRecord);
|
|
94
|
|
- //获取案件关联人信息
|
|
95
|
|
- CaseAffiliate caseAffiliate = new CaseAffiliate();
|
|
96
|
|
- caseAffiliate.setCaseAppliId(id);
|
|
97
|
|
- List<CaseAffiliate> caseAffiliates = caseAffiliateMapper.selectCaseAffiliate(caseAffiliate);
|
|
98
|
|
- String applicantName="";
|
|
99
|
|
- String debtorName = "";
|
|
100
|
|
- List<String> nameAgentList = new ArrayList<>();
|
|
101
|
|
- if (caseAffiliates != null && caseAffiliates.size() > 0) {
|
|
102
|
|
- for (CaseAffiliate affiliate : caseAffiliates) {
|
|
103
|
|
- //获取身份类型
|
|
104
|
|
- int identityType = affiliate.getIdentityType();
|
|
105
|
|
- if (identityType == 1) { //申请人
|
|
106
|
|
- applicantName=affiliate.getName();
|
|
107
|
|
- datas.put("appName", affiliate.getName());
|
|
108
|
|
- datas.put("appAddress", affiliate.getResidenAffili());
|
|
109
|
|
- datas.put("appContactAddress", affiliate.getContactAddress());
|
|
110
|
|
- datas.put("appLegalPerson", affiliate.getCompLegalPerson());
|
|
111
|
|
- datas.put("appLegalPersonTitle", affiliate.getCompLegalperPost());
|
|
112
|
|
- datas.put("appAgentName", affiliate.getNameAgent());
|
|
113
|
|
- datas.put("appAgentTitle", affiliate.getAppliAgentTitle());
|
|
114
|
|
- nameAgentList.add(affiliate.getNameAgent());
|
|
115
|
|
- } else if (identityType == 2) { //被申请人
|
|
116
|
|
- debtorName=affiliate.getName();
|
|
117
|
|
- datas.put("resName", affiliate.getName());
|
|
118
|
|
- datas.put("resAddress", affiliate.getResidenAffili());
|
|
119
|
|
- String responSex = affiliate.getResponSex();
|
|
120
|
|
- if (responSex.equals("0")) {
|
|
121
|
|
- datas.put("resSex", "男");
|
|
122
|
|
- } else if (responSex.equals("1")){
|
|
123
|
|
- datas.put("resSex", "女");
|
|
124
|
|
- }else {
|
|
125
|
|
- datas.put("resSex", "未知");
|
|
126
|
|
- }
|
|
127
|
|
- Date responBirth = affiliate.getResponBirth();
|
|
128
|
|
- if (responBirth != null) {
|
|
129
|
|
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
|
|
130
|
|
- String responBirthStr = sdf.format(responBirth);
|
|
131
|
|
- datas.put("resDateOfBirth", responBirthStr);
|
|
132
|
|
- }
|
|
133
|
|
- datas.put("resContactAddress", affiliate.getContactAddress());
|
|
134
|
|
- nameAgentList.add(affiliate.getNameAgent());
|
|
|
160
|
+ ArbitrateRecord arbitrateRecordSelect = arbitrateRecordMapper.selectArbitrateRecord(arbitrateRecord);
|
|
|
161
|
+
|
|
|
162
|
+ // todo 获取模板中的所有占位符,该占位符字段必须和抓取字段一致,暂时写死
|
|
|
163
|
+ // todo 生成裁决书的内容从key-value表中取,不从案件基本信息表取,会有问题,如果修改的话会有问题,暂不考虑该情况
|
|
|
164
|
+
|
|
|
165
|
+ // 根据案件id查询key-value表
|
|
|
166
|
+ List<ColumnValue> columnValueList = columnValueMapper.listByCaseId(caseApplicationReq.getId());
|
|
|
167
|
+ // 获取模板中的占位符key
|
|
|
168
|
+ List<String> bookmarkList = getBookmarkByDocx(templatePath);
|
|
|
169
|
+ if(CollectionUtil.isEmpty(bookmarkList)){
|
|
|
170
|
+ // 直接保存模板为裁决书
|
|
|
171
|
+ saveArbitorFile(id,templateName,templatePath,caseApplicationById,arbitrateRecordSelect);
|
|
|
172
|
+ return AjaxResult.success("生成裁决书成功");
|
|
|
173
|
+ }
|
|
|
174
|
+ // 如果该表没值,在从主表填充裁决书模板
|
|
|
175
|
+ if(CollectionUtil.isNotEmpty(columnValueList)){
|
|
|
176
|
+ Map<String, String> columnValueMap = columnValueList.stream().collect(Collectors.toMap(ColumnValue::getColumn, ColumnValue::getValue));
|
|
|
177
|
+ agentName=columnValueMap.get("agentName");
|
|
|
178
|
+ resName=columnValueMap.get("respondentName");
|
|
|
179
|
+ // 懒得if,暂时这样
|
|
|
180
|
+ //
|
|
|
181
|
+ for (String bookmark : bookmarkList) {
|
|
|
182
|
+ if(columnValueMap.containsKey(bookmark)){
|
|
|
183
|
+ datas.put(bookmark,columnValueMap.get(bookmark));
|
|
135
|
184
|
}
|
|
136
|
185
|
}
|
|
|
186
|
+ }else {
|
|
|
187
|
+
|
|
137
|
188
|
}
|
|
138
|
|
- Date createTime = caseApplication1.getCreateTime();
|
|
|
189
|
+ // 裁决书生成时间
|
|
|
190
|
+ LocalDate now = LocalDate.now();
|
|
|
191
|
+ String year = Integer.toString(now.getYear());
|
|
|
192
|
+ datas.put("year", year);
|
|
|
193
|
+ //生成编码
|
|
|
194
|
+ String equipmentNo = getNewEquipmentNo();
|
|
|
195
|
+ // 裁决书编号
|
|
|
196
|
+ datas.put("num", equipmentNo);
|
|
|
197
|
+ // 案件创建时间
|
|
|
198
|
+ Date createTime = caseApplicationById.getCreateTime();
|
|
139
|
199
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
|
|
140
|
200
|
// 将日期格式化为字符串
|
|
141
|
201
|
String createTimeStr = sdf.format(createTime);
|
|
142
|
202
|
datas.put("submissionDate", createTimeStr);
|
|
143
|
|
- Date registerDate = caseApplication1.getRegisterDate();
|
|
|
203
|
+ // 立案日期
|
|
|
204
|
+ Date registerDate = caseApplicationById.getRegisterDate();
|
|
144
|
205
|
String registerDateStr = sdf.format(registerDate);
|
|
145
|
206
|
datas.put("acceptDate", registerDateStr);
|
|
146
|
|
- //反请求
|
|
147
|
|
- Integer adjudicaCounter = caseApplication1.getAdjudicaCounter();
|
|
148
|
|
- String counterclaim = "在《2022年版仲裁规则》第十八条第(一)项规定的期限内,被申请人向秘书处提交了" +
|
|
149
|
|
- "《仲裁反请求申请书》及证据材料。仲裁委依据《2022年版仲裁规则》第十八条的规定受理了该仲裁反请求案申请。" +
|
|
150
|
|
- "仲裁反请求案件受理后,秘书处向被申请人发送了仲裁反请求通知书及附件,向申请人发送了仲裁反请求通知书及附件、仲裁反请求申请书及附件。";
|
|
151
|
|
- if (adjudicaCounter == null) {
|
|
152
|
|
- datas.put("counterclaim", null);
|
|
153
|
|
- } else if (adjudicaCounter == 1) {
|
|
|
207
|
+
|
|
|
208
|
+ // 如果有仲裁反请求,该字段设置值
|
|
|
209
|
+ Integer adjudicaCounter = caseApplicationById.getAdjudicaCounter();
|
|
|
210
|
+ if (adjudicaCounter!=null&&adjudicaCounter == 1) {
|
|
154
|
211
|
datas.put("counterclaim", counterclaim);
|
|
155
|
|
- } else {
|
|
156
|
|
- datas.put("counterclaim", null);
|
|
157
|
212
|
}
|
|
158
|
213
|
//财产保全
|
|
159
|
|
- Integer properPreser = caseApplication1.getProperPreser();
|
|
160
|
|
- String preservation = "本案受理后,申请人向仲裁委提交了财产保全申请,仲裁委根据《中华人民共和国仲裁法》" +
|
|
161
|
|
- "第二十八条之规定,将该申请提交至法院。";
|
|
162
|
|
- if (properPreser == null) {
|
|
163
|
|
- datas.put("preservation", null);
|
|
164
|
|
- } else if (properPreser == 1) {
|
|
|
214
|
+ Integer properPreser = caseApplicationById.getProperPreser();
|
|
|
215
|
+ if (properPreser!=null&&properPreser == 1) {
|
|
165
|
216
|
datas.put("preservation", preservation);
|
|
166
|
|
- } else {
|
|
167
|
|
- datas.put("preservation", null);
|
|
168
|
217
|
}
|
|
169
|
218
|
//管辖权异议
|
|
170
|
|
- Integer objectiJuris = caseApplication1.getObjectiJuris();
|
|
171
|
|
- String jurisdictionalObjection = "本案受理后,被申请人向仲裁委提交了《管辖异议申请书》,认为" +
|
|
172
|
|
- ",仲裁委经审理,当庭驳回了被申请人的管辖异议申请,并告知被申请人具体的事实和理由将在裁决书中一并列明。";
|
|
173
|
|
- if (objectiJuris == null) {
|
|
174
|
|
- datas.put("jurisdictionalObjection", null);
|
|
175
|
|
- } else if (objectiJuris == 1) {
|
|
|
219
|
+ Integer objectiJuris = caseApplicationById.getObjectiJuris();
|
|
|
220
|
+ if (objectiJuris!=null&&objectiJuris == 1) {
|
|
176
|
221
|
datas.put("jurisdictionalObjection", jurisdictionalObjection);
|
|
177
|
|
- } else {
|
|
178
|
|
- datas.put("jurisdictionalObjection", null);
|
|
179
|
222
|
}
|
|
180
|
|
- String arbitratorName = caseApplication1.getArbitratorName();
|
|
181
|
|
- datas.put("arbitratorName", arbitratorName);
|
|
182
|
|
- Integer arbitratMethod = caseApplication1.getArbitratMethod();
|
|
183
|
|
- Date hearDate = caseApplication1.getHearDate();
|
|
|
223
|
+ // 仲裁员名称
|
|
|
224
|
+ datas.put("arbitratorName", caseApplicationById.getArbitratorName());
|
|
|
225
|
+ // 审理方式
|
|
|
226
|
+ Integer arbitratMethod = caseApplicationById.getArbitratMethod();
|
|
|
227
|
+ Date hearDate = caseApplicationById.getHearDate();
|
|
184
|
228
|
if (hearDate != null) {
|
|
|
229
|
+ // 审理日期
|
|
185
|
230
|
String hearDateStr = sdf.format(hearDate);
|
|
186
|
|
-
|
|
187
|
|
-
|
|
|
231
|
+ // todo 线上仲裁/线下仲裁方式未选择
|
|
188
|
232
|
//线上开庭时
|
|
189
|
233
|
if (arbitratMethod == 1) {
|
|
190
|
|
- String onLine1 = "仲裁庭审阅了申请人提交的仲裁申请书、证据材料后,于";
|
|
191
|
|
- String onLine2 = "通过仲裁委智慧仲裁平台开庭审理了本案。";
|
|
192
|
|
- datas.put("onLine1", onLine1);
|
|
193
|
|
- datas.put("hearDate", hearDateStr);
|
|
194
|
|
- datas.put("onLine2", onLine2);
|
|
|
234
|
+ String replace = onLine.replace(onLineDate, hearDateStr);
|
|
|
235
|
+ datas.put("onLine", replace);
|
|
195
|
236
|
} else {
|
|
196
|
237
|
//书面仲裁时
|
|
197
|
|
- String written1 = "仲裁庭审阅了申请人提交的仲裁申请书、证据材料后,于";
|
|
198
|
|
- String written2 = "在仲裁委所在地开庭审理了本案。";
|
|
199
|
|
- datas.put("written1", written1);
|
|
200
|
|
- datas.put("hearDate1", hearDateStr);
|
|
201
|
|
- datas.put("written2", written2);
|
|
202
|
|
- }
|
|
203
|
|
- }
|
|
|
238
|
+ String replace = written.replace(writtenDate, hearDateStr);
|
|
|
239
|
+ datas.put("written", replace);
|
|
204
|
240
|
|
|
205
|
|
- Integer isAbsence = caseApplication1.getIsAbsence();
|
|
206
|
|
- if (isAbsence == null) {
|
|
207
|
|
- datas.put("absent1", null);
|
|
208
|
|
- datas.put("absent2", null);
|
|
209
|
|
- datas.put("absent3", null);
|
|
210
|
|
- datas.put("absent4", null);
|
|
211
|
|
- datas.put("absent5", null);
|
|
212
|
|
- datas.put("attend1", null);
|
|
213
|
|
- datas.put("attend2", null);
|
|
214
|
|
- datas.put("attend3", null);
|
|
215
|
|
- datas.put("attend4", null);
|
|
216
|
|
- datas.put("attend5", null);
|
|
217
|
|
- datas.put("attend6", null);
|
|
218
|
|
- datas.put("attend7", null);
|
|
219
|
|
- datas.put("appAgentName1", null);
|
|
220
|
|
- datas.put("appAgentName2", null);
|
|
221
|
|
- datas.put("resAgentName", null);
|
|
222
|
|
- } else if (isAbsence == 1) {
|
|
223
|
|
- //缺席审理
|
|
224
|
|
- String absent1 = "申请人的特别授权委托代理人";
|
|
225
|
|
- String absent2 = "出席了庭审。被申请人经依法送达开庭通知,无正当理由未出席庭审,故仲裁庭依据" +
|
|
226
|
|
- "《2022年版仲裁规则》第四十条第(二)项的规定,对本案进行了缺席审理。";
|
|
227
|
|
- String absent3 = "庭审中,申请人陈述了仲裁请求事项及事实与理由,出示了证据材料并进行了说明," +
|
|
228
|
|
- "发表了意见,回答了仲裁庭的提问,并作了最后陈述。因被申请人缺席庭审,故仲裁庭无法组织调解。";
|
|
229
|
|
- String absent4 = "(二/三)当事人提供的证据材料\n" +
|
|
230
|
|
- "申请人为证明其主张的事实和理由,向仲裁庭提交了如下证据材料:";
|
|
231
|
|
- String absent5 = "综上,仲裁庭依据《上海仲裁委员会仲裁规则》(2022年7月1日起施行的版本)" +
|
|
232
|
|
- "第四十条第(二)项、第五十一条的规定,缺席裁决如下:";
|
|
233
|
|
- datas.put("absent1", absent1);
|
|
234
|
|
- datas.put("absent2", absent2);
|
|
235
|
|
- datas.put("absent3", absent3);
|
|
236
|
|
- datas.put("absent4", absent4);
|
|
237
|
|
- datas.put("absent5", absent5);
|
|
238
|
|
- datas.put("appAgentName1", nameAgentList.get(0));
|
|
239
|
|
- } else {
|
|
240
|
|
- //出席审理
|
|
241
|
|
- String attend1 = "申请人的特别授权委托代理人";
|
|
242
|
|
- String attend2 = "和被申请人本人/的特别授权委托代理人";
|
|
243
|
|
- String attend3 = "出席了庭审。";
|
|
244
|
|
- String attend4 = "庭审中,申请人陈述了仲裁请求事项及所依据的事实与理由,被申请人进行了答辩;" +
|
|
245
|
|
- "双方当事人均出示了证据材料并对对方的证据材料进行了质证;申请人出示了证据材料," +
|
|
246
|
|
- "被申请人对对方的证据材料进行了质证;双方当事人均回答了仲裁庭的提问,进行了辩论," +
|
|
247
|
|
- "并分别作了最后陈述。双方当事人在仲裁庭的主持下进行了调解,但未能达成调解协议。";
|
|
248
|
|
- String attend5 = "(二)被申请人的答辩意见";
|
|
249
|
|
- String attend6 = "(二/三)当事人提供的证据材料及对方的质证意见\n" +
|
|
250
|
|
- "申请人为证明其主张的事实和理由,向仲裁庭提交了如下证据材料:";
|
|
251
|
|
- String attend7 = "被申请人对上述材料的质证意见为:";
|
|
252
|
|
- datas.put("attend1", attend1);
|
|
253
|
|
- datas.put("attend2", attend2);
|
|
254
|
|
- datas.put("attend3", attend3);
|
|
255
|
|
- datas.put("attend4", attend4);
|
|
256
|
|
- datas.put("attend5", attend5);
|
|
257
|
|
- datas.put("attend6", attend6);
|
|
258
|
|
- datas.put("attend7", attend7);
|
|
259
|
|
- datas.put("responCrossOpin", arbitrateRecord1.getRespondentOpinion());
|
|
260
|
|
- datas.put("appAgentName2", nameAgentList.get(0));
|
|
261
|
|
- datas.put("resAgentName", nameAgentList.get(1));
|
|
262
|
|
- if (arbitratMethod == 1) {
|
|
263
|
|
- //被申出席+开庭
|
|
264
|
|
- String attend8 = "综上,仲裁庭依据《上海仲裁委员会仲裁规则》(2022年7月1日起施行的版本)" +
|
|
265
|
|
- "第五十一条的规定,裁决如下:";
|
|
266
|
|
- datas.put("attend8", attend8);
|
|
267
|
|
- } else {
|
|
268
|
|
- //被申出席+书面
|
|
269
|
|
- String attend9 = "综上,仲裁庭依据《上海仲裁委员会仲裁规则》(2022年7月1日起施行的版本)" +
|
|
270
|
|
- "第五十一条、第五十八条的规定,裁决如下:";
|
|
271
|
|
- datas.put("attend9", attend9);
|
|
272
|
241
|
}
|
|
273
|
242
|
}
|
|
274
|
|
- // 申请人的仲裁请求及事实和理由 申请人称 在事实与理由抓取
|
|
275
|
|
- datas.put("claims", caseApplication1.getFacts());
|
|
276
|
|
-// datas.put("request", caseApplication1.getRequestRule());
|
|
277
|
|
- CaseApplication caseApplication2 = caseApplicationService.selectCaseApplication(caseApplication);
|
|
278
|
|
- // todo 合同编号
|
|
279
|
|
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
|
|
280
|
|
- // datas.put("partyA", caseApplication2.getContractNumber());
|
|
281
|
|
- // Date loanStartDate = caseApplication2.getLoanStartDate();
|
|
282
|
|
- // datas.put("lonStartDate",simpleDateFormat.format(loanStartDate));
|
|
283
|
|
- // datas.put("contractNumber",caseApplication2.getContractNumber());
|
|
284
|
|
- // 合同名称
|
|
285
|
|
- // datas.put("contractName",caseApplication2.getContractName());
|
|
286
|
|
- // todo 查询该批号的裁决内容模板
|
|
287
|
|
- String template="一、被申请人{1}应于{2}前向申请人{3}一次性支付剩余贷款{4}元。\n" +
|
|
288
|
|
- "二、本案仲裁费人民币{5}元(已由申请人预缴),由申请人{6}承担\n";
|
|
289
|
|
- Date loanEndDate = caseApplication2.getLoanEndDate();
|
|
290
|
|
-
|
|
291
|
|
- String outstandingMoney = caseApplication2.getOutstandingMoney();
|
|
292
|
|
- NumberFormat format = NumberFormat.getInstance();
|
|
293
|
|
- String outstandingMoneyFormat="";
|
|
294
|
|
-
|
|
295
|
|
- if(StrUtil.isNotEmpty(outstandingMoney)) {
|
|
296
|
|
- outstandingMoneyFormat = format.format(new BigDecimal(outstandingMoney));
|
|
|
243
|
+ // 所有附件
|
|
|
244
|
+ List<CaseAttach> caseAttachList = caseApplicationById.getCaseAttachList();
|
|
|
245
|
+ Map<Integer, List<CaseAttach>> caseAttachMap=new HashMap<>();
|
|
|
246
|
+ if(caseAttachList!=null&&caseAttachList.size()>0){
|
|
|
247
|
+ caseAttachMap = caseAttachList.stream().collect(Collectors.groupingBy(CaseAttach::getAnnexType));
|
|
297
|
248
|
}
|
|
298
|
|
- String rulingFollows = template.replace("{1}", debtorName).replace("{2}", simpleDateFormat.format(loanEndDate))
|
|
299
|
|
- .replace("{3}", applicantName).replace("{4}", outstandingMoneyFormat)
|
|
300
|
|
- .replace("{5}", String.valueOf(caseApplication2.getFeePayable()))
|
|
301
|
|
- .replace("{6}", applicantName);
|
|
302
|
|
- // 请求仲裁庭裁决
|
|
303
|
|
- datas.put("request", caseApplication1.getArbitratClaims());
|
|
304
|
|
- List<CaseAttach> caseAttachList1 = caseApplication2.getCaseAttachList();
|
|
305
|
|
- if (caseAttachList1 != null && caseAttachList1.size() > 0) {
|
|
306
|
|
- StringBuilder debtorFiles=new StringBuilder();
|
|
307
|
|
- StringBuilder applicantFiles=new StringBuilder();
|
|
308
|
|
- for (CaseAttach caseAttach : caseAttachList1) {
|
|
309
|
|
- if (caseAttach.getAnnexType() == 6) { //被申请人证据材料
|
|
310
|
|
- debtorFiles.append(caseAttach.getAnnexName()).append("\r\n");
|
|
311
|
|
-// boolean isImageFile = Pattern.matches(".*\\.(jpg|png|gif|bmp)$", annexName);
|
|
312
|
|
-// if (isImageFile) {
|
|
313
|
|
-// String annexPath = "/home/ruoyi" + caseAttach.getAnnexPath();
|
|
314
|
|
-// System.out.println("路径是===========" + annexPath);
|
|
315
|
|
-// PictureRenderData pictureRenderData = WordUtil
|
|
316
|
|
-// .rebuildImageContent(100, 100, null, annexPath);
|
|
317
|
|
-// datas.put("resEvidenceMaterial", pictureRenderData);
|
|
318
|
|
-// }
|
|
319
|
|
-
|
|
320
|
|
- } else if (caseAttach.getAnnexType() == 2) { //申请人证据材料
|
|
321
|
|
-// String annexName = caseAttach.getAnnexName();
|
|
322
|
|
-// boolean isImageFile = Pattern.matches(".*\\.(jpg|png|gif|bmp)$", annexName);
|
|
323
|
|
-// if (isImageFile) {
|
|
324
|
|
-// String annexPath = "/home/ruoyi" + caseAttach.getAnnexPath();
|
|
325
|
|
-// System.out.println("路径是===========" + annexPath);
|
|
326
|
|
-// PictureRenderData pictureRenderData = WordUtil
|
|
327
|
|
-// .rebuildImageContent(100, 100, null, annexPath);
|
|
328
|
|
-// //申请人证据材料
|
|
329
|
|
-// datas.put("appEvidenceMaterial", pictureRenderData);
|
|
330
|
|
-// }
|
|
331
|
|
- applicantFiles.append(caseAttach.getAnnexName()).append("\r\n");
|
|
332
|
|
-
|
|
|
249
|
+ // 被申请人是否缺席
|
|
|
250
|
+ Integer isAbsence = caseApplicationById.getIsAbsence();
|
|
|
251
|
+ // 线上开庭
|
|
|
252
|
+ if (arbitratMethod == 1) {
|
|
|
253
|
+ if (isAbsence != null && isAbsence == 1) {
|
|
|
254
|
+ // 被申请人缺席
|
|
|
255
|
+ String absentReplace = absent.replace("{{agentName}}", agentName);
|
|
|
256
|
+ datas.put("absent",absentReplace);
|
|
|
257
|
+ // 被申请人缺席
|
|
|
258
|
+ String resAbsentReplace=resAbsent;
|
|
|
259
|
+ if(caseAttachMap!=null && CollectionUtil.isNotEmpty(caseAttachMap.get(2))){
|
|
|
260
|
+ List<CaseAttach> caseAttaches = caseAttachMap.get(2);
|
|
|
261
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
262
|
+ for (CaseAttach caseAttach : caseAttaches) {
|
|
|
263
|
+ stringBuilder.append(caseAttach.getAnnexName()).append("\n");
|
|
|
264
|
+ }
|
|
|
265
|
+ resAbsentReplace = resAttendOpinion.replace("{{applicantFile}}", stringBuilder.toString());
|
|
|
266
|
+ }
|
|
|
267
|
+ datas.put("resAbsent",resAbsentReplace);
|
|
|
268
|
+ } else {
|
|
|
269
|
+ // 出席
|
|
|
270
|
+ String attendReplace = attend.replace("{{agentName}}", agentName);
|
|
|
271
|
+ datas.put("attend",attend);
|
|
|
272
|
+ // 被申请人证据
|
|
|
273
|
+ if(caseAttachMap!=null && CollectionUtil.isNotEmpty(caseAttachMap.get(6))){
|
|
|
274
|
+ // 开庭+出席+被申提供证据
|
|
|
275
|
+ datas.put("onLineAttendFile",onLineAttendFile);
|
|
|
276
|
+ // 被申请人出席+被申请人提供了资料
|
|
|
277
|
+ String resFileRplace=resFile;
|
|
|
278
|
+ if(caseAttachMap!=null && CollectionUtil.isNotEmpty(caseAttachMap.get(6))){
|
|
|
279
|
+ List<CaseAttach> caseAttaches = caseAttachMap.get(6);
|
|
|
280
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
281
|
+ for (CaseAttach caseAttach : caseAttaches) {
|
|
|
282
|
+ stringBuilder.append(caseAttach.getAnnexName()).append("\n");
|
|
|
283
|
+ }
|
|
|
284
|
+ resFileRplace = resFile.replace("{{resFile}}", stringBuilder.toString()).replace("{{applicantOpinion}}", arbitrateRecordSelect.getApplicantOpinion());
|
|
|
285
|
+ }
|
|
|
286
|
+ datas.put("resFile",resFileRplace);
|
|
|
287
|
+ }else {
|
|
|
288
|
+ // 开庭+出席+被申未提供证据
|
|
|
289
|
+ datas.put("onLineAttend",onLineAttend);
|
|
333
|
290
|
}
|
|
|
291
|
+ // 被申请人出席答辩意见
|
|
|
292
|
+ String resAttendOpinionReplace=resAttendOpinion;
|
|
|
293
|
+ if(caseAttachMap!=null && CollectionUtil.isNotEmpty(caseAttachMap.get(2))){
|
|
|
294
|
+ List<CaseAttach> caseAttaches = caseAttachMap.get(2);
|
|
|
295
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
296
|
+ for (CaseAttach caseAttach : caseAttaches) {
|
|
|
297
|
+ stringBuilder.append(caseAttach.getAnnexName()).append("\n");
|
|
|
298
|
+ }
|
|
|
299
|
+ resAttendOpinionReplace = resAttendOpinion.replace("{{applicantFile}}", stringBuilder.toString()).replace("{{respondentOpinion}}", arbitrateRecordSelect.getRespondentOpinion());
|
|
|
300
|
+ }
|
|
|
301
|
+
|
|
|
302
|
+ datas.put("resAttendOpinion",resAttendOpinionReplace);
|
|
334
|
303
|
}
|
|
335
|
|
- // //被申请人证据材料
|
|
336
|
|
- datas.put("resEvidenceMaterial", debtorFiles.toString());
|
|
337
|
|
- //申请人证据材料
|
|
338
|
|
- datas.put("appEvidenceMaterial", applicantFiles.toString());
|
|
339
|
304
|
}
|
|
340
|
|
- // 申请人对上述材料的质证意见为
|
|
341
|
|
- datas.put("applicaCrossOpin", arbitrateRecord1.getApplicantOpinion());
|
|
342
|
|
- // 仲裁庭经审理,查明本案事实如下:
|
|
343
|
|
- datas.put("factDetermi", arbitrateRecord1.getCaseFacts());
|
|
344
|
|
- // 关于本案争议焦点
|
|
345
|
|
- datas.put("arbitrateThink", arbitrateRecord1.getCaseFocus());
|
|
346
|
|
-// datas.put("rulingFollows", "被申请人依法偿还申请人欠款");
|
|
347
|
|
- // 最终裁决
|
|
348
|
|
- datas.put("rulingFollows", rulingFollows);
|
|
349
|
305
|
|
|
350
|
|
- LocalDate now = LocalDate.now();
|
|
351
|
|
- String year = Integer.toString(now.getYear());
|
|
352
|
|
- datas.put("year", year);
|
|
|
306
|
+
|
|
353
|
307
|
String month = String.format("%02d", now.getMonthValue());
|
|
354
|
308
|
String day = String.format("%02d", now.getDayOfMonth());
|
|
355
|
309
|
String modalFilePath = "/data/arbitrate-document/template/新裁决书模板.docx";
|
|
|
@@ -376,38 +330,52 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
|
|
376
|
330
|
WordUtil.changeText(xwpfDocument);
|
|
377
|
331
|
}
|
|
378
|
332
|
String savePath = docFilePath.substring(0, docFilePath.indexOf("/upload/") + 8);
|
|
379
|
|
- CaseAttach caseAttach = CaseAttach.builder()
|
|
380
|
|
- .caseAppliId(id)
|
|
381
|
|
- .annexName(saveName)
|
|
382
|
|
- .annexPath(savePath)
|
|
383
|
|
- .annexType(3)
|
|
384
|
|
- .build();
|
|
385
|
|
- //保存到附件表里,先判断之前有没有,有的话更新,没有的话新增
|
|
386
|
|
- List<CaseAttach> caseAttachList = caseAttachMapper.getCaseAttachByCaseIdAndType(caseAttach);
|
|
387
|
|
- if (caseAttachList != null && caseAttachList.size() > 0) {
|
|
388
|
|
- //之前已经生成过了,更新
|
|
389
|
|
- int i = caseAttachMapper.updateCaseAttachBycaseid(caseAttach);
|
|
390
|
|
- } else {
|
|
391
|
|
- //之前没生成过,新增
|
|
392
|
|
- int i = caseAttachMapper.save(caseAttach);
|
|
393
|
|
- if (i > 0) {
|
|
394
|
|
- if (arbitrateRecord1 != null) {
|
|
395
|
|
- Integer annexId = caseAttach.getAnnexId();
|
|
396
|
|
- //将附件id保存到仲裁记录表里面
|
|
397
|
|
- arbitrateRecord1.setAnnexId(annexId);
|
|
398
|
|
- arbitrateRecordMapper.updataArbitrateRecord(arbitrateRecord1);
|
|
399
|
|
- }
|
|
400
|
|
- }
|
|
401
|
|
- }
|
|
402
|
|
- //修改案件状态
|
|
403
|
|
- caseApplication1.setCaseStatus(CaseApplicationConstants.VERPRIF_ARBITRATION);
|
|
404
|
|
- caseApplicationMapper.submitCaseApplication(caseApplication1);
|
|
|
333
|
+ // 保存裁决书附件
|
|
|
334
|
+ saveArbitorFile(id,saveName,savePath,caseApplicationById,arbitrateRecordSelect);
|
|
|
335
|
+
|
|
405
|
336
|
return AjaxResult.success("裁决书已生成");
|
|
406
|
337
|
} catch (IOException e) {
|
|
407
|
338
|
return AjaxResult.error(e + "请检查文件路径是否有误");
|
|
408
|
339
|
}
|
|
409
|
340
|
}
|
|
410
|
341
|
|
|
|
342
|
+ /**
|
|
|
343
|
+ * 保存裁决书附件
|
|
|
344
|
+ * @param id 案件id
|
|
|
345
|
+ * @param saveName 保存的文件名
|
|
|
346
|
+ * @param savePath 保存路径
|
|
|
347
|
+ * @param caseApplicationById 案件基本信息
|
|
|
348
|
+ * @param arbitrateRecordSelect 出裁决书生成记录
|
|
|
349
|
+ */
|
|
|
350
|
+ private void saveArbitorFile(Long id, String saveName, String savePath, CaseApplication caseApplicationById, ArbitrateRecord arbitrateRecordSelect) {
|
|
|
351
|
+ CaseAttach caseAttach = CaseAttach.builder()
|
|
|
352
|
+ .caseAppliId(id)
|
|
|
353
|
+ .annexName(saveName)
|
|
|
354
|
+ .annexPath(savePath)
|
|
|
355
|
+ .annexType(3)
|
|
|
356
|
+ .build();
|
|
|
357
|
+ //保存到附件表里,先判断之前有没有,有的话更新,没有的话新增
|
|
|
358
|
+ List<CaseAttach> caseAttachList = caseAttachMapper.getCaseAttachByCaseIdAndType(caseAttach);
|
|
|
359
|
+ if (caseAttachList != null && caseAttachList.size() > 0) {
|
|
|
360
|
+ //之前已经生成过了,更新
|
|
|
361
|
+ int i = caseAttachMapper.updateCaseAttachBycaseid(caseAttach);
|
|
|
362
|
+ } else {
|
|
|
363
|
+ //之前没生成过,新增
|
|
|
364
|
+ int i = caseAttachMapper.save(caseAttach);
|
|
|
365
|
+ if (i > 0) {
|
|
|
366
|
+ if (arbitrateRecordSelect != null) {
|
|
|
367
|
+ Integer annexId = caseAttach.getAnnexId();
|
|
|
368
|
+ //将附件id保存到仲裁记录表里面
|
|
|
369
|
+ arbitrateRecordSelect.setAnnexId(annexId);
|
|
|
370
|
+ arbitrateRecordMapper.updataArbitrateRecord(arbitrateRecordSelect);
|
|
|
371
|
+ }
|
|
|
372
|
+ }
|
|
|
373
|
+ }
|
|
|
374
|
+ //修改案件状态
|
|
|
375
|
+ caseApplicationById.setCaseStatus(CaseApplicationConstants.VERPRIF_ARBITRATION);
|
|
|
376
|
+ caseApplicationMapper.submitCaseApplication(caseApplicationById);
|
|
|
377
|
+ }
|
|
|
378
|
+
|
|
411
|
379
|
@Override
|
|
412
|
380
|
@Transactional
|
|
413
|
381
|
public AjaxResult sendDocumentByEmail(Long id, String appEmail, String resEmail, String apptrackingNum, String restrackingNum) {
|
|
|
@@ -1097,5 +1065,37 @@ public class AdjudicationServiceImpl implements IAdjudicationService {
|
|
1097
|
1065
|
}
|
|
1098
|
1066
|
}
|
|
1099
|
1067
|
|
|
|
1068
|
+ /**
|
|
|
1069
|
+ * 根据裁决书模板获取所有的占位符,占位符必须是{{name}}格式
|
|
|
1070
|
+ * @param path
|
|
|
1071
|
+ * @return
|
|
|
1072
|
+ */
|
|
|
1073
|
+ public List<String> getBookmarkByDocx(String path){
|
|
|
1074
|
+ XWPFDocument xwpfDocument = null;
|
|
|
1075
|
+ try {
|
|
|
1076
|
+ FileInputStream fileInputStream = new FileInputStream(path);
|
|
|
1077
|
+ xwpfDocument = new XWPFDocument(fileInputStream);
|
|
|
1078
|
+ } catch (IOException e) {
|
|
|
1079
|
+ e.printStackTrace();
|
|
|
1080
|
+ }
|
|
|
1081
|
+ List<XWPFParagraph> paragraphs = xwpfDocument.getParagraphs();
|
|
|
1082
|
+ String regex = "\\{\\{.*?\\}\\}"; // 定义占位符的正则表达式
|
|
|
1083
|
+ Pattern pattern = Pattern.compile(regex);
|
|
|
1084
|
+ List<String> bookmarkList=new ArrayList<>();
|
|
|
1085
|
+ for (XWPFParagraph paragraph : paragraphs) {
|
|
|
1086
|
+ String text = paragraph.getText();
|
|
|
1087
|
+ Matcher matcher = pattern.matcher(text);
|
|
|
1088
|
+
|
|
|
1089
|
+ while (matcher.find()) {
|
|
|
1090
|
+ String placeholder = matcher.group();
|
|
|
1091
|
+ String keyword = placeholder.substring(2, placeholder.length() - 2);
|
|
|
1092
|
+ bookmarkList.add(keyword);
|
|
|
1093
|
+ }
|
|
|
1094
|
+ }
|
|
|
1095
|
+ return bookmarkList;
|
|
|
1096
|
+ }
|
|
|
1097
|
+
|
|
|
1098
|
+
|
|
|
1099
|
+
|
|
1100
|
1100
|
|
|
1101
|
1101
|
}
|