Explorar o código

Merge remote-tracking branch 'origin/master' into master

肖路 hai 1 mes
pai
achega
9fee9f3c0f
Modificáronse 14 ficheiros con 184 adicións e 49 borrados
  1. 17 0
      ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/domain/dto/CustomerInfoDTO.java
  2. 5 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/constant/CustomerConstants.java
  3. 23 4
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/pc/CustomerRegisterController.java
  4. 1 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/pc/PcPurchaseHabitController.java
  5. 17 17
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/VisitRoutine.java
  6. 3 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SalesleadsBo.java
  7. 1 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerContactServiceImpl.java
  8. 3 14
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SalesAnnualFinalizationServiceImpl.java
  9. 46 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SalesleadsServiceImpl.java
  10. 3 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/SalesleadsMapper.xml
  11. 6 4
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java
  12. 8 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderReturnServiceImpl.java
  13. 44 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderStatusLogServiceImpl.java
  14. 7 7
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java

+ 17 - 0
ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/domain/dto/CustomerInfoDTO.java

@@ -16,10 +16,27 @@ public class CustomerInfoDTO implements Serializable {
 
     private String customerNo;
 
+    /**
+     * 业务负责人
+     */
+    private Long salesPersonId;
+
+    /**
+     * 客服支持
+     */
+    private Long serviceStaffId;
+
+    /**
+     * 所属部门
+     */
+    private Long belongingDepartmentId;
+
     /**
      * 状态(0已审核 待审核)
      */
     private String status;
 
 
+
+
 }

+ 5 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/constant/CustomerConstants.java

