|
@@ -214,6 +214,7 @@ class Orders extends Base {
|
|
|
$this->error = '取件与送达地点不能是同一地点';
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
if (!$data['type']) {
|
|
|
$this->error = '运送类型不能为空';
|
|
|
return false;
|
|
@@ -234,7 +235,15 @@ class Orders extends Base {
|
|
|
$this->error = '需求时间已过时';
|
|
|
return false;
|
|
|
}
|
|
|
+ }else{
|
|
|
+ $data['xq_time'] = date('Y-m-d H:i:s');
|
|
|
+ $time = Db::name('time')
|
|
|
+ ->where('id',$conveyCate['time_id'])
|
|
|
+ ->find();
|
|
|
+ $data['ywc_time'] = date('Y-m-d H:i',strtotime($data['xq_time']) + 60*$time['bz_time']);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
$ysData = array(
|
|
|
'order_id' => $orderId,
|
|
|
'type' => $data['type'],
|
|
@@ -248,7 +257,6 @@ class Orders extends Base {
|
|
|
'priority' => empty($data['priority']) ? 0 : $data['priority'],
|
|
|
'score'=>$conveyCate['score']
|
|
|
);
|
|
|
-
|
|
|
if(empty($ysData['xq_time'])){
|
|
|
unset($ysData['xq_time']);
|
|
|
}
|
|
@@ -260,8 +268,27 @@ class Orders extends Base {
|
|
|
if (!$oCid) {
|
|
|
exception('运送信息保存失败');
|
|
|
}
|
|
|
- model('UserConveyCate')->updateCate($data['user_id'],$data['type']);
|
|
|
|
|
|
+ if(isset($data['way_addr']) && !empty($data['way_addr'])){
|
|
|
+ $wayAddr = explode(',',$data['way_addr']);
|
|
|
+ foreach ($wayAddr as $k=>$v){
|
|
|
+ if($v){
|
|
|
+ $cdata = [
|
|
|
+ 'order_id'=>$orderId,
|
|
|
+ 'addr'=>$v,
|
|
|
+ 'create_time'=>date('Y-m-d H:i:s'),
|
|
|
+ 'order_convey_id'=>$oCid,
|
|
|
+ ];
|
|
|
+ $oce = Db::name('order_convey_end')->insert($cdata);
|
|
|
+ if(!$oce){
|
|
|
+ exception('途径地点信息保存失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ model('UserConveyCate')->updateCate($data['user_id'],$data['type']);
|
|
|
if ($conveyCate['cate'] == 1) {
|
|
|
$patient = [
|
|
|
'order_id' => $orderId,
|
|
@@ -603,6 +630,12 @@ class Orders extends Base {
|
|
|
$oc['start_name'] = $this->getTableField('address', ['id' => $oc['start']], 'title');
|
|
|
$oc['end_name'] = $this->getTableField('address', ['id' => $oc['end']], 'title');
|
|
|
$oc['device_name'] = $this->getTableField('convey_device', ['id' => $oc['device_id']], 'title');
|
|
|
+ $conveyEndCount = Db::name('order_convey_end')
|
|
|
+ ->where('order_id',$v['id'])
|
|
|
+ ->where('del',0)
|
|
|
+ ->count();
|
|
|
+ $ceNums = $conveyEndCount+1;
|
|
|
+ $oc['typeScore'] = round($oc['score']*$ceNums,1);
|
|
|
$v['oc'] = $oc;
|
|
|
$cate = $this->getTableField('convey_cate', ['id' => $oc['type']], 'cate');
|
|
|
if ($cate == 1) {
|
|
@@ -740,7 +773,10 @@ class Orders extends Base {
|
|
|
->where($t)
|
|
|
->select();
|
|
|
if (!empty($todo)) {
|
|
|
+ $ysdign = model("Config")->getConfig("order_ys_sign",$v['org_id']);
|
|
|
foreach ($todo as $k => $v1) {
|
|
|
+ $todo[$k]['s_num'] = $v['s_num'];
|
|
|
+ $todo[$k]['yssign'] = $ysdign == 1?1:0;
|
|
|
$todo[$k]['to_real_name'] = $this->getTableField('user', ['id' => $v1['to_user_id']], 'real_name');
|
|
|
$todo[$k]['todo_mode_text'] = $this->getTableField('todo_mode', ['id' => $v1['todo_mode']], 'in_content');
|
|
|
$tx = $this->getTableField('todo_mode', ['id' => $v1['todo_mode']], 'out_content');
|
|
@@ -830,6 +866,13 @@ class Orders extends Base {
|
|
|
$oc['sample'] = implode(',', $sample);
|
|
|
$cate = $this->getTableField('convey_cate', ['id' => $oc['type']], 'cate');
|
|
|
$oc['conveyTypeCate'] = $cate;
|
|
|
+ $conveyEndCount = Db::name('order_convey_end')
|
|
|
+ ->where('order_id',$v['id'])
|
|
|
+ ->where('del',0)
|
|
|
+ ->count();
|
|
|
+ $ceNums = $conveyEndCount+1;
|
|
|
+ $oc['typeScore'] = round($oc['score']*$ceNums,1);
|
|
|
+
|
|
|
$v['oc'] = $oc;
|
|
|
if ($cate == 1) {
|
|
|
$ocp = Db::name('order_convey_patient')
|
|
@@ -850,10 +893,10 @@ class Orders extends Base {
|
|
|
$v['delayReason'] = $order_delay['title'];
|
|
|
}
|
|
|
|
|
|
- if($v['real_name']){
|
|
|
+ if($v['name']){
|
|
|
$v['real_name'] = $v['name'];
|
|
|
}
|
|
|
- if($v['mobile']){
|
|
|
+ if($v['phone']){
|
|
|
$v['mobile'] = $v['phone'];
|
|
|
}
|
|
|
return $v;
|
|
@@ -1064,7 +1107,7 @@ class Orders extends Base {
|
|
|
$taskData['priority'] = !empty($order_convey) && $order_convey['priority']==3?2:0;
|
|
|
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
$sns = [];
|
|
|
foreach ($to_user_id as $k => $v) {
|
|
|
if(empty($v)){
|
|
@@ -1156,7 +1199,7 @@ class Orders extends Base {
|
|
|
$rData['repair_priority'] = $data['repair_priority'];
|
|
|
}
|
|
|
}
|
|
|
- if (!empty($rData)) {
|
|
|
+ if (!empty($rData)) {
|
|
|
$old = Db::name('order_repair')
|
|
|
->where('order_id', $id)
|
|
|
->find();
|
|
@@ -1630,7 +1673,7 @@ class Orders extends Base {
|
|
|
'create_yyyy' => date('Y'),
|
|
|
'create_yyyymm' => date('Ym'),
|
|
|
'create_yyyymmdd' => date('Ymd'),
|
|
|
- ];
|
|
|
+ ];
|
|
|
$taskData = [
|
|
|
'org_id' => $data['org_id'],
|
|
|
'type' => 1,
|
|
@@ -2162,7 +2205,7 @@ class Orders extends Base {
|
|
|
->join('address b','b.id = a.addr')
|
|
|
->where('a.order_id',$orderId)
|
|
|
->order('a.id asc')
|
|
|
- ->field('a.id,a.addr,b.title,a.scan,a.create_time,a.update_time')
|
|
|
+ ->field('a.*,b.title')
|
|
|
->select();
|
|
|
$info['ends'] = $conveyends?$conveyends:[];
|
|
|
|
|
@@ -2227,19 +2270,49 @@ class Orders extends Base {
|
|
|
$offset = ($page - 1) * $size;
|
|
|
|
|
|
$list = $this->where($map)
|
|
|
- ->limit($offset, $size)
|
|
|
+// ->limit($offset, $size)
|
|
|
->order('id', 'desc')
|
|
|
->select();
|
|
|
$list = $list ? $list->toArray() : [];
|
|
|
$data = [];
|
|
|
+
|
|
|
+ // 预约类型-取15分钟后之前的订单
|
|
|
+ $curtime15 = time()+60*15;
|
|
|
+
|
|
|
foreach ($list as $k => $v) {
|
|
|
$rr = formatArray(
|
|
|
['id', 'content', 'create_time', 'work_type_mode']
|
|
|
, $v);
|
|
|
$rr['depName'] = $this->getTableField('dep', ['id' => $v['dep_id']], 'title');
|
|
|
- $data[] = $rr;
|
|
|
+
|
|
|
+ $convey = Db::name('order_convey')->where('order_id',$v['id'])->find();
|
|
|
+ $rr['start_address'] = '';
|
|
|
+ $rr['end_address'] = '';
|
|
|
+ $rr['convey_title'] = '';
|
|
|
+
|
|
|
+ if($v['work_type_mode'] == 3){
|
|
|
+ if($convey){
|
|
|
+ $rr['start_address'] = Db::name('address')->where('id',$convey['start'])->value('title');
|
|
|
+ $rr['end_address'] = Db::name('address')->where('id',$convey['end'])->value('title');
|
|
|
+
|
|
|
+ $cate = Db::name('convey_cate')->where('id',$convey['type'])->find();
|
|
|
+ $rr['convey_title'] = $cate?$cate['title']:'';
|
|
|
+
|
|
|
+ $conveyCate = Db::name('convey_cate')->where('id',$convey['type'])->find();
|
|
|
+
|
|
|
+ if($conveyCate && $conveyCate['priority'] != 4 && $convey['xq_time'] < date('Y-m-d H:i:s',$curtime15)){
|
|
|
+ $data[] = $rr;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+ $data[] = $rr;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- return $data;
|
|
|
+
|
|
|
+ $newData = array_page_list($data,$page,$size);
|
|
|
+ return $newData;
|
|
|
}
|
|
|
//抢单
|
|
|
public function grabOrdersEdit($order, $userId,$orderType,$addressId) {
|
|
@@ -2460,7 +2533,7 @@ class Orders extends Base {
|
|
|
$info = $this->where('id',$id)->find();
|
|
|
|
|
|
if (!in_array($info['order_mode'],[1,4])) {
|
|
|
- \exception('选择的订单状态不能延迟');
|
|
|
+ \exception('选择的订单状态不能延迟');
|
|
|
}
|
|
|
|
|
|
$res = Db::name('order_delay')
|
|
@@ -2468,21 +2541,21 @@ class Orders extends Base {
|
|
|
->where('status',0)
|
|
|
->find();
|
|
|
if($res){
|
|
|
- \exception('选择的订单已存在延时任务');
|
|
|
+ \exception('选择的订单已存在延时任务');
|
|
|
}
|
|
|
|
|
|
$curTime = date('Y-m-d H:i:s');
|
|
|
|
|
|
$res =Db::name('order_delay')
|
|
|
->insert([
|
|
|
- 'order_id' => $id,
|
|
|
- 'delay_reason_id' => $delayReasonId,
|
|
|
- 'start_time' => $curTime,
|
|
|
- 'status' => 0
|
|
|
- ]);
|
|
|
- if(!$res){
|
|
|
- \exception('添加失败');
|
|
|
- }
|
|
|
+ 'order_id' => $id,
|
|
|
+ 'delay_reason_id' => $delayReasonId,
|
|
|
+ 'start_time' => $curTime,
|
|
|
+ 'status' => 0
|
|
|
+ ]);
|
|
|
+ if(!$res){
|
|
|
+ \exception('添加失败');
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$this->commit();
|
|
@@ -2592,8 +2665,8 @@ class Orders extends Base {
|
|
|
}
|
|
|
|
|
|
// 途经点点扫码
|
|
|
- public function sweepCode($code,$id){
|
|
|
- $addrs = model('address')->checkAddrCode($code,2,$this->orgId);
|
|
|
+ public function sweepCode($code,$id,$num=0,$img='',$orgId=0,$userId=0){
|
|
|
+ $addrs = model('address')->checkAddrCode($code,2,$orgId);
|
|
|
if(!$addrs){
|
|
|
HelpHander::error('二维码不正确');
|
|
|
}
|
|
@@ -2607,9 +2680,20 @@ class Orders extends Base {
|
|
|
$this->error = '地点不正确';
|
|
|
return false;
|
|
|
}
|
|
|
+ $totalNum = Db::name('orders')->where('id',$info['order_id'])->value('total_num');
|
|
|
+
|
|
|
+ $totalNum2 = Db::name('order_convey_end')->where('order_id',$info['order_id'])->where('del',0)->where('scan',1)->sum('num');
|
|
|
+ $t2 = $totalNum2+$num;
|
|
|
+ if(intval($t2) > intval($totalNum) ){
|
|
|
+ $this->error = '送达数量不能超过领取总数量';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
$res = Db::name('order_convey_end')->where('id',$id)->update([
|
|
|
'scan' => 1,
|
|
|
- 'update_time' => date('Y-m-d H:i:s')
|
|
|
+ 'update_time' => date('Y-m-d H:i:s'),
|
|
|
+ 'num'=>$num,
|
|
|
+ 'img'=>$img,
|
|
|
+ 'user_id'=>$userId
|
|
|
]);
|
|
|
if(!$res){
|
|
|
$this->error = '操作失败';
|
|
@@ -3080,6 +3164,173 @@ class Orders extends Base {
|
|
|
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ public function get_cur_day_lists($org,$limit=5)
|
|
|
+ {
|
|
|
+ $ret = Db::name('orders')
|
|
|
+ ->alias('o')
|
|
|
+ ->where('o.org_id',$org)
|
|
|
+ ->where('o.del',0)
|
|
|
+ // ->where('o.order_mode','in',[1,4])
|
|
|
+ //->where('o.work_type_mode',3)
|
|
|
+ ->where('o.create_yyyymmdd',date('Ymd'))
|
|
|
+ ->order('o.id','desc')
|
|
|
+ ->limit($limit)->select();
|
|
|
+ foreach ($ret as $k=>$v){
|
|
|
+
|
|
|
+ $todo =Db::name('todo')
|
|
|
+ ->alias('t')
|
|
|
+ ->where('t.order_id',$v['id'])
|
|
|
+ ->join('user u','u.id = t.to_user_id')
|
|
|
+ // ->where('t.todo_mode','in',[1,2,3])
|
|
|
+ ->where('t.del',0)
|
|
|
+ ->field('u.real_name,t.create_time,t.confirm_time')
|
|
|
+ ->order('t.id','asc')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ $users = [];
|
|
|
+ $confirmTime = '';
|
|
|
+ foreach ($todo as $kk=>$vv){
|
|
|
+ $users[] = $vv['real_name'];
|
|
|
+ if(!$confirmTime && $vv['confirm_time']){
|
|
|
+ $confirmTime = $vv['confirm_time'];
|
|
|
+ }else if($confirmTime && $vv['confirm_time'] && $vv['confirm_time'] < $confirmTime){
|
|
|
+ $confirmTime = $vv['confirm_time'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $ret[$k]['real_names'] = implode(',',$users);
|
|
|
+ $ret[$k]['send_time'] = $todo?$todo[0]['create_time']:'';
|
|
|
+ $ret[$k]['confirm_time'] = $confirmTime;
|
|
|
+ $ret[$k]['order_model_txt'] = Db::name('order_mode')
|
|
|
+ ->where('id',$v['order_mode'])
|
|
|
+ ->value('out_content');
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return $ret?$ret:[];
|
|
|
+ }
|
|
|
+ public function get_cur_day_lists_bak($org,$limit=5)
|
|
|
+ {
|
|
|
+ $ret = Db::name('orders')
|
|
|
+ ->alias('o')
|
|
|
+ ->join('order_convey oc','oc.order_id = o.id')
|
|
|
+ ->field('o.*,oc.type,oc.start,oc.end,oc.xq_time,oc.ywc_time,oc.device_id,oc.name,oc.phone,oc.priority')
|
|
|
+ ->where('o.org_id',$org)
|
|
|
+ ->where('o.del',0)
|
|
|
+ ->where('o.order_mode','in',[1,4])
|
|
|
+ ->where('o.work_type_mode',3)
|
|
|
+ ->where('o.create_yyyymmdd',date('Ymd'))
|
|
|
+ ->order('oc.xq_time','ASC')
|
|
|
+ ->limit($limit)->select();
|
|
|
+ foreach ($ret as $k=>$v){
|
|
|
+ $ret[$k]['start_name'] = $this->getTableField('address',array('id'=>$v['start']),'title');
|
|
|
+ $ret[$k]['end_name'] = $this->getTableField('address',array('id'=>$v['end']),'title');
|
|
|
+ $ret[$k]['type_name'] = $this->getTableField('convey_cate',array('id'=>$v['type']),'title');
|
|
|
+ $ret[$k]['real_name'] = $this->getTableField('user',array('id'=>$v['user_id']),'real_name');
|
|
|
+
|
|
|
+ $todo =Db::name('todo')
|
|
|
+ ->alias('t')
|
|
|
+ ->where('t.order_id',$v['id'])
|
|
|
+ ->join('user u','u.id = t.to_user_id')
|
|
|
+ ->where('t.todo_mode','in',[1,2,3])
|
|
|
+ ->where('t.del',0)
|
|
|
+ ->field('u.real_name,t.create_time,t.confirm_time')
|
|
|
+ ->order('t.id','asc')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ $users = [];
|
|
|
+ $confirmTime = '';
|
|
|
+ foreach ($todo as $kk=>$vv){
|
|
|
+ $users[] = $vv['real_name'];
|
|
|
+ if(!$confirmTime && $vv['confirm_time']){
|
|
|
+ $confirmTime = $vv['confirm_time'];
|
|
|
+ }else if($confirmTime && $vv['confirm_time'] && $vv['confirm_time'] < $confirmTime){
|
|
|
+ $confirmTime = $vv['confirm_time'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $ret[$k]['real_names'] = implode(',',$users);
|
|
|
+ $ret[$k]['send_time'] = $todo?$todo[0]['create_time']:'';
|
|
|
+ $ret[$k]['confirm_time'] = $confirmTime;
|
|
|
+ $ret[$k]['device_name'] = '';
|
|
|
+ if($v['device_id'] > 0){
|
|
|
+ $ret[$k]['device_name'] = $this->getTableField('convey_device',array('id'=>$v['device_id']),'title');
|
|
|
+ }
|
|
|
+
|
|
|
+ $last = strtotime($v['ywc_time']) - time();
|
|
|
+ $ret[$k]['last_time'] = $last > 0?round($last/60):0;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return $ret?$ret:[];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function delConveyEnd($orderId,$orgId){
|
|
|
+ $order = Db::name('orders')
|
|
|
+ ->where('org_id',$orgId)
|
|
|
+ ->where('id',$orderId)
|
|
|
+ ->where('order_mode',4)
|
|
|
+ ->where('del',0)
|
|
|
+ ->where('work_type_mode',3)
|
|
|
+ ->find();
|
|
|
+ if(!$order){
|
|
|
+ $this->error = '订单不存在';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查订单是不是病人运送
|
|
|
+ $convey = Db::name('order_convey')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('convey_cate b','a.type = b.id')
|
|
|
+ ->where('a.order_id',$orderId)
|
|
|
+ // ->where('b.cate',1)
|
|
|
+ ->field('a.*')
|
|
|
+ ->find();
|
|
|
+ if(!$convey){
|
|
|
+ $this->error = '订单不存在';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $orderEnd = Db::name('order_convey_end')
|
|
|
+ ->where('order_convey_id',$convey['id'])
|
|
|
+ ->where('del',0)
|
|
|
+ ->order('id','desc')
|
|
|
+ ->select();
|
|
|
+ if(!$orderEnd){
|
|
|
+ $this->error = '没有途径地点不能删除目的地';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ Db::startTrans();
|
|
|
+ try{
|
|
|
+ $ret = Db::name('order_convey_end')
|
|
|
+ ->where('id',$orderEnd[0]['id'])->update([
|
|
|
+ 'del' => 1,
|
|
|
+ 'update_time' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
+ if(!$ret){
|
|
|
+ \exception('操作失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更换目的地
|
|
|
+ $res = Db::name('order_convey')
|
|
|
+ ->where('id', $convey['id'])->update([
|
|
|
+ 'end' => $orderEnd[0]['addr'],
|
|
|
+ ]);
|
|
|
+ if(!$res){
|
|
|
+ \exception('操作失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::commit();
|
|
|
+ }catch (Exception $e){
|
|
|
+ Db::rollback();
|
|
|
+ $this->error = '操作失败';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|