App开发——核心功能——订单的显示与接收

接着之前的思路:

4.前面从数据库获取数据也是根据登录界面传进来的 phone 来显示的而不是都显示,具体是获取传来的 phone 到员工订单表中找到订单号,然后根据订单号去订单表中检索数据并显示(链表查询?想好用什么查询方法),显示该订单的所有员工可以在员工订单表中删选出所有与该订单号相同的人员来显示。

5.员工来到订单界面,该界面初始化时就获取数据库数据,员工点击待接受任务按钮(将获取的 phone 传进下一个界面),跳转界面(获取 phone ),(根据 phone 在员工订单表中检索出订单号和订单状态(状态是用来判断并提示订单状态和显示,比如检测到最新的订单的状态为wait, 那就显示订单详情(通过不同情况来设定不同布局来实现),按钮什么的,若状态为 accept 就显示....))显示任务详情(界面要设计好,内容包括订单表的内容和相关的所有员工及状态(wait等等不过是汉字)),人员有1.2.3.4....顺序,顺序就是发布任务选择员工的顺序(刚读取的数据)下面有两个按钮接受任务和刷新界面,点击接受任务后分别会上传接受状态到员工订单表,toast您已接收订单。设有更新界面的按钮,点击会刷新数据,并统计员工订单表的员工数和订单状态为 accept 的数,若相等则 toast,已全部接受,订单开始加工,并跳转到进行中页面,相应的信息还是显示,不过,每个员工对应的是:待提交,已提交。设有选择文件按钮(选择文件按钮点击时会检测前面人的状态,若前面的人没有提交则会提示请等待前面的人完成后再提交),点击后弹窗,标题为请选择照片来源,按钮有取消,从相册中选取,和拍照,这两个功能到时候再说,选择好后,将缩略图显示在界面,点击提交按钮会将图片上传至云端的一个文件夹,点击提交时会检测是否已经选择图片

6.发布者进入的进行中的订单界面和普通员工不一样,前者有查看提交的图片和评分的控件以及结束订单的按钮,而后者没有,评价的前提是员工已提交,评价时携带身份信息,即手机号要和发布者一致,否则提示没有评价权限,对所有员工评分完成后,需要手动结束订单,此时弹出对话框,是否结束订单...取消或者确定,确定后会 toast 订单已更新到已完成

积分表的设计...发布者评价后会及时更新员工积分表的数据(当日累加)具体的如何每日清零等做到再说

7.已完成界面,有订单号零件名数量发布者,点击会跳转到详情界面,具体的方法时在 itemclick 事件中 根据当初传来的订单号去员工订单表中检索出所有的员工来显示,其他信息使用订单号在订单表中检索即可


 分隔线


思考相关员工的待接受订单的设计与显示
需要了解一下这个用来保存activity的数据吗:onSaveInstanceState和onRestoreInstanceState?

除了相关员工外,发布者的待接受界面也有数据,发布者的界面好做,在发布按钮点击之后,发布成功跳转界面时,可以将 phone 传递出去,在待接受界面可以执行 displayOrderServlet 类似订单表插入数据的方式,拿着phone去...

设计员工接收订单界面:

判断写在 AcceptOrderWhetherDisplayServlet 中,根据不同的返回值,客户端做出不同的反应

进入界面时,根据传来的 phone 去,分配表中检索, order_state = '进行中',则使界面的layout不显示,即隐藏,只显示另一层有文字的“没有待接收订单”, toast 订单进行中请到进行中查看

else ......‘已完成’,toast 订单已完成,请等待新订单,(PS:感觉员工的新建订单按钮也可以隐藏),若订单状态为 待接收则 界面不隐藏,界面如下

判断好了的显示ServletAcceptOrderDisplayServlet.java


订单号:通过 phone 去分配表中检索,可以借鉴,之前的通过 phone 检索 name

零件名:利用上面获取的订单号,去订单表中检索出零件名零件数量和发布者

零件数量:利用上面获取的订单号,去订单表中检索出零件名零件数量和发布者

发布者:利用上面获取的订单号,去订单表中检索出零件名零件数量和发布者

