【客户下单】后台系统自动分单成功生成工单发送短信

【客户下单】后台系统自动分单成功生成工单发送短信

自动分单成功,后台生成工单发送短信,否则进入人工分单流程。

生成工单,发送短信的方法抽取:

//抽取的方法:生成工单 发送短信
private void generateWorkBill(Order order){
    //生成工单
    WorkBill workBill = new WorkBill();
    workBill.setType("新");
    workBill.setPickstate("新单");//取件状态
    workBill.setBuildtime(new Date());
    workBill.setRemark(order.getRemark());
    String smsNumber = RandomStringUtils.randomNumeric(4);
    workBill.setSmaNumber(smsNumber);//短信序号
    workBill.setOrder(order);
    workBill.setCourier(order.getCourier());
    workBillRepository.save(workBill);
    //发送短信
    //调用MQ服务 发送一条消息给快递员
    jmsTemplate.send("bos_sms",new MessageCreator(){
        @Override
        public Message createMessage(Session session) throws JMSException {
            MapMessage mapMessage = session.createMapMessage();
            mapMessage.setString("telephone",order.getCourier().getTelephone());
            mapMessage.setString("msg","短信序号:"+smsNumber+",取件地址:"+order.getSendAddress()+",联系人:"+order.getSendName()+",手机:"+order.getSendMobile()+",快递员捎话:"+order.getSendMobileMsg());
            return mapMessage;
        }
    });
    //修改工单状态
    workBill.setPickstate("已通知");
}

调用MQ发送消息:

@Autowired
@Qualifier("jmsQueueTemplate")
private JmsTemplate jmsTemplate;//MQ发短信

当自动分单的条件都 不满足时,需要进行人工分单:

//上述自动分单的情况都不是,将进行人工分单
order.setOrderType("2");//设置分单类型为人工分单
orderRepository.save(order);

dao层代码,因为只涉及到保存订单和工单的操作,因此只需要继承JpaRepository接口即可。

public interface OrderRepository extends JpaRepository{

}

public interface WorkBillRepository extends JpaRepository{

}

OrderServiceImpl完整代码:

@Service
@Transactional
public class OrderServiceImpl implements OrderService{
@Autowired
private FixedAreaRepository fixedAreaRepository;
@Autowired
private OrderRepository orderRepository;
@Autowired
private AreaRepository areaRepository;
@Autowired
private WorkBillRepository workBillRepository;
@Autowired
@Qualifier("jmsQueueTemplate")
private JmsTemplate jmsTemplate;//MQ发短信
@Override
public void saveOrder(Order order){
    order.setOrderNum(UUID.randomUUID().toString());//设置订单号
    order.setOrderTime(new Date());//设置下单时间
    order.setStatus("1");//订单状态 1就是待取件 2运输中 3已签收 4异常

    //自动分单逻辑,基于CRM地址库完全匹配,获取定区,匹配快递员
    String fixedAreaId = WebClient.create(Constants.CRM_MANAGEMENT_URL+"/services/customerService/findFixedAreaIdByAddress?address="+order.getSendAddress()).accept(MediaType.APPLICATION_JSON).get(String.class);
    if(fixedAreaId!=null){
        FixedArea fixedArea = fixedAreaRepository.findOne(fixedAreaId);//获取定区
        Courier courier = fixedArea.getCouriers().iterator().next();
        if(courier!=null){
            //自动分单成功
            System.out.println("自动分单成功...");
            order.setCourier(courier);//将快递员关联到订单上
            //order.setOrderNum(UUID.randomUUID().toString());//生成订单号
            //设置分单类型为自动分单,1为自动分单,2为人工分单
            order.setOrderType("1");
            //保存订单
            orderRepository.save(order);
            //生成工单 发送短信
            generateWorkBill(order);
            return;
        }
    }
    //基于分区关键字匹配实现自动分单逻辑:通过省市区查询分区关键字,匹配地址,基于分区实现自动分单
    //寄件人省市区
    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 iterator = subArea.getFixedArea().getCouriers().iterator();
            if(iterator.hasNext()){
                Courier courier = iterator.next();
                if(courier!=null){
                    //自动分单成功
                    System.out.println("自动分单成功  ...");
                    //将快递员关联到订单上
                    order.setCourier(courier);
                    //设置分单类型为自动分单,1为自动分单,2为人工分单
                    order.setOrderType("1");
                    //保存订单
                    //order.setOrderNum(UUID.randomUUID().toString());//生成订单号
                    orderRepository.save(order);
                    //生成工单 发送短信
                    generateWorkBill(order);
                    return;
                }
            }
        }
    }
    for(SubArea subArea : persistArea.getSubareas()){
        //当前客户的下单地址是否包含分区辅助关键字
        if(order.getSendAddress().contains(subArea.getAssistKeyWords())){
            //找到分区,找到定区,找到快递员
            Iterator iterator = subArea.getFixedArea().getCouriers().iterator();
            if(iterator.hasNext()){
                Courier courier = iterator.next();
                if(courier!=null){
                    //自动分单成功
                    System.out.println("自动分单成功...");
                    //将快递员关联到订单上
                    order.setCourier(courier);
                    //设置分单类型为自动分单,1为自动分单,2为人工分单
                    order.setOrderType("1");
                    //保存订单
                    //order.setOrderNum(UUID.randomUUID().toString());//生成订单号
                    orderRepository.save(order);
                    //生成工单 发送短信
                    generateWorkBill(order);
                    return;
                }
            }
        }
    }
    //上述自动分单的情况都不是,将进行人工分单
    order.setOrderType("2");//设置分单类型为人工分单
    orderRepository.save(order);
}
//抽取的方法:生成工单 发送短信
private void generateWorkBill(Order order){
    //生成工单
    WorkBill workBill = new WorkBill();
    workBill.setType("新");
    workBill.setPickstate("新单");//取件状态
    workBill.setBuildtime(new Date());
    workBill.setRemark(order.getRemark());
    String smsNumber = RandomStringUtils.randomNumeric(4);
    workBill.setSmaNumber(smsNumber);//短信序号
    workBill.setOrder(order);
    workBill.setCourier(order.getCourier());
    workBillRepository.save(workBill);
    //发送短信
    //调用MQ服务 发送一条消息给快递员
    jmsTemplate.send("bos_sms",new MessageCreator(){
        @Override
        public Message createMessage(Session session) throws JMSException {
            MapMessage mapMessage = session.createMapMessage();
            mapMessage.setString("telephone",order.getCourier().getTelephone());
            mapMessage.setString("msg","短信序号:"+smsNumber+",取件地址:"+order.getSendAddress()+",联系人:"+order.getSendName()+",手机:"+order.getSendMobile()+",快递员捎话:"+order.getSendMobileMsg());
            return mapMessage;
        }
    });
    //修改工单状态
    workBill.setPickstate("已通知");
}

}

你可能感兴趣的:(项目实战)