生成工单操作流程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012784277/article/details/47805597

生成工单的操作流程

1.文件结构

  • DeliveryAction.class.php : 配送员控制器类
    • work_disp 显示工单界面,如果没有工单,显示生成工单界面
    • work_empty 生成工单的算法,此控制器调用生成工单的算法,不管成功与否,都会返回到work_disp

  • WorkApi.class.php :DeliveryAction中用到的API

    • getWorkList() 生成工单的接口

  • Tpl/Delivery 存放相关的视图

    • work.html : 工单主界面
    • work_empty.html: 领取工单界面
    • show_code.html: 生成微信支付二维码页面
    • scan_work_box_html:领箱扫码界面
    • order_item_new.html: 单个订单的详细信息页面
    • create_empty_box.html: 选择箱子个数页面
    • create_empty_box2.html: 新订单完成页面

2.页面跳转及传值

2.1 主页(m=Delivery&a=work_disp)

  • 传入值:user_id (从Holder中获取的)
  • 传出值:
    • 当work_order表中有为完成的工单时,跳转到work.html,传值为$work$orders
    • 当work_order表中没有未完成的工单时,调用getWorkList()生成工单数据插入到work_order表中,显示work.html,传入值与上面相同

2.2 领箱扫码(m=Delivery&a=scan_work_box_disp)

  • 传入值:
    • total_full_box_send:送出去的满箱
    • total_empty_box_send:送出去的空箱
    • work_sn :工单号
  • 按钮
    • 继续扫:调用JS方法scanCode(),调用微信扫码接口获得扫码结果,将结果提交到m=Delivery&a=scan_code
    • 清空:调用JS方法initScanCode()提交到m=Delivery&a=clear_scaned_box
    • 完成:调用JS方法finishScanCode(),提交到m=Delivery&a=finish_scan_code 结束。

2.3 订单单击进入页面(m=Delivery&a=order_item)

  • 传入值:order_id:订单ID work_sn:工单号
  • 按钮
    • 处理
    • 短信验证
    • 扫空箱:
      • 调用JS方法scan_empty_box,提交到m=Delivery&a=scan_empty_box_at_user_home
    • 扫满箱:
      • 调用JS方法scan_full_box,提交到m=Delivery&a=scan_full_box_at_user_home
    • 下新订单(增加空箱):
      • 调用JS方法create_order_in_user_home,提交到m=Delivery&a=create_empty_box_order
    • 下新订单(取回满箱子)
    • 改变订单(空箱留存更改)

3.数据库操作

3.1 生成工单

操作的表 order
条件 best_date=今天,order_statu=2,shipping_statu=1,pay_statu=3,is_imm_order=0
排序 best_time,delivery_range_id
描述 初步筛选出待分配的订单

2.

操作的表 Delivery_range
条件 delivery_id = worker_id
描述 得到快递员负责的快递区域

3.
get_orders_in_range() 返回所有在该快递员负责的配送区域内的订单
4.
根据箱子类型和快递员车的容量分配订单,返回分配到快递员的订单的ID
5.
根据订单ID操作相应的表,完成工单的生成

操作的表 order
更新 $data['shipping_statu'] = 2;
条件 $condition['order_id'] = array('in',$ids);
描述 将order表的配送状态改为已发货

6.

操作的表 work
新增 work_sn,work_type=1,worker_id=delevery_id,
新增 send_sum,send_sum2,get_sum,city_id,storehouse_id,
新增 changed_at,created_at
描述 新增一条工单记录

7.

操作的表 work_order
新增 work_id = work表中新插入的记录的ID
新增 order_id,created_at,changed_at
描述 将分配的订单ID和工单的对应关系记录到work_order表中

3.2 领箱扫码

1.scan_code

操作的表 work_box
聚合查询 count
条件 work_id = delivery_id,box_type=1,box_type=2
描述 查询出已经扫过的空箱子和满箱子

2.

操作的表 work_box
查询 box_sn
条件 work_id = work_id
描述 根据box_sn查询是否已经被扫码过

3.

操作的表 work_box
新增 work_id,box_id,box_type,created_at
描述 箱子扫码后记录在该表中

4.finish_scan_code

操作的表 work
查询 send_sum,send_sum2
条件 work_id = work_id
描述 查询一个订单中的所有箱子是否被扫码成功

5.clear_work_box

操作的表 work_box
删除
条件 work_id = work_id
描述 删除work_box表中所有该工单的记录

3.3 下新订单

  1. create_order_empty_box
操作的表 Box
查询 box_id,box_sn
条件 statu1 = 1
描述 查询可用的空箱子

2.

操作的表 order
新增 order_sn,order_statu,shipping_statu,pay_statu
新增 pay_time,created_at
描述 将生成的新订单的数据插入数据库

3.

操作的表 order_box
新增 order_id,box_id,work_type,created_at
描述 生成订单箱子表

4.

操作的表 user_box
新增 user_id,box_id,box_name,user_addr_id
新增 statu1,created_at
描述 生成用户箱子表

5.

操作的表 box
更新 statu1=1,user_id,last_user_id,changed_at
描述

6.

操作的表 storehouse
更新 box_using_sum
描述 更新相应的数据

7.

操作的表 user_money
描述 根据支付方式,支付金额更新用户money表

3.4 用户家扫空箱

1.

操作的表 order_box
更新 is_confirm = 1
条件 box_id,order_id,work_type=1
描述 修改is_confirm为1

3.5 用户家扫满箱

1.

操作的表 order_box
更新 is_confirm = 1
条件 box_id,order_id,work_type=3,4
描述 修改is_confirm标志位
展开阅读全文

没有更多推荐了,返回首页