1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
package com.ruoyi.service.impl;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.domain.ReviewEnterpriseArchive;
import com.ruoyi.domain.Task;
import com.ruoyi.domain.vo.EnterpriseImportFileVO;
import com.ruoyi.domain.vo.ReviewEnterpriseArchiveViewItemVO;
import com.ruoyi.domain.vo.ReviewEnterpriseArchiveViewVO;
import com.ruoyi.mapper.TaskMapper;
import com.ruoyi.service.ReviewEnterpriseArchiveService;
import com.ruoyi.mapper.ReviewEnterpriseArchiveMapper;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.web.request.ReviewEnterpriseArchiveFindByTaskIdRequest;
import com.ruoyi.web.request.ReviewEnterpriseArchiveFindFileNameListRequest;
import com.ruoyi.web.request.ReviewEnterpriseArchiveFindRequest;
import com.ruoyi.web.request.ReviewEnterpriseArchiveGetInfoRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import static com.ruoyi.common.utils.DateUtils.getNowDate;
/**
* @author wangfei
* @description 针对表【t_review_enterprise_archive(车企留档文件)】的数据库操作Service实现
* @createDate 2024-02-22 15:32:57
*/
@Service
public class ReviewEnterpriseArchiveServiceImpl extends ServiceImpl<ReviewEnterpriseArchiveMapper, ReviewEnterpriseArchive>
implements ReviewEnterpriseArchiveService {
@Autowired
private ReviewEnterpriseArchiveMapper reviewEnterpriseArchiveMapper;
@Autowired
private ISysUserService sysUserService;
@Autowired
private ReviewEnterpriseArchiveService reviewEnterpriseArchiveService;
@Autowired
private TaskMapper taskMapper;
@Override
public List<ReviewEnterpriseArchiveViewVO> view(Long taskId) {
Task task = taskMapper.selectById(taskId);
List<ReviewEnterpriseArchive> archives = reviewEnterpriseArchiveMapper.findByTaskId(taskId);
List<ReviewEnterpriseArchiveViewVO> resultList = new ArrayList<>();
// 原始数据originalList
List<ReviewEnterpriseArchiveViewVO> originalList = new ArrayList<>();
if (task.getSystemReviewTaskId() != null) {
originalList.addAll(
buildReviewEnterpriseArchiveViewVO(archives, reviewEnterpriseArchiveMapper.findViewItemVOByTaskId(task.getSystemReviewTaskId()))
);
}
if (task.getCarReviewTaskId() != null) {
originalList.addAll(
buildReviewEnterpriseArchiveViewVO(archives, reviewEnterpriseArchiveMapper.findViewItemVOByTaskId(task.getCarReviewTaskId()))
);
}
// 创建一个映射,将文件名作为键,将具有相同文件名的对象列表作为值
Map<String, List<ReviewEnterpriseArchiveViewVO>> map = new HashMap<>();
// 遍历原始列表,将对象合并到相应的文件名键所对应的值列表中
for (ReviewEnterpriseArchiveViewVO item : originalList) {
String fileName = item.getFileName();
if (!map.containsKey(fileName)) {
map.put(fileName, new ArrayList<>());
}
map.get(fileName).add(item);
}
// 遍历映射中的值列表,将对象合并到结果列表中
for (List<ReviewEnterpriseArchiveViewVO> itemList : map.values()) {
// 如果有多个对象,合并它们
if (itemList.size() > 1) {
ReviewEnterpriseArchiveViewVO mergedItem = mergeItems(itemList);
resultList.add(mergedItem);
} else {
resultList.addAll(itemList);
}
}
return resultList;
}
/**
* 合并具有相同文件名的对象
* @param itemList
* @return
*/
private static ReviewEnterpriseArchiveViewVO mergeItems(List<ReviewEnterpriseArchiveViewVO> itemList) {
// 创建一个新的 ReviewEnterpriseArchiveViewVO 对象来保存合并后的结果
ReviewEnterpriseArchiveViewVO mergedItem = new ReviewEnterpriseArchiveViewVO();
// 由于这里 items 列表需要合并,因此需要创建一个新的列表来保存合并后的结果
List<ReviewEnterpriseArchiveViewItemVO> mergedItemList = new ArrayList<>();
// 遍历 itemList 列表,将所有的 items 合并到 mergedItemList 中
for (ReviewEnterpriseArchiveViewVO item : itemList) {
mergedItemList.addAll(item.getItems());
}
// 将合并后的 items 设置到 mergedItem 中
mergedItem.setItems(mergedItemList);
// 对于其他属性,这里简单地选择第一个对象中的值作为合并后的结果
mergedItem.setId(itemList.get(0).getId());
mergedItem.setFileName(itemList.get(0).getFileName());
return mergedItem;
}
@Override
public Long addEnterpriseArchive(ReviewEnterpriseArchive reviewEnterpriseArchive) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser user = sysUserService.selectUserById(loginUser.getUserId());
reviewEnterpriseArchive.setCreateBy(user.getNickName());
reviewEnterpriseArchive.setCreateTime(new Date());
Long sum = reviewEnterpriseArchiveMapper.findFileName(reviewEnterpriseArchive.getTaskId(),reviewEnterpriseArchive.getFileName());
if (sum >0 ) {
throw new ServiceException("新增文件名称重复,请检查", HttpStatus.ERROR);
} else {
// 将附件地址存入photo字段中
if (reviewEnterpriseArchive.getUrl() != null && reviewEnterpriseArchive.getUrl().length != 0) {
String joinUrl = StringUtils.join(reviewEnterpriseArchive.getUrl(),",");
reviewEnterpriseArchive.setPhoto(joinUrl);
}
reviewEnterpriseArchiveService.save(reviewEnterpriseArchive);
ReviewEnterpriseArchiveFindByTaskIdRequest request = new ReviewEnterpriseArchiveFindByTaskIdRequest();
request.setTaskId(reviewEnterpriseArchive.getTaskId());
// 根据任务id查询任务底下的所有车企文件
List<ReviewEnterpriseArchive> list = reviewEnterpriseArchiveMapper.findEnterpriseArchiveByTaskId(request);
if (list != null && list.size() != 0) {
for (ReviewEnterpriseArchive archive : list) {
// 如果库里的企业名称不是新增时传入的企业名称则修改
if (!Objects.equals(archive.getEnterpriseName(), reviewEnterpriseArchive.getEnterpriseName())) {
archive.setEnterpriseName(reviewEnterpriseArchive.getEnterpriseName());
}
}
reviewEnterpriseArchiveService.updateBatchById(list);
}
}
return reviewEnterpriseArchive.getId();
}
@Override
public List<ReviewEnterpriseArchive> findEnterpriseArchive(ReviewEnterpriseArchiveFindRequest request) {
return reviewEnterpriseArchiveMapper.findEnterpriseArchive(request);
}
@Override
public ReviewEnterpriseArchive getInfo(ReviewEnterpriseArchiveGetInfoRequest request) {
ReviewEnterpriseArchive reviewEnterpriseArchive = reviewEnterpriseArchiveMapper.selectById(request.getId());
reviewEnterpriseArchive.setUrl(reviewEnterpriseArchive.getPhoto().split(","));
return reviewEnterpriseArchive;
}
@Override
public List<ReviewEnterpriseArchive> findList(ReviewEnterpriseArchiveFindFileNameListRequest request) {
return reviewEnterpriseArchiveMapper.findList(request.getTaskId());
}
@Override
public List<ReviewEnterpriseArchive> findEnterpriseArchiveByTaskId(ReviewEnterpriseArchiveFindByTaskIdRequest request) {
return reviewEnterpriseArchiveMapper.findEnterpriseArchiveByTaskId(request);
}
private List<ReviewEnterpriseArchiveViewVO> buildReviewEnterpriseArchiveViewVO(List<ReviewEnterpriseArchive> archives, List<ReviewEnterpriseArchiveViewItemVO> viewItems) {
List<ReviewEnterpriseArchiveViewVO> viewList = new ArrayList();
for(ReviewEnterpriseArchive archive : archives) {
ReviewEnterpriseArchiveViewVO view = new ReviewEnterpriseArchiveViewVO();
view.setId(archive.getId());
view.setFileName(archive.getFileName());
setReviewEnterpriseArchiveViewItemVO(view, viewItems);
viewList.add(view);
}
return viewList;
}
private void setReviewEnterpriseArchiveViewItemVO(ReviewEnterpriseArchiveViewVO view, List<ReviewEnterpriseArchiveViewItemVO> viewItems) {
if (viewItems == null) return;
List<ReviewEnterpriseArchiveViewItemVO> subList = new ArrayList();
Long archiveId = view.getId();
for(ReviewEnterpriseArchiveViewItemVO item : viewItems) {
if(item.getArchiveId() != null && item.getArchiveId().equals(archiveId)) {
subList.add(item);
}
}
view.setItems(subList);
}
@Override
public void importEnterprise(List<EnterpriseImportFileVO> list,Long taskId, HttpServletResponse response){
for(EnterpriseImportFileVO vo: list){
vo.setCreateTime(getNowDate());
vo.setCreateBy( SecurityUtils.getLoginUser().getUser().getNickName());
vo.setTaskId(Long.valueOf(taskId));
vo.setId(IdUtil.getSnowflake().nextId());
Long sum = reviewEnterpriseArchiveMapper.findFileName(Long.valueOf(taskId), vo.getFileName());
if (sum >0 ) {
throw new ServiceException("新增文件名称重复,请检查", HttpStatus.ERROR);
}
if(vo.getFileName().isEmpty()){
throw new ServiceException("文件名称不能为空", HttpStatus.ERROR);
}
}
reviewEnterpriseArchiveMapper.insertEnterprise(list);
}
@Override
public void editEnterpriseArchive(ReviewEnterpriseArchive reviewEnterpriseArchive) {
// 将附件地址存入photo字段中
if (reviewEnterpriseArchive.getUrl() != null && reviewEnterpriseArchive.getUrl().length != 0) {
String joinUrl = StringUtils.join(reviewEnterpriseArchive.getUrl(),",");
reviewEnterpriseArchive.setPhoto(joinUrl);
}
reviewEnterpriseArchiveService.updateById(reviewEnterpriseArchive);
}
}