分配员工:应该返回JSON类型,根据订单号去分配表中检索出所有相关人员的 phone和 流水号和状态,借鉴之前的展示联系人,自定义JSON数组,在循环中将刚才获取的phone和流水号放进去(根据流水号放,或可用order by?),再在另一个循环中按顺序遍历出phone 到user表中去找到姓名后加入JSON数组

listview展示,都要是JSON,订单发布后,大家都一样,无论从哪个界面进来数据都从云端加载,而不是界面传值?可以界面传值,因为每次app都是自动登录,然后将 phone 传递进去,可以在各个 fragment 都去 get 然后都 put 出去,这样可以在外围形成数据通路

刷新  接受


点击刷新:就是重新初始化界面,或要调用一些方法,上网查怎么.....或者下拉刷新也行,同时(单独写出来供接收按钮复用)根据订单号去分配表中统计订单状态字段的数 select count(*) from table where 字段 = ""; //符合该条件的记录总数,若与JSONArray.size相同则 toast 已全部接收,订单开始加工

第二个 toast 请完成后拍照提交。界面跳转到进行中的订单,待接收的订单 finish,再次进入待接收界面,则按上面的黄字内容。其实每次都是按黄字的内容。

点击接受:就会将自己的 phone 和 订单号(不需要管订单号,一个phone只对应最新的订单号)去员工订单分配表中检索,更新自己的订单状态为已接收,界面的订单状态刷新,或整体刷新亦可,toast您已接收订单,也按照上面的刷新按钮操作统计一下,具体的方法可以使能刷新按钮?还是,调用同一个方法?后者吧


 明天任务:

继续思考按键之后的逻辑内容,根据最上面的第 5 点内容

彻底想好后根据思路画界面,写双端代码时


2021-09-16


 待接收订单界面思考完毕,在昨天的内容上添加的

进行中的订单初始化的设计和具体可以借鉴待接收订单界面

先把待接收订单按上面的思路实现

 

按键水平排列,按键放在同一个 linearlayout ,方向设为水平,按钮的宽度设为 wrap 而不是 match

item2 借鉴发订单的 item

 

 接收订单的activity的代码编写,控件的声明和获取,点击事件以及提交 phone 的方法

 写外部循环的 phone 传递,log出来,测试行得通,再去写服务端的代码

 思考所谓的外部循环代码,登录界面进来后,似乎只有订单界面才有界面的跳转,所以所谓的传值就在订单界面的几个 activity 之间进行即可

加上几个activity是并列的所以 暂且不传 phone,等到测试时有问题获取不到 phone 时在做这一块


领导进入界面订单,首先是领导的 phone 的问题:

1.只要在 order 表中添加 order_state 字段,在订单发布时默认为进行中,在完成时更新为已完成

这样 phone 进入得到 name 后,分配表检索不到后根据得到的 name 去 order 表中检索若有则检索订单状态,将所有状态为进行中 订单号 加入 json 数组返回字符串即可,若没有则返回0,表示没有进行中的任务

2.当然在订单发布时要检测员工是否有订单任务,要检测一下状态,给不同的返回值,以提示。此处如果做成功,则员工多任务可以实现。

3.客户端接收到 JSON 字符串用 listview 展示全部非已完成的订单,当点击每个 item 时,会携带订单号或phone跳转到详情界面去服务端检索....并显示,跳转后的界面实际上和普通的员工差不多,有区别还是要弄两个,这个设有下拉刷新,或者悬浮按钮刷新


解决上面的问题:

1.在 order 表中新增订单状态,发布时插入进行中,完成时更新为已完成,新建时的字段插入做好了,更新稍后写

2.订单发布时检测员工状态,返回不同值,已实现

3.避免返回值的问题,用户携带phone上去后,需要返3种情况:

