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.rhkb.cn/news/492223.html

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

相关文章

uniapp连接蓝牙操作(蓝牙设备地锁)

介绍&#xff1a; 本文采用uni-app框架来创建一个简单的用户界面&#xff0c;用于搜索、连接和发送命令给蓝牙设备。 1.打开蓝牙适配器 function openBluetooth() {uni.openBluetoothAdapter({success() {uni.offBluetoothDeviceFound();// 监听新设备发现事件uni.onBlueto…

安防监控Liveweb视频汇聚融合平台助力执法记录仪高效使用

Liveweb平台可接入的设备除了常见的智能分析网关与摄像头以外 &#xff0c;还可通过GB28181协议接入执法记录仪&#xff0c;实现对执法过程的全程监控与录像&#xff0c;并对执法轨迹与路径进行调阅回看。那么&#xff0c;如何做到执法记录仪高效使用呢&#xff1f; 由于执法记…

10 JVM内置锁

我们先想明白一个问题&#xff0c;什么是锁&#xff1f; 我们去给自己家锁门的时候&#xff0c;只有对应的一把钥匙能开锁。当用钥匙去开锁的时候&#xff0c;锁孔的内置型号会验证钥匙能不能对的上。能对上就能把锁打开&#xff0c;然后进到家里使用家里的资源。否则就在外面等…

建立在商用GPT上的简单高效单细胞表示模型

大规模基因表达数据正被用于单细胞表示模型的预训练。然而&#xff0c;这样的模型需要大量的数据管理和训练。在这里&#xff0c;作者探索了一种更简单的替代方案&#xff1a;使用 GPT-3.5 从单个基因的文本描述中生成基因嵌入&#xff0c;然后通过基因表达量加权gene embeddin…

tryhackme-Pre Security-Defensive Security Intro(防御安全简介)

任务一&#xff1a;Introduction to Defensive Security防御安全简介 此room的两个要点&#xff1a; Preventing intrusions from occurring 防止入侵发生Detecting intrusions when they occur and responding properly 检测发生的入侵并正确响应 防御安全还有更多内容。 除上…

[Unity] Text文本首行缩进两个字符

Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 比如&#xff1a; 效果&#xff1a; 代码&#xff1a; TMPtext1.text "\u3000\u3000" "选择动作类型&#xff1a;";

Python:Matplotlib详细使用

1.Matplotlib简介 Matplotlib是python数据分析三剑客之一&#xff0c;是一个功能强大且非常流行的Python数据可视化库。Matplotlib可用于绘制折线图(line plot)、散点图(scatter plot)、条形图(bar plot)、直方图(histogram plot)、饼图(pie plot)等&#xff0c;同时也支持部分…

MIT S6081 2024 Lab 1 | Operating System | Notes

目录 安装与下载 实验1 开始我们的实验 sleep&#xff08;简单&#xff09; pingpong&#xff08;简单&#xff09; primes (中等)/(困难) find&#xff08;中等&#xff09; xargs&#xff08;中等&#xff09; finally Reference I. Tools Debian 或 Ubuntu Arch…

【Java】mac安装Java17(JDK17)

文章目录 下载java17一、安装二、环境变量 下载java17 官网下载&#xff1a;https://www.oracle.com/java/technologies/downloads 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、安装 直接安装后&#xff0c;安装完后目录会存放在下面目录下 /…

【USB-HID】“自动化键盘“

这里写目录标题 【USB-HID】"自动化键盘"1. 前言2. 框架3. 实现3.1 模拟键盘按键输入 【USB-HID】“自动化键盘” 1. 前言 最近从朋友那了解了一种"自动化键盘"&#xff0c;能够通过上位机录制按键脚本&#xff0c;然后执行脚本&#xff0c;实现物理键盘…

XXE靶机漏洞复现通关

1.扫描XXE靶机的ip地址 将kali虚拟机和XXE靶机部署在同一局域网中&#xff0c;都采用NAT网络模式 搭建好后在kali终端中进行扫描XXE靶机的ip arp-scan -l 根据常识我们可以推断192.168.27.153为靶机的ip地址 2.访问靶机页面并扫描附录 进入页面后我们可以打开御剑扫描网页中…

leetcode 36.有效的数独

1.题目要求: 2.题目步骤: 写好判断函数 3.题目代码: class Solution { public:bool isvalid(vector<vector<char>>& board,char num,int row,int col){//先找左下标int leftrow row - 1;while(leftrow > 0){if(board[leftrow][col] num){return fals…

在C#中测试比较目录的不同方法以查看它们有哪些共同的文件

C# 中的示例“比较目录以查看它们有哪些共同的文件”使用Directory.GetFiles获取两个目录中的文件。它对文件进行排序&#xff0c;并比较两个排序后的列表以查看哪些文件位于第一个目录中、第二个目录中或两个目录中。有关其工作原理的详细信息&#xff0c;请参阅该示例。 Kur…

【Java基础面试题019】什么是Java中的不可变类?

回答重点 不可变类是指在创建后无法被修改的类。一旦对象被创建&#xff0c;它的所有属性都不能被更改。这种类的实例在整个生命周期内保持不变。 关键特征&#xff1a; 声明类为final&#xff0c;防止子类继承类的所有字段都是private和final&#xff0c;确保它们在初始化后…

【论文笔记】Editing Models with Task Arithmetic

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Editing Models with Task…

HarmonyOS(71) 自定义事件分发之TouchTestStrategy使用说明

TouchTestStrategy 1、前言2、TouchTestStrategy简介2.1、TouchTestStrategy枚举类型简介2.2、TouchTestStrategy.DEFAULT效果1.3、TouchTestStrategy.FORWARD_COMPETITION效果2.3、TouchTestStrategy.FORWARD效果3、参考资料1、前言 本文根据官方文档自定义事件分发整理而来,…

【附源码】Electron Windows桌面壁纸开发中的 CommonJS 和 ES Module 引入问题以及 Webpack 如何处理这种兼容

背景 在尝试让 ChatGPT 自动开发一个桌面壁纸更改的功能时&#xff0c;发现引入了一个 wallpaper 库&#xff0c;这个库的入口文件是 index.js&#xff0c;但是 package.json 文件下的 type:"module"&#xff0c;这样造成了无论你使用 import from 还是 require&…

WebGIS城市停水及影响范围可视化实践

目录 前言 一、相关信息介绍 1、停水信息的来源 2、停水包含的相关信息 二、功能简介 1、基础小区的整理 2、停水计划的管理 三、WebGIS空间可视化 1、使用到的组件 2、停水计划的展示 3、影响小区的展示 4、实际效果 四、总结 前言 城市停水&#xff0c;一个看似…

群落生态学研究进展】Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…

docker 部署 redis

docker 部署 redis 1. 下载 redis 镜像 # docker images | grep redis bitnami/redis 7.2.4-debian-11-r5 45de196aef7e 10 months ago 95.2MB2. docker-compose 部署 version: "3" services:redis:image: bitnami/redis:7.2.4-debian-11-…