|
@@ -10,10 +10,12 @@ import cn.hutool.poi.excel.*;
|
|
|
import cn.hutool.poi.excel.cell.CellHandler;
|
|
|
import cn.hutool.poi.excel.cell.CellUtil;
|
|
|
import cn.hutool.poi.excel.cell.FormulaCellValue;
|
|
|
+import cn.hutool.poi.excel.editors.TrimEditor;
|
|
|
import com.alibaba.excel.util.SheetUtils;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.persagy.fm.common.constant.CommonConstant;
|
|
|
import com.persagy.fm.common.constant.enums.ObjTagEnum;
|
|
|
import com.persagy.fm.common.constant.enums.ResultEnum;
|
|
@@ -26,8 +28,12 @@ import com.persagy.fm.sop.constant.SopCommonConst;
|
|
|
import com.persagy.fm.sop.constant.SopQueryConst;
|
|
|
import com.persagy.fm.sop.entity.CustomInfoPoint;
|
|
|
import com.persagy.fm.sop.entity.Sop;
|
|
|
+import com.persagy.fm.sop.entity.SopCell;
|
|
|
+import com.persagy.fm.sop.entity.SopObjRel;
|
|
|
import com.persagy.fm.sop.enums.*;
|
|
|
import com.persagy.fm.sop.model.dto.*;
|
|
|
+import com.persagy.fm.sop.model.vo.PublishedListVo;
|
|
|
+import com.persagy.fm.sop.model.vo.QueryPublishedListVo;
|
|
|
import com.persagy.fm.sop.model.vo.SaveSopVo;
|
|
|
import com.persagy.fm.sop.service.IBatchHandleSopService;
|
|
|
import com.persagy.fm.sop.service.IProjectSopService;
|
|
@@ -36,6 +42,7 @@ import com.persagy.fm.sop.service.ObjService;
|
|
|
import com.persagy.fm.sop.validator.ProjectInsert;
|
|
|
import com.persagy.fm.sop.validator.ProjectUpdate;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.SneakyThrows;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.ss.usermodel.*;
|
|
@@ -66,6 +73,8 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
|
|
|
/**SOP批量导入模板的位置*/
|
|
|
private static final String TEMPLATE_FILE_PATH="/template/SOP导入模板.xlsx";
|
|
|
+ /**SOP批量导入模板的位置*/
|
|
|
+ private static final String EXPORT_FILE_PATH="/template/SOP数据.xlsx";
|
|
|
/**存储codeData的Sheet页的行数*/
|
|
|
private static final ThreadLocal<Integer> LOOK_INDEX = new ThreadLocal<>();
|
|
|
/**存储infoData的Sheet页的行数*/
|
|
@@ -108,6 +117,7 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
}
|
|
|
}.downloadFile();
|
|
|
}
|
|
|
+
|
|
|
/***
|
|
|
* Description: 批量上传SOP
|
|
|
* @param projectId : 项目id
|
|
@@ -172,6 +182,182 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
List<SaveSopVo> saveSopVos = generateSaveSopVo(uploadData,codeMap,infoMap,firstSheet,projectId,objTypeMap);
|
|
|
projectSopService.batchAddPublishedSop(saveSopVos);
|
|
|
}
|
|
|
+
|
|
|
+ /***
|
|
|
+ * Description: 导出SOP
|
|
|
+ * @param projectId : 项目id
|
|
|
+ * @param response : 响应体对象
|
|
|
+ * @return : void
|
|
|
+ * @author : lijie
|
|
|
+ * @date :2021/5/6 12:09
|
|
|
+ * Update By lijie 2021/5/6 12:09
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void exportSop(String projectId, HttpServletResponse response) throws Exception {
|
|
|
+ // 下载Excel模板类
|
|
|
+ new DownloadService() {
|
|
|
+ @SneakyThrows
|
|
|
+ @Override
|
|
|
+ protected void handleWorkbook(Workbook workbook) {
|
|
|
+ try{
|
|
|
+ // 1.填充对象类数据
|
|
|
+ LOOK_INDEX.set(0);
|
|
|
+ INFO_INDEX.set(0);
|
|
|
+ fillObjClassDataToWorkbook(workbook);
|
|
|
+ // 2.填充SOP的数据
|
|
|
+ fillSopDataToWorkbook(projectId, workbook);
|
|
|
+ }finally {
|
|
|
+ LOOK_INDEX.remove();
|
|
|
+ INFO_INDEX.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected String getFilePath() {
|
|
|
+ return EXPORT_FILE_PATH;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected HttpServletResponse getHttpServletResponse() {
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ }.downloadFile();
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * Description: 填充SOP数据
|
|
|
+ * @param workbook : 工作簿
|
|
|
+ * @return : void
|
|
|
+ * @author : lijie
|
|
|
+ * @date :2021/5/6 12:14
|
|
|
+ * Update By lijie 2021/5/6 12:14
|
|
|
+ */
|
|
|
+ private void fillSopDataToWorkbook(String projectId, Workbook workbook) throws Exception {
|
|
|
+ // 1.查询所有SOP数据
|
|
|
+ if (StrUtil.isBlank(projectId)){
|
|
|
+ projectId = SopCommonConst.GROUP_SOP_ID;
|
|
|
+ }
|
|
|
+ QueryPublishedListVo queryPublishedListVo = QueryPublishedListVo.builder().build();
|
|
|
+ queryPublishedListVo.setProjectId(projectId);
|
|
|
+ queryPublishedListVo.setNeedReturnCriteria(false);
|
|
|
+ PublishedListVo listVo = projectSopService.queryPublishedSopList(queryPublishedListVo);
|
|
|
+ // 2.写入数据到Excel里
|
|
|
+ List<SopBean> beans = listVo.getContent();
|
|
|
+ if (CollUtil.isEmpty(beans)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Sheet firstSheet = workbook.getSheetAt(0);
|
|
|
+ Sheet classDataSheet = workbook.getSheetAt(1);
|
|
|
+ Sheet codeDataSheet = workbook.getSheetAt(2);
|
|
|
+ Map<String,String> classMap = new HashMap<>();
|
|
|
+ for (int i=0;i<classDataSheet.getLastRowNum();i++){
|
|
|
+ List<Object> objectList = RowUtil.readRow(RowUtil.getOrCreateRow(classDataSheet, i), null);
|
|
|
+ if (CollUtil.isEmpty(objectList) || objectList.size()<2){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String firstName = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(objectList.get(0)));
|
|
|
+ for (int j = 1; j < objectList.size(); j++) {
|
|
|
+ String trimToEmpty = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(objectList.get(j)));
|
|
|
+ if (StrUtil.isBlank(trimToEmpty)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ classMap.putIfAbsent(trimToEmpty,firstName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<List<Object>> codeListList = new ArrayList<>();
|
|
|
+ for (int i=0;i<codeDataSheet.getLastRowNum();i++){
|
|
|
+ codeListList.add(RowUtil.readRow(RowUtil.getOrCreateRow(codeDataSheet,i), null));
|
|
|
+ }
|
|
|
+ // 2.分类映射
|
|
|
+ Map<String,String> codeMap = new HashMap<>();
|
|
|
+ for (List<Object> objects : codeListList) {
|
|
|
+ String objName = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(objects.get(0)));
|
|
|
+ String objCode = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(objects.get(1)));
|
|
|
+ codeMap.putIfAbsent(objCode,objName);
|
|
|
+ }
|
|
|
+ // 从第三行开始写入
|
|
|
+ int sheetRowIndex = 2;
|
|
|
+ for (int i = 0; i < beans.size(); i++) {
|
|
|
+ SopBean sopBean = beans.get(i);
|
|
|
+ List<SopCell> steps = sopBean.getSteps();
|
|
|
+ if (CollUtil.isEmpty(steps)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (int j = 0; j < steps.size(); j++) {
|
|
|
+ SopCell stepCell = steps.get(j);
|
|
|
+ if (stepCell.getFromSop()){
|
|
|
+ // 引用SOP不写入excel
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 工作内容那一层
|
|
|
+ List<SopCell> stepContents = stepCell.getStepContent();
|
|
|
+ if (CollUtil.isEmpty(stepContents)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (int m = 0; m < stepContents.size(); m++) {
|
|
|
+ SopCell stepContent = stepContents.get(m);
|
|
|
+ Row row = RowUtil.getOrCreateRow(firstSheet, sheetRowIndex);
|
|
|
+ List<SopObjRel> contentObjs = stepContent.getContentObjs();
|
|
|
+ if (CollUtil.isNotEmpty(contentObjs)){
|
|
|
+ SopObjRel contentObj = contentObjs.get(0);
|
|
|
+ String objName = codeMap.get(SopCommonConst.UNDER_LINE+contentObj.getObjId());
|
|
|
+ if (StrUtil.isNotBlank(objName)){
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,1),classMap.getOrDefault(objName,""),null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,2),objName,null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,3),SopCommonConst.UNDER_LINE+contentObj.getObjId(),null);
|
|
|
+ }
|
|
|
+ List<SopObjRel> spaceScopes = stepContent.getSpaceScope();
|
|
|
+ if (CollUtil.isNotEmpty(spaceScopes)){
|
|
|
+ SopObjRel spaceScope = spaceScopes.get(0);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,4),spaceScope.getObjId(),null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,5),spaceScope.getObjName(),null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<SopCell> confirmResults = stepContent.getConfirmResult();
|
|
|
+ if (CollUtil.isNotEmpty(confirmResults)){
|
|
|
+ SopCell confirmResult = confirmResults.get(0);
|
|
|
+ String description = confirmResult.getDescription();
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,13),description,null);
|
|
|
+ List<CustomInfoPointsBean> customs = confirmResult.getCustoms();
|
|
|
+ if (CollUtil.isNotEmpty(customs)){
|
|
|
+ for (int n = 0; n < customs.size(); n++) {
|
|
|
+ CustomInfoPointsBean customInfoPointsBean = customs.get(n);
|
|
|
+ if ("异常情况".equals(customInfoPointsBean.getName())){
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,14),"是",null);
|
|
|
+ }else {
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,14),"否",null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<InfoPointsBean> infoPoints = confirmResult.getInfoPoints();
|
|
|
+ if (CollUtil.isNotEmpty(infoPoints)){
|
|
|
+ InfoPointsBean infoPointsBean = infoPoints.get(0);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,15),infoPointsBean.getName(),null);
|
|
|
+ List<WrongRangesBean> wrongRanges = infoPointsBean.getWrongRanges();
|
|
|
+ if (CollUtil.isNotEmpty(wrongRanges)){
|
|
|
+ for (WrongRangesBean wrongRange : wrongRanges) {
|
|
|
+ if ("gt".equals(wrongRange.getType())){
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,17),wrongRange.getValues(),null);
|
|
|
+ }
|
|
|
+ if ("lt".equals(wrongRange.getType())){
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,16),wrongRange.getValues(),null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,0),sopBean.getSopName(),null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,6),(null!=stepContent.getIsPhoto() && stepContent.getIsPhoto())?"是":"否",null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,7),(null!=stepContent.getIsScan() && stepContent.getIsScan())?"是":"否",null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,10),stepContent.getTimeLimit(),null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,11),stepContent.getPreConform(),null);
|
|
|
+ CellUtil.setCellValue(CellUtil.getOrCreateCell(row,12),stepContent.getNotice(),null);
|
|
|
+ sheetRowIndex++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/***
|
|
|
* Description: 生成需要保存的对象
|
|
|
* @param uploadData : 上传的数据
|
|
@@ -195,12 +381,15 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
String sopName = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(CellUtil.getCellValue(firstSheet.getOrCreateCell(0,i))));
|
|
|
SaveSopVo saveSopVo = resultMap.getOrDefault(sopName, new SaveSopVo());
|
|
|
saveSopVo.setSopName(sopName);
|
|
|
+ // 2.项目id
|
|
|
saveSopVo.setProjectId(projectId);
|
|
|
+ // 3.适用范围
|
|
|
List<FitObjsBean> fitObjs = saveSopVo.getFitObjs();
|
|
|
if (CollUtil.isEmpty(fitObjs)){
|
|
|
fitObjs = new ArrayList<>();
|
|
|
saveSopVo.setFitObjs(fitObjs);
|
|
|
}
|
|
|
+ // 4.步骤,批量上传的根据SOP的名称有且仅有一步
|
|
|
List<SopStepsBean> steps = saveSopVo.getSteps();
|
|
|
SopStepsBean sopStepsBean;
|
|
|
if (CollUtil.isEmpty(steps)){
|
|
@@ -212,14 +401,15 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
sopStepsBean=steps.get(0);
|
|
|
}
|
|
|
Set<String> objNameSet = objNameMap.getOrDefault(sopName, new HashSet<>());
|
|
|
- // 3.对象名称
|
|
|
+ // 5.对象名称
|
|
|
String objName = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(CellUtil.getCellValue(firstSheet.getOrCreateCell(2,i))));
|
|
|
if (!objNameSet.contains(objName)){
|
|
|
objNameSet.add(objName);
|
|
|
objNameMap.putIfAbsent(sopName,objNameSet);
|
|
|
+ // 新增适用范围
|
|
|
fitObjs.add(FitObjsBean.builder()
|
|
|
.objId(codeMap.getOrDefault(objName,"").substring(1))
|
|
|
- .objName(objName.substring(objName.lastIndexOf(SopCommonConst.UNDER_LINE)))
|
|
|
+ .objName(objName.substring(objName.lastIndexOf(SopCommonConst.UNDER_LINE)+1))
|
|
|
.objCode(codeMap.getOrDefault(objName,"").substring(1))
|
|
|
.objType(objTypeMap.getOrDefault(objName,""))
|
|
|
.objSource(ObjOwnerEnum.CONTENT_OBJ.getType()).build());
|
|
@@ -243,6 +433,20 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
.objType(objTypeMap.getOrDefault(objName,""))
|
|
|
.build());
|
|
|
stepContentBean.setContentObjs(contentObjs);
|
|
|
+ // 空间范围
|
|
|
+ if (ObjTypeEnum.EQUIP_CLASS.getType().equals(objTypeMap.getOrDefault(objName,""))){
|
|
|
+ String spaceObjName = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(CellUtil.getCellValue(firstSheet.getOrCreateCell(4,i))));
|
|
|
+ if (StrUtil.isNotBlank(spaceObjName)){
|
|
|
+ List<SpaceScopeBean> spaceScopeBeans = CollUtil.defaultIfEmpty(stepContentBean.getSpaceScope(), new ArrayList<>());
|
|
|
+ spaceScopeBeans.add(SpaceScopeBean.builder()
|
|
|
+ .objId(codeMap.getOrDefault(spaceObjName,"").substring(1))
|
|
|
+ .objName(spaceObjName.substring(spaceObjName.lastIndexOf(SopCommonConst.UNDER_LINE)+1))
|
|
|
+ .objCode(codeMap.getOrDefault(spaceObjName,"").substring(1))
|
|
|
+ .objType(objTypeMap.getOrDefault(spaceObjName,""))
|
|
|
+ .build());
|
|
|
+ stepContentBean.setSpaceScope(spaceScopeBeans);
|
|
|
+ }
|
|
|
+ }
|
|
|
sopStepsBean.setStepContent(stepContents);
|
|
|
}
|
|
|
List<StepContentBean> stepContents = sopStepsBean.getStepContent();
|
|
@@ -280,11 +484,11 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
}
|
|
|
String hour = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(CellUtil.getCellValue(firstSheet.getOrCreateCell(9, i))));
|
|
|
if (StrUtil.isNotBlank(hour)){
|
|
|
- destMin = destMin + Integer.parseInt(hour)*60;
|
|
|
+ destMin = null!=destMin ? (destMin + Integer.parseInt(hour)*60):Integer.parseInt(hour)*60;
|
|
|
}
|
|
|
String min = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(CellUtil.getCellValue(firstSheet.getOrCreateCell(10, i))));
|
|
|
if (StrUtil.isNotBlank(min)){
|
|
|
- destMin = destMin + Integer.parseInt(min);
|
|
|
+ destMin = null!=destMin ? (destMin + Integer.parseInt(min)):Integer.parseInt(min);
|
|
|
}
|
|
|
if (null!=destMin){
|
|
|
stepContentBean.setTimeLimit(destMin);
|
|
@@ -296,7 +500,7 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
}
|
|
|
String notice = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(CellUtil.getCellValue(firstSheet.getOrCreateCell(12, i))));
|
|
|
if (StrUtil.isBlank(stepContentBean.getNotice()) && StrUtil.isNotBlank(notice)){
|
|
|
- stepContentBean.setPreConform(notice);
|
|
|
+ stepContentBean.setNotice(notice);
|
|
|
}
|
|
|
String confirmResultContent = CharSequenceUtil.trimToEmpty(StrUtil.utf8Str(CellUtil.getCellValue(firstSheet.getOrCreateCell(13, i))));
|
|
|
Set<String> confirmResultContents = confirmResultMap.getOrDefault(sopName,new HashSet<>());
|
|
@@ -494,16 +698,22 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
Sheet infoSheet = workbook.getSheetAt(3);
|
|
|
Map<String, List<InfoPointsBean>> infoCodeMap = queryAllInfoCodeData();
|
|
|
writeObjClassDataToSheet(listSheet,lookSheet,workbook,infoSheet,infoCodeMap);
|
|
|
+
|
|
|
// 3.设置第一个sheet的有效性:对象分类,第二列(1),第三行(2)开始
|
|
|
Sheet firstSheet = workbook.getSheetAt(0);
|
|
|
rewriteExcelTempAtEmp("=classData!$A$1:$A$6",firstSheet,2,65535,1,1);
|
|
|
rewriteExcelTempAtEmp("=INDIRECT($B:$B)",firstSheet,2,65535,2,2);
|
|
|
+ rewriteExcelTempAtEmp("=IF(VLOOKUP($D:$D,codeData!B:C,2,FALSE)=\"equip_class\",空间功能类型,\"\")",firstSheet,2,65535,4,4);
|
|
|
rewriteExcelTempAtEmp("=INDIRECT($D:$D)",firstSheet,2,65535,15,15);
|
|
|
+ rewriteExcelTempAtEmp("=classData!$A$7:$A$8",firstSheet,2,65535,6,6);
|
|
|
+ rewriteExcelTempAtEmp("=classData!$A$7:$A$8",firstSheet,2,65535,7,7);
|
|
|
+ rewriteExcelTempAtEmp("=classData!$A$7:$A$8",firstSheet,2,65535,14,14);
|
|
|
//创建下拉框对象
|
|
|
//CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(firstSheet,2),1),"通用系统类",null);
|
|
|
//CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(firstSheet,2),2),"给排水专业-水景系统",null);
|
|
|
for (int i=2;i<65535;i++){
|
|
|
CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(firstSheet,i),3).setCellFormula("IFERROR(VLOOKUP($C:$C,codeData!A:B,2,FALSE),\"\")");
|
|
|
+ CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(firstSheet,i),5).setCellFormula("IFERROR(VLOOKUP($E:$E,codeData!A:B,2,FALSE),\"\")");
|
|
|
}
|
|
|
// 4.隐藏三个sheet页
|
|
|
workbook.setSheetHidden(1,true);
|
|
@@ -594,6 +804,10 @@ public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
|
|
|
.getOrCreateCell(RowUtil.getOrCreateRow(listSheet,4),0), ClassTypeEnum.FLOOR.getType(),null);
|
|
|
CellUtil.setCellValue(CellUtil
|
|
|
.getOrCreateCell(RowUtil.getOrCreateRow(listSheet,5),0), ClassTypeEnum.SHAFT.getType(),null);
|
|
|
+ CellUtil.setCellValue(CellUtil
|
|
|
+ .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,6),0), "是",null);
|
|
|
+ CellUtil.setCellValue(CellUtil
|
|
|
+ .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,7),0), "否",null);
|
|
|
// 2.填充"通用系统类"数据
|
|
|
fillSystemClassData(listSheet, lookSheet,workbook,infoSheet,infoCodeMap);
|
|
|
// 3.填充"通用设备类"数据
|