From 08fa8e80848e24bdead6b549ddd0f12333375154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 14 May 2026 15:14:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(quotation):=20=E6=96=B0=E5=A2=9E=E4=B8=8B?= =?UTF-8?q?=E5=B1=9E=E6=8A=A5=E4=BB=B7=E5=8D=95=E5=8F=8A=E4=B8=8B=E5=B1=9E?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增SubordinateQuotationSearchRequest请求类定义下属报价查询参数 - 在QuotationShoppingOrderMapper及xml中增加getQuotationOfSubordinate方法及对应SQL查询 - 在QuotationShoppingOrderService及实现类中添加获取下属报价单接口逻辑 - 修改ShoppingController,新增获取下属列表和下属报价单两个接口 - 调整购物车模块中目标名称展示,使用固定企业名称常量替代原有逻辑 - 修改AdminUserService接口中getByDepartmentIds方法参数为集合类型以支持多部门查询 - 在Constant中新增企业名称和工夫工单类型常量定义 - Optimized 部分查询中对代理商和内部用户的处理逻辑验证和权限控制 --- .../common/constant/Constant.java | 2 + .../SubordinateQuotationSearchRequest.java | 32 ++++++++ .../controller/app/ShoppingController.java | 73 ++++++++++++++++--- .../mapper/QuotationShoppingOrderMapper.java | 3 + .../repository/service/IAdminUserService.java | 3 +- .../IQuotationShoppingOrderService.java | 4 + .../service/impl/AdminUserServiceImpl.java | 2 +- .../QuotationShoppingOrderServiceImpl.java | 6 ++ .../mapper/QuotationShoppingOrderMapper.xml | 23 +++++- 9 files changed, 132 insertions(+), 16 deletions(-) create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SubordinateQuotationSearchRequest.java diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java index 4138c9e3..69b101b8 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java @@ -171,6 +171,8 @@ public class Constant { public static final String DICTIONARY_TICKET_QUESTION = "Question"; public static final Integer TICKET_TYPE_MOBILE_BROKEN = 0; + public static final Integer TICKET_TYPE_GONGFU = 1; + public static final String COMPANY_NAME="福建南方路面机械股份有限公司"; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SubordinateQuotationSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SubordinateQuotationSearchRequest.java new file mode 100644 index 00000000..706398bf --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SubordinateQuotationSearchRequest.java @@ -0,0 +1,32 @@ +package com.nflg.mobilebroken.common.pojo.request; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.util.List; + +@Data +public class SubordinateQuotationSearchRequest extends PageRequest{ + + /** + * 报价主体 + */ + private Integer targetId; + + /** + * 创建人id + */ + private Integer createById; + + /** + * 用户类型,0:内部用户,1:代理商 + */ + @JsonIgnore + private Integer userType; + + /** + * 创建人id列表 + */ + @JsonIgnore + private List createByIds; +} diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java index e44b9d2a..a7f2fe21 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java @@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.dto.ModelConfigEffectiveDTO; @@ -12,6 +13,7 @@ import com.nflg.mobilebroken.common.pojo.dto.QuotationDiscountDTO; import com.nflg.mobilebroken.common.pojo.dto.QuotationModelRatioDirectItemDTO; import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest; import com.nflg.mobilebroken.common.pojo.request.ShoppingSearchRequest; +import com.nflg.mobilebroken.common.pojo.request.SubordinateQuotationSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.ModelPrice1VO; import com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO; import com.nflg.mobilebroken.common.pojo.vo.ShoppingSearchVO; @@ -132,6 +134,9 @@ public class ShoppingController extends ControllerBase { @Resource private RedisTemplate redisTemplate; + @Resource + private ITBaseDepartmentService departmentService; + /** * 购物车-获取报价主体 */ @@ -150,8 +155,8 @@ public class ShoppingController extends ControllerBase { } else { return ApiResult.success(List.of( new SimpleUserVO() - .setUserId(AppUserUtil.getUserId()) - .setUserName("福建南方路面机械股份有限公司") + .setUserId(0) + .setUserName(Constant.COMPANY_NAME) ) ); } @@ -615,14 +620,11 @@ public class ShoppingController extends ControllerBase { } boolean isAgent = AppUserUtil.isAgent(); List customers; - List endUsers; if (isAgent) { customers = customerService.lambdaQuery() .in(TBaseCustomer::getId, datas.getRecords().stream().map(QuotationSearchVO::getTargetId).collect(Collectors.toList())) .list(); - endUsers = null; } else { - endUsers = appUserService.getEndUsers(); customers = null; } return ApiResult.success(datas, data -> { @@ -635,14 +637,8 @@ public class ShoppingController extends ControllerBase { .orElse("") ); } else { - data.setTargetName(endUsers.stream() - .filter(item -> item.getId().equals(data.getTargetId())) - .map(AppUser::getName) - .findFirst() - .orElse("") - ); + data.setTargetName(Constant.COMPANY_NAME); } - //TODO 设置汇率价格 return data; }); } @@ -994,4 +990,57 @@ public class ShoppingController extends ControllerBase { return adminUserService.getById(AppUserUtil.getUserId()).getQuotationCode(); } } + + /** + * 获取下属列表 + */ + @GetMapping("/getSubordinate") + public ApiResult> getSubordinate() { + if (AppUserUtil.isAgent()) { + return ApiResult.success( + appUserService.getChildren(appUserService.getById(AppUserUtil.getUserId())) + .stream() + .map(user -> new SimpleUserVO() + .setUserId(user.getId()) + .setUserName(user.getName()) + ) + .collect(Collectors.toList()) + ); + } else { + AdminUser adminUser = adminUserService.getById(AppUserUtil.getUserId()); + Set deptIds = departmentService.getAllChildrenIds(adminUser.getDepartmentId()); + return ApiResult.success( + adminUserService.getByDepartmentIds(deptIds) + .stream() + .map(user -> new SimpleUserVO() + .setUserId(user.getId()) + .setUserName(user.getUserName()) + ) + .collect(Collectors.toList()) + ); + } + } + + /** + * 获取下属报价单 + */ + @PostMapping("/getQuotationOfSubordinate") + public ApiResult> getQuotationOfSubordinate(@Valid @RequestBody SubordinateQuotationSearchRequest request){ + VUtils.trueThrowBusinessError(AppUserUtil.isAgent() && !AppUserUtil.isPrimary()) + .throwMessage("你不是代理商主账号无权查看"); + if (Objects.isNull(request.getCreateById())){ + request.setCreateByIds( + appUserService.getChildren(appUserService.getById(AppUserUtil.getUserId())) + .stream() + .map(AppUser::getId) + .collect(Collectors.toList()) + ); + }else { + request.setCreateByIds(List.of(request.getCreateById())); + } + if (!AppUserUtil.isAgent()){ + request.setTargetId(null); + } + return ApiResult.success(shoppingOrderService.getQuotationOfSubordinate(request)); + } } \ No newline at end of file diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderMapper.java index a4e18fd5..1af4feeb 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest; import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest; +import com.nflg.mobilebroken.common.pojo.request.SubordinateQuotationSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO; import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -21,4 +22,6 @@ public interface QuotationShoppingOrderMapper extends BaseMapper search(QuotationSearchRequest request, Page page); IPage searchFromAdmin(QuotationAdminSearchRequest request, Page page); + + IPage getQuotationOfSubordinate(SubordinateQuotationSearchRequest request, Page page); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java index 401a628d..549e71e8 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminUserService.java @@ -7,6 +7,7 @@ import com.nflg.mobilebroken.common.pojo.vo.AdminUserSimpleVO; import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO; import com.nflg.mobilebroken.repository.entity.AdminUser; +import java.util.Collection; import java.util.List; /** @@ -63,5 +64,5 @@ public interface IAdminUserService extends IService { List searchNew(SearchAccountRequest request); - List getByDepartmentIds(List departmentIds); + List getByDepartmentIds(Collection departmentIds); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderService.java index 4cdfb4b3..501ca672 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderService.java @@ -1,8 +1,10 @@ package com.nflg.mobilebroken.repository.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest; import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest; +import com.nflg.mobilebroken.common.pojo.request.SubordinateQuotationSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO; import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder; import com.baomidou.mybatisplus.extension.service.IService; @@ -22,4 +24,6 @@ public interface IQuotationShoppingOrderService extends IService search(QuotationSearchRequest request); IPage searchFromAdmin(QuotationAdminSearchRequest request); + + IPage getQuotationOfSubordinate(SubordinateQuotationSearchRequest request); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index 5530c21a..a864c8f3 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -527,7 +527,7 @@ public class AdminUserServiceImpl extends ServiceImpl getByDepartmentIds(List departmentIds) { + public List getByDepartmentIds(Collection departmentIds) { return lambdaQuery() .eq(AdminUser::getIsDel, false) .eq(AdminUser::getState, 1) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderServiceImpl.java index 6576185c..0d03eb79 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest; import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest; +import com.nflg.mobilebroken.common.pojo.request.SubordinateQuotationSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO; import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder; import com.nflg.mobilebroken.repository.mapper.QuotationShoppingOrderMapper; @@ -31,4 +32,9 @@ public class QuotationShoppingOrderServiceImpl extends ServiceImpl searchFromAdmin(QuotationAdminSearchRequest request) { return baseMapper.searchFromAdmin(request, new Page<>(request.getPage(), request.getPageSize())); } + + @Override + public IPage getQuotationOfSubordinate(SubordinateQuotationSearchRequest request) { + return baseMapper.getQuotationOfSubordinate(request, new Page<>(request.getPage(), request.getPageSize())); + } } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderMapper.xml index 24aa8ade..80397702 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderMapper.xml @@ -24,7 +24,7 @@ + + \ No newline at end of file