版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块四管理端-套餐管理《JavaEE企业级应用开发项目教程(SSM)》知识目标/Target了解七牛云存储服务,能够说出七牛云存储服务的使用步骤熟悉Redis的基本操作,能够独立完成Redis的下载、配置与启动熟悉Redis可视化工具,能够完成Redis可视化工具的安装并使用Redis可视化工具连接Redis技能目标/Target掌握七牛云存储服务的实现方式,能够使用七牛云实现图片上传的功能掌握新增套餐功能的实现方法掌握查询套餐功能的实现方法技能目标/Target掌握编辑套餐功能的实现方法掌握删除套餐功能的实现方法掌握Redis和Quartz的实现方式,能够使用Redis和Quartz实现定时清理垃圾图片的功能章节概述/
Summary在日常的体检中,客户并不知道哪些检查是必须的,为了避免客户盲目选择体检项目而导致的时间、金钱的浪费,一般情况下,健康管理机构不直接将单个的检查项或检查组在线上对客户销售。为了给客户提供方便,会根据群体需求推出了不同类型的体检套餐,套餐中包含客户需要的所有检查项目。这些体检套餐可以在管理端进行新增、查询、编辑和删除。目录/Contents01020304新增套餐查询套餐编辑套餐删除套餐05定时清理垃圾图片新增套餐4-1任务描述用户在预约体检时需要选择相应的套餐,体检套餐的丰富程度会间接影响客户的选择。为了满足各个用户群的体检需求,应该尽可能地丰富套餐种类,使体检套餐更有针对性。套餐可以在管理端的套餐管理中进行新增。任务描述单击套餐管理页面中的“新增”按钮弹出新增套餐对话框。输入套餐的基本信息,勾选检查组信息后,单击“确定”按钮完成套餐的新增。新增套餐可以分解成2个功能,分别是弹出带有检查组数据的对话框、完成套餐的新增。任务分析任务分析(1)弹出新增套餐对话框为setmeal.html页面的“新增”按钮绑定单击事件,在单击事件触发后弹出新增套餐对话框,再提交查询所有检查组的请求。(2)接收和处理查询检查组请求客户端发起查询检查组的请求后,由CheckGroupController类的findAll()方法接收页面提交的请求,并调用CheckGroupService接口的findAll()方法查询所有检查组。1.弹出带有检查组数据的新增套餐对话框任务分析(3)查询所有检查组在CheckGroupServiceImpl类中重写CheckGroupService接口的findAll()方法,并调用CheckGroupDao接口的findAll()方法从数据库中查询所有检查组。(4)显示查询结果CheckGroupController类中的findAll()方法将查询结果返回setmeal.html页面,setmeal.html页面根据结果在对话框中显示所有的检查组信息。1.弹出带有检查组数据的新增套餐对话框任务分析弹出带有检查组数据对话框的实现过程1.弹出带有检查组数据的新增套餐对话框任务分析(1)提交新增套餐请求为setmeal.html页面新增套餐对话框“确定”按钮绑定单击事件,在单击事件触发后提交对话框中的数据。(2)接收和处理新增套餐请求客户端发起提交数据的请求后,由控制器类SetmealController中的add()方法接收页面提交的请求,请求的参数中包含套餐基本信息和套餐对检查组的引用信息。2.完成套餐的新增任务分析(3)保存新增套餐数据在SetmealServiceImpl类中重写SetmealService接口的add()方法,调用SetmealDao接口中用于新增套餐基本信息的add()方法、用于新增套餐对检查组的引用的setSetmealAndCheckGroup()方法。(4)提示新增结果SetmealController类中的add()方法将新增套餐的结果返回setmeal.html页面,setmeal.html页面根据返回结果提示新增套餐成功或失败的信息。2.完成套餐的新增任务分析完成套餐新增的实现过程知识进阶七牛云存储服务七牛云是国内知名的云计算及数据服务提供商,推出了对象存储、融合CDN加速、容器云、大数据平台、深度学习平台等服务。在七牛云提供的多种服务中,传智健康主要使用的是七牛云提供的对象存储服务,将图片存储在七牛云的存储空间中。知识进阶在使用七牛云之前,需要注册成为会员。访问七牛云官方网站。注册七牛云知识进阶在七牛云官方网站首页中,单击右上角“立即注册”按钮,进入七牛云注册页面。注册七牛云知识进阶使用注册账号进行登录,登录成功后还不能进行后续操作,因为需要进行实名认证。实名认证在【个人中心】→【个人信息】完成。实名认证知识进阶认证完成后,返回七牛云产品主页面。新建存储空间知识进阶七牛云产品主页面中,单击页面资源管理栏中的“+新增存储空间”选项,新增存储空间。输入存储空间名称,勾选存储区域和访问控制,单击“确定”按钮,完成存储空间的创建。新建存储空间知识进阶新建存储空间需要注意的是,系统会自动为该空间配备测试域名,有效期30天,仅限用于业务对接测试。30天后系统会自动回收,为了不影响使用,读者可以重新创建新的存储空间。生成的默认域名需要读者记录,因为在后续开发中需要使用该域名。知识进阶在操作七牛云存储服务时需要引入七牛云的依赖,打开health_parent父工程的pom.xml文件,引入七牛云的JAR包。操作七牛云存储服务<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId><version>7.7.0</version></dependency>
</dependencies></dependencyManagement>知识进阶打开health_common模块pom文件,引入七牛云的JAR包。
<dependencies>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId></dependency>
</dependencies>操作七牛云存储服务知识进阶鉴权注意:一个账号最多拥有两对密钥(Access/SecretKey);更换密钥时,请创建第二个密钥;删除密钥前须停用服务;出于安全考虑,建议读者周期性地更换密钥。JavaSDK的所有功能都要合法的授权才能使用。授权凭证的签算需要七牛云账号下的一对有效的AccessKey和SecretKey,这对密钥可以通过【个人中心】→【密钥管理】进行查看。知识进阶封装工具类在七牛开发者中心的JavaSDK帮助文档中提供了图片上传和删除的官方使用案例,为了方便读者操作七牛云存储服务,我们对官方提供的使用案例进行了简单改造,封装成工具类QiniuUtils,在项目中进行图片上传与删除时直接调用该工具类即可。在health_common模块的com.itheima.utils包下创建QiniuUtils类,在类中定义upload2Qiniu()方法,用于图片上传。定义deleteFileFromQiniu()方法,用于图片删除。知识进阶在QiniuUtils类中配置存储区域时,需要注意七牛云的存储区域与Zone对象的对应关系。存储区域Zone对象华东Zone.zone0()华北Zone.zone1()华南Zone.zone2()北美Zone.zoneNa0()东南亚Zone.zoneAs0()上述表格中的内容记录了每个存储区域对应的Zone对象。需要注意的是,其中的内容是本书截稿时七牛云官方网站提供的存储区域与Zone对象的对应关系,如果读者在编写代码时出现对应关系不匹配,可以前往官网获取最新的对应关系。。封装工具类任务实现在setmeal.html页面中定义handleCreate()方法,将dialogFormVisible的值修改为true,并且在每次弹出对话框之前,调用resetForm()方法将对话框中的数据清空。resetForm(){this.formData={};//清空表单域this.checkgroupIds=[];//清空勾选的检查组this.imageUrl=null;//清除上传的图片域},handleCreate(){this.resetForm();//重置表单数据this.activeName='first';//每次弹出的新增对话框默认显示基本信息区this.dialogFormVisible=true;//显示新增对话框axios.get("/checkgroup/findAll.do").then((res)=>{if(res.data.flag){this.tableData=res.data.data;//基于Vue数据绑定展示}else{this.$message.error(res.data.message);}});}1.弹出带有检查组数据的新增套餐对话框(1)弹出新增套餐对话框任务实现在setmeal.html页面为“新增”按钮绑定单击事件,并设置单击时调用handleCreate()方法。<el-buttontype="primary"class="butT"
@click="handleCreate()">新增</el-button>1.弹出带有检查组数据的对话框1.弹出带有检查组数据的新增套餐对话框(1)弹出新增套餐对话框任务实现在health_backend子模块的CheckGroupController类定义findAll()方法,用于处理查询所有检查组的请求。@RequestMapping("/findAll")publicResultfindAll(){try{List<CheckGroup>list=checkGroupService.findAll();//服务调用成功,返回查询结果与查询成功提示信息returnnewResult(true,MessageConstant.
QUERY_CHECKGROUP_SUCCESS,list);}catch(Exceptione){e.printStackTrace();//服务调用失败,返回查询失败提示信息returnnewResult(false,MessageConstant.QUERY_CHECKGROUP_FAIL);}}(2)实现查询所有检查组1.弹出带有检查组数据的对话框1.弹出带有检查组数据的新增套餐对话框任务实现在health_interface子模块的CheckGroupService接口中定义findAll()方法,用于查询所有检查组。//查询检查组信息publicList<CheckGroup>findAll();在health_service_provider子模块的CheckGroupServiceImpl类中重写CheckGroupService接口的findAll()方法,用于查询所有检查组。@OverridepublicList<CheckGroup>findAll(){returncheckGroupDao.findAll();//调用持久层方法}1.弹出带有检查组数据的对话框1.弹出带有检查组数据的新增套餐对话框(2)实现查询所有检查组任务实现在health_service_provider子模块的CheckGroupDao接口中定义findAll()方法,用于查询所有检查组。//查询检查组信息publicList<CheckGroup>findAll();在health_service_provider子模块的CheckGroupDao.xml文件中,使用<select>标签映射查询语句查询所有检查组。<!--查询检查组信息--><selectid="findAll"
resultType="com.itheima.pojo.CheckGroup">
SELECT*FROMt_checkgroup</select>1.弹出带有检查组数据的对话框1.弹出带有检查组数据的新增套餐对话框(2)实现查询所有检查组任务实现启动Zookeeper服务,在IDEA依次启动health_service_provider和health_backend。在浏览器中访问http://localhost:82/pages/setmeal.html。(3)测试弹出带有检查组数据的新增套餐对话框1.弹出带有检查组数据的对话框1.弹出带有检查组数据的新增套餐对话框任务实现在套餐管理页面单击“新增”按钮,弹出新增套餐对话框。(3)测试弹出带有检查组数据的新增套餐对话框1.弹出带有检查组数据的对话框1.弹出带有检查组数据的新增套餐对话框任务实现在新增套餐对话框中单击“检查组信息”,显示检查组信息。(3)测试弹出带有检查组数据的新增套餐对话框1.弹出带有检查组数据的对话框1.弹出带有检查组数据的新增套餐对话框任务实现要想实现图片上传功能,需要使用文件上传组件commons-fileupload,并在springmvc.xml文件中配置commons-fileupload组件的信息。首先在health_parent父工程的pom.xml文件中引入commons-fileupload的依赖信息。<properties>
<commons-fileupload.version>1.3.1</commons-fileupload.version></properties><dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version> </dependency>
</dependencies></dependencyManagement>2.图片上传(1)配置文件上传组件任务实现<dependencies>
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId></dependency></dependencies>在health_common子模块的pom.xml文件中引入commons-fileupload的依赖信息。2.图片上传(1)配置文件上传组件任务实现在health_backend子模块的springmvc.xml文件中配置文件上传组件。<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"
<!--文件上传组件--><beanid="multipartResolver"
class="mons.CommonsMultipartResolver"><propertyname="maxUploadSize"value="104857600"/><propertyname="maxInMemorySize"value="4096"/><propertyname="defaultEncoding"value="UTF-8"/></bean></beans>表示以字节为单位的最大文件大小表示读取文件到内存中最大的字节数,默认是1024表示文件上传头部编码默认是iso-8859-12.图片上传(1)配置文件上传组件任务实现为setmeal.html页面中的上传组件el-upload设置对应属性的值。<el-form-itemlabel="上传图片"><el-upload
class="avatar-uploader"
action="/setmeal/upload.do"
:auto-upload="true"
name="imgFile"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"><imgv-if="imageUrl":src="imageUrl"class="avatar"><!--用于上传图片预览--><iv-elseclass="el-icon-plusavatar-uploader-icon"></i><!--用于展示图片预览--></el-upload></el-form-item>表示上传的文件提交到后台的地址上传文件的名称选中文件后是否自动上传是否显示已上传文件列表上传文件之前执行的钩子函数文件上传成功时执行的钩子函数2.图片上传(2)提交图片上传的请求任务实现beforeAvatarUpload(file){constisJPG=file.type==='image/jpeg';if(!isJPG){this.$message.error('上传套餐图片只能是JPG格式!');}constisLt2M=file.size/1024/1024<2;if(!isLt2M){this.$message.error('上传套餐图片大小不能超过2MB!');}returnisJPG&&isLt2M;}判断图片格式是jpeg判断大小不超过2MB2.图片上传(2)提交图片上传的请求在setmeal.html页面中定义beforeAvatarUpload()方法,用于校验图片的格式和大小。任务实现在setmeal.html页面中定义handleAvatarSuccess()方法,用于返回上传成功或失败的提示信息。handleAvatarSuccess(response,file){this.$message({type:response.flag?"success":"error",message:response.message});if(response.flag){//预览刚刚上传的文件this.imageUrl="/"+response.data;//将文件名称赋值给模型数据,用于表单提交this.formData.img=response.data;}}七牛云存储空间的域名,读者需要依照自己创建的存储空间的域名进行替换。2.图片上传(2)提交图片上传的请求任务实现在health_backend子模块的com.itheima.controller包下创建控制器类SetmealController,在类中定义upload()方法,用于处理图片上传的请求。@RestController
@RequestMapping("/setmeal")publicclassSetmealController{@Reference
privateSetmealServicesetmealService;@RequestMapping("/upload")publicResultupload(@RequestParam("imgFile")MultipartFileimgFile){StringoriginalFilename=imgFile.getOriginalFilename();//获取原始文件名intindex=originalFilename.lastIndexOf(".");Stringsuffix=originalFilename.substring(index);//获取文件后缀StringfileName=UUID.randomUUID().toString()+suffix;//图片名称try{
QiniuUtils.upload2Qiniu(imgFile.getBytes(),fileName);//将图片保存到七牛云returnnewResult(true,MessageConstant.PIC_UPLOAD_SUCCESS,fileName);}catch(Exceptione){}}}2.图片上传(3)实现图片上传控制器任务实现启动Zookeeper服务、health_service_provider和health_backend。在浏览器中访问http://localhost:82/pages/setmeal.html。单击“+”,选择图片进行上传。2.图片上传(4)测试图片上传任务实现为新增套餐对话框中的“取消”和“确定”按钮绑定单击事件,并设置单击时要执行的操作。<divslot="footer"class="dialog-footer"><el-button@click="dialogFormVisible=false">取消</el-button><el-buttontype="primary"@click="handleAdd()">确定</el-button></div>3.完成套餐的新增(1)提交新增套餐请求任务实现handleAdd(){//发送axios请求,包括两部分:套餐基本信息、关联的检查组id数组
axios.post("/setmeal/add.do?checkgroupIds="+this.checkgroupIds,this.formData).then((res)=>{if(res.data.flag){//执行成功,提示信息this.$message({type:'success',message:res.data.message});this.dialogFormVisible=false;//关闭新增对话框}else{this.$message.error(res.data.message);}});}关联的检查组id数组套餐基本信息3.完成套餐的新增(1)提交新增套餐请求任务实现在health_common子模块的com.itheima.pojo包下创建Setmeal类,在类中声明套餐的属性,并定义各个属性的getter/setter方法。3.完成套餐的新增(2)创建套餐类任务实现在health_common子模块的SetmealController类中定义add()方法,用于处理新增套餐的请求。@RequestMapping("/add")publicResultadd(@RequestBodySetmealsetmeal,Integer[]checkgroupIds){try{setmealService.add(setmeal,checkgroupIds);//调用服务add()发送请求//调用服务成功,返回新增成功提示信息returnnewResult(true,MessageConstant.ADD_SETMEAL_SUCCESS);}catch(Exceptione){e.printStackTrace();//调用服务失败,返回新增失败提示信息returnnewResult(false,MessageConstant.ADD_SETMEAL_FAIL);}}3.完成套餐的新增(3)实现新增套餐控制器任务实现在health_interface子模块的com.itheima.service包下创建接口SetmealService,在接口中定义新增套餐的add()方法。publicinterfaceSetmealService{publicvoidadd(Setmealsetmeal,Integer[]checkgroupIds);//新增套餐}3.完成套餐的新增(4)创建新增套餐服务任务实现在health_service_provider子模块的com.itheima.service.impl包下创建SetmealService接口实现类SetmealServiceImpl,并重写接口的add()方法,用于新增套餐。@Service(interfaceClass=SetmealService.class)@TransactionalpublicclassSetmealServiceImpl
implementsSetmealService{@Autowired//注入DAO对象privateSetmealDaosetmealDao;//新增套餐同时需要关联检查组(设置多对多关系)
@Overridepublicvoidadd(Setmealsetmeal,Integer[]checkgroupIds){
setmealDao.add(setmeal);//调用持久层接口IntegersetmealId=setmeal.getId();//获取套餐id//关联检查组this.setSetmealAndCheckGroup(setmealId,checkgroupIds);}}3.完成套餐的新增(5)实现新增套餐服务任务实现publicvoidsetSetmealAndCheckGroup(IntegersetmealId,Integer[]
checkgroupIds){if(checkgroupIds!=null&&checkgroupIds.length>0){for(IntegercheckgroupId:checkgroupIds){//遍历检查组idMap<String,Integer>map=newHashMap<>();map.put("setmealId",setmealId);//套餐idmap.put("checkgroupId",checkgroupId);//勾选的检查组id//调用持久层接口,新增套餐与检查组关联信息setmealDao.setSetmealAndCheckGroup(map);}}}设置套餐对检查组的引用,遍历数组checkgroupIds,把套餐id和遍历的检查组id存储到map集合中。3.完成套餐的新增(5)实现新增套餐服务任务实现在health_service_provider子模块的com.itheima.dao包下创建持久层接口SetmealDao,用于处理与套餐相关的操作。publicinterfaceSetmealDao{publicvoidadd(Setmealsetmeal);//新增套餐基本信息//新增套餐与检查组的关联信息publicvoidsetSetmealAndCheckGroup(Map<String,Integer>map);}3.完成套餐的新增(6)实现持久层新增套餐任务实现在health_service_provider子模块的resources文件夹的com.itheima.dao目录下创建与SetmealDao接口同名的映射文件SetmealDao.xml,在文件中使用<intert>标签映射新增语句,分别新增套餐的基本信息和新增套餐对检查组的引用。<!--新增套餐--><insertid="add"parameterType="com.itheima.pojo.Setmeal"><selectKeykeyProperty="id"resultType="int"order="AFTER">selectLAST_INSERT_ID()</selectKey>INSERTINTOt_setmeal(code,name,sex,age,helpCode,price,remark,attention,img)
VALUES(#{code},#{name},#{sex},#{age},#{helpCode},#{price},#{remark},#{attention},#{img})</insert><!--设置套餐和检查组多对多关系,操作的是中间关系表--><insertid="setSetmealAndCheckGroup"parameterType="map">INSERTINTOt_setmeal_checkgroup(setmeal_id,checkgroup_id)VALUES(#{setmealId},#{checkgroupId})</insert>3.完成套餐的新增(6)实现持久层新增套餐任务实现依次启动ZooKeeper服务、health_service_provider和health_backend,在浏览器中访问http://localhost:82/pages/setmeal.html,按照要求填写套餐的基本信息。3.完成套餐的新增(7)测试新增套餐任务实现填写套餐基本信息后,单击“检查组信息”,勾选套餐包含的检查组信息。3.完成套餐的新增(7)测试新增套餐任务实现勾选检查组信息后,单击“确定”按钮,将数据提交到后台。3.完成套餐的新增(7)测试新增套餐任务实现由于查询套餐的功能暂未开发完成,刚新增的套餐数据并不会展示在套餐管理页面中。套餐是否新增成功可以通过查询数据库中的数据表进行验证。3.完成套餐的新增(7)测试新增套餐查询套餐4-2任务描述套餐的查询,既可以根据指定需求查询,也可以查询所有套餐。考虑到页面可视化效果,本任务通过分页形式展示查询出的套餐。查询套餐可以分解成3个功能,分别是分页展示套餐、页码切换、按条件查询套餐。任务分析任务分析(1)提交分页查询套餐的请求。(2)接收和处理分页查询套餐请求。(3)分页查询套餐。(4)展示分页查询结果。分页展示套餐为setmeal.html页面的分页条绑定单击事件,在单击事件触发后根据要跳转的页码进行分页查询。页码切换为setmeal.html页面的“查询”按钮绑定单击事件,在单击事件触发后执行按条件的分页查询。按条件查询套餐查询套餐任务分析分页查询套餐的实现过程任务实现在setmeal.html页面中定义findPage()方法,用于分页查询套餐。findPage(){//定义分页参数varparam={currentPage:this.pagination.currentPage,//当前页pageSize:this.pagination.pageSize,//每页显示记录数
queryString:this.pagination.queryString//查询条件};//发送Ajax请求,进行分页查询
axios.post("/setmeal/findPage.do",param).then((res)=>{this.dataList=res.data.rows;//查询结果this.pagination.total=res.data.total;//总记录数});}1.分页展示套餐(1)提交分页查询套餐的请求任务实现在钩子函数created()中调用findPage()方法,访问setmeal.html页面后即可实现查询套餐并分页显示。created(){
this.findPage();//调用分页查询方法完成分页查询}1.分页展示套餐(1)提交分页查询套餐的请求任务实现在health_backend子模块的SetmealController类中定义findPage()方法,用于处理分页查询套餐的请求。@RequestMapping("/findPage")publicPageResultfindPage(@RequestBodyQueryPageBeanpageBean){//调用服务接口findPage(),返回分页结果封装对象returnsetmealService.findPage(pageBean);}1.分页展示套餐(2)实现查询套餐控制器任务实现在health_interface子模块的SetmealService接口定义findPage()方法,用于分页查询套餐。//分页查询套餐接口publicPageResultfindPage(QueryPageBeanpageBean);1.分页展示套餐(3)创建查询套餐服务任务实现在health_service_provider子模块的SetmealServiceImpl类重写CheckGroupService接口的findPage()方法,用于分页查询套餐。@OverridepublicPageResultfindPage(QueryPageBeanpageBean){IntegercurrentPage=pageBean.getCurrentPage();//获取当前页面IntegerpageSize=pageBean.getPageSize();//获取每页显示的记录数StringqueryString=pageBean.getQueryString();//获取查询条件
PageHelper.startPage(currentPage,pageSize);//使用分页助手插件实现分页查询//调用持久层接口方法Page<Setmeal>page=setmealDao.findByCondition(queryString);//返回分页结果对象returnnewPageResult(page.getTotal(),page.getResult());//返回分页对象}1.分页展示套餐(4)实现查询套餐服务任务实现在health_service_provider子模块的SetmealDao接口定义findByCondition()方法,用于分页查询套餐。//分页查询套餐publicPage<Setmeal>findByCondition(StringqueryString);1.分页展示套餐(5)实现持久层查询套餐在health_service_provider子模块的SetmealDao.xml映射文件中使用<select>元素映射查询语句,进行套餐的条件查询、分页查询。<selectid="findByCondition"parameterType="string"
resultType="com.itheima.pojo.Setmeal">SELECT*FROMt_setmeal<iftest="value!=nullandvalue.length>0">
WHEREcode=#{value}ORnameLIKE'%${value}%'ORhelpCode=#{value}</if></select>任务实现依次启动ZooKeeper服务、health_service_provider和health_backend。在浏览器中访问http://localhost:82/pages/setmeal.html1.分页展示套餐(6)测试分页展示套餐任务实现优化handleAdd()方法,在新增套餐成功后调用findPage()方法,以展示系统中最新的套餐。//新增套餐handleAdd(){//发送axios请求,包括两部分:套餐基本信息、关联的检查组id数组axios.post("/setmeal/add.do?checkgroupIds=" +this.checkgroupIds,this.formData).then((res)=>{if(res.data.flag){
this.findPage();//分页查询套餐}
});}1.分页展示套餐(7)完善setmeal.html页面的handleAdd()方法任务实现在setmeal.html页面中定义handleCurrentChange()方法,该方法会在页码发生改变时被调用。//切换页码handleCurrentChange(currentPage){this.pagination.currentPage=currentPage;//指定最新的页码this.findPage();//调用分页方法}2.页码切换任务实现在setmeal.html页面中提供了分页组件el-pagination,为分页组件el-pagination设置对应属性的值。<el-pagination
class="pagiantion"
@current-change="handleCurrentChange"
:current="pagination.currentPage"
:size="pagination.pageSize"
:total="pagination.total"
layout="total,prev,pager,next,jumper"></el-pagination>表示在页码发生改变时触发的方法2.页码切换任务实现往数据库导入测试数据。依次启动Zookeeper服务、health_service_provider和health_backend。在浏览器中访问http://localhost:82/pages/setmeal.htm。2.页码切换任务实现在套餐管理页面,单击“>”按钮,跳转到第2页。2.页码切换任务实现在setmeal.html页面中为“查询”按钮绑定单击事件,并在单击时调用handleCurrentChange(1)方法。<el-buttonclass="dalfBut"
@click="handleCurrentChange(1)">查询</el-button>强制指定currentPage的方式可以使返回的数据从查询结果的第1条开始返回3.按条件查询套餐任务实现依次启动Zookeeper服务、health_service_provider和health_backend。在浏览器中访问http://localhost:82/pages/setmeal.html。在查询条件输入框输入0002后,单击“查询”按钮。3.按条件查询套餐编辑套餐4-3任务描述在setmeal.html页面中,单击“编辑”按钮会弹出编辑套餐对话框,该对话框中展示对应套餐的基本信息和所有的检查组信息,并将套餐中包含的检查组信息设置为勾选状态。由于套餐是针对不同的用户群体的需求设计的,当群体需求发生变化时,不可避免地会对套餐进行修改,这时就可以进行套餐的编辑。可以将编辑套餐分解成2个功能实现,分别是弹出带有套餐数据的编辑套餐对话框、完成套餐的编辑。任务分析任务分析(1)弹出编辑套餐对话框为setmeal.html页面的“编辑”按钮绑定单击事件,在单击事件触发后弹出编辑套餐对话框,再提交查询套餐基本信息、查询所有检查组、查询对检查组的引用的请求。(2)接收和处理查询套餐请求套餐数据包含基本信息和对检查组的引用信息,因此,客户端发起查询套餐的请求时,需要接收和处理查询基本信息的请求、查询所有检查组的请求、查询对检查组的引用的请求。1.弹出带有套餐数据的编辑套餐对话框任务分析(3)查询套餐数据在SetmealServiceImpl类中实现查询套餐基本信息、查询对检查组的引用的相关方法。(4)显示查询结果setmeal.html页面根据返回结果在编辑套餐对话框中展示套餐基本信息、所有的检查组信息和勾选的检查组信息。1.弹出带有套餐数据的编辑套餐对话框任务分析弹出带有套餐数据的对话框任务分析(1)提交编辑套餐请求为setmeal.html页面编辑套餐对话框“确定”按钮绑定单击事件,在单击事件触发后提交对话框中的数据。(2)接收和处理编辑套餐请求客户端发起编辑套餐的请求后,由SetmealController类的edit()方法接收页面提交的请求,并调用SetmealService接口的edit()方法编辑套餐。(3)编辑套餐数据编辑套餐包括对套餐基本信息的编辑和套餐对检查组的引用信息的编辑,将原有的套餐对检查组的引用信息删除,然后重新添加新的套餐对检查组的引用信息。(4)提示编辑结果SetmealController类中的edit()方法将编辑结果返回setmeal.html页面,setmeal.html页面根据返回结果提示编辑成功或失败的信息。2.完成套餐的编辑任务分析完成套餐编辑的实现过程任务实现在setmeal.html页面中定义handleUpdate()方法,用于弹出编辑套餐对话框、回显套餐数据。handleUpdate(row){this.imageUrl=null;//清空图片模型数据this.activeName='first';//每次弹出的编辑对话框默认显示基本信息区this.dialogFormVisible4Edit=true;//编辑对话框显示//基本信息回显,发送Ajax请求查询套餐基本信息
axios.get("/setmeal/findById.do?id="+row.id).then((res)=>{if(res.data.flag){//为模型数据赋值,基于Vue数据绑定进行回显this.formData=res.data.data;this.imageUrl="/"+res.data.data.img;}});//发送Ajax请求,加载检查组列表,以表格的形式展示到对话框中
axios.get("/checkgroup/findAll.do").then((res)=>{
//省略});}1.弹出带有套餐数据的编辑套餐对话框(1)弹出编辑套餐对话框任务实现setmeal.html页面中的“编辑”按钮绑定单击事件,并设置在单击时调用handleUpdate()方法。<el-buttontype="primary"class="mini"
@click="handleUpdate(scope.row)">编辑</el-button>1.弹出带有套餐数据的编辑套餐对话框(1)弹出编辑套餐对话框任务实现在health_backend子模块的SetmealController类定义findById()方法,用于接收和处理根据套餐id查询套餐基本信息的请求。@RequestMapping("/findById")publicResultfindById(Integerid){try{
Setmealsetmeal=setmealService.findById(id);//服务调用成功,返回查询结果与查询成功提示信息returnnewResult(true,MessageConstant.QUERY_SETMEAL_SUCCESS,setmeal);}catch(Exceptione){e.printStackTrace();//服务调用失败,返回查询失败提示信息returnnewResult(false,MessageConstant.QUERY_SETMEAL_FAIL);}}(2)实现查询套餐控制器1.弹出带有套餐数据的编辑套餐对话框任务实现在SetmealController类中定义findCheckGroupIdsBySetmealId()方法,用于接收和处理根据套餐id查询套餐对检查组的引用的请求。@RequestMapping("/findCheckGroupIdsBySetmealId")publicResultfindCheckGroupIdsBySetmealId(IntegersetmealId){try{//调用服务接口,发送请求,返回关联的id列表List<Integer>list=setmealService .findCheckGroupIdsBySetmealId(setmealId);//服务调用成功,返回查询结果与查询成功提示信息returnnewResult(true, MessageConstant.QUERY_CHECKGROUP_SUCCESS,list);}catch(Exceptione){e.printStackTrace();returnnewResult(false,MessageConstant.QUERY_CHECKGROUP_FAIL);}}1.弹出带有套餐数据的对话框(2)实现查询套餐控制器1.弹出带有套餐数据的编辑套餐对话框任务实现在health_interface子模块的SetmealService接口定义findById()方法,用于根据套餐id查询套餐基本信息;定义findCheckGroupIdsBySetmealId()方法,用于根据套餐id查询套餐对检查组的引用。//根据套餐id查询套餐publicSetmealfindById(Integerid);//根据套餐id查询套餐对检查组的引用publicList<Integer>findCheckGroupIdsBySetmealId(IntegersetmealId);(3)创建查询套餐服务1.弹出带有套餐数据的编辑套餐对话框任务实现在health_service_provide子r模块的SetmealServiceImpl类重写SetmealService接口的findById()方法和findCheckGroupIdsBySetmealId()方法。//根据id查询套餐@OverridepublicSetmealfindById(Integerid){returnsetmealDao.findById(id);//调用持久层接口}@Override//根据套餐id查询与之关联的检查组idpublicList<Integer>findCheckGroupIdsBySetmealId(IntegersetmealId){returnsetmealDao.findCheckGroupIdsBySetmealId(setmealId);}(4)实现查询套餐服务1.弹出带有套餐数据的编辑套餐对话框任务实现在health_service_provider子模块的SetmealDao接口中定义findById()方法,用于根据套餐id查询套餐基本信息;定义findCheckGroupIdsBySetmealId()方法,用于根据套餐id查询套餐对检查组的引用。//根据套餐id查询套餐publicSetmealfindById(Integerid);//根据套餐id查询套餐对检查组的引用publicList<Integer>findCheckGroupIdsBySetmealId(IntegersetmealId);(5)实现持久层查询套餐1.弹出带有套餐数据的编辑套餐对话框任务实现在health_service_provider子模块的SetmealDao.xml映射文件中使用<select>元素映射查询语句,分别根据套餐id查询套餐基本信息、根据套餐id查询套餐对检查组的引用。<!--根据id查询套餐--><selectid="findById"parameterType="int"
resultType="com.itheima.pojo.Setmeal">select*fromt_setmealwhereid=#{id}</select><!--根据套餐id查询与之关联的检查组id--><selectid="findCheckGroupIdsBySetmealId" parameterType="int"resultType="int">selectcheckgroup_idfromt_setmeal_checkgroupwheresetmeal_id=#{setmeal_id}</select>(5)实现持久层查询套餐1.弹出带有套餐数据的编辑套餐对话框任务实现依次启动ZooKeeper服务、health_service_provider和health_backend。在浏览器中访问http://localhost:82/pages/setmeal.html。(6)测试弹出带有套餐数据的编辑套餐对话框1.弹出带有套餐数据的编辑套餐对话框任务实现以编辑套餐编码0005的套餐为例,单击套餐右侧的“编辑”按钮,弹出编辑套餐对话框。(6)测试弹出带有套餐数据的编辑套餐对话框1.弹出带有套餐数据的编辑套餐对话框任务实现在编辑套餐对话框中默认显示的是该套餐的基本信息,单击“检查组信息”,跳转到检查组信息选项卡。(6)测试弹出带有套餐数据的编辑套餐对话框1.弹出带有套餐数据的编辑套餐对话框任务实现为编辑套餐对话框中的“取消”和“确定”按钮绑定单击事件,并设置单击时要执行的操作。<divslot="footer"class="dialog-footer"><el-button@click="dialogFormVisible4Edit=false">取消</el-button><el-buttontype="primary"@click="handleEdit()">确定</el-button></div>2.完成套餐的编辑(1)提交编辑套餐请求任务实现handleEdit(){axios.post("/setmeal/edit.do?checkgroupIds="+this.checkgroupIds,this.formData).then((res)=>{if(res.data.flag){this.dialogFormVisible4Edit=false;//隐藏编辑对话框this.$message({type:'success',message:res.data.message});
this.findPage();//执行分页查询}else{this.$message.error(res.data.message);}});}2.完成套餐的编辑(1)提交编辑套餐请求在setmeal.html页面中定义handleEdit()方法,用于提交套餐请求。任务实现在health_backend子模块的SetmealController类定义edit()方法,用于接收和处理编辑套餐数据的请求。//编辑套餐@RequestMapping("/edit")publicResultedit(@RequestBodySetmealsetmeal,Integer[]checkgroupIds){try{
setmealService.edit(setmeal,checkgroupIds);//调用服务edit()发送请求//调用服务成功,返回编辑成功提示信息returnnewResult(true,MessageConstant.EDIT_SETMEAL_SUCCESS);}catch(Exceptione){e.printStackTrace();//调用服务失败,返回编辑失败提示信息returnnewResult(false,MessageConstant.EDIT_SETMEAL_FAIL);}}2.完成套餐的编辑(2)实现编辑套餐控制器任务实现在health_interface子模块的SetmealService接口中定义edit()方法,用于编辑套餐。//编辑套餐publicvoidedit(Setmealsetmeal,Integer[]checkgroupIds);2.完成套餐的编辑(3)创建编辑套餐服务任务实现在health_service_provider子模块的SetmealServiceImpl类中重写SetmealService接口的edit()方法,用于编辑套餐。//编辑套餐publicvoidedit(Setmealsetmeal,Integer[]checkgroupIds){//编辑套餐基本信息
setmealDao.edit(setmeal);//删除套餐与检查组关联关系setmealDao.deleteAssociation(setmeal.getId());//重新设置套餐对检查组的引用this.setSetmealAndCheckGroup(setmeal.getId(),checkgroupIds);}2.完成套餐的编辑(4)实现编辑套餐服务任务实现在health_service_provider子模块的SetmealDao接口中定义edit()方法和deleteAssociation()方法。//编辑套餐基本信息publicvoidedit(Setmealsetmeal);//删除套餐对检查组的引用publicvoiddeleteAssociation(Integerid);2.完成套餐的编辑(5)实现持久层编辑套餐任务实现在health_service_provider模块的SetmealDao.xml映射文件中使用<update>标签映射修改语句编辑套餐基本信息。<!--编辑检查组基本信息--><updateid="edit"parameterType="com.itheima.pojo.Setmeal">UPDATE
t_setmeal<set><iftest="name!=null">name=#{name},</if>
省略其他字段</set>WHERE
id=#{id}</update>2.完成套餐的编辑(5)实现持久层编辑套餐任务实现在SetmealDao.xml映射文件中使用<delete>元素映射删除语句,删除套餐对检查组的引用。<!--清理套餐和检查组的关联关系--><deleteid="deleteAssociation"parameterType="int">DELETEFROM
t_setmeal_checkgroupWHERE
setmeal_id=#{setmeal_id}</delete>2.完成套餐的编辑(5)实现持久层编辑套餐任务实现2.完成套餐的编辑(6)测试编辑套餐依次启动Zookeeper服务、health_service_provider和health_backend。在浏览器中访问http://localhost:82/pages/setmeal.html。在编辑套餐对话框中,将“适用年龄”修改为“18-56”,将“说明”修改为“需要空腹”。任务实现单击“确定”按钮,提交套餐数据,页面会提示“编辑套餐失败”或“编辑套餐成功”。2.完成套餐的编辑(6)测试编辑套餐删除套餐4-4任务描述套餐管理页面每个套餐右侧都有一个“删除”按钮,单击“删除”按钮提交删除套餐的请求。为了防止误删数据的情况发生,在单击“删除”按钮后弹出提示对话框,让用户确认
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版拆迁安置房产权分割及交易协议4篇
- 专业平面视觉创作协议版
- 2025年度文化展览场地租赁保证金三方执行协议4篇
- 专业树木销售协议2024年版细化范本版A版
- 2025年度高端医疗设备采购合同模板4篇
- 2025年度拆迁项目资金监管与居间服务协议4篇
- 二零二五年度农家乐合伙人合作协议3篇
- 2025年厂区公共区域清洁与物业管理合作协议范本4篇
- 2025年度商业综合体室内外装修一体化合同4篇
- 专业羽毛球场租借合同(2024年)版B版
- 2023社会责任报告培训讲稿
- 2023核电厂常规岛及辅助配套设施建设施工技术规范 第8部分 保温及油漆
- 2025年蛇年春联带横批-蛇年对联大全新春对联集锦
- 表B. 0 .11工程款支付报审表
- 警务航空无人机考试题库及答案
- 空气自动站仪器运营维护项目操作说明以及简单故障处理
- 新生儿窒息复苏正压通气课件
- 法律顾问投标书
- 班主任培训简报4篇(一)
- 成都市数学八年级上册期末试卷含答案
- T-CHSA 020-2023 上颌骨缺损手术功能修复重建的专家共识
评论
0/150
提交评论