兰陵Ex导出(<c:improt>标签覆盖问题)

1.同一个页面单个导出

 1.1 增加导出按钮

找到对应的页面,导出按钮增加在合适的位置,【count】关键字可调整排序。

<div style="display: inline-block; float:right;vertical-align: middle;"><ui:toolbar id="toolbarOperate" count="3"><c:import url="/pro/word/common/common_downloadExcel.jsp"><c:param name="type" value="htbb" /></c:import></ui:toolbar>
</div>

1.2 找到Action

找到com.landray.kmss.pro.word.actions.ProExcelDownloadAction类的downloadExcel方法

<?xml version="1.0" encoding="UTF-8"?>
<beans xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><bean class="com.landray.kmss.pro.word.actions.ProWordDownloadAction"parent="KmssBaseAction" name="/pro/word/proWordDownload.do"lazy-init="true"></bean><beanclass="com.landray.kmss.pro.word.actions.ProExcelDownloadAction"parent="KmssBaseAction"name="/pro/word/proExcelDownload.do"lazy-init="true"></bean>
</beans>

1.3 增加导出逻辑

在action获取到type进行判断,调用相应的导出方法(此处的type为之前的<c:param>设置的入参)。

else if ("htbb".equals(type)) {// 测量产值计算表// 导出的数据getProExcelDownloadServiceImp().exportHtbbTable(request, response);}

1.4 增加实现类导出方法

src\com\landray\kmss\pro\word\service\spring\ProExcelDownloadServiceImp类增加相应的方法,根据需求设置相应的样式getXmylbArrayList(request, response)方法获取导出的具体内容,按相应内容写出后关闭流。

 @Overridepublic void exportXmylbTable(HttpServletRequest request, HttpServletResponse response) throws Exception {ExcelWriter writer = ExcelUtil.getWriter();writer.renameSheet(0, "项目一览表");// 跳过前两行writer.passRows(2);//全局CellStyle cellStyle = writer.getCellStyle();//创建标题字体Font font = writer.createFont();font.setFontHeightInPoints((short) 11);font.setFontName("宋体");cellStyle.setFont(font);//全局  宽15writer.setColumnWidth(-1, 30);//全局  高25writer.setDefaultRowHeight(15);cellStyle.setWrapText(true);//标题样式CellStyle headCellStyle = writer.getHeadCellStyle();headCellStyle.setAlignment(HorizontalAlignment.CENTER);Font headFont = writer.createFont();headFont.setFontName("宋体");headFont.setFontHeightInPoints((short) 12);headFont.setBold(true);headCellStyle.setFont(headFont);//第一行单独标题样式CellStyle oneHeadCellStyle = writer.createCellStyle();// 设置边框oneHeadCellStyle.setBorderBottom(BorderStyle.THIN);oneHeadCellStyle.setBorderTop(BorderStyle.THIN);oneHeadCellStyle.setBorderLeft(BorderStyle.THIN);oneHeadCellStyle.setBorderRight(BorderStyle.THIN);oneHeadCellStyle.setAlignment(HorizontalAlignment.CENTER);oneHeadCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);Font oneHeadFont = writer.createFont();oneHeadFont.setFontName("宋体");oneHeadFont.setFontHeightInPoints((short) 15);oneHeadFont.setBold(true);oneHeadCellStyle.setFont(oneHeadFont);//第二行单独标题样式CellStyle twoHeadCellStyle = writer.createCellStyle();// 设置边框twoHeadCellStyle.setBorderBottom(BorderStyle.THIN);twoHeadCellStyle.setBorderTop(BorderStyle.THIN);twoHeadCellStyle.setBorderLeft(BorderStyle.THIN);twoHeadCellStyle.setBorderRight(BorderStyle.THIN);twoHeadCellStyle.setAlignment(HorizontalAlignment.LEFT);twoHeadCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);Font twoHeadFont = writer.createFont();twoHeadFont.setFontName("宋体");twoHeadFont.setFontHeightInPoints((short) 15);twoHeadFont.setBold(true);twoHeadCellStyle.setFont(twoHeadFont);int lastColumn = 27;// 单独设置样式,数据写入后再设置writer.setRowHeight(0, 28);writer.setRowHeight(1, 20);writer.setColumnWidth(0, 10);writer.merge(0, 0, 0, lastColumn, "项目一览表", oneHeadCellStyle);//一次性写出内容,强制输出标题writer.write(getXmylbArrayList(request, response), true);//导出的为xlsresponse.setContentType("application/vnd.ms-excel;charset=utf-8");String fileName = new String("项目一览表.xls".getBytes("GBK"), "iso8859-1");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);ServletOutputStream out = response.getOutputStream();writer.flush(out, true);writer.close();IoUtil.close(out);}

1.5 设置导出内容

将对应的参数舍之道row的map中,然后添加到rows的ArrayList中,设置好格式后,在1.4调用,进行导出。

 private ArrayList<Map<String, Object>> getXmylbArrayList(HttpServletRequest request, HttpServletResponse response) throws Exception {ArrayList<Map<String, Object>> rows = new ArrayList<>();DecimalFormat decimalFormat = new DecimalFormat("#,##0.00");SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");List<ScProduceRws> list = getXmylbList(request, response);for (int i = 0; i < list.size(); i++) {ScProduceRws scProduceRws = list.get(i);Map<String, Object> row = new LinkedHashMap<>();row.put("序号", String.valueOf(i + 1));// 序号row.put("项目编号", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdProject().getFdNo());row.put("项目名称", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdProject().getFdName());// 获取工程状态ScProduceGcjd scProduceGcjd = scProduceRws.getFdProduceGcjd();String fdGcztName = EnumerationTypeUtil.getColumnEnumsLabel("sc_produce_gczt", scProduceGcjd.getFdGczt());if ("S".equals(scProduceRws.getFdUnit())) {// 规划设计GhPlanningCpcb ghPlanningCpcb = GhPlanningUtil.getCpcbByFdProduceGcjd(scProduceGcjd);if (ghPlanningCpcb != null) {fdGcztName = "完成";}} else if ("C".equals(scProduceRws.getFdUnit())) {// 测绘MeasureManageCheckApprove measureManageCheckApprove = MeasureManageUtil.getCheckApproveByFdProduceGcjd(scProduceGcjd);if (measureManageCheckApprove != null) {fdGcztName = "完成";}} else if ("K".equals(scProduceRws.getFdUnit())) {// 勘察KcProjectCpcb kcProjectCpcb = KcProjectUtil.getCpcbByFdProduceGcjd(scProduceGcjd);if (kcProjectCpcb != null) {fdGcztName = "完成";}}row.put("工程状态", fdGcztName);ScProduceXmxx scProduceXmxx = scProduceGcjd.getFdProduceGcxx().getFdProject();// 获取收入合同IContractManageSrhtService contractManageSrhtService = (IContractManageSrhtService) SpringBeanUtil.getBean("contractManageSrhtService");HQLInfo srContractHQLInfo = new HQLInfo();srContractHQLInfo.setWhereBlock("contractManageSrht.fdProjectId=:fdProjectId and contractManageSrht.docStatus = 30 ");srContractHQLInfo.setParameter("fdProjectId", scProduceXmxx.getFdId());srContractHQLInfo.setOrderBy("docCreateTime desc");List<ContractManageSrht> contractManageSrhtList = contractManageSrhtService.findList(srContractHQLInfo);StringBuilder srhtBh=new StringBuilder();StringBuilder srhtMc=new StringBuilder();StringBuilder srhtJe=new StringBuilder();for (ContractManageSrht contractManageSrht : contractManageSrhtList) {srhtBh.append(contractManageSrht.getFdHtbh()).append(";").append("\n");srhtMc.append(contractManageSrht.getFdHtmc()).append(";").append("\n");String format = contractManageSrht.getFdHtje()==null?"":decimalFormat.format(contractManageSrht.getFdHtje());srhtJe.append(format).append(";").append("\n");}row.put("收入合同编号", srhtBh);row.put("收入合同名称", srhtMc);row.put("收入合同金额", srhtJe);// 获取支出合同IContractManageZchtService contractManageZchtService = (IContractManageZchtService) SpringBeanUtil.getBean("contractManageZchtService");HQLInfo zcContractHQLInfo = new HQLInfo();zcContractHQLInfo.setWhereBlock("contractManageZcht.fdXmbhId=:fdProjectId");zcContractHQLInfo.setParameter("fdProjectId", scProduceXmxx.getFdId());zcContractHQLInfo.setOrderBy("docCreateTime desc");List<ContractManageZcht> contractManageZchtList = contractManageZchtService.findList(zcContractHQLInfo);StringBuilder zchtBh=new StringBuilder();StringBuilder zchtMc=new StringBuilder();StringBuilder zchtJe=new StringBuilder();for (ContractManageZcht contractManageZcht : contractManageZchtList) {zchtBh.append(contractManageZcht.getFdHtbh()).append(";").append("\n");zchtMc.append(contractManageZcht.getFdHtmc()).append(";").append("\n");String format = contractManageZcht.getFdHtje()==null?"":decimalFormat.format(contractManageZcht.getFdHtje());zchtJe.append(format).append(";").append("\n");}row.put("支出合同编号", zchtBh);row.put("支出合同名称", zchtMc);row.put("支出合同金额", zchtJe);row.put("工程编号", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdNo());row.put("工程名称", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdName());row.put("工程阶段编号", scProduceRws.getFdProduceGcjd().getFdGcjdbh());row.put("工程阶段", scProduceRws.getFdProduceGcjd().getFdCateGcjd().getFdName());row.put("任务书编号", scProduceRws.getFdRwsbh());row.put("任务书名称", scProduceRws.getFdRwsmc());row.put("工程位置", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdGcwz());row.put("工程类型", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdGclx().getFdName());row.put("项目来源", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdGcly()==null?"":EnumerationTypeUtil.getColumnEnumsLabel("sc_produce_gcly", scProduceRws.getFdProduceGcjd().getFdProduceGcxx().getFdGcly()));row.put("牵头院", scProduceRws.getFdCjy().getFdName());row.put("设总/项目负责人", scProduceRws.getFdProduceGcjd()==null?"": scProduceRws.getFdProduceGcjd().getFdSzxm()==null?"":scProduceRws.getFdProduceGcjd().getFdSzxm().getFdName());StringBuilder hdr=new StringBuilder();for (SysOrgPerson sysOrgPerson : scProduceRws.getFdHdr()) {hdr.append(sysOrgPerson.getFdName()).append(";");}row.put("核定人", hdr);row.put("成果提交日", scProduceRws.getFdCgtjr()==null?"":dateFormat.format(scProduceRws.getFdCgtjr()));row.put("经营负责人", scProduceRws.getFdJyfzr().getFdName());row.put("创建人", scProduceRws.getDocCreator().getFdName());row.put("预算产值(元)", scProduceRws.getFdYscz()==null?"":decimalFormat.format(Double.parseDouble(scProduceRws.getFdYscz())));row.put("创建时间", scProduceRws.getDocCreateTime()==null?"":dateFormat.format(scProduceRws.getDocCreateTime()));rows.add(row);}return rows;}

2<c:import>覆盖问题

        在实际应用中,若一个页面仅需引入一次的导出功能时,由于 <c:import> 标签的特性限制,如果在同一页面内连续引入两个或更多的相同导出页面,即使每次引入时传递的参数各异,也会出现后引入的页面内容覆盖先引入的情况。具体表现为:无论导入多少次相同的页面,最终生效的仅仅是最后一次导入的结果,这使得基于不同参数实现区分性导出的功能失效。因此,在遇到在一个页面中通过 <c:import> 标签多次引入同一导出页面且期望根据参数生成不同输出时,需要采取相应的优化措施来避免内容覆盖问题并确保各个导出请求能够独立有效执行。

3 问题修复

对于2问题做出以下优化:

        (1)自定义路径参数,进行不同页面区分。

        (2)自定义按钮,不用<c:import>标签。

        (3)自定义拼接参数逻辑,存入到变量【param】中。

        (4)自定义提交方法,对参数进行处理(此处可以复用兰陵框架定义好的)。

3.1自定义路径参数

在列表访问时,携带不同参数用以区分不同业务功能对同页面的访问(在对应的模块下的index.js中配置)。

3.1.1 规划模块

(2)找到index.jsp页面 WebContent/gh/planning/index.jsp

<ui:source type="Static">[  { "text" : "工程概况","href" : "/overview","router" : true},{ "text" : "项目进度监控","href" : "/xmgk","router" : true},]
</ui:source>

(2)找到页面对应路径下的 WebContent/gh/planning/resource/js/index.js

{path: '/overview',action: {type: 'pageopen',options: {url: $var.$contextPath + '/sc/produce/sc_produce_gcjd/overviewIndex.jsp?exportType=gh&meoel=com.landray.kmss.gh.planning.model.GhPlanningZyap&main=com.landray.kmss.gh.planning.model.GhPlanningSzrm&fdModel=com.landray.kmss.gh.planning.model.GhPlanningRyap&plan=/gh/planning/kc_project/tree.jsp',target: '_rIframe'}}
},

(3)找到对应的访问请求这里的【path:'/overview'】表示在对应路径的上层目录配置的访问路由名称。

(4)对路径参数进行修改,此处添加参数为【exprotType=gh】

3.1.1 勘察模块

以规划为例,对路径参数进行修改,此处添加参数为【exprotType=kc】

3.1.1 测绘模块

对路径参数进行修改,此处添加参数为【exprotType=cl】

3.2 自定义导出按钮

导出按钮传入需要的参数,此处可以只传入exprotType,代码后续判断需要取值。

<ui:button order="3" parentId="toolbarOperate01" text="Excel导出1" onclick="downloadExcel(`${param.meoel}`,'',01,`${param.exportType}`)">
</ui:button><ui:button order="3" parentId="toolbarOperate02" text="Excel导出2" onclick="downloadExcel(`${param.main}`,'',02,`${param.exportType}`)">
</ui:button><ui:button order="3" parentId="toolbarOperate03" text="Excel导出3" onclick="downloadExcel(`${param.main}`,`${param.fdModel}`,03,`${param.exportType}`)">
</ui:button>

3.3自定义拼接参数逻辑

定义变量拼接参数以及url(此处可以直接拼接,不用定义变量)

【searchParam】:查询条件

【methodParam】:方法使用参数

【url】为具体实现导出功能的SpringMvc配置的访问路径以及方法。

{window.downloadExcel = function (fdType,fdModel,isTrue,exportType) {var searchParams="";params += '&&fdProjectNo=' + $("[name=fdProjectNo]").val();params += '&&fdProjectName=' + $("[name=fdProjectName]").val();params += '&&fdGcjdNo='+$("[name=fdGcjdNo]").val();params += '&&fdGcxxName='+$("[name=fdGcxxName]").val();params += '&&fdRwsNo='+$("[name=fdRwsNo]").val();params += '&&fdRwsName='+$("[name=fdRwsName]").val();params += '&&fdJyfzrId='+ $("[name=fdJyfzrId]").val();params += '&&docCreatorId'+ $("[name=docCreatorId]").val();params += '&&fdCgtjr1='+ $("[name=fdCgtjr1]").val();params += '&&fdCgtjr2='+ $("[name=fdCgtjr2]").val();params += '&&docCreateTime1='+ $("[name=docCreateTime1]").val();params += '&&docCreateTime2='+ $("[name=docCreateTime2]").val();var methodParam = "&type=gcgk&fdType="+fdType+"&fdModel="+ fdModel+"&isTrue=0"+isTrue+"&exportType="+exportTypevar url = "/pro/word/proExcelDownload.do?method=downloadExcel"submitForm('${LUI_ContextPath}' + url+param, "post", "json", encodeURI(param));}});

3.4自定义提交方法

此方通用,具体实现为打开一个新的页面,逻辑执行结束后,页面自动关闭

window.submitForm = function (url, name, key, values) {var newWindow = window.parent.open(name);if (!newWindow)return false;var html = "";html += "<html><head></head><body><form id='formid' method='post' action='" + url + "'>";if (values) {html += "<input type='hidden' name='values' value='" + values + "'/>";}html += "</form><script type='text/javascript'>document.getElementById('formid').submit();";html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, "");newWindow.document.write(html);return newWindow;};

 3.5 结束

由于不同路径入参不同,拼接参数不同,根据不同参数执行不同业务逻辑,执行结果也会不相同,至此【2 问题】 提到的同页面引用覆盖问题,已解决。

 完..

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双面墨水屏电子桌牌:传统纸质桌牌的完美替代品

今天&#xff0c;中科慧显想要和大家分享的是&#xff0c;关于双面墨水屏电子桌牌在实际使用场景中的优势及好处。随着科技的快速发展&#xff0c;各种新型的电子办公产品不断涌现&#xff0c;其中双面墨水屏电子桌牌就是一种具有创新性的电子办公产品。相较于传统的纸质桌牌&a…

OpenCV图像的基本操作

图像的基本操作&#xff08;Python&#xff09; 素材图 P1&#xff1a;die.jpg P2&#xff1a;cool.jpg V&#xff1a;rabbit.mp4&#xff0c; 下载地址 读取展示-图像 import cv2img_1 cv2.imread(./die.jpg) # default cv2.IMREAD_COLOR print("die.jpg shape(imre…

2024年生物技术与医学科学国际学术研讨会(ISBAMS 2024)

2024年生物技术与医学科学国际学术研讨会&#xff08;ISBAMS 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.isbams.com会议地址&#xff1a;上海召开日期&#xff1a;2024/2/20截稿日期&#xff1a;2024/2/10 &#xff08;先投稿&#xff0c;先审核&#xff0c;先…

jmeter接口自动化测试工具在企业开展实际的操作

在企业使用jmeter开展实际的接口自动化测试工具&#xff0c;建议按如下操作流程&#xff0c; 可以使整个接口测试过程更规范&#xff0c;更有效。 接口自动化的流程&#xff1a; 1、获取到接口文档&#xff1a;swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…

31.【TypeScript 教程】混入(Mixins)

TypeScript 混入(Mixins) 混入&#xff08;Mixins&#xff09;是面向对象编程中的一个比较重要的概念。本节将会通过一个实例逐步介绍混入是如何在 TypeScript 中使用的。 1. 解释 在 TypeScript 中&#xff0c;可以根据不同的功能定义多个可复用的类&#xff0c;它们将作为 …

【python】爬取豆瓣影评保存到Excel文件中【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 【往期相关文章】 爬取豆瓣电影排行榜Top250存储到Excel文件中 爬取豆瓣电影排行榜TOP250存储到CSV文件中 爬取知乎热榜Top50保存到Excel文件中 爬取百度热搜排行榜Top50可视化 爬取斗鱼直播照片保存到本地目录 爬…

仓储管理系统——软件工程报告(详细设计)④

详细设计 一、系统功能模块的划分 根据系统的功能性需求&#xff0c;本文将部队仓库管理系统分为以下六大模块&#xff1a;系统管理模 块、基础数据模块、出入库管理模块、库存管理模块、仓库信息管理模块、作业管理模 块&#xff0c;每个模块内部又分为很多小功能模块&#…

win10+elasticsearch8.12 安装教程

Elasticsearch是一种搜索引擎&#xff0c;本地安装完成之后&#xff0c;可使用其他编程语言&#xff08;例如python&#xff09;与elasticsearch建立连接&#xff0c;然后使用python脚本搜索elasticsearch中的数据 1下载 elasticsearch elasticsearch最新版官网下载链接 点击…

颠覆式创新:LAXCUS分布式操作系统7.0

在这轮AI浪潮中&#xff0c;英伟达已经获得了硬件算力入口&#xff0c;Laxcus要获取软件算力入口。 有几位网友想了解我们正在研发的Laxcus分布式操作系统7.0的情况。应他们要求&#xff0c;今天就说说Laxcus 7.0版本。Laxcus 7.0是一个全新的操作系统&#xff0c;具有很多独特…

Redis在生产环境中可能遇到的问题与解决方案(一)

Redis是一款高性能的内存数据库&#xff0c;广泛应用于生产环境中&#xff0c;但在实际应用中也会遇到一些问题。本文将详细探讨Redis在生产环境中可能遇到的问题&#xff0c;并提供相应的解决方案&#xff0c;以确保系统的稳定性和性能。 1. 内存耗尽 问题描述 在高负载情况…

uni-app 国际化

vue i18n v9的迁移后的$t()无法获取数组、对象 http://t.csdnimg.cn/WkCHy api:vue i18n [intlify] Not found ‘language’ key in ‘zh-Hans’ locale messages. [intlify] Fall back to translate ‘language’ key with ‘zh’ locale. [intlify] Not found ‘languag…

快速数论变换NTT学习笔记

什么是NTT&#xff1f; 数论变换&#xff08;number-theoretic transform, NTT&#xff09;是离散傅里叶变换&#xff08;DFT&#xff09;在数论基础上的实现。 NTT是一种计算卷积的快速算法&#xff0c;FFT也是其中一种。 但是FFT具有一些实现上的缺点&#xff0c;举例来说&…

C++技术要点总结, 面试必备, 收藏起来慢慢看

目录 1. 语言对比 1.1 C 11 新特性 2.2 C 和 C 的区别 2.3 Python 和 C 的区别 2. 编译内存相关 2.1. C 程序编译过程 2.2. C 内存管理 2.3. 栈和堆的区别 2.4. 变量的区别 2.5. 全局变量定义在头文件中有什么问题&#xff1f; 2.6. 内存对齐 2.7. 什么是内存泄露 …

ISO27001认证:企业与个人发展的必备之选

ISO27001认证&#xff0c;对于企业和个人来说&#xff0c;都具有极高的价值和重要性。作为国际权威的信息安全管理体系标准&#xff0c;它为企业提供了保障信息安全、防范风险和提升竞争力的有力工具。 &#x1f4bc;对企业的价值&#xff1a; ISO27001认证可以帮助企业满足国家…

【通过docker安装常用软件镜像】1.镜像 2.安装 redis,jdk,nginx

1)官网镜像网站 hello-world - Official Image | Docker Hub 2)安装镜像测试例子 Redis 1.查询redis [rootlocalhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL redis …

安全产品与等级保护:匹配与选择指南

基本要求项测评项基本措施对应产品网络架构应保证网络各个部分的带宽满足业务高峰期需要&#xff1b;带宽管理流量控制系统应避免将重要网络区域部署在边界处&#xff0c;重要网络区域与其他网络区域之间应采取可靠的技术隔离手段&#xff1b;网络及安全设备配置访问控制策略防…

rancher和k8s接口地址,Kubernetes监控体系,cAdvisor和kube-state-metrics 与 metrics-server

为了能够提前发现kubernetes集群的问题以及方便快捷的查询容器的各类参数&#xff0c;比如&#xff0c;某个pod的内存使用异常高企 等等这样的异常状态&#xff08;虽然kubernetes有自动重启或者驱逐等等保护措施&#xff0c;但万一没有配置或者失效了呢&#xff09;&#xff0…

数智化招标采购平台核心功能采购监管系统能做到哪些管控?

郑州信源数智化招标采购平台系统研发商&#xff0c;覆盖全业务类型、全采购流程、全采购方式&#xff0c;核心系统需求计划、电子招投标、非招标管理、供应商管理、采购监管、基础库、订单协同、电子商城、大数据辅助决策等功能&#xff0c;重构采购业务流程&#xff0c;赋能政…

matlab对负数开立方根得到虚数的解决方案

问题描述&#xff1a;在matlab中&#xff0c;对负数开立方根&#xff0c;不出意外你将得到虚数。 例如 − 27 3 \sqrt[3]{-27} 3−27 ​&#xff0c;我们知道其实数解是-3&#xff0c;但在matlab中的计算结果如下&#xff1a; 问题原因&#xff1a;matlab中的立方根运算是在…

【iOS ARKit】人脸检测追踪基础

在计算机人工智能&#xff08;Artificial Inteligence,AI&#xff09;物体检测识别领域&#xff0c;最先研究的是人脸检测识别&#xff0c;目前技术发展最成熟的也是人脸检测识别。人脸检测识别已经广泛应用于安防、机场、车站、闸机、人流控制、安全支付等众多社会领域&#x…