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

来源:互联网 发布:c语言 延时 linux 编辑:程序博客网 时间:2024/05/21 09:51
本文将对核心业务流程进行分析,并讨论其实现。
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.用户评价与分享

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


原创粉丝点击