项目6_ssh_bos_day9

业务受理需求分析

客户通过打电话方式进行物流委托,物流公司的客服人员需要将委托信息录入到BOS系统中,这个录入的信息称为业务通知单

当客服人员将业务通知单信息录入到系统后,系统会根据客户的住址自动匹配到一个取派员,并为这个取派员产生一个任务,这个任务就称为工单

取派员收到取货任务后,会到客户住址取货,取派员会让客户填写纸质的单子(寄件人信息、收件人信息等),取派员将货物取回物流公司网点后,需要将纸质单子上的信息录入到BOS系统中,录入的信息称为工作单

注意:通过pdm生成的数据表的外键要手动添加才行

qp_noticebill业务通知单:有两个外键,一个是user_id,一个是staff_id  对应多个工单
qp_workbill工单:有两个外键,一个是staff_id,一个是noticebill_id
qp_workordermanage工作单:没有外键

在实体类里面定义常量便于后期维护

/**
 * 业务通知单
 */
public class Noticebill implements java.io.Serializable {
	private String id;
	private User user;
	private Staff staff;
	private String customerId;
	private String customerName;
	private String delegater;
	private String telephone;
	private String pickaddress;
	private String arrivecity;
	private String product;
	private Date pickdate;
	private Integer num;
	private Double weight;
	private String volume;
	private String remark;
	private String ordertype;//分单类型:自动分单、人工分单
	private Set workbills = new HashSet(0);

	public static final String  ORDERTYPE_AUTO = "自动分单";
	public static final String  ORDERTYPE_MAN = "人工分单";
}
/**
 * 工单
 */
public class Workbill implements java.io.Serializable {
	private String id;
	private Noticebill noticebill;
	private Staff staff;
	private String type;//工单类型:新、追、改、销
	private String pickstate;//取件状态:未取件、取件中、已取件
	private Timestamp buildtime;
	private Integer attachbilltimes;
	private String remark;

	public static final String  TYPE_1 = "新单";
	public static final String  TYPE_2 = "追单";
	public static final String  TYPE_3 = "改单";
	public static final String  TYPE_4 = "销单";
	
	public static final String  PICKSTATE_NO = "未取件";
	public static final String  PICKSTATE_RUNNING = "取件中";
	public static final String  PICKSTATE_YES = "已取件";
}
/**
 * 工作单
 */
public class Workordermanage implements java.io.Serializable {
	private String id;
	private String arrivecity;
	private String product;
	private Integer num;
	private Double weight;
	private String floadreqr;
	private String prodtimelimit;
	private String prodtype;
	private String sendername;
	private String senderphone;
	private String senderaddr;
	private String receivername;
	private String receiverphone;
	private String receiveraddr;
	private Integer feeitemnum;
	private Double actlweit;
	private String vol;
	private String managerCheck;
	private Date updatetime;
}

业务受理自动分单

在crm服务中扩展方法
根据客户的手机号查询客户信息(当输入客户的手机号后,光标离开,失去焦点,客户信息就要回显出来)


根据客户的取件地址查询定区id(知道定区id那么就知道是哪个取派员负责的)

第一步:为手机号输入框绑定离焦事件

<td>来电号码:</td>
<td><input type="text" class="easyui-validatebox" name="telephone" id="telephone"
	required="true" /></td>
<script>
	$(function(){
		$("#telephone").blur(function(){
			var telephone=$("#telephone").val();
			var url="noticebillAction_findCustomerByTelephone.action";
			$.post(url,{"telephone":telephone},function(data){
				if(data != null){
					//查询到了客户信息,可以进行页面回显
					var customerId = data.id;
					var customerName = data.name;
					var address = data.address;
					var pickaddress = data.address;
					$("#customerId").val(customerId);
					$("#customerName").val(customerName);
					$("#delegater").val(customerName);
					$("#pickaddress").val(pickaddress);
				}else{
					//没有查询到客户信息,不能进行页面回显
					$("#customerId").val("");
					$("#customerName").val("");
					$("#delegater").val("");
					$("#pickaddress").val("");
				}
			},"json");
		});
	});
</script>

第二步:创建NoticebillAction,注入crm代理对象,提供方法根据手机号查询客户信息,返回json(注意:配置struts.xml)

@Controller
@Scope("prototype")
/**
 * 业务通知单
 */
public class NoticebillAction extends BaseAction<Noticebill> {
	@Autowired
	private CustomerService proxy;
	
