package com.ruoyi.order.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.feignClient.PartnerClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.OperatorType; import com.ruoyi.common.security.annotation.Logical; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.TOrderAppealQuery; import com.ruoyi.order.api.vo.TOrderAppealVO; import com.ruoyi.order.dto.ManageFeedbackDto; import com.ruoyi.order.dto.ManageOrderAppealQuery; import com.ruoyi.order.service.*; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.*; /** *

* 前端控制器 *

* * @author xiaochen * @since 2024-08-07 */ @RestController @RequestMapping("/t-order-appeal") public class TOrderAppealController { private final TOrderAppealService orderAppealService; private final TokenService tokenService; @Resource private AppUserClient appUserClient; @Resource private TChargingOrderService chargingOrderService; @Resource private TShoppingOrderService shoppingOrderService; @Resource private TExchangeOrderService exchangeOrderService; @Resource private TVipOrderService vipOrderService; @Resource private SysUserClient sysUserClient; @Resource private PartnerClient partnerClient; @Autowired public TOrderAppealController(TOrderAppealService orderAppealService, TokenService tokenService) { this.orderAppealService = orderAppealService; this.tokenService = tokenService; } @Resource private SiteClient siteClient; @RequiresPermissions(value = {"/appealOrder"}, logical = Logical.OR) @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "列表") @PostMapping(value = "/manage/pageList") public R> managePageList(@RequestBody ManageOrderAppealQuery manageOrderAppealQuery) { Integer pageCurr = manageOrderAppealQuery.getPageCurr(); Integer pageSize = manageOrderAppealQuery.getPageSize(); boolean hasSiteFilter = manageOrderAppealQuery.getSiteId() != null || manageOrderAppealQuery.getPartnerId() != null || manageOrderAppealQuery.getSiteType() != null; Page page = orderAppealService.lambdaQuery().eq(manageOrderAppealQuery.getStatus() != null, TOrderAppeal::getStatus, manageOrderAppealQuery.getStatus()) .like(manageOrderAppealQuery.getCode() != null, TOrderAppeal::getCode, manageOrderAppealQuery.getCode()) .like(manageOrderAppealQuery.getPhone() != null, TOrderAppeal::getPhone, manageOrderAppealQuery.getPhone()) .eq(manageOrderAppealQuery.getOrderType() != null, TOrderAppeal::getOrderType, manageOrderAppealQuery.getOrderType()) .in(TOrderAppeal::getOrderType, 1, 2) .orderByDesc(TOrderAppeal::getCreateTime) .page(Page.of(1, 99999999)); SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData(); Integer roleType = sysUser.getRoleType(); boolean partnerUser = Objects.equals(roleType, 2); Map visibleSiteMap = partnerUser || hasSiteFilter ? getVisibleSiteMap(sysUser) : Collections.emptyMap(); Set partnerSiteIds = partnerUser ? visibleSiteMap.keySet() : Collections.emptySet(); List res = new ArrayList<>(); for (TOrderAppeal record : page.getRecords()) { record.setUid(record.getId() + ""); if (!Objects.equals(record.getOrderType(), 1)) { if (!partnerUser && !hasSiteFilter) { res.add(record); } continue; } TChargingOrder chargingOrder = chargingOrderService.getById(record.getOrderId()); if (chargingOrder == null) { record.setAuthInfo(false); record.setAuthHandle(false); continue; } Integer siteId = chargingOrder.getSiteId(); if (partnerUser && !partnerSiteIds.contains(siteId)) { continue; } if (hasSiteFilter && !matchSiteFilter(siteId, visibleSiteMap, manageOrderAppealQuery)) { continue; } if (partnerUser) { List data = partnerClient.managePageListMenu(sysUser.getObjectId(), siteId).getData(); record.setAuthInfo(getMenuFlag(data, 0)); record.setAuthHandle(getMenuFlag(data, 1)); } res.add(record); } List res1 = testing4(res.size(), pageCurr, pageSize, res); page.setCurrent(pageCurr); page.setSize(pageSize); page.setTotal(res.size()); page.setRecords(res1); return R.ok(page); } Map getVisibleSiteMap(SysUser sysUser) { if (sysUser == null || sysUser.getUserId() == null) { return Collections.emptyMap(); } R> result = siteClient.getSiteListByUserId(sysUser.getUserId()); Map siteMap = new HashMap<>(); if (result == null || result.getData() == null) { return siteMap; } List data = result.getData(); if (data != null) { for (GetSiteListDTO datum : data) { if (datum != null && datum.getId() != null && datum.getId() > 0) { siteMap.put(datum.getId(), datum); } } } return siteMap; } private boolean matchSiteFilter(Integer siteId, Map siteMap, ManageOrderAppealQuery query) { if (query.getSiteId() != null && !query.getSiteId().equals(siteId)) { return false; } GetSiteListDTO site = siteMap.get(siteId); if (query.getPartnerId() != null && (site == null || !query.getPartnerId().equals(site.getPartnerId()))) { return false; } return query.getSiteType() == null || (site != null && query.getSiteType().equals(site.getSiteType())); } private boolean getMenuFlag(List menuFlags, int index) { return menuFlags != null && menuFlags.size() > index && Boolean.TRUE.equals(menuFlags.get(index)); } public static List testing4(long total, long current, long size, List str){ List result = new ArrayList<>(); //获取初始化分页结构 com.ruoyi.order.util.Page page = new com.ruoyi.order.util.Page().getPage(total, size, current - 1); //获取集合下标初始值 long startIndex = page.getStartIndex(); //获取集合下标结束值 long endInddex = 0; if(startIndex + page.getCurrent() >= total || size > total){ endInddex = total; }else { endInddex = Math.min(startIndex + page.getSize(), total); } //如果输入的开始查询下标大于集合大小,则查询为空值 if(startIndex > total){ result = Collections.emptyList(); }else{ result = str.subList((int)startIndex,(int)endInddex); } return result; } @RequiresPermissions(value = {"/appealOrder/del"}, logical = Logical.OR) @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "删除") @DeleteMapping (value = "/manage/delete") public R> delete(String ids) { orderAppealService.removeBatchByIds(Arrays.asList(ids.split(","))); return R.ok(); } @RequiresPermissions(value = {"/appealOrder/select", "/appealOrder/handle"}, logical = Logical.OR) @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "后台-订单管理-订单申诉") @PostMapping(value = "/manage/feedback") public R manageFeedback(@RequestBody ManageFeedbackDto manageFeedbackDto) { TOrderAppeal byId = orderAppealService.getById(manageFeedbackDto.getId()); byId.setFeedback(manageFeedbackDto.getFeedback()); byId.setStatus(2); orderAppealService.updateById(byId); return R.ok(); } /** * 查询订单申诉列表 */ @ApiOperation(tags = {"小程序-订单申诉"},value = "查询订单申诉分页列表") @PostMapping(value = "/pageList") public AjaxResult> pageList(@RequestBody TOrderAppealQuery query) { Long userId = tokenService.getLoginUserApplet().getUserId(); query.setAppUserId(userId); return AjaxResult.ok(orderAppealService.pageList(query)); } /** * 查询订单申诉详情 */ @GetMapping(value = "/getDetailById") @ApiOperation(tags = {"小程序-订单申诉"},value = "查询订单申诉详情") public AjaxResult getDetailById(String id) { TOrderAppeal orderAppeal = orderAppealService.getById(id); Long userId = tokenService.getLoginUserApplet().getUserId(); if(!orderAppeal.getAppUserId().equals(userId)){ return AjaxResult.error("权限不足"); } return AjaxResult.ok(orderAppealService.getDetailById(id)); } @Log(title = "【我的】申诉订单", businessType = BusinessType.INSERT,operatorType = OperatorType.MOBILE) @ResponseBody @PostMapping(value = "/addOrderAppeal") @ApiOperation(value = "申诉订单", tags = {"小程序-充电记录(个人中心)"}) public AjaxResult addOrderAppeal(@RequestBody TOrderAppeal orderAppeal){ Long appUserId = tokenService.getLoginUserApplet().getUserId(); TAppUser data = appUserClient.getUserById(appUserId).getData(); orderAppeal.setAppUserId(appUserId); orderAppeal.setStatus(1); orderAppeal.setPhone(data.getPhone()); if (orderAppeal.getOrderType()==1){ TChargingOrder byId = chargingOrderService.getById(orderAppeal.getOrderId()); orderAppeal.setCode(byId.getCode()); }else if(orderAppeal.getOrderType()==2){ TShoppingOrder byId = shoppingOrderService.getById(orderAppeal.getOrderId()); orderAppeal.setCode(byId.getCode()); }else if(orderAppeal.getOrderType()==3){ TExchangeOrder byId = exchangeOrderService.getById(orderAppeal.getOrderId()); orderAppeal.setCode(byId.getCode()); }else if(orderAppeal.getOrderType()==4){ TVipOrder byId = vipOrderService.getById(orderAppeal.getOrderId()); orderAppeal.setCode(byId.getCode()); } orderAppealService.save(orderAppeal); return AjaxResult.success(); } /** * 查询订单申诉详情 */ @GetMapping(value = "/getDetailByOrderId") @ApiOperation(tags = {"H5-通过订单id查询订单申诉"},value = "通过订单id查询订单申诉") public R getDetailByOrderId(String orderId) { TOrderAppeal orderAppeal = orderAppealService.getOne(Wrappers.lambdaQuery(TOrderAppeal.class) .eq(TOrderAppeal::getOrderId,orderId) .orderByDesc(TOrderAppeal::getCreateTime) .last("LIMIT 1")); if(Objects.isNull(orderAppeal)){ return R.ok(); } return R.ok(orderAppealService.getDetailById(String.valueOf(orderAppeal.getId()))); } }