【update】高德差旅申请调用方法功能实现
This commit is contained in:
parent
0c5f571e27
commit
3b0bbc9b6b
|
@ -0,0 +1,19 @@
|
||||||
|
package com.chint.domain.aggregates.supplier;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.data.annotation.Id;
|
||||||
|
import org.springframework.data.relational.core.mapping.MappedCollection;
|
||||||
|
import org.springframework.data.relational.core.mapping.Table;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Table("amap_route_relationship")
|
||||||
|
public class AmapRouteRelationship implements Serializable {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private String applyRecordId;
|
||||||
|
private String outApplyRecordId;
|
||||||
|
}
|
|
@ -1,9 +1,47 @@
|
||||||
package com.chint.domain.service.order_sync;
|
package com.chint.domain.service.order_sync;
|
||||||
|
|
||||||
import com.chint.domain.aggregates.order.RouteOrder;
|
import com.chint.domain.aggregates.order.*;
|
||||||
import com.chint.domain.aggregates.order.RouteRequest;
|
import com.chint.domain.aggregates.supplier.AmapRouteRelationship;
|
||||||
|
import com.chint.domain.aggregates.user.User;
|
||||||
|
import com.chint.domain.repository.UserRepository;
|
||||||
|
import com.chint.domain.service.LegDomainService;
|
||||||
|
import com.chint.infrastructure.repository.jdbc.JdbcAmapRouteRelationshipRepository;
|
||||||
|
import com.chint.interfaces.rest.amap.AmapLocationRequest;
|
||||||
|
import com.chint.interfaces.rest.amap.dto.travelapplication.ProcessContent;
|
||||||
|
import com.chint.interfaces.rest.amap.dto.travelapplication.TravelApplicationDto;
|
||||||
|
import com.chint.interfaces.rest.amap.dto.travelapplication.TravelApplicationDtoResponse;
|
||||||
|
import com.chint.interfaces.rest.amap.request.TravelApplicationRequest;
|
||||||
|
import com.chint.interfaces.rest.ctrip.dto.approval.ApprovalRequest;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.chint.infrastructure.constant.LegConstant.LEG_TYPE_TAXI;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
public class AmapOrderSyncAdapter implements SupplierOrderSync{
|
public class AmapOrderSyncAdapter implements SupplierOrderSync{
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserRepository userRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AmapLocationRequest amapLocationRequest;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TravelApplicationRequest travelApplicationRequest;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private JdbcAmapRouteRelationshipRepository jdbcAmapRouteRelationshipRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LegDomainService legDomainService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean syncSupplierOrder(RouteOrder order) {
|
public boolean syncSupplierOrder(RouteOrder order) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -11,8 +49,60 @@ public class AmapOrderSyncAdapter implements SupplierOrderSync{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean syncRouteRequest(RouteRequest routeRequest) {
|
public boolean syncRouteRequest(RouteRequest routeRequest) {
|
||||||
|
TravelApplicationDto dto=new TravelApplicationDto();
|
||||||
|
RouteRequestFields routeRequestFields = routeRequest.getRouteRequestFields();
|
||||||
|
TravelApplicationDto travelApplicationDto=generateTravelApplicationInfo(dto,routeRequest,routeRequestFields);
|
||||||
|
TravelApplicationDtoResponse response=travelApplicationRequest.apply(travelApplicationDto);
|
||||||
|
if (!response.getCode().equals(1)){
|
||||||
|
Gson gson = new Gson();
|
||||||
|
log.error(gson.toJson(response));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
//存入关联表
|
||||||
|
AmapRouteRelationship amapRouteRelationship=new AmapRouteRelationship();
|
||||||
|
amapRouteRelationship.setApplyRecordId(response.getData());
|
||||||
|
amapRouteRelationship.setOutApplyRecordId(routeRequest.getRouteRequestNo());
|
||||||
|
jdbcAmapRouteRelationshipRepository.save(amapRouteRelationship);
|
||||||
|
return response.getCode().equals(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private TravelApplicationDto generateTravelApplicationInfo(TravelApplicationDto dto, RouteRequest routeRequest,RouteRequestFields routeRequestFields) {
|
||||||
|
dto.setOutApplyRecordId(routeRequest.getRouteRequestNo());
|
||||||
|
//公司信息写入备注
|
||||||
|
dto.setRemark(routeRequestFields.getAccountCompanyName()+"-"
|
||||||
|
+routeRequestFields.getAccountCompanyCode()+"-"
|
||||||
|
+routeRequestFields.getProjectName()+"-"
|
||||||
|
+routeRequestFields.getCostCenter()+"-"
|
||||||
|
+routeRequestFields.getSysCode()+"-"
|
||||||
|
+routeRequestFields.getActualOrderNo());
|
||||||
|
dto.setApplyEUserId(routeRequestFields.getUserId());
|
||||||
|
User user=userRepository.findByUserEmployeeNo(routeRequestFields.getUserId());
|
||||||
|
dto.setApplyMobile(user.getPhoneNumber());
|
||||||
|
dto.setApplyName(user.getName());
|
||||||
|
//审批单
|
||||||
|
List<Leg> legList=routeRequest.getRouteRequestLegList().stream().map(RouteRequestLeg::getLeg).toList();
|
||||||
|
legList=legList.stream().filter(u->u.getLegType().equals(LEG_TYPE_TAXI)).toList();
|
||||||
|
dto.setTemplateCode("travel");
|
||||||
|
ProcessContent processContent=new ProcessContent();
|
||||||
|
processContent.setStartTime(legList.stream().sorted(Comparator.comparing(Leg::getStartTime)).toList().get(0).getStartTime().toString());
|
||||||
|
processContent.setEndTime(legList.stream().sorted(Comparator.comparing(Leg::getEndTime).reversed()).toList().get(0).getEndTime().toString());
|
||||||
|
//areacode处理
|
||||||
|
List<LegExtensionField> legExtensionFields=legDomainService.queryLocation(legList).stream().map(Leg::getLegExtensionField).toList();
|
||||||
|
List<Location> locationList=new ArrayList<>();
|
||||||
|
for (LegExtensionField leg:legExtensionFields){
|
||||||
|
locationList.addAll(leg.getLocationList());
|
||||||
|
}
|
||||||
|
List<String> areaCodes=new ArrayList<>();
|
||||||
|
for (Location location:locationList){
|
||||||
|
areaCodes.add(amapLocationRequest.getACodeByLocationName(location.getLocationName()));
|
||||||
|
}
|
||||||
|
processContent.setValidCityList(areaCodes);
|
||||||
|
processContent.setAmountLimited(1);
|
||||||
|
processContent.setAllowCrossCity(1);
|
||||||
|
dto.setProcessContent(processContent);
|
||||||
|
dto.setStatus(routeRequest.getStatus().toString());
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean cancelSyncSupplierOrder(RouteOrder order) {
|
public boolean cancelSyncSupplierOrder(RouteOrder order) {
|
||||||
|
@ -21,6 +111,17 @@ public class AmapOrderSyncAdapter implements SupplierOrderSync{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean cancelRouteRequest(RouteRequest routeRequest) {
|
public boolean cancelRouteRequest(RouteRequest routeRequest) {
|
||||||
|
TravelApplicationDto dto=new TravelApplicationDto();
|
||||||
|
RouteRequestFields routeRequestFields = routeRequest.getRouteRequestFields();
|
||||||
|
TravelApplicationDto travelApplicationDto=generateTravelApplicationInfo(dto,routeRequest,routeRequestFields);
|
||||||
|
//查询关联表
|
||||||
|
AmapRouteRelationship amapRouteRelationship=jdbcAmapRouteRelationshipRepository.findAmapRouteRelationshipByApplyRecordId(routeRequest.getRouteRequestNo());
|
||||||
|
if (amapRouteRelationship==null){
|
||||||
|
log.info("无企业订单信息",dto.getOutApplyRecordId());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
travelApplicationDto.setApplyRecordId(amapRouteRelationship.getApplyRecordId());
|
||||||
|
TravelApplicationDtoResponse response=travelApplicationRequest.modify(travelApplicationDto);
|
||||||
|
return response.getCode().equals(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,14 @@ public class SyncAdapter {
|
||||||
@Autowired
|
@Autowired
|
||||||
private LYOrderSyncAdapter lyOrderSyncAdapter;
|
private LYOrderSyncAdapter lyOrderSyncAdapter;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AmapOrderSyncAdapter amapOrderSyncAdapter;
|
||||||
|
|
||||||
public SupplierOrderSync of(String supplierName) {
|
public SupplierOrderSync of(String supplierName) {
|
||||||
return switch (supplierName) {
|
return switch (supplierName) {
|
||||||
case SUPPLIER_C_TRIP -> cTripOrderSyncAdapter;
|
case SUPPLIER_C_TRIP -> cTripOrderSyncAdapter;
|
||||||
case SUPPLIER_L_Y -> lyOrderSyncAdapter;
|
case SUPPLIER_L_Y -> lyOrderSyncAdapter;
|
||||||
case SUPPLIER_AMAP -> lyOrderSyncAdapter;
|
case SUPPLIER_AMAP -> amapOrderSyncAdapter;
|
||||||
default -> throw new NotFoundException(CommonMessageConstant.NOT_FOUND);
|
default -> throw new NotFoundException(CommonMessageConstant.NOT_FOUND);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.chint.infrastructure.repository.jdbc;
|
||||||
|
|
||||||
|
import com.chint.domain.aggregates.supplier.AmapRouteRelationship;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface JdbcAmapRouteRelationshipRepository extends CrudRepository<AmapRouteRelationship,Long> {
|
||||||
|
AmapRouteRelationship findAmapRouteRelationshipByApplyRecordId(String applyRecordId);
|
||||||
|
}
|
|
@ -32,6 +32,6 @@ public class AmapLocationRequest {
|
||||||
LocationResponse locationQuery = locationQuery(locationName);
|
LocationResponse locationQuery = locationQuery(locationName);
|
||||||
Optional<LocationResponse.AmapCityInfo> amapCityInfo = Optional.ofNullable(locationQuery.getData())
|
Optional<LocationResponse.AmapCityInfo> amapCityInfo = Optional.ofNullable(locationQuery.getData())
|
||||||
.flatMap(it -> Optional.ofNullable(it.get(0)));
|
.flatMap(it -> Optional.ofNullable(it.get(0)));
|
||||||
return amapCityInfo.map(LocationResponse.AmapCityInfo::getName).orElse(null);
|
return amapCityInfo.map(LocationResponse.AmapCityInfo::getAdcode).orElse(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.chint.interfaces.rest.amap.dto.travelapplication;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同行人
|
||||||
|
* @Author:nxj
|
||||||
|
* @Date:2024/4/25 13:03
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class Companions {
|
||||||
|
private String outApplyRecordId;
|
||||||
|
private String applyEUserId;
|
||||||
|
}
|
|
@ -1,58 +0,0 @@
|
||||||
package com.chint.interfaces.rest.amap.dto.travelapplication;
|
|
||||||
|
|
||||||
import com.chint.interfaces.rest.amap.BaseRequestParam;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 提交申请单
|
|
||||||
* @Author:nxj
|
|
||||||
* @Date:2024/4/24 16:44
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class ModifyTravelApplicationDto extends BaseRequestParam {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 必填
|
|
||||||
*/
|
|
||||||
//企业审批ID
|
|
||||||
private String outApplyRecordId;
|
|
||||||
//高德审批ID
|
|
||||||
private String applyRecordId;
|
|
||||||
//审批模板Code :travel
|
|
||||||
private String templateCode;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 非必填
|
|
||||||
*/
|
|
||||||
//申请人手机号
|
|
||||||
private String applyMobile;
|
|
||||||
//申请人姓名
|
|
||||||
private String applyName;
|
|
||||||
//部门ID
|
|
||||||
private String departmentId;
|
|
||||||
//部门名称
|
|
||||||
private String departmentName;
|
|
||||||
//申请单【审批模板】内容(JSON格式)
|
|
||||||
private ProcessContent processContent;
|
|
||||||
//审批状态 1有效 0无效
|
|
||||||
private String status;
|
|
||||||
//申请备注/原因(长度限制256字符)
|
|
||||||
private String remark;
|
|
||||||
//申请单场景入口展示名称(长度限制64字符)
|
|
||||||
private String sceneName;
|
|
||||||
//是否占用个人月度限额, 0 否 1 是,默认为0
|
|
||||||
private String usePersonalAmount;
|
|
||||||
/**
|
|
||||||
* 支持的叫车业务类型
|
|
||||||
*(1 实时单,2 预约单,3 接送机,5 接送站,6 代叫车;
|
|
||||||
*可传多个,多个参数⽤英⽂逗号分隔,例:1,2;
|
|
||||||
*不传默认为 实时单+预约单)
|
|
||||||
*/
|
|
||||||
private String orderServiceType;
|
|
||||||
//企业自定义申请单名称(长度限制5字符),申请单入口标签名称
|
|
||||||
private String customSceneLabel;
|
|
||||||
}
|
|
|
@ -17,9 +17,9 @@ public class ProcessContent {
|
||||||
//权限开始时间(yyyy-MM-dd)
|
//权限开始时间(yyyy-MM-dd)
|
||||||
private String startTime;
|
private String startTime;
|
||||||
//单笔限额 -1 表示不限制【单位分】
|
//单笔限额 -1 表示不限制【单位分】
|
||||||
private String amountLimited;
|
private Integer amountLimited;
|
||||||
//0-不允许跨城 1-允许跨城 2-不允许跨城,但部分临近城市可以跨城用车
|
//0-不允许跨城 1-允许跨城 2-不允许跨城,但部分临近城市可以跨城用车
|
||||||
private String allowCrossCity;
|
private Integer allowCrossCity;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,6 +3,8 @@ package com.chint.interfaces.rest.amap.dto.travelapplication;
|
||||||
import com.chint.interfaces.rest.amap.BaseRequestParam;
|
import com.chint.interfaces.rest.amap.BaseRequestParam;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提交申请单
|
* 提交申请单
|
||||||
* @Author:nxj
|
* @Author:nxj
|
||||||
|
@ -29,6 +31,12 @@ public class TravelApplicationDto extends BaseRequestParam {
|
||||||
//审批状态 1有效 0无效
|
//审批状态 1有效 0无效
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改必填
|
||||||
|
*/
|
||||||
|
//高德审批ID
|
||||||
|
private String applyRecordId;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,5 +72,5 @@ public class TravelApplicationDto extends BaseRequestParam {
|
||||||
//企业自定义申请单名称(长度限制5字符),申请单入口标签名称
|
//企业自定义申请单名称(长度限制5字符),申请单入口标签名称
|
||||||
private String customSceneLabel;
|
private String customSceneLabel;
|
||||||
//同行人信息(具体字段见【同行人信息】)
|
//同行人信息(具体字段见【同行人信息】)
|
||||||
private String companions;
|
private List<Companions> companions;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class AmapRequest {
|
||||||
return request.getSend(url, params, responseType);
|
return request.getSend(url, params, responseType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <V> V post(String url, BaseRequestParam baseRequestParam, Class<V> responseType) {
|
public <V> V post(String url,BaseRequestParam baseRequestParam, Class<V> responseType) {
|
||||||
baseRequestParam.setAppId(appId);
|
baseRequestParam.setAppId(appId);
|
||||||
baseRequestParam.setEid(eid);
|
baseRequestParam.setEid(eid);
|
||||||
baseRequestParam.setEnt(4);
|
baseRequestParam.setEnt(4);
|
||||||
|
|
|
@ -1,16 +1,21 @@
|
||||||
package com.chint.interfaces.rest.amap.request;
|
package com.chint.interfaces.rest.amap.request;
|
||||||
|
|
||||||
import com.chint.interfaces.rest.amap.dto.travelapplication.ModifyTravelApplicationDto;
|
|
||||||
import com.chint.interfaces.rest.amap.dto.travelapplication.TravelApplicationDto;
|
import com.chint.interfaces.rest.amap.dto.travelapplication.TravelApplicationDto;
|
||||||
import com.chint.interfaces.rest.amap.dto.travelapplication.TravelApplicationDtoResponse;
|
import com.chint.interfaces.rest.amap.dto.travelapplication.TravelApplicationDtoResponse;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 差旅
|
* 差旅
|
||||||
* @Author:nxj
|
* @Author:nxj
|
||||||
* @Date:2024/4/24 16:40
|
* @Date:2024/4/24 16:40
|
||||||
*/
|
*/
|
||||||
|
@Component
|
||||||
public class TravelApplicationRequest {
|
public class TravelApplicationRequest {
|
||||||
|
|
||||||
|
@Value("${amap.baseUrl}")
|
||||||
|
private String baseUrl;
|
||||||
//创建差旅申请单
|
//创建差旅申请单
|
||||||
private final static String APPLY_RECORD_CREATE="/ws/boss/enterprise/openapi/apply/record/create";
|
private final static String APPLY_RECORD_CREATE="/ws/boss/enterprise/openapi/apply/record/create";
|
||||||
|
|
||||||
|
@ -21,10 +26,10 @@ public class TravelApplicationRequest {
|
||||||
private AmapRequest amapRequest;
|
private AmapRequest amapRequest;
|
||||||
|
|
||||||
public TravelApplicationDtoResponse apply(TravelApplicationDto dto){
|
public TravelApplicationDtoResponse apply(TravelApplicationDto dto){
|
||||||
return amapRequest.post(APPLY_RECORD_CREATE,dto, TravelApplicationDtoResponse.class);
|
return amapRequest.post(baseUrl+APPLY_RECORD_CREATE,dto, TravelApplicationDtoResponse.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TravelApplicationDtoResponse modify(ModifyTravelApplicationDto dto){
|
public TravelApplicationDtoResponse modify(TravelApplicationDto dto){
|
||||||
return amapRequest.post(APPLY_RECORD_UPDATE,dto, TravelApplicationDtoResponse.class);
|
return amapRequest.post(baseUrl+APPLY_RECORD_UPDATE,dto, TravelApplicationDtoResponse.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue