| | |
| | | package com.dsh.guns.modular.system.controller.code; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.api.R; |
| | | 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.IStoreService; |
| | | import com.dsh.guns.modular.system.service.ITSiteService; |
| | | import com.dsh.guns.modular.system.service.TOperatorService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.ui.Model; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 惠民卡控制器 |
| | | * 玩湃惠民卡控制器 |
| | | * |
| | | * @author fengshuonan |
| | | * @Date 2025-03-29 17:41:25 |
| | |
| | | |
| | | @Autowired |
| | | private HuiminCardClient huiminCardClient; |
| | | @Autowired |
| | | private IStoreService storeService; |
| | | @Autowired |
| | | private TOperatorService operatorService; |
| | | @Autowired |
| | | private ITSiteService tSiteService; |
| | | |
| | | /** |
| | | * 跳转到惠民卡首页 |
| | | * 跳转到玩湃惠民卡首页 |
| | | */ |
| | | @RequestMapping("") |
| | | public String index() { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 跳转到添加惠民卡 |
| | | * 跳转到添加玩湃惠民卡 |
| | | */ |
| | | @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,Model model) { |
| | | User user = UserExt.getUser(); |
| | | model.addAttribute("objectType", user.getObjectType()); |
| | | return PREFIX + "tHuiminCard_detail.html"; |
| | | } |
| | | |
| | | /** |
| | | * 获取玩湃惠民卡详情 |
| | | */ |
| | | @RequestMapping("/getDetail") |
| | | @ResponseBody |
| | | public THuiminCard getDetail(Integer id,Model model) { |
| | | User user = UserExt.getUser(); |
| | | model.addAttribute("objectType", user.getObjectType()); |
| | | return huiminCardClient.getById(id); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取玩湃惠民卡列表 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/list") |
| | | @ResponseBody |
| | | 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)); |
| | | } |
| | | |
| | | /** |
| | | * 获取门店列表 |
| | | */ |
| | | @RequestMapping(value = "/storeList") |
| | | @ResponseBody |
| | | public Object storeList(Page<TStore> page, HuiminCardStoreQuery query) { |
| | | String storeIds = query.getStoreIds(); |
| | | String[] ids = {}; |
| | | 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()) |
| | | .eq(query.getOperatorId() != null, TStore::getOperatorId, query.getOperatorId()) |
| | | .like(!StringUtils.isEmpty(query.getStoreName()), TStore::getName, query.getStoreName()) |
| | | .orderByDesc(TStore::getCreateTime)); |
| | | return storePage.convert(tStore -> { |
| | | HuiminCardStoreVO huiminCardStoreVO = new HuiminCardStoreVO(); |
| | | huiminCardStoreVO.setStoreId(tStore.getId()); |
| | | huiminCardStoreVO.setProvince(tStore.getProvince()); |
| | | huiminCardStoreVO.setStoreName(tStore.getName()); |
| | | huiminCardStoreVO.setIds(tStore.getIds()); |
| | | TOperator operator = operatorService.getById(tStore.getOperatorId()); |
| | | if (operator != null){ |
| | | huiminCardStoreVO.setOperatorName(operator.getName()); |
| | | huiminCardStoreVO.setOperatorId(tStore.getOperatorId()); |
| | | } |
| | | return huiminCardStoreVO; |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 获取场地列表 |
| | | */ |
| | | @RequestMapping(value = "/siteList") |
| | | @ResponseBody |
| | | public Object siteList(Page<TSite> page, HuiminCardStoreQuery query) { |
| | | String storeName = query.getStoreName(); |
| | | List<String> storeIds = new ArrayList<>(); |
| | | |
| | | // 收集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); |
| | | } |
| | | |
| | | |
| | | // 处理用户权限过滤(objectType为2) |
| | | Integer operatorId = query.getOperatorId(); |
| | | User user = UserExt.getUser(); |
| | | if (user != null && user.getObjectType() == 2) { |
| | | operatorId = user.getObjectId(); |
| | | }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(operatorId != null, TSite::getOperatorId, operatorId) |
| | | .ne(TSite::getState,3) |
| | | .eq(TSite::getSign,0) |
| | | .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 vo = new HuiminCardSiteVO(); |
| | | vo.setSiteId(tSite.getId()); |
| | | vo.setProvince(tSite.getProvince()); |
| | | vo.setSiteName(tSite.getName()); |
| | | vo.setIds(tSite.getIds()); |
| | | |
| | | TStore store = storeMap.get(tSite.getStoreId()); |
| | | if (store != null) { |
| | | vo.setStoreName(store.getName()); |
| | | } |
| | | |
| | | TOperator operator = operatorMap.get(tSite.getOperatorId()); |
| | | if (operator != null) { |
| | | vo.setOperatorName(operator.getName()); |
| | | } |
| | | 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(useIds); |
| | | String useId = useIdArr[0]; |
| | | TStore store = storeService.getById(useId); |
| | | tHuiminCard.setOperatorId(store.getOperatorId()); |
| | | }else{ |
| | | StringBuilder storeIds = new StringBuilder(); |
| | | 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; |
| | | } |
| | | @RequestMapping(value = "/update") |
| | | @ResponseBody |
| | | public Object update(THuiminCard tHuiminCard) { |
| | | if (tHuiminCard.getUseScope()==1){ |
| | | tHuiminCard.setStoreIds(tHuiminCard.getUseIds()); |
| | | }else{ |
| | | StringBuilder storeIds = new StringBuilder(); |
| | | for (String s : tHuiminCard.getUseIds().split(",")) { |
| | | TSite site = tSiteService.getById(s); |
| | | if (site!=null){ |
| | | storeIds.append(site.getStoreId()).append(","); |
| | | } |
| | | } |
| | | StringBuilder stringBuilder = storeIds.deleteCharAt(storeIds.length() - 1); |
| | | tHuiminCard.setStoreIds(stringBuilder.toString()); |
| | | } |
| | | huiminCardClient.updateById(tHuiminCard); |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | @RequestMapping(value = "/delete") |
| | | @ResponseBody |
| | | public Object delete(@RequestParam String ids) { |
| | | if (StringUtils.isEmpty(ids)) { |
| | | throw new IllegalArgumentException("参数ids不能为空"); |
| | | } |
| | | String[] idStrings = ids.split(","); |
| | | List<Integer> idList = new ArrayList<>(idStrings.length); |
| | | |
| | | for (String idStr : idStrings) { |
| | | idStr = idStr.trim(); |
| | | if (!idStr.isEmpty()) { |
| | | idList.add(Integer.parseInt(idStr)); |
| | | } |
| | | } |
| | | huiminCardClient.deleteBatchIds(idList); |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | /** |
| | | * 上下架状态修改 |
| | | */ |
| | | @RequestMapping(value = "/changeState") |
| | | @ResponseBody |
| | | public Object changeState(Integer id, Integer status) { |
| | | String s = huiminCardClient.changeState(id, status); |
| | | System.out.println(s); |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | |
| | | |
| | | /* *//** |
| | | * 跳转到修改玩湃惠民卡 |
| | | *//* |
| | | @RequestMapping("/tHuiminCard_update/{tHuiminCardId}") |
| | | public String tHuiminCardUpdate(@PathVariable Integer tHuiminCardId, Model model) { |
| | |
| | | } |
| | | |
| | | *//** |
| | | * 获取惠民卡列表 |
| | | * 获取玩湃惠民卡列表 |
| | | *//* |
| | | @RequestMapping(value = "/list") |
| | | @ResponseBody |
| | |
| | | return huiminCardClient.selectList(null); |
| | | } |
| | | |
| | | *//** |
| | | * 新增惠民卡 |
| | | *//* |
| | | @RequestMapping(value = "/add") |
| | | @ResponseBody |
| | | public Object add(THuiminCard tHuiminCard) { |
| | | huiminCardClient.insert(tHuiminCard); |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | |
| | | |
| | | *//** |
| | | * 删除惠民卡 |
| | | *//* |
| | | @RequestMapping(value = "/delete") |
| | | @ResponseBody |
| | | public Object delete(@RequestParam Integer tHuiminCardId) { |
| | | huiminCardClient.deleteById(tHuiminCardId); |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | *//** |
| | | * 修改惠民卡 |
| | | * 修改玩湃惠民卡 |
| | | *//* |
| | | @RequestMapping(value = "/update") |
| | | @ResponseBody |
| | |
| | | } |
| | | |
| | | *//** |
| | | * 惠民卡详情 |
| | | * 玩湃惠民卡详情 |
| | | *//* |
| | | @RequestMapping(value = "/detail/{tHuiminCardId}") |
| | | @ResponseBody |