Commit 89ee59f8 authored by wangqiang's avatar wangqiang

采购计划导入数据校验

parent 0ca59bd0
...@@ -28,17 +28,25 @@ public class ExtPuchasePlanExcelVO { ...@@ -28,17 +28,25 @@ public class ExtPuchasePlanExcelVO {
@ExcelProperty(value = {"采购计划","操作*"},index = 0) @ExcelProperty(value = {"采购计划","操作*"},index = 0)
@ColumnWidth(20) @ColumnWidth(20)
private String operation; private String operation;
/**
* 计划编码
*/
@ExcelProperty(value = {"采购计划","计划编号*"},index = 1)
@ColumnWidth(20)
private String planCode;
/** /**
* 外协项目名称 * 外协项目名称
*/ */
@ExcelProperty(value = {"采购计划","外协(外购)项目名称*"},index = 1) @ExcelProperty(value = {"采购计划","外协(外购)项目名称*"},index = 2)
@ColumnWidth(20) @ColumnWidth(20)
private String outsourceProjectName; private String outsourceProjectName;
/** /**
* 采购技术文件实际提交时间 * 采购技术文件实际提交时间
*/ */
@ExcelProperty(value = {"采购计划","采购技术文件提交时间*"},index = 2) @ExcelProperty(value = {"采购计划","采购技术文件提交时间*"},index = 3)
@ColumnWidth(20) @ColumnWidth(20)
private LocalDateTime purDesignFileSubmitTime; private LocalDateTime purDesignFileSubmitTime;
...@@ -46,7 +54,7 @@ public class ExtPuchasePlanExcelVO { ...@@ -46,7 +54,7 @@ public class ExtPuchasePlanExcelVO {
/** /**
* 合同签订时间* * 合同签订时间*
*/ */
@ExcelProperty(value = {"采购计划","合同签订时间*"},index = 3) @ExcelProperty(value = {"采购计划","合同签订时间*"},index = 4)
@ColumnWidth(20) @ColumnWidth(20)
private LocalDateTime contractActualSigningTime; private LocalDateTime contractActualSigningTime;
...@@ -54,14 +62,14 @@ public class ExtPuchasePlanExcelVO { ...@@ -54,14 +62,14 @@ public class ExtPuchasePlanExcelVO {
/** /**
* 合同交付时间* * 合同交付时间*
*/ */
@ExcelProperty(value = {"采购计划","合同交付时间*"},index = 4) @ExcelProperty(value = {"采购计划","合同交付时间*"},index = 5)
@ColumnWidth(20) @ColumnWidth(20)
private LocalDateTime contractActualDeliveryTime; private LocalDateTime contractActualDeliveryTime;
/** /**
* 采购技术文件负责人 * 采购技术文件负责人
*/ */
@ExcelProperty(value = {"采购计划","采购技术文件负责人*"},index = 5) @ExcelProperty(value = {"采购计划","采购技术文件负责人*"},index = 6)
@ColumnWidth(20) @ColumnWidth(20)
private String purDesignFileManager; private String purDesignFileManager;
...@@ -69,7 +77,7 @@ public class ExtPuchasePlanExcelVO { ...@@ -69,7 +77,7 @@ public class ExtPuchasePlanExcelVO {
/** /**
* 采购预算 * 采购预算
*/ */
@ExcelProperty(value = {"采购计划","预算(万元)*"},index = 6) @ExcelProperty(value = {"采购计划","预算(万元)*"},index = 7)
@ColumnWidth(20) @ColumnWidth(20)
private String purchaseBudget; private String purchaseBudget;
...@@ -84,16 +92,10 @@ public class ExtPuchasePlanExcelVO { ...@@ -84,16 +92,10 @@ public class ExtPuchasePlanExcelVO {
/** /**
* 密级 * 密级
*/ */
@ExcelProperty(value = {"采购计划","密级*"},index = 7) @ExcelProperty(value = {"采购计划","密级*"},index = 8)
@ColumnWidth(20) @ColumnWidth(20)
private String secretCode; private String secretCode;
/**
* 计划编码
*/
@ExcelProperty(value = {"采购计划","计划编号*"},index = 8)
@ColumnWidth(20)
private String planCode;
/** /**
......
...@@ -290,7 +290,7 @@ public class IEDPlanExcelListenner extends AnalysisEventListener<ExtIEDPlanExcel ...@@ -290,7 +290,7 @@ public class IEDPlanExcelListenner extends AnalysisEventListener<ExtIEDPlanExcel
} }
extIEDPlanVO.setEditor(extIEDPlanExcelVO.getEditor()); extIEDPlanVO.setEditor(extIEDPlanExcelVO.getEditor());
Map<String,Object> dynamicAttrs = new HashMap<>(); Map<String,Object> dynamicAttrs = new HashMap<>();
dynamicAttrs.put("editorName",userUtils.getUserById(Long.valueOf(extIEDPlanExcelVO.getEditor()))); dynamicAttrs.put("editorName", userUtils.getUserById(Long.valueOf(extIEDPlanExcelVO.getEditor())).getName());
extIEDPlanVO.setDynamicAttrs(dynamicAttrs); extIEDPlanVO.setDynamicAttrs(dynamicAttrs);
extIEDPlanVO.setChecker(extIEDPlanExcelVO.getChecker()); extIEDPlanVO.setChecker(extIEDPlanExcelVO.getChecker());
extIEDPlanVO.setAuditor(extIEDPlanExcelVO.getAuditor()); extIEDPlanVO.setAuditor(extIEDPlanExcelVO.getAuditor());
......
...@@ -10,6 +10,7 @@ import com.yonde.dcs.plan.common.vo.ExtPuchasePlanAttributeVO; ...@@ -10,6 +10,7 @@ import com.yonde.dcs.plan.common.vo.ExtPuchasePlanAttributeVO;
import com.yonde.dcs.plan.common.vo.ExtPuchasePlanExcelVO; import com.yonde.dcs.plan.common.vo.ExtPuchasePlanExcelVO;
import com.yonde.dcs.plan.core.service.ExtPuchasePlanAttributeService; import com.yonde.dcs.plan.core.service.ExtPuchasePlanAttributeService;
import com.yonde.dcs.plan.core.util.CommonUtils; import com.yonde.dcs.plan.core.util.CommonUtils;
import com.yonde.dcs.plan.core.util.UserUtils;
import com.yonde.dcs.plan.entity.po.ExtPuchasePlanAttribute; import com.yonde.dcs.plan.entity.po.ExtPuchasePlanAttribute;
import com.yonde.dex.basedata.data.search.SearchItem; import com.yonde.dex.basedata.data.search.SearchItem;
import com.yonde.dex.basedata.data.search.SearchItems; import com.yonde.dex.basedata.data.search.SearchItems;
...@@ -19,6 +20,7 @@ import com.yonde.dex.basedata.entity.data.OperatorType; ...@@ -19,6 +20,7 @@ import com.yonde.dex.basedata.entity.data.OperatorType;
import com.yonde.dex.basedata.exception.DxBusinessException; import com.yonde.dex.basedata.exception.DxBusinessException;
import com.yonde.dex.dao.service.util.ApplicationContextUtil; import com.yonde.dex.dao.service.util.ApplicationContextUtil;
import com.yonde.dex.dao.service.util.DxPageUtils; import com.yonde.dex.dao.service.util.DxPageUtils;
import com.yonde.dex.user.common.vo.DxUserInfoVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -28,6 +30,7 @@ import org.springframework.util.ObjectUtils; ...@@ -28,6 +30,7 @@ import org.springframework.util.ObjectUtils;
import javax.servlet.ServletContextListener; import javax.servlet.ServletContextListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
...@@ -55,6 +58,14 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -55,6 +58,14 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
*/ */
private Integer excelDataRow = 0; private Integer excelDataRow = 0;
/**
* 错误信息列表
*/
private List<StringBuffer> errorList = new ArrayList<>();
private UserUtils userUtils;
/** /**
* 缓存的数据 * 缓存的数据
*/ */
...@@ -64,13 +75,13 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -64,13 +75,13 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
public PurchasePlanExcelReadListenner(String projectId) { public PurchasePlanExcelReadListenner(String projectId) {
this.extPuchasePlanAttributeService = ApplicationContextUtil.getBean(ExtPuchasePlanAttributeService.class); this.extPuchasePlanAttributeService = ApplicationContextUtil.getBean(ExtPuchasePlanAttributeService.class);
this.userUtils = ApplicationContextUtil.getBean(UserUtils.class);
this.projectId = projectId; this.projectId = projectId;
} }
@Override @Override
public void invoke(ExtPuchasePlanExcelVO extPuchasePlanExcelVO, AnalysisContext analysisContext) { public void invoke(ExtPuchasePlanExcelVO extPuchasePlanExcelVO, AnalysisContext analysisContext) {
log.info("解析到一条数据:{}", extPuchasePlanExcelVO); log.info("解析到一条数据:{}", extPuchasePlanExcelVO);
if(!CommonUtils.checkAllPropertiesIsEmpty(extPuchasePlanExcelVO)){ if(!CommonUtils.checkAllPropertiesIsEmpty(extPuchasePlanExcelVO)){
cachedDataList.add(extPuchasePlanExcelVO); cachedDataList.add(extPuchasePlanExcelVO);
...@@ -97,12 +108,12 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -97,12 +108,12 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
extPuchasePlanAttributeVO.setOperator(OperatorType.ADD); extPuchasePlanAttributeVO.setOperator(OperatorType.ADD);
extPuchasePlanAttributeService.saveRecursion(extPuchasePlanAttributeVO); extPuchasePlanAttributeService.saveRecursion(extPuchasePlanAttributeVO);
} else if (Constants.EXCEL_UPDATE.equals(extPuchasePlanExcelVO.getOperation())) { //更新 } else if (Constants.EXCEL_UPDATE.equals(extPuchasePlanExcelVO.getOperation())) { //更新
//根据计划编获取采购计划 //根据计划编获取采购计划
ExtPuchasePlanAttributeVO purPlanForDB = getPurchasePlanByPlanCode(extPuchasePlanExcelVO.getPlanCode()); ExtPuchasePlanAttributeVO purPlanForDB = getPurchasePlanByPlanCode(extPuchasePlanExcelVO.getPlanCode());
purPlanForDB.setOperator(OperatorType.MODIFY); purPlanForDB.setOperator(OperatorType.MODIFY);
extPuchasePlanAttributeService.saveRecursion(transformObject(purPlanForDB,extPuchasePlanExcelVO)); extPuchasePlanAttributeService.saveRecursion(transformObject(purPlanForDB,extPuchasePlanExcelVO));
} else if (Constants.EXCEL_DELETE.equals(extPuchasePlanExcelVO.getOperation())) { //删除; } else if (Constants.EXCEL_DELETE.equals(extPuchasePlanExcelVO.getOperation())) { //删除;
//根据计划编获取采购计划 //根据计划编获取采购计划
ExtPuchasePlanAttributeVO purPlanForDB = getPurchasePlanByPlanCode(extPuchasePlanExcelVO.getPlanCode()); ExtPuchasePlanAttributeVO purPlanForDB = getPurchasePlanByPlanCode(extPuchasePlanExcelVO.getPlanCode());
purPlanForDB.setOperator(OperatorType.REMOVE); purPlanForDB.setOperator(OperatorType.REMOVE);
extPuchasePlanAttributeService.remove(purPlanForDB.getId()); extPuchasePlanAttributeService.remove(purPlanForDB.getId());
...@@ -112,7 +123,7 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -112,7 +123,7 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
} }
//清理list ,方便内存回收 //清理list ,方便内存回收
cachedDataList.clear(); cachedDataList.clear();
errorList.clear();
} }
/** /**
...@@ -141,6 +152,9 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -141,6 +152,9 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
extPuchasePlanAttributeVO.setPurchaseBudget(extPuchasePlanExcelVO.getPurchaseBudget()); extPuchasePlanAttributeVO.setPurchaseBudget(extPuchasePlanExcelVO.getPurchaseBudget());
//获取密级code //获取密级code
String secretCode = CommonUtils.searchDictDataByDictCode(Constants.SECRET_CODE, extPuchasePlanExcelVO.getSecretCode()); String secretCode = CommonUtils.searchDictDataByDictCode(Constants.SECRET_CODE, extPuchasePlanExcelVO.getSecretCode());
Map<String,Object> dynamicAttrs = new HashMap<>();
dynamicAttrs.put("userName", userUtils.getUserById(Long.valueOf(extPuchasePlanExcelVO.getPurDesignFileManager())).getName());
extPuchasePlanAttributeVO.setDynamicAttrs(dynamicAttrs);
extPuchasePlanAttributeVO.setSecretCode(secretCode); extPuchasePlanAttributeVO.setSecretCode(secretCode);
extPuchasePlanAttributeVO.setPlanCode(extPuchasePlanExcelVO.getPlanCode()); extPuchasePlanAttributeVO.setPlanCode(extPuchasePlanExcelVO.getPlanCode());
extPuchasePlanAttributeVO.setNote(extPuchasePlanExcelVO.getNote()); extPuchasePlanAttributeVO.setNote(extPuchasePlanExcelVO.getNote());
...@@ -155,22 +169,24 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -155,22 +169,24 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
* @return * @return
*/ */
public List<StringBuffer> checkPurchasePlanExcelData() { public List<StringBuffer> checkPurchasePlanExcelData() {
List<StringBuffer> errorList = new ArrayList<>();
if (cachedDataList.size() > 0) { if (cachedDataList.size() > 0) {
for (ExtPuchasePlanExcelVO extPuchasePlanExcelVO : cachedDataList) { for (ExtPuchasePlanExcelVO extPuchasePlanExcelVO : cachedDataList) {
StringBuffer errString = new StringBuffer(); StringBuffer errString = new StringBuffer();
if(!StringUtils.isEmpty(extPuchasePlanExcelVO.getOperation())){ //校验excel必填字段是否有效
verifyExcelRequiredFields(extPuchasePlanExcelVO,errString);
if(!StringUtils.isEmpty(extPuchasePlanExcelVO.getOperation()) && !StringUtils.isEmpty(extPuchasePlanExcelVO.getPlanCode())){
if(Constants.EXCEL_ADD.equals(extPuchasePlanExcelVO.getOperation()) && StringUtils.isNotEmpty(extPuchasePlanExcelVO.getPlanCode())){ if(Constants.EXCEL_ADD.equals(extPuchasePlanExcelVO.getOperation()) && StringUtils.isNotEmpty(extPuchasePlanExcelVO.getPlanCode())){
ExtPuchasePlanAttributeVO extPuchasePlanAttributeVO = getPurchasePlanByPlanCode(extPuchasePlanExcelVO.getPlanCode()); ExtPuchasePlanAttributeVO extPuchasePlanAttributeVO = getPurchasePlanByPlanCode(extPuchasePlanExcelVO.getPlanCode());
if(!ObjectUtils.isEmpty(extPuchasePlanAttributeVO)){ if(!ObjectUtils.isEmpty(extPuchasePlanAttributeVO)){
errString.append("新增计划编:" + extPuchasePlanExcelVO.getPlanCode() + "已存在,不能重复导入!!"); errString.append("新增计划编:" + extPuchasePlanExcelVO.getPlanCode() + "已存在,不能重复导入!!");
errorList.add(errString); errorList.add(errString);
} }
}else if(Constants.EXCEL_UPDATE.equals(extPuchasePlanExcelVO.getOperation()) && StringUtils.isEmpty(extPuchasePlanExcelVO.getPlanCode())){ }else if(Constants.EXCEL_UPDATE.equals(extPuchasePlanExcelVO.getOperation()) && StringUtils.isEmpty(extPuchasePlanExcelVO.getPlanCode())){
errString.append("更新计划编码:项目代号为" + extPuchasePlanExcelVO.getProjectCode() + "的计划编码不能为空"); errString.append("更新计划编号:项目代号为" + extPuchasePlanExcelVO.getProjectCode() + "的计划编号不能为空");
errorList.add(errString); errorList.add(errString);
}else if(Constants.EXCEL_DELETE.equals(extPuchasePlanExcelVO.getOperation()) && StringUtils.isEmpty(extPuchasePlanExcelVO.getPlanCode())){ }else if(Constants.EXCEL_DELETE.equals(extPuchasePlanExcelVO.getOperation()) && StringUtils.isEmpty(extPuchasePlanExcelVO.getPlanCode())){
errString.append("删除计划编码:项目代号为" + extPuchasePlanExcelVO.getProjectCode() + "的计划编码不能为空"); errString.append("删除计划编号:项目代号为" + extPuchasePlanExcelVO.getProjectCode() + "的计划编号不能为空");
errorList.add(errString); errorList.add(errString);
}else{ }else{
log.info("无法识别该操作符:"+extPuchasePlanExcelVO.getOperation()); log.info("无法识别该操作符:"+extPuchasePlanExcelVO.getOperation());
...@@ -187,7 +203,59 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -187,7 +203,59 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
} }
/** /**
* 根据计划编码查询计划 * //校验excel必填字段是否有效
* @param extPuchasePlanExcelVO
* @param errString
*/
private void verifyExcelRequiredFields(ExtPuchasePlanExcelVO extPuchasePlanExcelVO, StringBuffer errString) {
//外协项目不能为空
if(StringUtils.isEmpty(extPuchasePlanExcelVO.getOutsourceProjectName())){
errString.append("计划编号是:" + extPuchasePlanExcelVO.getPlanCode() + "的外协(外购)项目名称不能为空");
errorList.add(errString);
return;
}
//采购技术提交时间不能为空
if(ObjectUtils.isEmpty(extPuchasePlanExcelVO.getPurDesignFileSubmitTime())){
errString.append("计划编号是:" + extPuchasePlanExcelVO.getPlanCode() + "的采购文件提交时间不能为空");
errorList.add(errString);
return;
}
//合同签订时间不能为空
if(ObjectUtils.isEmpty(extPuchasePlanExcelVO.getContractActualSigningTime())){
errString.append("计划编号是:" + extPuchasePlanExcelVO.getPlanCode() + "的合同签订时间不能为空");
errorList.add(errString);
return;
}
//合同交付时间不能为空
if(ObjectUtils.isEmpty(extPuchasePlanExcelVO.getContractActualDeliveryTime())){
errString.append("计划编号是:" + extPuchasePlanExcelVO.getPlanCode() + "的合同交付时间不能为空");
errorList.add(errString);
return;
}
//采购技术负责人
if(StringUtils.isEmpty(extPuchasePlanExcelVO.getPurDesignFileManager())){
errString.append("计划编号是:" + extPuchasePlanExcelVO.getPlanCode() + "的采购技术文件负责人不能为空");
errorList.add(errString);
return;
}else {
DxUserInfoVO dxUserInfoVO= userUtils.getUserByName(extPuchasePlanExcelVO.getPurDesignFileManager());
if(ObjectUtils.isEmpty(dxUserInfoVO)){
errString.append("计划文件编号为:" + extPuchasePlanExcelVO.getPlanCode() + "的采购技术负责人在系统中未查到!!");
errorList.add(errString);
return;
}else {
extPuchasePlanExcelVO.setPurDesignFileManager(String.valueOf(dxUserInfoVO.getId()));
}
}
if(StringUtils.isEmpty(extPuchasePlanExcelVO.getSecretCode())){
errString.append("计划编号是:" + extPuchasePlanExcelVO.getPlanCode() + "的密级不能为空");
errorList.add(errString);
return;
}
}
/**
* 根据计划编号查询计划
* @param planCode * @param planCode
* @return * @return
*/ */
...@@ -200,14 +268,14 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc ...@@ -200,14 +268,14 @@ public class PurchasePlanExcelReadListenner extends AnalysisEventListener<ExtPuc
purchasePlanSearch.addItem(projectIdFilter); purchasePlanSearch.addItem(projectIdFilter);
SearchQueryCondition searchQuery = SearchQueryCondition.builder().searchItems(purchasePlanSearch).build(); SearchQueryCondition searchQuery = SearchQueryCondition.builder().searchItems(purchasePlanSearch).build();
//根据计划编获取数据库中采购计划数据 //根据计划编获取数据库中采购计划数据
//DxPageImpl<ExtPuchasePlanAttributeVO> dxPuchasePlanPage = extPuchasePlanAttributeService.findRecursion(SearchUtil.buildQuery("planCode", SearchItem.Operator.EQ, planCode)); //DxPageImpl<ExtPuchasePlanAttributeVO> dxPuchasePlanPage = extPuchasePlanAttributeService.findRecursion(SearchUtil.buildQuery("planCode", SearchItem.Operator.EQ, planCode));
DxPageImpl<ExtPuchasePlanAttributeVO> dxPuchasePlanPage = extPuchasePlanAttributeService.findRecursion(searchQuery); DxPageImpl<ExtPuchasePlanAttributeVO> dxPuchasePlanPage = extPuchasePlanAttributeService.findRecursion(searchQuery);
if (!CollectionUtils.isEmpty(dxPuchasePlanPage.getContent())) { if (!CollectionUtils.isEmpty(dxPuchasePlanPage.getContent())) {
ExtPuchasePlanAttributeVO extPurPlanForDB = DxPageUtils.getFirst(dxPuchasePlanPage); ExtPuchasePlanAttributeVO extPurPlanForDB = DxPageUtils.getFirst(dxPuchasePlanPage);
return extPurPlanForDB; return extPurPlanForDB;
}else { }else {
log.info("根据计划编:{},未查到相关计划",planCode); log.info("根据计划编:{},未查到相关计划",planCode);
} }
return null; return null;
} }
......
...@@ -208,6 +208,7 @@ public class ExtIEDPlanServiceImpl<V extends ExtIEDPlanVO> implements ExtIEDPlan ...@@ -208,6 +208,7 @@ public class ExtIEDPlanServiceImpl<V extends ExtIEDPlanVO> implements ExtIEDPlan
dxDocumentVO.setDynamicAttrs(dynamicAttrs); dxDocumentVO.setDynamicAttrs(dynamicAttrs);
//创建时间 //创建时间
dxDocumentVO.setCreateTime(LocalDateTime.now()); dxDocumentVO.setCreateTime(LocalDateTime.now());
//todo wq 设备号和项目代号需要产品解决,暂时注释
//文档扩展类的设备号 //文档扩展类的设备号
dxDocumentExpand.setOwnedEquipment(extIEDPlanVO.getDeviceNumber()); dxDocumentExpand.setOwnedEquipment(extIEDPlanVO.getDeviceNumber());
//文档扩展类的项目代号 //文档扩展类的项目代号
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment