Authored by qinchao

物流信息

... ... @@ -92,49 +92,6 @@ public interface IExpressInfoService {
//ExpressInfoRespBo queryLastExpressDetailInfo(Long orderCode,int type);
ExpressInfoDetail getLastExpressInfoDetail(TabType actor,int status, Long orderCode);
/**
* orderCode 一定是买家订单号
* @return
*/
default Integer getExpressType(Integer status, TabType actor) {
if(null==actor){
if(OrderStatus.SELLER_SEND_OUT.getCode()==status||OrderStatus.PLATFORM_CHECKING.getCode()==status){
return EnumExpressType.EXPRESS_TYPE_1.getCode();
}else if(OrderStatus.WAITING_RECEIVE.getCode()==status||OrderStatus.DONE.getCode()==status){
//4 和 5 状态有问题 ,买家查看物流是没问题的,卖家查看物流有问题啊.
return EnumExpressType.EXPRESS_TYPE_2.getCode();
}else if(OrderStatus.CHECKING_FAKE.getCode()==status){
return EnumExpressType.EXPRESS_TYPE_3.getCode();
}else if(OrderStatus.BUYER_CANCEL_BEFORE_DEPOT_RECEIVE.getCode()==status){
return EnumExpressType.EXPRESS_TYPE_REBACK.getCode();
}
}else {
switch (actor){
case BUY:
return EnumExpressType.EXPRESS_TYPE_2.getCode();
case SELL:
return getExpressTypeSeller(status);
default:
return 0;
}
}
return 0;
}
default Integer getExpressTypeSeller(Integer status){
Integer type ;
if (Objects.equals(OrderStatus.CHECKING_FAKE.getCode(), status)){
type = EnumExpressType.EXPRESS_TYPE_3.getCode();
}else if(Objects.equals(OrderStatus.BUYER_CANCEL_BEFORE_DEPOT_RECEIVE.getCode(), status)){
type = EnumExpressType.EXPRESS_TYPE_REBACK.getCode();
}else{
type = EnumExpressType.EXPRESS_TYPE_1.getCode();
}
return type;
}
List<Integer> status2OnlySellerExpressType = Arrays.asList(OrderStatus.PLATFORM_RECEIVE.getCode(),
OrderStatus.PLATFORM_CHECKING.getCode(),OrderStatus.JUDGE_PASS.getCode(), OrderStatus.WAITING_RECEIVE.getCode(),
... ...
... ... @@ -346,71 +346,30 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
ExpressInfoRespBo expressInfoRespBo = new ExpressInfoRespBo();
Integer expressType = getExpressType(buyerOrder.getStatus(), actor);
LOGGER.info("getExpressType result = {}", expressType);
Integer expressType = getCurrentExpressType4ExpressRecord(buyerOrder.getStatus(), actor);
LOGGER.info("queryExpressDetailInfo getExpressType expressType result = {}, uid={}, orderCode = {},actor = {} ",expressType,uid, orderCode,actor);
//1.物流单号信息
constructWayBillInfo(orderCode,expressType,expressInfoRespBo);
//2.设定最近一个阶段的物流
expressInfoRespBo.setExpressInfoDetailList(Lists.newArrayList());
List<ExpressInfo> expressInfoList = getExpressInfoListByStage( orderCode, expressType);
processExpressInfo(expressInfoList, expressInfoRespBo);
//没有物流详情,但是有物流单号信息
if(CollectionUtils.isEmpty(expressInfoList)){
ExpressRecord expressRecord = expressRecordMapper.selectByOrderCodeAndExpressType(orderCode,expressType);
if(expressRecord!=null){
expressInfoRespBo.setExpressInfoDetailList(new ArrayList<>());
// 快递单号
expressInfoRespBo.setWayBillCode(expressRecord.getWaybillCode());
//物流类型
expressInfoRespBo.setExpressType(expressRecord.getExpressType());
//物流发货方
expressInfoRespBo.setExpressSender(getSenderName(expressInfoRespBo.getExpressType().intValue()));
// 快递公司名称
expressInfoRespBo.setExpressCompanyName(expressCompanyService.getExpressName(expressRecord.getLogisticsType()));
}
}
constructExpressInfo(expressInfoList, expressInfoRespBo.getExpressInfoDetailList());
//设定鉴定的物流调拨信息
//3.设定鉴定的物流调拨信息
expressInfoRespBo.setJudgeExpressInfoDetailList(Lists.newArrayList());
List<ExpressInfo> judgeExpressInfoList=getExpressInfoListByStage( orderCode, EnumExpressType.EXPRESS_TYPE_JUDGE_CENTER.getCode());
constructExpressInfo(judgeExpressInfoList, expressInfoRespBo.getJudgeExpressInfoDetailList());
//获取上一阶段的辅助物流信息
//4.获取上一阶段的辅助物流信息
List<ExpressInfoDetail> supplementExpressInfoDetailList = Lists.newArrayList();
expressInfoRespBo.setSupplementExpressInfoDetailList(supplementExpressInfoDetailList);
if(expressType.intValue()!=0&& EnumExpressType.EXPRESS_TYPE_1.getCode().intValue()!=expressType.intValue()){
if(EnumExpressType.EXPRESS_TYPE_2.getCode().intValue()==expressType.intValue()){
//买家这个时候需要看卖家的物流
//设置物流提示头信息
if(StringUtils.isBlank(expressInfoRespBo.getExpressSender())){
expressInfoRespBo.setExpressSender(getSenderName(EnumExpressType.EXPRESS_TYPE_1.getCode().intValue()));
}
//卖家物流详细
List<ExpressInfo> previousExpressInfoList = getExpressInfoListByStage( orderCode, EnumExpressType.EXPRESS_TYPE_1.getCode());
constructExpressInfo(previousExpressInfoList, supplementExpressInfoDetailList);
}else if(EnumExpressType.EXPRESS_TYPE_3.getCode().intValue()==expressType.intValue()
||EnumExpressType.EXPRESS_TYPE_REBACK.getCode().intValue()==expressType.intValue()){
//卖家这个时候看自己上一阶段的物流
//如果还没有新的物流信息,卖家显示上一个阶段的物流
if(StringUtils.isBlank(expressInfoRespBo.getExpressSender())){
ExpressRecord expressRecord = expressRecordMapper.selectByOrderCodeAndExpressType(orderCode,EnumExpressType.EXPRESS_TYPE_1.getCode());
if(expressRecord!=null){
// 快递单号
expressInfoRespBo.setWayBillCode(expressRecord.getWaybillCode());
//物流类型
expressInfoRespBo.setExpressType(expressRecord.getExpressType());
//物流发货方
expressInfoRespBo.setExpressSender(getSenderName(expressInfoRespBo.getExpressType().intValue()));
// 快递公司名称
expressInfoRespBo.setExpressCompanyName(expressCompanyService.getExpressName(expressRecord.getLogisticsType()));
expressInfoRespBo.setExpressInfoDetailList(new ArrayList<>());
}
}
List<ExpressInfo> previousExpressInfoList = getExpressInfoListByStage(orderCode, EnumExpressType.EXPRESS_TYPE_1.getCode());
constructExpressInfo(previousExpressInfoList, supplementExpressInfoDetailList);
}
}
constructSupplementExpress(orderCode,expressType,expressInfoRespBo);
//设定三个阶段的信息
//5.设定三个阶段的信息
//根据状态重设expressType
//6.根据状态重设expressType
if(Objects.equals(OrderStatus.PLATFORM_RECEIVE.getCode(),buyerOrder.getStatus())
||Objects.equals(OrderStatus.PLATFORM_CHECKING.getCode(),buyerOrder.getStatus())
||Objects.equals(OrderStatus.JUDGE_PASS.getCode(),buyerOrder.getStatus())
... ... @@ -422,6 +381,93 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
return expressInfoRespBo;
}
private void constructSupplementExpress(Long orderCode,Integer expressType,ExpressInfoRespBo expressInfoRespBo){
if(EnumExpressType.EXPRESS_TYPE_2.getCode().intValue()==expressType.intValue()){
//买家这个时候需要看卖家的物流
//设置物流提示头信息
if(StringUtils.isBlank(expressInfoRespBo.getExpressSender())){
expressInfoRespBo.setExpressSender(getSenderName(EnumExpressType.EXPRESS_TYPE_1.getCode().intValue()));
}
//卖家物流详细
List<ExpressInfo> previousExpressInfoList = getExpressInfoListByStage( orderCode, EnumExpressType.EXPRESS_TYPE_1.getCode());
constructExpressInfo(previousExpressInfoList, expressInfoRespBo.getSupplementExpressInfoDetailList());
}else if(EnumExpressType.EXPRESS_TYPE_3.getCode().intValue()==expressType.intValue()
||EnumExpressType.EXPRESS_TYPE_REBACK.getCode().intValue()==expressType.intValue()){
//卖家这个时候看自己上一阶段的物流
//如果还没有新的物流信息,卖家显示上一个阶段的物流
if(StringUtils.isBlank(expressInfoRespBo.getExpressSender())){
//物流单号信息
constructWayBillInfo(orderCode,EnumExpressType.EXPRESS_TYPE_1.getCode(),expressInfoRespBo);
}
List<ExpressInfo> previousExpressInfoList = getExpressInfoListByStage(orderCode, EnumExpressType.EXPRESS_TYPE_1.getCode());
constructExpressInfo(previousExpressInfoList, expressInfoRespBo.getSupplementExpressInfoDetailList());
}
}
//物流单号信息
private void constructWayBillInfo(Long orderCode,Integer expressType,ExpressInfoRespBo expressInfoRespBo){
ExpressRecord expressRecord = expressRecordMapper.selectByOrderCodeAndExpressType(orderCode,expressType);
if(expressRecord!=null){
expressInfoRespBo.setExpressInfoDetailList(new ArrayList<>());
// 快递单号
expressInfoRespBo.setWayBillCode(expressRecord.getWaybillCode());
//物流类型
expressInfoRespBo.setExpressType(expressRecord.getExpressType());
//物流发货方
expressInfoRespBo.setExpressSender(getSenderName(expressInfoRespBo.getExpressType().intValue()));
// 快递公司名称
expressInfoRespBo.setExpressCompanyName(expressCompanyService.getExpressName(expressRecord.getLogisticsType()));
}
}
/**
* 根据状态和actor 获取最近的物流记录状态
* orderCode 一定是买家订单号
* @return
*/
private Integer getCurrentExpressType4ExpressRecord(Integer status, TabType actor) {
if(null==actor){
if(OrderStatus.SELLER_SEND_OUT.getCode()==status
||OrderStatus.PLATFORM_RECEIVE.getCode()==status
||OrderStatus.PLATFORM_CHECKING.getCode()==status
||OrderStatus.JUDGE_PASS.getCode()==status){
return EnumExpressType.EXPRESS_TYPE_1.getCode();
}else if(OrderStatus.WAITING_RECEIVE.getCode()==status||OrderStatus.DONE.getCode()==status){
//4 和 5 状态有问题 ,买家查看物流是没问题的,卖家查看物流有问题啊.
return EnumExpressType.EXPRESS_TYPE_2.getCode();
}else if(OrderStatus.CHECKING_FAKE.getCode()==status){
return EnumExpressType.EXPRESS_TYPE_3.getCode();
}else if(OrderStatus.BUYER_CANCEL_BEFORE_DEPOT_RECEIVE.getCode()==status){
return EnumExpressType.EXPRESS_TYPE_REBACK.getCode();
}
}else {
switch (actor){
case BUY:
return EnumExpressType.EXPRESS_TYPE_2.getCode();
case SELL:
return getCurrentExpressType4ExpressRecordAndSeller(status);
default:
return 0;
}
}
return 0;
}
private Integer getCurrentExpressType4ExpressRecordAndSeller(Integer status){
Integer type ;
if (Objects.equals(OrderStatus.CHECKING_FAKE.getCode(), status)){
type = EnumExpressType.EXPRESS_TYPE_3.getCode();
}else if(Objects.equals(OrderStatus.BUYER_CANCEL_BEFORE_DEPOT_RECEIVE.getCode(), status)){
type = EnumExpressType.EXPRESS_TYPE_REBACK.getCode();
}else{
type = EnumExpressType.EXPRESS_TYPE_1.getCode();
}
return type;
}
/**
* 获取物流详情
... ... @@ -548,7 +594,7 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
}
private void constructExpressInfo(List<ExpressInfo> expressInfoList, List<ExpressInfoDetail> supplementExpressInfoDetailList) {
private void constructExpressInfo(List<ExpressInfo> expressInfoList, List<ExpressInfoDetail> detailList) {
if (CollectionUtils.isNotEmpty(expressInfoList)) {
for (ExpressInfo expressInfo : expressInfoList) {
ExpressInfoDetail expressInfoDetail = new ExpressInfoDetail();
... ... @@ -557,7 +603,7 @@ public class ExpressInfoServiceImpl implements IExpressInfoService {
// 运单信息
expressInfoDetail.setAcceptRemark(expressInfo.getAcceptRemark());
expressInfoDetail.setCreateTimeStr(DateUtil.formatDate(expressInfo.getCreateTime(), DateUtil.yyyy_MM_dd_HH_mm_SS));
supplementExpressInfoDetailList.add(expressInfoDetail);
detailList.add(expressInfoDetail);
}
}
}
... ...