🐛 导入运单地点名称为空时司机端回退显示详细地址
This commit is contained in:
+6
-4
@@ -632,10 +632,12 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService {
|
||||
DriverWaybillCardVO card = new DriverWaybillCardVO();
|
||||
card.setId(waybill.getId());
|
||||
card.setWaybillNo(waybill.getWaybillNo());
|
||||
card.setFromName(Func.toStr(waybill.getDepartureName(), ""));
|
||||
card.setToName(Func.toStr(waybill.getArrivalName(), ""));
|
||||
card.setFromAddress(Func.toStr(waybill.getDepartureAddress(), card.getFromName()));
|
||||
card.setToAddress(Func.toStr(waybill.getArrivalAddress(), card.getToName()));
|
||||
// 批量导入的运单只有发货/到货地址、没有地点名称,名称为空时回退到地址,
|
||||
// 否则司机端首页、运单列表与打卡页的地点位置都是空的
|
||||
card.setFromName(Func.toStrWithEmpty(waybill.getDepartureName(), Func.toStr(waybill.getDepartureAddress(), "")));
|
||||
card.setToName(Func.toStrWithEmpty(waybill.getArrivalName(), Func.toStr(waybill.getArrivalAddress(), "")));
|
||||
card.setFromAddress(Func.toStrWithEmpty(waybill.getDepartureAddress(), card.getFromName()));
|
||||
card.setToAddress(Func.toStrWithEmpty(waybill.getArrivalAddress(), card.getToName()));
|
||||
card.setCargoNames(splitCargoNames(waybill.getCargoName()));
|
||||
card.setCargoCategory(Func.toStr(waybill.getCargoType(), ""));
|
||||
card.setWeight(formatWeight(waybill.getQuantity(), waybill.getQuantityUnit()));
|
||||
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
package org.springblade.transport.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
||||
import org.apache.ibatis.builder.MapperBuilderAssistant;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springblade.transport.mapper.ExceptionDisposalMapper;
|
||||
import org.springblade.transport.mapper.WaybillEnroutePunchMapper;
|
||||
import org.springblade.transport.mapper.WaybillNodePunchMapper;
|
||||
import org.springblade.transport.pojo.entity.ExceptionDisposal;
|
||||
import org.springblade.transport.pojo.entity.Waybill;
|
||||
import org.springblade.transport.pojo.entity.WaybillEnroutePunch;
|
||||
import org.springblade.transport.pojo.entity.WaybillNodePunch;
|
||||
import org.springblade.transport.pojo.vo.DriverWaybillCardVO;
|
||||
import org.springblade.transport.service.IDriverService;
|
||||
import org.springblade.transport.service.IProcessConfigService;
|
||||
import org.springblade.transport.service.ITransportVehicleService;
|
||||
import org.springblade.transport.service.IWaybillService;
|
||||
import org.springblade.transport.support.CertificationGate;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
/**
|
||||
* 司机端卡片上的发货地 / 到货地。
|
||||
* <p>
|
||||
* 地点名称与详细地址是两列:批量导入的运单只填了地址(导入模板里没有「发货地」「收货地」列),
|
||||
* 名称为空时卡片要回退到地址,否则司机端的地点位置是空的。
|
||||
*/
|
||||
class DriverWaybillCardLocationTest {
|
||||
|
||||
private static final Long WAYBILL_ID = 5601L;
|
||||
|
||||
private static final String PROCESS_JSON = """
|
||||
[{"key":"accept","name":"接单","type":"confirm","enabled":true,"punch":true},
|
||||
{"key":"load","name":"装货","type":"cargo","enabled":true,"punch":true},
|
||||
{"key":"transit","name":"在途","type":"transit","enabled":true,"punch":true},
|
||||
{"key":"sign","name":"签收","type":"cargo","enabled":true,"punch":true}]
|
||||
""";
|
||||
|
||||
private static final String DEPARTURE_ADDRESS = "广西壮族自治区南宁市西乡塘区安吉大道";
|
||||
private static final String ARRIVAL_ADDRESS = "广西壮族自治区河池市金城江区金城中路1号";
|
||||
|
||||
private IWaybillService waybillService;
|
||||
private DriverWaybillServiceImpl service;
|
||||
|
||||
@BeforeAll
|
||||
static void initTableInfo() {
|
||||
// 构造 LambdaQueryWrapper 需要 MyBatis-Plus 的实体元数据缓存
|
||||
MybatisConfiguration configuration = new MybatisConfiguration();
|
||||
MapperBuilderAssistant assistant = new MapperBuilderAssistant(configuration, "");
|
||||
assistant.setCurrentNamespace("test");
|
||||
TableInfoHelper.initTableInfo(assistant, WaybillNodePunch.class);
|
||||
TableInfoHelper.initTableInfo(assistant, WaybillEnroutePunch.class);
|
||||
TableInfoHelper.initTableInfo(assistant, ExceptionDisposal.class);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
waybillService = mock(IWaybillService.class);
|
||||
WaybillNodePunchMapper nodePunchMapper = mock(WaybillNodePunchMapper.class);
|
||||
WaybillEnroutePunchMapper enroutePunchMapper = mock(WaybillEnroutePunchMapper.class);
|
||||
ExceptionDisposalMapper exceptionDisposalMapper = mock(ExceptionDisposalMapper.class);
|
||||
service = new DriverWaybillServiceImpl(
|
||||
waybillService,
|
||||
mock(IDriverService.class),
|
||||
mock(IProcessConfigService.class),
|
||||
mock(ITransportVehicleService.class),
|
||||
mock(CertificationGate.class),
|
||||
enroutePunchMapper,
|
||||
nodePunchMapper,
|
||||
exceptionDisposalMapper);
|
||||
|
||||
when(waybillService.syncDriverAcceptState(any())).thenAnswer(invocation -> invocation.getArgument(0));
|
||||
when(nodePunchMapper.selectList(any())).thenReturn(List.of());
|
||||
when(enroutePunchMapper.selectOne(any())).thenReturn(null);
|
||||
when(enroutePunchMapper.selectList(any())).thenReturn(List.of());
|
||||
when(exceptionDisposalMapper.selectList(any())).thenReturn(List.of());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("地点名称为空(导入的运单)时,名称回退到详细地址")
|
||||
void nameFallsBackToAddressWhenBlank() {
|
||||
Waybill waybill = waybill();
|
||||
waybill.setDepartureName(null);
|
||||
waybill.setDepartureAddress(DEPARTURE_ADDRESS);
|
||||
waybill.setArrivalName("");
|
||||
waybill.setArrivalAddress(ARRIVAL_ADDRESS);
|
||||
when(waybillService.getById(WAYBILL_ID)).thenReturn(waybill);
|
||||
|
||||
DriverWaybillCardVO card = service.detailPunchSnapshot(WAYBILL_ID);
|
||||
|
||||
assertEquals(DEPARTURE_ADDRESS, card.getFromName());
|
||||
assertEquals(ARRIVAL_ADDRESS, card.getToName());
|
||||
assertEquals(DEPARTURE_ADDRESS, card.getFromAddress());
|
||||
assertEquals(ARRIVAL_ADDRESS, card.getToAddress());
|
||||
assertEquals(DEPARTURE_ADDRESS, card.getPickupAddress());
|
||||
assertEquals(ARRIVAL_ADDRESS, card.getUnloadAddress());
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("地点名称有值时用它,不被地址覆盖")
|
||||
void nameWinsWhenPresent() {
|
||||
Waybill waybill = waybill();
|
||||
waybill.setDepartureName("南宁市西乡塘区");
|
||||
waybill.setDepartureAddress(DEPARTURE_ADDRESS);
|
||||
waybill.setArrivalName("河池市金城江区");
|
||||
waybill.setArrivalAddress(ARRIVAL_ADDRESS);
|
||||
when(waybillService.getById(WAYBILL_ID)).thenReturn(waybill);
|
||||
|
||||
DriverWaybillCardVO card = service.detailPunchSnapshot(WAYBILL_ID);
|
||||
|
||||
assertEquals("南宁市西乡塘区", card.getFromName());
|
||||
assertEquals("河池市金城江区", card.getToName());
|
||||
assertEquals(DEPARTURE_ADDRESS, card.getFromAddress());
|
||||
assertEquals(ARRIVAL_ADDRESS, card.getToAddress());
|
||||
}
|
||||
|
||||
private Waybill waybill() {
|
||||
Waybill waybill = new Waybill();
|
||||
waybill.setId(WAYBILL_ID);
|
||||
waybill.setWaybillNo("YD-20261007-0006");
|
||||
waybill.setProcessJson(PROCESS_JSON);
|
||||
waybill.setBusinessStatus("running");
|
||||
waybill.setIsDeleted(0);
|
||||
return waybill;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user