Ver código fonte

细节修改

wangliang 1 ano atrás
pai
commit
af25e77a97

+ 47 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBCrmDetailServiceImpl.java

@@ -35,6 +35,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -167,11 +168,57 @@ public class TBCrmDetailServiceImpl extends ServiceImpl<TBCrmDetailMapper, TBCrm
                     throw ExceptionResultEnum.ERROR.exception("一次最多支持导入1000条");
                 }
                 List<TBCrmDetail> tbCrmDetailList = new ArrayList<>(crmDetailImportDtoList.size());
+                Set<String> courseNameSet = new LinkedHashSet<>();
+                List<String> duplicateCourseNameList = new ArrayList<>();
                 for (int i = 0; i < crmDetailImportDtoList.size(); i++) {
                     CrmDetailImportDto c = crmDetailImportDtoList.get(i);
+                    if (!courseNameSet.add(c.getCourseName())) { // 如果set.add返回false,表示已经添加过该元素,即有重复
+                        duplicateCourseNameList.add(c.getCourseName());
+                    }
                     tbCrmDetailList.add(new TBCrmDetail(crmNo, tfCustomFlow.getFlowDeploymentId(), c, sysUser.getId()));
                 }
+                if (CollectionUtils.isNotEmpty(duplicateCourseNameList)) {
+                    throw ExceptionResultEnum.ERROR.exception(
+                            "导入数据里有重复的科目:" + StringUtils.join(duplicateCourseNameList, ","));
+                }
                 if (!CollectionUtils.isEmpty(tbCrmDetailList)) {
+                    if (CollectionUtils.isNotEmpty(courseNameSet)) {
+                        List<TBCrmDetail> tbCrmDetailListAll = new ArrayList<>();
+                        int size = courseNameSet.size();
+                        if (size > 500) {
+                            List<String> courseNameList = new ArrayList<>(courseNameSet);
+                            int max = 500, min = 0;
+                            while (max <= size) {
+                                List<TBCrmDetail> tbCrmDetailTempList = tbCrmDetailService.list(
+                                        new QueryWrapper<TBCrmDetail>().lambda().eq(TBCrmDetail::getCrmNo, crmNo)
+                                                .in(TBCrmDetail::getCourseName, courseNameList.subList(min, max)));
+                                if (CollectionUtils.isNotEmpty(tbCrmDetailTempList)) {
+                                    tbCrmDetailListAll.addAll(tbCrmDetailTempList);
+                                }
+                                if (max == size) {
+                                    break;
+                                }
+                                min = max;
+                                max += max;
+                                if (max >= size) {
+                                    max = size;
+                                }
+                            }
+                        } else {
+                            List<TBCrmDetail> tbCrmDetailTempList = tbCrmDetailService.list(
+                                    new QueryWrapper<TBCrmDetail>().lambda().eq(TBCrmDetail::getCrmNo, crmNo)
+                                            .in(TBCrmDetail::getCourseName, courseNameSet));
+                            if (CollectionUtils.isNotEmpty(tbCrmDetailTempList)) {
+                                tbCrmDetailListAll.addAll(tbCrmDetailTempList);
+                            }
+                        }
+                        if (CollectionUtils.isNotEmpty(tbCrmDetailListAll)) {
+                            List<String> courseNameDuplicateList = tbCrmDetailListAll.stream()
+                                    .map(s -> s.getCourseName()).collect(Collectors.toList());
+                            throw ExceptionResultEnum.ERROR.exception(
+                                    "已有重复的科目:" + StringUtils.join(courseNameDuplicateList, ","));
+                        }
+                    }
                     successData.add("共导入").add(crmDetailImportDtoList.size() + "").add("条数据");
                     tbCrmDetailService.saveBatch(tbCrmDetailList);
                 }