传智健康[七]

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 关于传智健康的相关知识

(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);
    }













相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
SQL 前端开发 数据库
|
SQL JSON 前端开发
|
SQL 前端开发 数据可视化
|
XML 缓存 Java
传智健康day07 页面静态化
传智健康day07 页面静态化
传智健康day07 页面静态化
|
SQL 前端开发 JavaScript
传智健康day03 预约管理-检查组管理1
传智健康day03 预约管理-检查组管理1
传智健康day03 预约管理-检查组管理1
|
移动开发 Dubbo Java
传智健康day06 移动端开发-体检预约1
传智健康day06 移动端开发-体检预约1
传智健康day06 移动端开发-体检预约1
|
运维 监控 Java
传智健康day06 移动端开发-体检预约2
传智健康day06 移动端开发-体检预约2
传智健康day06 移动端开发-体检预约2
传智健康[三]
关于传智健康[的相关知识
177 0
传智健康[三]
|
移动开发 数据可视化 Java
传智健康[一]
有关传智健康相关知识
324 0
传智健康[一]
|
Java Maven Spring
传智健康[六]
关于传智健康的相关知识
164 0
传智健康[六]