spring\strust\springboot\isp前后端那些事儿

后端

一. 插入\更新一条数据(老)

Map<String, Object> parameterMap = MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog);
commonMapper.insert(parameterMap);parameterMap = MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog);
commonMapper.update(parameterMap);

二. Service里面方法的注解(老)

@Transactional(readOnly = false,propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
“readOnly = false ” 这个需要注意有没有写,以上问题源于铜陵派单pc端施工环节和勘察环节冻结和解冻功能,数据库sql输出但是数据库没有变化。原因一:查询冻结日志的Sysyguid的时候,projectNo写成了projectNO。原因二:至今不知道为什么新写的方法没有执行,大概跟框架有关,使用框架的insert和update方法。

三.新框架SpringBoot中有一些Dao可以直接使用一些方法

 Project sendProjectInfo = projectDao.selectByPrimaryKey(projectNo);projectDao.updateByPrimaryKeySelective(sendProjectInfo);

以上问题源于铜陵派单app端施工环节和勘察环节冻结和解冻功能,在任一Mapper中如果使用自己写的sql更新send_projectInfo表,会启动失败。使用框架中方法不会

四.mapper文件格式

1.老框架

<select id="id" parameterType="String" resultType="String"><![CDATA[SELECT sysGuidFROM (SELECT sysGuidFROM ${@Send_ProjectFrozenLog}WHERE projectNo = #{projectNo}ORDER BY frozenDate DESC, frozenTime DESC)WHERE ROWNUM = 1]]>
</select>

表:
${@Send_Flow_SysConf}

2.新框架

<select id="queryLatestSendProjectFrozenLogSysGuid" parameterType="string" resultType="String"><![CDATA[SELECT sysGuidFROM (SELECT sysGuidFROM  Send_ProjectFrozenLogWHERE projectNo = #{projectNo}ORDER BY frozenDate DESC, frozenTime DESC)WHERE ROWNUM = 1]]>
</select>

表:
Send_ProjectFrozenLog

3.差不多的

parameterType,resultType:
1.com.bestvike.modules.rfis.core.send.model.sendProjectFrozenLog
2.SendProjectInfo
3.map
4.String
用法:
1.set:

<set><if test="reconState !=null and reconState !=''">reconState=#{reconState},</if><if test="reconPredictDate !=null and reconPredictDate !=''">reconPredictDate = #{reconPredictDate},</if><if test="reconExpireDate !=null and reconExpireDate !=''">reconExpireDate = #{reconExpireDate},</if><if test="repairState !=null and repairState !=''">repairState=#{repairState},</if><if test="repairPredictDate !=null and repairPredictDate !=''">repairPredictDate = #{repairPredictDate},</if><if test="repairExpireDate !=null and repairExpireDate !=''">repairExpireDate = #{repairExpireDate}</if>
</set>

五. 获取前端的值

框架封装了是后端控制文件里定义并且写方法就可以读取前端的值。
也可以:httpServletRequest.getParameter(“JSKey”)

六. 新框架查询 不用写sql就可以查到某个实体类从而查到某个值

Example example = new Example(SysParameter.class);
example.createCriteria().andEqualTo("configName", "reconValidDays");
SysParameter sysParameter = sysParameterDao.selectOneByExample(example);
String repairExploreDays = sysParameter.getValue();

七. 新框架和老框架获取用户

新:

sendProjectFrozenLog.setThawDate(DateUtil.getDate());
sendProjectFrozenLog.setThawTime(DateUtil.getTime());
sendProjectFrozenLog.setThawUserId(user.getId());
sendProjectFrozenLog.setThawUserName(user.getName());

老:

sendProjectFrozenLog.setThawDate(DateUtil.getDate());
sendProjectFrozenLog.setThawTime(DateUtil.getTime());
sendProjectFrozenLog.setThawUserId(SessionThread.getUserId());
sendProjectFrozenLog.setThawUserName(SessionThread.getUserId());

八. 打包

使用notepad++编辑批处理文件updateFile-GitOrSvn0919.bat
updateFile-GitOrSvn0919.bat:
通过百度网盘分享的文件:updateFile-GitOrSvn0919.bat
链接:https://pan.baidu.com/s/1Zgf9hy7gwV3IdXGMg6aeVw
提取码:o6a3
notepad++:
通过百度网盘分享的文件:Notepad++.lnk
链接:https://pan.baidu.com/s/1F5EEX1uUmrt2BmBOMlOcXQ
提取码:7e71
在这里插入图片描述
在这里插入图片描述
,然后保存之后双击运行
在这里插入图片描述
去目标文件查看
在这里插入图片描述
按照规范命名整理
在这里插入图片描述

九. 环境配置

1.maven(tomcat ----strust\spring)

apache-maven-3.8.5
通过百度网盘分享的文件:apache-maven-3.8.5.zip
链接:https://pan.baidu.com/s/1Mc2FSnUNWMnKCQnS_BpjIA
提取码:h735
-Dfile.encoding=utf-8
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
D:\apache-maven-3.8.5\conf\settings_bestvike.xml
D:\apache-maven-3.8.5\maven_repository
在这里插入图片描述

2.gradle(Application—springboot)

gradle-6.8.3

通过百度网盘分享的文件:gradle-6.8.3.rar
链接:https://pan.baidu.com/s/1NTIRpVv35MCwtajLXmMa_w
提取码:53af
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十. sql用法

1.instr

判断后面字符串是否包含在前面的字符串,如果是返回大于0的数,最终返回true

instr(sfi.steprole2, sfd.rolecode) > 0

2.listagg

把某个字段按照分组聚合起来用某个字符连接

listagg(  t.value, ';') within GROUP(order by t.projecttype)

3.decode

判断某个字段(b)是否是某个值从而返回不同字段(a1\a2)

decode(p.ispecial, 'Y', p.ispeRegionName, p1.regionName) AS regionName:

p.ispecial: 这是第一个参数,代表要检查的值。
‘Y’: 这是第二个参数,代表要比较的值。
p.ispeRegionName: 如果 p.ispecial 等于 ‘Y’,则 DECODE 函数返回这个值。
p1.regionName: 如果 p.ispecial 不等于 ‘Y’,则 DECODE 函数返回这个值。

4.如果时间是date或者时间戳类型(年月日时分秒)但是取(年月日字符串类型)

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS date_string FROM dual;

5. extract

是一个SQL函数,用于从日期/时间值中提取特定的部分,如年、月、日、小时、分钟或秒。

SELECT EXTRACT(YEAR FROM timestamp_column) FROM my_table;

5. wm_concat

to_char(wm_concat(t.itemType)) as itemType

是Oracle数据库中的一个函数,它用于将多个字符串连接成一个单一的字符串,每个字符串之间用指定的分隔符隔开(默认是逗号,)。这个函数通常用于聚合操作,它会将分组中的多个值合并成一个字符串。

6. nvl

 nvl( t1.inspectedtities, 0 ) 

处理空值,如果是空值就返回0

7. case when

		---报修阶段审核中
UPDATE send_PROJECTINFO epi
SET epi.nodeSummary = CASEWHEN epi.busiNode = '1' AND epi.nodeStatus = '1' THEN (SELECT CASEWHEN rac.step = '2' THEN '维修资金审核中'WHEN rac.step = '3' THEN '报修信息审核中'ELSE '报修阶段审核中'ENDFROM (SELECT  sfr.businesskey, sfr.step, sfr.flowName, ad.auditFlagFROM Send_Flow_RunInstance sfrleft join (SELECT  businesskey ,  auditFlag, flowNameFROM (SELECT  businesskey, auditFlag, auditDate, auditTime, flowName,ROW_NUMBER() OVER (PARTITION BY businesskey ORDER BY auditDate DESC, auditTime DESC) AS rnFROM Send_Flow_AuditDetail)WHERE rn = 1) ad ON sfr.businesskey = ad.businesskey  and sfr.flowName = ad.flowName) racWHERE rac.businesskey = epi.projectNo   and rac.flowName='repair_process')ELSE '报修阶段审核中'
END
WHERE epi.busiNode = '1' AND epi.nodeStatus = '1'
;---项目终止
UPDATE send_PROJECTINFO epi
SET epi.nodeSummary = CASEWHEN epi.busiNode = 'S' AND epi.nodeStatus = '3' THEN (SELECT CASEWHEN rac.flowName='reconnaissance_back_process' AND rac.auditFlag='Y' THEN'项目终止(勘察阶段退单)' WHEN rac.flowName='receipt_back_process' AND rac.auditFlag='Y' THEN '项目终止(施工阶段退单)'WHEN rac.flowName='repair_process' and   rac.step='2' and  rac.auditFlag='N' AND rac.roleCode='42'	THEN '项目终止(维修资金审核不通过)'WHEN rac.flowName='repair_process' and   rac.auditFlag='S' and  epi.isRepeat='Y' THEN '项目终止(重复报修)'WHEN rac.flowName='repair_process' and   rac.auditFlag='S' and  epi.isOrigin='Y' and  epi.originStatus='6' THEN '项目终止(原点且原企业能修)'WHEN rac.flowName='repair_process' and   rac.auditFlag='S' and  epi.isOrigin='Y' and  epi.originStatus='7' THEN '项目终止(原企业无法维修)'ELSE '项目终止(报修信息审核不通过)'ENDFROM (select t.businesskey, t.step, t.flowName, t.auditFlag,t.roleCodefrom (SELECT  sfr.businesskey, sfr.step, sfr.flowName, ad.auditFlag,ad.roleCode,ROW_NUMBER() OVER (PARTITION BY sfr.businesskey ORDER BY sfr.LASTTIME DESC) AS rnFROM Send_Flow_RunInstance sfrleft join (SELECT  businesskey ,  auditFlag, flowName,roleCodeFROM (SELECT  businesskey, auditFlag, auditDate, auditTime, flowName,roleCode,ROW_NUMBER() OVER (PARTITION BY businesskey ORDER BY auditDate DESC, auditTime DESC) AS rnFROM Send_Flow_AuditDetail)WHERE rn = 1) ad ON sfr.businesskey = ad.businesskey  and sfr.flowName = ad.flowName)twhere t.rn=1) racWHERE rac.businesskey = epi.projectNo   )ELSE '项目终止'
END
WHERE epi.busiNode = 'S' AND epi.nodeStatus = '3'
;

前端

一. 调用后台方法

1.grid里gridTriggerConfirm ----- ajax

 action="gridTriggerConfirm('float', '_parent', {projectNo: '#projectNo#',busiNode: '#busiNode#', _title:'请确认'}, null, undefined, '您确定要提交该条施工信息吗?', submitRepairInfo)"/>
	function submitRepairInfo(param) {var projectNo = param.projectNo;var busiNode = param.busiNode;var nodeStatus = param.nodeStatus;showProgress();$.ajax({type: 'post',url: 'submitRepairInfo.bv',data: {'projectNo': projectNo,'busiNode':busiNode,'nodeStatus':nodeStatus},success: function(jsonData) {if (!$.isEmpty(jsonData.promptInfo.showType)) {showPrompt(jsonData.promptInfo.showType, jsonData.promptInfo.showMsg);} else {showPrompt("操作成功!");}hideProgress();gridRefresh();}});}

2.grid里gridTriggerFrame点击出现弹窗

直接进入jsp

     action="gridTriggerFrame('float', '_self', {projectNo: '#projectNo#',flag: 'repair', _title:'冻结项目'}, 'modules/rfis/core/send/project/freezeProject.jsp', 500, 180,false,window)" />

先调用后端再进入jsp(有初始化回显得值)

	action="gridTriggerFrame('float', '_self', {projectNo: '#projectNo#',CorpName: '#CorpName#',regionName: '#regionName#',bldName: '#bldName#',address:'#address#',roomNo:'#showName#',corpNo:'#corpNo#',_title:'施工回单维护'}, 'queryProMessMainById.bv?flag=sg', 1300, 900)" />
弹窗中含有表单情况就是看下面form表单介绍

3.form表单

<form id="freezeForm" method="post" action="freezeProject.bv"><div class="operateDiv"><bv:button name="save" id="save" value="确认冻结"/><bv:button id="cancel" name="cancel" cssClass="closeModal" value="取消"/></div>
</form>    
<head><%@include file="/modules/common/head.jsp" %><bv:define extra="date,auto" close="true" focusId="false"/><script type="text/javascript">$(document).ready(function () {$("#save").click(function () {$.submit($(this), $(this).parents("form"), "false", {success: beforeSubmitSuccess});});});function beforeSubmitSuccess(data){showPrompt("操作成功!");top.frameContent.gridAjax(undefined, true); // 刷新父页面top.uiDialog("close", "iframe", window); // 关闭当前页面};</script>
</head>

二. 点击调用后端接口校验

在原本bv方法中,添加校验如果失败就提示错误信息(框架自带),如果校验成功就继续往下走

		function submitProjectApplication(param) {var projectNo = param.projectNo;showProgress();$.ajax({type: 'post',url: 'submitProjectApplication.bv',data: {'projectNo': projectNo},success: function(jsonData) {if (!$.isEmpty(jsonData.promptInfo.showType)) {showPrompt(jsonData.promptInfo.showType, jsonData.promptInfo.showMsg);} else {showPrompt("操作成功!");}hideProgress();gridRefresh();}});}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void submitProjectApplication(String projectNo, PromptInfo promptInfo, FlowProgress flowProgress) {//判断必填文档是否上传boolean isUploadFile = true;List<DicDocType> docTypeList = sendMapper.listRequiredDocTypeByBusiType("1201");for (DicDocType dicDocType : docTypeList) {List<ArcUploadFile> uploadFileList = sendMapper.listUploadFilesByDocTypeAndKeyId(projectNo, dicDocType.getDocType());if (uploadFileList.isEmpty()) {isUploadFile = false;promptInfo.setShowType("error");promptInfo.setShowMsg("存在相关必填图档未维护,无法提交");break;}}

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

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

相关文章

对golang的io型进程进行off-cpu分析

背景&#xff1a; 对于不能占满所有cpu核数的进程&#xff0c;进行on-cpu的分析是没有意义的&#xff0c;因为可能程序大部分时间都处在阻塞状态。 实验例子程序&#xff1a; 以centos8和golang1.23.3为例&#xff0c;测试下面的程序&#xff1a; pprof_netio.go package m…

CSS Grid 布局:属性及使用详解

CSS Grid 布局&#xff1a;属性及使用详解 一、CSS Grid 布局的基础概念二、主要的 CSS Grid 属性1、display: grid / display: inline-grid声明 Grid 容器2、grid-template-columns / grid-template-rowsGrid 容器中列和行的尺寸3、 grid-template-areas命名布局区域4、gap/ g…

【数学建模】利用Matlab绘图(2)

一、Matlab中plot函数的基本用法 在matlab中&#xff0c;函数的基本用法主要包括以下几种 第一类&#xff1a; plot(X,Y,LineSpec) 第二类&#xff1a; plot(tbl,xvar,yvar) 1.1 第一类 1.1.1x-y坐标 x和y的选择取决于绘图所需的数据类型以及图像的类型。下表列出了几种…

编写工具模块

文章目录 1.新建模块1.新建模块sun-common-tool2.sun-dependencies指定依赖3.sun-common统一管理sun-common-tool子模块4.sun-common-tool的pom.xml5.清除掉创建模块时默认sun-frame对sun-common-tool进行管理 2.常用工具类1.DateUtils.java2.EncodeUtils.java3.IpUtils.java4.…

构建一个rust生产应用读书笔记四(实战3)

从这一节开始&#xff0c;我们将继续完善邮件订阅生产级应用&#xff0c;根据作者的选型sqlx作为数据库操作的类库&#xff0c;它有如下优点&#xff1a; 它旨在提供高效、安全且易于使用的数据库交互体验。sqlx 支持多种数据库&#xff0c;包括 PostgreSQL、MySQL 和 SQLite&…

视频直播点播平台EasyDSS推拉流技术结合无人机推流在道路交通巡检场景中的应用

随着城市化进程的加速&#xff0c;交通网络日益复杂&#xff0c;交通巡检工作面临着前所未有的挑战。传统的巡检方式往往依赖于人工巡查或地面监控设备&#xff0c;但这些方法存在巡检范围有限、效率低下等缺点。 无人机凭借其高空视野、灵活机动、实时监控等优势&#xff0c;…

VBA技术资料MF238:ADO提取多文件区域指定数据到工作表

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Mapper代理开发

引入 Mybatis入门方式中&#xff0c;以下代码仍存在硬编码问题 Mapper 代理开发&#xff1a; 目的&#xff1a; 解决原生方式中的硬编码 简化后期执行sql ------下图中&#xff0c;第一段代码是原生硬编码代码块&#xff0c;第二个是引入了Mapper代理开发的代码块。 Mapper代…

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

使用C语言连接MySQL

库的准备 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的connect库&#xff0c;可以去官网下载&#xff0c;由于我们要下载到 Linux 操作系统中&#xff0c;也可以使用如下指令进行安装库 sudo apt-get install libmysqlclient-dev MySQL连接C/C的库通常会安装在/us…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换操作符5. 网络请求嵌套回调 FlatMap6. 网络请求出错重连…

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…

PyTorch基础入门

目录 前言一、[张量的广播&基本运算](https://www.bilibili.com/video/BV1Gg411u7Lr/?spm_id_from333.999.0.0)1. 张量的广播特性2. 逐点&规约&比较运算 二、张量的线性代数运算1. BLAS & LAPACK2. 矩阵形变及特殊矩阵构造3. 矩阵基本运算4. 矩阵的线性代数运…

【VSCode】常用插件汇总

1 Path Autocomplete&#xff08;路径提示的插件&#xff09; 步骤一&#xff1a;在vscode的扩展搜索中直接搜索Path Autocomplete&#xff0c;直接安装 步骤二&#xff1a;配置 配置 VS Code settings.json "path-autocomplete.pathMappings": {"": &q…

IOS通过WDA自动化中遇到的问题

IOS自动化遇到的问题 搭建WDA环境中遇到的问题1、XCode unsupport iphone xxx.2、创建Bundle Identifier出现问题&#xff1a;Communication with Apple failed3、创建Bundle Identifier出现问题&#xff1a;Automatic signing failed \Signing certificate is invalid4、创建B…

(六)- DRM驱动开发(qcom)

一&#xff0c;Linux Android Display 1&#xff0c;Linux Android Display Software Subsystem 密 2&#xff0c;Linux Android Display Architecture 密 二&#xff0c;DRM/KMS Adreno DPU 1&#xff0c;硬件框图 密 1.1 Qualcomm Adreno DPU 8-Series Overview 密 …

游戏AI实现-寻路算法(GBFS)

贪婪最佳优先算法是宽度优先遍历和贪婪算法结合的产物&#xff0c;使用启发式函数选择当前最低代价的节点&#xff0c;改善了宽度优先遍历需要遍历地图的大量节点来找寻结果的缺点。 算法过程&#xff1a; 1.首先设置开始节点的启发函数值&#xff08;h&#xff09;为0&#…

[Unity]Unity跨平台开发之Android简介

Android要求和兼容 图形接口支持 注意&#xff1a; 新的 Unity 项目默认不支持 OpenGL ES 2.0。 由于硬件和图形 API 的限制&#xff0c;并非所有渲染管道都与 Android 兼容。 图片压缩 Android标准压缩格式是ETC和ASTC。Unity默认压缩格式是ASTC。如果Android设备不支持您选…

监控易在汽车制造行业信息化运维中的应用案例

引言 随着汽车制造行业的数字化转型不断深入&#xff0c;信息化类IT软硬件设备的运行状态监控、故障告警、报表报告以及网络运行状态监控等成为了企业运维管理的关键环节。监控易作为一款全面、高效的信息化运维管理工具&#xff0c;在汽车制造行业中发挥着重要作用。本文将结合…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节&#xff0c;它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法&#xff0c;如全站仪测量&#xff0c;主要依赖于现场人工操作&#xff0c;存在一些明显的局限性&#xff0c;例如作业时间长、工作量大…