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.account.AppUserClient; import com.dsh.course.feignClient.account.StudentClient; import com.dsh.course.feignClient.account.model.TAppUser; 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.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 */ @Controller @RequestMapping("/tHuiminCard") public class THuiminCardController extends BaseController { private String PREFIX = "/system/tHuiminCard/"; @Autowired private HuiminCardClient huiminCardClient; @Autowired private IStoreService storeService; @Autowired private TOperatorService operatorService; @Autowired private ITSiteService tSiteService; @Autowired private AppUserClient appUserClient; @Autowired private StudentClient studentClient; /** * 跳转到玩湃惠民卡首页 */ @RequestMapping("") public String index() { return PREFIX + "tHuiminCard.html"; } /** * 跳转到添加玩湃惠民卡 */ @RequestMapping("/tHuiminCard_add") 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("/tHuiminCardAddOrder") public String tHuiminCardAddOrder(Model model) { Integer objectType = UserExt.getUser().getObjectType(); Integer objectId = UserExt.getUser().getObjectId(); model.addAttribute("role", objectType); if (objectType==1){ List list = operatorService.list(new LambdaQueryWrapper() .eq(TOperator::getState, 1)); model.addAttribute("operators", list); }else if (objectType==2){ List list = storeService.list(new LambdaQueryWrapper() .eq(TStore::getOperatorId, objectId)); model.addAttribute("stores", list); }else{ List cards = huiminCardClient.getCards(objectId + ""); model.addAttribute("cards", cards); } return PREFIX + "tHuiminCard_addOrder.html"; } @RequestMapping("/addPayHuiMing") @ResponseBody public Object addPayHuiMing(Integer studentId,Integer cardId) { huiminCardClient.addPayHuiMing(studentId ,cardId); return 200; } @RequestMapping(value = "/checkUser") @ResponseBody public Object checkUser(String phone) { TAppUser appUserByPhone = appUserClient.getAppUserByPhone(phone); if (appUserByPhone==null){ return 500; } List tStudents = studentClient.queryStudentList(appUserByPhone.getId()); if (tStudents.isEmpty()){ return 501; } return tStudents; } @RequestMapping(value = "/getStores") @ResponseBody public Object getStores(String operatorId) { if (operatorId.isEmpty()){ return new ArrayList<>(); }else{ List list = storeService.lambdaQuery().eq(TStore::getOperatorId, operatorId).list(); return list; } } @RequestMapping(value = "/getCards") @ResponseBody public Object getCards(String storeId) { List list = huiminCardClient.getCards(storeId); return list; } /** * 获取玩湃惠民卡详情 */ @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 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 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 storePage = storeService.page(page, new LambdaQueryWrapper() .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 page, HuiminCardStoreQuery query) { String storeName = query.getStoreName(); List storeIds = new ArrayList<>(); // 收集storeName条件的storeIds(不提前返回null) if (!StringUtils.isEmpty(storeName)) { List storeIdsByName = storeService.listObjs( new LambdaQueryWrapper() .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 sitePage = tSiteService.page(page, new LambdaQueryWrapper() .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 sites = sitePage.getRecords(); if (sites.isEmpty()) { return sitePage.convert(t -> null); // 返回空Page } // 收集需要的storeId和operatorId List storeIdsForVO = sites.stream().map(TSite::getStoreId).distinct().collect(Collectors.toList()); List operatorIdsForVO = sites.stream().map(TSite::getOperatorId).distinct().collect(Collectors.toList()); // 批量查询并缓存结果 Map storeMap = storeService.listByIds(storeIdsForVO) .stream() .collect(Collectors.toMap(TStore::getId, Function.identity())); Map 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 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) { THuiminCard tHuiminCard = huiminCardClient.selectById(tHuiminCardId); model.addAttribute("item",tHuiminCard); LogObjectHolder.me().set(tHuiminCard); return PREFIX + "tHuiminCard_edit.html"; } *//** * 获取玩湃惠民卡列表 *//* @RequestMapping(value = "/list") @ResponseBody public Object list(String condition) { return huiminCardClient.selectList(null); } *//** * 修改玩湃惠民卡 *//* @RequestMapping(value = "/update") @ResponseBody public Object update(THuiminCard tHuiminCard) { huiminCardClient.updateById(tHuiminCard); return SUCCESS_TIP; } *//** * 玩湃惠民卡详情 *//* @RequestMapping(value = "/detail/{tHuiminCardId}") @ResponseBody public Object detail(@PathVariable("tHuiminCardId") Integer tHuiminCardId) { return huiminCardClient.selectById(tHuiminCardId); }*/ }