package com.ltkj.web.controller.app; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.base.Joiner; import com.ltkj.common.core.controller.BaseController; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.utils.StringUtils; import com.ltkj.framework.config.MatchUtils; import com.ltkj.framework.config.UserHoder; import com.ltkj.hosp.domain.*; import com.ltkj.hosp.service.*; import com.ltkj.mall.domain.MallTimeConfig; import com.ltkj.mall.service.IMallTimeConfigService; import com.ltkj.system.service.ISysConfigService; import com.ltkj.web.config.redis.OrderDelayService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * @Author: 西安路泰科技有限公司 * @Author: 作者: zjh * @Date: 2023/1/30 10:28 */ @RestController @RequestMapping("/cus/reservation") @Api(tags = "小程序-体检预约管理接口") public class ReservationController extends BaseController { @Resource private ITjReservationService reservationService; @Resource private ITjPackageService packageService; @Resource private ITjProjectService projectService; @Resource private ITjPackageProjectService ppservice; @Resource private ITbTransitionService transitionService; @Resource private TjAsyncService asyncService; @Resource private ITjCustomerService customerService; @Autowired private IMallTimeConfigService mallTimeConfigService; @Resource private ISysConfigService configService; @Resource private OrderDelayService delayService; @PostMapping @ApiOperation(value = "个人预约") @Transactional public AjaxResult cusReservation(@RequestBody @ApiParam(value = "体检预约对象") TjReservation tjReservation) { Wxuser wxuser = UserHoder.getWxuser(); if (null == tjReservation) return AjaxResult.error(); if (null == tjReservation.getName()) return AjaxResult.error("姓名不能为空"); if (null == tjReservation.getReservationTime()) return AjaxResult.error("请选择预约时间"); //判断身份证号格式是否正确 if (!(MatchUtils.isMobileNO(tjReservation.getPhoe()))) return AjaxResult.error("手机号错误"); if(tjReservation.getIdCard().length()==18){ if (!MatchUtils.isIdCard(tjReservation.getIdCard())) { return AjaxResult.error("身份证号码错误"); } } if(tjReservation.getIdCard().length()==9){ if (!MatchUtils.cardValidates(tjReservation.getIdCard())) { return AjaxResult.error("身份证号码错误"); } } LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjReservation::getIdCard, tjReservation.getIdCard()); wq.eq(TjReservation::getIsExpire, 2); TjReservation reservation = reservationService.getOne(wq); if (null != reservation) return AjaxResult.success("您已成功预约,无需再约"); try { tjReservation.setBirthday(DateUtil.parse(MatchUtils.getBirthDayByIdCard(tjReservation.getIdCard()), "yyyy-MM-dd")); } catch (Exception e) { e.printStackTrace(); } tjReservation.setSex(MatchUtils.getSexByIdCard(tjReservation.getIdCard())); tjReservation.setAge(String.valueOf(MatchUtils.getAgeByIdCard(tjReservation.getIdCard()))); tjReservation.setIdType("1"); tjReservation.setPayType(0L); tjReservation.setIsExpire(2); tjReservation.setTjType(String.valueOf(2)); tjReservation.setCreateTime(new Date()); tjReservation.setUpdateTime(new Date()); tjReservation.setWechat(String.valueOf(wxuser.getOpenid())); tjReservation.setConnect(String.valueOf(wxuser.getId())); if(null !=tjReservation.getProIdList() && tjReservation.getProIdList().size()>0){ String join = Joiner.on(",").join(tjReservation.getProIdList()); tjReservation.setProIds(join); } if (reservationService.save(tjReservation)) { delayService.reservation(tjReservation.getId()); TjCustomer one = customerService.getOne(new LambdaQueryWrapper().eq(TjCustomer::getCusIdcard,tjReservation.getIdCard())); if(null !=one){ one.setWechat(String.valueOf(wxuser.getId())); one.setConnect(wxuser.getOpenid()); customerService.updateById(one); }else { TjCustomer customer=new TjCustomer(); customer.setCusName(tjReservation.getName()); customer.setCusSex(Long.valueOf(tjReservation.getSex())); customer.setCusBrithday(tjReservation.getBirthday()); customer.setCusAddr(tjReservation.getCusaddr()); customer.setAddr(tjReservation.getAddress()); customer.setCusPhone(tjReservation.getPhoe()); customer.setCusPassword(tjReservation.getIdCard().substring(tjReservation.getIdCard().length() - 6)); customer.setCusEmail(tjReservation.getEmail()); customer.setCusNational(String.valueOf(tjReservation.getNation())); customer.setCusMarryStatus(String.valueOf(tjReservation.getMarriage())); customer.setCusIdcard(tjReservation.getIdCard()); customer.setWechat(String.valueOf(wxuser.getId())); customer.setConnect(wxuser.getOpenid()); customer.setCreateTime(new Date()); customerService.save(customer); } if ((null == tjReservation.getProIdList() || tjReservation.getProIdList().size() == 0) && (null == tjReservation.getPacId())) { transitionService.deletedTbTransitionByCusId(tjReservation.getIdCard()); } if(null !=tjReservation.getPacId()){ asyncService.addRedisTransitionPac(tjReservation.getIdCard(), Long.valueOf(tjReservation.getPacId()),ppservice.getTjPackageProjectListByPacId(tjReservation.getPacId())); } if(null !=tjReservation.getProIdList() && tjReservation.getProIdList().size()>0){ asyncService.addRedisTransitionPro(tjReservation.getIdCard(),tjReservation.getProIdList()); } String isPays = configService.selectConfigByKey("isPay"); if(null !=isPays && isPays.equals("true") ){ //对应预约时间数量减1 final TjReservation byId = reservationService.getById(tjReservation.getId()); final Date reservationTime = byId.getReservationTime(); LambdaQueryWrapper wq111=new LambdaQueryWrapper<>(); wq111.eq(MallTimeConfig::getTime,reservationTime); final MallTimeConfig config = mallTimeConfigService.getOne(wq111); config.setNowNum(config.getNowNum()-1); mallTimeConfigService.updateById(config); } return AjaxResult.success("预约成功!!!",tjReservation.getId()); } return AjaxResult.error("预约失败"); } @DeleteMapping @ApiOperation(value = "撤销个人预约") @Transactional public AjaxResult cusDeletedReservation(@RequestBody TjReservation reservation) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjReservation::getIdCard, reservation.getIdCard()); wq.eq(TjReservation::getIsExpire, 2); TjReservation one = reservationService.getOne(wq); if (null != one) { String isPays = configService.selectConfigByKey("isPay"); if(null !=isPays && isPays.equals("true") ){ //对应预约时间数量+1 final TjReservation byId = reservationService.getById(one.getId()); final Date reservationTime = byId.getReservationTime(); LambdaQueryWrapper wq111=new LambdaQueryWrapper<>(); wq111.eq(MallTimeConfig::getTime,reservationTime); final MallTimeConfig config = mallTimeConfigService.getOne(wq111); config.setNowNum(config.getNowNum()+1); mallTimeConfigService.updateById(config); } transitionService.deletedTbTransitionByCusId(reservation.getIdCard()); reservationService.removeById(one); return AjaxResult.success(); } return AjaxResult.success("暂无预约信息"); } @GetMapping @ApiOperation(value = "查看个人预约") public AjaxResult cusGetReservation() { Wxuser wxuser = UserHoder.getWxuser(); LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjReservation::getConnect, wxuser.getId()); // wq.eq(TjReservation::getIsExpire, 2); wq.eq(TjReservation::getPhoe,wxuser.getPhone()); List reservationList = reservationService.list(wq); if (null != reservationList && reservationList.size()>0) { for (TjReservation one : reservationList) { TjPackage tjPackage = packageService.getById(one.getPacId()); if (null != tjPackage) { LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjPackageProject::getPacId, one.getPacId()); List projectList = ppservice.list(wq1); if (null != projectList && projectList.size() > 0) { List tjProjectList = new ArrayList<>(); for (TjPackageProject packageProject : projectList) { tjProjectList.add(projectService.getById(packageProject.getProId())); } tjPackage.setTjProjectList(tjProjectList); } one.setTjPackage(tjPackage); } if (null != one.getProIds()) { String[] proIds = StringUtils.split(one.getProIds(), ","); if (null != proIds && proIds.length > 0) { List projectList = new ArrayList<>(); for (String proId : proIds) { projectList.add(projectService.getById(proId)); } one.setProjectList(projectList); } } } return AjaxResult.success(reservationList); } return AjaxResult.success("暂无预约信息"); } @PostMapping("/updateReservationTime") @ApiOperation(value = "修改个人预约时间接口") @Transactional public AjaxResult updateReservationTime(@RequestBody @ApiParam(value = "体检预约对象") TjReservation tjReservation) { TjReservation one = reservationService.getById(tjReservation.getId()); if(null !=one && one.getIsExpire().equals(2)){ //原时间段数加1 LambdaQueryWrapper wq111=new LambdaQueryWrapper<>(); wq111.eq(MallTimeConfig::getTime,one.getReservationTime()); final MallTimeConfig config = mallTimeConfigService.getOne(wq111); config.setNowNum(config.getNowNum()+1); mallTimeConfigService.updateById(config); //修改后时间段数-1 LambdaQueryWrapper wq=new LambdaQueryWrapper<>(); wq.eq(MallTimeConfig::getTime,tjReservation.getReservationTime()); final MallTimeConfig config1 = mallTimeConfigService.getOne(wq); config1.setNowNum(config1.getNowNum()-1); mallTimeConfigService.updateById(config1); one.setReservationTime(tjReservation.getReservationTime()); reservationService.updateById(one); return AjaxResult.success("操作成功"); } return AjaxResult.error("预约不存在或已超时 不可修改!"); } @GetMapping("/cusGetHistryReservation") @ApiOperation(value = "查看个人历史预约") public AjaxResult cusGetHistryReservation() { Wxuser wxuser = UserHoder.getWxuser(); LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjReservation::getConnect, wxuser.getId()); wq.eq(TjReservation::getPhoe,wxuser.getPhone()); wq.orderByDesc(TjReservation::getCreateTime); List reservationList = reservationService.list(wq); if (null != reservationList && reservationList.size() > 0) { for (TjReservation one : reservationList) { TjPackage tjPackage = packageService.getById(one.getPacId()); if (null != tjPackage) { LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjPackageProject::getPacId, one.getPacId()); List projectList = ppservice.list(wq1); if (null != projectList && projectList.size() > 0) { List tjProjectList = new ArrayList<>(); for (TjPackageProject packageProject : projectList) { tjProjectList.add(projectService.getById(packageProject.getProId())); } tjPackage.setTjProjectList(tjProjectList); } one.setTjPackage(tjPackage); } if (null != one.getProIds()) { String[] proIds = StringUtils.split(one.getProIds(), ","); if (null != proIds && proIds.length > 0) { List projectList = new ArrayList<>(); for (String proId : proIds) { projectList.add(projectService.getById(proId)); } one.setProjectList(projectList); } } //预约时间 Date reservationTime = one.getReservationTime(); //计算 截止时间 往后推24小时 Calendar calendar = Calendar.getInstance(); //得到日历 calendar.setTime(reservationTime);//把预约时间赋给日历 calendar.add(Calendar.DAY_OF_MONTH, 1); //设置为后一天 Date tomorrow = calendar.getTime(); //得到后一天的时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式 String format = sdf.format(tomorrow); } return AjaxResult.success(reservationList); } return AjaxResult.success("暂无预约信息"); } @GetMapping("/getReservationByIdCard") @ApiOperation(value = "根据身份证号查看预约信息") public AjaxResult getReservationByIdCard(@RequestParam @ApiParam(value = "身份证号") String idCard) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjReservation::getIdCard,idCard); wq.orderByDesc(TjReservation::getCreateTime); TjReservation one = reservationService.list(wq).get(0); if (null != one) { // for (TjReservation one : reservationList) { TjPackage tjPackage = packageService.getById(one.getPacId()); if (null != tjPackage) { LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjPackageProject::getPacId, one.getPacId()); List projectList = ppservice.list(wq1); if (null != projectList && projectList.size() > 0) { List tjProjectList = new ArrayList<>(); for (TjPackageProject packageProject : projectList) { tjProjectList.add(projectService.getById(packageProject.getProId())); } tjPackage.setTjProjectList(tjProjectList); } one.setTjPackage(tjPackage); } if (null != one.getProIds()) { String[] proIds = StringUtils.split(one.getProIds(), ","); if (null != proIds && proIds.length > 0) { List projectList = new ArrayList<>(); for (String proId : proIds) { projectList.add(projectService.getById(proId)); } one.setProjectList(projectList); } } // } return AjaxResult.success(one); } return AjaxResult.success("暂无预约信息"); } }