1)先获取name放着,if 当分配表检测不到 phone 时:

  (说明可能是领导或者没有任务的员工,其中领导的订单已完成和没有任务的员工可以归为一类,返回0,而有任务的领导,返回1,具体看后面 ):

    拿name去检索订单表,

    用while(rs.next()){当存在数据时,表名是领导,统计相关记录数和状态为已完成的数据数}

    select count(*) from order1 where publisher=? and order_state!=?有记录就返回1,没有就默认值0    

    比较两者是否相等,不相等表名有未完成的订单,返回1,客户端接收到后可以去执行返回值为订单号组成JSON的方法,相等则表明都已完成,返回0,

   else若订单表中也没有,返回0,客户端提示乜有进行中的订单

  else分配表中检测到数据时:

(说明是员工),获取刚才检测到数据的订单状态字段,若为已完成则返回0,否则返回2,表示客户端接收到2后去执行员工的详情方法。

 

以上在  进行中的订单按钮  点击时判断,然后根据获得的返回值,选择跳转的activity,并将所需的值传递到activity


原来的 AcceptOrderActivity 作为员工的订单详情显示,其实本来就是,先把员工的搞好吧

领导的 listview 和 点击后的还没有设计,领导订单发布后,是要跳转到领导的 listview 

先做订单发布时对员工状态的检测:

要在订单表插入前进行判断,所以不光传 order 对象,还要传 JSON 给 createOrder 方法,详细见服务端代码

成功一次性实现


明日任务:

做发布订单前的检查check()    todo 

做员工显示:

进行中订单按钮的点击事件,按照昨天的思路,可以再理一遍


2021-09-17


发布订单前的 check,已完成,为避免空指针异常,在判断员工列表长度前,先判断是否为空

下面需要做的是,进行中的订单按钮的点击事件,按昨天的思路

客户端点击事件对于不同返回时的反应逻辑搞好了,写服务端 web.xml

 服务端写好了,测试:

1.测试当领导点击进行中时,若领导的订单都已完成则提示无进行中的订单,有未完成的则显示列表界面

2.当员工点击进行中的按钮时,若已完成则提示无进行中订单,若非已完成则显示员工订单界面

测试发现,最开始的 servlet 忘记将 num 返回,修改了服务端的一些逻辑,测试

 检测失败,检查服务端,发现下面的问题,忘了加了

 

 

 

单独列出来,就能知道哪里出问题,是逻辑还是代码原因

按上面的测试方法测试后发现,员工可以成功判断并跳转或显示无订单进行中

但领导无论订单表中状态如何都只会返回0,提示乜有进行中的订单

 是否sql占用和conn已经连接有关系,修改,嵌套了 try catch 详见代码

 测试仍然无用,注释掉trycatch,修改返回1 的方法,while 循环之前先 rs.beforeFirst() 然后在循环之后 rs.getRow()与数组的长度比较

检查原来是SQL语句写错了,语句中 name 改成 publisher,仍有问题,彻底修改了SQL语句,测试成功了,代码如下

    public int howToDisplayOrder(String phone, String name) {
        int num = 0;
        try{
            conn = ConnDB.openConn();
            String sql = "select * from stafforder where phone=?";//检测员工分配表是否有phone
            ps = conn.prepareStatement(sql);
            ps.setString(1, phone);
            //执行查询语句,返回查询到的对象
            rs = ps.executeQuery();
            //分配表中没有,说明可能是领导或者没有任务的员工
            if (!(rs.next())) {
                String sql1 = "select * from order1 where publisher=? and order_state!=?";
                ps = conn.prepareStatement(sql1);
                ps.setString(1, name);
                ps.setString(2, "已完成");
                rs = ps.executeQuery();//执行查询语句,返回查询到的对象
                if (rs.next()) {//如果有记录
                    num = 1;
                }//没有记录返回默认值0

            }else if (!(rs.getString("order_state").equals("已完成"))){
                num = 2;//返回2,客户端接收到后,去执行查询显示方法
            }//否则 num 依然为默认值 0,前台不显示订单数据
        }catch  (Exception e) {
            e.printStackTrace();
        } finally {
            ConnDB.closeConn(rs, ps, conn);
        }
        return num;
    }

学艺不精啊,要是 MySQL 熟练了,早就解决了


做员工显示:

员工和领导的订单显示界面,都创建好并注册,领导订单列表也注册好了,领导新建订单后的跳转修改好了

 员工界面之前已经画好了

之后再拿着 get 到订单号接着去 order1 表中检索出全部信息(零件名,数量,发布者)按照刚才的方式组成 JSON 数组只需要写代码,显示主要分为三种情况:

1.员工订单显示 StaffOrderDisplayServlet:

需要的返回值:订单号,零件名,零件数量,发布者,四个变量组成的 JSON ,还有所选员工组成的 JSON ,一共两个 JSON

实现思路:

客户端先把 phone 上传,后端拿着 phone 去分配表中 get 订单号 ,拿着 get 到 订单号 接着去 order1 表中检索出全部信息(零件名,数量,发布者)按照之前联系人的方式组成 JSON 字符串返回。

若姓名不好搞就新建订单是先在员工订单分配表中插入姓名,已在创建订单时插入 name 字段,以便后面返回 JSON

点击显示分配员工,跳转时将 phone 传递下去,拿着 phone 去 staff_state 表中 select 出全部信息(订单号,自身状态,流水号),然后 .据此 get到订单号在stafforder 表中 找到所有订单号相同的数据,并 order  by 流水号(升序降序考虑) 检索出的所有数据 可以按照之前的联系人的方式组合成 JSON 数组返回

两个JSON数组,可以放在一个字符串数组中返回?有String数组。如果两个json不好返回的话,就设置点击以显示员工信息,这样就分开了

 

2.领导订单列表显示 LeaderOrderListDisplayServlet :

实现思路:

将 phone 传递过去,服务端接收到后,获得 name ,将 name 作为参数,传去 order1 表中检索出 订单号 (select * from orde1 where name =?and order_state != ? order by order_no 升降序考虑大的在前面)第一个问号是传来的 name,第二个问号是“已完成”,如果有记录就借鉴之前联系人的方式去拼接 JSON 字符串,最终返回订单号组成的 JSON 字符串即可

3.领导订单显示 LeaderOrderDisplayServlet 点击 item 时才去调用

实现思路:

当进入界面时,拿着传进来的 订单号,去 order1 表中检索(select * from order1 where order_no = ? )取出零件名,零件数量,发布者,组成的JSON字符串数组即可。

当点击显示分配员工时,拿着对应的 订单号 去数据库的 stafforder 表中去检索出所有 订单号为改订单号的 记录(select * from stafforder where order_no = ? order by stream_no 升降序考虑)之后按联系人的方法去组成 JSON (感觉之前选择员工时拼接 JSON 字符串,不需要这么做,JSONArray不可以吗?)返回 JSON字符串。

4.没有进行中的订单:

显示空白,服务端返回值为 0 时,下一个界面或者干脆,不跳转,直接 toast 即可,已实现。


明天任务:

上午整理可行思路,下午动手


 2021-09-18 13:59:49


补充了上面的思路

员工列表实施:

按上面思路实施,详情见代码

此外,联系人界面不应该有自己,防止在新建订单的时候把自己选上,领导若给自己分配任务,则点击进行中的订单时,会跳转到员工,或者也可以给自己分配任务,只是在显示是加上是否为领导的判断服务端增加了判断,没有在

测试 :

测试时没收到返回值,原来是服务端代码忘记上传

按上图操作,不然会出现插入后,为 null 的问题

显示的问题,两个JSON不好同时返回的话,就指定点击后显示详情

借鉴和观察 当初联系人返回 JSON 的方式,发现区别,实测都可以

md,还是不行

 

设定将订单号返回

 

对比联系人发现错误如下:

 

 又有新发现

 

 两个 JSON 放到一个数组当中不可行?

实际上可以

 

 又发现员工JSON

 

这下应该咩问题了

那就一起可以一起显示了

E/result: [[{"orderNo":"20210918170741","partName":"螺母","partNum":"100","publisher":"张三"}], [{"stream_no":"1","name":"李四","phone":"173******583","order_state":"待接收"}]]

怎么把它转化并显示?char型数组不行,只能是一个字符一个字符,String数组也不行,分割不好分割,还是参考之前的联系人吧。或者传过来的格式有待考究

