From 70d2a5d0f9c6951b2d4cac954041ed73582ff7eb Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期一, 09 六月 2025 11:54:00 +0800 Subject: [PATCH] 6.9新增登录失败冻结逻辑 --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActReserveRecordServiceImpl.java | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 327 insertions(+), 1 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActReserveRecordServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActReserveRecordServiceImpl.java index 4fc2491..137c772 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActReserveRecordServiceImpl.java +++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActReserveRecordServiceImpl.java @@ -1,11 +1,41 @@ package com.panzhihua.service_community.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.panzhihua.service_community.dao.ComActReserveRecordMapper; +import com.panzhihua.common.model.dtos.community.reserve.*; +import com.panzhihua.common.model.vos.R; +import com.panzhihua.common.model.vos.community.reserve.*; +import com.panzhihua.common.model.vos.user.SysTemplateConfigVO; +import com.panzhihua.common.service.user.UserService; +import com.panzhihua.common.utlis.DateUtils; +import com.panzhihua.common.utlis.WxUtil; +import com.panzhihua.common.utlis.WxXCXTempSend; +import com.panzhihua.service_community.dao.*; +import com.panzhihua.common.model.dtos.community.CancelRecordDTO; +import com.panzhihua.common.model.vos.R; +import com.panzhihua.service_community.dao.ComActReserveOperationRecordMapper; +import com.panzhihua.service_community.model.dos.ComActReserveDO; +import com.panzhihua.service_community.model.dos.ComActReserveOperationRecordDO; import com.panzhihua.service_community.model.dos.ComActReserveRecordDO; +import com.panzhihua.service_community.service.ComActReserveOperationRecordService; import com.panzhihua.service_community.service.ComActReserveRecordService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; /** * @auther lyq @@ -15,5 +45,301 @@ @Slf4j @Service public class ComActReserveRecordServiceImpl extends ServiceImpl<ComActReserveRecordMapper, ComActReserveRecordDO> implements ComActReserveRecordService { + @Resource + private ComActReserveRecordMapper comActReserveRecordMapper; + @Resource + private ComActReserveMapper comActReserveMapper; + @Resource + private ComActReserveAnswerContentMapper comActReserveAnswerContentMapper; + @Resource + private ComActReserveOperationRecordMapper comActReserveOperationRecordMapper; + @Resource + private ComActReserveOperationRecordService comActReserveOperationRecordService; + @Resource + private ComActActSignDAO comActActSignDAO; + @Resource + private UserService userService; + + private final static String CANCEL="用户取消"; + @Override + @Transactional + public R cancel(CancelRecordDTO comActReserveRecord) { + if(comActReserveRecord!=null&&comActReserveRecord.getId()!=null){ + //查询当前操作数据并判断取消状态 + ComActReserveRecordDO comActReserveRecordDO=comActReserveRecordMapper.selectById(comActReserveRecord.getId()); + if(comActReserveRecordDO!=null&&comActReserveRecordDO.getStatus()!=ComActReserveRecordDO.status.yqx){ + comActReserveRecordDO.setStatus(ComActReserveRecordDO.status.yqx); + comActReserveRecordDO.setRemark(comActReserveRecord.getContent()); + comActReserveRecordDO.setReserveTime(DateUtil.date()); + int result =comActReserveRecordMapper.updateById(comActReserveRecordDO); + //判断取消状态并添加操作记录 + if(result>0){ + //更新回答用户数量 + ComActReserveDO comActReserveDO=comActReserveMapper.selectById(comActReserveRecordDO.getReserveId()); + Integer joinCount = comActReserveDO.getJoinCount(); + comActReserveDO.setJoinCount(joinCount != null ? joinCount - 1 : 0); + comActReserveMapper.updateById(comActReserveDO); + ComActReserveOperationRecordDO comActReserveOperationRecordDO=new ComActReserveOperationRecordDO(); + comActReserveOperationRecordDO.setRemark(comActReserveRecord.getContent()); + comActReserveOperationRecordDO.setReserveId(comActReserveRecordDO.getReserveId()); + comActReserveOperationRecordDO.setReserveRecordId(comActReserveRecordDO.getId()); + comActReserveOperationRecordDO.setType(ComActReserveOperationRecordDO.type.br); + comActReserveOperationRecordDO.setCreateAt(DateUtil.date()); + comActReserveOperationRecordDO.setReserveContent(CANCEL); + comActReserveOperationRecordDO.setPhone(comActReserveRecordDO.getPhone()); + comActReserveOperationRecordDO.setStatus(ComActReserveOperationRecordDO.status.qx); + comActReserveOperationRecordDO.setUserId(comActReserveRecord.getUserId()); + comActReserveOperationRecordDO.setReserveTime(DateUtil.date()); + comActReserveOperationRecordMapper.insert(comActReserveOperationRecordDO); + return R.ok(); + } + } + return R.fail("无法重复取消"); + } + + return R.fail("参数异常"); + } + + + /** + * 社区后台-根据预约id查询预约明细 + * @param pageMakeDTO 请求参数 + * @return 预约明细 + */ + @Override + public R pageMakeAdmin(PageReserveMakeAdminDTO pageMakeDTO){ + return R.ok(this.baseMapper.pageMakeAdmin(new Page(pageMakeDTO.getPageNum(),pageMakeDTO.getPageSize()),pageMakeDTO)); + } + + /** + * 根据预约记录id查询预约明细操作记录 + * @param reserveRecordId 预约记录id + * @return 预约明细操作记录 + */ + @Override + public R detailMakeAdmin(Long reserveRecordId){ + ComActReserveMakeDetailAdminVO makeDetailAdminVO = this.baseMapper.getMakeDetailAdmin(reserveRecordId); + if(makeDetailAdminVO != null){ + //查询预约明细操作记录 + List<ComActReserveMakeOperationAdminVO> makeOperationList = comActReserveOperationRecordMapper.getMakeOperationList(reserveRecordId); + makeDetailAdminVO.setOperationList(makeOperationList); + } + return R.ok(makeDetailAdminVO); + } + + /** + * 批量取消预约记录 + * @param reserveRecordDTO 请求参数 + * @return 取消结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R makeCancelAdmin(CancelReserveRecordDTO reserveRecordDTO){ + Integer count = this.baseMapper.getReserveStatusById(reserveRecordDTO.getIds()); + if(count > 0){ + return R.fail("仅预约成功的可以进行取消操作"); + } + if(this.baseMapper.editReserveStatusById(reserveRecordDTO.getIds()) > 0){ + Long userId = reserveRecordDTO.getUserId(); + reserveRecordDTO.getIds().forEach(id -> { + ComActReserveRecordDO reserveRecordDO = comActReserveRecordMapper.selectById(id); + if(reserveRecordDO != null){ + //更新预约记录社区备注字段 + reserveRecordDO.setActRemark(reserveRecordDTO.getRemark()); + reserveRecordDO.setHandleId(userId); + comActReserveRecordMapper.updateById(reserveRecordDO); + //取消预约返还可参加名额 + comActReserveMapper.addReserveCountById(reserveRecordDO.getReserveId()); + //添加操作记录 + comActReserveOperationRecordService.addReserveOperationRecord(reserveRecordDO.getReserveId() + ,reserveRecordDO.getId(),reserveRecordDO.getUserId(),ComActReserveOperationRecordDO.type.sq,null + ,"社区管理员取消预约",reserveRecordDTO.getRemark(),ComActReserveOperationRecordDO.status.qx,userId,new Date()); + } + }); + return R.ok(); + }else{ + return R.fail(); + } + } + + /** + * 预约明细导出数据查询 + * @param pageMakeDTO 请求参数 + * @return 预约明细数据 + */ + @Override + public R exportMakeAdmin(PageReserveMakeAdminDTO pageMakeDTO){ + return R.ok(this.baseMapper.exportMakeAdmin(pageMakeDTO)); + } + + /** + * 分页查询登记统计汇总 + * @param registerStatisticsDTO 请求参数 + * @return 登记统计汇总 + */ + @Override + public R registerStatisticsAdmin(ComActReserveRegisterStatisticsDTO registerStatisticsDTO){ + IPage<ComActReserveRegisterStatisticsAdminVO> registerStatisticsList = this.baseMapper.registerStatisticsAdmin(new Page(registerStatisticsDTO.getPageNum() + ,registerStatisticsDTO.getPageSize()),registerStatisticsDTO); + registerStatisticsList.getRecords().forEach(registerStatistics -> { + BigDecimal tag = BigDecimal.ZERO; + if(registerStatistics.getAllCount() > 0){ + tag = BigDecimal.valueOf(registerStatistics.getCount()).divide(BigDecimal.valueOf(registerStatistics.getAllCount()),4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); + } + registerStatistics.setTag(tag); + }); + return R.ok(registerStatisticsList.getRecords()); + } + + /** + * 导出登记统计汇总 + * @param registerStatisticsDTO 请求参数 + * @return 登记统计汇总 + */ + @Override + public R registerStatisticsExportAdmin(ComActReserveRegisterStatisticsDTO registerStatisticsDTO){ + List<ComActReserveRegisterStatisticsAdminVO> registerStatisticsList = this.baseMapper.registerStatisticsExportAdmin(registerStatisticsDTO); + registerStatisticsList.forEach(registerStatistics -> { + BigDecimal tag = BigDecimal.ZERO; + if(registerStatistics.getAllCount() > 0){ + tag = BigDecimal.valueOf(registerStatistics.getCount()).divide(BigDecimal.valueOf(registerStatistics.getAllCount()),4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); + } + registerStatistics.setTag(tag); + }); + return R.ok(registerStatisticsList); + } + + /** + * 分页查询预约处理列表 + * @param pageMakeHandleDTO 请求参数 + * @return 预约处理列表 + */ + @Override + public R pageMakeHandleAdmin(PageReserveMakeHandleAdminDTO pageMakeHandleDTO){ + return R.ok(this.baseMapper.pageMakeHandleAdmin(new Page(pageMakeHandleDTO.getPageNum(),pageMakeHandleDTO.getPageSize()),pageMakeHandleDTO)); + } + + /** + * 批量处理预约记录 + * @param makeHandleDTO 请求参数 + * @return 处理结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R makeHandleAdmin(MakeHandleAdminDTO makeHandleDTO){ + if(makeHandleDTO.getIds() == null || makeHandleDTO.getIds().isEmpty()){ + return R.fail("请勾选预约记录"); + } + //判断选中的所有记录是否都是待处理记录 + if(this.baseMapper.getReserveListCountByIds(makeHandleDTO.getIds()) > 0){ + return R.fail("您勾选的记录中存在不是待处理状态的记录,请核对后再进行处理"); + } + Date nowDate = new Date(); + Long userId = makeHandleDTO.getUserId(); + String remark = makeHandleDTO.getRemark(); + WxXCXTempSend util = new WxXCXTempSend(); + List<ComActReserveRecordDO> updateList = new ArrayList<>(); + makeHandleDTO.getIds().forEach(id -> { + ComActReserveRecordDO reserveRecordDO = this.baseMapper.selectById(id); + if(reserveRecordDO != null){ + Date reserveTime = DateUtils.stringToDate(makeHandleDTO.getMakeTime(),DateUtils.ymdhms_format); + + //查询预约登记信息 + ComActReserveDO reserveDO = comActReserveMapper.selectById(reserveRecordDO.getReserveId()); + // 预约以后给用户推送消息 + Map<String, String> map = comActActSignDAO.getUserOpenId(reserveRecordDO.getUserId()); + R<SysTemplateConfigVO> sysTemplateConfigVO=userService.selectTemplate(makeHandleDTO.getAreaCode(),10); + //判断处理是否通过 + if(makeHandleDTO.getIsOk().equals(MakeHandleAdminDTO.isOk.yes)){ + reserveRecordDO.setStatus(ComActReserveRecordDO.status.cg); + comActReserveOperationRecordService.addReserveOperationRecord(reserveRecordDO.getReserveId() + ,id,reserveRecordDO.getUserId(),ComActReserveOperationRecordDO.type.sq,null + ,"社区管理员处理预约成功",remark,ComActReserveOperationRecordDO.status.cg,userId,reserveTime); + if (map != null) { + String openid = map.get("openid"); + try { + WxUtil.sendSubscribeYYTX(openid, util.getAccessToken(), "预约成功", + reserveDO.getTitle(), reserveRecordDO.getName(), makeHandleDTO.getMakeTime(),sysTemplateConfigVO.getData().getTemplateId()); + } catch (Exception e) { + log.error("消息推送失败,失败原因:" + e.getMessage()); + } + } + }else if(makeHandleDTO.getIsOk().equals(MakeHandleAdminDTO.isOk.no)){ + reserveRecordDO.setStatus(ComActReserveRecordDO.status.sb); + comActReserveOperationRecordService.addReserveOperationRecord(reserveRecordDO.getReserveId() + ,id,reserveRecordDO.getUserId(),ComActReserveOperationRecordDO.type.sq,null + ,"社区管理员处理预约失败",remark,ComActReserveOperationRecordDO.status.sb,userId,null); + + if (map != null) { + String openid = map.get("openid"); + try { + WxUtil.sendSubscribeYYTX(openid, util.getAccessToken(), "预约失败", + reserveDO.getTitle(), reserveRecordDO.getName(), DateUtils.format(reserveRecordDO.getReserveTime(),DateUtils.ymdhms_format),sysTemplateConfigVO.getData().getTemplateId()); + } catch (Exception e) { + log.error("消息推送失败,失败原因:" + e.getMessage()); + } + } + //预约失败时需要更新预约登记参与人数 + comActReserveMapper.addReserveCountById(reserveRecordDO.getReserveId()); + } + reserveRecordDO.setActRemark(remark); + reserveRecordDO.setReserveTime(reserveTime); + reserveRecordDO.setUpdateAt(nowDate); + reserveRecordDO.setUpdateBy(userId); + reserveRecordDO.setHandleId(userId); + updateList.add(reserveRecordDO); + } + }); + + if(!updateList.isEmpty()){ + this.updateBatchById(updateList); + } + return R.ok(); + } + + /** + * 导出预约处理列表数据查询 + * @param pageMakeHandleDTO 请求参数 + * @return 预约处理列表 + */ + @Override + public R exportMakeHandleAdmin(PageReserveMakeHandleAdminDTO pageMakeHandleDTO){ + return R.ok(this.baseMapper.exportMakeHandleAdmin(pageMakeHandleDTO)); + } + + @Override + public R registerDetailedDetailAdmin(Long reserveRecordId){ + //查询用户信息 + ComActReserveRegisterDetailedVO registerDetailedVO = this.baseMapper.getRegisterDetailedByRecordId(reserveRecordId); + if(registerDetailedVO != null){ + //组装用户身份信息 + StringBuilder sb = new StringBuilder(); + if(registerDetailedVO.getIsPartymember().equals(1)){ + sb.append("党员/"); + } + if(registerDetailedVO.getIsVolunteer().equals(1)){ + sb.append("志愿者/"); + } + if(sb.length() == 0){ + sb.append("居民/"); + } + String identity = sb.toString(); + registerDetailedVO.setIdentity(identity.substring(0,identity.length()-1)); + //查询答题数据 + List<ComActReserveRegisterDetailedAnswerVO> answerList = comActReserveAnswerContentMapper.getRegisterDetailedAnswerList(reserveRecordId); + answerList.forEach(answer ->{ + if(answer.getType()==4){ + answer.setAnswerContent(answer.getAnswerContent().replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*")); + } + }); + registerDetailedVO.setAnswerList(answerList); + } + return R.ok(registerDetailedVO); + } + + @Override + public R fiveCount(Long reserveId) { + return R.ok(comActReserveAnswerContentMapper.fiveCount(reserveId)); + } } -- Gitblit v1.7.1