派单员添加区域过滤
This commit is contained in:
parent
cee37cad21
commit
ed63962d56
|
|
@ -42,7 +42,7 @@ return [
|
|||
'title' => 'Endpoint',
|
||||
'type' => 'string',
|
||||
'content' => [],
|
||||
'value' => 'allocatr.oss-cn-hangzhou.aliyuncs.com',
|
||||
'value' => 'oss-cn-hangzhou.aliyuncs.com',
|
||||
'rule' => 'required;endpoint',
|
||||
'msg' => '',
|
||||
'tip' => '请填写从阿里云存储获取的Endpoint',
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace app\admin\controller;
|
||||
|
||||
use app\admin\addresmart\Address;
|
||||
use app\admin\model\AuthGroupAccess;
|
||||
use app\admin\model\OrderDispatch;
|
||||
use app\admin\model\Worker;
|
||||
use app\admin\model\WorkerItem;
|
||||
|
|
@ -28,6 +29,7 @@ class Order extends Backend
|
|||
protected $model = null;
|
||||
protected $sources = null;
|
||||
protected $items = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
|
|
@ -35,22 +37,22 @@ class Order extends Backend
|
|||
$this->view->assign("statusList", $this->model->getStatusList());
|
||||
|
||||
$sources = Db::name('source')
|
||||
->where('status',1)
|
||||
->field(['id','title','key_word','pid'])
|
||||
->order('pid','asc')
|
||||
->order('sort','desc')
|
||||
->where('status', 1)
|
||||
->field(['id', 'title', 'key_word', 'pid'])
|
||||
->order('pid', 'asc')
|
||||
->order('sort', 'desc')
|
||||
->select();
|
||||
$this->sources = $sources;
|
||||
$filtered = array_filter($sources, function($item) {
|
||||
$filtered = array_filter($sources, function ($item) {
|
||||
return $item['pid'] == 0;
|
||||
});
|
||||
|
||||
$pid_map = array_column($filtered,null,'id');
|
||||
$pid_map = array_column($filtered, null, 'id');
|
||||
$res = [];
|
||||
foreach ($sources as $item){
|
||||
if ($item['pid'] != 0 && isset($pid_map[$item['pid']])){
|
||||
foreach ($sources as $item) {
|
||||
if ($item['pid'] != 0 && isset($pid_map[$item['pid']])) {
|
||||
$res [] = [
|
||||
...$item,'ptitle' => $pid_map[$item['pid']]['title']
|
||||
...$item, 'ptitle' => $pid_map[$item['pid']]['title']
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -61,29 +63,29 @@ class Order extends Backend
|
|||
// dd($data);
|
||||
|
||||
$items = Db::name('item')
|
||||
->where('status',1)
|
||||
->field(['id','title','key_word','pid'])
|
||||
->order('pid','asc')
|
||||
->order('sort','desc')
|
||||
->where('status', 1)
|
||||
->field(['id', 'title', 'key_word', 'pid'])
|
||||
->order('pid', 'asc')
|
||||
->order('sort', 'desc')
|
||||
->select();
|
||||
$tree = $this->buildTree($items);
|
||||
$formattedTree = $this->formatTree($tree);
|
||||
$phones = Db::name('phones')
|
||||
->where('assigned_user',$this->auth->id)
|
||||
->field(['id','model','phone_number'])
|
||||
->where('assigned_user', $this->auth->id)
|
||||
->field(['id', 'model', 'phone_number'])
|
||||
->select();
|
||||
|
||||
$this->items = $items;
|
||||
|
||||
|
||||
$coupons = Db::name('coupons')
|
||||
->where('status','active')
|
||||
->field(['id','code','description'])
|
||||
->where('status', 'active')
|
||||
->field(['id', 'code', 'description'])
|
||||
->select();
|
||||
|
||||
|
||||
$users = Db::name('admin')
|
||||
->field(['id','nickname'])
|
||||
->field(['id', 'nickname'])
|
||||
->select();
|
||||
|
||||
$this->view->assign("statusList", $this->model->getStatusList());
|
||||
|
|
@ -100,7 +102,6 @@ class Order extends Backend
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
|
||||
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
|
||||
|
|
@ -108,10 +109,13 @@ class Order extends Backend
|
|||
*/
|
||||
|
||||
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->request->filter(['strip_tags', 'trim']);
|
||||
$group = \model('auth_group_access')->find($this->auth->id)->group_id ?? 0;
|
||||
$user = \model('admin')->find($this->auth->id);
|
||||
|
||||
|
||||
if (false === $this->request->isAjax()) {
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
|
@ -120,16 +124,30 @@ class Order extends Backend
|
|||
return $this->selectpage();
|
||||
}
|
||||
[$where, $sort, $order, $offset, $limit] = $this->buildparams();
|
||||
$list = $this->model
|
||||
->field(['id','order_no','admin_id','customer','tel','status','area_id','address',
|
||||
'source','source_shop','source_uid','source','item_title','item_id','work_tel_id',
|
||||
'detail','remark','images','create_time','update_time','admin_id','dispatch_type','receive_type'])
|
||||
->where($where)
|
||||
->with(['user' => function($q){
|
||||
$build = $this->model
|
||||
->field(['id', 'order_no', 'admin_id', 'customer', 'tel', 'status', 'area_id', 'address',
|
||||
'source', 'source_shop', 'source_uid', 'source', 'item_title', 'item_id', 'work_tel_id',
|
||||
'detail', 'remark', 'images', 'create_time', 'update_time', 'admin_id', 'dispatch_type', 'receive_type'])
|
||||
->where($where);
|
||||
|
||||
if ($group == 2) {
|
||||
// 生成 SQL 语句
|
||||
$area_codes = $this->filterAreaCodes(explode(',', $user->area_ids));
|
||||
$build->where(function ($q) use ($area_codes) {
|
||||
foreach ($area_codes as $area_code) {
|
||||
$q->whereOr('area_id', 'like', $area_code . '%');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
$list = $build
|
||||
->with(['user' => function ($q) {
|
||||
$q->field('id,nickname');
|
||||
},'area' => function($q){
|
||||
}, 'area' => function ($q) {
|
||||
$q->field('id,area_code,merge_name');
|
||||
},'phone' => function($q){
|
||||
}, 'phone' => function ($q) {
|
||||
$q->field('id,model');
|
||||
}])
|
||||
->order($sort, $order)
|
||||
|
|
@ -164,12 +182,12 @@ class Order extends Backend
|
|||
|
||||
$sources = $this->sources;
|
||||
$items = $this->items;
|
||||
$sources = array_column($sources,'title','id');
|
||||
$items = array_column($items,'title','id');
|
||||
$sources = array_column($sources, 'title', 'id');
|
||||
$items = array_column($items, 'title', 'id');
|
||||
$params['source_shop'] = $sources[$params['source']] ?? null;
|
||||
$params['item_title'] = $items[$params['item_id']] ?? null;
|
||||
$params['admin_id'] = ($params['admin_id'] ?? -1) == -1 ? $this->auth->id : $params['admin_id'];
|
||||
if(empty($params['admin_id'])){
|
||||
if (empty($params['admin_id'])) {
|
||||
$params['admin_id'] = $this->auth->id;
|
||||
}
|
||||
$params['status'] = 10;
|
||||
|
|
@ -178,11 +196,11 @@ class Order extends Backend
|
|||
$params['update_time'] = date('Y-m-d H:i:s');
|
||||
|
||||
$result = $this->model->allowField(true)->save($params);
|
||||
if ($params['dispatch_type'] == 2){
|
||||
if ($params['dispatch_type'] == 2) {
|
||||
$this->autoDispatch($this->model);
|
||||
}
|
||||
Db::commit();
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
} catch (ValidateException | PDOException | Exception $e) {
|
||||
Db::rollback();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
|
@ -196,12 +214,12 @@ class Order extends Backend
|
|||
{
|
||||
|
||||
if (!$ids) {
|
||||
if (request()->isPost()){
|
||||
if (request()->isPost()) {
|
||||
$ids = input('id');
|
||||
if (!$ids){
|
||||
if (!$ids) {
|
||||
$this->error('缺少订单ID');
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
$this->error('缺少订单ID');
|
||||
}
|
||||
}
|
||||
|
|
@ -218,18 +236,18 @@ class Order extends Backend
|
|||
$params = input('post.row/a');
|
||||
$params['update_time'] = date('Y-m-d H:i:s');
|
||||
$sources = $this->sources;
|
||||
$sources = array_column($sources,'title','id');
|
||||
$sources = array_column($sources, 'title', 'id');
|
||||
// $data['user_id'] = $this->auth->id;
|
||||
$params['source_shop'] = $sources[$params['source']] ?? null;
|
||||
|
||||
$sources = $this->sources;
|
||||
$items = $this->items;
|
||||
|
||||
$sources = array_column($sources,'title','id');
|
||||
$items = array_column($items,'title','id');
|
||||
$sources = array_column($sources, 'title', 'id');
|
||||
$items = array_column($items, 'title', 'id');
|
||||
|
||||
$params['admin_id'] = ($params['admin_id'] == -1) ? $this->auth->id : $params['admin_id'];
|
||||
if(empty($params['admin_id'])){
|
||||
if (empty($params['admin_id'])) {
|
||||
$params['admin_id'] = $this->auth->id;
|
||||
}
|
||||
$params['source_shop'] = $sources[$params['source']] ?? null;
|
||||
|
|
@ -246,7 +264,7 @@ class Order extends Backend
|
|||
}
|
||||
$area = new \app\admin\model\Area();
|
||||
$area_name = $area->getNameByCode($order->area_id);
|
||||
$order->area_name = str_replace(',','/',$area_name);
|
||||
$order->area_name = str_replace(',', '/', $area_name);
|
||||
// dd($area_name);
|
||||
// 将订单数据传递到视图
|
||||
$this->assign('row', $order);
|
||||
|
|
@ -271,7 +289,7 @@ class Order extends Backend
|
|||
|
||||
$area = new \app\admin\model\Area();
|
||||
$area_name = $area->getNameByCode($order->area_id);
|
||||
$order->area_name = str_replace(',','/',$area_name);
|
||||
$order->area_name = str_replace(',', '/', $area_name);
|
||||
|
||||
// 将订单数据传递到视图
|
||||
$this->assign('row', $order);
|
||||
|
|
@ -280,7 +298,8 @@ class Order extends Backend
|
|||
return $this->fetch();
|
||||
}
|
||||
|
||||
function generateOrderNumber($prefix = 'ORD') {
|
||||
function generateOrderNumber($prefix = 'ORD')
|
||||
{
|
||||
// 获取当前时间戳(精确到毫秒)
|
||||
$timestamp = microtime(true);
|
||||
$date = date('YmdHis', (int)$timestamp); // 格式:YYYYMMDDHHMMSS
|
||||
|
|
@ -293,27 +312,28 @@ class Order extends Backend
|
|||
}
|
||||
|
||||
|
||||
private function autoDispatch($order) {
|
||||
if ($order->dispatch_type != 2){
|
||||
private function autoDispatch($order)
|
||||
{
|
||||
if ($order->dispatch_type != 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$worker_ids = (new Worker())->where('area_id',$order->area_id)
|
||||
->where('status',1)
|
||||
->field(['id','area_id','lng'],'lat')
|
||||
$worker_ids = (new Worker())->where('area_id', $order->area_id)
|
||||
->where('status', 1)
|
||||
->field(['id', 'area_id', 'lng'], 'lat')
|
||||
->column('id');
|
||||
|
||||
$worker_items_ids = (new WorkerItem())
|
||||
->where('item_id',$order->item_id)
|
||||
->whereIn('worker_id',$worker_ids)
|
||||
->field(['worker_id'],'lat')
|
||||
->where('item_id', $order->item_id)
|
||||
->whereIn('worker_id', $worker_ids)
|
||||
->field(['worker_id'], 'lat')
|
||||
->column('worker_id');
|
||||
|
||||
$out_workers = array_intersect($worker_ids,$worker_items_ids);
|
||||
$out_workers = array_intersect($worker_ids, $worker_items_ids);
|
||||
|
||||
$worker_id = $out_workers[0] ?? false;
|
||||
|
||||
if (!$worker_id){
|
||||
if (!$worker_id) {
|
||||
$order->dispatch_type = 1;
|
||||
$order->save();
|
||||
return false;
|
||||
|
|
@ -324,12 +344,12 @@ class Order extends Backend
|
|||
'admin_user' => $this->auth->nickname,
|
||||
'order_id' => $order->id,
|
||||
'type' => 1,
|
||||
'worker_id' =>$worker_id,
|
||||
'worker_id' => $worker_id,
|
||||
'plan_time' => $order->plan_time,
|
||||
'is_receipt' => $order->receive_type == 1
|
||||
];
|
||||
|
||||
$worker = (new Worker())->where('id',$worker_id)->find();
|
||||
$worker = (new Worker())->where('id', $worker_id)->find();
|
||||
$insert ['worker_name'] = $worker['name'];
|
||||
$insert ['worker_tel'] = $worker['tel'];
|
||||
(new OrderDispatch())->allowField(true)->save($insert);
|
||||
|
|
@ -340,7 +360,47 @@ class Order extends Backend
|
|||
}
|
||||
|
||||
|
||||
public function smart(){
|
||||
$this->success(data:Address::smart(request()->get('str')));
|
||||
public function smart()
|
||||
{
|
||||
$this->success(data: Address::smart(request()->get('str')));
|
||||
}
|
||||
|
||||
|
||||
public function reminder($ids = null)
|
||||
{
|
||||
if ($ids) {
|
||||
$order = $this->model->where('id', $ids)->find();
|
||||
}
|
||||
$this->success($order['order_no']);
|
||||
}
|
||||
|
||||
private function filterAreaCodes(array $area_codes)
|
||||
{
|
||||
// 提取所有两位区号
|
||||
$prefix_2_digits = [];
|
||||
foreach ($area_codes as $code) {
|
||||
if (strlen($code) == 2) {
|
||||
$prefix_2_digits[] = $code;
|
||||
}
|
||||
}
|
||||
|
||||
// 过滤数组
|
||||
$filtered_codes = array_filter($area_codes, function ($code) use ($prefix_2_digits) {
|
||||
// 如果是两位区号,直接保留
|
||||
if (strlen($code) == 2) {
|
||||
return true;
|
||||
}
|
||||
// 检查是否有对应的两位前缀,如果有,则排除四位区号
|
||||
foreach ($prefix_2_digits as $prefix) {
|
||||
if (strpos($code, $prefix) === 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 如果没有匹配的两位前缀,则保留
|
||||
return true;
|
||||
});
|
||||
|
||||
// 重新索引数组
|
||||
return array_values($filtered_codes);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
define([], function () {
|
||||
require([], function () {
|
||||
//绑定data-toggle=addresspicker属性点击事件
|
||||
console.log('111');
|
||||
|
||||
$(document).on('click', "[data-toggle='addresspicker']", function () {
|
||||
var that = this;
|
||||
var callback = $(that).data('callback');
|
||||
|
|
@ -10,9 +12,9 @@ define([], function () {
|
|||
var zoom_id = $(that).data("zoom-id") ? $(that).data("zoom-id") : "";
|
||||
var lat = lat_id ? $("#" + lat_id).val() : '';
|
||||
var lng = lng_id ? $("#" + lng_id).val() : '';
|
||||
var city_code = $("#area_name").val();
|
||||
var city_code = $("#area_id").val();
|
||||
var zoom = zoom_id ? $("#" + zoom_id).val() : '';
|
||||
var url = "/addons/address/index/select?abc=1";
|
||||
var url = "/addons/address/index/select?1=1";
|
||||
url += (lat && lng) ? 'lat=' + lat + '&lng=' + lng +
|
||||
(input_id ? "&address=" + $("#" + input_id).val() : "")
|
||||
+(zoom ? "&zoom=" + zoom : "") : ''
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'],
|
|||
},
|
||||
success: function (data) {
|
||||
// console.log(data);
|
||||
// Controller.api.rendertree(data);
|
||||
Controller.api.rendertree(data);
|
||||
},
|
||||
error: function () {
|
||||
console.error("请求失败");
|
||||
|
|
|
|||
|
|
@ -169,6 +169,30 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form','cascader'], function
|
|||
},
|
||||
refresh:true,
|
||||
},
|
||||
{
|
||||
name:"reminder",
|
||||
text:"催单",
|
||||
title:"派单",
|
||||
extend: 'data-toggle="tooltip" data-container="body"',
|
||||
classname: 'btn btn-xs btn-info btn-magic btn-ajax',
|
||||
icon: 'fa fa-bolt',
|
||||
url: 'order/reminder',
|
||||
success: function (data, ret) {
|
||||
if (ret.code === 1){
|
||||
Layer.alert('催单成功');
|
||||
}else {
|
||||
Layer.alert(ret.msg);
|
||||
}
|
||||
return false;
|
||||
//如果需要阻止成功提示,则必须使用return false;
|
||||
//return false;
|
||||
},
|
||||
error: function (data, ret) {
|
||||
console.log(data, ret);
|
||||
Layer.alert(ret.msg);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
],
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user