package com.doumee.service.business.impl.third; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.dao.business.WmsInterfaceLogMapper; import com.doumee.dao.business.model.WmsInterfaceLog; import com.doumee.service.business.third.model.TMSContants; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.HttpsUtil; import com.doumee.service.business.third.TmsService; import com.doumee.service.business.third.model.request.*; import com.doumee.service.business.third.model.response.*; 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 java.util.*; /** * TMS平台对接Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service @Slf4j public class TmsServiceImpl implements TmsService { @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private WmsInterfaceLogMapper wmsInterfaceLogMapper; @Value("${debug_model}") private Boolean isDebug; /** * 电子锁上锁时间接口 * 根据合同号,查询电子锁上锁情况;存在批量查询的情况; * @param param 参数 * @return TmsBaseResponse */ @Override public TmsBaseResponse> lockStatusQuery(TmsLockStatusQueryRequest param){ String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() + TMSContants.InterfacePath.getElecByContractNumberList[0]; TmsBaseResponse> response = sendHttpRequest(url,TMSContants.InterfacePath.getElecByContractNumberList[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>>(){}); return response; } /** * 运输单gis轨迹 * 根据区域ID集合+筛选条件(合同号、制单开始日期、制单结束日期、发货地、到货地、省份,非需要),返回合同列表信息,按照时间倒序展示; * @param param 参数 * @return TmsBaseResponse */ @Override public List 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> response = sendHttpRequest(url,TMSContants.InterfacePath.getGis[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>>(){}); if(response ==null){ return new ArrayList<>(); }else{ return response.getData()==null?new ArrayList<>():response.getData(); } } /** * 订单生命周期 * @param param 参数 * @return TmsBaseResponse */ @Override public List getCicleStatusList(TmsCircleStatusListRequest param){ List 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> response = sendHttpRequest(url,TMSContants.InterfacePath.getOrderStatusByContractNumber[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>>(){}); 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.yrk; } if(i == 1){ tem=TMSContants.TopStatusLevel.ydh; } if(i == 2){ tem=TMSContants.TopStatusLevel.clysz; } if(i == 4){ tem=TMSContants.TopStatusLevel.ckckz; } if(i == 3){ tem=TMSContants.TopStatusLevel.ydpzz; } if(i == 5){ tem=TMSContants.TopStatusLevel.ddsc; } t.setName(tem.getName()); t.setKey(tem.getKey()); t.setSecondList(getSecondCircleStatusList(tem,response.getData())); if(t.getSecondList()!=null & t.getSecondList().size()>0){ list.add(t); } } } Collections.sort(list, (o1, o2) -> { return o2.getKey() - o1.getKey(); //按数量从大到小排序 }); return list; } private List getSecondCircleStatusList(TMSContants.TopStatusLevel tem, List data) { if(data ==null ||data.size()==0){ return new ArrayList<>(); } List 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.getType(),TMSContants.StatusCode.rggx)) { continue; } if(Constants.equalsInteger(status.getOrderStatus(),Constants.FOUR) && Constants.equalsInteger(status.getType(),TMSContants.StatusCode.app)) { status.setOrderStatus(TMSContants.ChildStatusLevel.clqdapp.getOrderStatus()); } if(Constants.equalsInteger(status.getOrderStatus(),Constants.FIVE) && Constants.equalsInteger(status.getType(),TMSContants.StatusCode.app)) { status.setOrderStatus(TMSContants.ChildStatusLevel.ddzhd.getOrderStatus()); } if(Constants.equalsInteger(status.getOrderStatus(),t )){ status.setOrderStatusDes(TMSContants.ChildStatusLevel.getInfo(status.getOrderStatus(),null)); list.add(status); } Date td =DateUtil.fromStringToDate("yyy-MM-dd HH:mm:ss",status.getRecordDate()); if(td!=null){ status.setTimeStamp(td.getTime()); } } } } Collections.sort(list, (o1, o2) -> { return (int) (o2.getTimeStamp() - o1.getTimeStamp()); //按数量从大到小排序 }); return list; } /** * 未完成订单列表接口 * 根据区域ID集合+筛选条件(合同号、制单开始日期、制单结束日期、发货地、到货地、省份,非需要),返回合同列表信息,按照时间倒序展示; * @param param 参数 * @return TmsBaseResponse */ @Override public TmsBasePageResponse getNotFinishOrderList(TmsOrderNoFinishListRequest param){ String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getNotFinishOrderList[0]; TmsBaseResponse > response = sendHttpRequest(url,TMSContants.InterfacePath.getNotFinishOrderList[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse> >(){}); if(response ==null || response.getData() == null){ return new TmsBasePageResponse<>(); } return response.getData(); } /** * 查询司机所有代办任务 * @param param 参数 * @return TmsBaseResponse */ @Override public TmsBasePageResponse getDriverTaskList(TmsDriverTaskListRequest param){ String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getDriverTaskList[0]; // url = "http://10.163.4.56:8088"+TMSContants.InterfacePath.getDriverTaskList[0]; TmsBaseResponse > response = sendHttpRequest(url,TMSContants.InterfacePath.getDriverTaskList[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>>(){}); if(response ==null || response.getData() == null){ return new TmsBasePageResponse<>(); } return response.getData(); } /** * 司机待办任务详情 * @param param 参数 * @return TmsBaseResponse */ @Override public TmsDriveTaskInfoResponse getDriverTaskDetail(TmsDriverTaskInfoRequest param){ if(StringUtils.isBlank(param.getId()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getDriverTaskDetail[0]; // url = "http://10.163.4.56:8088"+TMSContants.InterfacePath.getDriverTaskDetail[0]; TmsBaseResponse response = sendHttpRequest(url,TMSContants.InterfacePath.getDriverTaskDetail[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>(){}); if(response ==null || response.getData() == null){ return new TmsDriveTaskInfoResponse(); } return response.getData(); } /** * 司机启运 * @param param 参数 * @return TmsBaseResponse */ @Override public boolean driverStart(TmsDriverStartAndArrivalRequest param){ if(StringUtils.isBlank(param.getId()) || StringUtils.isBlank(param.getOptType())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.driverStart[0]; // url = "http://10.163.4.56:8088"+TMSContants.InterfacePath.driverStart[0]; TmsBaseResponse response = sendHttpRequest(url,TMSContants.InterfacePath.driverStart[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>(){}); if(response ==null || !StringUtils.equals(response.getCode(),"0")){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,任务到货提交失败,请稍后重试!"); } return true; } /** * 司机到货 * @param param 参数 * @return TmsBaseResponse */ @Override public boolean driverArrival(TmsDriverStartAndArrivalRequest param){ if(StringUtils.isBlank(param.getId()) || StringUtils.isBlank(param.getOptType()) || param.getStopNumber() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.driverArrival[0]; // url = "http://10.163.4.56:8088"+TMSContants.InterfacePath.driverArrival[0]; TmsBaseResponse response = sendHttpRequest(url,TMSContants.InterfacePath.driverArrival[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>(){}); if(response ==null ||!StringUtils.equals(response.getCode(),"0")){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,任务到货提交失败,请稍后重试!"); } return true; } /** * 营销人员信息实时查询 * @param param 参数 * @return TmsBaseResponse */ @Override public TmsEmployeeListResponse getEmployeeList(TmsEmployeeListRequest param){ String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getEmployeeList[0]; TmsBaseResponse> response = sendHttpRequest(url,TMSContants.InterfacePath.getEmployeeList[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>>(){}); if(response ==null || response.getData() == null || response.getData().size() ==0){ return new TmsEmployeeListResponse(); } return response.getData().get(0); } /** * 出库能力统计 * 查询某个厂/全部厂的今日计划量、今日出库量、今日未出库量数据。 * @param param 参数 * @return TmsBaseResponse */ @Override public TmsOutboundCapabilityResponse getOutboundCapability(TmsFacrotyCodeListRequest param){ String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getOutboundCapability[0]; TmsBaseResponse response = sendHttpRequest(url,TMSContants.InterfacePath.getOutboundCapability[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>(){}); if(response ==null || response.getData() == null){ return new TmsOutboundCapabilityResponse(); } return response.getData(); } /** * 合同列表接口 * 根据区域ID集合+筛选条件(合同号、制单开始日期、制单结束日期、发货地、到货地、省份,非需要),返回合同列表信息,按照时间倒序展示; * @param param 参数 * @return TmsBaseResponse */ @Override public TmsBasePageResponse orderList(TmsOrderListRequest param){ String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getOrderList[0]; TmsBaseResponse> response = sendHttpRequest(url,TMSContants.InterfacePath.getOrderList[1],JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse>>(){}); if(response ==null){ return new TmsBasePageResponse<>(); }else{ return response.getData()==null?new TmsBasePageResponse<>():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 response = sendHttpRequest(url,TMSContants.InterfacePath.getOrderDetailByContractNumber[1] ,param.getContractNumber() ,new TypeReference< TmsBaseResponse>(){}); 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; } /** * 全国到货地分布查询查询 * @param param 参数 * @return TmsBaseResponse */ @Override public List getDistributionOfDeliveryLocations(TmsFacrotyCodeListRequest param){ List result = new ArrayList<>(); // if( param.getFacrotyCodeList() == null || param.getFacrotyCodeList().size() == 0){ // param.setFacrotyCodeList(new ArrayList<>()); // param.getFacrotyCodeList().add("0"); // } String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getDistributionOfDeliveryLocations[0]; TmsBaseResponse< List> response = sendHttpRequest(url,TMSContants.InterfacePath.getDistributionOfDeliveryLocations[1], JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse< List>>(){}); if(response!=null && response.getData()!=null){ result =response.getData(); } return result; } /** * 实时库存查询 * @return TmsBaseResponse */ @Override public List getRealTimeInventory( ){ List result = new ArrayList<>(); String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getRealTimeInventory[0]; TmsBaseResponse< List> response = sendHttpRequest(url,TMSContants.InterfacePath.getRealTimeInventory[1] ,"{}" ,new TypeReference< TmsBaseResponse< List>>(){}); if(response!=null && response.getData()!=null){ result =response.getData(); } return result; } /** * 查询5个厂的运力资源利用情况 * @return TmsBaseResponse */ @Override public List getTotalAndReportVehicleQty( ){ List result = new ArrayList<>(); String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getTotalAndReportVehicleQty[0]; TmsBaseResponse< List> response = sendHttpRequest(url,TMSContants.InterfacePath.getTotalAndReportVehicleQty[1] ,"{}" ,new TypeReference< TmsBaseResponse< List>>(){}); if(response!=null && response.getData()!=null){ result =response.getData(); } return result; } /** * 近7日到货情况(含明细) * @return TmsBaseResponse */ @Override public List getSevenArrivalStatusAndDetails(TmsSevenArrivalDetailsRequest param ){ List result = new ArrayList<>(); String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getSevenArrivalStatusAndDetails[0]; TmsBaseResponse< List> response = sendHttpRequest(url,TMSContants.InterfacePath.getSevenArrivalStatusAndDetails[1] ,JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse< List>>(){}); if(response!=null && response.getData()!=null){ result =response.getData(); } return result; } /** * 指定时间范围内累计出库量 * @return TmsBaseResponse */ @Override public List getOutQtyAndVehicleQty(TmsOutQtyAndVehicleQtyRequest param ){ List result = new ArrayList<>(); String url = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.TMS_INTERFACE_URL_PREFIX).getCode() +TMSContants.InterfacePath.getOutQtyAndVehicleQty[0]; TmsBaseResponse< List> response = sendHttpRequest(url,TMSContants.InterfacePath.getOutQtyAndVehicleQty[1] ,JSONObject.toJSONString(param) ,new TypeReference< TmsBaseResponse< List>>(){}); if(response!=null && response.getData()!=null){ result =response.getData(); } return result; } /** * 发起 tms接口请求 * @param url * @param name * @param param * @param typeReference * @return * @param */ public TmsBaseResponse sendHttpRequest(String url, String name, String param,TypeReference> typeReference){ log.info("【"+name+"】================开始===="+ JSONObject.toJSONString(param)); if ( StringUtils.isNotBlank(url)) { String res = null; int success = 0; try { Map 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)); } } }