项目实训-千寻-核心业务逻辑_业务流程处理

本文将对核心业务流程进行分析,并讨论其实现。
1.业务流程分析
业务流程其实类似于淘宝的订单,逻辑上虽然比较容易理解,但是中间涉及多次相互确认,使得整个业务逻辑的处理变得相对麻烦起来。
-->发单者发布需求
-->接单者承接需求
-->发单者筛选并确定人选
-->接单者确认并开始执行任务
-->接单者完成任务并提交
-->发单者确认任务完成并给予酬劳
-->双方互评并可选择分享


2.用户接单请求
上一次已经把附近的需求显示出来了,这一次继续流程上的处理。关于接单,在接口上主要是接单请求的发送,如下:
// 报名
public String signUp() {
	String result = "failed";
	Object user = session.get("user");
	System.out.println("user is " + user);
	if (user == null) {
		result = "-6";// 未登录
		System.out.println("signUp-result:" + result);
		inputStream = MsgUtil.sendString(result);
		return SUCCESS;
	}
	JSONObject js = JSONObject.fromObject(jsonObj);
	String name = js.getString("username");
	String requestId = js.getString("requestId");
	System.out.println("signUp-jsonObj:" + jsonObj);
	int status = -1;
	List<User> list = null;
	try {
		int userReqeustId = Integer.parseInt(requestId);
		long username = Long.parseLong(name);
		UserRequest userRequest = userRequestService.getUserRequestById(userReqeustId);
		if (userRequest.getUser().getUsername() == username) {
			status = -4;// 不能自己报自己的名!
		} else {
			list = userRequestService.getReceiversByReqId(userReqeustId);
			boolean flag = false;
			for (User u : list) {
				System.out.println(u.getUsername() + "," + u.getId());
				if (u.getUsername() == username) {
					flag = true;
					break;
				}
			}
			if (flag) {// 如果已经报名
				status = -3;
			} else {
				if (list.size() < 8) {
					// 能报名,则保存
					UserRequest ur = userRequestService.getUserRequestById(userReqeustId);
					Set<User> receivers = ur.getReceivers();
					System.out.println("r1:" + receivers.size());
					User u = userService.findByUsername(username);
					receivers.add(u);
					Set<UserRequest> receivedRequests = u.getReceivedRequest();
					receivedRequests.add(ur);
					ur.setReceivers(receivers);
					u.setReceivedRequest(receivedRequests);
					System.out.println("r2:" + ur.getReceivers().size());
					userRequestService.update(ur);
					userService.update(u);
					list.add(u);
					try {
						// 发推送
						String context = "[需求报名]您发的需求有人报名!点击查看";
						String detail = "[需求报名]您的需求"
								+ (userRequest.getRequest_content().length() > 6 ? userRequest.getRequest_content()
										.substring(0, 6) : userRequest.getRequest_content()) + "...有用户 "
								+ u.getNickName() + "报名了!";
						BaiChuanUtils.pushJson(ur.getUser().getId(), BaiChuanUtils.MY_REQUEST, context, detail);
					} catch (Exception e) {
						e.printStackTrace();
					}
					status = 1;
				}
			}
		}
	} catch (Exception e) {
		status = -2;
		list = null;
		e.printStackTrace();
	}
	JSONObject jsResp = new JSONObject();
	JsonConfig jsonConfig = new JsonConfig();
	jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
	jsonConfig.setExcludes(new String[] { "receivedRequest", "concernedPeople", "todoRequest", "userRequest",
			"userComment", "favoriteServices", "services" });
	JSONArray listJs = JSONArray.fromObject(list, jsonConfig);
	jsResp.put("status", status);
	jsResp.put("list", listJs);
	result = jsResp.toString();
	System.out.println("signUp-result:" + result);
	inputStream = MsgUtil.sendString(result);
	return SUCCESS;
}


3.发单者筛选确定人选
多人报名时,需要发单者确定最佳人选。此时,发单者需要在显示的报名者中,选出一人执行任务。
public String takeOrder() {
	String result = "failed";
	int status = -1;
	Object user = session.get("user");
	System.out.println("user is " + user);
	if (user == null) {
		result = "-6";// 未登录
		System.out.println("reminder-result:" + result);
		inputStream = MsgUtil.sendString(result);
		return SUCCESS;
	}
	System.out.println("takeOrder-username:" + username);
	System.out.println("takeOrder-requestId:" + requestId);
	long username = Long.parseLong(this.username);
	int requestId = Integer.parseInt(this.requestId);
	UserRequest userRequest = userRequestService.getUserRequestById(requestId);
	if (userRequest.getFinalReceiver() != null) {
		status = -3; // 已经有人接单
	} else {
		try {
			if (username == userRequest.getUser().getUsername()) {
				status = -4;// 不能自己接自己的单!
			} else {
				User finalReceiver = userService.findByUsername(username);
				userRequest.setFinalReceiver(finalReceiver);
				userRequest.setStatus(1);
				userRequestService.update(userRequest);
				status = 1;
				try {
					// 给那些已经报名但是没选为接单的用户发推送。
					String context = "[接单啦]恭喜!需求方已选择您接单!点击查看!";
					String detail = "[接单啦]恭喜!需求方已选择您接 " + userRequest.getRequest_content().substring(0, 6)
							+ "...这个单子,赶紧去查看详情吧!";
					BaiChuanUtils.pushJson(finalReceiver.getId(), BaiChuanUtils.HIS_REQUEST, context, detail);
					List<User> list = userRequestService.getReceiversByReqId(requestId);
					for (User u : list) {
						if (u.getUsername() != username) {
							context = "[接单失败]亲,橙子" + userRequest.getUser().getNickName() + "...已被他人接单,点击查看详情";
							detail = "[接单失败]亲,需求"
									+ (userRequest.getRequest_content().length() > 6 ? userRequest
											.getRequest_content().substring(0, 6) : userRequest
											.getRequest_content()) + "...已被他人接单,赶快去寻找其他订单吧";
							BaiChuanUtils.pushJson(u.getId(), BaiChuanUtils.HIS_REQUEST, context, detail);
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}


			}
		} catch (Exception e) {
			status = -2;
			e.printStackTrace();
		}
	}
	result = status + "";
	System.out.println("takeOrder-result:" + result);
	inputStream = MsgUtil.sendString(result);
	return SUCCESS;
}


4.接单者完成任务并接受验收
确定人选后,接单者将会去完成该任务,与此同时,两者可以通过即时通讯功能进行聊天,并且可以相互发送位置便于确认。本来我们想实时共享双方的位置,但是后来考虑到双方的隐私,就放弃了这个想法。
接单者完成任务后,就可以提交任务,设置任务为完成状态了。


5.用户评价与分享

任务完成了,怎么也少不了评价与分享。这就是用户晒单。用户可以分享自己的订单到我们的宣传,去为自己积累“赞”。至此,整套业务流程就圆满完成了。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值