IOA/数据底座

This commit is contained in:
efren
2025-06-23 13:14:57 +08:00
parent c0fdb0e79e
commit 0cf84b1bf8
13 changed files with 715 additions and 0 deletions

View File

@ -0,0 +1,144 @@
package com.chinaunicom.mall.ebtp.common.dt.client;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.common.constant.ServiceNameConstants;
import com.chinaunicom.mall.ebtp.common.dt.entity.*;
import com.chinaunicom.mall.ebtp.common.dt.fallback.DtFeignClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = ServiceNameConstants.EXTEND_SERVICE, fallback = DtFeignClientFallback.class)
public interface DtFeignClient {
/**
* 获取Token接口 - 下面几个接口默认都会调用这个,这里只是做冗余
返回:
{
"code":0,
"message":"",
"success": true,
"data":{
"effectiveTime":1440,
"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtZG0iLCJpZCI6MjAxMTUsImlhdCI6MTc1MDM4MzYzMCwiZXhwIjoxNzUwNDcwMDMwfQ.4zFuXnls2GdBVk8ApBlkQ9wHnhyr0Huqe9rF67sFcsg"
}
}
返回头header:
text/plain;charset=UTF-8
* @return token信息
*/
@PostMapping("/dt/api/token")
BaseResponse<DtTokenResponse> getToken();
/**
* 客户数据单条维护接口
* POST /mdm/maintain
参数:
{
"masterDataCode": "ods_custsup_customer_vendor_info",
"opType": "C",
"updateColumns": {
"sourceId": "20001DERJ291",
"sourceStatus": "1",
"sourceCompany": "9999100300",
"sourceSystem": "XT20210873086",
"code": "30911103027886014929",
"name": "联通数字科技有限公司",
"nameLanguage": "ZH",
"localName": "联通数字科技有限公司",
"nature": "20",
"country": "CN",
"certificateType": "10",
"certificateId": "911103027886014929",
"organizationType": "30",
"createdDate": "2025-06-18 16:47:21",
"lastModifiedUser": "IRIS4",
"lastModifiedDate": "2025-06-18 16:47:21"
}
}
返回:
{
"code":0,
"message":"操作成功",
"success": true,
"data":{
"sourceID":"20001DERJ291",
"sapCode":"1000284811"
}
}
* @param request 维护请求体
* @return 维护结果
*/
@PostMapping("/dt/api/maintain")
BaseResponse<DtMaintainRespone> maintain(@RequestBody DtMaintainRequest request);
/**
* 客商主数据查询匹配接口
返回:
{
"code":0,
"message":"操作成功",
"success":true,
"data":{
"pageCount":1,
"primaryColumn":"unique_code_id",
"total":2,
"pageIndex":1,
"structureType":"0",
"pageSize":10,
"rows":[{
"sysVersion":"1",
"country":"CN",
"code":"CN1091210102667153558C30",
"nature":"11",
"hisId":"35198509",
"sysModifyStaffId":"999999",
"certificateId":"91210102667153558C",
"busStatus":"1",
"updateTime":"2024-07-15 08:58:40",
"modifyStaffName":"",
"nameLanguage":"ZH",
"complianceType":"0",
"organizationType":"30",
"uniqueCodeId":"c992c5ab761b40a47ef0806412bf7ba6",
"localName":"联通数字科技有限公司辽宁省分公司",
"sapCode":"1000277393",
"sysStatus":"1",
"validName":"联通数字科技辽宁",
"name":"联通数字科技有限公司辽宁省分公司",
"sysIsCurrentVersion":"1",
"certificateType":"10"
},{
"sysVersion":"1",
"country":"CN",
"code":"CN1091110302788601492930",
"nature":"11",
"hisId":"35662315",
"sysModifyStaffId":"999999",
"certificateId":"911103027886014929",
"busStatus":"1",
"updateTime":"2024-07-15 08:58:40",
"modifyStaffName":"",
"nameLanguage":"ZH",
"complianceType":"0",
"organizationType":"30",
"uniqueCodeId":"a147603eaba75cd7876c22e239e2994b",
"localName":"联通数字科技有限公司",
"sapCode":"1000284811",
"sysStatus":"1",
"validName":"联通数字科技",
"name":"联通数字科技有限公司",
"sysIsCurrentVersion":"1",
"certificateType":"10"
}],
"sql":""
}
}
* @param request 查询请求体
* @return 查询结果
*/
@PostMapping("/dt/api/queryMdmAll")
BaseResponse<DtQueryMdmAllResponse> queryMdmAll(@RequestBody DtQueryMdmAllRequest request);
}

