zjh
2024-06-26 ec2bb08f0aad10bbf1f133046d8e9943be3a6d72
ltkj-admin/src/main/java/com/ltkj/web/controller/app/ReservationController.java
@@ -1,11 +1,14 @@
package com.ltkj.web.controller.app;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
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.task.TaskService;
import com.ltkj.common.utils.StringUtils;
import com.ltkj.framework.config.MatchUtils;
import com.ltkj.framework.config.UserHoder;
@@ -15,6 +18,8 @@
import com.ltkj.mall.service.IMallTimeConfigService;
import com.ltkj.system.service.ISysConfigService;
import com.ltkj.web.config.redis.OrderDelayService;
import com.ltkj.web.config.task.TjReservationTask;
import com.ltkj.web.wxUtils.WxUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -24,10 +29,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * @Author: 西安路泰科技有限公司
@@ -56,8 +58,18 @@
    private IMallTimeConfigService mallTimeConfigService;
    @Resource
    private ISysConfigService configService;
    @Resource
    private OrderDelayService delayService;
    //    @Resource
//    private OrderDelayService delayService;
    @Autowired
    private TaskService taskService;
    @GetMapping("/isStartYy")
    @ApiOperation(value = "查询预约功能是否开启")
    public AjaxResult isStartYy() {
        String isStartYy = configService.selectConfigByKey("is_start_yy");
        return AjaxResult.success(isStartYy);
    }
    @PostMapping
    @ApiOperation(value = "个人预约")
