您的位置:首页 > 其它

SSH综合项目实战(快递) -- day09 收派业务、客户在线下单

2017-09-12 11:30 267 查看

一、取派业务

1、创建取派业务模块,导入实体类



package com.itheima.bos.domain.take_delivery;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.itheima.bos.domain.base.Area;
import com.itheima.bos.domain.base.Courier;

/**
* @description:订单实体类
*/
@Entity
@Table(name = "T_ORDER")
public class Order {
@Id
@GeneratedValue
@Column(name = "C_ID")
private Integer id;// 主键
@Column(name = "C_ORDER_NUM")
private String orderNum;// 订单号

@Column(name = "C_TELEPHONE")
private String telephone; // 来电号码

@Column(name = "C_CUSTOMER_ID")
private Integer customer_id; // 客户编号

@Column(name = "C_SEND_NAME")
private String sendName; // 寄件人姓名
@Column(name = "C_SEND_MOBILE")
private String sendMobile;// 寄件人电话
@Column(name = "C_SEND_COMPANY")
private String sendCompany;// 寄件人公司
@OneToOne
@JoinColumn(name = "C_SEND_AREA_ID")
private Area sendArea; // 寄件人省市区信息
@Column(name = "C_SEND_ADDRESS")
private String sendAddress;// 寄件人详细地址信息

@Column(name = "C_REC_NAME")
private String recName;// 收件人姓名
@Column(name = "C_REC_MOBILE")
private String recMobile;// 收件人电话
@Column(name = "C_REC_COMPANY")
private String recCompany;// 收件人公司
@OneToOne
@JoinColumn(name = "C_REC_AREA_ID")
private Area recArea; // 收件人省市区信息
@Column(name = "C_REC_ADDRESS")
private String recAddress;// 收件人详细地址信息

@Column(name = "C_SEND_PRO_NUM")
private String sendProNum; // 快递产品类型编号:速运当日、速运次日、速运隔日
@Column(name = "C_GOODS_TYPE")
private String goodsType;// 托寄物类型:文件、衣服 、食品、电子商品
@Column(name = "C_PAY_TYPE_NUM")
private String payTypeNum;// 支付类型编号:寄付日结、寄付月结、到付
@Column(name = "C_WEIGHT")
private Double weight;// 托寄物重量
@Column(name = "C_REMARK")
private String remark; // 备注

@Column(name = "C_SEND_MOBILE_MSG")
private String sendMobileMsg; // 给快递员捎话

// 分单类型 1 自动分单 2 人工分单
@Column(name = "C_ORDER_TYPE")
private String orderType;

// 订单状态 1 待取件 2 运输中 3 已签收 4 异常
@Column(name = "C_STATUS")
private String status;

// 下单时间
@Column(name = "C_ORDER_TIME")
private Date orderTime;

// 运单
@OneToOne(mappedBy = "order")
private WayBill wayBill;

// 工单
@OneToMany(mappedBy = "order")
private Set<WorkBill> workBills = new HashSet<WorkBill>(0);

@ManyToOne
@JoinColumn(name = "C_COURIER_ID")
private Courier courier;

public Integer getId() {
return id;
}

public Integer getCustomer_id() {
return customer_id;
}

public void setCustomer_id(Integer customer_id) {
this.customer_id = customer_id;
}

public void setId(Integer id) {
this.id = id;
}

public String getOrderNum() {
return orderNum;
}

public void setOrderNum(String orderNum) {
this.orderNum = orderNum;
}

public String getSendName() {
return sendName;
}

public void setSendName(String sendName) {
this.sendName = sendName;
}

public String getSendMobile() {
return sendMobile;
}

public void setSendMobile(String sendMobile) {
this.sendMobile = sendMobile;
}

public String getSendCompany() {
return sendCompany;
}

public void setSendCompany(String sendCompany) {
this.sendCompany = sendCompany;
}

public Area getSendArea() {
return sendArea;
}

public void setSendArea(Area sendArea) {
this.sendArea = sendArea;
}

public String getSendAddress() {
return sendAddress;
}

public void setSendAddress(String sendAddress) {
this.sendAddress = sendAddress;
}

public String getRecName() {
return recName;
}

public void setRecName(String recName) {
this.recName = recName;
}

public String getRecMobile() {
return recMobile;
}

public void setRecMobile(String recMobile) {
this.recMobile = recMobile;
}

public String getRecCompany() {
return recCompany;
}

public void setRecCompany(String recCompany) {
this.recCompany = recCompany;
}

public Area getRecArea() {
return recArea;
}

public void setRecArea(Area recArea) {
this.recArea = recArea;
}

public String getRecAddress() {
return recAddress;
}

public void setRecAddress(String recAddress) {
this.recAddress = recAddress;
}

public String getSendProNum() {
return sendProNum;
}

public void setSendProNum(String sendProNum) {
this.sendProNum = sendProNum;
}

public String getGoodsType() {
return goodsType;
}

public void setGoodsType(String goodsType) {
this.goodsType = goodsType;
}

public String getPayTypeNum() {
return payTypeNum;
}

public void setPayTypeNum(String payTypeNum) {
this.payTypeNum = payTypeNum;
}

public Double getWeight() {
return weight;
}

public void setWeight(Double weight) {
this.weight = weight;
}

public String getRemark() {
return remark;
}

public void setRemark(String remark) {
this.remark = remark;
}

public Date getOrderTime() {
return orderTime;
}

public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}

