当前位置: 首页 > news >正文

韩都衣舍网站建设的改进徐州专业制作网站

韩都衣舍网站建设的改进,徐州专业制作网站,wordpress function.php 在哪里,网站流量好难做文章目录 前言一、遇到的问题二、实现过程1.数据库设计2.实体类3.医生添加排班或修改排班方法4.患者预约方法5.患者修改预约6.患者取消预约 前言 该文章从实际需求出发#xff0c;实现医生设置自身排班与患者预约功能。 一、遇到的问题 1、医生设置的排班表不能有时间上的冲… 文章目录 前言一、遇到的问题二、实现过程1.数据库设计2.实体类3.医生添加排班或修改排班方法4.患者预约方法5.患者修改预约6.患者取消预约 前言 该文章从实际需求出发实现医生设置自身排班与患者预约功能。 一、遇到的问题 1、医生设置的排班表不能有时间上的冲突。 2、医生修改自己的排班时不能与数据库中的数据冲突。 3、如果多为患者同时预约需要使用redis做支撑解决并发问题。 二、实现过程 1.数据库设计 可根据实际需求添加或删除字段 排班数据库 rqri_guidance_time 字段名字段类型长度注释guidance_time_idint11排班IDdatedate日期starttimetime开始时间点endtimetime结束时间点numint2可预约次数residueint2剩余可预约次数doctor_idint11医生ID 预约详情表 rqri_guidance_time_relation 字段名字段类型长度注释reservation_idint11预约关系IDguidance_time_idint11排班IDpatient_idint11患者IDremarkstext病情描述file_idvarchar256附件IDreservation_typeint11预约类型IDdoctor_idint11医生IDreplytext回复reply_files_idvarchar256回复附件IDstatusint1状态IDisfinishint1是否已完成咨询finish_timedatetime完成咨询的时间create_timedatetime创建时间 2.实体类 Table(name rqri_guidance_time) Data public class RqriGuidanceTime implements Serializable {/*** 医生可预约时间id*/IdGeneratedValue(strategy GenerationType.IDENTITY)ApiModelProperty(value 医生可预约时间id, required false, dataType Integer)Column(name guidance_time_id)private Integer guidanceTimeId;/*** 日期*/ApiModelProperty(value 日期, required true, dataType Date)Column(name date)JsonFormat(localezh, timezoneGMT8, patternyyyy-MM-dd)private Date date;/*** 开始时间点*/ApiModelProperty(value 开始时间点, required true, dataType Date)Column(name starttime)JsonFormat(localezh, timezoneGMT8, patternHH:mm)private Date starttime;/*** 结束时间点*/ApiModelProperty(value 结束时间点, required true, dataType Date)Column(name endtime)JsonFormat(localezh, timezoneGMT8, patternHH:mm)private Date endtime;/*** 可预约次数*/ApiModelProperty(value 可预约次数, required true, dataType Integer)Column(name num)private Integer num;/*** 剩余可预约次数*/ApiModelProperty(value 剩余可预约次数, required true, dataType Integer)Column(name residue)private Integer residue;/*** 医生id*/ApiModelProperty(value 医生id, required true, dataType Integer)Column(name doctor_id)private Integer doctorId;Table(name rqri_guidance_time_relation) Data public class RqriGuidanceTimeRelation implements Serializable {/*** 预约关系id*/IdGeneratedValue(strategy GenerationType.IDENTITY)ApiModelProperty(value 预约关系id, required false, dataType Integer)Column(name reservation_id)private Integer reservationId;/*** 预约时段id*/ApiModelProperty(value 预约时段id, required true, dataType Integer)Column(name guidance_time_id)private Integer guidanceTimeId;/*** 患者id*/ApiModelProperty(value 患者id, required true, dataType Integer)Column(name patient_id)private Integer patientId;/*** 描述*/ApiModelProperty(value 描述, required false, dataType String)Column(name remarks)private String remarks;/*** 附件id*/ApiModelProperty(value 附件id, required false, dataType String)Column(name file_id)private String fileId;/*** 预约类型*/ApiModelProperty(value 预约类型, required true, dataType Integer)Column(name reservation_type)private Integer reservationType;/*** 医生id*/ApiModelProperty(value 医生id, required false, dataType Integer)Column(name doctor_id)private Integer doctorId;/*** 回复*/ApiModelProperty(value 回复, required false, dataType String)Column(name reply)private String reply;/*** 回复附件*/ApiModelProperty(value 回复附件, required false, dataType String)Column(name reply_files_id)private String replyFilesId;/*** 状态*/ApiModelProperty(value 状态, required false, dataType Integer)Column(name work_status)private Integer workStatus;/*** 是否已完成咨询1是0否*/ApiModelProperty(value 是否已完成咨询1是0否, required false, dataType Integer)Column(name isfinish)private Integer isfinish;/*** 完成咨询的时间*/ApiModelProperty(value 完成咨询的时间, required false, dataType Date)Column(name finish_time)private Date finishTime;/*** 创建时间*/ApiModelProperty(value 创建时间, required false, dataType Date)Column(name create_time)private Date createTime;3.医生添加排班或修改排班方法 public void addOrUpdateList(ListRqriGuidanceTime list) {// 查询数据库中已有排班SimpleDateFormat simpleDateFormat1 new SimpleDateFormat(HH:mm);SimpleDateFormat simpleDateFormat new SimpleDateFormat(yyyy-MM-dd);ArrayListString collect new ArrayList();for (RqriGuidanceTime rqriGuidanceTime : list) {collect.add(simpleDateFormat.format(rqriGuidanceTime.getDate()));}ListString list_date collect.stream().distinct().collect(Collectors.toList());ListRqriGuidanceTime rqriGuidanceTimes rqriGuidanceTimeMapper.selectByDateList(list_date);// 已有的排班与修改的排班HashMapString, ListRqriGuidanceTime hashMap_update new HashMap();for (String item : list_date) {ArrayListRqriGuidanceTime list_update new ArrayList();// 添加已有排班for (int j 0; j rqriGuidanceTimes.size(); j) {if (simpleDateFormat.format(rqriGuidanceTimes.get(j).getDate()).equals(item)) {list_update.add(rqriGuidanceTimes.get(j));}}// 修改已有排班for (RqriGuidanceTime rqriGuidanceTime : list) {if (simpleDateFormat.format(rqriGuidanceTime.getDate()).equals(item) rqriGuidanceTime.getGuidanceTimeId() ! null) {for (int k 0; k list_update.size(); k) {if (rqriGuidanceTime.getGuidanceTimeId().equals(list_update.get(k).getGuidanceTimeId())) {// 是否被预约if (!Objects.equals(list_update.get(k).getNum(), list_update.get(k).getResidue())) {String format simpleDateFormat1.format(rqriGuidanceTime.getStarttime());String format1 simpleDateFormat1.format(rqriGuidanceTime.getEndtime());throw new Exception(该时间点已被预约不可修改错误时间点 item , format - format1);} else {list_update.set(k, rqriGuidanceTime);}}}}}hashMap_update.put(item, list_update);}// 新增的排班HashMapString, ListRqriGuidanceTime hashMap_add new HashMap();for (String value : list_date) {ArrayListRqriGuidanceTime list_add new ArrayList();for (RqriGuidanceTime rqriGuidanceTime : list) {if (simpleDateFormat.format(rqriGuidanceTime.getDate()).equals(value) rqriGuidanceTime.getGuidanceTimeId() null) {list_add.add(rqriGuidanceTime);}}hashMap_add.put(value, list_add);}// 校验SimpleDateFormat sdf new SimpleDateFormat(HH:mm);for (String s : list_date) {ListInteger list_standard Arrays.asList(new Integer[2400]);for (int j 0; j 2400; j) {list_standard.set(j, 1); // 1 表示可以选}// 已有的排班与修改的排班ListRqriGuidanceTime rqriGuidanceTimes_update hashMap_update.get(s);for (RqriGuidanceTime guidanceTime : rqriGuidanceTimes_update) {String starttime sdf.format(guidanceTime.getStarttime());String endtime sdf.format(guidanceTime.getEndtime());int start Integer.parseInt(starttime.replace(:, ));int end Integer.parseInt(endtime.replace(:, ));if (!(start end)) {throw new Exception(时间设置错误错误时间点 s , starttime - endtime);}for (int k start 1; k end; k) {if (list_standard.get(k) 0) {throw new Exception(该时间与其他时间点冲突错误时间点 s , starttime - endtime);} else {list_standard.set(k, 0);}}}// 新增的排班ListRqriGuidanceTime rqriGuidanceTimes_add hashMap_add.get(s);for (RqriGuidanceTime rqriGuidanceTime : rqriGuidanceTimes_add) {String starttime sdf.format(rqriGuidanceTime.getStarttime());String endtime sdf.format(rqriGuidanceTime.getEndtime());int start Integer.parseInt(starttime.replace(:, ));int end Integer.parseInt(endtime.replace(:, ));if (!(start end)) {throw new Exception(时间设置错误错误时间点 s , starttime - endtime);}for (int k start 1; k end; k) {if (list_standard.get(k) 0) {throw new Exception(该时间与其他时间点冲突错误时间点 s , starttime - endtime);} else {list_standard.set(k, 0);}}}}ArrayListRqriGuidanceTime list_update new ArrayList();for (ListRqriGuidanceTime update : hashMap_update.values()) {list_update.addAll(update);}for (RqriGuidanceTime rqriGuidanceTime : list_update) {rqriGuidanceTime.setResidue(rqriGuidanceTime.getNum());rqriGuidanceTimeMapper.updateByPrimaryKey(rqriGuidanceTime);//插入到redisresidueAddRedis(rqriGuidanceTime.getDate(), rqriGuidanceTime.getGuidanceTimeId().toString(), rqriGuidanceTime.getResidue());}ArrayListRqriGuidanceTime list_add new ArrayList();for (ListRqriGuidanceTime add : hashMap_add.values()) {list_add.addAll(add);}for (RqriGuidanceTime rqriGuidanceTime : list_add) {rqriGuidanceTime.setResidue(rqriGuidanceTime.getNum());}if (list_add.size() 0) {rqriGuidanceTimeMapper.insertList(list_add);for (RqriGuidanceTime guidanceTime : list_add) {//插入到redisresidueAddRedis(guidanceTime.getDate(), guidanceTime.getGuidanceTimeId().toString(), guidanceTime.getResidue());}}}private static final String RESERVATION RESERVATION_;private void residueAddRedis(Date date, String guidanceTimeId, Integer residue) {SimpleDateFormat dateFormat new SimpleDateFormat(yyyy-MM-dd);// 将 Date 对象转换为字符串String[] split dateFormat.format(date).split(-);int year Integer.parseInt(split[0]);int month Integer.parseInt(split[1]);int day Integer.parseInt(split[2]);// 获取当前日期和时间LocalDateTime now LocalDateTime.now();// 获取过期日期LocalDateTime endDate LocalDateTime.of(year, month, day, 0, 0, 0, 0);// 计算当前日期和时间到过期日期开始时间的时间差Duration duration Duration.between(now, endDate);//过期时间秒long seconds duration.getSeconds();//初始化到redisredisUtils.set(RESERVATION guidanceTimeId, residue, seconds);} 4.患者预约方法 public void save(RqriGuidanceTimeRelation rqriGuidanceTimeRelation) {boolean b reservationService.makeReservation(rqriGuidanceTimeRelation.getGuidanceTimeId());if (!b) {throw new BusinessException(该时段已无预约次数);}RqriGuidanceTime rqriGuidanceTime rqriGuidanceTimelMapper.selectByPrimaryKey(rqriGuidanceTimeRelation.getGuidanceTimeId());Integer residue rqriGuidanceTime.getResidue();// 可预约次数减1rqriGuidanceTime.setResidue(residue - 1);rqriGuidanceTimelMapper.updateByPrimaryKey(rqriGuidanceTime);Integer guidanceTimeId rqriGuidanceTime.getGuidanceTimeId();redisUtils.decr(RESERVATION guidanceTimeId, 1);// 添加预约信息rqriGuidanceTimeRelation.setIsfinish(0);rqriGuidanceTimeRelation.setCreateTime(new Date());rqriGuidanceTimeRelationMapper.insertSelective(rqriGuidanceTimeRelation);}public boolean makeReservation(Integer guidanceTimeId) {String key RESERVATION guidanceTimeId.toString();// 获取 Redisson 的分布式锁RLock lock redissonClient.getLock(RESERVATION_LOCK);try {// 尝试获取锁lock.lock();// 使用 Redis 的原子操作来减少可预约数量Long availableTickets redisTemplate.opsForValue().decrement(key);if (availableTickets 0) {// 预约已满预约失败需要将可预约数量还原redisTemplate.opsForValue().increment(key);return false;}// 预约成功return true;} finally {// 释放锁lock.unlock();}}5.患者修改预约 public void update(Integer reservationId, Integer guidanceTimeId) {//判断新的预约是否有次数可以 有的话 - 1boolean b reservationService.makeReservation(guidanceTimeId);if (!b) {throw new Exception(该时段已无预约次数);}//查询新的时段是RqriGuidanceTime newGuidanceTime rqriGuidanceTimelMapper.selectByPrimaryKey(guidanceTimeId); // Integer residue newGuidanceTime.getResidue(); // if (residue 0) { // throw new Exception(该时段已无预约次数); // }//根据预约信息id 查询原预约时段idRqriGuidanceTimeRelation rqriGuidanceTimeRelation rqriGuidanceTimeRelationMapper.selectByPrimaryKey(reservationId);//根据原预约时段id获取原预约时段数据RqriGuidanceTime old rqriGuidanceTimelMapper.selectByPrimaryKey(rqriGuidanceTimeRelation.getGuidanceTimeId());//原预约时段次数 1redisUtils.incr(RESERVATION old.getGuidanceTimeId(), 1);old.setResidue(old.getResidue() 1);//更新原时段rqriGuidanceTimelMapper.updateByPrimaryKey(old);//新预约时段剩余次数-1newGuidanceTime.setResidue(newGuidanceTime.getResidue() - 1);rqriGuidanceTimelMapper.updateByPrimaryKey(newGuidanceTime);//更新预约详情rqriGuidanceTimeRelation.setGuidanceTimeId(guidanceTimeId);rqriGuidanceTimeRelationMapper.updateByPrimaryKey(rqriGuidanceTimeRelation);} 6.患者取消预约 public void delete(RqriGuidanceTimeRelation rqriGuidanceTimeRelation) throws ParseException {RqriGuidanceTime rqriGuidanceTime rqriGuidanceTimelMapper.selectByPrimaryKey(rqriGuidanceTimeRelation.getGuidanceTimeId());rqriGuidanceTime.setResidue(rqriGuidanceTime.getResidue() 1);rqriGuidanceTimelMapper.updateByPrimaryKey(rqriGuidanceTime);rqriGuidanceTimeRelationMapper.delete(rqriGuidanceTimeRelation);redisUtils.incr(RESERVATION rqriGuidanceTimeRelation.getGuidanceTimeId(), 1);}
http://www.dnsts.com.cn/news/187815.html

