From 4e85cf00c3a77b7165f4d349da21e94b2b528909 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 11 四月 2025 10:05:41 +0800 Subject: [PATCH] Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/PlayPai into 2.0 --- cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java | 177 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 129 insertions(+), 48 deletions(-) diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java index d65ffc3..98cb2b2 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.activity.HuiminCardClient; import com.dsh.course.feignClient.activity.model.THuiminCard; +import com.dsh.guns.config.UserExt; import com.dsh.guns.core.base.controller.BaseController; import com.dsh.guns.core.page.PageInfoBT; import com.dsh.guns.modular.system.model.*; @@ -16,13 +17,13 @@ import com.dsh.guns.modular.system.service.TOperatorService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 惠民卡控制器 @@ -57,8 +58,9 @@ * 跳转到添加惠民卡 */ @RequestMapping("/tHuiminCard_add") - public String tHuiminCardAdd() { - + public String tHuiminCardAdd(Model model) { + User user = UserExt.getUser(); + model.addAttribute("objectType", user.getObjectType()); return PREFIX + "tHuiminCard_add.html"; } @@ -66,7 +68,9 @@ * 跳转到详情页面 */ @RequestMapping("/tHuiminCard_detail/{id}") - public String tHuiminCardDetail(@PathVariable("id") Integer id) { + public String tHuiminCardDetail(@PathVariable("id") Integer id,Model model) { + User user = UserExt.getUser(); + model.addAttribute("objectType", user.getObjectType()); return PREFIX + "tHuiminCard_detail.html"; } @@ -75,7 +79,9 @@ */ @RequestMapping("/getDetail") @ResponseBody - public THuiminCard getDetail(Integer id) { + public THuiminCard getDetail(Integer id,Model model) { + User user = UserExt.getUser(); + model.addAttribute("objectType", user.getObjectType()); return huiminCardClient.getById(id); } @@ -86,8 +92,16 @@ */ @RequestMapping(value = "/list") @ResponseBody - public PageInfoBT<THuiminCard> list(Page<THuiminCard> page,THuiminCard tHuiminCard) { - return super.packForBT(huiminCardClient.queryPage(page, tHuiminCard)); + public PageInfoBT<THuiminCard> list(THuiminCard tHuiminCard) { + User user = UserExt.getUser(); + if(user == null){ + return null; + } + Integer objectType = user.getObjectType(); + tHuiminCard.setObjectType(objectType); + Integer objectId = user.getObjectId(); + tHuiminCard.setObjectId(objectId); + return super.packForBT(huiminCardClient.queryPage(tHuiminCard)); } /** @@ -101,8 +115,19 @@ if (!StringUtils.isEmpty(storeIds)){ ids = storeIds.split(","); } - + User user = UserExt.getUser(); + if(user == null){ + return null; + } + Integer objectType = user.getObjectType(); + if (objectType != 1 && objectType != 2){ + throw new RuntimeException("权限不足"); + } + if (objectType == 2){ + query.setOperatorId(user.getObjectId()); + } Page<TStore> storePage = storeService.page(page, new LambdaQueryWrapper<TStore>() + .eq(TStore::getState, 1) .in(ids.length > 0, TStore::getId, Arrays.asList(ids)) .eq(!StringUtils.isEmpty(query.getProvinceCode()), TStore::getProvinceCode, query.getProvinceCode()) .eq(!StringUtils.isEmpty(query.getCityCode()), TStore::getCityCode, query.getCityCode()) @@ -118,6 +143,7 @@ TOperator operator = operatorService.getById(tStore.getOperatorId()); if (operator != null){ huiminCardStoreVO.setOperatorName(operator.getName()); + huiminCardStoreVO.setOperatorId(tStore.getOperatorId()); } return huiminCardStoreVO; }); @@ -131,65 +157,115 @@ public Object siteList(Page<TSite> page, HuiminCardStoreQuery query) { String storeName = query.getStoreName(); List<String> storeIds = new ArrayList<>(); - if (!StringUtils.isEmpty(storeName)){ - List<String> storeIdsByName = storeService.listObjs(new LambdaQueryWrapper<TStore>() - .select(TStore::getId) - .eq(TStore::getName, storeName), String::valueOf); - if (storeIdsByName != null && !storeIdsByName.isEmpty()){ - storeIds.addAll(storeIdsByName); - }else { - return null; - } + + // 收集storeName条件的storeIds(不提前返回null) + if (!StringUtils.isEmpty(storeName)) { + List<String> storeIdsByName = storeService.listObjs( + new LambdaQueryWrapper<TStore>() + .select(TStore::getId) + .eq(TStore::getName, storeName), + String::valueOf); + storeIds.addAll(storeIdsByName); } + + // 收集operatorId条件的storeIds(不提前返回null) Integer operatorId = query.getOperatorId(); - if (operatorId != null){ - List<String> storeIdsByOperatorId = storeService.listObjs(new LambdaQueryWrapper<TStore>() - .select(TStore::getId) - .eq(TStore::getOperatorId, operatorId), String::valueOf); - if (storeIdsByOperatorId != null && !storeIdsByOperatorId.isEmpty()){ - storeIds.addAll(storeIdsByOperatorId); - }else { - return null; - } + if (operatorId != null) { + List<String> storeIdsByOperatorId = storeService.listObjs( + new LambdaQueryWrapper<TStore>() + .select(TStore::getId) + .eq(TStore::getOperatorId, operatorId), + String::valueOf); + storeIds.addAll(storeIdsByOperatorId); } - Page<TSite> sitePage = tSiteService.page(page, new LambdaQueryWrapper<TSite>() - .eq(!StringUtils.isEmpty(query.getProvinceCode()), TSite::getProvinceCode, query.getProvinceCode()) - .eq(!StringUtils.isEmpty(query.getCityCode()), TSite::getCityCode, query.getCityCode()) - .in(!storeIds.isEmpty(), TSite::getStoreId, storeIds)); + // 处理用户权限过滤(objectType为2) + User user = UserExt.getUser(); + if (user != null && user.getObjectType() == 2) { + List<String> authorizedStoreIds = storeService.listObjs( + new LambdaQueryWrapper<TStore>() + .select(TStore::getId) + .eq(TStore::getOperatorId, user.getObjectId()), + String::valueOf); + if (authorizedStoreIds.isEmpty()) { + new Page(); + } + if (storeIds.isEmpty()){ + storeIds.addAll(authorizedStoreIds); + }else { + storeIds.retainAll(new HashSet<>(authorizedStoreIds)); + } + + }else if (user != null && user.getObjectType() == 3){ + storeIds = new ArrayList<>(); + storeIds.add(String.valueOf(user.getObjectId())); + } + + // 最终查询条件:storeIds为空时会返回空Page + Page<TSite> sitePage = tSiteService.page(page, + new LambdaQueryWrapper<TSite>() + .eq(!StringUtils.isEmpty(query.getProvinceCode()), TSite::getProvinceCode, query.getProvinceCode()) + .eq(!StringUtils.isEmpty(query.getCityCode()), TSite::getCityCode, query.getCityCode()) + .in(!storeIds.isEmpty(), TSite::getStoreId, storeIds)); + + // 批量查询store和operator,避免N+1问题 + List<TSite> sites = sitePage.getRecords(); + if (sites.isEmpty()) { + return sitePage.convert(t -> null); // 返回空Page + } + + // 收集需要的storeId和operatorId + List<Integer> storeIdsForVO = sites.stream().map(TSite::getStoreId).distinct().collect(Collectors.toList()); + List<Integer> operatorIdsForVO = sites.stream().map(TSite::getOperatorId).distinct().collect(Collectors.toList()); + + // 批量查询并缓存结果 + Map<Integer, TStore> storeMap = storeService.listByIds(storeIdsForVO) + .stream() + .collect(Collectors.toMap(TStore::getId, Function.identity())); + + Map<Integer, TOperator> operatorMap = operatorService.listByIds(operatorIdsForVO) + .stream() + .collect(Collectors.toMap(TOperator::getId, Function.identity())); + + // 转换VO时直接使用缓存结果 return sitePage.convert(tSite -> { - HuiminCardSiteVO huiminCardSiteVO = new HuiminCardSiteVO(); - huiminCardSiteVO.setSiteId(tSite.getId()); - huiminCardSiteVO.setProvince(tSite.getProvince()); - huiminCardSiteVO.setSiteName(tSite.getName()); - huiminCardSiteVO.setIds(tSite.getIds()); + HuiminCardSiteVO vo = new HuiminCardSiteVO(); + vo.setSiteId(tSite.getId()); + vo.setProvince(tSite.getProvince()); + vo.setSiteName(tSite.getName()); + vo.setIds(tSite.getIds()); - TStore store = storeService.getById(tSite.getStoreId()); - if (store != null){ - huiminCardSiteVO.setStoreName(store.getName()); + TStore store = storeMap.get(tSite.getStoreId()); + if (store != null) { + vo.setStoreName(store.getName()); } - TOperator operator = operatorService.getById(tSite.getOperatorId()); - if (operator != null){ - huiminCardSiteVO.setOperatorName(operator.getName()); + TOperator operator = operatorMap.get(tSite.getOperatorId()); + if (operator != null) { + vo.setOperatorName(operator.getName()); } - return huiminCardSiteVO; - + return vo; }); } + @PostMapping(value = "/add") @ResponseBody public Object add(THuiminCard tHuiminCard) { int a = 0; + String useIds = tHuiminCard.getUseIds(); + String[] useIdArr = useIds.split(","); if (tHuiminCard.getUseScope()==1){ - tHuiminCard.setStoreIds(tHuiminCard.getUseIds()); + tHuiminCard.setStoreIds(useIds); + String useId = useIdArr[0]; + TStore store = storeService.getById(useId); + tHuiminCard.setOperatorId(store.getOperatorId()); }else{ StringBuilder storeIds = new StringBuilder(); - for (String s : tHuiminCard.getUseIds().split(",")) { + for (String s : useIdArr) { TSite site = tSiteService.getById(s); if (site!=null){ storeIds.append(site.getStoreId()).append(","); @@ -197,7 +273,12 @@ } StringBuilder stringBuilder = storeIds.deleteCharAt(storeIds.length() - 1); tHuiminCard.setStoreIds(stringBuilder.toString()); + + String useId = useIdArr[0]; + TSite site = tSiteService.getById(useId); + tHuiminCard.setOperatorId(site.getOperatorId()); } + huiminCardClient.save(tHuiminCard); return SUCCESS_TIP; } -- Gitblit v1.7.1