diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java index 8580f24..6a3c7bb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiNoticeController.java @@ -137,7 +137,11 @@ public class BusiNoticeController extends BaseController public AjaxResult saveOrUpdate(@RequestBody BusiNotice busiNotice) { JSONObject res = new JSONObject(); - res.put("noticeId", busiNoticeService.saveOrUpdateVo(busiNotice)); + try{ + res.put("noticeId", busiNoticeService.saveOrUpdateVo(busiNotice)); + } catch (Exception e){ + return error(e.getMessage()); + } return success(res); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java index 27c5328..aabed79 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiNoticeService.java @@ -47,7 +47,7 @@ public interface IBusiNoticeService extends IService * @param data 保存参数 */ void updateByIdVo(BusiNotice data); - String saveOrUpdateVo(BusiNotice data); + String saveOrUpdateVo(BusiNotice data) throws Exception; void removeByIdsVo(List ids); /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java index 1abdcaa..88ac6c4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java @@ -35,6 +35,7 @@ import com.ruoyi.constant.DictConstants; import com.ruoyi.member.domain.MemberApply; import com.ruoyi.member.domain.MemberUser; import com.ruoyi.member.service.IMemberApplyService; +import com.ruoyi.member.service.IMemberCardService; import com.ruoyi.member.service.IMemberUserService; import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictTypeService; @@ -46,6 +47,8 @@ import com.ruoyi.busi.mapper.BusiNoticeMapper; import com.ruoyi.busi.service.IBusiNoticeService; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; + /** * 通告Service业务层处理 * @@ -77,6 +80,8 @@ public class BusiNoticeServiceImpl extends ServiceImpl queryWrapper =new LambdaQueryWrapper<>(); @@ -209,6 +216,10 @@ public class BusiNoticeServiceImpl extends ServiceImpl queryListPage(BusiNoticeSign pageReqVO, Page page) { @@ -51,8 +56,8 @@ public class BusiNoticeSignServiceImpl extends ServiceImpl list = memberCardService.list(); return success(list); } + /** + * 通用权益值扣除接口 + * + * @param userId 用户id + * @param rightsCode 权益code + * @param deplete 消耗值 + * @return com.ruoyi.common.core.domain.AjaxResult + * @author PQZ + * @date 15:10 2025/4/18 + **/ + @GetMapping("/dealMemberRights") + public AjaxResult list(@RequestParam("userId") Long userId, + @RequestParam("rightsCode") String rightsCode, + @RequestParam("deplete") Integer deplete, + @RequestParam(value = "noticeId", required = false) String noticeId) { + try { + memberCardService.dealMemberRights(userId, noticeId, rightsCode, deplete); + } catch (Exception e) { + e.printStackTrace(); + return error(e.getMessage()); + } + return success(); + } + /** * 导出会员开卡记录列表 */ @PreAuthorize("@ss.hasPermi('member:card:export')") @Log(title = "会员开卡记录", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, MemberCard memberCard) - { + public void export(HttpServletResponse response, MemberCard memberCard) { List list = memberCardService.list(); ExcelUtil util = new ExcelUtil(MemberCard.class); util.exportExcel(response, list, "会员开卡记录数据"); @@ -68,8 +82,7 @@ public class MemberCardController extends BaseController */ @PreAuthorize("@ss.hasPermi('member:card:query')") @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") String id) - { + public AjaxResult getInfo(@PathVariable("id") String id) { return success(memberCardService.getById(id)); } @@ -79,8 +92,7 @@ public class MemberCardController extends BaseController @PreAuthorize("@ss.hasPermi('member:card:add')") @Log(title = "会员开卡记录", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody MemberCard memberCard) - { + public AjaxResult add(@RequestBody MemberCard memberCard) { return toAjax(memberCardService.save(memberCard)); } @@ -90,8 +102,7 @@ public class MemberCardController extends BaseController @PreAuthorize("@ss.hasPermi('member:card:edit')") @Log(title = "会员开卡记录", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody MemberCard memberCard) - { + public AjaxResult edit(@RequestBody MemberCard memberCard) { return toAjax(memberCardService.updateById(memberCard)); } @@ -100,9 +111,8 @@ public class MemberCardController extends BaseController */ @PreAuthorize("@ss.hasPermi('member:card:remove')") @Log(title = "会员开卡记录", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable String[] ids) - { + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) { List list = new ArrayList<>(Arrays.asList(ids)); return toAjax(memberCardService.removeByIds(list)); } @@ -112,9 +122,8 @@ public class MemberCardController extends BaseController */ @GetMapping("/selectMemberRights") - public AjaxResult selectMemberRights() - { - return success( memberCardService.selectMemberRights(SecurityUtils.getUserId(),null)); + public AjaxResult selectMemberRights() { + return success(memberCardService.selectMemberRights(SecurityUtils.getUserId(), null)); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java index a33ecac..ef50ada 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java @@ -68,10 +68,10 @@ public interface IMemberCardService extends IService { * @author PQZ * @date 14:23 2025/4/17 * @param userId 用户id + * @param noticeId 通告id * @param rightsCode 权益编码 * @param deplete 扣的值 - * @return void **/ - void dealMemberRights(Long userId,String rightsCode,Integer deplete) throws Exception; + void dealMemberRights(Long userId,String noticeId,String rightsCode,Integer deplete) throws Exception; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberFootprintService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberFootprintService.java index 123ba5a..23a29b9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberFootprintService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberFootprintService.java @@ -1,16 +1,25 @@ package com.ruoyi.member.service; -import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.MemberFootprint; /** * 浏览足迹Service接口 - * + * * @author vinjor-m * @date 2025-03-17 */ -public interface IMemberFootprintService extends IService -{ +public interface IMemberFootprintService extends IService { + + /** + * 校验用户是否解锁过当前通告 + * + * @param noticeId 通告id + * @param userId 用户id + * @return java.lang.Boolean + * @author PQZ + * @date 15:21 2025/4/18 + **/ + Boolean checkFoot(String noticeId, Long userId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java index 2c6c4ed..da051ad 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberRightsService.java @@ -37,12 +37,12 @@ public interface IMemberRightsService extends IService { /** * 根据用户id,卡id,权益编码,更新剩余值 * - * @param userId 用户id - * @param cardId 卡id - * @param rightsCode 权益编码 - * @param deplete 消耗值 + * @param userId 用户id + * @param memberCards 卡集合 + * @param rightsCode 权益编码 + * @param deplete 消耗值 * @author PQZ * @date 14:32 2025/4/17 **/ - void dealMemberRights(Long userId, String cardId, String rightsCode, Integer deplete) throws Exception; + void dealMemberRights(Long userId, List memberCards, String rightsCode, Integer deplete) throws Exception; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java index 7b040aa..c54ec6a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java @@ -17,9 +17,11 @@ import com.ruoyi.member.domain.MemberRights; import com.ruoyi.member.mapper.MemberCardMapper; import com.ruoyi.member.mapper.MemberRightsMapper; import com.ruoyi.member.service.IMemberCardService; +import com.ruoyi.member.service.IMemberFootprintService; import com.ruoyi.member.service.IMemberRightsService; import com.ruoyi.member.vo.MemberRightsVO; import com.ruoyi.member.vo.ViewRightsVO; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -48,6 +50,8 @@ public class MemberCardServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(userType)) { + lambdaQueryWrapper.eq(MemberCard::getUserType, userType); + } lambdaQueryWrapper - .eq(MemberCard::getUserType, userType) .eq(MemberCard::getUserId, userId) .eq(DlBaseEntity::getDelFlag, 0) .lt(MemberCard::getStartDate, time) @@ -257,19 +263,31 @@ public class MemberCardServiceImpl extends ServiceImpl memberCards = getMemberCards(userId, "01"); + List memberCards = getMemberCards(userId,null); if (memberCards.isEmpty()){ throw new Exception("无正在服役的会员卡"); } - rightsService.dealMemberRights(userId,memberCards.get(0).getCardId(),rightsCode,deplete); + if ("unlock_notice".equals(rightsCode)) { + if (noticeId == null){ + throw new Exception("无法识别当前通告"); + } + //true表示有浏览记录,false表示没有浏览记录;如果当前用户在足迹表中未发现该通告。 + if (footprintService.checkFoot(noticeId,userId)){ + rightsService.dealMemberRights(userId,memberCards,rightsCode,deplete); + } + } else { + rightsService.dealMemberRights(userId,memberCards,rightsCode,deplete); + } + } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberFootprintServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberFootprintServiceImpl.java index ada8ec1..e128129 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberFootprintServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberFootprintServiceImpl.java @@ -1,25 +1,42 @@ package com.ruoyi.member.service.impl; -import java.util.List; -import com.ruoyi.common.utils.DateUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.member.domain.MemberFootprint; +import com.ruoyi.member.mapper.MemberFootprintMapper; +import com.ruoyi.member.service.IMemberFootprintService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.member.mapper.MemberFootprintMapper; -import com.ruoyi.member.domain.MemberFootprint; -import com.ruoyi.member.service.IMemberFootprintService; + +import java.util.List; /** * 浏览足迹Service业务层处理 - * + * * @author vinjor-m * @date 2025-03-17 */ @Service -public class MemberFootprintServiceImpl extends ServiceImpl implements IMemberFootprintService -{ +public class MemberFootprintServiceImpl extends ServiceImpl implements IMemberFootprintService { @Autowired private MemberFootprintMapper memberFootprintMapper; + /** + * 校验用户是否解锁过当前通告 + * + * @param noticeId 通告id + * @param userId 用户id + * @return java.lang.Boolean + * @author PQZ + * @date 15:21 2025/4/18 + **/ + @Override + public Boolean checkFoot(String noticeId, Long userId) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(MemberFootprint::getNoticeId, noticeId) + .eq(MemberFootprint::getUserId, userId); + List list = list(lambdaQueryWrapper); + return list.isEmpty(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java index d78395d..c7af143 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberRightsServiceImpl.java @@ -69,10 +69,10 @@ public class MemberRightsServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper - .eq(MemberRights::getUserId,userId) - .eq(MemberRights::getCardId,cardId); + .eq(MemberRights::getUserId, userId) + .eq(MemberRights::getCardId, cardId); List rights = list(lambdaQueryWrapper); - if (rights.isEmpty()){ + if (rights.isEmpty()) { return dlRightsConfig.getReport(); } else { List filterRights = rights.stream() @@ -85,25 +85,32 @@ public class MemberRightsServiceImpl extends ServiceImpl memberCards, String rightsCode, Integer deplete) throws Exception { + List cardIds = memberCards.stream().map(MemberCard::getCardId).collect(Collectors.toList()); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(MemberRights::getUserId,userId) - .eq(MemberRights::getCardId,cardId) - .eq(MemberRights::getRightsCode,rightsCode); - try{ + lambdaQueryWrapper.eq(MemberRights::getUserId, userId) + .in(MemberRights::getCardId, cardIds) + .eq(MemberRights::getRightsCode, rightsCode); + try { MemberRights rights = getOne(lambdaQueryWrapper); - rights.setRemaining(rights.getRemaining()-deplete); - updateById(rights); - }catch (Exception e){ - throw new Exception("根据用户id,卡id,权益编码,查询权益出现错误"); + if (!("02".equals(rights.getRightsType()) && rights.getRightsValue() == 0)) { + int result = rights.getRemaining() - deplete; + if (result == 0) { + throw new Exception("今日次数已达上限"); + } + rights.setRemaining(result); + updateById(rights); + } + } catch (Exception e) { + throw new Exception(e.getMessage()); } }