新能云枢超标、改签流程调用测试编写

This commit is contained in:
dengwc 2024-02-29 17:24:14 +08:00
parent 3dca884467
commit 48888e5e49
11 changed files with 303 additions and 56 deletions

View File

@ -75,6 +75,13 @@
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>com.authine.cloudpivot</groupId>
<artifactId>cloudpivot-opensdk</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>

View File

@ -24,7 +24,8 @@ public class FSSCController {
@PostMapping("/login")
public Result<LoginResponse> loginToFSSC() {
User currentUser = BaseContext.getCurrentUser();
return Result.Success(SUCCESS, LoginResponse.success(FSSCUrl + FSSC_LOGIN_PATH_APPROVAL + currentUser.getEmployeeNo().toString()));
String companyCode = currentUser.getCompanyCode();//公司编号
return Result.Success(SUCCESS, LoginResponse.success(FSSCUrl + FSSC_LOGIN_PATH_APPROVAL + currentUser.getEmployeeNo()));
}
}

View File

@ -37,57 +37,61 @@ public class LYOrderExtensionFactoryImpl implements OrderExtensionFactory {
TrainDetailResponse.TravelData travelData = data.getTravelData();
TrainOrderDetail trainOrderDetail = new TrainOrderDetail();
//映射值
/*trainOrderDetail.setOrderNo(data.getOrderNo())
.setOverStandard(null)
.setParentOrderNo()
.setOriginalOrderNo(null)
/* trainOrderDetail.setOrderNo(data.getOrderNo())
.setOverStandard(ruleViolate)
.setParentOrderNo(null)
.setOriginalOrderNo(originalOrderNo)
.setOrderStatus(null)
.setAccountCompanyId()
.setAccountCompanyName()
.setAccountCompanyId(null)
.setAccountCompanyName(null)
.setReceiptsNum(travelData.getTravelApplyNo())
.setScheduleNum()
.setScheduleNum(null)
.setBookingUserCode(data.getOutEmployeeId())
.setBookingName()
.setBookingUserPhone()
.setCreateTime()
.setStartTime()
.setArriveTime()
.setFromStationName()
.setToStationName()
.setTrainNo()
.setFromCity()
.setToCity()
.setRunTime()
.setOrderAmount()
.setPreServiceFee()
.setPostServiceFee()
.setRefundAmount()
.setChangeDifference()
.setChangeCost()
.setTickets()
.setSeatType()
.setSeatName()
.setTicketPrice()
.setRefundCost()
.setRefundPrice()
.setStandardItems()
.setUserName()
.setUserCode()
.setOverStandard()
.setPhone()
// .setXXX()
// .setXXX()
// .setXXX()
// .setXXX()
// .setXXX()
.setBOOK_ORG_STRUCT_1()
.setBOOK_ORG_STRUCT_2()
.setBOOK_ORG_STRUCT_3()
.setPaymentType()
// .setXXX()
// .setXXX()
// .setXXX()
;*/
.setBookingName(null)
.setBookingUserPhone(null)
.setCreateTime(issueTime)
.setStartTime(departureTime)
.setArriveTime(arrivalTime)
.setFromStationName(data.getFromStation())
.setToStationName(data.getToStation())
.setTrainNo(data.getTrainNo())
.setFromCity(departCityName)
.setToCity(arriveCityName)
.setRunTime(null)
.setOrderAmount(data.getTotalAmount())
.setPreServiceFee(servicePrice)
.setPostServiceFee(afterSettlementServicePrice)
.setRefundAmount(refundPrice)
.setChangeDifference(changePriceDiff)
.setChangeCost(serviceCharge)
.setTickets(
data.getPriceVarList().stream()
.flatMap(priceVar -> priceVar.getPassengers().stream())
.toList()
)
.setSeatType(data.getItems().isEmpty() ? null : data.getItems().get(0).getSeatClass())
.setSeatName(data.getItems().isEmpty() ? null : data.getItems().get(0).getSeatNo())
.setTicketPrice(price)
.setRefundCost(null)
.setRefundPrice(refundPrice)
.setStandardItems(policyName)
.setUserName(passengerName)
.setUserCode(employeeCode)
.setOverStandard(ruleViolate)
.setPhone(null)
// .setXXX(携程预订/同程预订)
// .setXXX(PersonalPrice)
// .setXXX(CompanyPrice)
// .setXXX(null)
// .setXXX(foulReason)//超标原因
.setBOOK_ORG_STRUCT_1(null)
.setBOOK_ORG_STRUCT_2(null)
.setBOOK_ORG_STRUCT_3(null)
.setPaymentType(payType)
// .setXXX(null)//入住人组织架构信息3
// .setXXX(null)//项目订单号
// .setXXX(null)//成本中心*/
;
return trainOrderDetail;
}
@ -245,6 +249,7 @@ public class LYOrderExtensionFactoryImpl implements OrderExtensionFactory {
return null;
}
private HotelOrderDetail convertHotel(HotelDetailResponse hotelDetailResponse) {
HotelOrderDetail hotelOrderDetail = new HotelOrderDetail();
HotelDetailResponse.Data data = hotelDetailResponse.getData();

View File

@ -4,7 +4,14 @@ public class BPMConstant {
//BPM
public static final String H3BPM = "H3BPM";
public static final String H3BPM_EXCEED_STANDARD_URL = "/Portal/Webservices/ExternalStartService.asmx/StartWorkflowByEntityTransJson";
public static final String XNBPM = "XNBPM";
public static final String H3BPM_EXCEED_STANDARD_URL = "/Portal/Webservices/ExternalStartService.asmx/StartWorkflowByEntityTransJson";//H3BPM
public static final String XNBPM_TOKEN_URL = "/api/login/crm/ajax";//新能云枢获取token和用户id
public static final String XNBPM_EXCEED_STANDARD_URL = "/api/openapi/v3/workflow/start";//新能云枢发起流程
public static final String CLIENT_ID = "xclient";//客户端id
public static final String CLIENT_SECRET = "0a417ecce58c31b32364ce19ca8fcd15";//密钥
public static final String EXCEED_STANDARD_TYPE_TRAIN = "火车票超标";//方法名称
public static final String EXCEED_STANDARD_TYPE_HOTEL = "酒店超标";//方法名称
public static final String EXCEED_STANDARD_TYPE_FLIGHT = "机票超标";//方法名称

View File

@ -5,7 +5,9 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
@ -74,6 +76,18 @@ public class PostRequest {
return gson.fromJson(responseBody, responseType);
}
public <T> T get(String url, Class<T> responseType) {
HttpUriRequest request = new HttpGet(url);
String responseBody;
try {
responseBody = EntityUtils.toString(client.execute(request).getEntity(), "UTF-8");
return gson.fromJson(responseBody, responseType);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public Gson gson() {
return gson;
}

View File

@ -1,19 +1,33 @@
package com.chint.interfaces.rest.bpm;
import com.alibaba.fastjson2.JSON;
import com.authine.cloudpivot.opensdk.ApiException;
import com.authine.cloudpivot.opensdk.CloudpivotOpenClient;
import com.authine.cloudpivot.opensdk.model.request.workflow.StartWorkflowRequest;
import com.authine.cloudpivot.opensdk.model.response.workflow.StartWorkflowResponse;
import com.chint.domain.aggregates.user.User;
import com.chint.infrastructure.util.BaseContext;
import com.chint.interfaces.rest.base.PostRequest;
import com.chint.interfaces.rest.bpm.XNBPM.ClientFactory;
import com.chint.interfaces.rest.bpm.XNBPM.XNTokenDto;
import com.chint.interfaces.rest.bpm.dot.*;
import com.chint.interfaces.rest.bpm.dto.BPMBaseRequest;
import com.chint.interfaces.rest.bpm.dto.BPMResponse;
import com.chint.interfaces.rest.bpm.dto.ExceedStandardDto;
import com.chint.interfaces.rest.bpm.dto.RescheduleDto;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import static com.chint.infrastructure.constant.BPMConstant.H3BPM_EXCEED_STANDARD_URL;
import static com.chint.infrastructure.constant.BPMConstant.XNBPM_TOKEN_URL;
@Service
@ -25,17 +39,31 @@ public class BPMRequest {
@Value("${bpm.H3BPMUrl}")
private String H3BPMUrl;
@Value("${bpm.XNBPMUrl}")
private String XNBPMUrl;
//超标申请
public BPMResponse exceedStandard(ExceedStandardDto exceedStandardDto) {
return submitWorkflow("JT_FI_CLCESQ", exceedStandardDto);
if ("H3BPM".equals("XNBPM")) {
return XNBPMSubmitWorkflow("JG_AS_CLCESQ", exceedStandardDto);
} else {
return H3BPMSubmitWorkflow("JT_FI_CLCESQ", exceedStandardDto);
}
}
//改签
//改签申请
public BPMResponse reschedule(RescheduleDto rescheduleDto) {
return submitWorkflow("JT_FI_CLGQSQ", rescheduleDto);
if ("H3BPM".equals("XNBPM")) {
return XNBPMSubmitWorkflow("JG_AS_CLGQSQ", rescheduleDto);
} else {
return H3BPMSubmitWorkflow("JT_FI_CLGQSQ", rescheduleDto);
}
}
public BPMResponse submitWorkflow(String workflowCode, Object entityObject) {
/**
* H3BPM
*/
public BPMResponse H3BPMSubmitWorkflow(String workflowCode, Object entityObject) {
BPMBaseRequest bpmRequest = new BPMBaseRequest();
Gson gson = new Gson();
String entityParamValues = gson.toJson(entityObject);
@ -49,4 +77,39 @@ public class BPMRequest {
System.out.println("response = " + bpmBaseResponse);
return bpmBaseResponse.getD();
}
/**
* 新能云枢接口
*/
public BPMResponse XNBPMSubmitWorkflow(String workflowCode, Object entityObject) {
//获取用户信息
User user = BaseContext.getCurrentUser();
String employeeNo = user.getEmployeeNo();//sf号
XNTokenDto xnTokenDto = httpPostRequest.get(XNBPMUrl + XNBPM_TOKEN_URL + "?code=" + employeeNo, XNTokenDto.class);
if (!"0".equals(xnTokenDto.getErrcode())) {
throw new RuntimeException("用户不存在!");
}
String userId = xnTokenDto.getUser_id();
CloudpivotOpenClient client = ClientFactory.getInstance();
StartWorkflowRequest request = new StartWorkflowRequest();
Gson gson = new Gson();
String entityParamValues = gson.toJson(entityObject);
Type type = new TypeToken<HashMap<String, Object>>() {
}.getType();
HashMap<String, Object> map = gson.fromJson(entityParamValues, type);
request.setData(map);//数据
request.setDepartmentId("");//部门id默认主部门
request.setFinishStart(true);//发起流程
request.setUserId(userId);//员工号
request.setWorkflowCode(workflowCode);//超标流程
try {
StartWorkflowResponse response = client.startWorkflow(request);
System.out.println("response = " + JSON.toJSONString(response));
} catch (ApiException e) {
throw new RuntimeException(e.getMessage());
}
BPMResponse bpmResponse = new BPMResponse();
bpmResponse.setSuccess(true);
return bpmResponse;
}
}

View File

@ -0,0 +1,37 @@
package com.chint.interfaces.rest.bpm.XNBPM;
import com.authine.cloudpivot.opensdk.CloudpivotOpenClient;
import com.authine.cloudpivot.opensdk.client.impl.JdkHttpClient;
import com.authine.cloudpivot.opensdk.config.CloudpivotEnvConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import static com.chint.infrastructure.constant.BPMConstant.*;
/**
* 新能云枢
*/
@Service
public class ClientFactory {
private static CloudpivotOpenClient client;
private static String XNBPMUrl;
@Value("${bpm.XNBPMUrl}")
public void setXNBPMUrl(String XNBPMUrl) {
ClientFactory.XNBPMUrl = XNBPMUrl;
}
public synchronized static CloudpivotOpenClient getInstance() {
if (client == null) {
synchronized (CloudpivotOpenClient.class) {
if (client == null) {
CloudpivotEnvConfig config = new CloudpivotEnvConfig(XNBPMUrl + "/api", CLIENT_ID, CLIENT_SECRET);
client = new CloudpivotOpenClient(config, new JdkHttpClient());
}
}
}
return client;
}
}

View File

@ -0,0 +1,11 @@
package com.chint.interfaces.rest.bpm.XNBPM;
import lombok.Data;
@Data
public class XNTokenDto {
private String errcode;
private String access_token;
private String refresh_token;
private String user_id;
}

View File

@ -63,3 +63,4 @@ paila:
bpm:
H3BPMUrl: http://10.207.0.245:8012
XNBPMUrl: http://10.145.30.119:8090

View File

@ -51,3 +51,4 @@ paila:
bpm:
H3BPMUrl: http://10.207.0.245:8012
XNBPMUrl: http://10.145.30.119:8090

View File

@ -1,9 +1,20 @@
package com.chint;
import cn.hutool.core.lang.hash.Hash;
import com.alibaba.fastjson2.JSON;
import com.authine.cloudpivot.opensdk.ApiException;
import com.authine.cloudpivot.opensdk.CloudpivotOpenClient;
import com.authine.cloudpivot.opensdk.model.request.bizobject.CreateBoRequest;
import com.authine.cloudpivot.opensdk.model.request.workflow.StartWorkflowRequest;
import com.authine.cloudpivot.opensdk.model.response.bizobject.CreateBoResponse;
import com.authine.cloudpivot.opensdk.model.response.workflow.StartWorkflowResponse;
import com.chint.domain.aggregates.user.User;
import com.chint.infrastructure.constant.LYConstant;
import com.chint.infrastructure.util.BaseContext;
import com.chint.infrastructure.util.OrderNo;
import com.chint.interfaces.rest.base.PostRequest;
import com.chint.interfaces.rest.bpm.XNBPM.ClientFactory;
import com.chint.interfaces.rest.bpm.XNBPM.XNTokenDto;
import com.chint.interfaces.rest.bpm.dot.*;
import com.chint.interfaces.rest.bpm.dto.BPMBaseRequest;
import com.chint.interfaces.rest.bpm.dto.BPMResponse;
@ -18,19 +29,23 @@ import com.chint.interfaces.rest.ly.dto.commonresult.Result;
import com.chint.interfaces.rest.ly.dto.estimateprice.*;
import com.chint.interfaces.rest.ly.vo.estimateprice.TrainPriceVo;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import static com.chint.infrastructure.constant.BPMConstant.H3BPM_EXCEED_STANDARD_URL;
import static com.chint.infrastructure.constant.BPMConstant.XNBPM_TOKEN_URL;
@SpringBootTest
public class LYTest {
@ -54,6 +69,8 @@ public class LYTest {
@Value("${bpm.H3BPMUrl}")
private String H3BPMUrl;
@Value("${bpm.XNBPMUrl}")
private String XNBPMUrl;
public static final String L_Y_BASE_URL = "https://api.qa.dttrip.cn/openapi";
public static final String L_Y_ORDER_PATH = "/openapi/api/TravelApplyOrder/ApplyOrderSync";
@ -354,4 +371,87 @@ public class LYTest {
System.out.println("response = " + response);
}
/**
* 云枢超标流程测试
*/
@Test
public void testDemo() throws Exception {
XNTokenDto xnTokenDto = httpPostRequest.get(XNBPMUrl + XNBPM_TOKEN_URL + "?code=" + "191107079", XNTokenDto.class);
if (!"0".equals(xnTokenDto.getErrcode())) {
throw new RuntimeException("用户不存在!");
}
String userId = xnTokenDto.getUser_id();
CloudpivotOpenClient client = ClientFactory.getInstance();
StartWorkflowRequest request = new StartWorkflowRequest();
Gson gson = new Gson();
ExceedStandardDto exceedStandardDto = new ExceedStandardDto();
exceedStandardDto.setOrderType("酒店超标")//内容选项酒店超标火车票超标机票超标
.setOrderSource("携程商旅")//内容选项:携程商旅/同程商旅
.setOrderNo("001021214")//订单号
.setHotelStandard("标间")//酒店超标提供住宿标准
.setHotelName("酒店名称")//酒店超标提供酒店名称
.setHouseLayout("双人床")//酒店超标提供房型
.setSeatingStandard("")//火车票超标提供席别标准
.setCabinClass("")//机票超标提供舱等
.setExcessAmount(BigDecimal.valueOf(1000))//超标金额
.setReason("酒店爆满订不到");//超标原因
String entityParamValues = gson.toJson(exceedStandardDto);
Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
HashMap<String, Object> map = gson.fromJson(entityParamValues, type);
request.setData(map);//数据
request.setDepartmentId("");//部门id默认主部门
request.setFinishStart(true);//发起流程
request.setUserId(userId);//员工号
request.setWorkflowCode("JG_AS_CLCESQ");//超标流程
try {
StartWorkflowResponse response = client.startWorkflow(request);
System.out.println("response = " + JSON.toJSONString(response));
} catch (ApiException e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* 云枢改签流程测试
*/
@Test
public void testDemo2() throws Exception {
XNTokenDto xnTokenDto = httpPostRequest.get(XNBPMUrl + XNBPM_TOKEN_URL + "?code=" + "191107079", XNTokenDto.class);
if (!"0".equals(xnTokenDto.getErrcode())) {
throw new RuntimeException("用户不存在!");
}
String userId = xnTokenDto.getUser_id();
CloudpivotOpenClient client = ClientFactory.getInstance();
StartWorkflowRequest request = new StartWorkflowRequest();
Gson gson = new Gson();
RescheduleDto rescheduleDto = new RescheduleDto();
rescheduleDto.setOrderType("机票改签")//内容选项机票改签机票退票火车票改签火车票退票
.setOrderSource("携程商旅")//携程商旅/同程商旅
.setOrderNo("00002")//订单号
.setStartTime("2024-02-22 10:00:00")//机票改签或火车票改签提供: 原时间
.setRebookStartTime("2024-02-23 10:00:00")//机票改签或火车票改签提供: 改签后时间
.setTrainNumber("")//火车票改签提供: 原车次
.setSeatingStandard("")//火车票改签提供: 原席别
.setRebookTrainNumber("")//火车票改签提供: 改签后车次
.setRebookSeatingStandard("")//火车票改签提供: 改签后席别
.setFee(BigDecimal.valueOf(100))//费用
.setReason("行程冲突");//原因
String entityParamValues = gson.toJson(rescheduleDto);
Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
HashMap<String, Object> map = gson.fromJson(entityParamValues, type);
request.setData(map);//数据
request.setDepartmentId("");//部门id默认主部门
request.setFinishStart(true);//发起流程
request.setUserId(userId);//员工号
request.setWorkflowCode("JG_AS_CLGQSQ");//改签流程
try {
StartWorkflowResponse response = client.startWorkflow(request);
System.out.println("response = " + JSON.toJSONString(response));
} catch (ApiException e) {
throw new RuntimeException(e.getMessage());
}
}
}