View File

@ -0,0 +1,49 @@
package com.chinaunicom.mall.ebtp.common.dt.entity;
import com.chinaunicom.mall.ebtp.common.dt.entity.maintain.Primary;
import com.chinaunicom.mall.ebtp.common.dt.entity.maintain.Update;
import lombok.Data;
/**
* 若opType为C 或 S不传primaryColumns
* 参数说明:
* masterDataCode 主数据模型编码(ods_custsup_customer_vendor_info) 必填
* opType 操作类型C新增、U更新、D停用冻结、E启用解除冻结、S保存、K校验 必填
* updateColumns 该项为必须项请按主数据标准要求填写校验通过后返回集团SAPcode 必填
* 示例:
* {
* "masterDataCode": "ods_custsup_customer_vendor_info",
* "opType": "S",
* "updateColumns": {
* "name": "大连中远海运油品运输公司",
* "country": "CN"
* }
* }
*/
@Data
public class DtMaintainRequest {
/**
* 主数据模型编码(ods_custsup_customer_vendor_info)
* 必填
*/
private String masterDataCode;
/**
* 操作类型
* 必填
* C 新增
* U 更新
* D 停用(冻结)
* E 启用(解除冻结)
* S 保存(用于不便区分操作类型的业务场景)
* K 校验(进行合规校验和标准校验,不正式写入)
*/
private String opType;
/**
* 更新字段
* 必填
* 该项为必须项请按主数据标准要求填写。校验通过后返回集团SAPcode。
*/
private Update updateColumns;
private Primary primaryColumns;
}

View File

@ -0,0 +1,27 @@
package com.chinaunicom.mall.ebtp.common.dt.entity;
import lombok.Data;
/**
* resultCode
* int
* 返回编码
* 0成功
* -1 失败
* resultMsg
* String
* 返回结果说明
* 成功返回:"SUCCESS"
* 失败返回:失败或出错原因。
* sapCode
* String
* 返回编码
* sourceID
* String
* 返回编码
*/
@Data
public class DtMaintainRespone {
private String sapCode;
private String sourceID;
}

View File

@ -0,0 +1,50 @@
package com.chinaunicom.mall.ebtp.common.dt.entity;
import lombok.Data;
import java.util.List;
/**
* 客商主数据查询匹配接口请求体
*/
@Data
public class DtQueryMdmAllRequest {
/**
* 主数据模型编码(customer_vendor_info)
*/
private String masterDataCode;
/**
* 查询条件(支持多条件组合)
*/
private List<QueryColumn> queryColumns;
/**
* 页码默认从1开始
*/
private Integer pageIndex;
/**
* 每页大小默认10条不得超过25条
*/
private Integer pageSize;
@Data
public static class QueryColumn {
/**
* 字段编码如name、localName、certificateType、certificateId、sapCode
*/
private String columnCode;
/**
* 字段值
*/
private String columnValue;
/**
* 匹配类型1:精确匹配 2模糊匹配
*/
private Integer matchingType;
}
}

View File

@ -0,0 +1,74 @@
package com.chinaunicom.mall.ebtp.common.dt.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 客商主数据查询匹配接口响应体
*/
@Data
public class DtQueryMdmAllResponse {
/**
* 总条数
*/
private Integer total;
/**
* 当前页码
*/
private Integer pageIndex;
/**
* 每页大小
*/
private Integer pageSize;
/**
* 总页数
*/
private Integer pageCount;
/**
* 主键字段名
*/
private String primaryColumn;
/**
* 结构类型
*/
private String structureType;
/**
* 数据行
*/
private List<Row> rows;
/**
* SQL语句
*/
private String sql;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Row {
private String sysVersion;
private String country;
private String code;
private String nature;
private String hisId;
private String sysModifyStaffId;
private String certificateId;
private String busStatus;
private String updateTime;
private String modifyStaffName;
private String nameLanguage;
private String complianceType;
private String organizationType;
private String uniqueCodeId;
private String localName;
private String sapCode;
private String sysStatus;
private String validName;
private String name;
private String sysIsCurrentVersion;
private String certificateType;
}
}

