日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java快递下单模块,Java开发快递物流项目(7)

發(fā)布時(shí)間:2024/9/27 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java快递下单模块,Java开发快递物流项目(7) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

客戶下單業(yè)務(wù)模塊:

一.自動(dòng)分單邏輯分析

1.??獲取到寄件人和收件人的省市區(qū)信息

2.??第一種情況假如寄件人的地址和CRM地址庫(kù)里面的地址完全匹配,則分配快遞員,生成工單

3.??第二種情況只有定區(qū)的信息,則根據(jù)定區(qū)來(lái)匹配快遞員,匹配快遞員成功的話就進(jìn)行分單,生成工單

4.??第三種情況有分區(qū)關(guān)鍵字(keyWords)的信息,則通過(guò)分區(qū)關(guān)鍵字,找到分區(qū),關(guān)聯(lián)上定區(qū),找到快遞員,進(jìn)行分單,生成工單

5.??第四種情況,能匹配到分區(qū)輔助關(guān)鍵字(AssistKeyWords)信息,則通過(guò)輔助關(guān)鍵字,找到分區(qū),關(guān)聯(lián)上定區(qū)找到快遞員進(jìn)行分單,生成工單

6.??上述情況全部失敗的話進(jìn)入人工分單

二.實(shí)現(xiàn)后臺(tái)系統(tǒng)自動(dòng)分單

1.前段表格提交,基于WebService將數(shù)據(jù)傳遞到后臺(tái)系統(tǒng)

2.將bos_domian中order和Area實(shí)體類加上 @RootXmlElement(對(duì)象轉(zhuǎn)換為xml格式)注解,不要忘記maven install

3.在bos_manangement添加OrderService發(fā)布WebService,并 applicaiontContext-webservice.xml

4.完善bos_fore的OrderAction代碼,調(diào)用WebService

5.將寄件人下單地址 ,以 webService 方式,發(fā)送 CRM 地址庫(kù)獲取 對(duì)應(yīng)客戶關(guān)聯(lián) 定區(qū)

6.進(jìn)行業(yè)務(wù)邏輯判斷,完成代碼

package cn.bos.service.take_delivery.impl;

import java.util.Date;

import java.util.Iterator;

import java.util.UUID;

import javax.jms.JMSException;

import javax.jms.MapMessage;

import javax.jms.Message;

import javax.jms.Session;

import javax.ws.rs.core.MediaType;

import org.apache.commons.lang3.RandomStringUtils;

import org.apache.cxf.jaxrs.client.WebClient;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.jms.core.JmsTemplate;

import org.springframework.jms.core.MessageCreator;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import cn.bos.constant.Constants;

import cn.bos.dao.base.AreaRepository;

import cn.bos.dao.base.FixedAreaRepository;

import cn.bos.dao.take_delivery.OrderRepository;

import cn.bos.dao.take_delivery.WorkBillRepository;

import cn.bos.domain.base.Area;

import cn.bos.domain.base.Courier;

import cn.bos.domain.base.FixedArea;

import cn.bos.domain.base.SubArea;

import cn.bos.domain.take_delivery.Order;

import cn.bos.domain.take_delivery.WorkBill;

import cn.bos.service.take_delivery.OrderService;

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

@Override

