帝品仕外出和差旅同步

This commit is contained in:
Aria 2024-11-25 17:41:49 +08:00
parent 05f6e112c8
commit 15d941b70f
35 changed files with 970 additions and 317 deletions

View File

@ -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");

View File

@ -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;
}
}

View File

@ -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";
}

View File

@ -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";
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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 newNextCursor = "";
do {
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 = 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);
}
spNoList.addAll(jsonArray.toJavaList(String.class));
newNextCursor = res.getString("new_next_cursor");
}
} while (StringUtils.isNotBlank(newNextCursor));
return spNoList;
}

View File

@ -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<String, Object> map) {
}
}

View File

@ -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<String, Object> map);
}

View File

@ -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{
}

View File

@ -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{
}

View File

@ -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{
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -1,4 +1,4 @@
package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo;
package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -6,4 +6,8 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class DiPinShiAttendanceTravelOutReqVO extends DiPinShiAttendanceReqVO {
/**
* 出差目的
*/
private String travelPurpose;
}

View File

@ -1,4 +1,4 @@
package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo;
package cn.jiutqy.finfiling.quartz.dipinshi.attendance.vo.resp;
import lombok.Data;

View File

@ -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<String,String> 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<String> 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<String,String> 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<String,String> 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<String,String> 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<String,String> 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<String> assemblePurpose(Map<String,String> data){
String purpose = data.get("出差目的");
List<String> purposes = Arrays.asList(purpose.split(";"));
return covertPurposesToCodes(purposes);
}
private List<String> covertPurposesToCodes(List<String> purposes) {
List<String> codes = new ArrayList<>();
for (String purpose : purposes) {
String code = TravelPurposeEnum.getCodeByName(purpose);
if (code != null) {
codes.add(code);
} else {
log.warn("未找到对应的出差目的: {}", purpose);
}
}
return codes;
}
}

View File

@ -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<String,String> 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<String,String> 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;
}
}

View File

@ -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<String,String> data);
/**
* 同步出差
*/
void attendanceTravel(Map<String,String> data);
}

View File

@ -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<HoseCloudPersonnelVO> queryUser(List<String> ids);
}

View File

@ -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<HoseCloudPersonnelVO> queryUser(List<String> ids) {
public HoseCloudPersonnelVO queryUser(List<String> ids) {
Map<String, Object> 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);
}
}

View File

@ -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<HoseCloudTemplateVO> 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<String, Object> params = new HashMap<>();
List<String> 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;
}
}

View File

@ -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<String> ids);
}

View File

@ -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);
}

View File

@ -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{
}

View File

@ -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;
}

View File

@ -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{
}

View File

@ -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{
}

View File

@ -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;
}

View File

@ -1,4 +1,4 @@
package cn.jiutqy.finfiling.quartz.hosecloud.vo;
package cn.jiutqy.finfiling.quartz.hosecloud.organize.vo;
import lombok.Data;

View File

@ -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;
}

View File

@ -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<String> approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "TRAVEL");
List<DiPinShiAttendanceReqVO> 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<String,String> 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<String> approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "GoOut");
List<DiPinShiAttendanceGoOutReqVO> 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<String,String> 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<String,String> goOutMapping(DiPinShiAttendanceGoOutReqVO goOut) {
//字段映射
return null;
}
private Map<String,String> assembleTravelData(DiPinShiAttendanceReqVO travelRep, String tripType) {
Map<String,String> 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<String,String> travelInMapping(DiPinShiAttendanceTravelInReqVO travelInRep) {
//将企微的数据 转成保存到合思同步时需要的数据,一个一个取出来塞进map里
return null;
}
private Map<String,String> travelOutMapping(DiPinShiAttendanceTravelOutReqVO travelOutRep) {
return null;
}
private Map<String,String> travelOutNotUSAMapping(DiPinShiAttendanceTravelOutNotUSAReqVO travelOutNotUSARep) {
return null;
}
@Override
public void retry(Date beforeTime) {
List<FinFilingSyncLog> list = finFilingSyncLogService.listFailFinFiling(beforeTime);
list.forEach(item -> {
GeYuanOutboundTypeEnum typeEnum = GeYuanOutboundTypeEnum.getByType(item.getInputChannelId());
if (typeEnum == null){
return;
}
Map<String, Object> 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);
}
}

View File

@ -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<String> approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "TRAVEL");
HashMap<String, Object> map = new HashMap<>();
List<DiPinShiAttendanceTravelInReqVO> travelIns = new ArrayList<>();
List<DiPinShiAttendanceTravelOutNotUSAReqVO> travelOutNotUSAs = new ArrayList<>();
List<DiPinShiAttendanceTravelOutReqVO> 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<String, Object> reqBodys = travelMapping(map);
//数据同步到合思
attendanceService.attenancedTravel(reqBodys);
}
@Override
public void updateSyncGoOut(String start, String end) {
//批量获取数据单号
List<String> approvalNos = diPinShiFinFilingService.getBatchApprovalNoTravel(start, end , "GoOut");
List<DiPinShiAttendanceGoOutReqVO> 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<String, Object> travelMapping(HashMap<String, Object> map) {
HashMap<String, Object> reqBodys = new HashMap<>();
List<String> travelInList = new ArrayList<>();
List<String> travelOutList = new ArrayList<>();
List<String> 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<FinFilingSyncLog> list = finFilingSyncLogService.listFailFinFiling(beforeTime);
list.forEach(item -> {
GeYuanOutboundTypeEnum typeEnum = GeYuanOutboundTypeEnum.getByType(item.getInputChannelId());
if (typeEnum == null){
return;
}
Map<String, Object> 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);
}
}