View File

@ -0,0 +1,12 @@
package com.chinaunicom.mall.ebtp.common.dt.entity;
import lombok.Data;
/**
{"resultCode":"0","resultMsg":"校验通过","resultObject":{"effectiveTime":1440,"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtZG0iLCJpZCI6MjAxMTUsImlhdCI6MTc1MDM4MzYzMCwiZXhwIjoxNzUwNDcwMDMwfQ.4zFuXnls2GdBVk8ApBlkQ9wHnhyr0Huqe9rF67sFcsg"}}
*/
@Data
public class DtTokenResponse {
private String token;
private Integer effectiveTime;// token有效时常单位分钟
}

View File

@ -0,0 +1,9 @@
package com.chinaunicom.mall.ebtp.common.dt.entity.maintain;
import lombok.Data;
@Data
public class Primary {
private String sourceId;
private String sourceCompany;
}

View File

@ -0,0 +1,164 @@
package com.chinaunicom.mall.ebtp.common.dt.entity.maintain;
import lombok.Data;
@Data
public class Update {
/**
* 客商业务编码,客户唯一识别码
* 1. 境内:客商组织类型+统一社会信用编码
* 2. 境外:客商组织类型+国家编码+增值税号VAT/TIN
* 3. 境内个人:客商组织类型+身份证号码
* 4. 境外个人:客商组织类型+姓名+护照号码
* 5. 集团内部门客商:客商组织类型+组织编码
* 6. 集团个人供应商:客商组织类型+身份证号码
* 7. 其他客户:客商组织类型+二级单位编码+6位流水码
* 8. 临时/专用/功能性客商:客商组织类型+名称
* 该字段可等同为客商主数据主键真正主键为该值MD5加密形成
* 建议二级公司按该字段建立与客商主数据的映射关系。
* varchar(100) 必填
*/
private String code;
/**
* 来源系统客户标识id来源系统客商标识二级公司该数据的唯一标识可为客户/供应商编码或主键)
* 该字段可等同为租户客商管理系统的主键。
* 租户数据的更新、停用、启用根据该字段操作。
* varchar(50) 必填
*/
private String sourceId;
/**
* 客商名称
* 1. 境内企业:维护中文,全称须与工商注册或企业发文上的名称保持一致
* 2. 境外企业:需填英文名称,遵守首字母大写、单词间一个空格、无缩写、无特殊字符
* 3. 英文名称需在本地语言名称中维护中文信息
* varchar(255) 必填
*/
private String name;
/**
* 客商本国语言代码(多语言),境内企业为中文,境外企业默认为英文,非英文需按标准填写
* 参照维表字典值CUST001代码填写
* varchar(2) 能填尽填
*/
private String nameLanguage;
/**
* 客商本国语言名称,根据当地证件上的标准名称填写,官方注册名称
* 对于境内的客商,维护中文简体,全称须与工商注册或企业发文上的名称保持一致
* varchar(255) 能填尽填
*/
private String localName;
/**
* 客商属性,客户、供应商、客户+供应商、贷款人等
* 参照维表字典值CUST002代码填写
* varchar(2) 必填
*/
private String nature;
/**
* 客商归属国家或地区
* 参照维表字典值CUST003代码填写
* varchar(3) 必填
*/
private String country;
/**
* 证件类型营业执照、身份证、增值税号VAT、纳税人识别号、护照等
* 参照维表字典值CUST004代码填写
* varchar(2) 必填
*/
private String certificateType;
/**
* 证件号码
* 1. 境内企业:统一社会信用代码
* 2. 境内自然人:身份证号
* 3. 境外企业VAT/TIN号/UEN/商业登记证/企业注册码
* 4. 境外自然人:护照号码
* 5. 集团内部门客商:组织编码
* 6. 集团内个人客商:身份证号
* 7. 其他:按实际填写
* varchar(20) 境内必填
*/
private String certificateId;
/**
* 客商组织类型,集团内客商、集团联营客商、第三方客商等
* 参照维表字典值CUST005代码填写
* varchar(2) 必填
*/
private String organizationType;
/**
* 集团北京SAP系统编码SAP 客户编码,用于内部财务处理
* varchar(50) 能填尽填
*/
private String sapCode;
/**
* 数据来源二级公司填写数据来源二级公司编码9999200000
* 参照维表字典值CUST007代码填写
* varchar(255) 必填
*/
private String sourceCompany;
/**
* 数据来源系统填写来源系统的系统编码XT20210864425
* 参照维表字典值CUST008代码填写
* varchar(13) 必填
*/
private String sourceSystem;
/**
* 二级公司状态,正常、冻结、风险
* 参照维表字典值CUST006代码填写
* varchar(2) 必填
*/
private String sourceStatus;
/**
* 创建时间传输来源系统记录的数据创建时间格式为YYYY-MM-DD HH:MI:SS
* 必填
*/
private String createdDate;
/**
* 最后的更新人员,传输来源系统记录的最后的更新人员,若无,可传输主数据对接人
* varchar(30) 必填
*/
private String lastModifiedUser;
/**
* 最后的更新时间传输来源系统记录的最后的更新时间格式为YYYY-MM-DD HH:MI:SS
* 必填
*/
private String lastModifiedDate;
/**
* 数据来源二级公司SAP系统客商编码
* varchar(30) 能填尽填
*/
private String sourceCompanySapCode;
/**
* 客商生效时间主要用于客商组织类型发生变更时新客商的业务生效时间格式为YYYY-MM-DD
* 非必填
*/
private String effectiveDate;
/**
* 客商失效时间主要用于客商组织类型发生变更时旧客商的业务失效时间默认为30001231格式为YYYY-MM-DD
* 非必填
*/
private String endDate;
/**
* 操作符C 新增、U 更新、D 停用冻结、E 启用解除冻结、S 保存、K(校验)
* 参照维表字典值CUST009代码填写
* varchar(1) 必填
*/
private String opTypeMdm;
}