	/**
	 * 远程调用crm服务,根据手机号查询用户信息
	 */
	public String findCustomerByTelephone(){
		String telephone=model.getTelephone();
		Customer customer = proxy.findCustomerByTelephone(telephone);
		this.java2Json(customer, new String[]{});
		return NONE;
	}

}

将页面的非空校验去掉(只有来电号码和取件地址需要非空校验,别的都去掉)

第三步:为页面中“新单”按钮绑定事件

在NoticebillAction中提供方法实现业务受理自动分单

@Service
@Transactional
public class NoticebillServiceImpl implements INoticebillService {

	@Autowired
	private INoticebillDao noticebillDao;
	@Autowired
	private CustomerService proxy;
	@Autowired
	private IDecidedzoneDao decidedzoneDao;
	@Autowired
	private IWorkbillDao workbillDao;
	/**
	 * 保存业务通知单,并尝试自动分单
	 * 业务通知单先保存,然后在修改
	 * 工单就是保存
	 */
	public void save(Noticebill model) {
		User user = BOSUtils.getUser();
		model.setUser(user);//设置当前登录用户
		noticebillDao.save(model);
		//获取客户的取件地址
		String pickaddress = model.getPickaddress();
		//远程调用crm服务,根据取件地址查询定区id
		String decidedzoneId = proxy.getDecidedzoneIdByAddress(pickaddress);
		if(decidedzoneId != null){
			//查询到了定区id,可以完成自动分单
			Decidedzone decidedzone = decidedzoneDao.findById(decidedzoneId);
			Staff staff = decidedzone.getStaff();
			model.setStaff(staff);//业务通知单关联取派员对象
			//设置分单类型为:自动分单
			model.setOrdertype(Noticebill.ORDERTYPE_AUTO);
			//为取派员产生一个工单
			Workbill workbill = new Workbill();
			workbill.setAttachbilltimes(0);//追单次数
			workbill.setBuildtime(new Timestamp(System.currentTimeMillis()));//创建时间,当前系统时间
			workbill.setNoticebill(model);//工单关联页面通知单
			workbill.setPickstate(Workbill.PICKSTATE_NO);//取件状态
			workbill.setRemark(model.getRemark());//备注信息
			workbill.setStaff(staff);//工单关联取派员
			workbill.setType(Workbill.TYPE_1);//工单类型
			workbillDao.save(workbill);
			//调用短信平台,发送短信
		}else{
			//没有查询到定区id,不能完成自动分单
			model.setOrdertype(Noticebill.ORDERTYPE_MAN);
		}
	}
}

new Timestamp(System.currentTimeMillis())
因为workbill的字段类型是timestamp,
和Date的区别就是精确到了时分秒

不能完成自动分单
不考虑crm系统中手机号码不存在那种情况(需要去crm中插入一条数据)
手机号码还是在crm中,但是这个手机号没有关联到定区(以后有空来实现这个功能)

最终效果就是,像业务通知单插入一条数据,并且分单类型为人工分单,没有像工单表插入数据

如果是人工分单,接下来程序如何处理,通过人工调度来完成此功能(页面显示的是没有完成自动分单的业务通知单的数据)

datagrid编辑功能使用方式

数据表格编辑功能是以为单位。
通过数据表格中的列属性定区具体那一列具有编辑功能:

numberbox:输入的数字

datebox:日期

开始编辑:

结束编辑:

插入一行数据:

删除一行:

获得指定行对象的索引

数据表格提供的用于监听结束编辑事件:

可以编辑的代码

后端开发,结束以后做什么事
发送一个ajax请求,将data提交服务器,修改服务器即可。

将页面调整为选中哪一行,就操作哪一行的增删改查

注意:点击删除的时候,不触发onAfterEdit方法,因此需要在删除里面在发送一个ajax请求

添加

修改:

删除:

基于数据表格编辑功能实现工作单快速录入

如何实现非空校验:

写对应的Action service dao

@Controller
@Scope("prototype")
public class WorkordermanageAction extends BaseAction<Workordermanage> {
	@Autowired
	private IWorkordermanageService workordermanageService;
	
	//这里写try{}catch(){}原因是工作单号有可能输入相同,就会保存失败
	public String add() throws IOException{
		String f="1";
		try {
			workordermanageService.save(model);
		} catch (Exception e) {
			f="0";
		}
		ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
		ServletActionContext.getResponse().getWriter().print(f);
		return NONE;
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guoyebing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值