IOA/数据底座

This commit is contained in:
efren
2025-06-23 13:14:33 +08:00
parent 1efc2f6adb
commit 3da59ea5a4
17 changed files with 144 additions and 196 deletions

View File

@ -1,30 +1,29 @@
package com.chinaunicom.mall.ebtp.extend.dt.client;
import com.chinaunicom.mall.ebtp.extend.dt.config.DtFeignConfig;
import com.chinaunicom.mall.ebtp.extend.dt.entity.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import java.text.SimpleDateFormat;
@FeignClient(name = "dt-service", url = "${spring.dt.url}")
@FeignClient(name = "dt-service", url = "${spring.dt.url}", configuration = DtFeignConfig.class)
@RequestMapping("/DtStudio/datamasterservice")
public interface DtClient {
/**
* 获取Token接口
* POST /mdm/oauth/token
* @param appId 客户端Key
* @param appSecret 客户端Secret
返回:
{"resultCode":"0","resultMsg":"校验通过","resultObject":{"effectiveTime":1440,"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtZG0iLCJpZCI6MjAxMTUsImlhdCI6MTc1MDM4MzYzMCwiZXhwIjoxNzUwNDcwMDMwfQ.4zFuXnls2GdBVk8ApBlkQ9wHnhyr0Huqe9rF67sFcsg"}}
返回头header:
text/plain;charset=UTF-8
* @return token信息
*/
@PostMapping("/mdm/oauth/token")
DtBaseResponseDTO<DtTokenResponseDTO> getToken(
@RequestHeader("app_id") String appId,
@RequestHeader("app_secret") String appSecret
);
DtBaseResponseDTO<DtTokenResponseDTO> getToken(@RequestBody DtTokenRequestDTO request);
/**
* 客户数据单条维护接口
@ -67,7 +66,7 @@ public interface DtClient {
* @return 维护结果
*/
@PostMapping("/mdm/maintain")
DtMaintainResponeDTO maintain(
DtBaseResponseDTO<DtMaintainResponeDTO> maintain(
@RequestHeader("Authorization") String token,
@RequestBody DtMaintainRequestDTO request
);
@ -89,6 +88,8 @@ public interface DtClient {
/**
* 客商主数据查询匹配接口
* POST /mdm/queryMdmAll
返回:
{"resultCode":"0","resultMsg":"操作成功","resultObject":{"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 token 认证token
* @param request 查询请求体
* @return 查询结果

View File

@ -0,0 +1,21 @@
package com.chinaunicom.mall.ebtp.extend.dt.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.util.Arrays;
@Configuration
public class DtFeignConfig {
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(
MediaType.APPLICATION_JSON,
MediaType.TEXT_PLAIN
));
return converter;
}
}

View File

@ -1,19 +1,15 @@
package com.chinaunicom.mall.ebtp.extend.dt.controller;
import com.chinaunicom.mall.ebtp.extend.dt.entity.DtBaseResponseDTO;
import com.chinaunicom.mall.ebtp.extend.dt.entity.DtSyncRequestDTO;
import com.chinaunicom.mall.ebtp.extend.dt.entity.DtTokenResponseDTO;
import com.chinaunicom.mall.ebtp.extend.dt.entity.DtMaintainRequestDTO;
import com.chinaunicom.mall.ebtp.extend.dt.entity.DtQueryMdmAllRequestDTO;
import com.chinaunicom.mall.ebtp.extend.dt.entity.DtQueryMdmAllResponseDTO;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.extend.dt.entity.*;
import com.chinaunicom.mall.ebtp.extend.dt.service.DtService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Objects;
@RestController
@Api(tags = "数据底座接口")
@ -24,22 +20,36 @@ public class DtController {
@Resource
private DtService dtService;
private static final String DT_ERRER_DESC = "数据底座错误代码/描述: ";
@ApiOperation("获取token")
@PostMapping("/token")
public DtBaseResponseDTO<DtTokenResponseDTO> getToken() {
return dtService.getToken();
public BaseResponse<DtTokenResponseDTO> getToken() {
DtBaseResponseDTO<DtTokenResponseDTO> token = dtService.getToken();
if (token == null || token.getResultObject() == null || token.getResultObject().getToken() == null) {
return BaseResponse.fail(DT_ERRER_DESC + Objects.requireNonNull(token).getResultCode() + token.getResultMsg(), token.getResultObject());
}
return BaseResponse.success(token.getResultObject());
}
@ApiOperation("客商主数据单条维护")
@PostMapping("/maintain")
public Object maintain(@RequestBody DtMaintainRequestDTO request) {
return dtService.maintain(request);
public BaseResponse<DtMaintainResponeDTO> maintain(@RequestBody DtMaintainRequestDTO request) {
DtBaseResponseDTO<DtMaintainResponeDTO> response = dtService.maintain(request);
if (response == null || response.getResultObject() == null) {
return BaseResponse.fail(DT_ERRER_DESC + Objects.requireNonNull(response).getResultCode() + response.getResultMsg(), null);
}
return BaseResponse.success(response.getResultObject());
}
@ApiOperation("客商主数据查询匹配")
@PostMapping("/queryMdmAll")
public DtBaseResponseDTO<DtQueryMdmAllResponseDTO> queryMdmAll(@RequestBody DtQueryMdmAllRequestDTO request) {
return dtService.queryMdmAll(request);
public BaseResponse<DtQueryMdmAllResponseDTO> queryMdmAll(@RequestBody DtQueryMdmAllRequestDTO request) {
DtBaseResponseDTO<DtQueryMdmAllResponseDTO> response = dtService.queryMdmAll(request);
if (response == null || response.getResultObject() == null) {
return BaseResponse.fail(DT_ERRER_DESC + Objects.requireNonNull(response).getResultCode() + response.getResultMsg(), null);
}
return BaseResponse.success(response.getResultObject());
}
@ApiOperation("客商主数据批量同步")

View File

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

View File

@ -22,8 +22,6 @@ import lombok.Data;
*/
@Data
public class DtMaintainResponeDTO {
private String resultCode;
private String resultMsg;
private String sapCode;
private String sourceID;
}

View File

@ -1,10 +1,13 @@
package com.chinaunicom.mall.ebtp.extend.dt.entity;
import lombok.Data;
import java.util.List;
/**
* 客商主数据查询匹配接口请求体
*/
@Data
public class DtQueryMdmAllRequestDTO {
/**
* 主数据模型编码(customer_vendor_info)
@ -26,8 +29,8 @@ public class DtQueryMdmAllRequestDTO {
*/
private Integer pageSize;
// ...getter/setter...
@Data
public static class QueryColumn {
/**
* 字段编码如name、localName、certificateType、certificateId、sapCode
@ -42,49 +45,6 @@ public class DtQueryMdmAllRequestDTO {
*/
private Integer matchingType;
// ...getter/setter...
public String getColumnCode() {
return columnCode;
}
public void setColumnCode(String columnCode) {
this.columnCode = columnCode;
}
public String getColumnValue() {
return columnValue;
}
public void setColumnValue(String columnValue) {
this.columnValue = columnValue;
}
public Integer getMatchingType() {
return matchingType;
}
public void setMatchingType(Integer matchingType) {
this.matchingType = matchingType;
}
}
public String getMasterDataCode() {
return masterDataCode;
}
public void setMasterDataCode(String masterDataCode) {
this.masterDataCode = masterDataCode;
}
public List<QueryColumn> getQueryColumns() {
return queryColumns;
}
public void setQueryColumns(List<QueryColumn> queryColumns) {
this.queryColumns = queryColumns;
}
public Integer getPageIndex() {
return pageIndex;
}
public void setPageIndex(Integer pageIndex) {
this.pageIndex = pageIndex;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}

View File

@ -1,10 +1,13 @@
package com.chinaunicom.mall.ebtp.extend.dt.entity;
import lombok.Data;
import java.util.List;
/**
* 客商主数据查询匹配接口响应体
*/
@Data
public class DtQueryMdmAllResponseDTO {
/**
* 总条数
@ -19,83 +22,49 @@ public class DtQueryMdmAllResponseDTO {
*/
private Integer pageSize;
/**
* 数据列表
* 总页
*/
private List<CustomerVendorInfo> data;
private Integer pageCount;
/**
* 主键字段名
*/
private String primaryColumn;
/**
* 结构类型
*/
private String structureType;
/**
* 数据行
*/
private List<Row> rows;
/**
* SQL语句
*/
private String sql;
// ...getter/setter...
public static class CustomerVendorInfo {
// 只列举常用字段,实际可根据接口返回补充
@Data
public static class Row {
private String sysVersion;
private String country;
private String code;
private String name;
private String localName;
private String certificateType;
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;
// ...其他字段...
// ...getter/setter...
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocalName() {
return localName;
}
public void setLocalName(String localName) {
this.localName = localName;
}
public String getCertificateType() {
return certificateType;
}
public void setCertificateType(String certificateType) {
this.certificateType = certificateType;
}
public String getCertificateId() {
return certificateId;
}
public void setCertificateId(String certificateId) {
this.certificateId = certificateId;
}
public String getSapCode() {
return sapCode;
}
public void setSapCode(String sapCode) {
this.sapCode = sapCode;
}
private String sysStatus;
private String validName;
private String name;
private String sysIsCurrentVersion;
private String certificateType;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public Integer getPageIndex() {
return pageIndex;
}
public void setPageIndex(Integer pageIndex) {
this.pageIndex = pageIndex;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public List<CustomerVendorInfo> getData() {
return data;
}
public void setData(List<CustomerVendorInfo> data) {
this.data = data;
}
}

View File

@ -0,0 +1,15 @@
package com.chinaunicom.mall.ebtp.extend.dt.entity;
import lombok.Data;
@Data
public class DtTokenRequestDTO {
private String appKey;
private String appSecret;
public DtTokenRequestDTO(String appKey, String appSecret) {
this.appKey = appKey;
this.appSecret = appSecret;
}
public DtTokenRequestDTO() {}
}

View File

@ -3,8 +3,7 @@ package com.chinaunicom.mall.ebtp.extend.dt.entity;
import lombok.Data;
/**
* "token": "a554cc92-6291-4d32-b7aa-08c97b4e3f09",
* "effectiveTime": 30
{"resultCode":"0","resultMsg":"校验通过","resultObject":{"effectiveTime":1440,"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtZG0iLCJpZCI6MjAxMTUsImlhdCI6MTc1MDM4MzYzMCwiZXhwIjoxNzUwNDcwMDMwfQ.4zFuXnls2GdBVk8ApBlkQ9wHnhyr0Huqe9rF67sFcsg"}}
*/
@Data
public class DtTokenResponseDTO {

View File

@ -3,26 +3,23 @@ package com.chinaunicom.mall.ebtp.extend.dt.service;
import com.chinaunicom.mall.ebtp.extend.dt.entity.*;
public interface DtService {
/**
* 获取token
* @return token
*/
DtBaseResponseDTO<DtTokenResponseDTO> getToken();
/**
* 批量同步客商主数据
* @param syncRequestDTO 批量同步请求体
* @return 同步结果
*/
DtBaseResponseDTO sync(DtSyncRequestDTO syncRequestDTO);
/**
* 获取token
* @return token
*/
DtBaseResponseDTO<DtTokenResponseDTO> getToken();
/**
* 维护数据
* @param request 维护请求体
* @return 维护结果
*/
DtMaintainResponeDTO maintain(DtMaintainRequestDTO request);
DtBaseResponseDTO<DtMaintainResponeDTO> maintain(DtMaintainRequestDTO request);
/**
* 查询所有Mdm数据
* @param request 查询请求体

View File

@ -13,8 +13,8 @@ public class DtServiceImpl implements DtService {
@Autowired
private DtClient dtClient;
@Value("${spring.dt.app_id}")
private String appId;
@Value("${spring.dt.app_key}")
private String appKey;
@Value("${spring.dt.app_secret}")
private String appSecret;
@ -22,7 +22,8 @@ public class DtServiceImpl implements DtService {
@Override
public DtBaseResponseDTO sync(DtSyncRequestDTO syncRequestDTO) {
// 忽略传入的token先获取token再调用sync
DtBaseResponseDTO<DtTokenResponseDTO> tokenResp = dtClient.getToken(appId, appSecret);
DtTokenRequestDTO tokenRequestDTO = new DtTokenRequestDTO(appKey, appSecret);
DtBaseResponseDTO<DtTokenResponseDTO> tokenResp = dtClient.getToken(tokenRequestDTO);
if (tokenResp == null || tokenResp.getResultObject() == null || tokenResp.getResultObject().getToken() == null) {
return tokenResp;
}
@ -32,14 +33,16 @@ public class DtServiceImpl implements DtService {
@Override
public DtBaseResponseDTO<DtTokenResponseDTO> getToken() {
return dtClient.getToken(appId, appSecret);
DtTokenRequestDTO tokenRequestDTO = new DtTokenRequestDTO(appKey, appSecret);
return dtClient.getToken(tokenRequestDTO);
}
@Override
public DtMaintainResponeDTO maintain(DtMaintainRequestDTO request) {
DtBaseResponseDTO<DtTokenResponseDTO> tokenResp = dtClient.getToken(appId, appSecret);
public DtBaseResponseDTO<DtMaintainResponeDTO> maintain(DtMaintainRequestDTO request) {
DtTokenRequestDTO tokenRequestDTO = new DtTokenRequestDTO(appKey, appSecret);
DtBaseResponseDTO<DtTokenResponseDTO> tokenResp = dtClient.getToken(tokenRequestDTO);
if (tokenResp == null || tokenResp.getResultObject() == null || tokenResp.getResultObject().getToken() == null) {
DtMaintainResponeDTO resp = new DtMaintainResponeDTO();
DtBaseResponseDTO<DtMaintainResponeDTO> resp = new DtBaseResponseDTO<>();
resp.setResultCode(tokenResp.getResultCode());
resp.setResultMsg(tokenResp.getResultMsg());
return resp;
@ -50,7 +53,8 @@ public class DtServiceImpl implements DtService {
@Override
public DtBaseResponseDTO<DtQueryMdmAllResponseDTO> queryMdmAll(DtQueryMdmAllRequestDTO request) {
DtBaseResponseDTO<DtTokenResponseDTO> tokenResp = dtClient.getToken(appId, appSecret);
DtTokenRequestDTO tokenRequestDTO = new DtTokenRequestDTO(appKey, appSecret);
DtBaseResponseDTO<DtTokenResponseDTO> tokenResp = dtClient.getToken(tokenRequestDTO);
if (tokenResp == null || tokenResp.getResultObject() == null || tokenResp.getResultObject().getToken() == null) {
DtBaseResponseDTO<DtQueryMdmAllResponseDTO> resp = new DtBaseResponseDTO<>();
resp.setResultCode(tokenResp.getResultCode());

View File

@ -1,6 +1,6 @@
package com.chinaunicom.mall.ebtp.extend.ioa.client;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.Flow;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.FlowDTO;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.IoaBaseResponseDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@ -9,7 +9,6 @@ import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
import java.util.Map;
/**
* IOA待办待阅服务
@ -78,7 +77,7 @@ public interface IoaClient {
IoaBaseResponseDTO createTask(
@RequestHeader("app_id") String appId,
@RequestHeader("app_secret") String appSecret,
@RequestBody Flow flow);
@RequestBody FlowDTO flow);
/**
* 修改待办待阅状态批量最多支持100个

View File

@ -3,7 +3,7 @@ package com.chinaunicom.mall.ebtp.extend.ioa.controller;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.common.util.PropertyUtils;
import com.chinaunicom.mall.ebtp.extend.ioa.constant.IoaErrorEnum;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.Flow;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.FlowDTO;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.IoaBaseResponseDTO;
import com.chinaunicom.mall.ebtp.extend.ioa.service.IoaService;
import lombok.extern.slf4j.Slf4j;
@ -27,7 +27,7 @@ public class IoaController {
* 创建待办
*/
@PostMapping("/create")
public BaseResponse<String[]> createTask(@RequestBody Flow flow) {
public BaseResponse<String[]> createTask(@RequestBody FlowDTO flow) {
// 判断并设置默认值
if (StringUtils.isBlank(flow.getFlowId())) {
flow.setFlowId(PropertyUtils.getSnowflakeId());

View File

@ -5,7 +5,7 @@ import lombok.Data;
import java.util.List;
@Data
public class Flow {
public class FlowDTO {
/**
* 流程ID (不传就是雪花ID)
*/
@ -33,6 +33,6 @@ public class Flow {
/**
* 待办待阅数据集合最多100
*/
private List<Task> tasks;
private List<TaskDTO> tasks;
}

View File

@ -5,7 +5,7 @@ import lombok.Data;
import java.util.Map;
@Data
public class Task {
public class TaskDTO {
/**
* 业务待办id待办待阅在业务系统的唯一标识 id
*/

View File

@ -1,10 +1,9 @@
package com.chinaunicom.mall.ebtp.extend.ioa.service;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.Flow;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.FlowDTO;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.IoaBaseResponseDTO;
import java.util.List;
import java.util.Map;
public interface IoaService {
/**
@ -12,7 +11,7 @@ public interface IoaService {
* @param flow 流程对象
* @return 结果Map
*/
IoaBaseResponseDTO createTask(Flow flow);
IoaBaseResponseDTO createTask(FlowDTO flow);
/**
* 修改待办待阅状态(批量)

View File

@ -1,7 +1,7 @@
package com.chinaunicom.mall.ebtp.extend.ioa.service.impl;
import com.chinaunicom.mall.ebtp.extend.ioa.client.IoaClient;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.Flow;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.FlowDTO;
import com.chinaunicom.mall.ebtp.extend.ioa.entity.IoaBaseResponseDTO;
import com.chinaunicom.mall.ebtp.extend.ioa.service.IoaService;
import org.springframework.beans.factory.annotation.Autowired;
@ -23,7 +23,7 @@ public class IoaServiceImpl implements IoaService {
private String appSecret;
@Override
public IoaBaseResponseDTO createTask(Flow flow) {
public IoaBaseResponseDTO createTask(FlowDTO flow) {
return ioaClient.createTask(appId, appSecret, flow);
}