JAVA -微信小程序制作日历预约时间功能

实现的是一个微信小程序预约时间功能  ,开始接到这个需求的时候觉得,是写在前端好呢,还是后端,后来我的日历呈现实现方式是放在了后端,因为产品设计的需求呢每次进入预约时间页面,规定都要读一遍后台设置数据,对当前时间于预约时间进行对比判断,确保数据的实时性。

记录下弄完的全过程把 ,我后端使用的是JAVA开发的                           

       

1.建了个POJO类,主要用于返回到前端的数据

public class YuYueVo {
	private int id;//咨询师安排时间id
	private String date;
	private int day;
	private int month;
	private String status;
	private List<TimePart> timeList;
	private int is_display;
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public int getDay() {
		return day;
	}
	public void setDay(int day) {
		this.day = day;
	}
	public int getMonth() {
		return month;
	}
	public void setMonth(int month) {
		this.month = month;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public List<TimePart> getTimeList() {
		return timeList;
	}
	public void setTimeList(List<TimePart> timeList) {
		this.timeList = timeList;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getIs_display() {
		return is_display;
	}
	public void setIs_display(int is_display) {
		this.is_display = is_display;
	}

2.建立了MyCalendar映射的是数据库表

public class MyCalendar implements Serializable{
	
	private static final long serialVersionUID = 1L;
	private String id;
	private String title;		// 事件标题
	private String starttime;		// 事件开始时间
	private String endtime;		// 事件结束时间
	private String adllDay;		// 是否为全天时间
	private String color;		// 时间的背景色
	private int hunterid;
	private int isbook;//0默认未预定,1是已预定
	
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public MyCalendar() {
		super();
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	
	public String getStarttime() {
		return starttime;
	}

	public void setStarttime(String starttime) {
		this.starttime = starttime;
	}

	public String getEndtime() {
		return endtime;
	}

	public void setEndtime(String endtime) {
		this.endtime = endtime;
	}

	public String getAdllDay() {
		return adllDay;
	}

	public void setAdllDay(String adllDay) {
		this.adllDay = adllDay;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public int getHunterid() {
		return hunterid;
	}

	public void setHunterid(int hunterid) {
		this.hunterid = hunterid;
	}

	public int getIsbook() {
		return isbook;
	}

	public void setIsbook(int isbook) {
		this.isbook = isbook;
	}

3.在controller里写了个这个测试的方法

	@RequestMapping(value = "getOrderTime")
	private void testYuYue(HttpServletResponse response,Integer hunterid){
		int monthtmp=0;
		
		Date currDay=new Date();
		int tempNum=DateUtil.getWeekOfDate(currDay);
		Date firstDay=null;
		if(tempNum==0){
			//表示现在是周日,那么第一个时间就是现在
			firstDay=currDay;
		}else{
			firstDay=DateUtil.dateAddDay(-tempNum,currDay);
		}
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
		int tmpMonth = firstDay.getMonth();
		//计算周天开始的第一天
		List<YuYueVo> dataList=new ArrayList<YuYueVo>();
		YuYueVo first=new YuYueVo();
		first.setDate(format.format(firstDay));
		cal.setTime(firstDay);
		first.setDay(cal.get(Calendar.DAY_OF_MONTH));
		first.setMonth(cal.get(Calendar.MONTH));
		first.setIs_display(1);
		first.setStatus("已满");
		dataList.add(first);
		
		
		for(int i=1;i<21;i++){
			Date time =DateUtil.dateAddDay(i,firstDay);
			cal.setTime(time);
			YuYueVo vo=new YuYueVo();
			vo.setDate(format.format(time));
			vo.setDay(cal.get(Calendar.DAY_OF_MONTH));
			vo.setMonth(cal.get(Calendar.MONTH));
			if(tmpMonth!=vo.getMonth()&&monthtmp==0){
				vo.setIs_display(1);
				monthtmp=1;
			}
			List<MyCalendar> myCalendars=myCalendarDAO.getTimePart(hunterid,format.format(time),0);
			List<MyCalendar> booked=myCalendarDAO.getTimePart(hunterid,format.format(time),1);
			if(myCalendars.size()!=0){
				List<TimePart> tmpTime=new ArrayList<TimePart>();
				for (MyCalendar myCalendar : myCalendars) {
					if(DateUtil.compareDate(myCalendar.getStarttime(),DateUtil.currentTime())==1){
						vo.setStatus("未满");
						tmpTime.add(new TimePart(myCalendar.getId(),myCalendar.getStarttime().substring(11, 16),myCalendar.getEndtime().substring(11, 16)));
						vo.setTimeList(tmpTime);
					}else{
						vo.setStatus("已满");
					}
				}
			}else if(booked.size()!=0){
				vo.setStatus("已满");
			}else{
				vo.setStatus("未开放");
			}
			dataList.add(vo);
		}
		this.successJson(dataList, "预约时间", response);
	}

4.小程序端的wxml

   <view>
       <text class="question">咨询方式</text>
    </view>
    <view>
      <radio-group name="checkbox" class="check"  bindchange='clicks'>
        <label class='{{radioCheckVal==0?"is_checked":""}}'>
          <radio hidden='true' value="0" checked='false' />当面咨询
        </label>
        <label class='{{radioCheckVal==1?"is_checked":""}}'>
          <radio hidden='true' value="1" checked='false' />视频语音
        </label>
      </radio-group>
    </view>

    <view style='text-aling:left;margin-top:40rpx;'>
      <text class="question">请选择您预约的时间并完成确认</text>
    </view>
    <view >
        <view class="section" style="margin-top:20rpx;font-size:28rpx;border:0px solid #dcdcdc;line-height:1.3rem;">  
      <!--start time-->
        <div class="week_con">
          <div class="li">星期</div>
          <div class="li">星期</div>
          <div class="li">星期</div>
          <div class="li">星期</div>
          <div class="li">星期</div>
          <div class="li">星期</div>
          <div class="li">星期</div>
        </div>
        <div class="week_con" style="font-weight:bold;">
          <div class="li">日</div>
          <div class="li">一</div>
          <div class="li">二</div>
          <div class="li">三</div>
          <div class="li">四</div>
          <div class="li">五</div>
          <div class="li">六</div>
        </div>
        <radio-group name="checkbox" bindchange='clickOrderTime'>
        <!-- <text class="month">{{month}}月</text> -->
        <div class="time_con">
          <block wx:for="{{datelist}}"  wx:for-index="index"  wx:key="{{item.id}}" >
          <div class="li li_{{index}}" data-id="{{item.id}}">
             <view wx:if="{{item.is_display==1}}"  >
               <text class="month">{{item.month+1}}月</text>
            </view>
            <text class='{{item.date ==  date ? "dateOn" : "day"}}'>{{item.day}}</text>
            <view wx:if="{{item.status=='未满'}}">
              <view  wx:for="{{item.timeList}}" wx:for-index="index"  wx:key="{{item.id}}" data-id="{{item.id}}">
                <label class='{{orderCheckVal==item.id?"ischecked":""}}'>
                    <view class="time_part">
                      <radio hidden='true' value="{{item.id}}" checked='false' /> 
                      <text class="time">{{item.startTime}}</text>
                      <text class="time_gap_line"></text>
                      <text class="time">{{item.endTime}}</text>
                    </view>
                </label>
              </view>
            </view>
            <view wx:if="{{item.status=='已满'}}">
               <text class="status">已满</text>
            </view>
            <view wx:if="{{item.status=='未开放'}}">
               <text class="status">未开放</text>
            </view>
          </div>
          </block>
        </div>
         </radio-group>
      <!--end time-->
        </view>
    </view>

5.wxss样式

/*预约时间表*/
.week_con{width:90%;margin:0 auto;display:block;height:30px;padding:0px;}
.time_con{width:90%;margin:0 auto;display:block;padding:0px;}
.week_con .li{width:14%;text-align:center;display:block;height:30px;float:left;line-height:30px;}
.time_con .li{width:14%;text-align:center;display:block;min-height:90px;float:left;height:auto;}

.time_con .li .day,.time_con .li .status{display:block;height:28px;line-height:28px;}
.time_part{border-radius:2px;border:1px solid #FF0033;display:block;margin:5px;font-size:11px;}
.time_part .time{display:block;color:#FF0033;}
.time_part .time_gap_line{display:block;height:1px;width:50%;margin:0 auto;background:#FF0033;}

.time_con .li .status{background:#E8E8E8;margin:5px;font-size:11px;border-radius:2px;color:#333;}

.li_7,.li_14{clear:both;}

.ischecked .time{display:block;background-color:#FF0033;color: #fff; opacity: 0.4; }
.ischecked .time_gap_line{display:block;height:1px;width:50%;margin:0 auto;background:#fff;}
.ischecked .time_part{border-radius:2px;border:2rpx solid #fff;display:block;margin:5px;font-size:11px;}
.month{
  font-size:20rpx;
  background:#FF0033;
  color:#fff;
  height:25rpx;
  line-height:25rpx;
 float:left;
 position:relative;
}
.dateOn{
  border-radius: 50%;
  background-color: #999;
  color: #fff;
  padding:10rpx;
  height:28px;
  line-height:28px;
}

/*咨询方式*/
.check label {
   border:2rpx solid #FF0033;
}
.check {
  display:flex;
  flex-wrap:wrap;
 
}
.check label {
  width: 120rpx;
  height: 60rpx;
  border-radius: 8rpx;
  display: flex;
  align-items: center;
  margin: 0 10rpx;
  justify-content: center;
  margin-top: 20rpx;
}
.is_checked {
   background-color: red;
   opacity: 0.4;
   color: #fff;
   border: 2rpx solid #fff;
}
.is_checked>checkbox {
  color: red;
}
.ischecked{
   background-color: red;
   opacity: 0.4;
   color: #fff;
}

6.js,就是通过util.post(app.api.getOrderTime)去setdata即可。

以上完成。

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值