品牌方和经销商映射关系的嵌入
背景:算价和前端页面进入自定义计价逻辑中,会得到经销商和价格等信息。目前计算价格已经完成,但是希望得到品牌方的信而不是经销商的信息。
开发:在自定义计价逻辑中增加经销商到品牌方的替换逻辑。
入口:
查询价格:
com.ke.utopia.scm.product.service.v2.SkuCustomSpecPriceRulesService#querySkuCustomSpecPrice
查询属性:
com.ke.utopia.scm.product.service.v2.SkuCustomSpecAttrValService#querySkuBranchCustomSpecValueByCondition
针对这两个逻辑,在外包一层经销商到品牌方的映射。
经销商到品牌方的映射逻辑,入参中两个值skuCarrierType和skuCarrierId
skuCarrierType skuCarrierId
1 店铺
2 供应商
获取供应商的ID+sku去查找映射关系,需调用mapper接口com.ke.utopia.scm.product.dao.mapper.CustomSpecSyncSupplierMappingMapper#selectOneByExample
查到品牌方后替换skucarrierId
价格查询逻辑–增加品牌方信息:
1.在原有查询自定义价格的逻辑中调用查询品牌方的接口并替换
a.根据com.ke.utopia.scm.product.service.v2.SkuCustomSpecPriceRulesService#querySkuCustomSpecPrice中的两个入参 skuCarrierType和skuCarrierId找到供应商id。
i.若skuCarrierType1 则skuCarrierId为店铺id
ii.若skuCarrierType2 则skuCarrierId为供应商id
b.拿到供应商id后根据供应商的ID+sku去调用 customSpecSyncSupplierMappingMapper.selectOneByExample查找映射关系找到品牌方id,然后替换掉入参中skucarrierId
c.继续执行原有逻辑
2.调用 customSpecSyncSupplierMappingMapper.selectOneByExample
(根据供应商的ID+sku去查找映射关系找到品牌方id)接口
a.入参为供应商的ID+sku。返回值为品牌方id。在这个表中查询custom_spec_sync_supplier_mapping
i.若入参为品牌方,则查询为空,不做替换
ii.若入参为经销商,
1.则查询命中,替换
2.未命中,不替换
属性查询逻辑–增加品牌方信息
com.ke.utopia.scm.product.service.v2.SkuCustomSpecAttrValService#querySkuBranchCustomSpecValueByCondition中入参mdmcode即为供应商信息。
1.根据codeType值。判断mdmCode的指代类型
a.若codeType1,则mdmCode指代分公司code
b.若codeType2,则mdmCode指代供应商id
2.若mdmCode为供应商id,则根据mdmCode+sku去查询selectOneByExample接口获得品牌方id,覆盖掉入参中的mdmCode。注意区分一个sku-mdmcodeList 和多个sku-一个mdmcode。
a.1-m:批量查询mapper,用得到的品牌方id进行替换。
b.n-1: 查询使用场景,明确调用此接口的目的。不处理
3.继续执行原有逻辑
针对查询属性的逻辑,针对skuid和mdmcode的不同对应情况采用不同的处理逻辑
判断codeType是否为2(意义:mdmcode为供应商id)若mdmcode为供应商id则继续执行后面逻辑。
1.skuid:mdmcode—>1:N的情况。使用mdmcode做经销商id查询,会有以下几种情况
i.mdmcode为品牌方
ii.mdmcode为经销商
1.未命中映射,不做替换
2.命中映射,过滤skuid,做替换。
2.1:1的关系,直接使用selectOneByExample查询
a.mdmcode为品牌方
b.mdmcode为经销商
i.未命中映射,不做替换
ii.命中映射,使用品牌方id替换mdmcode