@@ -16,6 +16,11 @@ public interface CustomerConstants {
      */
     String PROJECT_TYPE_LEADS = "销售线索";
 
+    /**
+     * 项目商机类型
+     */
+    String PROJECT_TYPE_OPPORTUNITY = "销售商机";
+
     /**
      * 数据类型:销售线索/项目商机
      */

+ 23 - 4
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/pc/CustomerRegisterController.java

@@ -7,15 +7,16 @@ package org.dromara.customer.controller.pc;
 
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.StringUtils;
 import org.dromara.customer.domain.bo.CustomerRegisterBo;
 import org.dromara.customer.domain.bo.SupplierRegisterBo;
+import org.dromara.customer.domain.vo.CustomerInfoVo;
 import org.dromara.customer.service.ICustomerInfoService;
 import org.dromara.customer.service.ISupplierInfoService;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @Validated
 @RequiredArgsConstructor
@@ -27,6 +28,24 @@ public class CustomerRegisterController {
 
     private final ISupplierInfoService supplierInfoService;
 
+    /**
+     * 获取客户名称模糊查询客户列表信息
+     *
+     * @param customerName 主键
+     */
+    @GetMapping("/selectByCustomerName/{customerName}")
+    public R<List<CustomerInfoVo>> selectByCustomerName(
+        @PathVariable("customerName") String customerName) {
+
+        if (StringUtils.isBlank(customerName)) {
+            return R.fail("客户名称不能为空");
+        }
+
+        List<CustomerInfoVo> customerInfoVoList = customerInfoService.selectByCustomerName(customerName);
+
+        return R.ok(customerInfoVoList);
+    }
+
     /**
      * 验证密码与验证码
      */

+ 1 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/pc/PcPurchaseHabitController.java

@@ -31,7 +31,7 @@ public class PcPurchaseHabitController extends BaseController {
      */
     @Log(title = "PC-客户采购习惯", businessType = BusinessType.INSERT)
     @PostMapping()
-    public R<Void> add(@Validated(AddGroup.class) @RequestBody PurchaseHabitBo bo) {
+    public R<Void> add( @RequestBody PurchaseHabitBo bo) {
         // 获取当前登录用户的企业ID
         Long customerId = LoginHelper.getLoginUser().getCustomerId();
         // 强制设置企业ID,防止为其他企业添加地址

+ 17 - 17
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/VisitRoutine.java

@@ -34,73 +34,73 @@ public class VisitRoutine extends TenantEntity {
     /**
      * 计划编号,关联拜访计划表
      */
-    @TableField("PlanNo")
+    @TableField("plan_no")
     private String planNo;
 
     /**
      * 日程编号,唯一标识
      */
-    @TableField("ScheduleNo")
+    @TableField("schedule_no")
     private String scheduleNo;
 
     /**
      * 关联类型
      */
-    @TableField("RelevanceType")
+    @TableField("relevance_type")
     private Integer relevanceType;
 
     /**
      * 对象编号
      */
-    @TableField("ObjectNo")
+    @TableField("object_no")
     private String objectNo;
 
     /**
      * 对象名称
      */
-    @TableField("ObjectName")
+    @TableField("object_name")
     private String objectName;
 
     /**
      * 客户编号
      */
-    @TableField("CustomerNo")
+    @TableField("customer_no")
     private String customerNo;
 
     /**
      * 客户名称
      */
-    @TableField("CustomerName")
+    @TableField("customer_name")
     private String customerName;
 
     /**
      * 拜访人员编号
      */
-    @TableField("CallPeopleNo")
+    @TableField("call_people_no")
     private Long callPeopleNo;
 
     /**
      * 拜访人员姓名
      */
-    @TableField("CallPeopleName")
+    @TableField("call_people_name")
     private String callPeopleName;
 
     /**
      * 拜访日期
      */
-    @TableField("CallDate")
+    @TableField("call_date")
     private Date callDate;
 
     /**
      * 跟进人员编号
      */
-    @TableField("FollowPeopleNo")
+    @TableField("follow_people_no")
     private String followPeopleNo;
 
     /**
      * 跟进人员姓名
      */
-    @TableField("FollowPeopleName")
+    @TableField("follow_people_name")
     private String followPeopleName;
 
     /**
@@ -108,13 +108,13 @@ public class VisitRoutine extends TenantEntity {
      */
     @ExcelProperty(value = "紧要级别", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "1=一般,2=重要,3=紧急")
-    @TableField("ImportantLevel")
+    @TableField("Important_level")
     private Integer importantLevel;
 
     /**
      * 拜访目的
      */
-    @TableField("PurposeVisit")
+    @TableField("purpose_visit")
     private String purposeVisit;
 
     /**
@@ -122,19 +122,19 @@ public class VisitRoutine extends TenantEntity {
      */
     @ExcelProperty(value = "日程状态", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "0=未执行,1=已执行,2=放弃执行")
-    @TableField("ScheduleStatus")
+    @TableField("schedule_status")
     private Integer scheduleStatus;
 
     /**
      * 实际执行时间
      */
-    @TableField("ExecuteTime")
+    @TableField("execute_time")
     private Date executeTime;
 
     /**
      * 未执行原因
      */
-    @TableField("UnExecuteReason")
+    @TableField("un_execute_reason")
     private String unExecuteReason;
 
     /**

+ 3 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SalesleadsBo.java

@@ -129,4 +129,7 @@ public class SalesleadsBo extends TenantEntity {
 
     @Schema(description = "批量操作ID列表")
     private List<Long> ids;
+
+    @Schema(description = "保留已有项目负责人(认领时使用)")
+    private Boolean keepOldManager;
 }

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

@@ -208,6 +208,7 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
         remoteUserBo.setNickName(bo.getContactName());
         remoteUserBo.setDeptId(bo.getDeptId());
         remoteUserBo.setUserName(bo.getPhone());// 用手机号做账号
+        remoteUserBo.setPhonenumber(bo.getPhone());
         String defaultPassword = "123456";
         remoteUserBo.setPassword(BCrypt.hashpw(defaultPassword));
         remoteUserBo.setUserSonType("3");

+ 3 - 14
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SalesAnnualFinalizationServiceImpl.java

@@ -204,14 +204,6 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
         
         Long newLeaderId = bo.getNewLeaderId() != null ? bo.getNewLeaderId() : bo.getLeader();
         if (newLeaderId == null) return false;
-
-        String leaderName = bo.getLeaderName();
-        if (StrUtil.isBlank(leaderName)) {
-            List<RemoteUserVo> users = remoteUserService.selectListByIds(List.of(newLeaderId));
-            if (CollUtil.isNotEmpty(users)) {
-                leaderName = users.get(0).getNickName();
-            }
-        }
         
         boolean result = true;
         for (Long id : ids) {
@@ -228,7 +220,7 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
             SalesAnnualFinalization update = new SalesAnnualFinalization();
             update.setId(id);
             update.setLeader(newLeaderId);
-            update.setLeaderName(leaderName);
+            update.setLeaderName(bo.getLeaderName());
             boolean success = baseMapper.updateById(update) > 0;
             result = result && success;
             if (success) {
@@ -237,19 +229,16 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
                 memberBo.setDataType(2); // 年度入围
                 memberBo.setObjectNo(String.valueOf(id));
                 memberBo.setUserNo(newLeaderId);
-                memberBo.setRealName(leaderName);
+                memberBo.setRealName(bo.getLeaderName());
                 memberBo.setRoleCode(CustomerConstants.TEAM_ROLE_LEADER);
                 memberBo.setUpdateAccredit(1);
                 memberBo.setIzManager(1);
                 teamMemberService.insertOrUpdateMember(memberBo);
 
                 // 记录日志
-                operationLogService.recordLog(2, String.valueOf(id), CustomerConstants.ACTION_TYPE_TRANSFER, null, "转移了年度入围项目", leaderName);
+                operationLogService.recordLog(2, String.valueOf(id), CustomerConstants.ACTION_TYPE_TRANSFER, null, "转移了年度入围项目", bo.getLeaderName());
             }
         }
-
         return result;
     }
-
-
 }

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

@@ -45,7 +45,10 @@ public class SalesleadsServiceImpl implements ISalesleadsService {
      */
     @Override
     public SalesleadsVo queryById(Long id) {
-        return baseMapper.selectVoById(id);
+        SalesleadsBo bo = new SalesleadsBo();
+        bo.setId(id);
+        List<SalesleadsVo> list = baseMapper.selectSalesleadsList(bo);
+        return list.isEmpty() ? null : list.get(0);
     }
 
     /**
@@ -141,13 +144,28 @@ public class SalesleadsServiceImpl implements ISalesleadsService {
         // 逐条更新(批量认领场景通常数据量不大)
         boolean result = true;
         for (Long id : ids) {
+            Salesleads oldData = baseMapper.selectById(id);
             Salesleads update = new Salesleads();
             update.setId(id);
             update.setLeader(bo.getLeader());
             update.setLeaderName(bo.getLeaderName());
+            update.setIzClue(0); // 认领后转为项目商机
+            update.setProjectType(CustomerConstants.PROJECT_TYPE_OPPORTUNITY);
+            update.setStatus("0"); // 转为商机后,状态设为跟进中
             boolean success = baseMapper.updateById(update) > 0;
             result = result && success;
             if (success) {
+                // 处理原负责人逻辑
+                if (oldData != null && oldData.getLeader() != null && !oldData.getLeader().equals(bo.getLeader())) {
+                    if (Boolean.TRUE.equals(bo.getKeepOldManager())) {
+                        // 保留:将原负责人降级为普通团队成员
+                        demoteLeaderToMember(id, oldData.getLeader(), oldData.getLeaderName());
+                    } else {
+                        // 否:直接从团队中移除原负责人
+                        teamMemberService.removeMember(CustomerConstants.DATA_TYPE_LEADS, String.valueOf(id), oldData.getLeader());
+                    }
+                }
+
                 syncLeaderToTeamMember(id, bo.getLeader(), bo.getLeaderName());
                 // 记录日志
                 operationLogService.recordLog(CustomerConstants.DATA_TYPE_LEADS, String.valueOf(id), CustomerConstants.ACTION_TYPE_CLAIM, null, "认领了销售线索", bo.getLeaderName());
@@ -156,6 +174,21 @@ public class SalesleadsServiceImpl implements ISalesleadsService {
         return result;
     }
 
+    /**
+     * 将原负责人降级为普通成员
+     */
+    private void demoteLeaderToMember(Long objectNo, Long oldLeaderId, String oldLeaderName) {
+        TeamMemberBo memberBo = new TeamMemberBo();
+        memberBo.setDataType(CustomerConstants.DATA_TYPE_LEADS);
+        memberBo.setObjectNo(String.valueOf(objectNo));
+        memberBo.setUserNo(oldLeaderId);
+        memberBo.setRealName(oldLeaderName);
+        memberBo.setRoleCode("2"); // 假设 2 是普通成员(后续可根据字典调整)
+        memberBo.setIzManager(0);
+        memberBo.setUpdateAccredit(0);
+        teamMemberService.insertOrUpdateMember(memberBo);
+    }
+
     /**
      * 转移销售线索 - 更换负责人(支持批量)
      */
@@ -169,6 +202,7 @@ public class SalesleadsServiceImpl implements ISalesleadsService {
         }
         boolean result = true;
         for (Long id : ids) {
+            Salesleads oldData = baseMapper.selectById(id);
             Salesleads update = new Salesleads();
             update.setId(id);
             update.setLeader(bo.getLeader());
@@ -176,6 +210,17 @@ public class SalesleadsServiceImpl implements ISalesleadsService {
             boolean success = baseMapper.updateById(update) > 0;
             result = result && success;
             if (success) {
+                // 处理原负责人逻辑
+                if (oldData != null && oldData.getLeader() != null && !oldData.getLeader().equals(bo.getLeader())) {
+                    if (Boolean.TRUE.equals(bo.getKeepOldManager())) {
+                        // 保留:将原负责人降级为普通团队成员
+                        demoteLeaderToMember(id, oldData.getLeader(), oldData.getLeaderName());
+                    } else {
+                        // 否:直接从团队中移除原负责人
+                        teamMemberService.removeMember(CustomerConstants.DATA_TYPE_LEADS, String.valueOf(id), oldData.getLeader());
+                    }
+                }
+
                 syncLeaderToTeamMember(id, bo.getLeader(), bo.getLeaderName());
                 // 记录日志
                 operationLogService.recordLog(CustomerConstants.DATA_TYPE_LEADS, String.valueOf(id), CustomerConstants.ACTION_TYPE_TRANSFER, null, "转移了销售线索", bo.getLeaderName());

+ 3 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/SalesleadsMapper.xml

@@ -13,6 +13,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN sys_dept d ON cs.dept_id = d.dept_id
         <where>
             s.del_flag = '0'
+            <if test="bo.id != null">
+                AND s.id = #{bo.id}
+            </if>
             <if test="bo.izClue != null">
                 AND s.iz_clue = #{bo.izClue}
             </if>

+ 6 - 4
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java

@@ -24,6 +24,7 @@ import org.dromara.customer.api.RemoteCustomerSalesService;
 import org.dromara.customer.api.RemoteCustomerService;
 import org.dromara.customer.api.RemotePartnerInfoService;
 import org.dromara.customer.api.RemoteSupplierInfoService;
+import org.dromara.customer.api.domain.dto.CustomerInfoDTO;
 import org.dromara.customer.api.domain.vo.RemoteCustomerSalesVo;
 import org.dromara.external.api.zhongche.RemoteZhongChePullService;
 import org.dromara.external.api.zhongche.domain.bo.OrderConfirmBo;
@@ -576,6 +577,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long insertOrder(PcSubmitOrderBo bo, OrderMainBo mainBo) {
+        CustomerInfoDTO customerInfoDTO = remoteCustomerService.selectCustomerInfoById(mainBo.getCustomerId());
         RemoteCustomerSalesVo remoteCustomerSalesVo = remoteCustomerSalesService.selectCustomerSalesInfoByCustomerId(mainBo.getCustomerId());
 
         LoginUser userInfo = remoteUserService.getUserInfo(mainBo.getUserId(), "000000");
@@ -585,10 +587,10 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
                 mainBo.setCreateDept(userInfo.getDeptId());
             }
         }
-        if (null != remoteCustomerSalesVo) {
-            Long salesPersonId = remoteCustomerSalesVo.getSalesPersonId();//销售人员id
-            Long serviceStaffId = remoteCustomerSalesVo.getServiceStaffId();//服务人员
-            Long belongingDepartmentId = remoteCustomerSalesVo.getBelongingDepartmentId();//所属部门
+        if (null != customerInfoDTO) {
+            Long salesPersonId = customerInfoDTO.getSalesPersonId();//销售人员id
+            Long serviceStaffId = customerInfoDTO.getServiceStaffId();//服务人员
+            Long belongingDepartmentId = customerInfoDTO.getBelongingDepartmentId();//所属部门
             Set<Long> staffIds = new HashSet<>();
             Set<Long> deptIds = new HashSet<>();
 

+ 8 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderReturnServiceImpl.java

@@ -20,6 +20,7 @@ import org.dromara.order.domain.OrderReturnItem;
 import org.dromara.order.domain.OrderReturnPickCrrc;
 import org.dromara.order.domain.bo.OrderReturnBo;
 import org.dromara.order.domain.bo.OrderReturnItemBo;
+import org.dromara.order.domain.vo.OrderReturnItemVo;
 import org.dromara.order.domain.vo.OrderReturnVo;
 import org.dromara.order.mapper.OrderReturnItemMapper;
 import org.dromara.order.mapper.OrderReturnMapper;
@@ -136,6 +137,13 @@ public class OrderReturnServiceImpl extends ServiceImpl<OrderReturnMapper, Order
         if (CollUtil.isNotEmpty(records)) {
             Set<Long> customerIds = records.stream().map(OrderReturnVo::getCustomerId).collect(Collectors.toSet());
             Map<Long, String> customerMap = remoteCustomerService.selectCustomerNameByIds(customerIds);
+            List<OrderReturnItemVo> orderReturnItemList=null;
+            for (OrderReturnVo record : records) {
+                orderReturnItemList=orderReturnItemMapper.selectVoList(new LambdaQueryWrapper<OrderReturnItem>()
+                    .eq(OrderReturnItem::getReturnId, record.getId()));
+                record.setOrderReturnItemList(orderReturnItemList);
+            }
+
             records.forEach(vo -> {
                 vo.setCustomerName(customerMap.get(vo.getCustomerId()));
             });

+ 44 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderStatusLogServiceImpl.java

@@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.order.domain.OrderMain;
+import org.dromara.order.domain.vo.OrderMainVo;
+import org.dromara.order.mapper.OrderMainMapper;
 import org.springframework.stereotype.Service;
 import org.dromara.order.domain.bo.OrderStatusLogBo;
 import org.dromara.order.domain.vo.OrderStatusLogVo;
@@ -17,9 +20,11 @@ import org.dromara.order.domain.OrderStatusLog;
 import org.dromara.order.mapper.OrderStatusLogMapper;
 import org.dromara.order.service.IOrderStatusLogService;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * 订单状态流转记录Service业务层处理
@@ -34,6 +39,8 @@ public class OrderStatusLogServiceImpl extends ServiceImpl<OrderStatusLogMapper,
 
     private final OrderStatusLogMapper baseMapper;
 
+    private final OrderMainMapper orderMainMapper;
+
     /**
      * 查询订单状态流转记录
      *
@@ -54,11 +61,16 @@ public class OrderStatusLogServiceImpl extends ServiceImpl<OrderStatusLogMapper,
      */
     @Override
     public TableDataInfo<OrderStatusLogVo> queryPageList(OrderStatusLogBo bo, PageQuery pageQuery) {
+
         LambdaQueryWrapper<OrderStatusLog> lqw = buildQueryWrapper(bo);
+
         Page<OrderStatusLogVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+
         return TableDataInfo.build(result);
     }
 
+
+
     /**
      * 查询符合条件的订单状态流转记录列表
      *
@@ -74,9 +86,40 @@ public class OrderStatusLogServiceImpl extends ServiceImpl<OrderStatusLogMapper,
     private LambdaQueryWrapper<OrderStatusLog> buildQueryWrapper(OrderStatusLogBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<OrderStatusLog> lqw = Wrappers.lambdaQuery();
+        // 核心逻辑:处理主订单ID,查询其关联的所有子订单日志
+        // ==========================================
+        if (null != bo.getOrderId()) {
+            // 1. 查询订单主表信息 (注意:这里会产生一次数据库查询)
+            OrderMainVo orderMainVo = orderMainMapper.selectVoById(bo.getOrderId());
+
+            if (null != orderMainVo) {
+                List<Long> targetOrderIds = new ArrayList<>();
+
+                // 2. 加入自身ID (兼容传入的是子单ID的情况,确保能查到当前单的数据)
+                targetOrderIds.add(orderMainVo.getId());
+
+                // 3. 查询该订单下的所有子订单
+                List<OrderMain> subOrderList = orderMainMapper.selectList(
+                    new LambdaQueryWrapper<OrderMain>()
+                        .eq(OrderMain::getParentOrderId, orderMainVo.getId())
+                );
+
+                // 4. 如果有子订单,将子订单ID加入列表
+                if (subOrderList != null && !subOrderList.isEmpty()) {
+                    List<Long> subOrderIds = subOrderList.stream()
+                        .map(OrderMain::getId)
+                        .collect(Collectors.toList());
+                    targetOrderIds.addAll(subOrderIds);
+                }
+
+                // 5. 构建 IN 查询条件
+                // 这一步会替代原本的 eq("order_id", ...) 逻辑
+                lqw.in(OrderStatusLog::getOrderId, targetOrderIds);
+            }
+        }
         lqw.orderByAsc(OrderStatusLog::getId);
         lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), OrderStatusLog::getOrderNo, bo.getOrderNo());
-        lqw.eq(bo.getOrderId() != null, OrderStatusLog::getOrderId, bo.getOrderId());
+//        lqw.eq(bo.getOrderId() != null, OrderStatusLog::getOrderId, bo.getOrderId());
         lqw.eq(StringUtils.isNotBlank(bo.getCustomerNo()), OrderStatusLog::getCustomerNo, bo.getCustomerNo());
         lqw.eq(bo.getCustomerId() != null, OrderStatusLog::getCustomerId, bo.getCustomerId());
         lqw.eq(StringUtils.isNotBlank(bo.getDeliverMethod()), OrderStatusLog::getDeliverMethod, bo.getDeliverMethod());

+ 7 - 7
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java

@@ -47,7 +47,7 @@ public class SysDeptController extends BaseController {
      *
      * @param deptId 部门ID
      */
-    @SaCheckPermission("system:dept:list")
+//    @SaCheckPermission("system:dept:list")
     @GetMapping("/list/exclude/{deptId}")
     public R<List<SysDeptVo>> excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) {
         List<SysDeptVo> depts = deptService.selectDeptList(new SysDeptBo());
@@ -59,7 +59,7 @@ public class SysDeptController extends BaseController {
     /**
      * 获取部门列表
      */
-    @SaCheckPermission("system:dept:list")
+//    @SaCheckPermission("system:dept:list")
     @GetMapping("/customerDeptList/{customerId}")
     public R<List<SysDeptVo>> customerDeptList(@PathVariable(value = "customerId", required = false) Long customerId) {
         List<SysDeptVo> depts = deptService.selectCustomerDeptList(customerId);
@@ -71,7 +71,7 @@ public class SysDeptController extends BaseController {
      *
      * @param deptId 部门ID
      */
-    @SaCheckPermission("system:dept:query")
+//    @SaCheckPermission("system:dept:query")
     @GetMapping(value = "/{deptId}")
     public R<SysDeptVo> getInfo(@PathVariable Long deptId) {
         deptService.checkDeptDataScope(deptId);
@@ -81,7 +81,7 @@ public class SysDeptController extends BaseController {
     /**
      * 新增部门
      */
-    @SaCheckPermission("system:dept:add")
+//    @SaCheckPermission("system:dept:add")
     @Log(title = "部门管理", businessType = BusinessType.INSERT)
     @PostMapping
     public R<Void> add(@Validated @RequestBody SysDeptBo dept) {
@@ -94,7 +94,7 @@ public class SysDeptController extends BaseController {
     /**
      * 修改部门
      */
-    @SaCheckPermission("system:dept:edit")
+//    @SaCheckPermission("system:dept:edit")
     @Log(title = "部门管理", businessType = BusinessType.UPDATE)
     @PutMapping
     public R<Void> edit(@Validated @RequestBody SysDeptBo dept) {
@@ -119,7 +119,7 @@ public class SysDeptController extends BaseController {
      *
      * @param deptId 部门ID
      */
-    @SaCheckPermission("system:dept:remove")
+//    @SaCheckPermission("system:dept:remove")
     @Log(title = "部门管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{deptId}")
     public R<Void> remove(@PathVariable Long deptId) {
@@ -141,7 +141,7 @@ public class SysDeptController extends BaseController {
      *
      * @param deptIds 部门ID串
      */
-    @SaCheckPermission("system:dept:query")
+//    @SaCheckPermission("system:dept:query")
     @GetMapping("/optionselect")
     public R<List<SysDeptVo>> optionselect(@RequestParam(required = false) Long[] deptIds) {
         return R.ok(deptService.selectDeptByIds(deptIds == null ? null : List.of(deptIds)));