无关风月
2025-05-08 9486766c806fe1d9e082b2fd02ea1cc558f1b443
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,16 +17,16 @@
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;
/**
 * 惠民卡控制器
 * 玩湃惠民卡控制器
 *
 * @author fengshuonan
 * @Date 2025-03-29 17:41:25
@@ -46,7 +47,7 @@
    private ITSiteService tSiteService;
    /**
     * 跳转到惠民卡首页
     * 跳转到玩湃惠民卡首页
     */
    @RequestMapping("")
    public String index() {
@@ -54,11 +55,12 @@
    }
    /**
     * 跳转到添加惠民卡
     * 跳转到添加玩湃惠民卡
     */
    @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,28 +68,40 @@
     * 跳转到详情页面
     */
    @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);
    }
    /**
     * 获取惠民卡列表
     * 获取玩湃惠民卡列表
     * @return
     */
    @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,128 @@
    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);
        }
        // 处理用户权限过滤(objectType为2)
        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;
            }
        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()));
        }
        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));
        // 最终查询条件: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 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(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;
    }
@@ -227,7 +316,7 @@
    /*  *//**
     * 跳转到修改惠民卡
     * 跳转到修改玩湃惠民卡
     *//*
    @RequestMapping("/tHuiminCard_update/{tHuiminCardId}")
    public String tHuiminCardUpdate(@PathVariable Integer tHuiminCardId, Model model) {
@@ -238,7 +327,7 @@
    }
    *//**
     * 获取惠民卡列表
     * 获取玩湃惠民卡列表
     *//*
    @RequestMapping(value = "/list")
    @ResponseBody
@@ -250,7 +339,7 @@
    *//**
     * 修改惠民卡
     * 修改玩湃惠民卡
     *//*
    @RequestMapping(value = "/update")
    @ResponseBody
@@ -260,7 +349,7 @@
    }
    *//**
     * 惠民卡详情
     * 玩湃惠民卡详情
     *//*
    @RequestMapping(value = "/detail/{tHuiminCardId}")
    @ResponseBody