View File

@ -0,0 +1,48 @@
package com.chinaunicom.mall.ebtp.common.dt.fallback;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.common.dt.client.DtFeignClient;
import com.chinaunicom.mall.ebtp.common.dt.entity.*;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Collections;
@Component
public class DtFeignClientFallback implements DtFeignClient {
@Override
public BaseResponse<DtTokenResponse> getToken() {
DtTokenResponse dtTokenResponse = new DtTokenResponse();
dtTokenResponse.setToken("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtZG0iLCJpZCI6MjAxMTUsImlhdCI6MTc1MDM4MzYzMCwiZXhwIjoxNzUwNDcwMDMwfQ.4zFuXnls2GdBVk8ApBlkQ9wHnhyr0Huqe9rF67sFcsg");
dtTokenResponse.setEffectiveTime(1440);
return BaseResponse.success(dtTokenResponse);
}
@Override
public BaseResponse<DtMaintainRespone> maintain(DtMaintainRequest request) {
DtMaintainRespone response = new DtMaintainRespone();
response.setSapCode("1000284811");
response.setSourceID("20001DERJ291");
return BaseResponse.success(response);
}
@Override
public BaseResponse<DtQueryMdmAllResponse> queryMdmAll(DtQueryMdmAllRequest request) {
DtQueryMdmAllResponse response = new DtQueryMdmAllResponse();
response.setPageCount(1);
response.setPageIndex(1);
response.setPageSize(10);
response.setPrimaryColumn("unique_code_id");
response.setTotal(2);
response.setStructureType("0");
response.setSql("");
response.setRows(Collections.singletonList(
// {"sysVersion":"1","country":"CN","code":"CN1091210102667153558C30","nature":"11","hisId":"35198509","sysModifyStaffId":"999999","certificateId":"91210102667153558C","busStatus":"1","updateTime":"2024-07-15 08:58:40","modifyStaffName":"","nameLanguage":"ZH","complianceType":"0","organizationType":"30","uniqueCodeId":"c992c5ab761b40a47ef0806412bf7ba6","localName":"联通数字科技有限公司辽宁省分公司","sapCode":"1000277393","sysStatus":"1","validName":"联通数字科技辽宁","name":"联通数字科技有限公司辽宁省分公司","sysIsCurrentVersion":"1","certificateType":"10"},{"sysVersion":"1","country":"CN","code":"CN1091110302788601492930","nature":"11","hisId":"35662315","sysModifyStaffId":"999999","certificateId":"911103027886014929","busStatus":"1","updateTime":"2024-07-15 08:58:40","modifyStaffName":"","nameLanguage":"ZH","complianceType":"0","organizationType":"30","uniqueCodeId":"a147603eaba75cd7876c22e239e2994b","localName":"联通数字科技有限公司","sapCode":"1000284811","sysStatus":"1","validName":"联通数字科技","name":"联通数字科技有限公司","sysIsCurrentVersion":"1","certificateType":"10"}
new DtQueryMdmAllResponse.Row("1", "cn", "CN1091210102667153558C30", "11", "35198509", "999999", "91210102667153558C", "1", "2024-07-15 08:58:40", "", "ZH", "0", "30", "c992c5ab761b40a47ef0806412bf7ba6", "联通数字科技有限公司辽宁省分公司", "1000277393", "1", "联通数字科技辽宁", "联通数字科技有限公司辽宁省分公司", "1", "10")
));
return BaseResponse.success(response);
}
}

