传智健康[七]

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 关于传智健康的相关知识

(4).预约管理

①. 当前台需要的数据格式和对象不一致时,我们可以用Map来接收。

20191021102439562.png

20191021103141900.png

②.在Service中传入map作为参数,在dao中parameterType可以使用其子类hashmap 来接收

20191021103354275.png

③. 如果想要传入两个或更多的参数去mapper,我们可以使用map进行传入

20191022154632286.png

①. 批量导入预约设置信息

为什么在service根据日期进行判断是修改还是新增?

如果我们导入两个一样的数据,如果不进行判断,相同的数据会插入两次
  思路:
  1.点击模板下载按钮下载Excel模板文件
  2.将预约设置信息录入到模板文件中
  3.点击上传文件按钮将录入完信息的模板文件上传到服务器
  4.通过POI读取上传文件的数据并保存到数据库
后台:
   1.controller
     1.1 利用POI将文件导入,返回一个List<String[]>
     1.2 创建一个List<OrderSetting>
     1.3 将List<String[]>数据存入List<OrderSetting>集合中
     1.4 将List<OrderSetting>传入service
   2.service
     2.1 对List<OrderSetting> 集合进行判断并循环
     2.2 通过日期查询数据库是否有这条记录
         如果有,则进行修改操作
         如果没有,则进行新增操作
   3.dao


后台代码实现:

1.controller

2019102110035367.png

2.service

20191021100332960.png

3.dao

20191021100429243.png

②.日历展示预约设置

后台:前台需要传入一个data=2019-6
  1.controller:将data数据传入service中,返回一个List<Map>
  2.service:
     2.1 将传入参数data 分别加上 begin="-01" | end="-31" 将bengin|end 封装到map传入dao
     2.2 返回一个List<对象>
     2.3 拿到前台想要的数据类型List<Map>
  3.dao   

步骤:

1.controller

20191021104631722.png

2.service

20191021105009598.png

3.dao

20191021105022598.png

③. 基于日历实现预约设置

  • 为什么要在service进行判断?

20191021110414859.png


前台:需要传入orderDate和num(预约人数)
  1.controller: 将OrderSetting对象作为参数传入service
  2.service:(根据日期查看数据库中是否有这条记录)
       如果有,进行修改操作
       如果没有,进行新增操作

后台代码实现:

1.controller

20191021110017331.png

2.service

20191021110052636.png

3.dao

20191021110123914.png

(5).体检预约

  • ①. 怎么获取参数url中参数的id?


//获取指定的URL参数值 http://localhost/pages/setmeal_detail.html?id=3&name=jack
function getUrlParam(paraName) {
    var url = document.location.toString();
    alert(url);//http://localhost/pages/setmeal_detail.html?id=3&name=jack
    var arrObj = url.split("?");//id=3&name=jack
    if (arrObj.length > 1) {
        var arrPara = arrObj[1].split("&");
        var arr;
        for (var i = 0; i < arrPara.length; i++) {
            arr = arrPara[i].split("=");
            if (arr != null && arr[0] == paraName) {
                return arr[1];
            }
        }
        return "";
    }
    else {
        return "";
    }
}

①. 套餐列表页面动态展示

  思路:查询所有的套餐列表

②. 套餐详情页面动态展示

