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

news2024/12/19 21:09:58

后端

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

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 sysGuid
    FROM (
             SELECT sysGuid
             FROM ${@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 sysGuid
	FROM (
			 SELECT sysGuid
			 FROM  Send_ProjectFrozenLog
			 WHERE 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 = CASE
    WHEN epi.busiNode = '1' AND epi.nodeStatus = '1' THEN (
        SELECT CASE
            WHEN rac.step = '2' THEN '维修资金审核中'
            WHEN rac.step = '3' THEN '报修信息审核中'
            ELSE '报修阶段审核中'
        END
        FROM (
							SELECT  sfr.businesskey, sfr.step, sfr.flowName, ad.auditFlag
							FROM Send_Flow_RunInstance sfr
							left join (
							SELECT  businesskey ,  auditFlag, flowName
							FROM (
									SELECT  businesskey, auditFlag, auditDate, auditTime, flowName,
											ROW_NUMBER() OVER (PARTITION BY businesskey ORDER BY auditDate DESC, auditTime DESC) AS rn
									FROM Send_Flow_AuditDetail
							)
							WHERE rn = 1
							) ad ON sfr.businesskey = ad.businesskey  and sfr.flowName = ad.flowName
				) rac
        WHERE 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 = CASE
    WHEN epi.busiNode = 'S' AND epi.nodeStatus = '3' THEN (
        SELECT CASE
            WHEN 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 '项目终止(报修信息审核不通过)'
        END
        FROM (
							select t.businesskey, t.step, t.flowName, t.auditFlag,t.roleCode
							from (
							SELECT  sfr.businesskey, sfr.step, sfr.flowName, ad.auditFlag,ad.roleCode,
							ROW_NUMBER() OVER (PARTITION BY sfr.businesskey ORDER BY sfr.LASTTIME DESC) AS rn
							FROM Send_Flow_RunInstance sfr
							left join (
							SELECT  businesskey ,  auditFlag, flowName,roleCode
							FROM (
									SELECT  businesskey, auditFlag, auditDate, auditTime, flowName,roleCode,
											ROW_NUMBER() OVER (PARTITION BY businesskey ORDER BY auditDate DESC, auditTime DESC) AS rn
									FROM Send_Flow_AuditDetail
							)
							WHERE rn = 1
							) ad ON sfr.businesskey = ad.businesskey  and sfr.flowName = ad.flowName
							)t
							where t.rn=1
				) rac
        WHERE 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.coloradmin.cn/o/2262362.html

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

相关文章

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件&#xff0c;于是立马就安装上了&#xff0c;这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎&#xff0c;在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

对于使用exe4j打包,出现“NoClassDefFoundError: BOOT-INF/classes”的解决方案

jar使用exe4j打包exe&#xff0c;出现NoClassDefFoundError: BOOT-INF/classes 注意选取的jar包是使用build&#xff0c;而不是maven中的install 本文介绍解决这个方法的方案 点击Project Structure 按照如图所示选择 选择main class&#xff0c;选择你要打的main 如果遇到/M…

文件上传之文件内容检测

一.基本概念 介绍&#xff1a;文件内容检测就是检测上传的文件里的内容。 文件幻数检测 通常情况下&#xff0c;通过判断前10个字节&#xff0c;基本就能判断出一个文件的真实类型。 文件加载检测 一般是调用API或函数对文件进行加载测试。常见的是图像渲染测试&#xff0c;再…

WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程

前言 Kettle简介 Kettle是一款国外开源的ETL工具&#xff0c;纯Java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;绿色无需安装&#xff0c;数据抽取高效稳定 WebSpoon是Kettle的Web版本&#xff0c;由Kettle社区维护&#xff0c;不受Pentaho支持&#xff0c;…

搭建Tomcat(三)---重写service方法

目录 引入 一、在Java中创建一个新的空项目&#xff08;初步搭建&#xff09; 问题&#xff1a; 要求在tomcat软件包下的MyTomcat类中编写main文件&#xff0c;实现在MyTomcat中扫描myweb软件包中的所有Java文件&#xff0c;并返回“WebServlet(url"myFirst")”中…

CAN配置---波特率中断引脚等---autochips-AC7811-ARM-M3内核

1、配置工具 虽然不怎么好用&#xff0c;但比没有强多了。具体看图&#xff1a; 时钟选着 NVIC配置 GPIO配置 2、生成的具体配置信息 NXP的配置工具里面&#xff0c;具体的波特率可以直接显示&#xff0c;这个工具没有&#xff0c;怎么办&#xff1f; 它放到了生成的代码里面…

matlab Patten的使用(重要)(Matlab处理字符串一)

原文连接&#xff1a;https://www.mathworks.com/help/releases/R2022b/matlab/ref/pattern.html?browserF1help 能使用的搜索函数&#xff1a; contains确定字符串中是否有模式matches确定模式是否与字符串匹配count计算字符串中模式的出现次数endsWith确定字符串是否以模式…

Docker创建一个mongodb实例,并用springboot连接 mongodb进行读写文件

一、通过Docker 进行运行一个 mongodb实例 1、拉取镜像 docker pull mongo:5.0.5 2、创建 mongodb容器实例 docker run -d --name mongodb2 \-e MONGO_INITDB_ROOT_USERNAMEsalaryMongo \-e MONGO_INITDB_ROOT_PASSWORD123456 \-p 27017:27017 \mongo:5.0.5 3、进入容器&am…

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍02-基于错误消息的SQL注入(Error-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

OpenCVE:一款自动收集NVD、MITRE等多源知名漏洞库的开源工具,累计收录CVE 27万+

漏洞库在企业中扮演着至关重要的角色&#xff0c;不仅提升了企业的安全防护能力&#xff0c;还支持了安全决策、合规性要求的满足以及智能化管理的发展。前期博文《业界十大知名权威安全漏洞库介绍》介绍了主流漏洞库&#xff0c;今天给大家介绍一款集成了多款漏洞库的开源漏洞…

Spring Boot 3.X:Unable to connect to Redis错误记录

一.背景 最近在搭建一个新项目&#xff0c;本着有新用新的原则&#xff0c;项目选择到了jdk17SpringBoot3.4。但是在测试Redis连接的时候却遇到了以下问题&#xff1a; redis连不上了。于是我先去检查了配置文件的连接信息&#xff0c;发现没问题&#xff1b;再去检查配置类&am…

MinT: 第一个能够生成顺序事件并控制其时间戳的文本转视频模型。

MinT 是第一个能够生成顺序事件并控制其时间戳的文本转视频模型。使用 MinT 生成时间控制的多事件视频。给定一系列事件文本提示及其所需的开始和结束时间戳&#xff0c;MinT 可以合成具有一致主题和背景的平滑连接事件。此外&#xff0c;它可以灵活地控制每个事件的时间跨度。…

C语言实验 结构体2

时间:2024.12.18 6-5 评委打分-t-CalcuScore 代码 // 定义结构体 struct Score {int id;char name[10];int value[17];double finalScore;int rank; };// 计算最终成绩 void CalcuScore(struct Score grade[], int n) {for (int i = 0; i < n; i++) {int max = grade[i].…

第6章 第一组重构

最常用到的重构就是用提炼函数&#xff08;106&#xff09;将代码提炼到函数中&#xff0c;或者用提炼变量&#xff08;119&#xff09;来提炼变量。既然重构的作用就是应对变化&#xff0c;你应该不会感到惊讶&#xff0c;我也经常使用这两个重构的反向重构——内联函数&#…

基于python对网页进行爬虫简单教程

python对网页进行爬虫 基于BeautifulSoup的爬虫—源码 """ 基于BeautifulSoup的爬虫### 一、BeautifulSoup简介1. Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱&#xff0c;通过解析文档为用户提供需要…

C语言中文件是什么?文件文本和二进制文件的区别

1、C语言中文件是什么&#xff1f; 我们对文件的概念已经非常熟悉了&#xff0c;比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种&#xff0c;最主要的作用是保存数据。 在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同…

vmware workstation pro上创建虚拟机

vmware workstation pro上创建虚拟机 下载vmware workstation pro软件安装后并运行点击主页&#xff0c;选择创建虚拟机 创建虚拟机成功后会出现如下界面 可以点击设置按钮删除不需要的硬件&#xff0c;也可以添加新的硬件设备&#xff0c;最终硬件信息如下图 至此虚拟机…

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

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

ASP.NET Core - 依赖注入 自动批量注入

依赖注入配置变形 随着业务的增长&#xff0c;我们项目工作中的类型、服务越来越多&#xff0c;而每一个服务的依赖注入关系都需要在入口文件通过Service.Add{}方法去进行注册&#xff0c;这将是非常麻烦的&#xff0c;入口文件需要频繁改动&#xff0c;而且代码组织管理也会变…

Oracle 适配 OpenGauss 数据库差异语法汇总

背景 国产化进程中&#xff0c;需要将某项目的数据库从 Oracle 转为 OpenGauss &#xff0c;项目初期也是规划了适配不同数据库的&#xff0c;MyBatis 配置加载路径设计的是根据数据库类型加载指定文件夹的 xml 文件。 后面由于固定了数据库类型为 Oracle 后&#xff0c;只写…