From 15d941b70fc216bfed8b1b4e7637264bf9aa8e85 Mon Sep 17 00:00:00 2001 From: Aria <2324362183@qq.com> Date: Mon, 25 Nov 2024 17:41:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=9D=E5=93=81=E4=BB=95=E5=A4=96=E5=87=BA?= =?UTF-8?q?=E5=92=8C=E5=B7=AE=E6=97=85=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../finfiling/common/enums/ChannelEnum.java | 5 + .../quartz/constants/BusinessTypeEnum.java | 23 ++ .../constants/OfficeTypeCodeConstants.java | 16 ++ .../constants/TemplateAndCostConstants.java | 20 ++ .../quartz/constants/TravelPurposeEnum.java | 43 +++ .../quartz/constants/VendorTypeEnum.java | 22 ++ .../dipinshi/DiPinShiFinFilingService.java | 24 +- .../attendance/DiPinShiAttendanceService.java | 29 -- .../IDiPinShiAttendanceService.java | 18 -- .../vo/DiPinShiAttendanceGoOutReqVO.java | 9 - .../vo/DiPinShiAttendanceTravelInReqVO.java | 9 - ...iPinShiAttendanceTravelOutNotUSAReqVO.java | 9 - .../vo/req/DiPinShiAttendanceGoOutReqVO.java | 24 ++ .../vo/{ => req}/DiPinShiAttendanceReqVO.java | 7 +- .../req/DiPinShiAttendanceTravelInReqVO.java | 34 +++ ...iPinShiAttendanceTravelOutNotUSAReqVO.java | 34 +++ .../DiPinShiAttendanceTravelOutReqVO.java | 8 +- .../{ => resp}/DiPinShiAttendanceRespVO.java | 2 +- .../AbstractHoseCloudBaseService.java | 202 ++++++++++++++ .../hosecloud/DiPinShiAttendanceService.java | 72 +++++ .../hosecloud/IDiPinShiAttendanceService.java | 18 ++ .../hosecloud/IHoseCloudPersonnelService.java | 10 - .../HoseCloudPersonnelService.java | 9 +- .../organize/HoseCloudTemplateService.java | 56 ++++ .../organize/IHoseCloudPersonnelService.java | 10 + .../organize/IHoseCloudTemplateService.java | 19 ++ .../hosecloud/organize/vo/HeSiGoOutVO.java | 12 + .../hosecloud/organize/vo/HeSiTravelInVO.java | 12 + .../organize/vo/HeSiTravelOutNotUSAVO.java | 11 + .../organize/vo/HeSiTravelOutVO.java | 11 + .../quartz/hosecloud/organize/vo/HeSiVO.java | 39 +++ .../vo/HoseCloudPersonnelVO.java | 2 +- .../organize/vo/HoseCloudTemplateVO.java | 11 + .../sync/OutboundSyncDiPinShiService.java | 249 ++++++++++++++++++ .../sync/OutboundSyncGeYuanService.java | 208 --------------- 35 files changed, 970 insertions(+), 317 deletions(-) create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/BusinessTypeEnum.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/OfficeTypeCodeConstants.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TemplateAndCostConstants.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TravelPurposeEnum.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/VendorTypeEnum.java delete mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/DiPinShiAttendanceService.java delete mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/IDiPinShiAttendanceService.java delete mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceGoOutReqVO.java delete mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelInReqVO.java delete mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelOutNotUSAReqVO.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceGoOutReqVO.java rename fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/{ => req}/DiPinShiAttendanceReqVO.java (77%) create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelInReqVO.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelOutNotUSAReqVO.java rename fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/{ => req}/DiPinShiAttendanceTravelOutReqVO.java (52%) rename fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/{ => resp}/DiPinShiAttendanceRespVO.java (52%) create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/DiPinShiAttendanceService.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IDiPinShiAttendanceService.java delete mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IHoseCloudPersonnelService.java rename fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/{ => organize}/HoseCloudPersonnelService.java (80%) create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/HoseCloudTemplateService.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudPersonnelService.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudTemplateService.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiGoOutVO.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelInVO.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutNotUSAVO.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutVO.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiVO.java rename fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/{ => organize}/vo/HoseCloudPersonnelVO.java (82%) create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HoseCloudTemplateVO.java create mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncDiPinShiService.java delete mode 100644 fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncGeYuanService.java diff --git a/fin-filing-common/src/main/java/cn/jiutqy/finfiling/common/enums/ChannelEnum.java b/fin-filing-common/src/main/java/cn/jiutqy/finfiling/common/enums/ChannelEnum.java index 2dd9aeb..aaae966 100644 --- a/fin-filing-common/src/main/java/cn/jiutqy/finfiling/common/enums/ChannelEnum.java +++ b/fin-filing-common/src/main/java/cn/jiutqy/finfiling/common/enums/ChannelEnum.java @@ -12,6 +12,11 @@ public enum ChannelEnum implements IFinFilingChannelService { GE_YUAN("geyuan"), DI_PIN_SHI("dipinshi"), + + DI_PIN_SHI_GO_OUT("dipinshi_goOut"), + + DI_PIN_SHI_TRAVEL("dipinshi_travel"), + HOSECLOUD("hosecloud"); diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/BusinessTypeEnum.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/BusinessTypeEnum.java new file mode 100644 index 0000000..a183fc3 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/BusinessTypeEnum.java @@ -0,0 +1,23 @@ +package cn.jiutqy.finfiling.quartz.constants; + +import lombok.Getter; + +@Getter +public enum BusinessTypeEnum { + + GO_OUT("ID01ErfUV64viD", "公出"), + + TRAVEL_IN("ID01DLQ36ToAB9", "国内出差"), + + TRAVEL_OUT("ID01DLQ21tIZeD", "国际出差"), + + TRAVEL_OUT_NOT_USA("ID01ErfRpaaLYH", "国际出差非美国"); + + private final String name; + private final String code; + + BusinessTypeEnum(String code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/OfficeTypeCodeConstants.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/OfficeTypeCodeConstants.java new file mode 100644 index 0000000..9b22c2c --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/OfficeTypeCodeConstants.java @@ -0,0 +1,16 @@ +package cn.jiutqy.finfiling.quartz.constants; + +/** + * 办公类型code + */ +public class OfficeTypeCodeConstants { + /** + * 居家办公code + */ + public static final String HOME_OFFICE = "ID01ErluqEalOv"; + + /** + * 外出办公 + */ + public static final String OUTSIDE_OFFICE = "ID01Erln0ddpNR"; +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TemplateAndCostConstants.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TemplateAndCostConstants.java new file mode 100644 index 0000000..cdcc2c9 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TemplateAndCostConstants.java @@ -0,0 +1,20 @@ +package cn.jiutqy.finfiling.quartz.constants; + +/** + * 模板和费用相关信息 + */ +public class TemplateAndCostConstants { + + //模板id + public static final String TEMPLATE_ID = "ID01DlW0k33Ekv:PRESET_REQUISITION_TEAM_BUILDING"; + + //模板详情id + public static final String TEMPLATE_DETAIL_ID = "ID01DlW0k33Ekv:PRESET_REQUISITION_TEAM_BUILDING:e323d4114a633cb4efda5b4334f4d5c7676029dd"; + + //费用类型id + public static final String FEE_TYPE_ID = "ID01Ernsfgh5Vl"; + + //费用详情id + public static final String FEE_TYPE_DETAIL_ID = "ID01Ernsfgh5Vl:requisition:c4a34dd1b7cf550ad7c30627ebc58f75d8967e02"; + +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TravelPurposeEnum.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TravelPurposeEnum.java new file mode 100644 index 0000000..9128dd3 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/TravelPurposeEnum.java @@ -0,0 +1,43 @@ +package cn.jiutqy.finfiling.quartz.constants; + +import lombok.Getter; + +@Getter +public enum TravelPurposeEnum { + + BUYING_TRIP("ID01ErpJZbpaCX","Buying Trip"), + + GENERAL_FACTORY_REVISIT("ID01ErpLbD47Pp","General Factory Revisit"), + + NEW_VENDOR_EXPLORE("ID01ErpSiLBSdF","New Vendor Explore"), + + PRE_BUYING_TRIP("ID01ErpKMI8Brh","Pre-buying Trip"), + + PRE_PRODUCTION_SCHEDULE_CHECK("ID01ErpOUH2JPx","Pre-production Schedule Check"), + + SAMPLE_CHECK("ID01ErpFhrPoOH","Sample Check"), + + TRADE_SHOW_VISIT("ID01ErpLi7Xszt","Trade Show Visit") + + ; + + private final String code; + private final String name; + + + TravelPurposeEnum(String code, String name) { + this.code = code; + this.name = name; + } + + public static String getCodeByName(String name) { + for (TravelPurposeEnum purpose : values()) { + if (purpose.getName().equals(name)) { + return purpose.getCode(); + } + } + return null; + } + + +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/VendorTypeEnum.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/VendorTypeEnum.java new file mode 100644 index 0000000..5369842 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/constants/VendorTypeEnum.java @@ -0,0 +1,22 @@ +package cn.jiutqy.finfiling.quartz.constants; + +import lombok.Getter; + +@Getter +public enum VendorTypeEnum { + + EXISTING_VENDOR_WITH_SHIPMENT("ID01ErpISmXg3J","EXISTING_VENDOR_WITH_SHIPMENT"), + + KNOWN_VENDOR_WITHOUT_SHIPMENT("ID01ErpK7BfKUL","KNOWN_VENDOR_WITHOUT_SHIPMENT"), + + NEW_VENDOR("ID01Erpz4ea3W7","NEW_VENDOR"); + + + private final String name; + private final String code; + + VendorTypeEnum(String code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/DiPinShiFinFilingService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/DiPinShiFinFilingService.java index d22940d..783387a 100644 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/DiPinShiFinFilingService.java +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/DiPinShiFinFilingService.java @@ -34,25 +34,17 @@ public class DiPinShiFinFilingService extends AbstractDiPinShiBaseService implem //构建请求体 JSONObject reqBody = buildReqBody(start,end,type); String url = getAccessToken(BATCH_APPROVAL_NO, ChannelEnum.DI_PIN_SHI.getChannelId(), ChannelTypeEnum.IN); - String result = OkHttpClientUtil.doPostJson(url, reqBody.toJSONString()); - JSONObject res = JSONObject.parseObject(JSONObject.toJSONString(result)); - JSONArray jsonArray = res.getJSONArray("sp_no_list"); - for (Object spNo : jsonArray) { - spNoList.add((String) spNo); - } + String newNextCursor = ""; - //判断后面还有没有数据 - String newNextCursor = res.getString("new_next_cursor"); - while (StringUtils.isNotBlank(newNextCursor)){ - result = OkHttpClientUtil.doPostJson(url, reqBody.toJSONString()); - res = JSONObject.parseObject(JSONObject.toJSONString(result)); - jsonArray = res.getJSONArray("sp_no_list"); - for (Object spNo : jsonArray) { - spNoList.add((String) spNo); - } + do { + String result = OkHttpClientUtil.doPostJson(url, reqBody.toJSONString()); + JSONObject res = JSONObject.parseObject(JSONObject.toJSONString(result)); + + JSONArray jsonArray = res.getJSONArray("sp_no_list"); + spNoList.addAll(jsonArray.toJavaList(String.class)); newNextCursor = res.getString("new_next_cursor"); - } + } while (StringUtils.isNotBlank(newNextCursor)); return spNoList; } diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/DiPinShiAttendanceService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/DiPinShiAttendanceService.java deleted file mode 100644 index a29c7aa..0000000 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/DiPinShiAttendanceService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance; - -import cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.DiPinShiAttendanceGoOutReqVO; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.HashMap; - -@Component -@Slf4j -public class DiPinShiAttendanceService implements IDiPinShiAttendanceService{ - @Override - public void attendanceGoOut(DiPinShiAttendanceGoOutReqVO goOut) { - log.info("外出申请单号:{}", goOut.getApprovalNo()); - //获取合思token - - //构建请求体 - - //发送请求 - - - - } - - @Override - public void attenancedTravel(HashMap map) { - - } -} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/IDiPinShiAttendanceService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/IDiPinShiAttendanceService.java deleted file mode 100644 index 2ceba58..0000000 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/IDiPinShiAttendanceService.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance; - -import cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.DiPinShiAttendanceGoOutReqVO; - -import java.util.HashMap; - -public interface IDiPinShiAttendanceService { - - /** - * 同步外出 - */ - void attendanceGoOut(DiPinShiAttendanceGoOutReqVO goOut); - - /** - * 同步出差 - */ - void attenancedTravel(HashMap map); -} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceGoOutReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceGoOutReqVO.java deleted file mode 100644 index c63baf5..0000000 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceGoOutReqVO.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DiPinShiAttendanceGoOutReqVO extends DiPinShiAttendanceReqVO{ -} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelInReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelInReqVO.java deleted file mode 100644 index 7bbddd8..0000000 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelInReqVO.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DiPinShiAttendanceTravelInReqVO extends DiPinShiAttendanceReqVO{ -} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelOutNotUSAReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelOutNotUSAReqVO.java deleted file mode 100644 index 312b434..0000000 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelOutNotUSAReqVO.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo; - -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DiPinShiAttendanceTravelOutNotUSAReqVO extends DiPinShiAttendanceReqVO{ -} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceGoOutReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceGoOutReqVO.java new file mode 100644 index 0000000..3c08781 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceGoOutReqVO.java @@ -0,0 +1,24 @@ +package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DiPinShiAttendanceGoOutReqVO extends DiPinShiAttendanceReqVO { + + /** + * 办公类型 + */ + private String officeType; + + /** + * 公出时长 + */ + private String goOutHours; + + /** + * 公出事由 + */ + private String goOutReason; +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceReqVO.java similarity index 77% rename from fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceReqVO.java rename to fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceReqVO.java index a256361..7fa27a9 100644 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceReqVO.java +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceReqVO.java @@ -1,4 +1,4 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo; +package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.req; import lombok.Data; @@ -35,4 +35,9 @@ public class DiPinShiAttendanceReqVO { */ private String data; + /** + * 出差类型 + */ + private String travelType; + } diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelInReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelInReqVO.java new file mode 100644 index 0000000..df7ae65 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelInReqVO.java @@ -0,0 +1,34 @@ +package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DiPinShiAttendanceTravelInReqVO extends DiPinShiAttendanceReqVO { + + /** + * 出差天数 + */ + private String travelDays; + + /** + * 拜访日期 + */ + private String visitDate; + + /** + * 供应商名称 + */ + private String vendorName; + + /** + * 供应商类型 + */ + private String vendorType; + + /** + * 出差目的 + */ + private String travelPurpose; +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelOutNotUSAReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelOutNotUSAReqVO.java new file mode 100644 index 0000000..ef90a13 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelOutNotUSAReqVO.java @@ -0,0 +1,34 @@ +package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DiPinShiAttendanceTravelOutNotUSAReqVO extends DiPinShiAttendanceReqVO { + + /** + * 拜访日期 + */ + private String visitDate; + + /** + * 国家、地区 + */ + private String address; + + /** + * 供应商名称 + */ + private String vendorName; + + /** + * 供应商类型 + */ + private String vendorType; + + /** + * 出差目的 + */ + private String travelPurpose; +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelOutReqVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelOutReqVO.java similarity index 52% rename from fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelOutReqVO.java rename to fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelOutReqVO.java index 167aa0e..f633334 100644 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceTravelOutReqVO.java +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/req/DiPinShiAttendanceTravelOutReqVO.java @@ -1,9 +1,13 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo; +package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.req; import lombok.Data; import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data -public class DiPinShiAttendanceTravelOutReqVO extends DiPinShiAttendanceReqVO{ +public class DiPinShiAttendanceTravelOutReqVO extends DiPinShiAttendanceReqVO { + /** + * 出差目的 + */ + private String travelPurpose; } diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceRespVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/resp/DiPinShiAttendanceRespVO.java similarity index 52% rename from fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceRespVO.java rename to fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/resp/DiPinShiAttendanceRespVO.java index f8c9942..c5c635f 100644 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/DiPinShiAttendanceRespVO.java +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/dipinshi/attendance/vo/resp/DiPinShiAttendanceRespVO.java @@ -1,4 +1,4 @@ -package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo; +package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.resp; import lombok.Data; diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/AbstractHoseCloudBaseService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/AbstractHoseCloudBaseService.java index ba16121..76c4e36 100644 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/AbstractHoseCloudBaseService.java +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/AbstractHoseCloudBaseService.java @@ -1,19 +1,221 @@ package cn.jiutqy.finfiling.quartz.hosecloud; +import cn.jiutqy.finfiling.common.domain.FinFilingSyncLog; import cn.jiutqy.finfiling.common.enums.ChannelTypeEnum; import cn.jiutqy.finfiling.common.factory.FinFilingAccessTokenFactory; import cn.jiutqy.finfiling.common.service.IFinFilingAccessTokenService; +import cn.jiutqy.finfiling.common.service.IFinFilingSyncLogService; +import cn.jiutqy.finfiling.quartz.constants.*; +import cn.jiutqy.finfiling.quartz.hosecloud.organize.IHoseCloudPersonnelService; +import cn.jiutqy.finfiling.quartz.hosecloud.organize.vo.HoseCloudPersonnelVO; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + @Component +@Slf4j public abstract class AbstractHoseCloudBaseService { protected final String BASE_URL = "https://app.ekuaibao.com"; + + private static final String LEGAL_ENTITY = "帝品仕商务信息咨询(上海)有限公司"; + + private static final String LEGAL_ENTITY_ID = "ID01Dnd2qUASmj"; + + @Resource + private IFinFilingSyncLogService finFilingSyncLogService; + + @Resource + private IHoseCloudPersonnelService personnelService; + protected String getAccessToken(String url, String channelId, ChannelTypeEnum channelTypeEnum){ IFinFilingAccessTokenService accessTokenService = FinFilingAccessTokenFactory.getContainer(channelId); String accessToken = accessTokenService.getAccessToken(channelId, channelTypeEnum).getAccessToken(); return StringUtils.replace(url, "{accessToken}", accessToken); } + + + protected JSONObject mapping(Map data){ + //填充审批单号 + FinFilingSyncLog finFilingSyncLog = finFilingSyncLogService.getFinFilingSyncLogByInputDataId("审批单号"); + if (finFilingSyncLog != null){ + log.info("输入数据[{}]已同步", "审批单号"); + return null; + } + + JSONObject form = new JSONObject(); + form.put("specificationId", TemplateAndCostConstants.TEMPLATE_DETAIL_ID); + //先填充公用的数据 + //需要调用接口查询员工id + List strings = new ArrayList<>(); + HoseCloudPersonnelVO personnelVO = personnelService.queryUser(strings); + form.put("submitterId",personnelVO.getId()); + //申请日期需要转成时间戳 --看是什么样子的时间,然后转成时间戳 + form.put("requisitionDate","申请日期"); + //法人实体不确定填写中文还是公司id + form.put("法人实体",LEGAL_ENTITY_ID); + //需要调用接口查询员工部门 + form.put("expenseDepartment",personnelVO.getDefaultDepartment()); + //需要转成时间戳 + form.put("u_开始时间","u_开始时间"); + form.put("u_结束时间","u_结束时间"); + + //根据类型填充详情 + if (BusinessTypeEnum.GO_OUT.getName().equals(data.get("applicationType"))){ + hoseGoOutMapping(data, form); + }else if (BusinessTypeEnum.TRAVEL_IN.getName().equals(data.get("travelType"))){ + hoseTravelInMapping(data, form); + }else if (BusinessTypeEnum.TRAVEL_OUT.getName().equals(data.get("travelType"))){ + hoseTravelOutMapping(data, form); + }else if (BusinessTypeEnum.TRAVEL_OUT_NOT_USA.getName().equals(data.get("travelType"))){ + hoseTravelOutNotUSAMapping(data, form); + } + + return form; + } + + private void hoseGoOutMapping(Map data, JSONObject form) { + form.put("u_出差类型", BusinessTypeEnum.GO_OUT.getCode()); + String officeType = data.get("officeType"); + + form.put("u_办公类型",officeType.equals("居家办公") ? OfficeTypeCodeConstants.HOME_OFFICE : OfficeTypeCodeConstants.OUTSIDE_OFFICE); + //要么直接有时间,要么需要算时间 + form.put("公出时长",""); + + //可能会有多个详情 需要遍历填充数据 + JSONArray details = new JSONArray(); + + JSONObject detail = new JSONObject(); + detail.put("feeTypeId",TemplateAndCostConstants.FEE_TYPE_ID); + detail.put("specificationId",TemplateAndCostConstants.FEE_TYPE_DETAIL_ID); + + JSONObject feeTypeForm = new JSONObject(); + //填充公出事由 + feeTypeForm.put("u_公出事由",""); + detail.put("feeTypeForm",feeTypeForm); + details.add(detail); + + form.put("details",details); + } + + + private void hoseTravelInMapping(Map data, JSONObject form) { + form.put("u_出差类型",BusinessTypeEnum.TRAVEL_IN.getCode()); + //要么直接有时间,要么需要算时间 + form.put("出差天数",""); + + //可能会有多个详情 需要遍历填充数据 + JSONArray details = new JSONArray(); + + JSONObject detail = new JSONObject(); + detail.put("feeTypeId",TemplateAndCostConstants.FEE_TYPE_ID); + detail.put("specificationId",TemplateAndCostConstants.FEE_TYPE_DETAIL_ID); + + JSONObject feeTypeForm = new JSONObject(); + //填充数据 + feeTypeForm.put("u_拜访日期",""); + feeTypeForm.put("u_VendorName",""); + + if (VendorTypeEnum.EXISTING_VENDOR_WITH_SHIPMENT.getName().equals(data.get("供应商类型"))){ + feeTypeForm.put("u_供应商类型",VendorTypeEnum.EXISTING_VENDOR_WITH_SHIPMENT.getCode()); + }else if (VendorTypeEnum.KNOWN_VENDOR_WITHOUT_SHIPMENT.getName().equals(data.get("供应商类型"))){ + feeTypeForm.put("u_供应商类型",VendorTypeEnum.KNOWN_VENDOR_WITHOUT_SHIPMENT.getCode()); + }else if (VendorTypeEnum.NEW_VENDOR.getName().equals(data.get("供应商类型"))){ + feeTypeForm.put("u_供应商类型",VendorTypeEnum.NEW_VENDOR.getCode()); + } + + //取出data里的出差目的,data里的出差目前有多个,用分号隔开, + feeTypeForm.put("u_出差",assemblePurpose(data)); + detail.put("feeTypeForm",feeTypeForm); + details.add(detail); + + form.put("details",details); + } + + private void hoseTravelOutMapping(Map data, JSONObject form) { + form.put("u_出差类型",BusinessTypeEnum.TRAVEL_OUT.getCode()); + //要么直接有时间,要么需要算时间 + form.put("出差天数",""); + + //可能会有多个详情 需要遍历填充数据 + JSONArray details = new JSONArray(); + + JSONObject detail = new JSONObject(); + detail.put("feeTypeId",TemplateAndCostConstants.FEE_TYPE_ID); + detail.put("specificationId",TemplateAndCostConstants.FEE_TYPE_DETAIL_ID); + + JSONObject feeTypeForm = new JSONObject(); + //填充数据 + feeTypeForm.put("u_出差",assemblePurpose(data)); + detail.put("feeTypeForm",feeTypeForm); + details.add(detail); + + form.put("details",details); + } + + + + private void hoseTravelOutNotUSAMapping(Map data, JSONObject form) { + form.put("u_出差类型",BusinessTypeEnum.TRAVEL_OUT_NOT_USA.getCode()); + //要么直接有时间,要么需要算时间 + form.put("出差天数",""); + + //可能会有多个详情 需要遍历填充数据 + JSONArray details = new JSONArray(); + + JSONObject detail = new JSONObject(); + detail.put("feeTypeId",TemplateAndCostConstants.FEE_TYPE_ID); + detail.put("specificationId",TemplateAndCostConstants.FEE_TYPE_DETAIL_ID); + + JSONObject feeTypeForm = new JSONObject(); + //填充数据 + feeTypeForm.put("u_拜访日期",""); + feeTypeForm.put("u_出差目的地",""); + feeTypeForm.put("u_VendorName",""); + + if (VendorTypeEnum.EXISTING_VENDOR_WITH_SHIPMENT.getName().equals(data.get("供应商类型"))){ + feeTypeForm.put("u_供应商类型",VendorTypeEnum.EXISTING_VENDOR_WITH_SHIPMENT.getCode()); + }else if (VendorTypeEnum.KNOWN_VENDOR_WITHOUT_SHIPMENT.getName().equals(data.get("供应商类型"))){ + feeTypeForm.put("u_供应商类型",VendorTypeEnum.KNOWN_VENDOR_WITHOUT_SHIPMENT.getCode()); + }else if (VendorTypeEnum.NEW_VENDOR.getName().equals(data.get("供应商类型"))){ + feeTypeForm.put("u_供应商类型",VendorTypeEnum.NEW_VENDOR.getCode()); + } + feeTypeForm.put("u_供应商类型",""); + feeTypeForm.put("u_出差",assemblePurpose(data)); + detail.put("feeTypeForm",feeTypeForm); + details.add(detail); + + form.put("details",details); + } + + //填充出差目的 + private List assemblePurpose(Map data){ + String purpose = data.get("出差目的"); + List purposes = Arrays.asList(purpose.split(";")); + return covertPurposesToCodes(purposes); + } + + private List covertPurposesToCodes(List purposes) { + List codes = new ArrayList<>(); + for (String purpose : purposes) { + String code = TravelPurposeEnum.getCodeByName(purpose); + if (code != null) { + codes.add(code); + } else { + log.warn("未找到对应的出差目的: {}", purpose); + } + } + return codes; + + } + } diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/DiPinShiAttendanceService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/DiPinShiAttendanceService.java new file mode 100644 index 0000000..102d345 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/DiPinShiAttendanceService.java @@ -0,0 +1,72 @@ +package cn.jiutqy.finfiling.quartz.hosecloud; + +import cn.jiutqy.archives.common.exception.ServiceException; +import cn.jiutqy.archives.common.utils.http.OkHttpClientUtil; +import cn.jiutqy.finfiling.common.enums.ChannelEnum; +import cn.jiutqy.finfiling.common.enums.ChannelTypeEnum; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@Slf4j +public class DiPinShiAttendanceService extends AbstractHoseCloudBaseService implements IDiPinShiAttendanceService { + + private final static String CREATE_DOCUMENT = "https://app.ekuaibao.com/api/openapi/v2.2/flow/data?accessToken={accessToken}"; + + @Override + public void attendanceGoOut(Map data) { + if (data == null){ + return; + } + + //构建请求体,如果返回的数据是null,说明数据已经同步过了,就返回 + JSONObject object = mapping(data); + if (object == null){ + return; + } + //发送请求 + String reqBody = String.valueOf(object); + String url = getAccessToken(CREATE_DOCUMENT, ChannelEnum.HOSECLOUD.getChannelId(), ChannelTypeEnum.OUT); + String result = OkHttpClientUtil.doPostJson(url, reqBody); + + if (!isSuccess(result)){ + log.info("创建公出单据失败,失败原因:{}", result); + throw new ServiceException(result); + } + + + } + + @Override + public void attendanceTravel(Map data) { + //判断data是否为空,为空就直接返回 + if (data == null){ + return; + } + + //构建请求体 + JSONObject object = mapping(data); + if (object == null){ + return; + } + String reqBody = String.valueOf(object); + String url = getAccessToken(CREATE_DOCUMENT, ChannelEnum.HOSECLOUD.getChannelId(), ChannelTypeEnum.OUT); + String result = OkHttpClientUtil.doPostJson(url, reqBody); + + if (!isSuccess(result)){ + log.info("创建出差单据失败,失败原因:{}", result); + throw new ServiceException(result); + } + + } + + private boolean isSuccess(String result){ + JSONObject res = JSON.parseObject(result); + return res.containsKey("type") && res.getInteger("type") == -1; + } + +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IDiPinShiAttendanceService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IDiPinShiAttendanceService.java new file mode 100644 index 0000000..9e3ea73 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IDiPinShiAttendanceService.java @@ -0,0 +1,18 @@ +package cn.jiutqy.finfiling.quartz.hosecloud; + +import cn.jiutqy.finfiling.quartz.hosecloud.organize.vo.HeSiVO; + +import java.util.Map; + +public interface IDiPinShiAttendanceService { + + /** + * 同步外出 + */ + void attendanceGoOut(Map data); + + /** + * 同步出差 + */ + void attendanceTravel(Map data); +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IHoseCloudPersonnelService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IHoseCloudPersonnelService.java deleted file mode 100644 index e6e2cbf..0000000 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/IHoseCloudPersonnelService.java +++ /dev/null @@ -1,10 +0,0 @@ -package cn.jiutqy.finfiling.quartz.hosecloud; - -import cn.jiutqy.finfiling.quartz.hosecloud.vo.HoseCloudPersonnelVO; - -import java.util.List; - -public interface IHoseCloudPersonnelService { - - List queryUser(List ids); -} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/HoseCloudPersonnelService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/HoseCloudPersonnelService.java similarity index 80% rename from fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/HoseCloudPersonnelService.java rename to fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/HoseCloudPersonnelService.java index ee4f505..e548d23 100644 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/HoseCloudPersonnelService.java +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/HoseCloudPersonnelService.java @@ -1,10 +1,11 @@ -package cn.jiutqy.finfiling.quartz.hosecloud; +package cn.jiutqy.finfiling.quartz.hosecloud.organize; import cn.jiutqy.archives.common.utils.StringUtils; import cn.jiutqy.archives.common.utils.http.OkHttpClientUtil; import cn.jiutqy.finfiling.common.enums.ChannelEnum; import cn.jiutqy.finfiling.common.enums.ChannelTypeEnum;; -import cn.jiutqy.finfiling.quartz.hosecloud.vo.HoseCloudPersonnelVO; +import cn.jiutqy.finfiling.quartz.hosecloud.AbstractHoseCloudBaseService; +import cn.jiutqy.finfiling.quartz.hosecloud.organize.vo.HoseCloudPersonnelVO; import com.alibaba.fastjson2.JSON; import org.springframework.stereotype.Component; @@ -17,7 +18,7 @@ import java.util.Map; public class HoseCloudPersonnelService extends AbstractHoseCloudBaseService implements IHoseCloudPersonnelService { @Override - public List queryUser(List ids) { + public HoseCloudPersonnelVO queryUser(List ids) { Map body = new HashMap<>(); //STAFFID : 员工ID //CODE : 工号 @@ -35,6 +36,6 @@ public class HoseCloudPersonnelService extends AbstractHoseCloudBaseService impl if (StringUtils.isNotBlank(result)){ list = JSON.parseArray(JSON.parseObject(result).getString("items"), HoseCloudPersonnelVO.class); } - return list.isEmpty() ? null : list; + return list.isEmpty() ? null : list.get(0); } } diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/HoseCloudTemplateService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/HoseCloudTemplateService.java new file mode 100644 index 0000000..40e4167 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/HoseCloudTemplateService.java @@ -0,0 +1,56 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize; + +import cn.jiutqy.archives.common.utils.StringUtils; +import cn.jiutqy.archives.common.utils.http.OkHttpClientUtil; +import cn.jiutqy.finfiling.common.enums.ChannelEnum; +import cn.jiutqy.finfiling.common.enums.ChannelTypeEnum; +import cn.jiutqy.finfiling.quartz.hosecloud.AbstractHoseCloudBaseService; +import cn.jiutqy.finfiling.quartz.hosecloud.organize.vo.HoseCloudTemplateVO; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class HoseCloudTemplateService extends AbstractHoseCloudBaseService implements IHoseCloudTemplateService{ + + @Override + public HoseCloudTemplateVO getHoseCloudTemplateById(String id) { + //请求链接 + String url = BASE_URL + "/api/openapi/v2/specifications/byIds/[{templateId}]?accessToken={accessToken}"; + url = url.replace("{templateId}", id); + String result = OkHttpClientUtil.doGet(getAccessToken(url, ChannelEnum.HOSECLOUD.getChannelId(), ChannelTypeEnum.OUT)); + List list = new ArrayList<>(); + if (StringUtils.isNotBlank(result)){ + JSONArray ja = JSON.parseObject(result).getJSONArray("items"); + JSONObject jo = ja.getJSONObject(0); + list = JSON.parseArray(jo.toJSONString(), HoseCloudTemplateVO.class); + } + return list.isEmpty() ? null : list.get(0); + } + + @Override + public HoseCloudTemplateVO getHoseCloudFeeTypeTemplateById(String id) { + String url = BASE_URL + "/api/openapi/v2/specifications/feeType/byIdsAndCodes?accessToken={accessToken}"; + Map params = new HashMap<>(); + List ids = new ArrayList<>(); + ids.add(id); + params.put("ids", ids); + String result = OkHttpClientUtil.doPostJson(getAccessToken(url, ChannelEnum.HOSECLOUD.getChannelId(), ChannelTypeEnum.OUT), + JSONObject.toJSONString(params), null); + HoseCloudTemplateVO vo = null; + if (StringUtils.isNotBlank(result)){ + JSONArray ja = JSON.parseObject(result).getJSONArray("items"); + JSONObject jo = ja.getJSONObject(0); + vo = new HoseCloudTemplateVO(); + vo.setName(jo.getString("name")); + vo.setId(jo.getString("requisitionSpecificationId")); + } + return vo; + } +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudPersonnelService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudPersonnelService.java new file mode 100644 index 0000000..eccf989 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudPersonnelService.java @@ -0,0 +1,10 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize; + +import cn.jiutqy.finfiling.quartz.hosecloud.organize.vo.HoseCloudPersonnelVO; + +import java.util.List; + +public interface IHoseCloudPersonnelService { + + HoseCloudPersonnelVO queryUser(List ids); +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudTemplateService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudTemplateService.java new file mode 100644 index 0000000..520e876 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/IHoseCloudTemplateService.java @@ -0,0 +1,19 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize; + +import cn.jiutqy.finfiling.quartz.hosecloud.organize.vo.HoseCloudTemplateVO; + +public interface IHoseCloudTemplateService { + /** + * 获取模板ID + * @param id + * @return + */ + HoseCloudTemplateVO getHoseCloudTemplateById(String id); + + /** + * 获取费用类型模板 + * @param id + * @return + */ + HoseCloudTemplateVO getHoseCloudFeeTypeTemplateById(String id); +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiGoOutVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiGoOutVO.java new file mode 100644 index 0000000..747a0a7 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiGoOutVO.java @@ -0,0 +1,12 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class HeSiGoOutVO extends HeSiVO{ + + + +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelInVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelInVO.java new file mode 100644 index 0000000..d550b9d --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelInVO.java @@ -0,0 +1,12 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class HeSiTravelInVO extends HeSiVO{ + + + private String vendorName; +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutNotUSAVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutNotUSAVO.java new file mode 100644 index 0000000..649a520 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutNotUSAVO.java @@ -0,0 +1,11 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class HeSiTravelOutNotUSAVO extends HeSiVO{ + + +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutVO.java new file mode 100644 index 0000000..134ee90 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiTravelOutVO.java @@ -0,0 +1,11 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class HeSiTravelOutVO extends HeSiVO{ + + +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiVO.java new file mode 100644 index 0000000..e6b3111 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HeSiVO.java @@ -0,0 +1,39 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo; + +import lombok.Data; + +@Data +public class HeSiVO { + + /** + * 申请人 + */ + private String applicant; + + /** + * 申请类型 + */ + private String applicationType; + + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + + /** + * 审批单号 + */ + private String approvalNo; + + /** + * 出差类型 + */ + private String travelType; + + +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/vo/HoseCloudPersonnelVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HoseCloudPersonnelVO.java similarity index 82% rename from fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/vo/HoseCloudPersonnelVO.java rename to fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HoseCloudPersonnelVO.java index eb13d4b..c676c75 100644 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/vo/HoseCloudPersonnelVO.java +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HoseCloudPersonnelVO.java @@ -1,4 +1,4 @@ -package cn.jiutqy.finfiling.quartz.hosecloud.vo; +package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo; import lombok.Data; diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HoseCloudTemplateVO.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HoseCloudTemplateVO.java new file mode 100644 index 0000000..a29caa4 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/hosecloud/organize/vo/HoseCloudTemplateVO.java @@ -0,0 +1,11 @@ +package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo; + +import lombok.Data; + +@Data +public class HoseCloudTemplateVO { + + private String id; + + private String name; +} \ No newline at end of file diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncDiPinShiService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncDiPinShiService.java new file mode 100644 index 0000000..2227145 --- /dev/null +++ b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncDiPinShiService.java @@ -0,0 +1,249 @@ +package cn.jiutqy.finfiling.quartz.sync; + +import cn.hutool.core.collection.CollectionUtil; +import cn.jiutqy.archives.common.utils.ExceptionUtil; +import cn.jiutqy.finfiling.common.domain.FinFilingSyncLog; +import cn.jiutqy.finfiling.common.enums.ChannelEnum; +import cn.jiutqy.finfiling.common.enums.SyncStateEnum; +import cn.jiutqy.finfiling.common.service.IFinFilingSyncLogService; +import cn.jiutqy.finfiling.quartz.constants.BusinessTypeEnum; +import cn.jiutqy.finfiling.quartz.dipinshi.IDiPinShiFinFilingService; +import cn.jiutqy.finfiling.quartz.hosecloud.IDiPinShiAttendanceService; +import cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.req.*; +import cn.jiutqy.finfiling.quartz.enums.GeYuanOutboundTypeEnum; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.*; + + +@Slf4j +@Component +public class OutboundSyncDiPinShiService implements IOutboundSyncDiPinShiService{ + + @Autowired + private IFinFilingSyncLogService finFilingSyncLogService; + + @Autowired + private IDiPinShiFinFilingService diPinShiFinFilingService; + + @Autowired + private IDiPinShiAttendanceService attendanceService; + + @Override + public void updateSyncTravel(String start, String end) { + //批量获取数据单号 + List approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "TRAVEL"); + + List travelReps = new ArrayList<>(); + + //根据单号查询详情 取出有效数据x + for (String approvalNo : approvalNos) { + String detail = diPinShiFinFilingService.getApprovalNoDetail(approvalNo); + + //根据类型判断:外出、国内出差、国际出差、国际出差非美国 + JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(detail)); + + //取出出差类型,根据类型分别映射到不同VO --这里的类型应该没这么好取 + String type = jsonObject.getString("type"); + if (BusinessTypeEnum.TRAVEL_IN.getName().equals(type)){ + //如果层级结构太多就手动取值然后塞进里 + DiPinShiAttendanceTravelInReqVO travelIn = JSONObject.parseObject(detail, DiPinShiAttendanceTravelInReqVO.class); + travelReps.add(travelIn); + }else if (BusinessTypeEnum.TRAVEL_OUT.getName().equals(type)){ + DiPinShiAttendanceTravelOutReqVO travelOut = JSONObject.parseObject(detail, DiPinShiAttendanceTravelOutReqVO.class); + travelReps.add(travelOut); + }else if (BusinessTypeEnum.TRAVEL_OUT_NOT_USA.getName().equals(type)){ + DiPinShiAttendanceTravelOutNotUSAReqVO travelOutNotUSA = JSONObject.parseObject(detail, DiPinShiAttendanceTravelOutNotUSAReqVO.class); + travelReps.add(travelOutNotUSA); + } + + } + + FinFilingSyncLog finFilingSyncLog; + + if (CollectionUtil.isNotEmpty(travelReps)) { + for (DiPinShiAttendanceReqVO travelRep : travelReps) { + // 区分出差类型 + String tripType = travelRep.getTravelType(); + + try { + // 记录同步日志 + finFilingSyncLog = finFilingSyncLogService.getFinFilingSyncLogByInputChannelAndInputDataId(ChannelEnum.DI_PIN_SHI_TRAVEL.getChannelId(), travelRep.getApprovalNo()); + if (finFilingSyncLog == null){ + finFilingSyncLog = new FinFilingSyncLog(); + finFilingSyncLog.setInputChannelId(ChannelEnum.DI_PIN_SHI_TRAVEL.getChannelId()); + finFilingSyncLog.setInputDataId(travelRep.getApprovalNo()); + finFilingSyncLog.setInputData(JSON.toJSONString(travelRep.getData())); + finFilingSyncLog.setSyncState(SyncStateEnum.INIT.value()); + finFilingSyncLog.setCreateTime(new Date()); + finFilingSyncLogService.save(finFilingSyncLog); + } + } catch (Exception e) { + log.error("写入同步日志失败:{}-{}", ChannelEnum.DI_PIN_SHI_TRAVEL.getChannelId() , JSON.toJSONString(travelRep)); + return; + } + + // 根据出差类型组装数据 + Map dataToSend = assembleTravelData(travelRep, tripType); + + try { + //数据同步到合思,更改同步状态 + attendanceService.attendanceTravel(dataToSend); + finFilingSyncLog.setOutputChannelId(ChannelEnum.HOSECLOUD.getChannelId()); + finFilingSyncLog.setOutputDataId(travelRep.getApprovalNo()); + finFilingSyncLog.setSyncState(SyncStateEnum.SUCCESSED.value()); + log.info("输出成功:{}", JSON.toJSONString(finFilingSyncLog)); + } catch (Exception e) { + log.error("输出异常",e); + finFilingSyncLog.setSyncState(SyncStateEnum.FAILED.value()); + finFilingSyncLog.setErrorMsg(ExceptionUtil.getExceptionMessage(e)); + log.error("输出失败:{}", JSON.toJSONString(finFilingSyncLog)); + } + + try { + finFilingSyncLog.setUpdateTime(new Date()); + finFilingSyncLogService.updateById(finFilingSyncLog); + } catch (Exception e) { + log.error("修改同步日志失败",e); + } + } + } + + } + + + @Override + public void updateSyncGoOut(String start, String end) { + //批量获取数据单号 + List approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "GoOut"); + + List goOuts = new ArrayList<>(); + //根据单号查询单号详情 + for (String approvalNo : approvalNos) { + String detail = diPinShiFinFilingService.getApprovalNoDetail(approvalNo); + DiPinShiAttendanceGoOutReqVO goOut = JSONObject.parseObject(detail, DiPinShiAttendanceGoOutReqVO.class); + goOuts.add(goOut); + } + + FinFilingSyncLog finFilingSyncLog; + if (CollectionUtil.isNotEmpty(goOuts)){ + for (DiPinShiAttendanceGoOutReqVO goOut : goOuts) { + //记录同步日志 + try { + finFilingSyncLog = finFilingSyncLogService.getFinFilingSyncLogByInputChannelAndInputDataId(ChannelEnum.DI_PIN_SHI_GO_OUT.getChannelId(), goOut.getApprovalNo()); + if (finFilingSyncLog == null){ + finFilingSyncLog = new FinFilingSyncLog(); + finFilingSyncLog.setInputChannelId(ChannelEnum.DI_PIN_SHI_GO_OUT.getChannelId()); + finFilingSyncLog.setInputDataId(goOut.getApprovalNo()); + finFilingSyncLog.setInputData(JSON.toJSONString(goOut.getData())); + finFilingSyncLog.setSyncState(SyncStateEnum.INIT.value()); + finFilingSyncLog.setCreateTime(new Date()); + finFilingSyncLogService.save(finFilingSyncLog); + } + } catch (Exception e) { + log.error("写入同步日志失败:{}-{}", ChannelEnum.DI_PIN_SHI_GO_OUT.getChannelId() , JSON.toJSONString(goOut)); + return; + } + + //字段映射 + Map dataToSend = goOutMapping(goOut); + + try { + //数据同步到合思,更改同步状态 + attendanceService.attendanceGoOut(dataToSend); + finFilingSyncLog.setOutputChannelId(ChannelEnum.HOSECLOUD.getChannelId()); + finFilingSyncLog.setOutputDataId(goOut.getApprovalNo()); + finFilingSyncLog.setSyncState(SyncStateEnum.SUCCESSED.value()); + log.info("输出成功:{}", JSON.toJSONString(finFilingSyncLog)); + } catch (Exception e) { + log.error("输出异常",e); + finFilingSyncLog.setSyncState(SyncStateEnum.FAILED.value()); + finFilingSyncLog.setErrorMsg(ExceptionUtil.getExceptionMessage(e)); + log.error("输出失败:{}", JSON.toJSONString(finFilingSyncLog)); + } + + try { + finFilingSyncLog.setUpdateTime(new Date()); + finFilingSyncLogService.updateById(finFilingSyncLog); + } catch (Exception e) { + log.error("修改同步日志失败",e); + } + } + } + + + } + + private Map goOutMapping(DiPinShiAttendanceGoOutReqVO goOut) { + //字段映射 + return null; + } + + private Map assembleTravelData(DiPinShiAttendanceReqVO travelRep, String tripType) { + Map sendData = null; + if (BusinessTypeEnum.TRAVEL_IN.getName().equals(tripType)){ + if (travelRep instanceof DiPinShiAttendanceTravelInReqVO){ + DiPinShiAttendanceTravelInReqVO travelInRep = (DiPinShiAttendanceTravelInReqVO) travelRep; + sendData = travelInMapping(travelInRep); + } + }else if (BusinessTypeEnum.TRAVEL_OUT.getName().equals(tripType)){ + if (travelRep instanceof DiPinShiAttendanceTravelOutReqVO){ + DiPinShiAttendanceTravelOutReqVO travelOutRep = (DiPinShiAttendanceTravelOutReqVO) travelRep; + sendData = travelOutMapping(travelOutRep); + } + }else if (BusinessTypeEnum.TRAVEL_OUT_NOT_USA.getName().equals(tripType)){ + if (travelRep instanceof DiPinShiAttendanceTravelOutNotUSAReqVO){ + DiPinShiAttendanceTravelOutNotUSAReqVO travelOutNotUSARep = (DiPinShiAttendanceTravelOutNotUSAReqVO) travelRep; + sendData = travelOutNotUSAMapping(travelOutNotUSARep); + } + } + + return sendData; + } + + private Map travelInMapping(DiPinShiAttendanceTravelInReqVO travelInRep) { + //将企微的数据 转成保存到合思同步时需要的数据,一个一个取出来塞进map里 + + return null; + } + + private Map travelOutMapping(DiPinShiAttendanceTravelOutReqVO travelOutRep) { + + return null; + } + + private Map travelOutNotUSAMapping(DiPinShiAttendanceTravelOutNotUSAReqVO travelOutNotUSARep) { + + return null; + } + + @Override + public void retry(Date beforeTime) { + List list = finFilingSyncLogService.listFailFinFiling(beforeTime); + list.forEach(item -> { + GeYuanOutboundTypeEnum typeEnum = GeYuanOutboundTypeEnum.getByType(item.getInputChannelId()); + if (typeEnum == null){ + return; + } + Map map = JSON.parseObject(item.getInputData()); + + }); + } + + + //转成日期格式yyyy-mm-dd mm:ss + public String convertDateFormat(String stamp){ + long timestamp = Long.parseLong(stamp); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + sdf.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); + + Date date = new Date(timestamp); + return sdf.format(date); + } +} diff --git a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncGeYuanService.java b/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncGeYuanService.java deleted file mode 100644 index 146ad9f..0000000 --- a/fin-filing-quartz/src/main/java/cn/jiutqy/finfiling/quartz/sync/OutboundSyncGeYuanService.java +++ /dev/null @@ -1,208 +0,0 @@ -package cn.jiutqy.finfiling.quartz.sync; - -import cn.hutool.core.collection.CollectionUtil; -import cn.jiutqy.archives.common.utils.ExceptionUtil; -import cn.jiutqy.archives.common.utils.email.EmailSendUtil; -import cn.jiutqy.finfiling.common.domain.FinFilingSyncLog; -import cn.jiutqy.finfiling.common.enums.ChannelEnum; -import cn.jiutqy.finfiling.common.enums.SyncStateEnum; -import cn.jiutqy.finfiling.common.service.IFinFilingSyncLogService; -import cn.jiutqy.finfiling.quartz.dipinshi.IDiPinShiFinFilingService; -import cn.jiutqy.finfiling.quartz.dipinshi.attendance.IDiPinShiAttendanceService; -import cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.*; -import cn.jiutqy.finfiling.quartz.enums.GeYuanOutboundTypeEnum; -import cn.jiutqy.finfiling.quartz.hosecloud.HoseCloudPersonnelService; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.*; - - -@Slf4j -@Component -public class OutboundSyncGeYuanService implements IOutboundSyncDiPinShiService{ - - @Autowired - private IFinFilingSyncLogService finFilingSyncLogService; - - @Autowired - private IDiPinShiFinFilingService diPinShiFinFilingService; - - @Autowired - private IDiPinShiAttendanceService attendanceService; - - private final static String TRAVEL_IN = "国内出差"; - - private final static String TRAVEL_OUT = "国际出差"; - - private final static String TRAVEL_OUT_NOT_USA = "国际出差非美国"; - - @Override - public void updateSyncTravel(String start, String end) { - //批量获取数据单号 - List approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "TRAVEL"); - - HashMap map = new HashMap<>(); - List travelIns = new ArrayList<>(); - List travelOutNotUSAs = new ArrayList<>(); - List travelOuts = new ArrayList<>(); - - //根据单号查询详情 取出有效数据x - for (String approvalNo : approvalNos) { - String detail = diPinShiFinFilingService.getApprovalNoDetail(approvalNo); - - //根据类型判断:外出、国内出差、国际出差、国际出差非美国 - - - } - - //记录同步结果 - if (CollectionUtil.isNotEmpty(travelIns)){ - travelIns.forEach(this::recordSyncData); - } - if (CollectionUtil.isNotEmpty(travelOutNotUSAs)){ - travelOutNotUSAs.forEach(this::recordSyncData); - } - if (CollectionUtil.isNotEmpty(travelOuts)){ - travelOuts.forEach(this::recordSyncData); - } - - map.put(TRAVEL_IN,travelIns); - map.put(TRAVEL_OUT,travelOuts); - map.put(TRAVEL_OUT_NOT_USA,travelOutNotUSAs); - - //数据的字段进行映射 - HashMap reqBodys = travelMapping(map); - - //数据同步到合思 - attendanceService.attenancedTravel(reqBodys); - - - - } - - - - @Override - public void updateSyncGoOut(String start, String end) { - //批量获取数据单号 - List approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "GoOut"); - - List goOuts = new ArrayList<>(); - //根据单号查询单号详情 - for (String approvalNo : approvalNos) { - String detail = diPinShiFinFilingService.getApprovalNoDetail(approvalNo); - DiPinShiAttendanceGoOutReqVO goOut = JSONObject.parseObject(detail, DiPinShiAttendanceGoOutReqVO.class); - goOuts.add(goOut); - } - - FinFilingSyncLog finFilingSyncLog; - if (CollectionUtil.isNotEmpty(goOuts)){ - for (DiPinShiAttendanceGoOutReqVO goOut : goOuts) { - //记录同步日志 - try { - finFilingSyncLog = finFilingSyncLogService.getFinFilingSyncLogByInputChannelAndInputDataId(ChannelEnum.DI_PIN_SHI.getChannelId(), goOut.getApprovalNo()); - if (finFilingSyncLog == null){ - finFilingSyncLog = new FinFilingSyncLog(); - finFilingSyncLog.setInputChannelId(ChannelEnum.DI_PIN_SHI.getChannelId()); - finFilingSyncLog.setInputDataId(goOut.getApprovalNo()); - finFilingSyncLog.setInputData(JSON.toJSONString(goOut.getData())); - finFilingSyncLog.setSyncState(SyncStateEnum.INIT.value()); - finFilingSyncLog.setCreateTime(new Date()); - finFilingSyncLogService.save(finFilingSyncLog); - } - } catch (Exception e) { - log.error("写入同步日志失败:{}-{}", ChannelEnum.DI_PIN_SHI.getChannelId() , JSON.toJSONString(goOut)); - return; - } - - try { - //数据同步到合思,更改同步状态 - attendanceService.attendanceGoOut(goOut); - finFilingSyncLog.setOutputChannelId(ChannelEnum.HOSECLOUD.getChannelId()); - finFilingSyncLog.setOutputDataId(goOut.getApprovalNo()); - finFilingSyncLog.setSyncState(SyncStateEnum.SUCCESSED.value()); - log.info("输出成功:{}", JSON.toJSONString(finFilingSyncLog)); - } catch (Exception e) { - log.error("输出异常",e); - finFilingSyncLog.setSyncState(SyncStateEnum.FAILED.value()); - finFilingSyncLog.setErrorMsg(ExceptionUtil.getExceptionMessage(e)); - log.error("输出失败:{}", JSON.toJSONString(finFilingSyncLog)); - } - - try { - finFilingSyncLog.setUpdateTime(new Date()); - finFilingSyncLogService.updateById(finFilingSyncLog); - } catch (Exception e) { - log.error("修改同步日志失败",e); - } - } - } - - - } - - private HashMap travelMapping(HashMap map) { - HashMap reqBodys = new HashMap<>(); - List travelInList = new ArrayList<>(); - List travelOutList = new ArrayList<>(); - List travelOutNotUSAList = new ArrayList<>(); - - //字段映射 - - reqBodys.put(TRAVEL_IN,travelInList); - reqBodys.put(TRAVEL_OUT,travelOutList); - reqBodys.put(TRAVEL_OUT_NOT_USA,travelOutNotUSAList); - return reqBodys; - } - - //记录同步数据 - private void recordSyncData(DiPinShiAttendanceReqVO reqVO){ - FinFilingSyncLog finFilingSyncLog; - - try { - finFilingSyncLog = finFilingSyncLogService.getFinFilingSyncLogByInputChannelAndInputDataId(ChannelEnum.DI_PIN_SHI.getChannelId(), "审批单号"); - if (finFilingSyncLog == null){ - finFilingSyncLog = new FinFilingSyncLog(); - finFilingSyncLog.setInputChannelId(ChannelEnum.DI_PIN_SHI.getChannelId()); - finFilingSyncLog.setInputDataId("审批单号"); - finFilingSyncLog.setInputData(JSON.toJSONString("获取的数据")); - finFilingSyncLog.setSyncState(SyncStateEnum.INIT.value()); - finFilingSyncLog.setCreateTime(new Date()); - finFilingSyncLogService.save(finFilingSyncLog); - } - } catch (Exception e) { - log.error("写入同步日志失败:{}-{}", ChannelEnum.DI_PIN_SHI.getChannelId(), reqVO.getData()); - } - - } - - @Override - public void retry(Date beforeTime) { - List list = finFilingSyncLogService.listFailFinFiling(beforeTime); - list.forEach(item -> { - GeYuanOutboundTypeEnum typeEnum = GeYuanOutboundTypeEnum.getByType(item.getInputChannelId()); - if (typeEnum == null){ - return; - } - Map map = JSON.parseObject(item.getInputData()); - - }); - } - - - //转成日期格式yyyy-mm-dd mm:ss - public String convertDateFormat(String stamp){ - long timestamp = Long.parseLong(stamp); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - sdf.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); - - Date date = new Date(timestamp); - return sdf.format(date); - } -}