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

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

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

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

//抽取的方法:生成工单 发送短信
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<Order,Integer>{

}

public interface WorkBillRepository extends JpaRepository<WorkBill,Integet>{

}

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<Courier> 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<Courier> 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("已通知");
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值