【客户下单】后台系统基于分区关键字匹配实现自动分单

通过前端传递过来的”省市区”,找到区域,在通过区域找到分区,将客户发货地址与分区的关键字进行匹配,如果包含分区的关键字或辅助关键字,就通过分区找到定区,基于定区找到快递员,实现自动分单。

@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;
                }
            }
        }
    }
}