Commit 6ee6ec9f by 王志超

feat: 根据商品查询供应商并集

parent 2ee5b1c1
......@@ -249,8 +249,6 @@ public class ChangeFlowBiz {
List<ChangeExecConfigReq> changeExecProject = changeFlowCreateReq.getChangeExecProject();
Assert.isTrue(changeExecProject.size() <= appConfig.getChangeExecLimit(),
"变更行动方案配置数超限");
// 校验变更行动方案中是否有重复的变更行动人
validateDuplicateChangeExecUser(changeExecProject);
// 结束时间不可晚于第二天定时任务执行时间
Long tomorrowSpecificTime = DateUtils.getTomorrowSpecificTime("00:00:00");
if (changeFlowCreateReq.getCreateSource() != 2) {
......
package com.netease.mail.yanxuan.change.integration.flow.supplier;
import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierRelatedUserReq;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.ItemSupplierRsp;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierUserRsp;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
import java.util.List;
/**
......@@ -16,7 +16,11 @@ public interface FlowRpcSupplierInfoService {
*/
List<SupplierUserRsp> querySupplierRelatedUser(SupplierRelatedUserReq req);
/**
* 根据商品Id列表查询供应商
* @param itemIds 商品Id列表
* @return 供应商信息列表
*/
List<ItemSupplierRsp> querySupplierByItemIds(List<Long> itemIds);
}
package com.netease.mail.yanxuan.change.integration.flow.supplier.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -11,9 +13,12 @@ import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierInfoService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierRelatedUserReq;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.ItemSupplierRsp;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierUserRsp;
import com.netease.mail.yanxuan.change.integration.rpc.RpcListData;
import com.netease.mail.yanxuan.change.integration.rpc.RpcTemplate;
import com.netease.mail.yanxuan.change.integration.supplier.SupplierRpcService;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
/**
* @author WangJiaXiang
......@@ -27,6 +32,9 @@ public class FlowRpcSupplierInfoServiceImpl implements FlowRpcSupplierInfoServic
@Autowired
private RpcTemplate rpcTemplate;
@Autowired
private SupplierRpcService supplierRpcService;
@Value("${supplier.url}")
private String supplierUrl;
......@@ -45,4 +53,27 @@ public class FlowRpcSupplierInfoServiceImpl implements FlowRpcSupplierInfoServic
}
return objects;
}
@Override
public List<ItemSupplierRsp> querySupplierByItemIds(List<Long> itemIds) {
if (CollectionUtils.isEmpty(itemIds)) {
return new ArrayList<>();
}
try {
// 调用底层SupplierRpcService查询供应商信息
AjaxResponse<List<ItemSupplierRsp>> response = supplierRpcService.querySupplierByItemIds(itemIds);
logger.info("[querySupplierByItemIds] querySupplierByItemIds response: {}", JSON.toJSONString(response));
if (response == null || CollectionUtils.isEmpty(response.getData())) {
return new ArrayList<>();
}
return response.getData();
} catch (Exception e) {
logger.error("[querySupplierByItemIds] query supplier failed, itemIds={}", JSON.toJSONString(itemIds), e);
return new ArrayList<>();
}
}
}
package com.netease.mail.yanxuan.change.integration.flow.supplier.rsp;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 商品关联供应商响应对象
*
* @author generated
* @date 2024/01/01
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ItemSupplierRsp {
/**
* 商品id
*/
private Long itemId;
/**
* 供应商ID
*/
private String supplierId;
/**
* 供应商名称
*/
private String supplierName;
/**
* 供应商的跟进采购Uid
*/
private String supplierTraceBusiness;
/**
* 供应商的跟进采购姓名
*/
private String supplierTraceBusinessName;
/**
* 质检报告id
*/
private Long qcReportId;
}
package com.netease.mail.yanxuan.change.integration.supplier;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.ItemSupplierRsp;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
import com.netease.yanxuan.missa.client.annotation.MissaClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* 供应商RPC服务
*
* @author generated
* @date 2024/01/01
*/
@Service
@MissaClient(serviceCode = "yanxuan-supplier-ms")
public interface SupplierRpcService {
/**
* 根据商品Id列表查询供应商
* @param itemIds 商品Id列表
* @return 供应商信息列表
*/
@PostMapping("/api/initiateProject/source/getBatchRelatedSupplier.json")
AjaxResponse<List<ItemSupplierRsp>> querySupplierByItemIds(@RequestBody List<Long> itemIds);
}
package com.netease.mail.yanxuan.change.web.controller;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -13,10 +18,12 @@ import com.netease.mail.yanxuan.change.biz.config.AppConfig;
import com.netease.mail.yanxuan.change.biz.service.ISupplierItemService;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.ResponseCodeEnum;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierInfoService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierSendService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierGoodsInfoReq;
import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierSearchRemoteReq;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.ItemSupplierRsp;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierSimpleRsp;
import com.netease.mail.yanxuan.change.integration.todo.SupplierItemPageVO;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
......@@ -42,6 +49,9 @@ public class SupplierController {
private FlowRpcSupplierSendService supplierSendService;
@Autowired
private FlowRpcSupplierInfoService flowRpcSupplierInfoService;
@Autowired
private AppConfig appConfig;
@GetMapping("/query/supplier/infos")
......@@ -73,16 +83,52 @@ public class SupplierController {
/**
* 根据商品Id列表查询供应商
* TODO: 三方接口还未提供,待实现
*
* @param itemIds 商品Id列表(可通过多个同名参数传递,如:?itemId=1&itemId=2&itemId=3)
* @return 供应商信息列表
* @return 供应商信息列表(去重后)
*/
@GetMapping("/query/supplier/by/item/ids")
public AjaxResult<List<SupplierSimpleRsp>> querySupplierByItemIds(@RequestParam(name = "itemId") List<Long> itemIds) {
// TODO: 待三方接口提供后实现
log.warn("[querySupplierByItemIds] 三方接口还未提供,itemIds={}", JSON.toJSONString(itemIds));
return AjaxResult.badRequest("三方接口还未提供,待实现");
// 获取元数据
List<ItemSupplierRsp> itemSupplierList = flowRpcSupplierInfoService.querySupplierByItemIds(itemIds);
// 打印元数据日志
log.info("[querySupplierByItemIds] 元数据 itemIds={}, itemSupplierList={}",
JSON.toJSONString(itemIds), JSON.toJSONString(itemSupplierList));
if (CollectionUtils.isEmpty(itemSupplierList)) {
return AjaxResult.success(new ArrayList<>());
}
// 从响应中提取供应商信息,并去重(按supplierId去重)
Set<String> supplierIdSet = new HashSet<>();
List<SupplierSimpleRsp> supplierList = new ArrayList<>();
for (ItemSupplierRsp itemSupplier : itemSupplierList) {
String supplierId = itemSupplier.getSupplierId();
String supplierName = itemSupplier.getSupplierName();
// 如果供应商ID为空,跳过
if (StringUtils.isBlank(supplierId)) {
continue;
}
// 去重:如果该供应商ID已经处理过,跳过
if (supplierIdSet.contains(supplierId)) {
continue;
}
supplierIdSet.add(supplierId);
// 构建供应商信息
SupplierSimpleRsp supplier = new SupplierSimpleRsp();
supplier.setSupplierId(supplierId);
supplier.setSupplierName(StringUtils.isNotBlank(supplierName) ? supplierName : supplierId);
supplierList.add(supplier);
}
log.info("[querySupplierByItemIds] itemIds={}, supplierCount={}", JSON.toJSONString(itemIds), supplierList.size());
return AjaxResult.success(supplierList);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment