refactor(service): 优化用户方案获取接口,增加categoryId参数支持

- 在IQuotationUserPlanDefaultService和IQuotationUserPlanModelItemService接口中新增categoryId参数
- 修改实现类和Mapper以支持根据categoryId查询用户方案
- 更新ShoppingController中获取用户方案逻辑,传入categoryId以精准匹配方案
- 在ProductSeriesController中调整字典项查询,支持多语言环境
- 调整ShoppingSearchVO,注释部分与业务无关字段,简化数据结构
- 更新.gitignore,添加CLAUDE.md文件忽略配置
This commit is contained in:
曹鹏飞 2026-05-23 22:15:13 +08:00
parent c1dbc48cfe
commit fd8b061bf0
10 changed files with 57 additions and 62 deletions

1
.gitignore vendored
View File

@ -38,3 +38,4 @@ logs
.codegraph .codegraph
.claude .claude
.claude.json .claude.json
CLAUDE.md

View File

@ -5,6 +5,7 @@ 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.request.*; import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.*; import com.nflg.mobilebroken.common.pojo.vo.*;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.entity.DictionaryItem; import com.nflg.mobilebroken.repository.entity.DictionaryItem;
import com.nflg.mobilebroken.repository.service.IDictionaryItemService; import com.nflg.mobilebroken.repository.service.IDictionaryItemService;
import com.nflg.mobilebroken.repository.service.IProductMobilebrokenIntroService; import com.nflg.mobilebroken.repository.service.IProductMobilebrokenIntroService;
@ -39,7 +40,7 @@ public class ProductSeriesController extends ControllerBase{
*/ */
@GetMapping("/getModuleList") @GetMapping("/getModuleList")
public ApiResult<List<DictionaryItem>> getModuleList(){ public ApiResult<List<DictionaryItem>> getModuleList(){
return ApiResult.success(dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_PRODUCT_MODULE)); return ApiResult.success(dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_PRODUCT_MODULE, MultilingualUtil.getLanguage()));
} }
/** /**

View File

@ -71,19 +71,9 @@ public class ShoppingSearchVO {
private Integer targetId; private Integer targetId;
/** /**
* 油漆要求 * 其他要求总费用
*/ */
private String paintRequirements; private BigDecimal otherRequirementsFee;
/**
* 其他要求
*/
private String otherRequirements;
/**
* 其他要求费用
*/
private BigDecimal otherFee;
/** /**
* 标配价格 * 标配价格
@ -115,45 +105,45 @@ public class ShoppingSearchVO {
*/ */
private BigDecimal serviceFee; private BigDecimal serviceFee;
/** // /**
* 交货方式字典id // * 交货方式字典id
*/ // */
private Long deliveryMethod; // private Long deliveryMethod;
//
/** // /**
* 交货时间 // * 交货时间
*/ // */
private String deliveryDate; // private String deliveryDate;
//
/** // /**
* 交货地点 // * 交货地点
*/ // */
private String deliveryAddress; // private String deliveryAddress;
//
/** // /**
* 运费 // * 运费
*/ // */
private BigDecimal deliveryFee; // private BigDecimal deliveryFee;
//
/** // /**
* 付款方式 // * 付款方式
*/ // */
private String paymentMethod; // private String paymentMethod;
//
/** // /**
* 付款方式产生的费用 // * 付款方式产生的费用
*/ // */
private BigDecimal paymentFee; // private BigDecimal paymentFee;
//
/** // /**
* 币种字典id // * 币种字典id
*/ // */
private Long currency; // private Long currency;
//
/** // /**
* 汇率 // * 汇率
*/ // */
private BigDecimal exchangeRate; // private BigDecimal exchangeRate;
/** /**
* 创建人类型0内部人员1代理商 * 创建人类型0内部人员1代理商

View File

@ -224,14 +224,16 @@ public class ShoppingController extends ControllerBase {
} }
if (!request.getShowLowestPrice()) { if (!request.getShowLowestPrice()) {
//方案 //方案
QuotationUserPlanModelItem planModelItem = userPlanModelItemService.getEffectiveForUser(request.getModelId(), AppUserUtil.isAgent() ? 1 : 0, AppUserUtil.getUserId()); QuotationUserPlanModelItem planModelItem = userPlanModelItemService.getEffectiveForUser(request.getModelId()
, AppUserUtil.isAgent() ? 1 : 0, AppUserUtil.getUserId(),categoryId);
if (Objects.nonNull(planModelItem)) { if (Objects.nonNull(planModelItem)) {
log.debug("机型【{}】方案为{},系数:{}", request.getModelNo(), planModelItem.getName(), planModelItem.getRatio()); log.debug("机型【{}】方案为{},系数:{}", request.getModelNo(), planModelItem.getName(), planModelItem.getRatio());
standardRatio = NumberUtil.multiply(standardRatio, planModelItem.getRatio()); standardRatio = NumberUtil.multiply(standardRatio, planModelItem.getRatio());
log.debug("机型【{}】标准配件系数为{},可选配件系数为{}", request.getModelNo(), standardRatio, optionalRatio); log.debug("机型【{}】标准配件系数为{},可选配件系数为{}", request.getModelNo(), standardRatio, optionalRatio);
vo.setPlanItemId(planModelItem.getId()); vo.setPlanItemId(planModelItem.getId());
} else { } else {
QuotationUserPlanDefault userPlanDefault = userPlanDefaultService.getEffectiveForUser(AppUserUtil.isAgent() ? 1 : 0, AppUserUtil.getUserId()); QuotationUserPlanDefault userPlanDefault = userPlanDefaultService.getEffectiveForUser(AppUserUtil.isAgent() ? 1 : 0
, AppUserUtil.getUserId(), categoryId);
if (Objects.nonNull(userPlanDefault)) { if (Objects.nonNull(userPlanDefault)) {
vo.setDefaultRatio(userPlanDefault.getRatio()); vo.setDefaultRatio(userPlanDefault.getRatio());
log.debug("用户方案默认系数为{}", userPlanDefault.getRatio()); log.debug("用户方案默认系数为{}", userPlanDefault.getRatio());

View File

@ -22,5 +22,5 @@ public interface QuotationUserPlanModelItemMapper extends BaseMapper<QuotationUs
List<PlanSearchItemVO> search(ModelConfigSearchRequest request,Integer userType, Integer userId); List<PlanSearchItemVO> search(ModelConfigSearchRequest request,Integer userType, Integer userId);
QuotationUserPlanModelItem getEffectiveForUser(Long modelId,Integer userType, Integer userId); QuotationUserPlanModelItem getEffectiveForUser(Long modelId,Integer userType, Integer userId,Long categoryId);
} }

View File

@ -13,5 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IQuotationUserPlanDefaultService extends IService<QuotationUserPlanDefault> { public interface IQuotationUserPlanDefaultService extends IService<QuotationUserPlanDefault> {
QuotationUserPlanDefault getEffectiveForUser(int userType, Integer userId); QuotationUserPlanDefault getEffectiveForUser(int userType, Integer userId,Long categoryId);
} }

View File

@ -23,5 +23,5 @@ public interface IQuotationUserPlanModelItemService extends IService<QuotationUs
List<PlanSearchItemVO> search(ModelConfigSearchRequest request,Integer userType, Integer userId); List<PlanSearchItemVO> search(ModelConfigSearchRequest request,Integer userType, Integer userId);
QuotationUserPlanModelItem getEffectiveForUser(Long modelId,Integer userType, Integer userId); QuotationUserPlanModelItem getEffectiveForUser(Long modelId,Integer userType, Integer userId,Long categoryId);
} }

View File

@ -18,10 +18,11 @@ import org.springframework.stereotype.Service;
public class QuotationUserPlanDefaultServiceImpl extends ServiceImpl<QuotationUserPlanDefaultMapper, QuotationUserPlanDefault> implements IQuotationUserPlanDefaultService { public class QuotationUserPlanDefaultServiceImpl extends ServiceImpl<QuotationUserPlanDefaultMapper, QuotationUserPlanDefault> implements IQuotationUserPlanDefaultService {
@Override @Override
public QuotationUserPlanDefault getEffectiveForUser(int userType, Integer userId) { public QuotationUserPlanDefault getEffectiveForUser(int userType, Integer userId,Long categoryId) {
return lambdaQuery() return lambdaQuery()
.eq(QuotationUserPlanDefault::getCreateByType, userType) .eq(QuotationUserPlanDefault::getCreateByType, userType)
.eq(QuotationUserPlanDefault::getCreateById, userId) .eq(QuotationUserPlanDefault::getCreateById, userId)
.eq(QuotationUserPlanDefault::getAreaId, categoryId)
.one(); .one();
} }
} }

View File

@ -33,7 +33,7 @@ public class QuotationUserPlanModelItemServiceImpl extends ServiceImpl<Quotation
} }
@Override @Override
public QuotationUserPlanModelItem getEffectiveForUser(Long modelId,Integer userType, Integer userId) { public QuotationUserPlanModelItem getEffectiveForUser(Long modelId,Integer userType, Integer userId,Long categoryId) {
return baseMapper.getEffectiveForUser(modelId,userType, userId); return baseMapper.getEffectiveForUser(modelId,userType, userId,categoryId);
} }
} }

View File

@ -30,6 +30,6 @@
FROM quotation_user_plan_model qupm FROM quotation_user_plan_model qupm
INNER JOIN quotation_user_plan_model_item qupmi ON qupm.id=qupmi.plan_id INNER JOIN quotation_user_plan_model_item qupmi ON qupm.id=qupmi.plan_id
WHERE qupm.`status`=1 AND qupm.create_by_type=#{userType} AND qupm.create_by_id=#{userId} AND qupmi.is_default=1 WHERE qupm.`status`=1 AND qupm.create_by_type=#{userType} AND qupm.create_by_id=#{userId} AND qupmi.is_default=1
AND qupmi.model_id=#{modelId} AND qupmi.model_id=#{modelId} and qupmi.area_id=#{categoryId}
</select> </select>
</mapper> </mapper>