相关文章:

  • 如何用快站做pc端网站中国建设银行春招网站
  • 小程序开发 网站建设如何让网站火起来
  • 做网站 工商 非法经营百度视频下载
  • 网站建设教程在线观看wordpress建站方法
  • 网站建站怎么分前端和后端中山网站建设文化效果
  • 东莞建站公司速推全网天下首选长沙网页设计培训价格
  • 有关小城镇建设网站域名查询ip地址138
  • 个人做视频网站烧钱极捷号网站建设
  • 湖南智能网站建设公司wordpress文章编辑器可视化
  • 博客网站怎么建设商标注册45类明细
  • 广州网站开发定制深圳网站seo哪家快
  • 高唐住房建设局网站网站备案归
  • 企业网站每年要多少钱互联网网站备案流程
  • 建筑师网站做网站关键词
  • 福州网站设计要多少钱产品经理培训哪个机构好
  • 青海住房和建设厅网站佛山专业建设网站平台
  • 赣州网上注册公司网站论坛类网站设计
  • 淘客单网站南昌网站建设优化
  • 湛江建站公司模板建设银行储蓄卡申请网站
  • 站长网seo综合查询工具西安营销网站建设公司
  • 电脑打不开建设银行网站做食品企业网站的费用
  • 灵璧县建设局网站珠海企业营销型网站建设公司
  • 营销型公司网站建设网站开发用px还是rem
  • 网站建设过程中应该注意的事项有wordpress 统计插件
  • wordpress托管建站河南衣柜网站建设公司
  • wordpress网站刷新专业东莞网站制作公司
  • 石家庄微网站免费搭建网站 优帮云
  • 哈尔滨网站建设哪家好而且价格不贵企业网站建设运营方案
  • 网站设计案例欣赏中国互联网协会理事长级别
  • 深圳做网站的公司凡客达人的运作模式