比填项校验,市场清单导入、导出、模板下载增交付物模板
This commit is contained in:
+7
-7
@@ -63,34 +63,34 @@ public class AuthDummyInventoryInfoEO implements Serializable {
|
||||
private java.lang.String sysOrgCode;
|
||||
|
||||
/**类别*/
|
||||
@Excel(name = "*类别", width = 15)
|
||||
@Excel(name = "类别", width = 15)
|
||||
@ApiModelProperty(value = "类别")
|
||||
private java.lang.String category;
|
||||
|
||||
/**检验项目*/
|
||||
@Excel(name = "*检验项目", width = 15)
|
||||
@Excel(name = "检验项目", width = 15)
|
||||
@ApiModelProperty(value = "检验项目")
|
||||
private java.lang.String inspectionItem;
|
||||
|
||||
/**配置项*/
|
||||
@Excel(name = "*配置项", width = 15)
|
||||
@Excel(name = "配置项", width = 15)
|
||||
@ApiModelProperty(value = "配置项")
|
||||
private java.lang.String configItem;
|
||||
|
||||
/**WVTA ID*/
|
||||
@Excel(name = "*WVTA ID", width = 15)
|
||||
@Excel(name = "WVTA ID", width = 15)
|
||||
@ApiModelProperty(value = "WVTA ID")
|
||||
private java.lang.String wvtaId;
|
||||
|
||||
/**标准编号*/
|
||||
@Excel(name = "*编号", width = 15)
|
||||
@Excel(name = "编号", width = 15)
|
||||
@ApiModelProperty(value = "编号")
|
||||
private java.lang.String serialNumber;
|
||||
|
||||
/**责任领域*/
|
||||
@ApiModelProperty(value = "责任领域")
|
||||
private java.lang.String dutyTerritory;
|
||||
@Excel(name = "*责任领域", width = 15)
|
||||
@Excel(name = "责任领域", width = 15)
|
||||
@TableField(exist = false)
|
||||
// 责任领域名称
|
||||
private String dutyTerritoryName;
|
||||
@@ -107,7 +107,7 @@ public class AuthDummyInventoryInfoEO implements Serializable {
|
||||
@ApiModelProperty(value = "交付物类型")
|
||||
private String deliverableType;
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "*交付物类型", width = 15)
|
||||
@Excel(name = "交付物类型", width = 15)
|
||||
// 交付物类型名称
|
||||
private String deliverableTypeName;
|
||||
// 交付物类型名称-英文
|
||||
|
||||
+15
-7
@@ -60,27 +60,27 @@ public class AuthDummyInventoryInfoEOEn implements Serializable {
|
||||
private String sysOrgCode;
|
||||
|
||||
/**类别*/
|
||||
@Excel(name = "*Category", width = 15)
|
||||
@Excel(name = "Category", width = 15)
|
||||
@ApiModelProperty(value = "类别")
|
||||
private String category;
|
||||
|
||||
/**检验项目*/
|
||||
@Excel(name = "*Inspection Items", width = 15)
|
||||
@Excel(name = "Inspection Items", width = 15)
|
||||
@ApiModelProperty(value = "检验项目")
|
||||
private String inspectionItem;
|
||||
|
||||
/**配置项*/
|
||||
@Excel(name = "*Configuration Item", width = 15)
|
||||
@Excel(name = "Configuration Item", width = 15)
|
||||
@ApiModelProperty(value = "配置项")
|
||||
private String configItem;
|
||||
|
||||
/**WVTA ID*/
|
||||
@Excel(name = "*WVTA ID", width = 15)
|
||||
@Excel(name = "WVTA ID", width = 15)
|
||||
@ApiModelProperty(value = "WVTA ID")
|
||||
private String wvtaId;
|
||||
|
||||
/**标准编号*/
|
||||
@Excel(name = "*Number", width = 15)
|
||||
@Excel(name = "Number", width = 15)
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
private String serialNumber;
|
||||
|
||||
@@ -88,7 +88,7 @@ public class AuthDummyInventoryInfoEOEn implements Serializable {
|
||||
@ApiModelProperty(value = "责任领域")
|
||||
private String dutyTerritory;
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "*Responsible Field", width = 15)
|
||||
@Excel(name = "Responsible Field", width = 15)
|
||||
// 责任领域名称
|
||||
private String dutyTerritoryName;
|
||||
/**责任领域名称-英文**/
|
||||
@@ -100,11 +100,19 @@ public class AuthDummyInventoryInfoEOEn implements Serializable {
|
||||
@ApiModelProperty(value = "交付物")
|
||||
private String deliverable;
|
||||
|
||||
/**交付物模板*/
|
||||
@ApiModelProperty(value = "交付物模板")
|
||||
private java.lang.String deliverableTemplate;
|
||||
/**交付物模板名称**/
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "Deliverable Template", width = 40)
|
||||
private String deliverableTemplateName;
|
||||
|
||||
/**交付物类型*/
|
||||
@ApiModelProperty(value = "交付物类型")
|
||||
private String deliverableType;
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "*Deliverable Type", width = 15)
|
||||
@Excel(name = "Deliverable Type", width = 15)
|
||||
// 交付物类型名称
|
||||
private String deliverableTypeName;
|
||||
// 交付物类型名称-英文
|
||||
|
||||
+117
-68
@@ -62,6 +62,7 @@ import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.*;
|
||||
@@ -515,9 +516,9 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
if(CollectionUtils.isNotEmpty(baseList)){
|
||||
String title = "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
title = "*类别,*检验项目,*配置项,*WVTA ID,*编号,*责任领域,*交付物类型";
|
||||
title = "*类别,*检验项目,*配置项,*WVTA ID,*编号,*责任领域,交付物模板,*交付物类型";
|
||||
}else{
|
||||
title = "*Category,*Inspection Items,*Configuration Item,*WVTA ID,*Number,*Responsible Field,*Deliverable Type";
|
||||
title = "*Category,*Inspection Items,*Configuration Item,*WVTA ID,*Number,*Responsible Field,Deliverable Template,*Deliverable Type";
|
||||
}
|
||||
|
||||
int pos = file.getOriginalFilename().lastIndexOf(".");
|
||||
@@ -635,7 +636,7 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
if (i == 0) {
|
||||
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
||||
headerSb.append(cell.getStringCellValue() + ",");
|
||||
if(j == 6){
|
||||
if(j == 7){
|
||||
break;
|
||||
}
|
||||
} else if(i > 1){
|
||||
@@ -659,43 +660,6 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
}
|
||||
}
|
||||
}
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
for(int k = 0 ;k<rowList.size();k++){
|
||||
if("".equals(rowList.get("category")) ||
|
||||
"".equals(rowList.get("inspectionItem")) ||
|
||||
"".equals(rowList.get("configItem")) ||
|
||||
"".equals(rowList.get("wvtaId")) ||
|
||||
"".equals(rowList.get("serialNumber")) ||
|
||||
"".equals(rowList.get("dutyTerritoryName")) ||
|
||||
"".equals(rowList.get("deliverableTypeName")) ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
for(int k = 0 ;k<rowList.size();k++){
|
||||
if("".equals(rowList.get("category")) ||
|
||||
"".equals(rowList.get("inspectionItem")) ||
|
||||
"".equals(rowList.get("configItem")) ||
|
||||
"".equals(rowList.get("wvtaId")) ||
|
||||
"".equals(rowList.get("serialNumber")) ||
|
||||
"".equals(rowList.get("dutyTerritoryName")) ||
|
||||
"".equals(rowList.get("deliverableTypeNameEn")) ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i > 1) {
|
||||
dataList.add(rowList);
|
||||
}
|
||||
@@ -736,6 +700,44 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
throw new JeroBootException("The data fails to be read. Import data strictly according to the template file");
|
||||
}
|
||||
}
|
||||
//必填项校验 *类别,*检验项目,*配置项,*WVTA ID,*编号,*责任领域,*交付物类型";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
for(int k = 0 ; k <datas.size(); k++){
|
||||
if((datas.get(k).getCategory() == null) ||
|
||||
datas.get(k).getInspectionItem() == null ||
|
||||
datas.get(k).getConfigItem() == null ||
|
||||
datas.get(k).getWvtaId() == null ||
|
||||
datas.get(k).getSerialNumber() == null ||
|
||||
datas.get(k).getDutyTerritoryName() == null ||
|
||||
datas.get(k).getDeliverableTypeName() == null ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
for(int k = 0 ; k <datas.size(); k++){
|
||||
if((datas.get(k).getCategory() == null) ||
|
||||
datas.get(k).getInspectionItem() == null ||
|
||||
datas.get(k).getConfigItem() == null ||
|
||||
datas.get(k).getWvtaId() == null ||
|
||||
datas.get(k).getSerialNumber() == null ||
|
||||
datas.get(k).getDutyTerritoryName() == null ||
|
||||
datas.get(k).getDeliverableTypeNameEn() == null ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
workbook.close();
|
||||
@@ -829,57 +831,58 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
deliverableType = authDummyInventoryInfoEO.getDeliverableTypeNameEn();
|
||||
}
|
||||
|
||||
//文件
|
||||
//交付物模板
|
||||
String deliverableTemplate = authDummyInventoryInfoEO.getDeliverableTemplateName();
|
||||
|
||||
//编号必填
|
||||
flag = must(authDummyInventoryInfoEO, errorMsg, msgList, serialNumber, "编号", "Number");
|
||||
|
||||
//WVTA ID
|
||||
|
||||
if(StringUtils.isNotBlank(wvtaId)){
|
||||
if(wvtaId.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEOTemp.getCut())){
|
||||
message = errorMsg + "WVTA ID不能超过300个字符, ";
|
||||
}else{
|
||||
message = errorMsg + " The WVTA ID cannot contain more than 300 characters, ";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//类别
|
||||
|
||||
if(StringUtils.isNotBlank(category)){
|
||||
if(category.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEOTemp.getCut())){
|
||||
message = errorMsg + "类别不能超过300个字符, ";
|
||||
message = errorMsg + "类别不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The Category cannot contain more than 300 characters, ";
|
||||
message = errorMsg + " The Category cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//检验项目
|
||||
|
||||
if(StringUtils.isNotBlank(inspectionItem)){
|
||||
if(inspectionItem.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEOTemp.getCut())){
|
||||
message = errorMsg + "检验项目不能超过300个字符, ";
|
||||
message = errorMsg + "检验项目不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The InspectionItem cannot contain more than 300 characters, ";
|
||||
message = errorMsg + " The InspectionItem cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//配置项
|
||||
|
||||
if(StringUtils.isNotBlank(configItem)){
|
||||
if(configItem.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEOTemp.getCut())){
|
||||
message = errorMsg + "配置项不能超过300个字符, ";
|
||||
message = errorMsg + "配置项不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The ConfigItem cannot contain more than 300 characters, ";
|
||||
message = errorMsg + " The ConfigItem cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//WVTA ID
|
||||
if(StringUtils.isNotBlank(wvtaId)){
|
||||
if(wvtaId.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEOTemp.getCut())){
|
||||
message = errorMsg + "WVTA ID不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The WVTA ID cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
@@ -891,6 +894,10 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
authDummyInventoryInfoEO.setDutyTerritory(value);
|
||||
}
|
||||
}
|
||||
value = templateTransition(zipEntryName, authDummyInventoryInfoEO, errorMsg, deliverableTemplate,msgList,"交付物模板","Deliverable Template");
|
||||
if(StringUtils.isNotBlank(value)){
|
||||
authDummyInventoryInfoEO.setDeliverableTemplate(value);
|
||||
}
|
||||
//交付物类型
|
||||
if(StringUtils.isNotEmpty(deliverableType)){
|
||||
value = tree(categoryList,treeNameList, authDummyInventoryInfoEO, errorMsg, deliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template");
|
||||
@@ -903,6 +910,46 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
return msgList;
|
||||
}
|
||||
|
||||
private String templateTransition(String zipEntryName, AuthDummyInventoryInfoEO authDummyInventoryInfoEO,
|
||||
String errorMsg, String deliverableTemplate,
|
||||
List<String> msgList, String nameCn, String nameEn) {
|
||||
String value = "";
|
||||
if (StringUtils.isNotBlank(deliverableTemplate)) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (String fileName : deliverableTemplate.split(",")) {
|
||||
List<File> nowFileList = new ArrayList<>();
|
||||
|
||||
nowFileList = FileUnZip.readFileByFilename(zipEntryName, fileName,authDummyInventoryInfoEO.getCut(),errorMsg,msgList,nameCn,nameEn);
|
||||
|
||||
if (nowFileList.size() == 0) {
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
// errorMsg += "压缩包中没有" + fileName + "文件; ";
|
||||
// }else{
|
||||
// errorMsg += " Not in the zip package" + fileName + "file; ";
|
||||
// }
|
||||
// msgList.add(errorMsg);
|
||||
} else {
|
||||
try {
|
||||
FileInputStream input = new FileInputStream(nowFileList.get(0));
|
||||
MultipartFile multipartFile =
|
||||
new MockMultipartFile(nowFileList.get(0).getName(), nowFileList.get(0).getName(), "text/plain", input);
|
||||
//文件存入文件表
|
||||
OSSFile ossFile = iOSSFileService.uploadLocalOfCos(multipartFile, "", null,null);
|
||||
if (org.apache.commons.lang3.ObjectUtils.isNotEmpty(ossFile)) {
|
||||
sb.append(ossFile.getId() + ",");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error("市场认证清单导入"+e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(sb)) {
|
||||
value = sb.substring(0, sb.length() - 1);
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private String getTreeId(List<SysCategory> categoryList, AuthDummyInventoryInfoEO authDummyInventoryInfoEOTemp,
|
||||
List<String> treeNameList, String value) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
@@ -940,9 +987,9 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
if(StringUtils.isNotBlank(sb)){
|
||||
String substring = sb.substring(0, sb.length() - 1);
|
||||
if (CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())) {
|
||||
errorMsg += nameCn + "中的" + substring + "与数据字典不匹配, ";
|
||||
errorMsg += nameCn + "中的" + substring + "与数据字典不匹配";
|
||||
} else {
|
||||
errorMsg += nameEn + " " + substring + " does not match the data dictionary, ";
|
||||
errorMsg += nameEn + " " + substring + " does not match the data dictionary";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}else{
|
||||
@@ -991,9 +1038,9 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
List<String> finalValueList = valueList;
|
||||
List<String> diffList = list.stream().filter(e -> !finalValueList.contains(e)).collect(Collectors.toList());
|
||||
if (CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())) {
|
||||
errorMsg += nameCn + "中的" + StringUtils.join(diffList,",") + "与数据字典不匹配, ";
|
||||
errorMsg += nameCn + "中的" + StringUtils.join(diffList,",") + "与数据字典不匹配";
|
||||
} else {
|
||||
errorMsg += nameEn + " " + StringUtils.join(diffList,",") + " does not match the data dictionary, ";
|
||||
errorMsg += nameEn + " " + StringUtils.join(diffList,",") + " does not match the data dictionary";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}
|
||||
@@ -1121,6 +1168,7 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
case "*WVTA ID": return "wvtaId";
|
||||
case "*编号" : return "serialNumber";
|
||||
case "*责任领域": return "dutyTerritoryName";
|
||||
case "交付物模板": return "deliverableTemplateName";
|
||||
case "*交付物类型" : return "deliverableTypeName";
|
||||
|
||||
case "*Category" : return "Category";
|
||||
@@ -1129,6 +1177,7 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
// case "WVTA ID" : return "wvtaId";
|
||||
case "*Number" : return "serialNumber";
|
||||
case "*Responsible Field" : return "dutyTerritoryName";
|
||||
case "Deliverable Template" : return "deliverableTemplateName";
|
||||
case "*Deliverable Type" : return "deliverableTypeNameEn";
|
||||
|
||||
|
||||
@@ -1212,10 +1261,10 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
String title = "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
title = "*类别,*检验项目,*配置项,*WVTA ID," +
|
||||
"*编号,*责任领域,*交付物类型,";
|
||||
"*编号,*责任领域,交付物模板,*交付物类型,";
|
||||
}else{
|
||||
title = "*Category,*Inspection Items,*Configuration Item,*WVTA ID," +
|
||||
"*Number,*Responsible Field,*Deliverable Type,";
|
||||
"*Number,*Responsible Field,Deliverable Template,*Deliverable Type,";
|
||||
}
|
||||
List<String> list = Arrays.asList(title.split(","));
|
||||
int index = 0;
|
||||
@@ -1242,7 +1291,7 @@ public class AuthDummyInventoryInfoEOServiceImpl extends ServiceImpl<AuthDummyIn
|
||||
cellStyleTemp.setWrapText(true);//自动换行
|
||||
|
||||
CellRangeAddress region =
|
||||
new CellRangeAddress(1, 1, 0, 6); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
|
||||
new CellRangeAddress(1, 1, 0, 7); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
|
||||
sheet.addMergedRegion(region);
|
||||
String explain= "";
|
||||
if(CutEnum.CN.getValue().equals(authDummyInventoryInfoEO.getCut())){
|
||||
|
||||
+11
-10
@@ -86,7 +86,7 @@ public class ProjectCertificationInventoryEO implements Serializable {
|
||||
private String wvtaId;
|
||||
|
||||
/**标准编号*/
|
||||
@Excel(name = "*标准编号", width = 20)
|
||||
@Excel(name = "标准编号", width = 20)
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
private String serialNumber;
|
||||
|
||||
@@ -94,7 +94,7 @@ public class ProjectCertificationInventoryEO implements Serializable {
|
||||
@ApiModelProperty(value = "责任领域")
|
||||
private String dutyTerritory;
|
||||
/**责任领域名称**/
|
||||
@Excel(name = "*责任领域", width = 20)
|
||||
@Excel(name = "责任领域", width = 20)
|
||||
@TableField(exist = false)
|
||||
private String dutyTerritoryName;
|
||||
/**责任领域名称-英文**/
|
||||
@@ -117,6 +117,14 @@ public class ProjectCertificationInventoryEO implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String dutyPersonName;
|
||||
|
||||
/**交付物模板*/
|
||||
@ApiModelProperty(value = "交付物模板")
|
||||
private String deliverableTemplate;
|
||||
/**交付物模板名称**/
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "交付物模板", width = 20)
|
||||
private String deliverableTemplateName;
|
||||
|
||||
/**交付物类型*/
|
||||
@ApiModelProperty(value = "交付物类型")
|
||||
private String deliverableType;
|
||||
@@ -138,14 +146,7 @@ public class ProjectCertificationInventoryEO implements Serializable {
|
||||
@ApiModelProperty(value = "文档库id")
|
||||
private String bussDocumentLibraryId;
|
||||
|
||||
/**交付物模板*/
|
||||
|
||||
@ApiModelProperty(value = "交付物模板")
|
||||
private String deliverableTemplate;
|
||||
/**交付物模板名称**/
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "交付物模板", width = 20)
|
||||
private String deliverableTemplateName;
|
||||
|
||||
/**交付结果*/
|
||||
@Excel(name = "交付结果", width = 20)
|
||||
@@ -215,7 +216,7 @@ public class ProjectCertificationInventoryEO implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String excelName;
|
||||
|
||||
// @Excel(name = "截止日期", width = 20, format = "yyyy-MM-dd")
|
||||
// @Excel(name = "*截止日期", width = 20, format = "yyyy-MM-dd")
|
||||
@TableField(exist = false)
|
||||
private String endTimeStr;
|
||||
}
|
||||
|
||||
+10
-9
@@ -84,7 +84,7 @@ public class ProjectCertificationInventoryEOEn implements Serializable {
|
||||
private java.lang.String wvtaId;
|
||||
|
||||
/**标准编号*/
|
||||
@Excel(name = "*Standard No", width = 20)
|
||||
@Excel(name = "Standard No", width = 20)
|
||||
@ApiModelProperty(value = "标准编号")
|
||||
private java.lang.String serialNumber;
|
||||
|
||||
@@ -92,7 +92,7 @@ public class ProjectCertificationInventoryEOEn implements Serializable {
|
||||
@ApiModelProperty(value = "责任领域")
|
||||
private java.lang.String dutyTerritory;
|
||||
/**责任领域名称**/
|
||||
@Excel(name = "*Responsible Field", width = 20)
|
||||
@Excel(name = "Responsible Field", width = 20)
|
||||
@TableField(exist = false)
|
||||
private String dutyTerritoryName;
|
||||
/**责任领域名称-英文**/
|
||||
@@ -115,6 +115,14 @@ public class ProjectCertificationInventoryEOEn implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String dutyPersonName;
|
||||
|
||||
/**交付物模板*/
|
||||
@ApiModelProperty(value = "交付物模板")
|
||||
private java.lang.String deliverableTemplate;
|
||||
/**交付物模板名称**/
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "Deliverable Template", width = 40)
|
||||
private String deliverableTemplateName;
|
||||
|
||||
/**交付物类型*/
|
||||
@ApiModelProperty(value = "交付物类型")
|
||||
private java.lang.String deliverableType;
|
||||
@@ -136,14 +144,7 @@ public class ProjectCertificationInventoryEOEn implements Serializable {
|
||||
@ApiModelProperty(value = "文档库id")
|
||||
private java.lang.String bussDocumentLibraryId;
|
||||
|
||||
/**交付物模板*/
|
||||
|
||||
@ApiModelProperty(value = "交付物模板")
|
||||
private java.lang.String deliverableTemplate;
|
||||
/**交付物模板名称**/
|
||||
@TableField(exist = false)
|
||||
@Excel(name = "Deliverable Template", width = 40)
|
||||
private String deliverableTemplateName;
|
||||
|
||||
/**交付结果*/
|
||||
@Excel(name = "Deliverables Result", width = 20)
|
||||
|
||||
+238
-251
@@ -1,5 +1,8 @@
|
||||
package com.jero.modules.project.service.impl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
|
||||
import cn.hutool.core.util.ZipUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
@@ -20,6 +23,8 @@ import com.jero.common.util.oss.CosBootUtil;
|
||||
import com.jero.modules.authDummy.entity.AuthDummyInventoryInfoEO;
|
||||
import com.jero.modules.authDummy.service.IAuthDummyInventoryBaseEOService;
|
||||
import com.jero.modules.authDummy.service.IAuthDummyInventoryInfoEOService;
|
||||
import com.jero.modules.cert.template.vo.ParamsInfoCnImport;
|
||||
import com.jero.modules.cert.template.vo.ParamsInfoEnImport;
|
||||
import com.jero.modules.document.controller.BussDocumentLibraryEOController;
|
||||
import com.jero.modules.document.entity.BussDocumentLibraryEO;
|
||||
import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper;
|
||||
@@ -61,6 +66,7 @@ import org.apache.commons.io.FileUtils;
|
||||
import org.apache.poi.hssf.usermodel.*;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.aspectj.util.FileUtil;
|
||||
@@ -258,6 +264,46 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
Date now = new Date();
|
||||
projectCertificationInventoryEO.setUpdateTime(now);
|
||||
saveOrUpdate(projectCertificationInventoryEO);
|
||||
|
||||
|
||||
// //获取责任人的所有用户
|
||||
// List<SysUser> listUserName = new ArrayList<>();
|
||||
// listUserName = sysUserMapper.getListUserName();
|
||||
// listUserName = listUserName.stream().distinct().collect(Collectors.toList());
|
||||
|
||||
//获取当前的责任人
|
||||
String dutyPerson = projectCertificationInventoryEO.getDutyPerson();
|
||||
//获取当前的责任领域
|
||||
List<String> dutyTerritoryList = new ArrayList<>();
|
||||
dutyTerritoryList = Arrays.asList(projectCertificationInventoryEO.getDutyTerritory().split(","));
|
||||
dutyTerritoryList = dutyTerritoryList.stream().distinct().collect(Collectors.toList());
|
||||
//获取当前的projectId
|
||||
String projectId = projectCertificationInventoryEO.getProjectLibraryId();
|
||||
//根据责任领域个projectId去查相关人员名单
|
||||
List<ProjectRelatedPersonnel> projectRelatedPersonnelList = projectRelatedPersonnelService.queryByProjectIdAndDutyTerritoy(projectId, dutyTerritoryList);
|
||||
|
||||
//根据相关人员名单获取的工程接口人
|
||||
List<String> enginnerList = new ArrayList<>();
|
||||
for(ProjectRelatedPersonnel relatedPersonnel : projectRelatedPersonnelList){
|
||||
enginnerList.add(relatedPersonnel.getEngineeringInterfacePerson());
|
||||
}
|
||||
for(ProjectRelatedPersonnel relatedPersonnel : projectRelatedPersonnelList){
|
||||
//如果工程接口人不为空的话
|
||||
if(enginnerList.size()>0){
|
||||
//判断哪个不存在 再去去存入
|
||||
if(!enginnerList.contains(dutyPerson)){
|
||||
relatedPersonnel.setEngineerAttSet(dutyPerson);
|
||||
// projectRelatedPersonnelService.editById(relatedPersonnel);
|
||||
}
|
||||
}else {
|
||||
//工程接口人为空的话,直接将责任设置到认证工程师下
|
||||
relatedPersonnel.setEngineerAttSet(dutyPerson);
|
||||
// projectRelatedPersonnelService.editById(relatedPersonnel);
|
||||
}
|
||||
}
|
||||
|
||||
this.projectRelatedPersonnelService.updateBatchById(projectRelatedPersonnelList);
|
||||
|
||||
//设置权限 先删后加
|
||||
List<ProjectUserPermission> adds = new ArrayList<>();
|
||||
if (ObjectUtils.isNotEmpty(projectCertificationInventoryEO.getSdt())) {
|
||||
@@ -2757,13 +2803,13 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
public void importData(MultipartFile file, ProjectCertificationInventoryEO projectCertificationInventoryEO) {
|
||||
String title = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
title = title = "*类别,*检验项目,*配置项,*WVTA ID," +
|
||||
title = "*类别,*检验项目,*配置项,*WVTA ID," +
|
||||
"*标准编号,*责任领域,*工程接口人,*责任人," +
|
||||
"*交付物类型,交付物模板,*截止日期,报告编号,产品型号,生产企业名称";
|
||||
"交付物模板,*交付物类型,*截止日期,报告编号,产品型号,生产企业名称";
|
||||
}else {
|
||||
title = "*Category,*Inspection Items,*Configuration Item,*WVTA ID," +
|
||||
"*Standard No,*Responsible Field,*Eng. Interface,*Assignee," +
|
||||
"*Deliverable Type,Deliverable Template,*Due Date,Report No,Product Model,Name Of Manufacturer";
|
||||
"Deliverable Template,*Deliverable Type,*Due Date,Report No,Product Model,Name Of Manufacturer";
|
||||
}
|
||||
|
||||
int pos = file.getOriginalFilename().lastIndexOf(".");
|
||||
@@ -2903,49 +2949,6 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
}
|
||||
}
|
||||
}
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
for(int k = 0 ;k<rowList.size();k++){
|
||||
if("".equals(rowList.get("category")) ||
|
||||
"".equals(rowList.get("inspectionItem")) ||
|
||||
"".equals(rowList.get("configItem")) ||
|
||||
"".equals(rowList.get("wvtaId")) ||
|
||||
"".equals(rowList.get("serialNumber")) ||
|
||||
"".equals(rowList.get("dutyTerritoryName")) ||
|
||||
"".equals(rowList.get("sdtName")) ||
|
||||
"".equals(rowList.get("dutyPersonName")) ||
|
||||
"".equals(rowList.get("deliverableTypeName")) ||
|
||||
"".equals(rowList.get("endTimeStr")) ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
for(int k = 0 ;k<rowList.size();k++){
|
||||
if("".equals(rowList.get("category")) ||
|
||||
"".equals(rowList.get("inspectionItem")) ||
|
||||
"".equals(rowList.get("configItem")) ||
|
||||
"".equals(rowList.get("wvtaId")) ||
|
||||
"".equals(rowList.get("serialNumber")) ||
|
||||
"".equals(rowList.get("dutyTerritoryName")) ||
|
||||
"".equals(rowList.get("sdtName")) ||
|
||||
"".equals(rowList.get("dutyPersonName")) ||
|
||||
"".equals(rowList.get("deliverableTypeNameEn")) ||
|
||||
"".equals(rowList.get("endTimeStr")) ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i > 1) {
|
||||
dataList.add(rowList);
|
||||
}
|
||||
@@ -2987,6 +2990,50 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
throw new JeroBootException("The data fails to be read. Import data strictly according to the template file");
|
||||
}
|
||||
}
|
||||
//必填项校验
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
for(int k = 0 ; k <datas.size(); k++){
|
||||
if((datas.get(k).getCategory() == null) ||
|
||||
datas.get(k).getInspectionItem() == null ||
|
||||
datas.get(k).getConfigItem() == null ||
|
||||
datas.get(k).getWvtaId() == null ||
|
||||
datas.get(k).getSerialNumber() == null ||
|
||||
datas.get(k).getDutyTerritoryName() == null ||
|
||||
datas.get(k).getSdtName() == null ||
|
||||
datas.get(k).getDutyPersonName() == null ||
|
||||
datas.get(k).getDeliverableTypeName() == null ||
|
||||
datas.get(k).getEndTimeStr() == null ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}else {
|
||||
for(int k = 0 ; k <datas.size(); k++){
|
||||
if((datas.get(k).getCategory() == null) ||
|
||||
datas.get(k).getInspectionItem() == null ||
|
||||
datas.get(k).getConfigItem() == null ||
|
||||
datas.get(k).getWvtaId() == null ||
|
||||
datas.get(k).getSerialNumber() == null ||
|
||||
datas.get(k).getDutyTerritoryName() == null ||
|
||||
datas.get(k).getSdtName() == null ||
|
||||
datas.get(k).getDutyPersonName() == null ||
|
||||
datas.get(k).getDeliverableTypeNameEn() == null ||
|
||||
datas.get(k).getEndTimeStr() == null ){
|
||||
//删除原上传文件
|
||||
FileUnZip.deleteDir(saveDirectory);
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
throw new JeroBootException("请填写必填字段内容,带*的为必填");
|
||||
}else{
|
||||
throw new JeroBootException("Please fill in the required fields marked with *");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
workbook.close();
|
||||
@@ -3042,6 +3089,13 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
String value = "";
|
||||
boolean flag = true;
|
||||
|
||||
// List<SysUser> listUserName = new ArrayList<>();
|
||||
// listUserName = sysUserMapper.getListUserName();
|
||||
// listUserName = listUserName.stream().distinct().collect(Collectors.toList());
|
||||
|
||||
List<String> userNameList = datas.stream().map(ProjectCertificationInventoryEO::getDutyPersonName).distinct().collect(Collectors.toList());
|
||||
List<SysUser> listUserName = this.sysUserService.querySysUserByUserNameList(userNameList);
|
||||
|
||||
//编号验证
|
||||
verifySerialNumber(datas,projectCertificationInventoryEOTemp);
|
||||
for (ProjectCertificationInventoryEO projectCertificationInventoryEO : datas) {
|
||||
@@ -3095,159 +3149,69 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
//编号必填
|
||||
// flag = must(projectCertificationInventoryEO, errorMsg, msgList, serialNumber, "编号", "Standard No");
|
||||
|
||||
//报告编号
|
||||
if(StringUtils.isNotBlank(reportNumber)){
|
||||
if(reportNumber.length() > 200){
|
||||
|
||||
|
||||
//类别
|
||||
if(StringUtils.isNotBlank(category)){
|
||||
if(category.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "报告编号不能超过200个字符, ";
|
||||
message = errorMsg + "类别不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The Report No cannot contain more than 200 characters, ";
|
||||
message = errorMsg + " The Category cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//产品型号
|
||||
if(StringUtils.isNotBlank(productModel)){
|
||||
if(productModel.length() > 200){
|
||||
//检验项目
|
||||
if(StringUtils.isNotBlank(inspectionItem)){
|
||||
if(inspectionItem.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "产品型号不能超过200个字符, ";
|
||||
message = errorMsg + "检验项目不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The Product Model cannot contain more than 200 characters, ";
|
||||
message = errorMsg + " The InspectionItem cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//生产企业名称
|
||||
if(StringUtils.isNotBlank(productionEnterpriseName)){
|
||||
if(productionEnterpriseName.length() > 200){
|
||||
//配置项
|
||||
if(StringUtils.isNotBlank(configItem)){
|
||||
if(configItem.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "生产企业名称不能超过200个字符, ";
|
||||
message = errorMsg + "配置项不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The Name Of Manufacturer cannot contain more than 200 characters, ";
|
||||
message = errorMsg + " The ConfigItem cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//WVTA ID
|
||||
|
||||
if(StringUtils.isNotBlank(wvtaId)){
|
||||
if(wvtaId.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "WVTA ID不能超过300个字符, ";
|
||||
message = errorMsg + "WVTA ID不能超过300个字符";
|
||||
}else{
|
||||
message = errorMsg + " The WVTA ID cannot contain more than 300 characters, ";
|
||||
message = errorMsg + " The WVTA ID cannot contain more than 300 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
// else {
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "WVTA ID不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The WVTA ID cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
//类别
|
||||
|
||||
if(StringUtils.isNotBlank(category)){
|
||||
if(category.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "类别不能超过300个字符, ";
|
||||
}else{
|
||||
message = errorMsg + " The Category cannot contain more than 300 characters, ";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
// else {
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "类别不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The Category cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
//检验项目
|
||||
|
||||
if(StringUtils.isNotBlank(inspectionItem)){
|
||||
if(inspectionItem.length() > 100){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "检验项目不能超过300个字符, ";
|
||||
}else{
|
||||
message = errorMsg + " The InspectionItem cannot contain more than 300 characters, ";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
// else {
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "检验项目不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The InspectionItem cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
//配置项
|
||||
|
||||
if(StringUtils.isNotBlank(configItem)){
|
||||
if(configItem.length() > 300){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "配置项不能超过100个字符, ";
|
||||
}else{
|
||||
message = errorMsg + " The ConfigItem cannot contain more than 300 characters, ";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
// else {
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "配置项不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The ConfigItem cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
|
||||
//责任领域
|
||||
|
||||
if(StringUtils.isNotBlank(dutyTerritory)){
|
||||
value = pullMore(dictItemList, projectCertificationInventoryEO, errorMsg, dutyTerritory,msgList,"责任领域","Responsible Field","duty_territory");
|
||||
if(StringUtils.isNotBlank(value)){
|
||||
projectCertificationInventoryEO.setDutyTerritory(value);
|
||||
}
|
||||
}
|
||||
// else {
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "责任领域不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The Responsible Field cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
//工程接口人(责任领域下的工程接口人)
|
||||
Map<String, Object> objectMap = iProjectRelatedPersonnelService.queryPersonByProjectId(projectCertificationInventoryEOTemp.getProjectLibraryId(), value);
|
||||
|
||||
//工程接口人
|
||||
List<Map<String, String>> mapPersonList = (List<Map<String, String>>) objectMap.get("engineeringInterfacePersonList");
|
||||
//所有人
|
||||
// List<Map<String, String>> allPersonList = (List<Map<String, String>>) objectMap.get("allPersonList");
|
||||
|
||||
List<SysUser> listUserName = new ArrayList<>();
|
||||
listUserName = sysUserMapper.getListUserName();
|
||||
listUserName = listUserName.stream().distinct().collect(Collectors.toList());
|
||||
|
||||
|
||||
String nameCn = "";
|
||||
@@ -3259,15 +3223,7 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
//验证人员是否存在
|
||||
personnelVerify(projectCertificationInventoryEO, errorMsg, msgList, sdt, mapPersonList,nameCn,nameEn, com.jero.modules.project.enums.ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue());
|
||||
}
|
||||
// else {
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "工程接口人不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The Eng. Interface cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
|
||||
//责任人
|
||||
if(StringUtils.isNotBlank(dutyPerson)){
|
||||
nameCn = "责任人";
|
||||
@@ -3275,15 +3231,13 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
//验证人员是否存在
|
||||
personDutyPerson(projectCertificationInventoryEO, errorMsg, msgList, dutyPerson, listUserName,nameCn,nameEn);
|
||||
}
|
||||
// else {
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "责任人不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The Assignee cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
|
||||
//交付物模板
|
||||
value = templateTransition(zipEntryName, projectCertificationInventoryEO, errorMsg, deliverableTemplate,msgList,"交付物模板","Deliverable Template");
|
||||
if(StringUtils.isNotBlank(value)){
|
||||
projectCertificationInventoryEO.setDeliverableTemplate(value);
|
||||
}
|
||||
|
||||
//交付物类型
|
||||
if(StringUtils.isNotEmpty(deliverableType)){
|
||||
value = tree(categoryList,treeNameList, projectCertificationInventoryEO, errorMsg, deliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template");
|
||||
@@ -3292,26 +3246,12 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
projectCertificationInventoryEO.setDeliverableType(treeId);
|
||||
}
|
||||
}
|
||||
// else{
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "交付物类型不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The Deliverable Type cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
|
||||
//交付物模板
|
||||
value = templateTransition(zipEntryName, projectCertificationInventoryEO, errorMsg, deliverableTemplate,msgList,"交付物模板","Deliverable Template");
|
||||
if(StringUtils.isNotBlank(value)){
|
||||
projectCertificationInventoryEO.setDeliverableTemplate(value);
|
||||
}
|
||||
//截止时间
|
||||
// SimpleDateFormat sd = new SimpleDateFormat();
|
||||
// String endTimeStr = sd.format(endTime);
|
||||
if(StringUtils.isNotBlank(endTime)){
|
||||
flag = dateVerify(projectCertificationInventoryEO, errorMsg, endTime,msgList,"截止时间","Due Date");
|
||||
flag = dateVerify(projectCertificationInventoryEO, errorMsg, endTime,msgList,"截止日期","Due Date");
|
||||
if(flag){
|
||||
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
|
||||
Date date = null;
|
||||
@@ -3323,15 +3263,42 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
projectCertificationInventoryEO.setEndTime(date);
|
||||
}
|
||||
}
|
||||
// else{
|
||||
// String message = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
// message = errorMsg + "截止时间不能为空, ";
|
||||
// }else{
|
||||
// message = errorMsg + " The Due Date Type cannot null, ";
|
||||
// }
|
||||
// msgList.add(message);
|
||||
// }
|
||||
//报告编号
|
||||
if(StringUtils.isNotBlank(reportNumber)){
|
||||
if(reportNumber.length() > 200){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "报告编号不能超过200个字符";
|
||||
}else{
|
||||
message = errorMsg + " The Report No cannot contain more than 200 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//产品型号
|
||||
if(StringUtils.isNotBlank(productModel)){
|
||||
if(productModel.length() > 200){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "产品型号不能超过200个字符";
|
||||
}else{
|
||||
message = errorMsg + " The Product Model cannot contain more than 200 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
//生产企业名称
|
||||
if(StringUtils.isNotBlank(productionEnterpriseName)){
|
||||
if(productionEnterpriseName.length() > 200){
|
||||
String message = "";
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEOTemp.getCut())){
|
||||
message = errorMsg + "生产企业名称不能超过200个字符";
|
||||
}else{
|
||||
message = errorMsg + " The Name Of Manufacturer cannot contain more than 200 characters";
|
||||
}
|
||||
msgList.add(message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return msgList;
|
||||
@@ -3367,29 +3334,33 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
if (!DateUtils.isValidDate(field)) {
|
||||
flag = false;
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
errorMsg += nameCn + "格式不正确, 正确格式如:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日, ";
|
||||
errorMsg += nameCn + "格式不正确, 正确格式如:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日";
|
||||
}else{
|
||||
errorMsg += nameEn + " Incorrect format correct format is:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日, ";
|
||||
errorMsg += nameEn + " Incorrect format correct format is:yyyy/m/d、yyyy-MM-dd、yyyy年MM月dd日";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}
|
||||
Date now = new Date();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
long longnow = now.getTime();
|
||||
try {
|
||||
Date date = sdf.parse(field);
|
||||
long longdate = date.getTime();
|
||||
if(longnow>longdate){
|
||||
flag = false;
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
errorMsg += nameCn + "不能导入今天之前的日期, ";
|
||||
}else{
|
||||
errorMsg += nameEn + " Cannot import dates before today, ";
|
||||
}else{
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
Date now = new Date();
|
||||
String nowStr = sdf.format(now);
|
||||
Date now1 = null;
|
||||
Date field1 = null;
|
||||
try {
|
||||
now1 = sdf.parse(nowStr);
|
||||
field1 = sdf.parse(field);
|
||||
long day = now1.getTime()-field1.getTime();
|
||||
if(day>0){
|
||||
flag = false;
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
errorMsg += nameCn + "不能导入今天之前的日期";
|
||||
}else{
|
||||
errorMsg += nameEn + " Cannot import dates before today";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
@@ -3474,9 +3445,9 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
if(StringUtils.isNotBlank(sb)){
|
||||
String substring = sb.substring(0, sb.length() - 1);
|
||||
if (CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())) {
|
||||
errorMsg += nameCn + "中的" + substring + "与数据字典不匹配, ";
|
||||
errorMsg += nameCn + "中的" + substring + "与数据字典不匹配";
|
||||
} else {
|
||||
errorMsg += nameEn + " " + substring + " does not match the data dictionary, ";
|
||||
errorMsg += nameEn + " " + substring + " does not match the data dictionary";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}else{
|
||||
@@ -3542,9 +3513,9 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
//单选
|
||||
if(regulationOwnerId.contains(",")){
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
errorMsg += nameCn + "导入只能填写一个用户名, ";
|
||||
errorMsg += nameCn + "导入只能填写一个用户名";
|
||||
}else{
|
||||
errorMsg += "Only one user name can be entered for"+ nameEn +"import, ";
|
||||
errorMsg += "Only one user name can be entered for"+ nameEn +"import";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}
|
||||
@@ -3563,17 +3534,17 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
}
|
||||
if(count == 0){
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
errorMsg += nameCn+regulationOwnerId+"与相关人员名单中责任领域下的人员不匹配, ";
|
||||
errorMsg += nameCn+regulationOwnerId+"与相关人员名单中责任领域下的人员不匹配";
|
||||
}else{
|
||||
errorMsg += nameEn+regulationOwnerId+"does not match a person under the Responsible Field in the relevant person list, ";
|
||||
errorMsg += nameEn+regulationOwnerId+"does not match a person under the Responsible Field in the relevant person list";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}
|
||||
}else{
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
errorMsg += nameCn+regulationOwnerId+"与相关人员名单中责任领域下的人员不匹配, ";
|
||||
errorMsg += nameCn+regulationOwnerId+"与相关人员名单中责任领域下的人员不匹配";
|
||||
}else{
|
||||
errorMsg += nameEn+regulationOwnerId+"does not match a person under the Responsible Field in the relevant person list, ";
|
||||
errorMsg += nameEn+regulationOwnerId+"does not match a person under the Responsible Field in the relevant person list";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}
|
||||
@@ -3600,9 +3571,9 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
List<String> finalValueList = valueList;
|
||||
List<String> diffList = list.stream().filter(e -> !finalValueList.contains(e)).collect(Collectors.toList());
|
||||
if (CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())) {
|
||||
errorMsg += nameCn + "中的" + StringUtils.join(diffList,",") + "与数据字典不匹配, ";
|
||||
errorMsg += nameCn + "中的" + StringUtils.join(diffList,",") + "与数据字典不匹配";
|
||||
} else {
|
||||
errorMsg += nameEn + " " + StringUtils.join(diffList,",") + " does not match the data dictionary, ";
|
||||
errorMsg += nameEn + " " + StringUtils.join(diffList,",") + " does not match the data dictionary";
|
||||
}
|
||||
msgList.add(errorMsg);
|
||||
}
|
||||
@@ -3651,13 +3622,14 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
throw new JeroBootException(StringUtils.join(serialNumbers,",")+" does not exist in the project laws and cannot be added");
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for (ProjectCertificationInventoryEO projectCertificationInventoryEO : datas) {
|
||||
List<BussDocumentLibraryEO> collect = bussDocumentLibraryEOList.stream()
|
||||
.filter(e -> e.getSerialNumber().equals(projectCertificationInventoryEO.getSerialNumber())).collect(Collectors.toList());
|
||||
projectCertificationInventoryEO.setBussDocumentLibraryId(collect.get(0).getId());
|
||||
}
|
||||
}
|
||||
// else{
|
||||
// for (ProjectCertificationInventoryEO projectCertificationInventoryEO : datas) {
|
||||
// List<BussDocumentLibraryEO> collect = bussDocumentLibraryEOList.stream()
|
||||
// .filter(e -> e.getSerialNumber().equals(projectCertificationInventoryEO.getSerialNumber())).collect(Collectors.toList());
|
||||
// projectCertificationInventoryEO.setBussDocumentLibraryId(collect.get(0).getId());
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3706,29 +3678,40 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
//文件
|
||||
exportFile(dataList,fileInfos);
|
||||
|
||||
for(int i =0 ;i<dataList.size();i++){
|
||||
if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.FILE.getValue())){
|
||||
if(StringUtils.isNotEmpty(dataList.get(i).getDeliveryResult())){
|
||||
fileName = ossFileService.getFileInfos(dataList.get(i).getDeliveryResult()).stream().map(OSSFile::getFileName).distinct().collect(Collectors.joining(","));
|
||||
dataList.get(i).setDeliveryResult(fileName);
|
||||
|
||||
}
|
||||
}else if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.TEXT.getValue())){
|
||||
if(StringUtils.isNotEmpty(dataList.get(i).getDeliveryResult())){
|
||||
fileName = dataList.get(i).getDeliveryResult();
|
||||
dataList.get(i).setDeliveryResult(fileName);
|
||||
}
|
||||
}else if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.NA.getValue())){
|
||||
fileName = "";
|
||||
dataList.get(i).setDeliveryResult(fileName);
|
||||
}else if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.SELECT.getValue())) {
|
||||
if (StringUtils.isNotEmpty(dataList.get(i).getDeliveryResult())) {
|
||||
fileName = dataList.get(i).getDeliveryResult();
|
||||
for(int i =0 ;i<dataList.size();i++){
|
||||
if(dataList.get(i).getValueType()!=null){
|
||||
if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.FILE.getValue())){
|
||||
if(StringUtils.isNotEmpty(dataList.get(i).getDeliveryResult())){
|
||||
fileName = ossFileService.getFileInfos(dataList.get(i).getDeliveryResult()).stream().map(OSSFile::getFileName).distinct().collect(Collectors.joining(","));
|
||||
dataList.get(i).setDeliveryResult(fileName);
|
||||
|
||||
}
|
||||
}else if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.TEXT.getValue())){
|
||||
if(StringUtils.isNotEmpty(dataList.get(i).getDeliveryResult())){
|
||||
fileName = dataList.get(i).getDeliveryResult();
|
||||
dataList.get(i).setDeliveryResult(fileName);
|
||||
}
|
||||
}else if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.NA.getValue())){
|
||||
fileName = "";
|
||||
dataList.get(i).setDeliveryResult(fileName);
|
||||
}else if(dataList.get(i).getValueType().equals(SysCategoryValueTypeEnum.SELECT.getValue())) {
|
||||
if (StringUtils.isNotEmpty(dataList.get(i).getDeliveryResult())) {
|
||||
fileName = dataList.get(i).getDeliveryResult();
|
||||
if(fileName=="1"){
|
||||
fileName = "是";
|
||||
}else if(fileName == "0"){
|
||||
fileName = "否";
|
||||
}
|
||||
dataList.get(i).setDeliveryResult(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
String excelName = projectCertificationInventoryEO.getExcelName()+".xlsx";
|
||||
// String excelName = "";
|
||||
// if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
@@ -3985,11 +3968,11 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
if(CutEnum.CN.getValue().equals(projectCertificationInventoryEO.getCut())){
|
||||
title = "*类别,*检验项目,*配置项,*WVTA ID," +
|
||||
"*标准编号,*责任领域,*工程接口人,*责任人," +
|
||||
"*交付物类型,交付物模板,*截止日期,报告编号,产品型号,生产企业名称";
|
||||
"交付物模板,*交付物类型,*截止日期,报告编号,产品型号,生产企业名称";
|
||||
}else {
|
||||
title = "*Category,*Inspection Items,*Configuration Item,*WVTA ID," +
|
||||
"*Standard No,*Responsible Field,*Eng. Interface,*Assignee," +
|
||||
"*Deliverable Type,Deliverable Template,*Due Date,Report No,Product Model,Name Of Manufacturer";
|
||||
"Deliverable Template,*Deliverable Type,*Due Date,Report No,Product Model,Name Of Manufacturer";
|
||||
}
|
||||
|
||||
List<String> list = Arrays.asList(title.split(","));
|
||||
@@ -4008,7 +3991,11 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl<Proj
|
||||
nowFile.mkdirs();
|
||||
HSSFSheet sheet = workbook.createSheet("认证清单导入模板");
|
||||
sheet.setDefaultColumnWidth(16);//列宽
|
||||
// HSSFCellStyle cellStyle = workbook.createCellStyle();
|
||||
|
||||
HSSFCellStyle cellStyle = workbook.createCellStyle();
|
||||
cellStyle.setDataFormat((short) 49);
|
||||
sheet.setDefaultColumnStyle(10,cellStyle);
|
||||
|
||||
// cellStyle.setWrapText(true);//自动换行
|
||||
// cellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中
|
||||
// cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中
|
||||
|
||||
+3
-2
@@ -546,7 +546,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
|
||||
//直接将allList存入到
|
||||
String all = String.join(",",allList);
|
||||
projectRelatedPersonnel.setEngineerLawSet(all);
|
||||
projectRelatedPersonnelService.editById(projectRelatedPersonnel);
|
||||
// projectRelatedPersonnelService.editById(projectRelatedPersonnel);
|
||||
|
||||
}else {
|
||||
enginnerList.add(projectRelatedPersonnel.getEngineeringInterfacePerson());
|
||||
@@ -576,10 +576,11 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl<ProjectLawsIn
|
||||
//将相关人员名单中没有的resultList添加到相关人员记录表中
|
||||
String result = String.join(",",resultList);
|
||||
projectRelatedPersonnel.setEngineerLawSet(result);
|
||||
projectRelatedPersonnelService.editById(projectRelatedPersonnel);
|
||||
// projectRelatedPersonnelService.editById(projectRelatedPersonnel);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.projectRelatedPersonnelService.updateBatchById(projectRelatedPersonnelList);
|
||||
|
||||
|
||||
//翻译-中文
|
||||
|
||||
+24
-2
@@ -405,7 +405,30 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
|
||||
projectRelatedPersonnel.setCertificationEngineerName(certificationName.substring(0,certificationName.toString().length()-1));
|
||||
}
|
||||
}
|
||||
|
||||
//认证工程师设置
|
||||
List<SysUser> engineerAttSetUsers = new ArrayList<>();
|
||||
if (StringUtils.isNotEmpty(projectRelatedPersonnel.getEngineerAttSet())){
|
||||
List<String> engineerAttSetIdList = Arrays.asList(projectRelatedPersonnel.getEngineerAttSet().split(","));
|
||||
if (CollectionUtils.isNotEmpty(engineerAttSetIdList)) {
|
||||
engineerAttSetIdList=engineerAttSetIdList.stream().distinct().collect(Collectors.toList());
|
||||
QueryWrapper<SysUser> userqueryWrapper = new QueryWrapper<>();
|
||||
userqueryWrapper.in("id ", engineerAttSetIdList);
|
||||
certificationEngineerUsers = sysUserMapper.selectList(userqueryWrapper);
|
||||
}
|
||||
if(CollectionUtils.isNotEmpty(engineerAttSetUsers)) {
|
||||
String engineerAttSetId = projectRelatedPersonnel.getEngineerAttSet();
|
||||
String engineerAttSetName = null;
|
||||
StringBuilder certificationName = new StringBuilder();
|
||||
for (String data : engineerAttSetIdList) {
|
||||
if (StringUtils.isNotEmpty(engineerAttSetId)) {
|
||||
engineerAttSetName = engineerAttSetUsers.stream().filter(e -> data.equals(e.getId()))
|
||||
.map(sysUser -> sysUser.getUsername()).collect(Collectors.joining(","));
|
||||
}
|
||||
certificationName.append(engineerAttSetName).append(",");
|
||||
}
|
||||
projectRelatedPersonnel.setEngineerAttSetName(certificationName.substring(0,certificationName.toString().length()-1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -564,7 +587,6 @@ public class ProjectRelatedPersonnelServiceImpl extends ServiceImpl<ProjectRelat
|
||||
QueryWrapper<ProjectRelatedPersonnel> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("project_id",projectId).in("duty_territory",dutyTerritoryList);
|
||||
List<ProjectRelatedPersonnel> projectRelatedPersonnels = baseMapper.selectList(wrapper);
|
||||
|
||||
return projectRelatedPersonnels;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user