林小张 2 месяцев назад
Родитель
Сommit
9227dbfc88

+ 1 - 1
ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java

@@ -89,7 +89,7 @@ public class LoginHelper {
     public static Long getUserId() {
         // ⚠️⚠️⚠️ 临时测试代码,登录功能完成后必须删除 ⚠️⚠️⚠️
         // TODO: 临时返回固定的客户ID用于测试PC端接口,登录功能完成后删除此行
-        return 2009201047173152769L;
+         return 2009201047173152769L;
 
         // 原来的代码(登录功能完成后恢复)
         // return Convert.toLong(getExtra(USER_KEY));

+ 1 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAuthorizeServiceImpl.java

@@ -318,7 +318,7 @@ public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorize
     @Override
     public Boolean insertByBo(SupplierAuthorizeBo bo) {
         SupplierAuthorize add = MapstructUtils.convert(bo, SupplierAuthorize.class);
-        stringRedisTemplate.opsForValue().set(RedisConstants.SUPPLY_CAPACITY_KEY+add.getId(),add);
+        // stringRedisTemplate.opsForValue().set(RedisConstants.SUPPLY_CAPACITY_KEY+add.getId(),add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag){
             add.setId(add.getId());

+ 171 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/pc/controller/PcOrderController.java

@@ -0,0 +1,171 @@
+package org.dromara.order.pc.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.order.domain.bo.OrderMainBo;
+import org.dromara.order.domain.vo.OrderMainVo;
+import org.dromara.order.domain.vo.OrderProductVo;
+import org.dromara.order.domain.vo.OrderStatusStats;
+import org.dromara.order.service.IOrderMainService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.validation.constraints.NotNull;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * PC端 - 订单管理
+ * 前端访问路由地址为:/pc/enterprise/order
+ *
+ * @author Claude
+ * @date 2026-01-28
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/enterprise/order")
+public class PcOrderController extends BaseController {
+
+    private final IOrderMainService orderMainService;
+
+    /**
+     * 查询当前企业的订单列表
+     * PC端用户只能查询自己企业的订单
+     */
+    @GetMapping("/list")
+    public TableDataInfo<OrderMainVo> list(OrderMainBo bo, PageQuery pageQuery) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止越权访问
+        bo.setCustomerId(customerId);
+
+        return orderMainService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 查询当前企业的订单状态统计
+     * 返回各状态订单数量
+     */
+    @GetMapping("/statusStats")
+    public R<OrderStatusStats> getStatusStats() {
+        return R.ok(orderMainService.queryOrderStatusStats());
+    }
+
+    /**
+     * 获取订单详细信息
+     * PC端用户只能查询自己企业的订单
+     *
+     * @param id 订单主键
+     */
+    @GetMapping("/{id}")
+    public R<OrderMainVo> getInfo(@NotNull(message = "主键不能为空")
+                                  @PathVariable("id") Long id) {
+        // 查询订单信息
+        OrderMainVo vo = orderMainService.queryById(id);
+
+        // 验证订单是否属于当前用户的企业
+        if (vo != null) {
+            Long customerId = LoginHelper.getUserId();
+            if (!customerId.equals(vo.getCustomerId())) {
+                return R.fail("无权访问该订单");
+            }
+        }
+
+        return R.ok(vo);
+    }
+
+    /**
+     * 根据订单ID查询订单商品明细
+     * PC端用户只能查询自己企业的订单商品
+     *
+     * @param orderIds 订单ID列表
+     */
+    @GetMapping("/products")
+    public TableDataInfo<OrderProductVo> getOrderProducts(@RequestParam("orderIds") List<Long> orderIds) {
+        if (orderIds == null || orderIds.isEmpty()) {
+            throw new IllegalArgumentException("订单ID列表不能为空");
+        }
+        if (orderIds.size() > 1000) {
+            throw new IllegalArgumentException("订单ID数量不能超过1000个");
+        }
+
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证所有订单是否都属于当前用户的企业
+        for (Long orderId : orderIds) {
+            OrderMainVo order = orderMainService.queryById(orderId);
+            if (order == null) {
+                throw new IllegalArgumentException("订单ID " + orderId + " 不存在");
+            }
+            if (!customerId.equals(order.getCustomerId())) {
+                throw new IllegalArgumentException("无权访问订单ID " + orderId);
+            }
+        }
+
+        Set<Long> uniqueOrderIds = new HashSet<>(orderIds);
+        return orderMainService.getCustomerOrderProductList(uniqueOrderIds);
+    }
+
+    /**
+     * 取消订单
+     * PC端用户只能取消自己企业的订单
+     *
+     * @param bo 订单业务对象
+     */
+    @Log(title = "PC端-订单管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/cancel")
+    public R<Void> cancelOrder(@RequestBody OrderMainBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证订单是否属于当前用户的企业
+        OrderMainVo existingOrder = orderMainService.queryById(bo.getId());
+        if (existingOrder == null) {
+            return R.fail("订单不存在");
+        }
+        if (!customerId.equals(existingOrder.getCustomerId())) {
+            return R.fail("无权取消该订单");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(orderMainService.updateStatus(bo));
+    }
+
+    /**
+     * 审核订单
+     * PC端企业客户审核自己企业的订单
+     *
+     * @param bo 订单业务对象
+     */
+    @Log(title = "PC端-订单审核", businessType = BusinessType.UPDATE)
+    @PutMapping("/checkStatus")
+    public R<Void> checkStatus(@RequestBody OrderMainBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证订单是否属于当前用户的企业
+        OrderMainVo existingOrder = orderMainService.queryById(bo.getId());
+        if (existingOrder == null) {
+            return R.fail("订单不存在");
+        }
+        if (!customerId.equals(existingOrder.getCustomerId())) {
+            return R.fail("无权审核该订单");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(orderMainService.updateCheckStatus(bo));
+    }
+}

+ 144 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/pc/controller/PcOrderReturnController.java

@@ -0,0 +1,144 @@
+package org.dromara.order.pc.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.order.domain.bo.OrderReturnBo;
+import org.dromara.order.domain.vo.OrderReturnVo;
+import org.dromara.order.service.IOrderReturnService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * PC端 - 售后服务管理
+ * 前端访问路由地址为:/pc/enterprise/orderReturn
+ *
+ * @author Claude
+ * @date 2026-01-29
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/enterprise/orderReturn")
+public class PcOrderReturnController extends BaseController {
+
+    private final IOrderReturnService orderReturnService;
+
+    /**
+     * 查询当前企业的售后申请列表
+     * PC端用户只能查询自己企业的售后记录
+     */
+    @GetMapping("/list")
+    public TableDataInfo<OrderReturnVo> list(OrderReturnBo bo, PageQuery pageQuery) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止越权访问
+        bo.setCustomerId(customerId);
+
+        return orderReturnService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 获取售后申请详细信息
+     * PC端用户只能查询自己企业的售后记录
+     *
+     * @param id 主键
+     */
+    @GetMapping("/{id}")
+    public R<OrderReturnVo> getInfo(@NotNull(message = "主键不能为空")
+                                    @PathVariable("id") Long id) {
+        // 查询售后信息
+        OrderReturnVo vo = orderReturnService.queryById(id);
+
+        // 验证售后记录是否属于当前用户的企业
+        if (vo != null) {
+            Long customerId = LoginHelper.getUserId();
+            if (!customerId.equals(vo.getCustomerId())) {
+                return R.fail("无权访问该售后记录");
+            }
+        }
+
+        return R.ok(vo);
+    }
+
+    /**
+     * 新增售后申请
+     * 企业客户申请退货/售后服务
+     */
+    @Log(title = "PC端-售后服务", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody OrderReturnBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止为其他企业创建售后申请
+        bo.setCustomerId(customerId);
+
+        return toAjax(orderReturnService.insertByBo(bo));
+    }
+
+    /**
+     * 修改售后申请
+     * 企业客户修改自己的售后申请(仅限未审核状态)
+     */
+    @Log(title = "PC端-售后服务", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody OrderReturnBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证售后记录是否属于当前用户的企业
+        OrderReturnVo existingReturn = orderReturnService.queryById(bo.getId());
+        if (existingReturn == null) {
+            return R.fail("售后记录不存在");
+        }
+        if (!customerId.equals(existingReturn.getCustomerId())) {
+            return R.fail("无权修改该售后记录");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(orderReturnService.updateByBo(bo));
+    }
+
+    /**
+     * 删除售后申请
+     * 企业客户删除自己的售后申请(仅限未审核状态)
+     *
+     * @param ids 主键串
+     */
+    @Log(title = "PC端-售后服务", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证所有售后记录是否都属于当前用户的企业
+        for (Long id : ids) {
+            OrderReturnVo orderReturn = orderReturnService.queryById(id);
+            if (orderReturn == null) {
+                return R.fail("售后记录ID " + id + " 不存在");
+            }
+            if (!customerId.equals(orderReturn.getCustomerId())) {
+                return R.fail("无权删除售后记录ID " + id);
+            }
+        }
+
+        return toAjax(orderReturnService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 10 - 2
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java

@@ -220,12 +220,20 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
         lqw.eq(StringUtils.isNotBlank(bo.getOrderCategory()), OrderMain::getOrderCategory, bo.getOrderCategory());
         lqw.eq(StringUtils.isNotBlank(bo.getExpenseType()), OrderMain::getExpenseType, bo.getExpenseType());
         lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OrderMain::getStatus, bo.getStatus());
+        // 关键词搜索:精确匹配订单号
+        if (StringUtils.isNotBlank(bo.getSearchValue())) {
+            lqw.eq(OrderMain::getOrderNo, bo.getSearchValue().trim());
+        }
         if (params != null) {
             lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
                 OrderMain::getOrderTime, params.get("beginTime"), params.get("endTime"));
         }
-        if (null != bo.getOrderStatuses() && bo.getOrderStatuses().contains(",")) {
-            lqw.in(OrderMain::getOrderStatus, bo.getOrderStatuses().split(","));
+        if (StringUtils.isNotBlank(bo.getOrderStatuses())) {
+            if (bo.getOrderStatuses().contains(",")) {
+                lqw.in(OrderMain::getOrderStatus, bo.getOrderStatuses().split(","));
+            } else {
+                lqw.eq(OrderMain::getOrderStatus, bo.getOrderStatuses());
+            }
         }
         return lqw;
     }

+ 6 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ComStaffVo.java

@@ -9,7 +9,9 @@ import cn.idev.excel.annotation.ExcelProperty;
 import org.dromara.common.excel.annotation.ExcelDictFormat;
 import org.dromara.common.excel.convert.ExcelDictConvert;
 import io.github.linpeilie.annotations.AutoMapper;
+import io.github.linpeilie.annotations.AutoMappers;
 import lombok.Data;
+import org.dromara.system.api.domain.vo.RemoteComStaffVo;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -24,7 +26,10 @@ import java.util.Date;
  */
 @Data
 @ExcelIgnoreUnannotated
-@AutoMapper(target = ComStaff.class)
+@AutoMappers({
+    @AutoMapper(target = ComStaff.class),
+    @AutoMapper(target = RemoteComStaffVo.class)
+})
 public class ComStaffVo implements Serializable {
 
     @Serial