package com.doumee.service.business.impl.thrid;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.TypeReference;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.doumee.biz.system.SystemDictDataBiz;
|
import com.doumee.core.tms.model.TMSContants;
|
import com.doumee.core.tms.model.request.*;
|
import com.doumee.core.tms.model.response.*;
|
import com.doumee.core.utils.Constants;
|
import com.doumee.core.utils.HttpsUtil;
|
import com.doumee.core.wms.model.request.*;
|
import com.doumee.core.wms.model.response.WmsBaseDataResponse;
|
import com.doumee.core.wms.model.response.WmsBaseResponse;
|
import com.doumee.core.wms.model.response.WmsInventoryDataResponse;
|
import com.doumee.dao.business.*;
|
import com.doumee.dao.business.dao.SmsEmailMapper;
|
import com.doumee.dao.business.model.*;
|
import com.doumee.service.business.impl.SmsEmailServiceImpl;
|
import com.doumee.service.business.third.TmsService;
|
import com.doumee.service.business.third.WmsService;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import io.swagger.models.auth.In;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.*;
|
|
/**
|
* TMS平台对接Service实现
|
* @author 江蹄蹄
|
* @date 2023/11/30 15:33
|
*/
|
@Service
|
@Slf4j
|
public class TmsServiceImpl implements TmsService {
|
|
@Autowired
|
private SmsEmailMapper smsEmailMapper;
|
@Autowired
|
private PlatformWmsJobMapper platformWmsJobMapper;
|
@Autowired
|
private PlatformGroupMapper platformGroupMapper;
|
@Autowired
|
private CarsMapper carsMapper;
|
@Autowired
|
private MemberMapper memberMapper;
|
@Autowired
|
private PlatformJobMapper platformJobMapper;
|
@Autowired
|
private PlatformWmsDetailMapper platformWmsDetailMapper;
|
@Autowired
|
private SystemDictDataBiz systemDictDataBiz;
|
@Autowired
|
private WmsInterfaceLogMapper wmsInterfaceLogMapper;
|
@Value("${debug_model}")
|
private Boolean isDebug;
|
/**
|
* 电子锁上锁时间接口
|
* 根据合同号,查询电子锁上锁情况;存在批量查询的情况;
|
* @param param 参数
|
* @return TmsBaseResponse
|
*/
|
@Override
|
public TmsBaseResponse<List<TmsLockStatusQueryResponse>> lockStatusQuery(TmsLockStatusQueryRequest param){
|
String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode()
|
+ TMSContants.InterfacePath.getElecByContractNumberList[0];
|
|
TmsBaseResponse<List<TmsLockStatusQueryResponse>> response = sendHttpRequest(url,TMSContants.InterfacePath.getElecByContractNumberList[1],JSONObject.toJSONString(param)
|
,new TypeReference< TmsBaseResponse<List<TmsLockStatusQueryResponse>>>(){});
|
return response;
|
}
|
|
/**
|
* 运输单gis轨迹
|
* 根据区域ID集合+筛选条件(合同号、制单开始日期、制单结束日期、发货地、到货地、省份,非需要),返回合同列表信息,按照时间倒序展示;
|
* @param param 参数
|
* @return TmsBaseResponse
|
*/
|
@Override
|
public List<TmsGisListResponse> gisList(TmsGisListRequest param){
|
|
if(param.getTransportCode()==null ){
|
return new ArrayList<>();
|
}
|
String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode()
|
+TMSContants.InterfacePath.getGis[0];
|
TmsBaseResponse<List<TmsGisListResponse>> response = sendHttpRequest(url,TMSContants.InterfacePath.getGis[1],JSONObject.toJSONString(param)
|
,new TypeReference< TmsBaseResponse<List<TmsGisListResponse>>>(){});
|
if(response ==null){
|
return new ArrayList<>();
|
}else{
|
return response.getData()==null?new ArrayList<>():response.getData();
|
}
|
}
|
/**
|
* 订单生命周期
|
* @param param 参数
|
* @return TmsBaseResponse
|
*/
|
@Override
|
public List<TmsCircleStatusResultListResponse> getCicleStatusList(TmsCircleStatusListRequest param){
|
List<TmsCircleStatusResultListResponse> list =new ArrayList<>();
|
if(param.getContractNumber()==null ){
|
return new ArrayList<>();
|
}
|
String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode()
|
+TMSContants.InterfacePath.getOrderStatusByContractNumber[0];
|
TmsBaseResponse<List<TmsCircleStatusListResponse>> response = sendHttpRequest(url,TMSContants.InterfacePath.getOrderStatusByContractNumber[1],JSONObject.toJSONString(param)
|
,new TypeReference< TmsBaseResponse<List<TmsCircleStatusListResponse>>>(){});
|
|
if(response ==null){
|
return new ArrayList<>();
|
}else{
|
/**
|
* ddsc(0,"订单生成",new Integer[]{ChildStatusLevel.create.getKey()}),
|
* ydpzz (1,"运单配载中",new Integer[]{ChildStatusLevel.ysdxc.getKey()
|
* ,ChildStatusLevel.ysdcx.getKey()
|
* ,ChildStatusLevel.shtg.getKey()
|
* ,ChildStatusLevel.shwtg.getKey()
|
* ,ChildStatusLevel.ysdcx.getKey()}),
|
* ckckz (2,"仓库出库中",new Integer[]{ChildStatusLevel.ddzhddzs.getKey()
|
* ,ChildStatusLevel.clqddzs.getKey()}),
|
* clysz(3, "车辆运输中",new Integer[]{ChildStatusLevel.clqdapp.getKey()}),
|
* ydh(4,"已到货",new Integer[]{ChildStatusLevel.ddzhd.getKey()}),
|
* yrk
|
*/
|
for (int i = 0; i < 6; i++) {
|
TmsCircleStatusResultListResponse t = new TmsCircleStatusResultListResponse();
|
TMSContants.TopStatusLevel tem = TMSContants.TopStatusLevel.ddsc;
|
if(i == 0){
|
tem=TMSContants.TopStatusLevel.ddsc;
|
} if(i == 1){
|
tem=TMSContants.TopStatusLevel.ydpzz;
|
} if(i == 2){
|
tem=TMSContants.TopStatusLevel.ckckz;
|
} if(i == 3){
|
tem=TMSContants.TopStatusLevel.clysz;
|
} if(i == 4){
|
tem=TMSContants.TopStatusLevel.ydh;
|
} if(i == 5){
|
tem=TMSContants.TopStatusLevel.yrk;
|
}
|
t.setName(tem.getName());
|
t.setKey(tem.getKey());
|
t.setSecondList(getSecondCircleStatusList(tem,response.getData()));
|
list.add(t);
|
}
|
}
|
|
return list;
|
}
|
|
private List<TmsCircleStatusListResponse> getSecondCircleStatusList(TMSContants.TopStatusLevel tem, List<TmsCircleStatusListResponse> data) {
|
if(data ==null ||data.size()==0){
|
return new ArrayList<>();
|
}
|
List<TmsCircleStatusListResponse> list = new ArrayList<>();
|
Integer[] statusList = tem.getChileIndexList();
|
if(statusList!=null){
|
for(Integer t :statusList){
|
for(TmsCircleStatusListResponse status :data){
|
if(Constants.equalsInteger(status.getOrderStatus(),Constants.FOUR)
|
&& Constants.equalsInteger(status.getOrderStatus(),TMSContants.StatusCode.app)) {
|
status.setOrderStatus(TMSContants.ChildStatusLevel.clqdapp.getKey());
|
}
|
if(Constants.equalsInteger(status.getOrderStatus(),Constants.FIVE)
|
&& Constants.equalsInteger(status.getOrderStatus(),TMSContants.StatusCode.app)) {
|
status.setOrderStatus(TMSContants.ChildStatusLevel.ddzhd.getKey());
|
}
|
if(Constants.equalsInteger(status.getOrderStatus(),t )){
|
status.setOrderStatusDes(TMSContants.ChildStatusLevel.getInfo(status.getOrderStatus(),null));
|
list.add(status);
|
}
|
}
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 合同列表接口
|
* 根据区域ID集合+筛选条件(合同号、制单开始日期、制单结束日期、发货地、到货地、省份,非需要),返回合同列表信息,按照时间倒序展示;
|
* @param param 参数
|
* @return TmsBaseResponse
|
*/
|
@Override
|
public List<TmsOrderListResponse> orderList(TmsOrderListRequest param){
|
if(StringUtils.isBlank(param.getPhoneNumber())){
|
param.setPhoneNumber("00000000000");//手机号必填
|
}
|
if(param.getContractNumbers()==null || param.getContractNumbers().size()==0){
|
param.setContractNumbers(null);
|
}
|
String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode()
|
+TMSContants.InterfacePath.getOrderList[0];
|
TmsBaseResponse<List<TmsOrderListResponse>> response = sendHttpRequest(url,TMSContants.InterfacePath.getOrderList[1],JSONObject.toJSONString(param)
|
,new TypeReference< TmsBaseResponse<List<TmsOrderListResponse>>>(){});
|
if(response ==null){
|
return new ArrayList<>();
|
}else{
|
return response.getData()==null?new ArrayList<>():response.getData();
|
}
|
}
|
/**
|
* 合同详情接口
|
* @param param 参数
|
* @return TmsBaseResponse
|
*/
|
@Override
|
public TmsOrderInfoResponse orderInfo(TmsOrderInfoRequest param){
|
TmsOrderInfoResponse result = new TmsOrderInfoResponse();
|
if(StringUtils.isBlank(param.getContractNumber())){
|
return result;
|
}
|
String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode()
|
+TMSContants.InterfacePath.getOrderDetailByContractNumber[0];
|
TmsBaseResponse<TmsOrderInfoResponse> response = sendHttpRequest(url,TMSContants.InterfacePath.getOrderDetailByContractNumber[1],JSONObject.toJSONString(param)
|
,new TypeReference< TmsBaseResponse<TmsOrderInfoResponse>>(){});
|
if(response!=null && response.getData()!=null){
|
result =response.getData();
|
}
|
if(result.getTransportCode()!=null){
|
TmsGisListRequest p = new TmsGisListRequest();
|
p.setTransportCode(result.getTransportCode());
|
result.setGisList(gisList(p));
|
}
|
TmsCircleStatusListRequest p1 = new TmsCircleStatusListRequest();
|
p1.setContractNumber(param.getContractNumber());
|
result.setCicleStatusList(getCicleStatusList(p1));
|
return result;
|
}
|
|
/**
|
* 发起 tms接口请求
|
* @param url
|
* @param name
|
* @param param
|
* @param typeReference
|
* @return
|
* @param <T>
|
*/
|
public <T> TmsBaseResponse<T> sendHttpRequest(String url, String name, String param,TypeReference<TmsBaseResponse<T>> typeReference){
|
log.info("【"+name+"】================开始===="+ JSONObject.toJSONString(param));
|
if ( StringUtils.isNotBlank(url)) {
|
String res = null;
|
int success = 0;
|
try {
|
Map<String,String> headers = new HashMap<>();
|
res = HttpsUtil.postJson(url,param);
|
TmsBaseResponse result = JSONObject.parseObject(res, typeReference.getType());
|
logResult(result,name);
|
if(result!=null && result.getData() !=null ){
|
|
}else{
|
success =1;
|
}
|
return result;
|
}catch (Exception e){
|
success = 1;
|
log.error("【"+name+"】================失败===="+ JSONObject.toJSONString(param));
|
}finally {
|
saveInterfaceLog(url,name,param,success,res,Constants.ZERO);
|
}
|
}
|
return null;
|
}
|
@Override
|
public void saveInterfaceLog(String url,String name,String param,Integer success,String respone,int type){
|
if(wmsInterfaceLogMapper ==null){
|
return;
|
}
|
WmsInterfaceLog log = new WmsInterfaceLog();
|
log.setCreateDate(new Date());
|
log.setUrl(url);
|
log.setEditDate(log.getCreateDate());
|
log.setPlat(Constants.ONE);
|
log.setName(name);
|
log.setIsdeleted(Constants.ZERO);
|
log.setRequest(param);
|
log.setType(type);
|
log.setSuccess(success);
|
log.setRepose(respone);
|
wmsInterfaceLogMapper.insert(log);
|
}
|
|
private static void logResult(TmsBaseResponse res,String name) {
|
if(StringUtils.equals(res.getCode(), TmsBaseResponse.CODE_SUCCESS)){
|
log.info("【TMS接口:"+name+"】================成功====\n"+ JSONObject.toJSONString(res));
|
}else{
|
log.error("【TMS接口:"+name+"】================失败====:\n"+ JSONObject.toJSONString(res));
|
}
|
}
|
|
}
|