public WayBill getWayBill() {
return wayBill;
}

public void setWayBill(WayBill wayBill) {
this.wayBill = wayBill;
}

public Set<WorkBill> getWorkBills() {
return workBills;
}

public void setWorkBills(Set<WorkBill> workBills) {
this.workBills = workBills;
}

public String getTelephone() {
return telephone;
}

public void setTelephone(String telephone) {
this.telephone = telephone;
}

public String getSendMobileMsg() {
return sendMobileMsg;
}

public void setSendMobileMsg(String sendMobileMsg) {
this.sendMobileMsg = sendMobileMsg;
}

@Override
public String toString() {
return "Order [id=" + id + ", orderNum=" + orderNum + ", telephone="
+ telephone + ", customer_id=" + customer_id + ", sendName="
+ sendName + ", sendMobile=" + sendMobile + ", sendCompany="
+ sendCompany + ", sendArea=" + sendArea + ", sendAddress="
+ sendAddress + ", recName=" + recName + ", recMobile="
+ recMobile + ", recCompany=" + recCompany + ", recArea="
+ recArea + ", recAddress=" + recAddress + ", sendProNum="
+ sendProNum + ", goodsType=" + goodsType + ", payTypeNum="
+ payTypeNum + ", weight=" + weight + ", remark=" + remark
+ ", sendMobileMsg=" + sendMobileMsg + ", orderTime="
+ orderTime + ", wayBill=" + wayBill + ", workBills="
+ workBills + "]";
}

public Courier getCourier() {
return courier;
}

public void setCourier(Courier courier) {
this.courier = courier;
}

public String getOrderType() {
return orderType;
}

public void setOrderType(String orderType) {
this.orderType = orderType;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

}


package com.itheima.bos.domain.take_delivery;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.itheima.bos.domain.base.Area;