@@ -71,12 +83,12 @@
        if (!(MatchUtils.isMobileNO(tjReservation.getPhoe())))
            return AjaxResult.error("手机号错误");
        if(tjReservation.getIdCard().length()==18){
        if (tjReservation.getIdCard().length() == 18) {
            if (!MatchUtils.isIdCard(tjReservation.getIdCard())) {
                return AjaxResult.error("身份证号码错误");
            }
        }
        if(tjReservation.getIdCard().length()==9){
        if (tjReservation.getIdCard().length() == 9) {
            if (!MatchUtils.cardValidates(tjReservation.getIdCard())) {
                return AjaxResult.error("身份证号码错误");
            }
@@ -101,20 +113,22 @@
        tjReservation.setUpdateTime(new Date());
        tjReservation.setWechat(String.valueOf(wxuser.getOpenid()));
        tjReservation.setConnect(String.valueOf(wxuser.getId()));
        if(null !=tjReservation.getProIdList() && tjReservation.getProIdList().size()>0){
        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<TjCustomer>().eq(TjCustomer::getCusIdcard,tjReservation.getIdCard()));
            if(null !=one){
            taskService.addTask(new TjReservationTask(tjReservation.getId(),
                    DateUtil.between(new Date(), DateUtil.endOfDay(tjReservation.getReservationTime()), DateUnit.MS)));
            TjCustomer one = customerService.getOne(new LambdaQueryWrapper<TjCustomer>().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();
            } else {
                TjCustomer customer = new TjCustomer();
                customer.setCusName(tjReservation.getName());
                customer.setCusSex(Long.valueOf(tjReservation.getSex()));
                customer.setCusBrithday(tjReservation.getBirthday());
@@ -134,26 +148,67 @@
            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.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());
            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") ){
            if (null != isPays && isPays.equals("true")) {
                //对应预约时间数量减1
                final TjReservation byId = reservationService.getById(tjReservation.getId());
                final Date reservationTime = byId.getReservationTime();
                LambdaQueryWrapper<MallTimeConfig> wq111=new LambdaQueryWrapper<>();
                wq111.eq(MallTimeConfig::getTime,reservationTime);
                LambdaQueryWrapper<MallTimeConfig> wq111 = new LambdaQueryWrapper<>();
                wq111.eq(MallTimeConfig::getTime, reservationTime);
                final MallTimeConfig config = mallTimeConfigService.getOne(wq111);
                config.setNowNum(config.getNowNum()-1);
                config.setNowNum(config.getNowNum() - 1);
                mallTimeConfigService.updateById(config);
            }
            return AjaxResult.success("预约成功!!!",tjReservation.getId());
            //发订单信息给wx订阅服务消息————————————————start————————————————————————————————————————
            Map<String, Object> res = new HashMap<>();
            res.put("touser", wxuser.getOpenid());
            res.put("template_id", "M4K_BNVG7g4hOAcrIDO18ux8KOTneHeNide5GdPW3kc");
            res.put("page", "pages/mine/index");
            res.put("miniprogram_state", "trial");
            //订阅消息参数值
            JSONObject data = new JSONObject();
            JSONObject name1 = new JSONObject();
            name1.put("value", tjReservation.getName());
            data.put("thing1", name1);
            JSONObject amount3 = new JSONObject();
            amount3.put("value", "体检中心");
            data.put("thing2", amount3);
            JSONObject time4 = new JSONObject();
            String dateFormat = DateUtil.format(tjReservation.getReservationTime(), "yyyy-MM-dd");
            time4.put("value", dateFormat);
            data.put("time4", time4);
            final TjPackage byId = packageService.getById(tjReservation.getPacId());
            if (byId != null) {
                JSONObject thing5 = new JSONObject();
                thing5.put("value", byId.getPacName());
                data.put("thing5", thing5);
            } else {
                JSONObject thing5 = new JSONObject();
                thing5.put("value", "未知");
                data.put("thing5", thing5);
            }
            JSONObject thing6 = new JSONObject();
            thing6.put("value", "体检前一天请您进清淡饮食,勿饮酒!");
            data.put("thing6", thing6);
            WxUtil.sendCommonSubscribeMessage(res, data);
            //发订单信息给wx订阅服务消息————————————————end————————————————————————————————————————
            return AjaxResult.success("预约成功!!!", tjReservation.getId());
        }
        return AjaxResult.error("预约失败");
    }
@@ -162,26 +217,72 @@
    @ApiOperation(value = "撤销个人预约")
    @Transactional
    public AjaxResult cusDeletedReservation(@RequestBody TjReservation reservation) {
        LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
        wq.eq(TjReservation::getIdCard, reservation.getIdCard());
        wq.eq(TjReservation::getIsExpire, 2);
        TjReservation one = reservationService.getOne(wq);
        Wxuser wxuser = UserHoder.getWxuser();
//        LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
//        wq.eq(TjReservation::getIdCard, reservation.getIdCard());
//        wq.eq(TjReservation::getIsExpire, 2);
//        TjReservation one = reservationService.getOne(wq);
        if (reservation.getId() == null) {
            return AjaxResult.success("出错了,请联系工作人员!");
        }
        taskService.removeTask(new TjReservationTask(reservation.getId()));
        TjReservation one = reservationService.getById(reservation.getId());
        if (null != one) {
            String isPays = configService.selectConfigByKey("isPay");
            if(null !=isPays  && isPays.equals("true") ){
            if (null != isPays && isPays.equals("true")) {
                //对应预约时间数量+1
                final TjReservation byId = reservationService.getById(one.getId());
                final Date reservationTime = byId.getReservationTime();
                LambdaQueryWrapper<MallTimeConfig> wq111=new LambdaQueryWrapper<>();
                wq111.eq(MallTimeConfig::getTime,reservationTime);
                LambdaQueryWrapper<MallTimeConfig> wq111 = new LambdaQueryWrapper<>();
                wq111.eq(MallTimeConfig::getTime, reservationTime);
                final MallTimeConfig config = mallTimeConfigService.getOne(wq111);
                config.setNowNum(config.getNowNum()+1);
                config.setNowNum(config.getNowNum() + 1);
                mallTimeConfigService.updateById(config);
            }
            transitionService.deletedTbTransitionByCusId(reservation.getIdCard());
            reservationService.removeById(one);
            return AjaxResult.success();
            //发订单信息给wx订阅服务消息————————————————start————————————————————————————————————————
            Map<String, Object> res = new HashMap<>();
            res.put("touser", wxuser.getOpenid());
            res.put("template_id", "X467Xtd8HnFDNk-IoT0ChcdoBnClLZJQQwP7DMztYQ8");
            res.put("page", "pages/mine/index");
            res.put("miniprogram_state", "trial");
            //订阅消息参数值
            JSONObject data = new JSONObject();
            JSONObject amount3 = new JSONObject();
            amount3.put("value", "体检中心");
            data.put("thing3", amount3);
            JSONObject name1 = new JSONObject();
            name1.put("value", reservation.getName());
            data.put("name1", name1);
            final TjPackage byId = packageService.getById(reservation.getPacId());
            if (byId != null) {
                JSONObject thing5 = new JSONObject();
                thing5.put("value", byId.getPacName());
                data.put("thing4", thing5);
            } else {
                JSONObject thing5 = new JSONObject();
                thing5.put("value", "未知");
                data.put("thing4", thing5);
            }
            JSONObject time4 = new JSONObject();
            String dateFormat = DateUtil.format(reservation.getReservationTime(), "yyyy-MM-dd");
            time4.put("value", dateFormat);
            data.put("date2", time4);
            JSONObject thing6 = new JSONObject();
            thing6.put("value", "您已成功取消本次预约,欢迎再次使用!");
            data.put("thing5", thing6);
            WxUtil.sendCommonSubscribeMessage(res, data);
            //发订单信息给wx订阅服务消息————————————————end————————————————————————————————————————
            return AjaxResult.success("取消成功");
        }
        return AjaxResult.success("暂无预约信息");
    }
@@ -193,9 +294,9 @@
        LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
        wq.eq(TjReservation::getConnect, wxuser.getId());
//        wq.eq(TjReservation::getIsExpire, 2);
        wq.eq(TjReservation::getPhoe,wxuser.getPhone());
        wq.eq(TjReservation::getPhoe, wxuser.getPhone());
        List<TjReservation> reservationList = reservationService.list(wq);
        if (null != reservationList && reservationList.size()>0) {
        if (null != reservationList && reservationList.size() > 0) {
            for (TjReservation one : reservationList) {
                TjPackage tjPackage = packageService.getById(one.getPacId());
                if (null != tjPackage) {
@@ -233,23 +334,28 @@
    @Transactional
    public AjaxResult updateReservationTime(@RequestBody @ApiParam(value = "体检预约对象") TjReservation tjReservation) {
        TjReservation one = reservationService.getById(tjReservation.getId());
        if(null !=one && one.getIsExpire().equals(2)){
        if (null != one && one.getIsExpire().equals(2)) {
            //原时间段数加1
            LambdaQueryWrapper<MallTimeConfig> wq111=new LambdaQueryWrapper<>();
            wq111.eq(MallTimeConfig::getTime,one.getReservationTime());
            LambdaQueryWrapper<MallTimeConfig> wq111 = new LambdaQueryWrapper<>();
            wq111.eq(MallTimeConfig::getTime, one.getReservationTime());
            final MallTimeConfig config = mallTimeConfigService.getOne(wq111);
            config.setNowNum(config.getNowNum()+1);
            config.setNowNum(config.getNowNum() + 1);
            mallTimeConfigService.updateById(config);
            //修改后时间段数-1
            LambdaQueryWrapper<MallTimeConfig> wq=new LambdaQueryWrapper<>();
            wq.eq(MallTimeConfig::getTime,tjReservation.getReservationTime());
            LambdaQueryWrapper<MallTimeConfig> wq = new LambdaQueryWrapper<>();
            wq.eq(MallTimeConfig::getTime, tjReservation.getReservationTime());
            final MallTimeConfig config1 = mallTimeConfigService.getOne(wq);
            config1.setNowNum(config1.getNowNum()-1);
            config1.setNowNum(config1.getNowNum() - 1);
            mallTimeConfigService.updateById(config1);
            one.setReservationTime(tjReservation.getReservationTime());
            reservationService.updateById(one);
            if (reservationService.updateById(one)) {
                taskService.removeTask(new TjReservationTask(tjReservation.getId()));
                taskService.addTask(new TjReservationTask(tjReservation.getId(),
                        DateUtil.between(new Date(), DateUtil.endOfDay(tjReservation.getReservationTime()), DateUnit.MS)));
            }
            return AjaxResult.success("操作成功");
        }
        return AjaxResult.error("预约不存在或已超时 不可修改!");
@@ -262,7 +368,7 @@
        Wxuser wxuser = UserHoder.getWxuser();
        LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
        wq.eq(TjReservation::getConnect, wxuser.getId());
        wq.eq(TjReservation::getPhoe,wxuser.getPhone());
        wq.eq(TjReservation::getPhoe, wxuser.getPhone());
        wq.orderByDesc(TjReservation::getCreateTime);
        List<TjReservation> reservationList = reservationService.list(wq);
        if (null != reservationList && reservationList.size() > 0) {
@@ -312,35 +418,35 @@
    @ApiOperation(value = "根据身份证号查看预约信息")
    public AjaxResult getReservationByIdCard(@RequestParam @ApiParam(value = "身份证号") String idCard) {
        LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
        wq.eq(TjReservation::getIdCard,idCard);
        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<TjPackageProject> wq1 = new LambdaQueryWrapper<>();
                    wq1.eq(TjPackageProject::getPacId, one.getPacId());
                    List<TjPackageProject> projectList = ppservice.list(wq1);
                    if (null != projectList && projectList.size() > 0) {
                        List<TjProject> tjProjectList = new ArrayList<>();
                        for (TjPackageProject packageProject : projectList) {
                            tjProjectList.add(projectService.getById(packageProject.getProId()));
                        }
                        tjPackage.setTjProjectList(tjProjectList);
            TjPackage tjPackage = packageService.getById(one.getPacId());
            if (null != tjPackage) {
                LambdaQueryWrapper<TjPackageProject> wq1 = new LambdaQueryWrapper<>();
                wq1.eq(TjPackageProject::getPacId, one.getPacId());
                List<TjPackageProject> projectList = ppservice.list(wq1);
                if (null != projectList && projectList.size() > 0) {
                    List<TjProject> tjProjectList = new ArrayList<>();
                    for (TjPackageProject packageProject : projectList) {
                        tjProjectList.add(projectService.getById(packageProject.getProId()));
                    }
                    one.setTjPackage(tjPackage);
                    tjPackage.setTjProjectList(tjProjectList);
                }
                if (null != one.getProIds()) {
                    String[] proIds = StringUtils.split(one.getProIds(), ",");
                    if (null != proIds && proIds.length > 0) {
                        List<TjProject> projectList = new ArrayList<>();
                        for (String proId : proIds) {
                            projectList.add(projectService.getById(proId));
                        }
                        one.setProjectList(projectList);
                one.setTjPackage(tjPackage);
            }
            if (null != one.getProIds()) {
                String[] proIds = StringUtils.split(one.getProIds(), ",");
                if (null != proIds && proIds.length > 0) {
                    List<TjProject> projectList = new ArrayList<>();
                    for (String proId : proIds) {
                        projectList.add(projectService.getById(proId));
                    }
                    one.setProjectList(projectList);
                }
            }
//            }
            return AjaxResult.success(one);
        }