可以在传过来之前,拼一下便于区分,而不是数组形式,使用&区分,参考链接

注意员工的订单 JSON ,返回 JSONObject 即可,而分配员工列表 JSON 需要返回 JSONArray ,领导的列表也应该是 JSONArray ,而点进去的详细信息和列表员工订单的方法一致。

 可行


明日任务:

做好订单显示,构思提交任务的设计


2021-09-19


员工订单显示已实现

难点在于 adapter 和 JSON转化为List<StaffChoosedInfoEntity> 以及,<>之间的内容

StaffChoosedListAdapter2 主要参考的是之前创建订单时所选员工的 adapter 而它又是参考的 helloworld 和网上的,而 JSON 转化为 List<StaffChoosedInfoEntity> 则是参考的 之前的联系人

两者结合设定布局参考的是 联系人界面 displayContacts() 中的 run() 方法 中的方式,详情见代码

Type type = new TypeToken<List<StaffChoosedInfoEntity>>(){}.getType();  //StaffChoosedInfoEntity
mStaffChoosedList = new Gson().fromJson(json2, type);  //JSON 转化为 list
mLvChoosedStaff.setAdapter(new StaffChoosedListAdapter2(StaffOrderActivity.this,mStaffChoosedList)); //StaffChoosedListAdapter2

做领导显示:

看之前的思路:

将 phone 传递过去,服务端接收到后,获得 name ,将 name 作为参数,传去 order1 表中检索出 订单号 (select * from orde1 where name =?and order_state != ? order by order_no 升降序考虑大的在前面)第一个问号是传来的 name,第二个问号是“已完成”,while有记录就借鉴之前联系人的方式去拼接 JSON 字符串,最终返回订单号组成的 JSON 数组字符串即可

思考:

领导的订单列表界面可以显示类似 已完成 的 listview 样式,点击每个 item 会进入详情界面,此时再去获取分配员工的 JSON  这样可以很自然的分开,节省资源的同时,降低难度

暂定list只显示三种数据,分别是,订单号,订单状态,发布者,点进去才跳转显示详情 activity 已完成订单界面亦如此,一口气改了它,它们都可以用同一个 adapter 和布局

在进行中的订单状态肯定是进行中或者待接收,而在已完成中的订单肯定为已完成,所以状态没必要显示,应显示:订单号,零件名,数量,发布者。

客户端的布局,还有adapter 和list什么的先写号,再写服务端的代码

客户端写好了,写服务端

服务端写好了,测试

修复了订单列表订单信息显示不全的问题,原因是 在adapter 中给 item 中的控件设定值时,OrderInfoEntity 中的变量名要与,传来的 JSON 一致

修复了订单发布后跳转不显示的问题,主需要在跳转前传 phone 即可

调整了领导订单列表 item 的宽度

 测试一下流水号显示顺序正不正确,改变数据库的流水号。可以改变

 测试员工订单展示,因为改动了一点。可以显示


领导订单展示:

可以借鉴员工订单展示,试试在访问时,传两个参数,以区分是否还需要专门检索出订单号,因为员工是需要先检索出订单号吗,而领导不需要检索出订单号,点解 item 上传的就是订单号

员工和领导的订单的客户端显示界面不共用,后端共用

 测试:

测试没有问题能够跳转并显示,且流水号顺序正确,能按流水号升序


思考:领导是否能给自己分配,若给及自己分配,订单的详情界面是显示提交还是评价呢?所以还是再选择时提示或者,干脆联系人界面没有自己,再注册一个号,用来替代领导自己做多人测试即可

先让自己不在联系人中显示,已实现

再注册几个号,王五18755552782,赵六17366668583,不用验证码的那种,其实中直接在数据库中添加即可


明天的任务:

整理后面的思路

根据思路设计布局和逻辑

实现接收和界面刷新,图片的提交

......


 

后面任务:

设有选择文件按钮(选择文件按钮点击时会检测前面人的状态,若前面的人没有提交则会提示请等待前面的人完成后再提交),点击后弹窗,标题为请选择照片来源,按钮有取消,从相册中选取,和拍照,这两个功能到时候再说,选择好后,将缩略图显示在界面,点击提交按钮会将图片上传至云端的一个文件夹,点击提交时会检测是否已经选择图片

6.发布者进入的进行中的订单界面和普通员工不一样,前者有查看提交的图片和评分的控件以及结束订单的按钮,而后者没有,评价的前提是员工已提交,评价时携带身份信息,即手机号要和发布者一致,否则提示没有评价权限,对所有员工评分完成后,需要手动结束订单,此时弹出对话框,是否结束订单...取消或者确定,确定后会 toast 订单已更新到已完成

积分表的设计...发布者评价后会及时更新员工积分表的数据(当日累加)具体的如何每日清零等做到再说

 

刷新  接受


点击刷新:就是重新初始化界面,或要调用一些方法,上网查怎么.....或者下拉刷新也行,同时(单独写出来供接收按钮复用)根据订单号去分配表中统计订单状态字段的数 select count(*) from table where 字段 = ""; //符合该条件的记录总数,若与JSONArray.size相同则 toast 已全部接收,订单开始加工

第二个 toast 请完成后拍照提交。界面跳转到进行中的订单,待接收的订单 finish,再次进入待接收界面,则按上面的黄字内容。其实每次都是按黄字的内容。

点击接受:就会将自己的 phone 和 订单号(不需要管订单号,一个phone只对应最新的订单号)去员工订单分配表中检索,更新自己的订单状态为已接收,界面的订单状态刷新,或整体刷新亦可,toast您已接收订单,也按照上面的刷新按钮操作统计一下,具体的方法可以使能刷新按钮?还是,调用同一个方法?后者吧

 

 接收:

接收订单后,更新表中状态后,前台需要自动刷新界面,以更新显示,phone 已经保存,无需再传

 

 提交:

 员工点击提交时,检测前面的人是否已完成:
上传订单号(已经获取)和 phone 先根据 phone 去 stafforder 表中 select 出自己的 流水号,然后拿着流水号和订单号去
select * from stafforder where order_no = ? and order_state != ? and stream_no < ?;
第一个问好填传来的订单号,第二个传,已完成,第三个传刚才的流水号
如果有数据,则返回0,客户端接收后提示,请等待前面的人提交。如果没有,则返回1,可以提交
员工提交后,当员工流水号小于总分配人数时,给当前员工流水号加一的流水号对应的员工提示,开始做工,核心功能

 

 

显示姓名不能和显示积分结合在一起,因为好多地方都用得到了,获取姓名,积分到时可以合在一起?

 

 分配表的已完成的订单也不用删去,正好可以检测出显示在已完成的界面

 思考已完成界面:不好弄干脆就不弄了,老师没要求

也可以弄,领导评分提交时,随着自身状态的变为已完成后顺便插入表中即可,已完成的表的字段有订单号,零件名,零件数量,发布者,这实际上就是把 order1 表中的内容拿过来

 7.已完成界面,有订单号零件名数量发布者,点击会跳转到详情界面,具体的方法时在 itemclick 事件中 根据当初传来的订单号去员工订单表中检索出所有的员工来显示,其他信息使用订单号在订单表中检索即可

 

 

 

 

 

 


 分享 和 检查升级?

批量修改,选中后按快捷键,ESC退出

 

 

 

 

 

注册时也要在积分表中新增一行

给老师之前记得换个数据库,把当前的清空,在新建一个自己测试,试试能不能拷贝


8:29:38
修改主题颜色和图标的蓝一致

 8:29:39
图标的蓝备份可能在网盘也可能在博客

 8:29:39
个界面都弄下拉刷新,以从数据库中更新数据到客户端


8:29:38
修改主题颜色和图标的蓝一致

 8:29:39
图标的蓝备份可能在网盘也可能在博客

 8:29:39
个界面都弄下拉刷新,以从数据库中更新数据到客户端

 

posted @ 2021-09-20 13:42  18751612782  阅读(489)  评论(0)    收藏  举报