public void saveOrder(Order order) {

order.setOrderNum(UUID.randomUUID().toString());// 設(shè)置訂單號(hào)

order.setOrderTime(new Date());// 設(shè)置下單時(shí)間

order.setStatus("1");// 待取件

// Area沒有id是瞬時(shí)態(tài) 不能保存到數(shù)據(jù)庫(kù) 要封裝后才能添加

// 1. 獲取到寄件人和收件人的省市區(qū)信息

// 寄件人 省市區(qū)

Area area = order.getSendArea();

Area persistArea = areaRepository.findByProvinceAndCityAndDistrict(

area.getProvince(), area.getCity(), area.getDistrict());

// 收件人 省市區(qū)

Area recArea = order.getSendArea();

Area persistRecArea = areaRepository.findByProvinceAndCityAndDistrict(

recArea.getProvince(), recArea.getCity(),

recArea.getDistrict());

order.setSendArea(persistArea);

order.setRecArea(persistRecArea);

// 2.第一種情況假如寄件人的地址和CRM地址庫(kù)里面的地址完全匹配,則分配快遞員,生成工單

// 自動(dòng)分單邏輯,基于crm地址庫(kù)完全匹配,獲取定區(qū),匹配快遞員

String fixedAreaId = WebClient

.create(Constants.CRM_MANAGEMENT_URL

+ "/services/customerService/customer/findFixedAreaIdByAddress?address="

+ order.getSendAddress())

.accept(MediaType.APPLICATION_JSON).get(String.class);

// 3. 第二種情況只有定區(qū)的信息,則根據(jù)定區(qū)來(lái)匹配快遞員,匹配快遞員成功的話就進(jìn)行分單,生成工單

if (fixedAreaId != null) {

// 如果有這個(gè)定區(qū), 定區(qū)id不為空,根據(jù)這個(gè)id尋找到定區(qū)

// 這個(gè)定區(qū)肯定關(guān)聯(lián)了一個(gè)快遞員

FixedArea fixedArea = fixedAreaRepository.findOne(fixedAreaId);

Courier courier = fixedArea.getCouriers().iterator().next();

if (courier != null) {

// 如果關(guān)聯(lián)了快遞員

// 自動(dòng)分單成功

System.out.println("自動(dòng)分單成功");

saveOrder(order, courier);

// 生成工單 發(fā)送短信

generateWorkBill(order);

return;

}

}

// 4. 第三種情況有分區(qū)關(guān)鍵字(keyWords)的信息,則通過(guò)分區(qū)關(guān)鍵字,找到分區(qū),關(guān)聯(lián)上定區(qū),找到快遞員,進(jìn)行分單,生成工單

// 自動(dòng)分單的邏輯,通過(guò)省市區(qū),查詢分區(qū)關(guān)鍵字,匹配地址,基于分區(qū)實(shí)現(xiàn)自動(dòng)分單

for (SubArea subArea : persistArea.getSubareas()) { // 拿到寄件人的分區(qū)地址

// 當(dāng)前客戶的下單地址,是否包含分區(qū)關(guān)鍵字

if (order.getSendAddress().contains(subArea.getKeyWords())) {

// 包含的話,找到分區(qū),找到定區(qū),找到快遞員

Iteratoriterator = subArea.getFixedArea()

.getCouriers().iterator();

if (iterator.hasNext()) {

Courier courier = iterator.next();

if (courier != null) {

// 自動(dòng)分單成功

System.out.println("自動(dòng)分單成功");

saveOrder(order, courier);

// 生成工單 發(fā)送短信

generateWorkBill(order);

return;

}

}

}

}

// 5.第四種情況,能匹配到分區(qū)輔助關(guān)鍵字(AssistKeyWords)信息,則通過(guò)輔助關(guān)鍵字,找到分區(qū),關(guān)聯(lián)上定區(qū)找到快遞員進(jìn)行分單,生成工單

for (SubArea subArea : persistArea.getSubareas()) {

// 當(dāng)前客戶的下單地址是否包含分區(qū)輔助關(guān)鍵字

if (order.getSendAddress().contains(subArea.getAssistKeyWords())) {

// 找到分區(qū),找到定區(qū),找到快遞員

Iteratoriterator = subArea.getFixedArea()

.getCouriers().iterator();

if (iterator.hasNext()) {

Courier courier = iterator.next();

if (courier != null) {

// 自動(dòng)分單成功

System.out.println("自動(dòng)分單成功");

// 生成工單

generateWorkBill(order);

return;

}

}

}

}

// 進(jìn)入人工分單

order.setOrderType("2");

orderRepository.save(order);

}

private void generateWorkBill(final Order order) {

// 生成工單

WorkBill workBill = new WorkBill();

workBill.setType("新");

workBill.setPickstate("新單");

workBill.setBuildtime(new Date());

workBill.setRemark(order.getRemark());

final String smsNumber = RandomStringUtils.randomNumeric(4);

workBill.setSmsNumber(smsNumber); // 短信序號(hào)

workBill.setOrder(order);

workBill.setCourier(order.getCourier());

workBillRepository.save(workBill);

// 發(fā)送短信

// 調(diào)用MQ服務(wù),發(fā)送一條信息

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",

"短信序號(hào):" + smsNumber + ",取件地址:" + order.getSendAddress()

+ ",聯(lián)系人:" + order.getSendName() + ",手機(jī):"

+ order.getSendMobile() + ",快遞員捎話:"

+ order.getSendMobileMsg());

return mapMessage;

}

});

// 修改工單狀態(tài)

workBill.setPickstate("已通知");

}

// 自動(dòng)分單保存

private void saveOrder(Order order, Courier courier) {

// 將快遞員關(guān)聯(lián)到訂單上

order.setCourier(courier);

// 設(shè)置自動(dòng)分單

order.setOrderType("1");

// 保存訂單

orderRepository.save(order);

}

}

總結(jié)

以上是生活随笔為你收集整理的java快递下单模块,Java开发快递物流项目(7)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。