| | |
| | | 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.*; |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 惠民卡控制器 |
| | |
| | | * 跳转到添加惠民卡 |
| | | */ |
| | | @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"; |
| | | } |
| | | |
| | |
| | | * 跳转到详情页面 |
| | | */ |
| | | @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"; |
| | | } |
| | | |
| | |
| | | */ |
| | | @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); |
| | | } |
| | | |
| | |
| | | */ |
| | | @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)); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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()) |
| | |
| | | TOperator operator = operatorService.getById(tStore.getOperatorId()); |
| | | if (operator != null){ |
| | | huiminCardStoreVO.setOperatorName(operator.getName()); |
| | | huiminCardStoreVO.setOperatorId(tStore.getOperatorId()); |
| | | } |
| | | return huiminCardStoreVO; |
| | | }); |
| | |
| | | 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(","); |
| | |
| | | } |
| | | 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; |
| | | } |