feat(quotation): 新增下属报价单及下属列表接口功能
- 新增SubordinateQuotationSearchRequest请求类定义下属报价查询参数 - 在QuotationShoppingOrderMapper及xml中增加getQuotationOfSubordinate方法及对应SQL查询 - 在QuotationShoppingOrderService及实现类中添加获取下属报价单接口逻辑 - 修改ShoppingController,新增获取下属列表和下属报价单两个接口 - 调整购物车模块中目标名称展示,使用固定企业名称常量替代原有逻辑 - 修改AdminUserService接口中getByDepartmentIds方法参数为集合类型以支持多部门查询 - 在Constant中新增企业名称和工夫工单类型常量定义 - Optimized 部分查询中对代理商和内部用户的处理逻辑验证和权限控制
This commit is contained in:
parent
1316c2786c
commit
08fa8e8084
|
|
@ -171,6 +171,8 @@ public class Constant {
|
||||||
public static final String DICTIONARY_TICKET_QUESTION = "Question";
|
public static final String DICTIONARY_TICKET_QUESTION = "Question";
|
||||||
|
|
||||||
public static final Integer TICKET_TYPE_MOBILE_BROKEN = 0;
|
public static final Integer TICKET_TYPE_MOBILE_BROKEN = 0;
|
||||||
|
|
||||||
public static final Integer TICKET_TYPE_GONGFU = 1;
|
public static final Integer TICKET_TYPE_GONGFU = 1;
|
||||||
|
|
||||||
|
public static final String COMPANY_NAME="福建南方路面机械股份有限公司";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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<Integer> createByIds;
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.ApiResult;
|
||||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||||
import com.nflg.mobilebroken.common.pojo.dto.ModelConfigEffectiveDTO;
|
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.dto.QuotationModelRatioDirectItemDTO;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest;
|
import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.ShoppingSearchRequest;
|
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.ModelPrice1VO;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO;
|
import com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.ShoppingSearchVO;
|
import com.nflg.mobilebroken.common.pojo.vo.ShoppingSearchVO;
|
||||||
|
|
@ -132,6 +134,9 @@ public class ShoppingController extends ControllerBase {
|
||||||
@Resource
|
@Resource
|
||||||
private RedisTemplate<String, Integer> redisTemplate;
|
private RedisTemplate<String, Integer> redisTemplate;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ITBaseDepartmentService departmentService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 购物车-获取报价主体
|
* 购物车-获取报价主体
|
||||||
*/
|
*/
|
||||||
|
|
@ -150,8 +155,8 @@ public class ShoppingController extends ControllerBase {
|
||||||
} else {
|
} else {
|
||||||
return ApiResult.success(List.of(
|
return ApiResult.success(List.of(
|
||||||
new SimpleUserVO()
|
new SimpleUserVO()
|
||||||
.setUserId(AppUserUtil.getUserId())
|
.setUserId(0)
|
||||||
.setUserName("福建南方路面机械股份有限公司")
|
.setUserName(Constant.COMPANY_NAME)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -615,14 +620,11 @@ public class ShoppingController extends ControllerBase {
|
||||||
}
|
}
|
||||||
boolean isAgent = AppUserUtil.isAgent();
|
boolean isAgent = AppUserUtil.isAgent();
|
||||||
List<TBaseCustomer> customers;
|
List<TBaseCustomer> customers;
|
||||||
List<AppUser> endUsers;
|
|
||||||
if (isAgent) {
|
if (isAgent) {
|
||||||
customers = customerService.lambdaQuery()
|
customers = customerService.lambdaQuery()
|
||||||
.in(TBaseCustomer::getId, datas.getRecords().stream().map(QuotationSearchVO::getTargetId).collect(Collectors.toList()))
|
.in(TBaseCustomer::getId, datas.getRecords().stream().map(QuotationSearchVO::getTargetId).collect(Collectors.toList()))
|
||||||
.list();
|
.list();
|
||||||
endUsers = null;
|
|
||||||
} else {
|
} else {
|
||||||
endUsers = appUserService.getEndUsers();
|
|
||||||
customers = null;
|
customers = null;
|
||||||
}
|
}
|
||||||
return ApiResult.success(datas, data -> {
|
return ApiResult.success(datas, data -> {
|
||||||
|
|
@ -635,14 +637,8 @@ public class ShoppingController extends ControllerBase {
|
||||||
.orElse("")
|
.orElse("")
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
data.setTargetName(endUsers.stream()
|
data.setTargetName(Constant.COMPANY_NAME);
|
||||||
.filter(item -> item.getId().equals(data.getTargetId()))
|
|
||||||
.map(AppUser::getName)
|
|
||||||
.findFirst()
|
|
||||||
.orElse("")
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
//TODO 设置汇率价格
|
|
||||||
return data;
|
return data;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -994,4 +990,57 @@ public class ShoppingController extends ControllerBase {
|
||||||
return adminUserService.getById(AppUserUtil.getUserId()).getQuotationCode();
|
return adminUserService.getById(AppUserUtil.getUserId()).getQuotationCode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取下属列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/getSubordinate")
|
||||||
|
public ApiResult<List<SimpleUserVO>> 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<Long> 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<PageData<QuotationSearchVO>> 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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest;
|
import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest;
|
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.common.pojo.vo.QuotationSearchVO;
|
||||||
import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder;
|
import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
@ -21,4 +22,6 @@ public interface QuotationShoppingOrderMapper extends BaseMapper<QuotationShoppi
|
||||||
IPage<QuotationSearchVO> search(QuotationSearchRequest request, Page<?> page);
|
IPage<QuotationSearchVO> search(QuotationSearchRequest request, Page<?> page);
|
||||||
|
|
||||||
IPage<QuotationSearchVO> searchFromAdmin(QuotationAdminSearchRequest request, Page<?> page);
|
IPage<QuotationSearchVO> searchFromAdmin(QuotationAdminSearchRequest request, Page<?> page);
|
||||||
|
|
||||||
|
IPage<QuotationSearchVO> getQuotationOfSubordinate(SubordinateQuotationSearchRequest request, Page<?> page);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.nflg.mobilebroken.common.pojo.vo.AdminUserSimpleVO;
|
||||||
import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO;
|
import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO;
|
||||||
import com.nflg.mobilebroken.repository.entity.AdminUser;
|
import com.nflg.mobilebroken.repository.entity.AdminUser;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -63,5 +64,5 @@ public interface IAdminUserService extends IService<AdminUser> {
|
||||||
|
|
||||||
List<AdminUserVO> searchNew(SearchAccountRequest request);
|
List<AdminUserVO> searchNew(SearchAccountRequest request);
|
||||||
|
|
||||||
List<AdminUser> getByDepartmentIds(List<Long> departmentIds);
|
List<AdminUser> getByDepartmentIds(Collection<Long> departmentIds);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package com.nflg.mobilebroken.repository.service;
|
package com.nflg.mobilebroken.repository.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
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.QuotationAdminSearchRequest;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest;
|
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.common.pojo.vo.QuotationSearchVO;
|
||||||
import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder;
|
import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
@ -22,4 +24,6 @@ public interface IQuotationShoppingOrderService extends IService<QuotationShoppi
|
||||||
IPage<QuotationSearchVO> search(QuotationSearchRequest request);
|
IPage<QuotationSearchVO> search(QuotationSearchRequest request);
|
||||||
|
|
||||||
IPage<QuotationSearchVO> searchFromAdmin(QuotationAdminSearchRequest request);
|
IPage<QuotationSearchVO> searchFromAdmin(QuotationAdminSearchRequest request);
|
||||||
|
|
||||||
|
IPage<QuotationSearchVO> getQuotationOfSubordinate(SubordinateQuotationSearchRequest request);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -527,7 +527,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AdminUser> getByDepartmentIds(List<Long> departmentIds) {
|
public List<AdminUser> getByDepartmentIds(Collection<Long> departmentIds) {
|
||||||
return lambdaQuery()
|
return lambdaQuery()
|
||||||
.eq(AdminUser::getIsDel, false)
|
.eq(AdminUser::getIsDel, false)
|
||||||
.eq(AdminUser::getState, 1)
|
.eq(AdminUser::getState, 1)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest;
|
import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest;
|
||||||
import com.nflg.mobilebroken.common.pojo.request.QuotationSearchRequest;
|
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.common.pojo.vo.QuotationSearchVO;
|
||||||
import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder;
|
import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder;
|
||||||
import com.nflg.mobilebroken.repository.mapper.QuotationShoppingOrderMapper;
|
import com.nflg.mobilebroken.repository.mapper.QuotationShoppingOrderMapper;
|
||||||
|
|
@ -31,4 +32,9 @@ public class QuotationShoppingOrderServiceImpl extends ServiceImpl<QuotationShop
|
||||||
public IPage<QuotationSearchVO> searchFromAdmin(QuotationAdminSearchRequest request) {
|
public IPage<QuotationSearchVO> searchFromAdmin(QuotationAdminSearchRequest request) {
|
||||||
return baseMapper.searchFromAdmin(request, new Page<>(request.getPage(), request.getPageSize()));
|
return baseMapper.searchFromAdmin(request, new Page<>(request.getPage(), request.getPageSize()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage<QuotationSearchVO> getQuotationOfSubordinate(SubordinateQuotationSearchRequest request) {
|
||||||
|
return baseMapper.getQuotationOfSubordinate(request, new Page<>(request.getPage(), request.getPageSize()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="searchFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO">
|
<select id="searchFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO">
|
||||||
SELECT qso.*,if(qso.create_by_type=0,au.user_name,bc.agency_company_name) as target_name
|
SELECT qso.*,if(qso.create_by_type=0,'${@com.nflg.mobilebroken.common.constant.Constant@COMPANY_NAME}',bc.agency_company_name) as target_name
|
||||||
FROM quotation_shopping_order qso
|
FROM quotation_shopping_order qso
|
||||||
INNER JOIN
|
INNER JOIN
|
||||||
(
|
(
|
||||||
|
|
@ -63,7 +63,6 @@
|
||||||
</where>
|
</where>
|
||||||
) AS t ON t.id=qso.id
|
) AS t ON t.id=qso.id
|
||||||
left join t_base_customer bc on qso.target_id=bc.id
|
left join t_base_customer bc on qso.target_id=bc.id
|
||||||
left join admin_user au on qso.target_id=au.id
|
|
||||||
<where>
|
<where>
|
||||||
<if test="request.targetId!=null">
|
<if test="request.targetId!=null">
|
||||||
AND qso.target_id=#{request.targetId}
|
AND qso.target_id=#{request.targetId}
|
||||||
|
|
@ -83,4 +82,24 @@
|
||||||
</where>
|
</where>
|
||||||
order by qso.id desc
|
order by qso.id desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getQuotationOfSubordinate" resultType="com.nflg.mobilebroken.common.pojo.vo.QuotationSearchVO">
|
||||||
|
SELECT qso.*,if(qso.create_by_type=0,'${@com.nflg.mobilebroken.common.constant.Constant@COMPANY_NAME}',bc.agency_company_name) as targetName
|
||||||
|
FROM quotation_shopping_order qso
|
||||||
|
LEFT JOIN t_base_customer bc ON qso.target_id=bc.id
|
||||||
|
where qso.create_by_type=#{request.userType} and qso.create_by_id in
|
||||||
|
<foreach item="item" collection="request.createByIds" separator="," open="(" close=")">
|
||||||
|
#{item}
|
||||||
|
</foreach>
|
||||||
|
<if test="request.targetId!=null">
|
||||||
|
and qso.target_id = #{request.targetId}
|
||||||
|
</if>
|
||||||
|
<if test="request.createTimeStart!=null and request.createTimeStart!=''">
|
||||||
|
and qso.create_time>=#{request.createTimeStart}
|
||||||
|
</if>
|
||||||
|
<if test="request.createTimeEnd!=null and request.createTimeEnd!=''">
|
||||||
|
and qso.create_time <= #{request.createTimeEnd}
|
||||||
|
</if>
|
||||||
|
order by qso.id desc
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Loading…
Reference in New Issue