diff --git a/pom.xml b/pom.xml
index d1d73028..ec7065af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,11 +82,11 @@
3.0.3
-
-
-
-
-
+
+ com.authine.cloudpivot
+ cloudpivot-opensdk
+ 1.0
+
diff --git a/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java b/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java
index 85668c5b..444d6fb2 100644
--- a/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java
+++ b/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java
@@ -41,4 +41,13 @@ public class BPMController {
System.out.println("bpmBack = " + bpmBack);
return Result.Success(CommonMessageConstant.SUCCESS);
}
+
+ //差旅更变审批
+ @ApiOperation("BPM改签审批结果回传")
+ @PostMapping("/change/back")
+ public Result changeBack(@RequestBody BPMBack bpmBack) {
+ //获取订单号和审批结果
+ System.out.println("bpmBack = " + bpmBack);
+ return Result.Success(CommonMessageConstant.SUCCESS);
+ }
}
diff --git a/src/main/java/com/chint/interfaces/rest/bpm/BPMRequest.java b/src/main/java/com/chint/interfaces/rest/bpm/BPMRequest.java
index 290eff40..20971861 100644
--- a/src/main/java/com/chint/interfaces/rest/bpm/BPMRequest.java
+++ b/src/main/java/com/chint/interfaces/rest/bpm/BPMRequest.java
@@ -1,19 +1,31 @@
package com.chint.interfaces.rest.bpm;
+import com.alibaba.fastjson.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.BPMBaseResponse;
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.util.HashMap;
+
import static com.chint.infrastructure.constant.BPMConstant.H3BPM_EXCEED_STANDARD_URL;
+import static com.chint.infrastructure.constant.BPMConstant.XNBPM_TOKEN_URL;
@Service
@@ -68,35 +80,34 @@ public class BPMRequest {
* 新能云枢接口
*/
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>() {
-// }.getType();
-// HashMap 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;
- return null;
+ //获取用户信息
+ 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>() {
+ }.getType();
+ HashMap 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;
}
}
diff --git a/src/main/java/com/chint/interfaces/rest/bpm/XNBPM/ClientFactory.java b/src/main/java/com/chint/interfaces/rest/bpm/XNBPM/ClientFactory.java
index 3921c55a..179d210b 100644
--- a/src/main/java/com/chint/interfaces/rest/bpm/XNBPM/ClientFactory.java
+++ b/src/main/java/com/chint/interfaces/rest/bpm/XNBPM/ClientFactory.java
@@ -1,6 +1,9 @@
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;
@@ -11,7 +14,7 @@ import static com.chint.infrastructure.constant.BPMConstant.*;
*/
@Service
public class ClientFactory {
-// private static CloudpivotOpenClient client;
+ private static CloudpivotOpenClient client;
private static String XNBPMUrl;
@@ -21,15 +24,15 @@ public class ClientFactory {
}
-// 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;
-// }
+ 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;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/chint/interfaces/rest/bpm/dto/ChangeDto.java b/src/main/java/com/chint/interfaces/rest/bpm/dto/ChangeDto.java
new file mode 100644
index 00000000..64658609
--- /dev/null
+++ b/src/main/java/com/chint/interfaces/rest/bpm/dto/ChangeDto.java
@@ -0,0 +1,55 @@
+package com.chint.interfaces.rest.bpm.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * 变更
+ */
+@Data
+@Accessors(chain = true)
+public class ChangeDto {
+ private String StartTime;//出差开始时间 是否必填 是
+ private String EndTime;//出差结束时间 是否必填 是
+ private String Reason;//出差说明 是否必填 是
+ private List JT_FI_CLBGSQ_ITEM_NewTrip;//新增行程信息 是否必填 否
+ private List JT_FI_CLBGSQ_ITEM_OldTrip;//原行程信息 是否必填 否
+ private List JT_FI_CLBGSQ_ITEM_ChangeTrip;//变更行程信息 是否必填 否
+
+ //新增行程信息
+ @Data
+ @Accessors(chain = true)
+ public static class NewTrip {
+ private String AllowProductTypes;//行程类型 是否必填 是
+ private String DepartCitiesName;//出发地 是否必填 是
+ private String ArriveCitiesName;//目的地 是否必填 是
+ private String bsDate;//开始时间 是否必填 否
+ private String edDate;//结束时间 是否必填 否
+ private String Reason;//新增行程原因 是否必填 否
+ }
+
+ //原行程信息
+ @Data
+ @Accessors(chain = true)
+ public static class OldTrip {
+ private String AllowProductTypes;//行程类型 是否必填 是
+ private String DepartCitiesName;//出发地 是否必填 是
+ private String ArriveCitiesName;//目的地 是否必填 是
+ private String bsDate;//开始时间 是否必填 否
+ private String edDate;//结束时间 是否必填 否
+ }
+
+ //变更行程信息
+ @Data
+ @Accessors(chain = true)
+ public static class ChangeTrip {
+ private String AllowProductTypes;//行程类型 是否必填 是
+ private String DepartCitiesName;//出发地 是否必填 是
+ private String ArriveCitiesName;//目的地 是否必填 是
+ private String bsDate;//开始时间 是否必填 否
+ private String edDate;//结束时间 是否必填 否
+ private String Reason;//新增行程原因 是否必填 否
+ }
+}
diff --git a/src/test/java/com/chint/LYTest.java b/src/test/java/com/chint/LYTest.java
index 7adbc2fc..1aef8680 100644
--- a/src/test/java/com/chint/LYTest.java
+++ b/src/test/java/com/chint/LYTest.java
@@ -3,6 +3,10 @@ package com.chint;
import cn.hutool.core.lang.hash.Hash;
import com.alibaba.fastjson.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.constant.LYConstant;
import com.chint.infrastructure.util.BaseContext;
@@ -11,10 +15,7 @@ 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.chint.interfaces.rest.bpm.dto.*;
import com.chint.interfaces.rest.ly.LYLoginRequest;
import com.chint.interfaces.rest.ly.LYPostRequest;
import com.chint.interfaces.rest.ly.LYTokenRequest;
@@ -319,7 +320,7 @@ public class LYTest {
ExceedStandardDto exceedStandardDto = new ExceedStandardDto();
exceedStandardDto.setOrderType("酒店超标")//内容选项:酒店超标,火车票超标,机票超标
.setOrderSource("携程商旅")//内容选项:携程商旅/同程商旅
- .setOrderNo("001021214")//订单号
+ .setOrderNo("001121214")//订单号
.setHotelStandard("标间")//酒店超标提供:住宿标准
.setHotelName("酒店名称")//酒店超标提供:酒店名称
.setHouseLayout("双人床")//酒店超标提供:房型
@@ -366,45 +367,100 @@ public class LYTest {
System.out.println("response = " + response);
}
+
+ //差旅变更
+ @Test
+ void change() {
+ BPMBaseRequest bpmRequest = new BPMBaseRequest();
+ Gson gson = new Gson();
+ ChangeDto changeDto = new ChangeDto();
+ //新增行程
+ ArrayList newTrips = new ArrayList<>();
+ ChangeDto.NewTrip newTrip = new ChangeDto.NewTrip();
+ newTrip.setAllowProductTypes("飞机")
+ .setDepartCitiesName("温州")
+ .setArriveCitiesName("北京")
+ .setBsDate("2024-03-01")
+ .setEdDate("2024-03-01")
+ .setReason("出差帮扶");
+ newTrips.add(newTrip);
+ //原行程
+ ArrayList oldTrips = new ArrayList<>();
+ ChangeDto.OldTrip oldTrip = new ChangeDto.OldTrip();
+ oldTrip.setAllowProductTypes("火车")
+ .setDepartCitiesName("温州")
+ .setArriveCitiesName("杭州")
+ .setBsDate("2024-03-01")
+ .setEdDate("2024-03-01");
+ oldTrips.add(oldTrip);
+ //变更行程
+ ArrayList changeTrips = new ArrayList<>();
+ ChangeDto.ChangeTrip changeTrip = new ChangeDto.ChangeTrip();
+ changeTrip.setAllowProductTypes("火车")
+ .setDepartCitiesName("乐清")
+ .setArriveCitiesName("杭州")
+ .setBsDate("2024-03-01")
+ .setEdDate("2024-03-01")
+ .setReason("出发地变更");
+ changeTrips.add(changeTrip);
+ //设置值
+ changeDto.setStartTime("2024-03-01")//出差开始时间
+ .setEndTime("2024-03-01")//出差结束时间
+ .setReason("出差帮扶")//出差说明
+ .setJT_FI_CLBGSQ_ITEM_NewTrip(newTrips)//新增行程信息
+ .setJT_FI_CLBGSQ_ITEM_OldTrip(oldTrips)//原行程信息
+ .setJT_FI_CLBGSQ_ITEM_ChangeTrip(changeTrips);//变更行程信息
+ String entityParamValues = gson.toJson(changeDto);
+ bpmRequest.setWorkflowCode("JT_FI_CLBGSQ")//流程编码
+ .setUserCode("231116011")//sf号
+ .setFinishStart(true)//true:会自动流转到下一审批点,false:停在手工填写节点
+ .setEntityParamValues(entityParamValues);
+ BPMBaseResponse bpmBaseResponse = httpPostRequest.post(H3BPMUrl + H3BPM_EXCEED_STANDARD_URL, bpmRequest, BPMBaseResponse.class);
+ System.out.println("response = " + bpmBaseResponse);
+ BPMResponse response = bpmBaseResponse.getD();
+ 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>(){}.getType();
-// HashMap 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());
-// }
+ 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>(){}.getType();
+ HashMap 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());
+ }
}
@@ -413,40 +469,40 @@ public class LYTest {
*/
@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>(){}.getType();
-// HashMap 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());
-// }
+ 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>(){}.getType();
+ HashMap 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());
+ }
}
}