package com.vincent.rsf.openApi.controller.example;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
|
import com.vincent.rsf.openApi.utils.ParamsMapUtils;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
/**
|
* 接口字段映射使用示例
|
*
|
* 展示如何在实际业务中使用 FuncMap 进行字段映射
|
*
|
* @author vincent
|
* @since 2026-01-04
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("/example/mapping")
|
@Api(tags = "字段映射使用示例")
|
public class FieldMappingExampleController {
|
|
/**
|
* 示例1:ERP订单接收 - 字段映射
|
*
|
* 场景:接收ERP系统的订单数据,字段名与WMS不一致,需要进行映射
|
*
|
* ERP字段 -> WMS字段:
|
* orderNumber -> code
|
* orderQty -> qty
|
* orderAmount -> anfme
|
*/
|
@ApiOperation("示例:ERP订单接收")
|
@PostMapping("/erp/order/receive")
|
public CommonResponse erpOrderReceive(@RequestBody JSONObject requestData) {
|
log.info("接收到ERP订单数据(映射前):{}", requestData);
|
|
// 执行字段映射
|
String appId = "ERP_SYSTEM";
|
String funcId = "ORDER_SYNC";
|
JSONObject mappedData = ParamsMapUtils.apiMaps(appId, funcId, requestData);
|
|
log.info("字段映射后的数据:{}", mappedData);
|
|
// 这里可以继续调用WMS内部的业务逻辑处理映射后的数据
|
// orderService.createOrder(mappedData);
|
|
return CommonResponse.ok()
|
.setMsg("订单接收成功")
|
.setData(mappedData);
|
}
|
|
/**
|
* 示例2:物料信息同步 - 字段映射
|
*
|
* 场景:接收ERP系统的物料数据
|
*
|
* ERP字段 -> WMS字段:
|
* materialCode -> matnr
|
* materialName -> maktx
|
* materialSpec -> spec
|
*/
|
@ApiOperation("示例:物料信息同步")
|
@PostMapping("/erp/material/sync")
|
public CommonResponse materialSync(@RequestBody JSONObject requestData) {
|
log.info("接收到物料数据(映射前):{}", requestData);
|
|
// 执行字段映射
|
String appId = "ERP_SYSTEM";
|
String funcId = "MATNR_SYNC";
|
JSONObject mappedData = ParamsMapUtils.apiMaps(appId, funcId, requestData);
|
|
log.info("字段映射后的数据:{}", mappedData);
|
|
return CommonResponse.ok()
|
.setMsg("物料同步成功")
|
.setData(mappedData);
|
}
|
|
/**
|
* 示例3:WCS任务创建 - 字段映射
|
*
|
* 场景:接收WCS系统的任务创建请求
|
*
|
* WCS字段 -> WMS字段:
|
* containerCode -> barcode
|
* stationCode -> sourceStaNo
|
* taskType -> ioType
|
*/
|
@ApiOperation("示例:WCS任务创建")
|
@PostMapping("/wcs/task/create")
|
public CommonResponse wcsTaskCreate(@RequestBody JSONObject requestData) {
|
log.info("接收到WCS任务数据(映射前):{}", requestData);
|
|
// 执行字段映射
|
String appId = "WCS_SYSTEM";
|
String funcId = "TASK_CREATE";
|
JSONObject mappedData = ParamsMapUtils.apiMaps(appId, funcId, requestData);
|
|
log.info("字段映射后的数据:{}", mappedData);
|
|
return CommonResponse.ok()
|
.setMsg("任务创建成功")
|
.setData(mappedData);
|
}
|
|
/**
|
* 示例4:批量数据映射
|
*
|
* 场景:批量接收订单明细,需要对每条明细进行字段映射
|
*/
|
@ApiOperation("示例:批量订单明细映射")
|
@PostMapping("/erp/order/batch")
|
public CommonResponse batchOrderMapping(@RequestBody JSONObject requestData) {
|
log.info("接收到批量订单数据");
|
|
String appId = "ERP_SYSTEM";
|
String funcId = "ORDER_SYNC";
|
|
// 映射订单头
|
JSONObject orderHeader = requestData.getJSONObject("header");
|
JSONObject mappedHeader = ParamsMapUtils.apiMaps(appId, funcId, orderHeader);
|
|
// 映射订单明细列表
|
com.alibaba.fastjson.JSONArray items = requestData.getJSONArray("items");
|
com.alibaba.fastjson.JSONArray mappedItems = new com.alibaba.fastjson.JSONArray();
|
|
if (items != null) {
|
for (int i = 0; i < items.size(); i++) {
|
JSONObject item = items.getJSONObject(i);
|
JSONObject mappedItem = ParamsMapUtils.apiMaps(appId, funcId, item);
|
mappedItems.add(mappedItem);
|
}
|
}
|
|
// 组装结果
|
JSONObject result = new JSONObject();
|
result.put("header", mappedHeader);
|
result.put("items", mappedItems);
|
|
log.info("批量映射完成,共处理 {} 条明细", mappedItems.size());
|
|
return CommonResponse.ok()
|
.setMsg("批量处理成功")
|
.setData(result);
|
}
|
|
/**
|
* 示例5:条件映射
|
*
|
* 场景:根据不同的应用来源,使用不同的映射规则
|
*/
|
@ApiOperation("示例:条件映射")
|
@PostMapping("/dynamic/mapping")
|
public CommonResponse dynamicMapping(@RequestBody JSONObject requestData) {
|
|
// 从请求中获取应用标识
|
String source = requestData.getString("source");
|
String funcId = requestData.getString("function");
|
|
// 移除元数据字段
|
requestData.remove("source");
|
requestData.remove("function");
|
|
log.info("动态映射 - 来源:{},功能:{}", source, funcId);
|
|
// 根据来源选择不同的映射规则
|
String appId;
|
switch (source) {
|
case "ERP":
|
appId = "ERP_SYSTEM";
|
break;
|
case "WCS":
|
appId = "WCS_SYSTEM";
|
break;
|
case "MES":
|
appId = "MES_SYSTEM";
|
break;
|
default:
|
return CommonResponse.error("未知的数据源:" + source);
|
}
|
|
// 执行映射
|
JSONObject mappedData = ParamsMapUtils.apiMaps(appId, funcId, requestData);
|
|
return CommonResponse.ok()
|
.setMsg("动态映射成功")
|
.setData(mappedData);
|
}
|
}
|