/**
* @description:运单实体类
*/
@Entity
@Table(name = "T_WAY_BILL")
public class WayBill {

@Id
@GeneratedValue
@Column(name = "C_ID")
private Integer id;
@Column(name = "C_WAY_BILL_NUM", unique = true)
private String wayBillNum; // 运单编号
@OneToOne
@JoinColumn(name = "C_ORDER_ID")
private Order order; // 订单信息

@Column(name = "C_SEND_NAME")
private String sendName; // 寄件人姓名
@Column(name = "C_SEND_MOBILE")
private String sendMobile;// 寄件人电话
@Column(name = "C_SEND_COMPANY")
private String sendCompany;// 寄件人公司
@OneToOne
@JoinColumn(name = "C_SEND_AREA_ID")
private Area sendArea; // 寄件人省市区信息
@Column(name = "C_SEND_ADDRESS")
private String sendAddress;// 寄件人详细地址信息

@Column(name = "C_REC_NAME")
private String recName;// 收件人姓名
@Column(name = "C_REC_MOBILE")
private String recMobile;// 收件人电话
@Column(name = "C_REC_COMPANY")
private String recCompany;// 收件人公司
@OneToOne
@JoinColumn(name = "C_REC_AREA_ID")
private Area recArea; // 收件人省市区信息
@Column(name = "C_REC_ADDRESS")
private String recAddress;// 收件人详细地址信息

@Column(name = "C_SEND_PRO_NUM")
private String sendProNum; // 快递产品类型编号:速运当日、速运次日、速运隔日
@Column(name = "C_GOODS_TYPE")
private String goodsType;// 托寄物类型:文件、衣服 、食品、电子商品
@Column(name = "C_PAY_TYPE_NUM")
private String payTypeNum;// 支付类型编号:寄付日结、寄付月结、到付
@Column(name = "C_WEIGHT")
private Double weight;// 托寄物重量
@Column(name = "C_REMARK")
private String remark; // 备注
@Column(name = "C_NUM")
private Integer num; // 原件数

@Column(name = "C_ARRIVE_CITY")
private String arriveCity; // 到达地

@Column(name = "C_FEEITEMNUM")
private Integer feeitemnum; // 实际件数
@Column(name = "C_ACTLWEIT")
private Double actlweit; // 实际重量
@Column(name = "C_VOL")
private String vol; // 体积 输入格式为1*1*1*1,表示长*宽*高*数量
@Column(name = "C_FLOADREQR")
private String floadreqr; // 配载要求 (比如录入1=无,2=禁航,4=禁航空铁路)

@Column(name = "C_WAY_BILL_TYPE")
private String wayBillType; // 运单类型(类型包括:正常单据、异单、调单)
/*
* 运单状态: 1 待发货、 2 派送中、3 已签收、4 异常
*/
@Column(name = "C_SIGN_STATUS")
private Integer signStatus; // 签收状态

/*

11a1c
* 1、新增修改单据状态为“否” 2、作废时需将状态置为“是” 3、取消作废时需要将状态置为“否”
*/
@Column(name = "C_DELTAG")
private String delTag; // 作废标志

public String getArriveCity() {
return arriveCity;
}

public void setArriveCity(String arriveCity) {
this.arriveCity = arriveCity;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getWayBillNum() {
return wayBillNum;
}

public void setWayBillNum(String wayBillNum) {
this.wayBillNum = wayBillNum;
}

public Order getOrder() {
return order;
}

public void setOrder(Order order) {
this.order = order;
}

public String getSendName() {
return sendName;
}

public void setSendName(String sendName) {
this.sendName = sendName;
}

public String getSendMobile() {
return sendMobile;
}

public void setSendMobile(String sendMobile) {
this.sendMobile = sendMobile;
}

public String getSendCompany() {
return sendCompany;
}

public void setSendCompany(String sendCompany) {
this.sendCompany = sendCompany;
}

public Area getSendArea() {
return sendArea;
}

public void setSendArea(Area sendArea) {
this.sendArea = sendArea;
}

public String getSendAddress() {
return sendAddress;
}

public void setSendAddress(String sendAddress) {
this.sendAddress = sendAddress;
}

public String getRecName() {
return recName;
}

public void setRecName(String recName) {
this.recName = recName;
}

public String getRecMobile() {
return recMobile;
}

public void setRecMobile(String recMobile) {
this.recMobile = recMobile;
}

public String getRecCompany() {
return recCompany;
}

public void setRecCompany(String recCompany) {
this.recCompany = recCompany;
}

public Area getRecArea() {
return recArea;
}

public void setRecArea(Area recArea) {
this.recArea = recArea;
}

public String getRecAddress() {
return recAddress;
}

public void setRecAddress(String recAddress) {
this.recAddress = recAddress;
}

public String getSendProNum() {
return sendProNum;
}

public void setSendProNum(String sendProNum) {
this.sendProNum = sendProNum;
}

public String getGoodsType() {
return goodsType;
}

public void setGoodsType(String goodsType) {
this.goodsType = goodsType;
}

public String getPayTypeNum() {
return payTypeNum;
}

public void setPayTypeNum(String payTypeNum) {
this.payTypeNum = payTypeNum;
}

public Double getWeight() {
return weight;
}

public void setWeight(Double weight) {
this.weight = weight;
}

public String getRemark() {
return remark;
}

public void setRemark(String remark) {
this.remark = remark;
}

public Integer getNum() {
return num;
}

public void setNum(Integer num) {
this.num = num;
}

public Integer getFeeitemnum() {
return feeitemnum;
}

public void setFeeitemnum(Integer feeitemnum) {
this.feeitemnum = feeitemnum;
}

public Double getActlweit() {
return actlweit;
}

public void setActlweit(Double actlweit) {
this.actlweit = actlweit;
}

public String getVol() {
return vol;
}

public void setVol(String vol) {
this.vol = vol;
}

public String getFloadreqr() {
return floadreqr;
}

public void setFloadreqr(String floadreqr) {
this.floadreqr = floadreqr;
}

public String getWayBillType() {
return wayBillType;
}

public void setWayBillType(String wayBillType) {
this.wayBillType = wayBillType;
}

public Integer getSignStatus() {
return signStatus;
}

public void setSignStatus(Integer signStatus) {
this.signStatus = signStatus;
}

public String getDelTag() {
return delTag;
}

public void setDelTag(String delTag) {
this.delTag = delTag;
}

}


package com.itheima.bos.domain.take_delivery;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.itheima.bos.domain.base.Courier;

/**
* @description:工单
*/
@Entity
@Table(name = "T_WORK_BILL")
public class WorkBill {
@Id
@GeneratedValue
@Column(name = "C_ID")
private Integer id; // 主键
@Column(name = "C_TYPE")
private String type; // 工单类型 新,追,销
/*
* 新单:没有确认货物状态的 已通知:自动下单下发短信 已确认:接到短信,回复收信确认信息 已取件:已经取件成功,发回确认信息 生成工作单
* 已取消:销单
*
*/
@Column(name = "C_PICKSTATE")
private String pickstate; // 取件状态
@Column(name = "C_BUILDTIME")
private Date buildtime; // 工单生成时间
@Column(name = "C_ATTACHBILLTIMES")
private Integer attachbilltimes; // 追单次数
@Column(name = "C_REMARK")
private String remark; // 订单备注
@Column(name = "C_SMSNUMBER")
private String smsNumber; // 短信序号

@OneToOne
@JoinColumn(name = "C_COURIER")
private Courier courier;// 快递员

@ManyToOne
@JoinColumn(name = "C_ORDER_ID")
private Order order; // 订单

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getPickstate() {
return pickstate;
}

public void setPickstate(String pickstate) {
this.pickstate = pickstate;
}

public Date getBuildtime() {
return buildtime;
}

public void setBuildtime(Date buildtime) {
this.buildtime = buildtime;
}

public Integer getAttachbilltimes() {
return attachbilltimes;
}

public void setAttachbilltimes(Integer attachbilltimes) {
this.attachbilltimes = attachbilltimes;
}

public String getRemark() {
return remark;
}

public void setRemark(String remark) {
this.remark = remark;
}

public String getSmsNumber() {
return smsNumber;
}

public void setSmsNumber(String smsNumber) {
this.smsNumber = smsNumber;
}

public Courier getCourier() {
return courier;
}

public void setCourier(Courier courier) {
this.courier = courier;
}

public Order getOrder() {
return order;
}

public void setOrder(Order order) {
this.order = order;
}

}


2、启动项目,自动建表



二、客户在线下单功能

1、在线下单页面 -- order.html



2、基于百度地图实现客户下单页面详细地址自动补全

(1)、导入百度地图的js资源文件

<script type="text/javascript"
src="http://api.map.baidu.com/api?v=2.0&ak=4IU3oIAMpZhfWZsMu7xzqBBAf6vMHcoa">
</script>


(2)、在页面中提供input输入框,并编写js代码

<input name="sendAddress" id="sendAddress" type="text" class="form-control"
placeholder="街道详细(精确到门牌号) " required="required">
<!-- 使用百度地图api实现自动补全功能 -->
<script type="text/javascript">
$(function(){
//使用百度地图的自动补全控件
var ac = new BMap.Autocomplete({
input:"sendAddress"
});
});
</script>




(3)、页面实现的效果



3、省市区三级联动效果实现

(1)、引入city-picker相关的资源文件



(2)、使用data-toggle方式实现三级联动的html页面代码



4、给页面的提交按钮绑定点击事件



5、编写后台Dao层代码

(1)、orderDao



package com.itheima.bos.dao.take_delivery;

import org.springframework.data.jpa.repository.JpaRepository;

import com.itheima.bos.domain.take_delivery.Order;

public interface OrderDao extends JpaRepository<Order, Integer> {

}


(2)、扩展AreaDao中的方法

//根据省市地区获取区域对象
public Area findByProvinceAndCityAndDistrict(String province, String city, String district);


(3)、扩展CRM系统中的CustomerDao中的方法

/**
* 根据客户住址查询定区id
* @param telephone
* @param password
* @return
*/
@Query("select fixedAreaId from Customer where address = ?")
public String findFixedAreaIdByAddress(String address);


(4)、编写WorkBillDao接口



package com.itheima.bos.dao.take_delivery;

import org.springframework.data.jpa.repository.JpaRepository;

import com.itheima.bos.domain.take_delivery.WorkBill;

public interface WorkBillDao extends JpaRepository<WorkBill, Integer> {

}


6、编写后台bos_management_service系统中Service层发布服务的代码

(1)、扩展CRM系统中的service方法

接口:

/**
* 根据客户住址查询定区id
* @param telephone
* @param password
* @return
*/
public String findFixedAreaIdByAddress(String address);


实现类:

/**
* 根据客户住址查询定区id
* @param telephone
* @param password
* @return
*/
public String findFixedAreaIdByAddress(String address) {
return dao.findFixedAreaIdByAddress(address);
}


(2)、创建订单接口和实现类



(3)、OrderService接口

package com.itheima.bos.service.take_delivery;

import javax.jws.WebService;

import com.itheima.bos.domain.take_delivery.Order;

@WebService
public interface OrderService {

/**
* 保存订单,实现自动分单的功能
* @param order
*/
public void saveOrder(Order order);
}


(4)、OrderServiceImpl实现类

package com.itheima.bos.service.take_delivery.impl;

import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import java.util.UUID;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.itheima.bos.dao.base.AreaDao;
import com.itheima.bos.dao.base.FixedAreaDao;
import com.itheima.bos.dao.take_delivery.OrderDao;
import com.itheima.bos.dao.take_delivery.WorkBillDao;
import com.itheima.bos.domain.base.Area;
import com.itheima.bos.domain.base.Courier;
import com.itheima.bos.domain.base.FixedArea;
import com.itheima.bos.domain.base.SubArea;
import com.itheima.bos.domain.take_delivery.Order;
import com.itheima.bos.domain.take_delivery.WorkBill;
import com.itheima.bos.service.take_delivery.OrderService;
import com.itheima.crm.service.CustomerService;

/**
* 订单管理的服务层实现类
* @author Administrator
*
*/
@Service
@Transactional
public class OrderServiceImpl implements OrderService {

@Autowired
private OrderDao orderDao;

@Autowired
private AreaDao areaDao;

@Autowired
private CustomerService crmProxy;

@Autowired
private FixedAreaDao fixedAreaDao;

@Autowired
private WorkBillDao workBillDao;
/**
* 保存订单,实现自动分单的功能
* @param order
*/
public void saveOrder(Order order) {
//1、根据订单中区域信息(省市地区)查询数据库,获取持久态区域对象
Area sendArea = order.getSendArea();
Area recArea = order.getRecArea();
//查询发件人地址
if(sendArea != null){
Area osendArea = areaDao.findByProvinceAndCityAndDistrict(sendArea.getProvince(),sendArea.getCity(),sendArea.getDistrict());
order.setSendArea(osendArea);
}
//查询收件人地址
if(recArea != null){
Area orecArea = areaDao.findByProvinceAndCityAndDistrict(recArea.getProvince(), recArea.getCity(), recArea.getDistrict());
order.setRecArea(orecArea);
}
//2、保存订单信息
order.setOrderTime(new Date());
order.setOrderNum(UUID.randomUUID().toString());
orderDao.save(order);

//3、基于CRM地址库完全匹配法实现自动分单
if(StringUtils.isNotBlank(order.getSendAddress())){
//根据发件人地址获取定区id
String fixedAreaId = crmProxy.findFixedAreaIdByAddress(order.getSendAddress());
if(fixedAreaId != null){
//根据定区id获取定区对象
FixedArea fixedArea = fixedAreaDao.findOne(fixedAreaId);
Set<Courier> couriers = fixedArea.getCouriers();//获取定区关联的快递员集合
Iterator<Courier> iterator = couriers.iterator();
if(iterator.hasNext()){
//查询到定区id,可以完成自动分单
order.setOrderType("自动分单");//设置分单类型
Courier courier = iterator.next();
order.setCourier(courier);
//为快递员生成一个工单
WorkBill workBill = new WorkBill();
workBill.setAttachbilltimes(0);
workBill.setBuildtime(new Date());
workBill.setCourier(courier);
workBill.setOrder(order);
workBill.setPickstate("新单");
workBill.setRemark(order.getRemark());
workBill.setSmsNumber("123");
workBill.setType("新");
//保存工单
workBillDao.save(workBill);
//调用短信平台,为快递员发送短信 -- 略
// TODO
return; //如果基于CRM地址库实现自动分单成立,则直接退出方法
}
}
}
//4、如果基于CRM地址库分区实现自动分单不成立,则进行基于分区关键字匹配法实现自动分单
if(order.getSendArea() != null){
//获得指定区域中包含的所有分区
Set<SubArea> subareas = order.getSendArea().getSubareas();
for (SubArea subArea : subareas) {
String keyWords = subArea.getKeyWords();//获取分区关键字
String assistKeyWords = subArea.getAssistKeyWords();//获取辅助关键字
if(order.getSendAddress().contains(keyWords) || order.getSendAddress().contains(assistKeyWords)){
//用户输入的地址,在指定分区内,根据分区,获取当前分区内的定区
FixedArea fixedArea = subArea.getFixedArea();
//根据定区找到当前定区中的快递员
Set<Courier> couriers = fixedArea.getCouriers();
Iterator<Courier> iterator = couriers.iterator();
if(iterator.hasNext()){
//查询到定区id,可以完成自动分单
order.setOrderType("自动分单");//设置分单类型
Courier courier = iterator.next();
order.setCourier(courier);
//为快递员生成一个工单
WorkBill workBill = new WorkBill();
workBill.setAttachbilltimes(0);
workBill.setBuildtime(new Date());
workBill.setCourier(courier);
workBill.setOrder(order);
workBill.setPickstate("新单");
workBill.setRemark(order.getRemark());
workBill.setSmsNumber("123");
workBill.setType("新");
//保存工单
workBillDao.save(workBill);
//调用短信平台,为快递员发送短信 -- 略
// TODO
return; //如果基于CRM地址库实现自动分单成立,则直接退出方法
}
}

}
}

//5、如果以上两种方式都没有完成自动分单,转入人工调整
order.setOrderType("人工分单");

}

}


7、在后台项目bos_web中编写发布webService服务的配置

(1)、在web.xml中配置CXFServlet



(2)、在spring的核心配置文件中引入约束,并配置注册服务

<!-- 注册订单服务 -->
<jaxws:server id="orderService" address="/order">
<jaxws:serviceBean>
<ref bean="orderServiceImpl" />
</jaxws:serviceBean>
</jaxws:server>


8、生成CRM服务系统的客户端代码以及bos_management_web服务的客户端代码

9、前台系统中编写OrderAction中添加订单的方法

(1)、依赖domain项目

(2)、导入生成的订单服务代码并注册订单服务的客户端配置



<!-- 注册订单服务的客户端代理对象,用于通过WebService访问订单服务 -->
<jaxws:client id="orderClient" address="http://localhost:8080/bos_management_web/service/order"
serviceClass="com.itheima.bos_fore.service.OrderService">
</jaxws:client>


(3)、编写OrderAciton

package com.itheima.bos_fore.action.take_delivery;

import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.itheima.bos.domain.base.Area;
import com.itheima.bos.domain.take_delivery.Order;
import com.itheima.bos_fore.service.OrderService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
* 订单业务的动作类
*
* @author Administrator
*
*/
@Controller
@Namespace("/")
@ParentPackage("struts-default")
@Scope("prototype")
public class OrderAction extends ActionSupport implements ModelDriven<Order> {

private Order model = new Order();

public Order getModel() {
return model;
}

// 属性驱动,封装页面传递的发件人和收件人的地址信息
private String recAreaInfo;
private String sendAreaInfo;

public void setRecAreaInfo(String recAreaInfo) {
this.recAreaInfo = recAreaInfo;
}

public void setSendAreaInfo(String sendAreaInfo) {
this.sendAreaInfo = sendAreaInfo;
}

// 注入订单服务的代理对象
@Autowired
private OrderService orderProxy;

/**
* 保存订单,并实现自动分单功能
*/
@Action(value = "orderAction_add", results = { @Result(name = "success", type = "redirect", location = "/order-success.html") })
public String add() {
// 封装寄件人信息到model对象中
if (StringUtils.isNotBlank(sendAreaInfo)) {
String[] info = sendAreaInfo.split("/");
String province = info[0];
String city = info[1];
String district = info[2];
// 封装寄件人地址信息
Area sendArea = new Area();
sendArea.setProvince(province);
sendArea.setCity(city);
sendArea.setDistrict(district);
model.setSendArea(sendArea);
}

// 封装收件人信息到model对象中
if (StringUtils.isNotBlank(recAreaInfo)) {
String[] info = recAreaInfo.split("/");
String province = info[0];
String city = info[1];
String district = info[2];
// 封装寄件人地址信息
Area recArea = new Area();
recArea.setProvince(province);
recArea.setCity(city);
recArea.setDistrict(district);
model.setRecArea(recArea);
}

// 通过webService调用后台系统,保存订单信息
orderProxy.saveOrder(model);
return SUCCESS;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