当前位置: 首页 > news >正文

手机 网站 系统/营销方案ppt

手机 网站 系统,营销方案ppt,网站软件定制开发制作,工体网站建设公司1、公式 package com.web.report.handler;import com.alibaba.excel.context.WriteContext; import com.alibaba.excel.metadata.csv.CsvCellStyle; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.CellWriteHandler; import…

 1、公式

package com.web.report.handler;import com.alibaba.excel.context.WriteContext;
import com.alibaba.excel.metadata.csv.CsvCellStyle;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.util.List;@Slf4j
public class CustomCellWriteHandler implements CellWriteHandler {@Overridepublic void afterCellDispose(CellWriteHandlerContext context) {Cell cell = context.getCell();// 这里可以对cell进行任何操作int rowIndex = cell.getRowIndex();String cellValue = cell.getStringCellValue();if (cellValue.startsWith("$$") && cellValue.endsWith("$$")) {String statisType = cellValue.substring(2, cellValue.length() - 2);String columnTitle = convertToTitle(cell.getColumnIndex() + 1);switch (statisType) {case "min":cell.setCellFormula("min(" + columnTitle + (rowIndex + 5) + ":" + columnTitle + 1000000 + ")");break;case "max":cell.setCellFormula("max(" + columnTitle + (rowIndex + 4) + ":" + columnTitle + 1000000 + ")");break;
//                case "testNum":
//                    cell.setCellFormula("COUNTA(A" + (rowIndex + 1 + 3) + ":A" + 1000000 + ")");
//                    break;
//                case "median":
//                    cell.setCellFormula("MEDIAN(" + columnTitle + (rowIndex + 3) + ":" + columnTitle + 1000000 + ")");
//                    break;case "avg":cell.setCellFormula("IF(COUNT(" + columnTitle + (rowIndex + 3) + ":" + columnTitle + 1000000 + ")>0,AVERAGE(" + columnTitle + (rowIndex + 3) + ":" + columnTitle + 1000000 + "),0)");break;case "stddev":cell.setCellFormula("IF(COUNT(" + columnTitle + (rowIndex + 2) + ":" + columnTitle + 1000000 + ")>1,STDEV(" + columnTitle + (rowIndex + 2) + ":" + columnTitle + 1000000 + "),0)");break;}} else {try {Double value = Double.valueOf(cellValue);cell.setCellValue(value);} catch (Exception e) {}}}public String convertToTitle(int n) {StringBuilder sb = new StringBuilder();while(n > 0){n--; // 重点sb.append((char)(n % 26 + 'A'));n /= 26;}sb.reverse();return sb.toString();}}

2、合并

package com.web.report.handler;import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;public class CustomMergeStrategy extends AbstractMergeStrategy {private Integer columnLength;private Sheet sheet;public CustomMergeStrategy(Integer columnLength) {this.columnLength = columnLength;}// 合并成一个单元格private void mergeCommonColumn(Integer rowIndexStart, Integer rowIndexEnd,Integer columnIndexStart,Integer columnIndexEnd ) {CellRangeAddress cellRangeAddress = new CellRangeAddress(rowIndexStart, rowIndexEnd, columnIndexStart, columnIndexEnd);sheet.addMergedRegionUnsafe(cellRangeAddress);}@Overrideprotected void merge(Sheet sheet, Cell cell, Head head, Integer integer) {this.sheet = sheet;if (cell.getRowIndex() < 13) {this.mergeCommonColumn(cell.getRowIndex(),cell.getRowIndex(),1,this.columnLength-1);}}}

3、样式

package com.web.report.style;import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import org.apache.poi.ss.usermodel.*;public class StyleUtils {/*** 标题样式* @return*/public static WriteCellStyle getHeadStyle(){// 头的策略WriteCellStyle headWriteCellStyle = new WriteCellStyle();// 背景颜色
//        headWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE1.getIndex());
//        headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);// 字体
//        WriteFont headWriteFont = new WriteFont();
//        headWriteFont.setFontName("宋体");//设置字体名字
//        headWriteFont.setFontHeightInPoints((short)14);//设置字体大小
//        headWriteFont.setBold(true);//字体加粗
//        headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;
//
//        // 样式
//        headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
//        headWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
//        headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
//        headWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
//        headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
//        headWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
//        headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
//        headWriteCellStyle.setTopBorderColor((short) 0); //设置顶边框颜色;
//
//        headWriteCellStyle.setWrapped(true);  //设置自动换行;headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对齐的样式为居中对齐;headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐的样式为居中对齐;headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适return headWriteCellStyle;}/*** 内容样式* @return*/public static WriteCellStyle getContentStyle(){// 内容的策略WriteCellStyle contentWriteCellStyle = new WriteCellStyle();// 背景绿色// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
//        contentWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
//        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);// 设置字体
//        WriteFont contentWriteFont = new WriteFont();
//        contentWriteFont.setFontHeightInPoints((short) 12);//设置字体大小
//        contentWriteFont.setFontName("宋体"); //设置字体名字
//        contentWriteCellStyle.setWriteFont(contentWriteFont);//在样式用应用设置的字体;
//
//        //设置样式;
//        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
//        contentWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
//        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
//        contentWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
//        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
//        contentWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
//        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
//        contentWriteCellStyle.setTopBorderColor((short) 0); ///设置顶边框颜色;contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 水平居中contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中contentWriteCellStyle.setWrapped(true); //设置自动换行;//        contentWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适return contentWriteCellStyle;}}

4、 注解

package com.web.report.annotation;import com.web.report.enums.HeaderLabelTypeEnum;
import com.web.report.enums.HeaderTypeEnum;import java.lang.annotation.*;@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface TableHeader {/*** 表头显示名称* @return*/String[] label() default {"."};/*** 正数加在对开头,负数加在结尾* @return*/int index() default 1;/*** 表头类型* @return*/HeaderTypeEnum headerType() default HeaderTypeEnum.NORMAL;HeaderLabelTypeEnum labelType() default HeaderLabelTypeEnum.NORMAL;}

 5、枚举

package com.web.report.enums;public enum HeaderLabelTypeEnum {NORMAL, CONFIG
}package com.web.report.enums;public enum HeaderTypeEnum {NORMAL, FLAT
}

6、各种DTO

(1)TableHeaderConfigDTO 

package com.web.report.dto;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TableHeaderConfigDTO {private List<String> labels;private String value;
}

 (2)WorkReportConditionDTO 

package com.web.report.dto;import com.web.enums.WorkProcedureResultEnum;
import com.web.report.annotation.TableHeader;
import com.web.report.enums.HeaderLabelTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class WorkReportConditionDTO {@TableHeader(labelType = HeaderLabelTypeEnum.CONFIG, index = 1)private TableHeaderConfigDTO ConditionDTO;}

(3)WorkReportDTOT

package com.web.report.dto;import com.web.report.annotation.TableHeader;
import com.web.report.enums.HeaderTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class WorkReportDTOT {@TableHeader(index = 1, headerType= HeaderTypeEnum.FLAT)private List<WorkReportConditionDTO> serialNo;@TableHeader(index = 2, headerType= HeaderTypeEnum.FLAT)private List<WorkReportConditionDTO> sequence;@TableHeader(index = 3, headerType= HeaderTypeEnum.FLAT)private  List<WorkReportConditionDTO> bin;@TableHeader(index = 4, headerType= HeaderTypeEnum.FLAT)private List<WorkReportProcedureDTO> workReportProcedureDTOS;}

4、使用

@Component
@Slf4j
public class WorkReportUtilT {@Autowiredprivate ProjectManageService projectManageService;@Autowiredprivate WorkManageService workManageService;@Autowiredprivate WorkResultService WorkResultService;private static final Map<String, Integer> code2Index = new HashMap<>();private static final Map<String, String> tmMap = new HashMap<>();private static final List<String> conditionsList = new ArrayList<>();private static final List<String> conditionValueList = new ArrayList<>();public void buildReport(WorkManageVO work, String filePath) {// 1.初始话报告内容XinGanXianWorkReportDTOT workReportDTO = null;// 2.判断文件是否存在,如果没有文件那就创建文件并添加表头,表头与数据分开写,防止表头合并File file = new File(filePath);if (!file.exists()) {// 测试结果和头部workReportDTO = buildWorkReportDTO(work,  false);List<List<String>> listHead = buildReportHead(workReportDTO);//ExcelWriter excelWriter = EasyExcel.write(file).build();// 合并单元格CustomMergeStrategy customMergeStrategy = new CustomMergeStrategy(listHead.size());// 只写测试结果头部excelWriter.write(new ArrayList<>(),EasyExcel.writerSheet(0).head(listHead).registerWriteHandler(new CustomCellWriteHandler()).registerWriteHandler(customMergeStrategy).build());//这一步很关键,不然文件会损坏excelWriter.finish();excelWriter.close();}// 3. 报告内容为空的话,构建if(workReportDTO == null){workReportDTO = buildWorkReportDTO(work,  false);}// 4.往文件中追加数据List<Object> oldData = EasyExcel.read(file).sheet(0).headRowNumber(0).doReadSync();List<XinGanXianWorkReportConditionDTO> serialNo = workReportDTO.getSerialNo();serialNo.get(0).getConditionDTO().setValue(String.valueOf(oldData.size() - 21));List<String> procedureDataList = buildReportData(workReportDTO);oldData.add(procedureDataList);// 5.写入文件ExcelWriter excelWriter = EasyExcel.write(file).build();// 合并单元格CustomMergeStrategy customMergeStrategy = new CustomMergeStrategy(procedureDataList.size());// 设置单元格样式HorizontalCellStyleStrategy horizontalCellStyleStrategy =new HorizontalCellStyleStrategy(StyleUtils.getHeadStyle(), StyleUtils.getContentStyle());excelWriter.write(oldData,EasyExcel.writerSheet(0).registerWriteHandler(new CustomColumnWidthHandler()).registerWriteHandler(new CustomCellWriteHandler()).registerWriteHandler(customMergeStrategy).registerWriteHandler(horizontalCellStyleStrategy).build());excelWriter.finish();excelWriter.close();}private List<String> buildReportData(Object o) {List<Field> fields = ReflectionUtil.getAllField(o);List<String> collectDataList = fields.stream().filter(field -> field.isAnnotationPresent(TableHeader.class)).sorted(Comparator.comparingInt(f -> f.getAnnotation(TableHeader.class).index())).flatMap(field -> {TableHeader tableHeader = field.getAnnotation(TableHeader.class);Object value;try {field.setAccessible(true);value = field.get(o);} catch (IllegalAccessException e) {throw new ServiceException("导出报告获取值错误");}if (tableHeader.headerType() == HeaderTypeEnum.FLAT) {return ((List<Object>) value).stream().flatMap(v -> buildReportData(v).stream());}if (tableHeader.labelType() == HeaderLabelTypeEnum.CONFIG) {if (!TableHeaderConfigDTO.class.equals(field.getType())) {throw new ServiceException("导出报告配置错误");}if (value == null) {return Stream.of();}return Stream.of(((TableHeaderConfigDTO) value).getValue());}return Stream.of(Optional.ofNullable(value).map(String::valueOf).orElse(""));}).collect(Collectors.toList());return collectDataList;}private List<List<String>> buildReportHead(Object o) {List<Field> fields = ReflectionUtil.getAllField(o);List<List<String>> collectHeadList = fields.stream().filter(field -> field.isAnnotationPresent(TableHeader.class)).sorted(Comparator.comparingInt(f -> f.getAnnotation(TableHeader.class).index())).flatMap(field -> {TableHeader tableHeader = field.getAnnotation(TableHeader.class);Object value;try {field.setAccessible(true);value = field.get(o);} catch (IllegalAccessException e) {throw new ServiceException("导出报告获取值错误");}if (HeaderTypeEnum.FLAT.equals(tableHeader.headerType())) {if (value == null) {return Stream.of();}if (value instanceof List) {return ((List<Object>) value).stream().flatMap(v -> buildReportHead(v).stream());} else {throw new ServiceException("导出报告配置错误");}}if (HeaderLabelTypeEnum.CONFIG.equals(tableHeader.labelType())) {if (!TableHeaderConfigDTO.class.equals(field.getType())) {throw new ServiceException("导出报告配置错误");}if (value == null) {return Stream.of();}return Stream.of(((TableHeaderConfigDTO) value).getLabels());}return Stream.of(Arrays.asList(tableHeader.label()));}).collect(Collectors.toList());return collectHeadList;}private JSONArray sortCompareRules(JSONArray chooseStandardJsonArray){if(code2Index.size() == 0){List<UniscCommonDictionary> dsaTypes = CommonDictionaryService.searchAll(CommonDictionaryVO.builder().typeLikeRight("device-standard-attribute").build());code2Index.putAll(dsaTypes.stream().collect(Collectors.toMap(CommonDictionary::getCode, CommonDictionary::getIndex, (v1, v2) -> v1)));}// 将JSONArray转换为List后排序List<JSONObject> jsonList = new ArrayList<>();for (int j = 0; j < chooseStandardJsonArray.size(); j++) {jsonList.add(chooseStandardJsonArray.getJSONObject(j));}// 对标规则排序if(jsonList.size() > 0){jsonList.sort((obj1, obj2) -> {Integer r1Index = code2Index.get(obj1.getString("label"));Integer r2Index = code2Index.get(obj2.getString("label"));if (r1Index == null && r2Index == null) {return 0;} else if (r1Index == null) {return 1;} else if (r2Index == null) {return -1;} else {return r1Index.compareTo(r2Index);}});}// 排序后再转回 JSONArrayreturn new JSONArray(Collections.singletonList(jsonList));}private WorkReportDTOT buildWorkReportDTO(WorkManageVO work, boolean offline)  {log.info("开始构建buildWorkReportDTO");WorkManageVO detail = workManageService.getDetail(work.getId(), false);List<WorkProcedureVO> procedures = detail.getProcedures();// 不是离线的延时查询结果if(!offline){try {Thread.sleep(2000); // 延时2秒} catch (InterruptedException error) {error.printStackTrace();}}//一次全部查询List<WorkResultVO> ProcedureResultList = WorkResultService.searchAllVO(WorkResultVO.builder().workId(work.getId()).resultMode(WorkResultModeEnum.COMPARE).build());Map<Long, List<WorkResultVO>>  procedureIdAndResultMap = ProcedureResultList.stream().collect(Collectors.groupingBy(WorkResultVO::getProcedureId));//工序数据List<WorkReportProcedureDTO> procedureDTOList = new ArrayList<>();// 第一列List<WorkReportConditionDTO>  serialNoList = new ArrayList<>();// 第二列List<WorkReportConditionDTO>  sequenceList = new ArrayList<>();// 第三列List<WorkReportConditionDTO>  binList = new ArrayList<>();//if(procedures != null && procedures.size() > 0){log.info("procedures:" + procedures.size());procedures.forEach(e->{//管子名称String pipeName = e.getPipeName();// 工序参数JSONObject params = e.getParams();//构造条件if(conditionsList.isEmpty()){conditionsList.addAll(Arrays.asList("CreateTime","DataFileName","TestFileName",".","TestIndex","TestPipe","TestMode","condition1","condition2","condition3","condition4","condition5","condition6",".","TestResult","MinLimit","MaxLimit","MinResult","MaxResult","Average","STD DEV","Serial#"));conditionValueList.addAll(Arrays.asList(DateUtil.format(work.getCreateTime(), DateUtils.DATE_FORMAT_19),"",work.getName(),".",Optional.ofNullable(String.valueOf(e.getIdx())).orElse(""),Optional.ofNullable(String.valueOf(e.getTsName())).orElse(""),Optional.ofNullable(String.valueOf(e.getTmName())).orElse(""),Optional.ofNullable(params.getString("T1")).orElse(""),Optional.ofNullable(params.getString("T2")).orElse(""),Optional.ofNullable(params.getString("T3")).orElse(""),Optional.ofNullable(params.getString("correctT1")).orElse(""),Optional.ofNullable(params.getString("targetIntensity")).orElse(""),Optional.ofNullable(params.getString("targetVoltage")).orElse(""),".","","","","","","","","S#"));}if(serialNoList.isEmpty()){XinGanXianWorkReportConditionDTO serialNo = new XinGanXianWorkReportConditionDTO();serialNo.setConditionDTO(TableHeaderConfigDTO.builder().labels(conditionsList).value(".").build());serialNoList.add(serialNo);}if(sequenceList.isEmpty()){XinGanXianWorkReportConditionDTO sequence = new XinGanXianWorkReportConditionDTO();sequence.setConditionDTO(TableHeaderConfigDTO.builder().labels(conditionValueList).value(detail.getSequence()).build());sequenceList.add(sequence);}if(binList.isEmpty()){XinGanXianWorkReportConditionDTO bin = new XinGanXianWorkReportConditionDTO();List<String> binconditionList = new ArrayList<>(Collections.nCopies(conditionsList.size() - 1, ""));binconditionList.add("Bin#");bin.setConditionDTO(TableHeaderConfigDTO.builder().labels(binconditionList).value(String.valueOf(detail.getBinResult())).build());binList.add(bin);}// 对标规则JSONArray chooseStandardJsonArray = new JSONArray();if(params.containsKey("chooseStandardList")){chooseStandardJsonArray.addAll((JSONArray)params.get("chooseStandardList"));log.info("工序 "+ e.getId() + " ,有对标规则");// 排序对标规则JSONArray sortedChooseStandardJsonArray = sortCompareRules(chooseStandardJsonArray);// 结果集合初始化Map<String, List<WorkResultVO>> collectMap = new HashMap<>();// 有结果if(e.getResult() != null){//log.info("结果:" + e.getResult());// 查找工序结果//List<WorkResultVO> ProcedureResults = WorkResultService.searchAllVO(WorkResultVO.builder().procedureId(e.getId()).resultMode(WorkResultModeEnum.COMPARE).build());List<WorkResultVO> ProcedureResults = procedureIdAndResultMap.get(e.getId());if(ProcedureResults != null && ProcedureResults.size() > 0){log.info("工序:"+ e.getId() + "查到结果:" + ProcedureResults.size());collectMap.putAll(ProcedureResults.stream().collect(Collectors.groupingBy(WorkResultVO::getName)));}else{log.info("工序:"+ e.getId()+ "没有查到结果,重新查一次");try {Thread.sleep(2000); // 延时2秒} catch (InterruptedException error) {error.printStackTrace();}List<WorkResultVO> ProcedureResultListAgain = WorkResultService.searchAllVO(WorkResultVO.builder().workId(work.getId()).resultMode(WorkResultModeEnum.COMPARE).build());Map<Long, List<WorkResultVO>>  procedureIdAndResultMapAgain = ProcedureResultListAgain.stream().collect(Collectors.groupingBy(WorkResultVO::getProcedureId));List<WorkResultVO> ProcedureResultsAgain = procedureIdAndResultMapAgain.get(e.getId());if(ProcedureResultsAgain != null && ProcedureResultsAgain.size() > 0){log.info("工序:"+ e.getId() + "查到结果:" + ProcedureResultListAgain.size());collectMap.putAll(ProcedureResultsAgain.stream().collect(Collectors.groupingBy(WorkResultVO::getName)));}else{log.info("工序:"+ e.getId()+ "没有查到结果");}}}// 遍历每个对标规则ArrayList jsonArrayList = (ArrayList) sortedChooseStandardJsonArray.get(0);log.info("工序id: "+ e.getId() +" ,对标规则数量: " + jsonArrayList.size());jsonArrayList.forEach(ele->{JSONObject jsonObject = (JSONObject)ele;String unit = jsonObject.getString("unit").replace("(","").replace(")","");String label = jsonObject.getString("label");String maxValue = jsonObject.getString("maxValue");String minValue = jsonObject.getString("minValue");Double actual = 0.0;if(collectMap.size() > 0){List<WorkResultVO> WorkResultVOS = collectMap.get(label);List<WorkResultVO> collectList = WorkResultVOS.stream().sorted(Comparator.comparing(WorkResultVO::getId).reversed()).collect(Collectors.toList());actual = collectList.get(0).getActual();}XinGanXianWorkReportProcedureDTO workReportProcedureDTO = new XinGanXianWorkReportProcedureDTO();ArrayList<String> conditionList = new ArrayList<>(Collections.nCopies(conditionsList.size()-8, ""));List<String> list = Arrays.asList(label, minValue, maxValue, "$$min$$", "$$max$$", "$$avg$$", "$$stddev$$", unit);conditionList.addAll(list);workReportProcedureDTO.setProcedureValue(TableHeaderConfigDTO.builder().labels(conditionList).value(String.valueOf(actual)).build());procedureDTOList.add(workReportProcedureDTO);});}else {log.info("工序 "+  e.getId() + " ,没有对标规则");}});}WorkReportDTOT workReportDTO = new WorkReportDTOT();workReportDTO.setWorkReportProcedureDTOS(procedureDTOList);workReportDTO.setSerialNo(serialNoList);workReportDTO.setSequence(sequenceList);workReportDTO.setBin(binList);return workReportDTO;}}

相关文章:

Java中使用EasyExcel写excel文件

1、公式 package com.web.report.handler;import com.alibaba.excel.context.WriteContext; import com.alibaba.excel.metadata.csv.CsvCellStyle; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.CellWriteHandler; import…...

【C语言程序设计】函数程序设计

目录 前言 一、程序阅读 二、程序设计 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如需转载&#…...

GDPU 数据结构 天码行空14

实验十四 查找算法的实现 一、【实验目的】 1、掌握顺序排序&#xff0c;二叉排序树的基本概念 2、掌握顺序排序&#xff0c;二叉排序树的基本算法&#xff08;查找算法、插入算法、删除算法&#xff09; 3、理解并掌握二叉排序数查找的平均查找长度。 二、【实验内容】 …...

科技提升安全,基于YOLOv5系列模型【n/s/m/l/x】开发构建商超扶梯场景下行人安全行为姿态检测识别系统

在商超等人流量较为密集的场景下经常会报道出现一些行人在扶梯上摔倒、受伤等问题&#xff0c;随着AI技术的快速发展与不断普及&#xff0c;越来越多的商超、地铁等场景开始加装专用的安全检测预警系统&#xff0c;核心工作原理即使AI模型与摄像头图像视频流的实时计算&#xf…...

【网络安全】网络防护之旅 - 对称密码加密算法的实现

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《网络安全之道 | 数字征程》⏰墨香寄清辞&#xff1a;千里传信如电光&#xff0c;密码奥妙似仙方。 挑战黑暗剑拔弩张&#xff0c;网络战场誓守长。 目录 &#x1f608;1. 初识网络安…...

鸿蒙arkTs Toast抽取 及使用

Toast抽取&#xff0c;创建一个Utils import promptAction from ohos.promptAction; import display from ohos.display; export function ToastUtils(msg:string){try {promptAction.showToast({message: msg,duration: 1500,bottom:450});} catch (error) {console.error(sh…...

网络安全渗透测试的相关理论和工具

网络安全 一、引言二、网络安全渗透测试的概念1、黑盒测试2、白盒测试3、灰盒测试 三、网络安全渗透测试的执行标准1、前期与客户的交流阶段1.1 渗透测试的目标网络1.2 进行渗透测试所使用的方法1.3 进行渗透测试所需要的条件1.4 渗透测试过程中的限制条件1.5 渗透测试的工期1.…...

C 语言 xml 库的使用

在C语言中&#xff0c;可以使用多种库来处理XML文件&#xff0c;其中最常用的是libxml2库。libxml2是一个用于解析XML和HTML文档的C语言库&#xff0c;它提供了许多功能&#xff0c;包括解析XML文档、创建XML文档、验证XML文档等等。下面是一个简单的示例&#xff0c;演示读取l…...

群晖(Synology)云备份的方案是什么

群晖云备份方案就是在本地的 NAS 如果出现问题&#xff0c;或者必须需要重做整列的时候&#xff0c;保证数据不丢失。 当然&#xff0c;这些是针对有价值的数据&#xff0c;如果只是电影或者不是自己的拍摄素材文件&#xff0c;其实可以不使用云备份方案&#xff0c;因为毕竟云…...

Flask 中的跨域难题:定义、影响与解决方案深度解析

跨域&#xff08;Cross-Origin&#xff09;是指在浏览器中&#xff0c;一个页面的脚本试图访问另一个页面的内容时发生的安全限制。Flask 作为一种 Web 应用框架&#xff0c;也涉及到跨域问题。本文将详细介绍跨域的定义、影响以及解决方案&#xff0c;涵盖如何在 Flask 中处理…...

汽车IVI中控开发入门及进阶(十二):V4L2视频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音视频文件,看起来很简单。如果说音频来源于振动,那么图片图像就是光反射的一种表象。模拟信号表示在空间上是连续…...

gitlab下载安装

1.下载 官网rpm包 gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像 Index of /gitlab-ce/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.安装 rpm -ivh gitlab-ce-16.4.3-ce.0.el7.x86_64.rpm 3.配置 vim /etc/gitlab/gitlab.rb 将 externa…...

Jmeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…...

【SpringBoot篇】基于布隆过滤器,缓存空值,解决缓存穿透问题 (商铺查询时可用)

文章目录 &#x1f354;什么是缓存穿透&#x1f384;解决办法⭐缓存空值处理&#x1f388;优点&#x1f388;缺点&#x1f38d;代码实现 ⭐布隆过滤器&#x1f38d;代码实现 &#x1f354;什么是缓存穿透 缓存穿透是指在使用缓存机制时&#xff0c;大量的请求无法从缓存中获取…...

Gitlab基础篇: Gitlab docker 安装部署、Gitlab 设置账号密码

文章目录 1、环境准备2、配置1)、初始化2)、修改gitlab配置文件3)、修改docker配置的gitlab默认端口 gitlab进阶配置gitlab 设置账号密码 1、环境准备 安装docker gitlab前确保docker环境&#xff0c;如果没有搭建docker请查阅“Linux docker 安装文档” docker 下载 gitlab容…...

c++常见函数处理

1、clamp clamp&#xff1a;区间限定函数 int64_t a Clamp(a, MIN_VALUE, MAX_VALUE); #include <iomanip> #include <iostream> #include <sstream>int main() {std::cout << "no setw: [" << 42 << "]\n"<&l…...

MYsql第二次作业

目录 问题 解答 1.显示所有职工的基本信息。 2.查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3.求出所有职工的人数。 4.列出最高工和最低工资。 5.列出职工的平均工资和总工资。 6.创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日…...

SQLAlchemy 第三篇

使用insert语句 from sqlalchemy import Table, Column, Integer, String, MetaDatametadata_obj MetaData() user_table Table("user_account",metadata_obj,Column("id", Integer, primary_keyTrue),Column("name", String(255)),Column(&q…...

交互过程中影响信息质量好坏的因素

人机交互是指人与计算机之间的交流和互动&#xff0c;而人人交流是指人与人之间的交流和互动。在信息质量方面&#xff0c;人机交互通常更为准确和精确&#xff0c;而人人交流可能存在误解、模糊和歧义。 人机交互的信息传递往往通过明确的界面、符号和指令等方式进行。计算机可…...

服务器上配置jupyter,提示Invalid credentials如何解决

我是按照网上教程在服务器上安装的jupyter以及进行的密码配置&#xff0c;我利用 passwd()这个口令生成的转译密码是"argon...."。按照教程配置jupyter notebook配置文件里面的内容&#xff0c;登陆网页提示"Invalid credentials"。我谷歌得到的解答是&…...

Axure中动态面板使用及轮播图多种登录方式左侧导航栏之案列

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、轮播图简介 1、什么是轮播图 2、轮播图有什么作用 3、轮播图有什么特点 4、轮播图适应范围 5、…...

大数据之旅-问题反思

1.谈谈你对MR执行流程各个阶段的理解&#xff08;提示里面涉及到排序&#xff0c;快速排序或者归并排序知道两种实现形式&#xff09;&#xff1f; 2.hadoop 1.0和hadoop 2.0明显的差异如何理解&#xff1f; hadoop2.0与hadoop1.0区别体现在在架构、性能、功能和组件方面&…...

系统级基础信号知识【Linux】

目录 一&#xff0c;什么是信号 进程面对信号常见的三种反应概述 二&#xff0c;产生信号 1.终端按键产生信号 signal 2. 进程异常产生信号 核心转储 3. 系统调用函数发送信号 kill raise abort 小结&#xff1a; 4. 由软件条件产生 alarm 5. 硬件异常产生信号…...

Excel单元格隐藏如何取消?

Excel工作表中的有些单元格隐藏了数据&#xff0c;如何取消隐藏行列呢&#xff1f;今天分享几个方法给大家 方法一&#xff1a; 选中隐藏的区域&#xff0c;点击右键&#xff0c;选择【取消隐藏】就可以了 方法二&#xff1a; 如果工作表中有多个地方有隐藏的话&#xff0c;…...

Visual Studio(VS)常用快捷键(最详细)

Visual Studio常用快捷键 一、生成&#xff1a;常用快捷键二、调式&#xff1a;常用快捷键三、编辑&#xff1a;常用快捷键四、文件&#xff1a;常用快捷键五、项目&#xff1a;常用快捷键六、重构&#xff1a;常用快捷键七、工具&#xff1a;常用快捷键八、视图&#xff1a;常…...

UDP特性之组播(多播)

UDP特性之组播 1. 组播的特点2. 设置主播属性2.1 发送端2.2 接收端 3. 组播通信流程3.1 发送端3.2 接收端 4. 通信代码 原文链接 在公司测试广播和多播有一点问题。。。 1. 组播的特点 组播也可以称之为多播这也是UDP的特性之一。组播是主机间一对多的通讯模式&#xff0c;是…...

ElasticSearch之cat shards API

命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/shards?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; index shard prirep state docs s…...

Thread-Per-Message设计模式

Thread-Per-Message是为每一个消息的处理开辟一个线程&#xff0c;以并发方式处理&#xff0c;提高系统整体的吞吐量。这种模式再日常开发中非常常见&#xff0c;为了避免线程的频繁创建和销毁&#xff0c;可以使用线程池来代替。 示例代码如下&#xff1a; public class Requ…...

运筹学经典问题(一):指派问题

问题描述 有 N N N个任务&#xff0c;需要 N N N个人去完成&#xff0c;每个人完成不同工作的效率不同&#xff08;或者资源、收益等等&#xff09;&#xff0c;需要怎么分配使得整体的效率最高&#xff08;成本最低等等&#xff09;呢&#xff1f;这就是经典的指派问题啦&…...

产品经理之如何编写竞品分析(医疗HIS系统管理详细案例模板)

目录 一.项目周期 二.竞品分析的目的 三.竞品分析包含的维度 四.如何选择竞品 五.竞品画布 六.案例模板 一.项目周期 在整个项目的周期&#xff0c;产品经理所做的事情主要在项目前期做市场分析、需求调研等&#xff0c;下面一张图概况了整个项目周期产品经理、开发工程师…...