【客户下单】后台系统基于分区关键字匹配实现自动分单
通过前端传递过来的”省市区”,找到区域,在通过区域找到分区,将客户发货地址与分区的关键字进行匹配,如果包含分区的关键字或辅助关键字,就通过分区找到定区,基于定区找到快递员,实现自动分单。
@Service
@Transactional
public class OrderServiceImpl implements OrderService{
@Autowired
private FixedAreaRepository fixedAreaRepository;
@Autowired
private OrderRepository orderRepository;
@Autowired
private AreaRepository areaRepository;
@Override
public void saveOrder(Order order){
//基于分区关键字匹配实现自动分单逻辑:通过省市区查询分区关键字,匹配地址,基于分区实现自动分单
//寄件人省市区
Area area = order.getSendArea();
Area persistArea = areaRepository.findByProvinceAndCityAndDistrict(area.getProvince(),area.getCity(),area.getDistrict());
for(SubArea subArea : persistArea.getSubareas()){
//当前客户的下单地址是否包含分区关键字
if(order.getSendAddress().contains(subArea.getKeyWords())){
//找到分区,找到定区,找到快递员
Iterator<Courier> iterator = subArea.getFixedArea().getCouriers().iterator();
if(iterator.hasNext()){
Courier courier = iterator.next();
if(courier!=null){
//自动分单成功
System.out.println("自动分单成功...");
saveOrder(order,courier);
return;
}
}
}
}
for(SubArea subArea : persistArea.getSubareas()){
//当前客户的下单地址是否包含分区辅助关键字
if(order.getSendAddress().contains(subArea.getAssistKeyWords())){
//找到分区,找到定区,找到快递员
Iterator<Courier> iterator = subArea.getFixedArea().getCouriers().iterator();
if(iterator.hasNext()){
Courier courier = iterator.next();
if(courier!=null){
//自动分单成功
System.out.println("自动分单成功...");
//将快递员关联到订单上
order.setCourier(courier);
//保存订单
order.setOrderNum(UUID.randomUUID().toString());//生成订单号
orderRepository.save(order);
return;
}
}
}
}
}