|
|
@@ -146,10 +146,36 @@ public class AdminProjectReportedImportService extends CrudService<AdminProjectR
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
- @Transactional(readOnly = false)
|
|
|
+ /**
|
|
|
+ * 校验导入数据,收集所有错误(不做任何数据库写入操作)
|
|
|
+ * @param list 导入的数据列表
|
|
|
+ * @return map包含 success(是否全部通过) 和 errorMessages(错误信息列表)
|
|
|
+ */
|
|
|
public Map<String,Object> disposeData(List<AdminProjectReportedImport> list){
|
|
|
Map<String,Object> map = new HashMap<>();
|
|
|
- for (AdminProjectReportedImport info : list) {
|
|
|
+ List<String> errorMessages = new ArrayList<>();
|
|
|
+ // 用于校验阶段生成的咨询员数据(不入库,仅暂存)
|
|
|
+ List<ReportedConsultant> allConsultants = new ArrayList<>();
|
|
|
+
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ AdminProjectReportedImport info = list.get(i);
|
|
|
+ int rowNum = i + 1;
|
|
|
+ String projectDesc = "第" + rowNum + "条【" + info.getProjectName() + "】";
|
|
|
+
|
|
|
+ // 关键字段长度校验(防止数据库字段截断)
|
|
|
+ if(StringUtils.isNotBlank(info.getProjectName()) && info.getProjectName().length() > 200){
|
|
|
+ errorMessages.add(projectDesc + "项目名称过长(超过200字符)");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(StringUtils.isNotBlank(info.getDangABH()) && info.getDangABH().length() > 100){
|
|
|
+ errorMessages.add(projectDesc + "造价记录编号过长(超过100字符)");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(StringUtils.isNotBlank(info.getWeiTuoDW()) && info.getWeiTuoDW().length() > 200){
|
|
|
+ errorMessages.add(projectDesc + "委托单位名称过长(超过200字符)");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
//地区处理
|
|
|
if(StringUtils.isNotBlank(info.getAreaProvince())){
|
|
|
if("本省".equals(info.getAreaProvince())){
|
|
|
@@ -163,24 +189,20 @@ public class AdminProjectReportedImportService extends CrudService<AdminProjectR
|
|
|
if(null != district && StringUtils.isNotBlank(district.getId()) && StringUtils.isNotBlank(district.getPid())){
|
|
|
info.setS3(district.getId());
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在地(区)填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在地(区)填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在地(区)填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在地(区)填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在地(市)填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在地(市)填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在地(市)填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在地(市)填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
} else if("外省".equals(info.getAreaProvince())){
|
|
|
info.setS1("999");
|
|
|
@@ -189,24 +211,20 @@ public class AdminProjectReportedImportService extends CrudService<AdminProjectR
|
|
|
if(null != district && StringUtils.isNotBlank(district.getId()) && StringUtils.isNotBlank(district.getPid())){
|
|
|
info.setS3(district.getId());
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在地(区)填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在地(区)填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在地(区)填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在地(区)填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
}else {
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在省份填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在省份填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "工程所在省份填写错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "工程所在省份填写错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
//项目类型处理
|
|
|
@@ -217,60 +235,92 @@ public class AdminProjectReportedImportService extends CrudService<AdminProjectR
|
|
|
//造价记录编号判重
|
|
|
Integer count = this.getByDangABH(info.getDangABH());
|
|
|
if(count > 0){
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "造价记录编号已存在");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "造价记录编号已存在");
|
|
|
+ continue;
|
|
|
}
|
|
|
//咨询项目负责人处理
|
|
|
User projectMaster = UserUtils.getByUserName(info.getProjectMaster());
|
|
|
if(null != projectMaster){
|
|
|
- ReportedConsultant reportedConsultant = new ReportedConsultant();
|
|
|
- reportedConsultant.setReportedId(info.getId());
|
|
|
- reportedConsultant.setZixunyuan(projectMaster.getId());
|
|
|
- reportedConsultant.setZhucezigezhKey("161");
|
|
|
- reportedConsultant.setWcyysrbl(80D);
|
|
|
+ ReportedConsultant masterConsultant = new ReportedConsultant();
|
|
|
+ masterConsultant.setReportedId(info.getId());
|
|
|
+ masterConsultant.setZixunyuan(projectMaster.getId());
|
|
|
+ masterConsultant.setZhucezigezhKey("161");
|
|
|
+ masterConsultant.setWcyysrbl(80D);
|
|
|
if(StringUtils.isNotBlank(info.getZiXunShouRu())){
|
|
|
- reportedConsultant.setWcyysr(Double.valueOf(info.getZiXunShouRu())*0.8);
|
|
|
+ masterConsultant.setWcyysr(Double.valueOf(info.getZiXunShouRu())*0.8);
|
|
|
}else{
|
|
|
- reportedConsultant.setWcyysr(0D);
|
|
|
+ masterConsultant.setWcyysr(0D);
|
|
|
}
|
|
|
- reportedConsultant.setRoleFlag("1");
|
|
|
- reportedConsultant.preInsert();
|
|
|
- ruralProjectRecordsReportedDao.insertConsultant(reportedConsultant);
|
|
|
+ masterConsultant.setRoleFlag("1");
|
|
|
+ masterConsultant.preInsert();
|
|
|
+ allConsultants.add(masterConsultant);
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "项目负责人:" + info.getProjectMaster() + " 错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "项目负责人:" + info.getProjectMaster() + " 错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
//专业咨询员处理
|
|
|
User projectConsultant = UserUtils.getByUserName(info.getProjectConsultant());
|
|
|
if(null != projectConsultant){
|
|
|
- ReportedConsultant reportedConsultant = new ReportedConsultant();
|
|
|
- reportedConsultant.setReportedId(info.getId());
|
|
|
- reportedConsultant.setZixunyuan(projectConsultant.getId());
|
|
|
- reportedConsultant.setZhucezigezhKey("161");
|
|
|
- reportedConsultant.setWcyysrbl(20D);
|
|
|
- reportedConsultant.setWordnr("审核");
|
|
|
+ ReportedConsultant consultantConsultant = new ReportedConsultant();
|
|
|
+ consultantConsultant.setReportedId(info.getId());
|
|
|
+ consultantConsultant.setZixunyuan(projectConsultant.getId());
|
|
|
+ consultantConsultant.setZhucezigezhKey("161");
|
|
|
+ consultantConsultant.setWcyysrbl(20D);
|
|
|
+ consultantConsultant.setWordnr("审核");
|
|
|
if(StringUtils.isNotBlank(info.getZiXunShouRu())){
|
|
|
- reportedConsultant.setWcyysr(Double.valueOf(info.getZiXunShouRu())*0.2);
|
|
|
+ consultantConsultant.setWcyysr(Double.valueOf(info.getZiXunShouRu())*0.2);
|
|
|
}else{
|
|
|
- reportedConsultant.setWcyysr(0D);
|
|
|
+ consultantConsultant.setWcyysr(0D);
|
|
|
}
|
|
|
- reportedConsultant.setRoleFlag("0");
|
|
|
- reportedConsultant.preInsert();
|
|
|
- ruralProjectRecordsReportedDao.insertConsultant(reportedConsultant);
|
|
|
+ consultantConsultant.setRoleFlag("0");
|
|
|
+ consultantConsultant.preInsert();
|
|
|
+ allConsultants.add(consultantConsultant);
|
|
|
}else{
|
|
|
- map.put("success",false);
|
|
|
- map.put("message",info.getProjectName() + "专业咨询员:" + info.getProjectConsultant() + " 错误");
|
|
|
- return map;
|
|
|
+ errorMessages.add(projectDesc + "专业咨询员:" + info.getProjectConsultant() + " 错误");
|
|
|
+ continue;
|
|
|
}
|
|
|
}
|
|
|
- map.put("success",true);
|
|
|
- map.put("message","数据处理成功");
|
|
|
- map.put("data",list);
|
|
|
+
|
|
|
+ if(errorMessages.isEmpty()){
|
|
|
+ map.put("success", true);
|
|
|
+ map.put("data", list);
|
|
|
+ map.put("consultants", allConsultants);
|
|
|
+ } else {
|
|
|
+ map.put("success", false);
|
|
|
+ map.put("errorMessages", errorMessages);
|
|
|
+ }
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 批量导入项目数据(在同一事务中插入所有记录和咨询员数据)
|
|
|
+ * @param list 校验通过的项目数据列表
|
|
|
+ * @param allConsultants 校验阶段生成的咨询员数据
|
|
|
+ */
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @Transactional(readOnly = false)
|
|
|
+ public void batchImport(List<AdminProjectReportedImport> list, List<ReportedConsultant> allConsultants){
|
|
|
+ // 批量插入项目记录
|
|
|
+ for (AdminProjectReportedImport projectReportedImport : list){
|
|
|
+ projectReportedImport.setProjectRecordId("0"); //项目编号
|
|
|
+ projectReportedImport.setProjectCode("0"); //项目代码
|
|
|
+ projectReportedImport.setProjectClassify("99"); //项目分类
|
|
|
+ projectReportedImport.setTouZiXZ("102"); //投资性质
|
|
|
+ projectReportedImport.setHeTongLeiXing("10"); //合同类型
|
|
|
+ projectReportedImport.setPorjectStruct("099"); //工程结构
|
|
|
+ projectReportedImport.setGCGMValue("50"); //建筑规模
|
|
|
+ projectReportedImport.setGCGMValueParameter("1项");//建筑规模
|
|
|
+ projectReportedImport.setPorjectUse("09"); //工程用途
|
|
|
+ projectReportedImport.setOffice(UserUtils.getSelectOffice());
|
|
|
+ projectReportedImport.setCompany(UserUtils.getSelectCompany());
|
|
|
+ dao.insert(projectReportedImport);
|
|
|
+ }
|
|
|
+ // 批量插入咨询员记录
|
|
|
+ for (ReportedConsultant consultant : allConsultants){
|
|
|
+ ruralProjectRecordsReportedDao.insertConsultant(consultant);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@Transactional(readOnly = false)
|
|
|
public void saveImport(AdminProjectReportedImport projectReportedImport){
|