20191022191802623.png

  • ①. 套餐Mapper
    <resultMap id="baseResultMap" type="com.itheima.pojo.Setmeal">
        <id column="id" property="id"/> <result column="name" property="name"/>
        <result column="code" property="code"/>
        <result column="helpCode" property="helpCode"/>
        <result column="sex" property="sex"/>
        <result column="age" property="age"/>
        <result column="price" property="price"/>
        <result column="remark" property="remark"/>
        <result column="attention" property="attention"/>
        <result column="img" property="img"/>
    </resultMap>
    <resultMap id="findByIdResultMap"
               type="com.itheima.pojo.Setmeal"
               extends="baseResultMap">
        <!--套餐和检查组之间多对多-->
      <!--  select * from t_setmeal where id=#{id}
      column="id" 这个id就是select*from t...查询出来的id字段名-->
        <collection property="checkGroups"
                    ofType="com.itheima.pojo.CheckGroup"
                    select="com.itheima.dao.CheckGroupDao.findCheckGroupById"
                    column="id">
        </collection>
    </resultMap>
    <!--根据套餐id查询套餐详情、检查组、检查项信息-->
    <select id="findById" resultMap="findByIdResultMap" parameterType="int">
        select * from t_setmeal where id=#{id}
    </select>
  • ③.检查项
    <!--关联查询
    根据检查组id来查询关联的检查项
    -->
    <select id="findCheckItemById" parameterType="int" 
    resultType="com.itheima.pojo.CheckItem">
    select * from t_checkitem where id in (select checkitem_id from 
    t_checkgroup_checkitem where checkgroup_id=#{id})
    </select>


day07 体检预约 重点

知识点小结:
    集合: CollectionUtils.isNotEmpty()
    字符串:StringUtils.equals(validateCodeInRedis,validateCode)

20191025164054452.png


①. 发送短信验证

1>. 手机号校验

  • ①. 手机校验前台代码
  1.检查手机号是否合法
  2.倒计时30s倒计时
  3.发送ajax请求,为用发送手机验证码
    //发送验证码
    sendValidateCode(){
        //获取用户输入的手机号this.orderInfo.telephone
        //1.调用checkTelephone()看手机号是否合法
        /**
         * 手机号校验
         1--以1为开头;
         2--第二位可为3,4,5,7,8,中的任意一位;
         3--最后以0-9的9个整数结尾。
         */
        var reg=/^[1][3,4,5,7,8][0-9]{9}$/;
        if (!reg.test(this.orderInfo.telephone)) {
            return false;
        }
        //2.倒计时
        var num1=30;
        var clock1;//定时器变量
        var validateCodeButton1=document.getElementById("validateCodeButton");
        function doLoop1(){
           num1--;
           if(num1>0){
               validateCodeButton1.disabled=true;
                   validateCodeButton1.value=num1+"秒后重新获取";
           }else{
               validateCodeButton1.disabled=false;
               validateCodeButton1.value="重新获取验证码";
               window.clearInterval(clock1);
               num1=30;
           }
        }
        //校验通过,30s倒计时
        clock1= window.setInterval(doLoop1,1000);//定时器方法,每隔指定时间,调用指定方法
        //3.发送ajax请求,为用发送手机验证码
        axios.post("/validateCode/send4Order.do?telephone="+this.orderInfo.telephone)
            .then((res)=>{
                 if(!res.data.flag){
                 //短信验证码发送失败
                     this.$message.error(res.data.message);
                 }
            });
    },
  • ②. 发送短信后台代码
  思想: 
   1.通过阿里短信服务发送短信
   2.如果失败,则给出相对应的错误信息
   3.如果成功,则将短信存入redis
    //用户在线体检预约发送验证码
    @RequestMapping("/send4Order")
    public Result send4Order(String telephone){
        //随机生成4位数字验证码
        Integer validateCode = ValidateCodeUtils.generateValidateCode(4);
        try {
            //给我们用户发送验证码
            SMSUtils.sendShortMessage(SMSUtils.VALIDATE_CODE,telephone,validateCode+"");
        } catch (ClientException e) {
            e.printStackTrace();
            return  new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }
        //将验证码保存到redis(5分钟) 18774149736001
        jedisPool.getResource().setex(telephone+ RedisMessageConstant.SENDTYPE_ORDER,300,validateCode.toString());
        return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
    }













相关文章
|
10月前
|
人工智能 Java 新能源
我的2024总结 | 降薪优化、焦虑生病、读书写作、逆势成长
本文回顾了作者在2024年的经历与感悟,涵盖了职业发展、健康管理、读书写作等多个方面。面对工作压力和身体不适的双重挑战,作者通过阅读心理学书籍找到了应对焦虑的方法,并坚持写作分享,逐步实现自我救赎与成长。展望2025,作者强调“知行合一”,希望通过持续努力突破困境,迎接新的开始。文中还推荐了几本有助于个人成长的书籍,如《正面管教》和《被讨厌的勇气》,鼓励读者共同进步,健康顺利地度过新的一年。
|
11月前
|
搜索推荐 数据挖掘 双11
淘宝运营进阶秘籍:从业余到专业
淘宝运营涉及市场分析、产品定位、店铺装修、营销推广、客户服务、数据分析等多环节。要脱颖而出,需掌握进阶秘籍。本文从精准定位、店铺装修、定价策略、流量获取、客户服务、数据分析及跨平台合作七大方面深入探讨,助商家实现从平凡到卓越的蜕变。通过目标受众分析、优化店铺形象、合理定价、多种促销手段、提升客户体验、利用数据反馈调整策略以及拓展销售渠道,商家可逐步提升运营能力,在竞争激烈的电商环境中取得成功。
1398 4
|
7月前
|
前端开发 JavaScript API
Webview+Python:用HTML打造跨平台桌面应用的创新方案
本文系统介绍了使用PyWebView库结合HTML/CSS/JavaScript开发跨平台桌面应用的方法。相比传统方案(如PyQt、Tkinter),PyWebView具备开发效率高、界面美观、资源占用低等优势。文章从技术原理、环境搭建、核心功能实现到性能优化与实战案例全面展开,涵盖窗口管理、双向通信、系统集成等功能,并通过“智能文件管理器”案例展示实际应用。适合希望快速构建跨平台桌面应用的Python开发者参考学习。
781 1
|
7月前
|
运维 算法 安全
OSI 数据链路层详解
本文介绍了MAC地址的基本概念、结构及其在网络通信中的作用,同时详细解析了以太网帧的组成部分,包括前导码、目的地址、源地址、类型、数据和FCS等字段的功能与意义。此外,还阐述了CSMA/CD原理,涵盖载波监听、多路访问、冲突检测及冲突处理机制,帮助理解以太网在共享介质环境下的数据传输过程。
310 4
|
9月前
|
人工智能 Java 云计算
Salesforce X 阿里云:加速中国市场合作!
Salesforce X 阿里云:加速中国市场合作!
450 13
|
弹性计算 分布式计算 DataWorks
MaxCompute操作报错合集之运行pyodps报错超时,该如何排查
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
242 6
|
SQL 存储 运维
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。由于内容丰富,本文中篇内容分享 Flink SQL 作业大状态导致反压的调优原理与方法。
70181 8
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
安全
HashMap 和 HashTable 的区别
HashMap 和 HashTable 的区别
712 0