View File

@ -0,0 +1,24 @@
package com.chinaunicom.mall.ebtp.common.ioa.client;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.common.constant.ServiceNameConstants;
import com.chinaunicom.mall.ebtp.common.ioa.entity.Flow;
import com.chinaunicom.mall.ebtp.common.ioa.fallback.IoaFeignClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = ServiceNameConstants.EXTEND_SERVICE, fallback = IoaFeignClientFallback.class)
public interface IoaFeignClient {
@PostMapping("/ioa/task/create")
BaseResponse<String[]> createTask(@RequestBody Flow flow);
@PostMapping("/ioa/task/update")
BaseResponse<String[]> updateTask(@RequestBody List<String> bizTaskIds);
@PostMapping("/ioa/task/delete")
BaseResponse<String[]> deleteTask(@RequestBody List<String> bizTaskIds);
}

View File

@ -0,0 +1,38 @@
package com.chinaunicom.mall.ebtp.common.ioa.entity;
import lombok.Data;
import java.util.List;
@Data
public class Flow {
/**
* 流程ID (不传就是雪花ID)
*/
private String flowId;
/**
* 流程名称 (不传就是雪花ID)
*/
private String flowName;
/**
* 业务流程实例 id流程实例在业务系统的唯一标识号 (不传就是雪花ID)
*/
private String bizInstanceId;
/**
* 创建时间,时间戳 (不传就是当前系统时间)
*/
private Long createDate;
/**
* 创建人姓名
*/
private String creatorName;
/**
* 创建人id
*/
private String creatorId;
/**
* 待办待阅数据集合最多100
*/
private List<Task> tasks;
}

View File

@ -0,0 +1,46 @@
package com.chinaunicom.mall.ebtp.common.ioa.entity;
import lombok.Data;
import java.util.Map;
@Data
public class Task {
/**
* 业务待办id待办待阅在业务系统的唯一标识 id
*/
private String bizTaskId;
/**
* 工单号,工单在业务系统的唯一标识
*/
private String workNum;
/**
* 单据类型0:待办,1:待阅
*/
private Integer taskType;
/**
* 业务类型
*/
private String businessMode;
/**
* 当前处理人的用户ID
*/
private String handler;
/**
* 业务系统提供工单处理页面的Url
*/
private String formUrl;
/**
* 工单标题
*/
private String title;
/**
* 优先级别0:低,1:中,2:高
*/
private Integer priority;
/**
* 扩展信息JSON最多50个元素键[a-z]{1,30},值<100字符
*/
private Map<String, String> ext;
}

View File

@ -0,0 +1,30 @@
package com.chinaunicom.mall.ebtp.common.ioa.fallback;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.common.ioa.client.IoaFeignClient;
import com.chinaunicom.mall.ebtp.common.ioa.entity.Flow;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class IoaFeignClientFallback implements IoaFeignClient {
@Override
public BaseResponse<String[]> createTask(Flow flow) {
String[] mockResponse = new String[]{"1935498644363452416"};
return BaseResponse.success(mockResponse);
}
@Override
public BaseResponse<String[]> updateTask(List<String> bizTaskIds) {
String[] mockResponse = new String[]{"1935498644363452416"};
return BaseResponse.success(mockResponse);
}
@Override
public BaseResponse<String[]> deleteTask(List<String> bizTaskIds) {
String[] mockResponse = new String[]{"1935498644363452416"};
return BaseResponse.success(mockResponse);
}
}