【客户下单】后台系统自动分单成功生成工单发送短信
自动分单成功,后台生成工单发送短信,否则进入人工分单流程。
生成工单,发送短信的方法抽取:
//抽取的方法:生成工单 发送短信
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("已通知");
}
}