文档章节

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

 手指点点-千寻
发布于 2017/06/03 13:37
字数 995
阅读 5
收藏 0
点赞 0
评论 0

本文将对核心业务流程进行分析,并讨论其实现。
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
博文 14
码字总数 9640
作品 0
济南
哈尔滨大数据培训课程哪个好?从内容教你如何判断

导读 随着大数据飞速发展,大数据将对人类生活产生深远影响,大数据是未来科技浪潮发展不容忽视的巨大推动力量,加上人工智能对大数据技术的需要,使越来越多的人想要从事大数据,但却不知道哈...

hxl0009 ⋅ 04/16 ⋅ 0

翻译:1.1. What is jBPM?

小弟不才。刚刚开始学习jBPM。翻译的水平也不佳。欢迎指正,共同学习。 原文地址 jBPM是一套使用java开发出的灵活的,轻量级的,完全开源的业务流程管理组件。在业务流程的整个生命周期中,你...

李渊 ⋅ 2012/03/08 ⋅ 4

Struts2面试题

一、用自己的话简要阐述struts2的执行流程。 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatc...

序写人生 ⋅ 2010/06/13 ⋅ 0

系统架构师-基础到企业应用架构-业务逻辑层

一、上章回顾 上章我们主要讲述了系统设计规范与原则中的具体原则与规范及如何实现满足规范的设计,我们也讲述了通过分离功能点的方式来实现,而在软件开发过程中的具 体实现方式简单的分为面...

wbf961127 ⋅ 2017/11/12 ⋅ 0

iweb WorkFlow

iweb WorkFlow基于j2ee平台开发,采用先进的可嵌入(Plug-in or Embeddable)的构件化设计模式,可方便的构筑基于流程管理的协同协作信息平台以及其他协同化应用产品,也可与其他现有应用系统...

iwebax ⋅ 2010/06/04 ⋅ 0

高职计算机网络应用赛项总结会召开,锐捷网络全力推进赛项资源转化计划

近日,由全国工业和信息化职业教育教学指导委员会主办,福建信息职业技术学院承办的计算机网络技术专业建设与教学改革研讨会在福州召开。会议旨在探讨面对大互联、大数据、大安全带来的产业和...

玄学酱 ⋅ 03/27 ⋅ 0

WPF企业内训全程实录(下)

摘要 WPF企业内训全程实录由于文章比较长,所以一共拆分成了三篇,上篇WPF企业内训全程实录(上)主要讲了基础,中篇WPF企业内训全程实录(中)主要讲解开发模式、团队协作及应用框架,起着承上...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

WPF企业内训全程实录(下)

摘要 WPF企业内训全程实录由于文章比较长,所以一共拆分成了三篇,上篇WPF企业内训全程实录(上)主要讲了基础,中篇WPF企业内训全程实录(中)主要讲解开发模式、团队协作及应用框架,起着承上...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

OSC 大咖说 | 专访 cSphere 希云创始人王利俊:Docker 的企业落地之路

不知道有多少OSCer还有印象,去年6月份,开源中国社区曾参与组织了3次以Docker为主题的实训课程,手把手的实操培训,吸引了将近4000余人次报名学习。这个系列实训课程的另一个重要组织者,师...

花仲马 ⋅ 2016/05/06 ⋅ 0

Struts2基本原理

阐述struts2的执行流程。 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。 核心控制器FilterDispatcher是Struts 2框架的...

感觉太煽情 ⋅ 2015/03/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部