Files
OMS/app/wap/controller/order.php
2025-12-28 23:13:25 +08:00

1336 lines
48 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
use PHPUnit\Util\Json;
/**
* 订单中心
*/
class wap_ctl_order extends wap_controller
{
var $delivery_link = array();
function __construct($app)
{
parent::__construct($app);
//确认拒单
$this->delivery_link['doRefuse'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'doRefuse'), true);
//立即接单
$this->delivery_link['doConfirm'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'doConfirm'), true);
//发货
$this->delivery_link['doConsign'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'doConsign'), true);
//签收
$this->delivery_link['signPage'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'signPage'), true);
$this->delivery_link['doSign'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'doSign'), true);
$this->delivery_link['uploadimage'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'uploadimage'), true);
$this->delivery_link['sendMsg'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'sendMsg'), true);
$this->delivery_link['showOrderInfo'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'showOrderInfo'), true);
#打印
$this->delivery_link['doPrint'] = app::get('wap')->router()->gen_url(array('ctl'=>'logistics','act'=>'doPrint'), true);
# 补录快递单号
$this->delivery_link['doAddLogiNo'] = app::get('wap')->router()->gen_url(array('ctl'=>'logistics','act'=>'doAddLogiNo'), true);
# 呼叫快递
$this->delivery_link['onlineDelivery'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'onlineDelivery'), true);
# 取消发货
$this->delivery_link['doCancelDelivery'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'doCancelDelivery'), true);
//待发货
$this->delivery_link['orderWaitDelivery'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'index?view=wait_delivery'), true);
// 待揽件
$this->delivery_link['orderWaitPickup'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'index?view=wait_pickup'), true);
// 已签收
$this->delivery_link['orderDelivered'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'index?view=delivered'), true);
//已揽件
$this->delivery_link['orderPicked'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'index?view=picked'), true);
//已取消
$this->delivery_link['orderCancel'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'index?view=cancel'), true);
$this->pagedata['delivery_link'] = $this->delivery_link;
}
/**
* 条件
*
* status 0:未处理 1:打回 2:暂停 3:已发货
*/
function _views_confirm($curr_view)
{
$base_filter = array();
$wapDeliveryObj = app::get('wap')->model('delivery');
$page = intval($_POST['page']) ? intval($_POST['page']) : 0;
$limit = 10;//每页显示数量
$offset = $limit * $page;
$is_super = kernel::single('desktop_user')->is_super();
if(!$is_super)
{
$branchObj = kernel::single('o2o_store_branch');
$branch_ids = $branchObj->getO2OBranchByUser(true);
if(empty($branch_ids))
{
$this->pagedata['link_url'] = $this->delivery_link['order_index'];
$this->pagedata['error_msg'] = '操作员没有管辖的仓库';
echo $this->fetch('auth_error.html');
exit;
}
$base_filter['branch_id'] = $branch_ids;
}
$dly_overtime = 0;
//超时订单
if($curr_view == 'overtime')
{
//履约超时时间设置(分钟)
$minute = app::get('o2o')->getConf('o2o.delivery.dly_overtime');
$minute = intval($minute);
if($minute)
{
$second = $minute * 60;
$dly_overtime = time() - $second;//现在时间 减去 履约时间
}
}
//menu
$sub_menu = array(
'all' => array('label'=>app::get('base')->_('订单查看'), 'filter'=>array('status'=>array(0, 3), 'confirm'=>array(1, 3)), 'href'=>$this->delivery_link['order_index']),
'confirm' => array('label'=>app::get('base')->_('订单确认') ,'filter'=>array('status'=>0, 'confirm'=>3), 'href'=>$this->delivery_link['order_confirm']),
'consign' => array('label'=>app::get('base')->_('订单发货') ,'filter'=>array('status'=>0, 'confirm'=>1), 'href'=>$this->delivery_link['order_consign']),
'sign' => array('label'=>app::get('base')->_('签收核销') ,'filter'=>array('status'=>3, 'confirm'=>1, 'process_status'=>7, 'is_received'=>1), 'href'=>$this->delivery_link['order_sign']),
'overtime' => array('label'=>app::get('base')->_('超时订单') ,'filter'=>array('status'=>0, 'confirm'=>array(1, 3), 'create_time|lthan'=>$dly_overtime), 'href'=>$this->delivery_link['overtimeOrders']),
);
foreach($sub_menu as $k=>$v)
{
//Ajax加载下一页数据,只处理本页
if($_POST['flag'] == 'ajax' && $curr_view != $k)
{
continue;
}
if (!IS_NULL($v['filter']))
{
$v['filter'] = array_merge($v['filter'], $base_filter);
}
//搜索条件
if($_POST['sel_type'] && $_POST['sel_keywords'])
{
switch ($_POST['sel_type'])
{
case 'delivery_bn':
$v['filter']['delivery_bn'] = htmlspecialchars(trim($_POST['sel_keywords']));
break;
case 'order_bn':
$v['filter']['order_bn'] = htmlspecialchars(trim($_POST['sel_keywords']));
break;
case 'ship_mobile':
$v['filter']['ship_mobile'] = htmlspecialchars(trim($_POST['sel_keywords']));
break;
case 'ship_name':
$v['filter']['ship_name'] = htmlspecialchars(trim($_POST['sel_keywords']));
break;
}
}
$count = $wapDeliveryObj->count($v['filter']);
$sub_menu[$k]['filter'] = $v['filter'] ? $v['filter'] : null;
$sub_menu[$k]['count'] = $count;
$sub_menu[$k]['pageSize'] = ceil($count / $limit);
$sub_menu[$k]['offset'] = $offset;
$sub_menu[$k]['limit'] = $limit;
$sub_menu[$k]['orderby'] = 'delivery_id desc';#排序
if($k == $curr_view){
$sub_menu[$k]['curr_view'] = true;
}else{
$sub_menu[$k]['curr_view'] = false;
}
}
return $sub_menu;
}
/**
* 条件
*
* status 0:未处理 1:打回 2:暂停 3:已发货
*/
function _views_tab($curr_view)
{
$base_filter = array();
$wapDeliveryObj = app::get('wap')->model('delivery');
$page = intval($_POST['page']) ? intval($_POST['page'])-1 : 0;
$limit = $_POST['pageSize'] ? $_POST['pageSize'] : 10;//每页显示数量
$offset = $limit * $page;
$is_super = kernel::single('desktop_user')->is_super();
if(!$is_super)
{
$branchObj = kernel::single('o2o_store_branch');
$branch_ids = $branchObj->getO2OBranchByUser(true);
if(empty($branch_ids))
{
$this->pagedata['link_url'] = $this->delivery_link['order_index'];
$this->pagedata['error_msg'] = '操作员没有管辖的仓库';
echo $this->fetch('auth_error.html');
exit;
}
$base_filter['branch_id'] = $branch_ids;
$storeMdl = app::get("o2o")->model("store");
$storeList = $storeMdl->getList("branch_id,name", array("branch_id" => $branch_ids));
$store_list = array_column($storeList, "name", "branch_id");
$this->pagedata['store_list'] = $store_list;
}
//menu
$sub_menu = array(
'all' => array('label' => app::get('base')->_('全部'), 'filter' => array(), 'href' => $this->delivery_link['order_index']),
'wait_delivery' => array('label' => app::get('base')->_('待发货'), 'filter' => array('status' => 0), 'href' => $this->delivery_link['orderWaitDelivery']),
'picked' => array('label' => app::get('base')->_('待签收'), 'filter' => array('status' => 3, 'is_received' => array('1')), 'href' => $this->delivery_link['orderPicked']),
'delivered' => array('label' => app::get('base')->_('已签收'), 'filter' => array('status' => 3, 'is_received' => array('2')), 'href' => $this->delivery_link['orderDelivered']),
'cancel' => array('label' => app::get('base')->_('已取消'), 'filter' => array('status' => 1), 'href' => $this->delivery_link['orderCancel']),
);
foreach($sub_menu as $k=>$v)
{
//Ajax加载下一页数据,只处理本页
if($_POST['flag'] == 'ajax' && $curr_view != $k)
{
continue;
}
if (!IS_NULL($v['filter']))
{
$v['filter'] = array_merge($v['filter'], $base_filter);
}
//搜索条件
if($_POST['sel_type'] && $_POST['sel_keywords'])
{
switch ($_POST['sel_type'])
{
case 'order_bn':
$v['filter']['order_bn|foot'] = htmlspecialchars(trim($_POST['sel_keywords']));
break;
case 'ship_mobile':
$v['filter']['ship_mobile|has'] = htmlspecialchars(trim($_POST['sel_keywords']));
break;
case "channel":
$shop = app::get('ome')->model('shop')->getList('shop_id',array('shop_type'=>$_POST['sel_keywords']));
$shopIds = array_column($shop,'shop_id');
$v['filter']['shop_id'] = $shopIds;
break;
}
}
$count = 0;
if ($k == 'wait_delivery' || $k == 'picked') {
$count = $wapDeliveryObj->count($v['filter']);
}
$sub_menu[$k]['filter'] = $v['filter'] ? $v['filter'] : null;
$sub_menu[$k]['count'] = $count;
$sub_menu[$k]['pageSize'] = ceil($count / $limit);
$sub_menu[$k]['offset'] = $offset;
$sub_menu[$k]['limit'] = $limit;
if ($curr_view == 'wait_delivery') {
$sub_menu[$k]['orderby'] = 'order_createtime asc'; #排序
} else {
$sub_menu[$k]['orderby'] = 'order_createtime desc'; #排序
}
if($k == $curr_view){
$sub_menu[$k]['curr_view'] = true;
}else{
$sub_menu[$k]['curr_view'] = false;
}
}
return $sub_menu;
}
/**
* 获取CreateTimeByDateType
* @param mixed $filter filter
* @return mixed 返回结果
*/
public function getCreateTimeByDateType($filter)
{
$dateType = $_POST['dateType'];
switch ($dateType) {
case 'today':
$filter['create_time|than'] = strtotime(date('Y-m-d'));
$filter['create_time|lthan'] = time();
break;
case 'yesterday':
$filter['create_time|than'] = strtotime(date('Y-m-d', strtotime('-1 day')));
$filter['create_time|lthan'] = strtotime(date('Y-m-d 23:59:59', strtotime('-1 day')));
break;
case 'month':
$filter['create_time|than'] = strtotime(date('Y-m-01'));
$filter['create_time|lthan'] = time();
break;
case 'custom':
if ($_POST['start_time']) {
$filter['create_time|than'] = strtotime($_POST['start_time']);
}
if ($_POST['end_time']) {
$filter['create_time|lthan'] = strtotime($_POST['end_time'] . ' 23:59:59');
}
break;
}
$this->pagedata['dateType'] = $_POST['dateType'] ? $_POST['dateType'] : 'custom';
return $filter;
}
/**
* 订单查看
*/
function index()
{
if ($_GET['view']) {
$this->delivery_type = $_GET['view'];
$sub_menu = $this->_views_tab($this->delivery_type);
} else {
$this->delivery_type = 'all';
$sub_menu = $this->_views_tab($this->delivery_type);
}
$this->pagedata['sub_menu'] = $sub_menu;
$filter = $sub_menu[$this->delivery_type]['filter'];
$filter = $this->getCreateTimeByDateType($filter);
$title = $sub_menu[$this->delivery_type]['label'];
$offset = $sub_menu[$this->delivery_type]['offset'];
$limit = $sub_menu[$this->delivery_type]['limit'];
#仓库对应_发货单列表
$wapDeliveryLib = kernel::single('wap_delivery');
$dataList = $wapDeliveryLib->getList($filter, $offset, $limit, $sub_menu[$this->delivery_type]['orderby'], $this->delivery_type);
$this->pagedata['title'] = $title;
$this->pagedata['dataList'] = $dataList;
$this->pagedata['pageSize'] = $sub_menu[$this->delivery_type]['pageSize'];
$this->pagedata['link_url'] = $sub_menu[$this->delivery_type]['href'];
//baidu map button show or not
//$baidu_map_show = app::get('o2o')->getConf('o2o.baidumap.show');
if($baidu_map_show=="true"){
//$this->pagedata["baidu_map_show"] = true;
}
$this->pagedata['wait_receiver_url'] = $this->delivery_link['orderPicked'];
$this->pagedata['do_sign_url'] = $this->delivery_link['doSign'];
$this->pagedata['uploadimage'] = $this->delivery_link['uploadimage'];
$this->pagedata['sign_url'] = $this->delivery_link['orderDelivered'];
if(isset($_POST['page']))
{
//Ajax加载更多
$this->display('order/order_list_more.html');
}
else
{
$corpList = kernel::database()->select("select channel_id,type,name,tmpl_type from sdb_ome_dly_corp where disabled='false' and type not in ('o2o_ship','o2o_pickup')");
$this->pagedata['corpList'] = json_encode($corpList);
$shopTypeList = app::get('ome')->model('shop')->getList('shop_type');
$shopTypeListMap = ome_shop_type::get_shop_type();
$channelListTmp = array();
foreach($shopTypeList as $k=>$v){
if ($v['shop_type'] && $shopTypeListMap[$v['shop_type']]) {
$channelListTmp[$v['shop_type']] = $shopTypeListMap[$v['shop_type']];
}
}
$channel = array();
foreach($channelListTmp as $k=>$v){
$channel[] = array(
'value' => $k,
'label' => $v
);
}
$this->pagedata['channelList'] = $channel;
//门店核单拒绝原因
$reasonObj = app::get('o2o')->model('refuse_reason');
$refuse_reasons = $reasonObj->getList('*', array('disabled'=>'false'), 0, 100);
$this->pagedata['refuse_reasons'] = $refuse_reasons;
$this->display('order/order_list.html');
}
}
function getCorpList(){
$store_id = $_POST['store_id'];
$storeObj = app::get('o2o')->model('store');
$storeInfo = $storeObj->dump(array('store_id'=>$store_id), 'is_default_month_accoun');
$storeCorpList = $storeObj->db->select("SELECT * FROM sdb_o2o_store_corp WHERE store_id=" . $store_id);
$corpCodeArr = array();
$default_corp_code = '';
if ($storeCorpList) {
foreach($storeCorpList as $row) {
$corpCodeArr[] = $row['corp_code'];
if ($row['is_default'] == '1') {
// 默认的物流公司
$default_corp_code = $row['corp_code'];
}
$defaultCorp[$row['corp_code']]['product_type'] = $row['corp_product'];
$defaultCorp[$row['corp_code']]['corp_month_account'] = $row['corp_month_account'];
if ($row['corp_month_account_default'] == '小镇') {
$defaultCorp[$row['corp_code']]['default_corp_month_account'] = 'default';
} else {
$defaultCorp[$row['corp_code']]['default_corp_month_account'] = $row['corp_month_account'];
}
}
}
if ($corpCodeArr) {
// 获取物流公司
$corpList = kernel::database()->select("select channel_id,type,name,tmpl_type from sdb_ome_dly_corp where disabled='false' and tmpl_type='electron' and `type` in ('" . implode("','", $corpCodeArr) . "')");
foreach ($corpList as $k => $row) {
$product_type_list = kernel::single('logisticsmanager_waybill_func')->corpCode2ChannelService();
$corpList[$k]['product_type'] = $product_type_list[$row['type']]['product_type'];
}
} else {
$corpList = null;
}
echo json_encode(array('rsp' => 'succ', 'storeInfo' => $storeInfo, 'corpList' => $corpList, 'default_corp_code' => $default_corp_code, 'default_corp' => $defaultCorp));exit;
}
function decryptAddress()
{
$orderId = $_POST['order_id'];
$type = $_POST['action'];
$field = 'order_bn,shop_id,shop_type,ship_tel,ship_mobile,ship_addr,ship_name,ship_area';
$data = app::get('ome')->model('orders')->db_dump(array('order_id' => $orderId), $field);
if (!$data) {
echo json_encode(array('rsp' => 'fail', 'msg' => '订单号不存在'));exit;
}
if ($data['shop_type'] == 'luban') {
$jyInfo = kernel::single('ome_bill_label')->getBillLabelInfo($orderId, 'order', 'XJJY');
if ($jyInfo) {
echo json_encode(array('rsp' => 'fail', 'msg' => '中转订单请联系客服修改直邮后再进行操作'));exit;
}
}
// mainland:北京/顺义区/后沙峪地区:3268
$ship_area_str = '';
if ($data['ship_area']) {
$ship_area = explode(":", $data['ship_area']);
$ship_area_str = str_replace("/", "", $ship_area[1]);
}
if ($type == 'show') {
// 解密
$decrypt_data = kernel::single('ome_security_router', $data['shop_type'])->decrypt(array(
'ship_tel' => $data['ship_tel'],
'ship_mobile' => $data['ship_mobile'],
'ship_addr' => $data['ship_addr'],
'shop_id' => $data['shop_id'],
'order_bn' => $data['order_bn'],
'ship_name' => $data['ship_name'],
), 'order', true);
if ($decrypt_data['rsp'] && $decrypt_data['rsp'] == 'fail') {
$errArr = json_decode($decrypt_data['err_msg'], true);
$msg = $errArr['data']['decrypt_infos'][0]['err_msg'] ? $errArr['data']['decrypt_infos'][0]['err_msg'] : '解密失败,订单已关闭或者解密额度不足';
$result = [
'rsp' => 'fail',
'err_data' => $decrypt_data,
'msg' => $msg
];
exit(json_encode($result, JSON_UNESCAPED_UNICODE));
}
$res = [
'rsp' => 'succ',
'data' => [
'ship_name' => $decrypt_data['ship_name'],
'ship_tel' => $decrypt_data['ship_tel'],
'ship_mobile' => $decrypt_data['ship_mobile'],
'ship_addr' => $ship_area_str.$decrypt_data['ship_addr']
]
];
} else {
$res = [
'rsp' => 'succ',
'data' => [
'ship_name' => $data['ship_name'],
'ship_tel' => $data['ship_tel'],
'ship_mobile' => $data['ship_mobile'],
'ship_addr' => $ship_area_str.$data['ship_addr']
]
];
}
echo json_encode($res);exit;
}
/**
* 订单确认
*/
function confirm()
{
$this->delivery_type = 'confirm';
$sub_menu = $this->_views_confirm($this->delivery_type);
$filter = $sub_menu[$this->delivery_type]['filter'];
$title = $sub_menu[$this->delivery_type]['label'];
$offset = $sub_menu[$this->delivery_type]['offset'];
$limit = $sub_menu[$this->delivery_type]['limit'];
#仓库对应_发货单列表
$wapDeliveryLib = kernel::single('wap_delivery');
$dataList = $wapDeliveryLib->getList($filter, $offset, $limit, $sub_menu[$this->delivery_type]['orderby'], $this->delivery_type);
$this->pagedata['title'] = $title;
$this->pagedata['dataList'] = $dataList;
$this->pagedata['pageSize'] = $sub_menu[$this->delivery_type]['pageSize'];
$this->pagedata['link_url'] = $sub_menu[$this->delivery_type]['href'];
//baidu map button show or not
$baidu_map_show = app::get('o2o')->getConf('o2o.baidumap.show');
if($baidu_map_show=="true"){
$this->pagedata["baidu_map_show"] = true;
}
if($offset > 0)
{
//Ajax加载更多
$this->display('order/order_list_more.html');
}
else
{
//门店核单拒绝原因
$reasonObj = app::get('o2o')->model('refuse_reason');
$refuse_reasons = $reasonObj->getList('*', array('disabled'=>'false'), 0, 100);
$this->pagedata['refuse_reasons'] = $refuse_reasons;
$this->display('order/order_list.html');
}
}
/**
* 订单发货
*/
function consign()
{
$this->delivery_type = 'consign';
$sub_menu = $this->_views_confirm($this->delivery_type);
$filter = $sub_menu[$this->delivery_type]['filter'];
$title = $sub_menu[$this->delivery_type]['label'];
$offset = $sub_menu[$this->delivery_type]['offset'];
$limit = $sub_menu[$this->delivery_type]['limit'];
#仓库对应_发货单列表
$wapDeliveryLib = kernel::single('wap_delivery');
$dataList = $wapDeliveryLib->getList($filter, $offset, $limit, $sub_menu[$this->delivery_type]['orderby'], $this->delivery_type);
$this->pagedata['title'] = $title;
$this->pagedata['dataList'] = $dataList;
$this->pagedata['pageSize'] = $sub_menu[$this->delivery_type]['pageSize'];
$this->pagedata['link_url'] = $sub_menu[$this->delivery_type]['href'];
//baidu map button show or not
$baidu_map_show = app::get('o2o')->getConf('o2o.baidumap.show');
if($baidu_map_show=="true"){
$this->pagedata["baidu_map_show"] = true;
}
if($offset > 0)
{
//Ajax加载更多
$this->display('order/order_list_more.html');
}
else
{
$this->display('order/order_list.html');
}
}
/**
* 确认拒单
*
* @param intval $delivery_id
* @return json
*/
function doRefuse()
{
$delivery_id = intval($_POST['delivery_id']);
$redirect_url = ($_POST['backUrl'] ? $_POST['backUrl'] : $this->delivery_link['order_confirm']);
if(empty($delivery_id))
{
echo json_encode(array('res'=>'error', 'msg'=>'无效操作'));
exit;
}
$wapDeliveryObj = app::get('wap')->model('delivery');
$deliveryInfo = $wapDeliveryObj->dump(array('delivery_id'=>$delivery_id), '*');
if(empty($deliveryInfo))
{
echo json_encode(array('res'=>'error', 'msg'=>'没有相关发货单'));
exit;
}
elseif($deliveryInfo['status'] > 0 || $deliveryInfo['confirm'] != 3)
{
echo json_encode(array('res'=>'error', 'msg'=>'该发货单无法继续操作'));
exit;
}
$dlyProcessLib = kernel::single('wap_delivery_process');
//组织参数
$params = array_merge(array('delivery_id'=>$delivery_id), $deliveryInfo);
$refuse_reason_id = intval($_POST['refuse_reason_id']);
if(empty($refuse_reason_id))
{
echo json_encode(array('res'=>'error', 'msg'=>'请选择拒单理由'));
exit;
}
//拒绝原因
$params['reason_id'] = $refuse_reason_id;
if($dlyProcessLib->refuse($params)){
//task任务更新统计数据
$wapDeliveryLib = kernel::single('wap_delivery');
$wapDeliveryLib->taskmgr_statistic('refuse');
echo json_encode(array('res'=>'succ', 'status'=>'已拒绝', 'msg'=>'已拒绝成功'));
exit;
}else{
echo json_encode(array('res'=>'error', 'msg'=>'门店拒绝失败'));
exit;
}
}
/**
* 立即接单
*
* @return json
*/
function doConfirm()
{
$delivery_id = intval($_POST['delivery_id']);
$redirect_url = ($_POST['backUrl'] ? $_POST['backUrl'] : $this->delivery_link['order_confirm']);
if(empty($delivery_id))
{
echo json_encode(array('res'=>'error', 'msg'=>'无效操作'));
exit;
}
$wapDeliveryObj = app::get('wap')->model('delivery');
$deliveryInfo = $wapDeliveryObj->dump(array('delivery_id'=>$delivery_id), '*');
if(empty($deliveryInfo))
{
echo json_encode(array('res'=>'error', 'msg'=>'没有相关发货单'));
exit;
}
elseif($deliveryInfo['status'] > 0 || $deliveryInfo['confirm'] != 3)
{
echo json_encode(array('res'=>'error', 'msg'=>'该发货单无法继续操作'));
exit;
}
$dlyProcessLib = kernel::single('wap_delivery_process');
//组织参数
$params = array_merge(array('delivery_id'=>$delivery_id), $deliveryInfo);
if($dlyProcessLib->accept($params)){
//task任务更新统计数据
$wapDeliveryLib = kernel::single('wap_delivery');
$wapDeliveryLib->taskmgr_statistic('confirm');
echo json_encode(array('res'=>'succ', 'status'=>'已确认', 'msg'=>'订单已接收', 'delivery_bn'=>$deliveryInfo['delivery_bn']));
exit;
}else{
echo json_encode(array('res'=>'error', 'msg'=>'门店确认失败'));
exit;
}
}
/**
* 获取ConfirmDeliveryItems
* @return mixed 返回结果
*/
public function getConfirmDeliveryItems(){
$delivery_id = $_POST['delivery_id'];
#仓库对应_发货单列表
$wapDeliveryLib = kernel::single('wap_delivery');
$deliveryObj = app::get('wap')->model('delivery');
$delivery = $deliveryObj->dump(array('delivery_id' => $delivery_id), 'delivery_id,delivery_bn,outer_delivery_bn,status');
$delivery_items = $wapDeliveryLib->getDeliveryItemList($delivery['outer_delivery_bn']);
echo json_encode($delivery_items);exit;
}
/**
* 立即发货
*
* @return json
*/
function doConsign()
{
$delivery_id = intval($_POST['delivery_id']);
$redirect_url = ($_POST['backUrl'] ? $_POST['backUrl'] : $this->delivery_link['order_consign']);
if(empty($delivery_id))
{
echo json_encode(array('res'=>'error', 'msg'=>'无效操作'));
exit;
}
$filter = array('delivery_id'=>$delivery_id);
#管理员对应仓库
$is_super = kernel::single('desktop_user')->is_super();
if(!$is_super){
$branchObj = kernel::single('o2o_store_branch');
$branch_ids = $branchObj->getO2OBranchByUser(true);
if(empty($branch_ids))
{
$error_msg = '操作员没有管辖的仓库';
echo json_encode(array('res'=>'error', 'msg'=>$error_msg));
exit;
}
$filter['branch_id'] = $branch_ids;
}
$wapDeliveryObj = app::get('wap')->model('delivery');
$deliveryInfo = $wapDeliveryObj->dump($filter, '*');
$deliveryInfo['status'] = intval($deliveryInfo['status']);
if(empty($deliveryInfo))
{
$error_msg = '没有此发货单或没仓库权限,请检查';
}
elseif($deliveryInfo['confirm'] != 1)
{
//$error_msg = "该发货单还未确认,不能进行操作";
if($deliveryInfo['confirm'] == 2){
$error_msg = "该发货单已被拒绝,不能进行操作";
}
}
elseif($deliveryInfo['status'] !== 0)
{
$error_msg = '该发货单状态不正确,不能进行操作';
if($deliveryInfo['status'] == 3){
$error_msg = '该发货单已发货,不能进行操作'.$deliveryInfo['status'];
}
}
//错误提示
if($error_msg)
{
echo json_encode(array('res'=>'error', 'msg'=>$error_msg));
exit;
}
$deliveryInfo['order_number'] = 1;
//执行发货
$dlyProcessLib = kernel::single('wap_delivery_process');
$res = $dlyProcessLib->consign($deliveryInfo);
if($res){
//task任务更新统计数据
$wapDeliveryLib = kernel::single('wap_delivery');
$wapDeliveryLib->taskmgr_statistic('consign');
echo json_encode(array('res'=>'succ', 'msg'=>'发货成功'));
exit;
}else {
echo json_encode(array('res'=>'error', 'msg'=>'发货失败'));
exit;
}
}
/**
* 重发提货校验码
*
* @return json
*/
function sendMsg()
{
//开启销单校验码才能重新生成校验码
if(app::get('o2o')->getConf('o2o.delivery.confirm.code') != "true"){
echo json_encode(array('res'=>'error', 'msg'=>'请开启销单校验码'));
exit;
}
$delivery_bn = $_POST['delivery_bn'];
if(empty($delivery_bn))
{
echo json_encode(array('res'=>'error', 'msg'=>'无效操作'));
exit;
}
$wapDeliveryObj = app::get('wap')->model('delivery');
$deliveryInfo = $wapDeliveryObj->dump(array('delivery_bn'=>$delivery_bn), '*');
if(empty($deliveryInfo))
{
echo json_encode(array('res'=>'error', 'msg'=>'没有相关发货单'));
exit;
}
elseif($deliveryInfo['status'] != 3 || $deliveryInfo['confirm'] != 1 || $deliveryInfo['process_status'] != 7)
{
echo json_encode(array('res'=>'error', 'msg'=>'发货单还没有发货'));
exit;
}
elseif($deliveryInfo['is_received'] == 2)
{
echo json_encode(array('res'=>'error', 'msg'=>'发货单已签收完成'));
exit;
}
$dlyProcessLib = kernel::single('wap_delivery_process');
$res = $dlyProcessLib->reSendMsg($deliveryInfo);
if($res)
{
echo json_encode(array('res'=>'succ', 'msg'=>'提货校验码发送成功'));
exit;
}
else
{
echo json_encode(array('res'=>'error', 'msg'=>'提货校验码发送失败'));
exit;
}
}
/**
* 显示订单详情
*/
function showOrderInfo()
{
$filehtml = 'order/sign_order_info.html';
$delivery_bn = $_POST['delivery_bn'];
$flag = $_POST['flag'];
$error_msg = '';
//先检查发货单号 和 管理员对应仓库
if(empty($delivery_bn))
{
$error_msg = '请填写发货单号';
$this->pagedata['error_msg'] = $error_msg;
$this->display($filehtml);
exit;
}
$filter = array('delivery_bn'=>$delivery_bn);
#管理员对应仓库
$is_super = kernel::single('desktop_user')->is_super();
if(!$is_super)
{
$branchObj = kernel::single('o2o_store_branch');
$branch_ids = $branchObj->getO2OBranchByUser(true);
if(empty($branch_ids)){
$error_msg = '操作员没有管辖的仓库';
$this->pagedata['error_msg'] = $error_msg;
$this->display($filehtml);
exit;
}
$filter['branch_id'] = $branch_ids;
}
$wapDeliveryObj = app::get('wap')->model('delivery');
$deliveryInfo = $wapDeliveryObj->dump($filter, '*');
if(empty($deliveryInfo))
{
$error_msg = '没有此发货单,请检查';
$this->pagedata['error_msg'] = $error_msg;
$this->display($filehtml);
exit;
}
#获取发货仓库对应的门店店铺信息
$wapDeliveryLib = kernel::single('wap_delivery');
$dlyProcessLib = kernel::single('wap_delivery_process');
$branchShopInfo = $wapDeliveryLib->getBranchShopInfo($deliveryInfo['branch_id']);
$deliveryInfo['order_number'] = 1;
#合并数据
$result = array_merge($deliveryInfo, $branchShopInfo);
unset($data['wms_id'], $data['store_id'], $data['area'], $data['confirm'], $data['branch_id']);
//显示发货单信息
$result['dly_status'] = $wapDeliveryLib->formatDeliveryStatus('status', $result['status']);
$result['dly_confirm'] = $wapDeliveryLib->formatDeliveryStatus('confirm', $result['confirm']);
#获取订单信息
$result['order_info'] = $wapDeliveryLib->get_order_info($result['order_bn'], $result['is_cod']);
#获取发货单明细
$result['delivery_items'] = $wapDeliveryLib->getDeliveryItemList($result['outer_delivery_bn']);
#履约超时时间
$result['dly_overtime'] = $wapDeliveryLib->getDeliveryOvertime($result['create_time']);
//百度地图
$baidu_map_show = app::get('o2o')->getConf('o2o.baidumap.show');
if($baidu_map_show == 'true'){
$result['show_map'] = true;
}
$this->pagedata['dlyinfo'] = $result;
$this->display($filehtml);
exit;
}
/**
* 签收核销列表
*/
function sign()
{
$this->delivery_type = 'sign';
$sub_menu = $this->_views_confirm($this->delivery_type);
$filter = $sub_menu[$this->delivery_type]['filter'];
$title = $sub_menu[$this->delivery_type]['label'];
$offset = $sub_menu[$this->delivery_type]['offset'];
$limit = $sub_menu[$this->delivery_type]['limit'];
#仓库对应_发货单列表
$wapDeliveryLib = kernel::single('wap_delivery');
$dataList = $wapDeliveryLib->getList($filter, $offset, $limit, $sub_menu[$this->delivery_type]['orderby'], $this->delivery_type);
$this->pagedata['title'] = $title;
$this->pagedata['dataList'] = $dataList;
$this->pagedata['pageSize'] = $sub_menu[$this->delivery_type]['pageSize'];
$this->pagedata['link_url'] = $sub_menu[$this->delivery_type]['href'];
//baidu map button show or not
$baidu_map_show = app::get('o2o')->getConf('o2o.baidumap.show');
if($baidu_map_show=="true"){
$this->pagedata["baidu_map_show"] = true;
}
if($offset > 0)
{
//Ajax加载更多
$this->display('order/order_list_more.html');
}
else
{
$this->display('order/order_list.html');
}
}
/**
* 核销页面
*/
function signPage()
{
$wapDeliveryObj = app::get('wap')->model('delivery');
$delivery_id = intval($_GET['delivery_id']);
//发货单
if($delivery_id)
{
$deliveryInfo = $wapDeliveryObj->dump(array('delivery_id'=>$delivery_id), '*');
}
$this->pagedata['deliveryInfo'] = $deliveryInfo;
//销单校验码开关 关闭状态不显示相关校验码input/button
if(app::get('o2o')->getConf('o2o.delivery.confirm.code') == "true"){
$this->pagedata["code_html_show"] = true;
}
$this->display('order/sign.html');
}
/**
* 最终签收
*
* @return json
*/
function doSign()
{
$delivery_id = $_POST['delivery_id'];
$flag = $_POST['flag'];
$error_msg = '';
//先检查发货单号 和 管理员对应仓库
if(empty($delivery_id))
{
$error_msg = '请填写发货单号';
echo json_encode(array('error'=>true, 'message'=>$error_msg, 'redirect'=>null));
exit;
}
//[防并发]防止重复点击
$cacheKeyName = sprintf("do_delivery_%s", $_POST['delivery_id']);
$cacheData = cachecore::fetch($cacheKeyName);
if($cacheData !== false) {
echo json_encode(array('res'=>'error', 'msg'=>'请勿重复操作'));
exit;
}
//[防并发]判断重复请求(3秒之内不能重复)
cachecore::store($cacheKeyName, date('YmdHis', time()), 3);
$filter = array('delivery_id'=>$delivery_id);
#管理员对应仓库
$is_super = kernel::single('desktop_user')->is_super();
if(!$is_super){
$branchObj = kernel::single('o2o_store_branch');
$branch_ids = $branchObj->getO2OBranchByUser(true);
if(empty($branch_ids)){
$error_msg = '操作员没有管辖的仓库';
echo json_encode(array('res'=>'error', 'message'=>$error_msg, 'redirect'=>null));
exit;
}
$filter['branch_id'] = $branch_ids;
}
$wapDeliveryObj = app::get('wap')->model('delivery');
$deliveryInfo = $wapDeliveryObj->dump($filter, '*');
if(empty($deliveryInfo))
{
$error_msg = '没有此发货单,请检查';
}
elseif($deliveryInfo['status'] != 3 || $deliveryInfo['confirm'] != 1 || $deliveryInfo['process_status'] != 7)
{
$error_msg = '发货单还没有发货';
}
elseif($deliveryInfo['is_received'] == 2)
{
$error_msg = '发货单已签收完成';
}
//错误提示
if($error_msg)
{
echo json_encode(array('res'=>'error', 'msg'=>$error_msg, 'redirect'=>null));
exit;
}
$deliveryInfo['order_number'] = 1;
if(count($_FILES['deliveryImage']['tmp_name'])>3){
echo json_encode(array('res'=>'error','msg'=>'最多上传3张图片'));
exit;
}
//上传图片
$post = file_get_contents('php://input');
$post = json_decode($post, true);
$msg = '';
if(!$_FILES['deliveryImage']){
echo json_encode(array('res'=>'error', 'msg'=>'请上传配送单图片'));
exit;
}
$deliveryImage = [];
// 获取图片模型
$imageModel = app::get('image')->model('image');
//上传并保存图片
if($_FILES['deliveryImage']){
$file_obj = app::get("base")->model("files");
$fileList = kernel::single('base_storager');
foreach($_FILES['deliveryImage']['tmp_name'] as $k => $v){
$img = array(
'name' => $v,
'full_path' => $_FILES['deliveryImage']['full_path'][$k],
'type' => $_FILES['deliveryImage']['type'][$k],
'tmp_name' => $_FILES['deliveryImage']['tmp_name'][$k],
'error' => $_FILES['deliveryImage']['error'][$k],
'size' => $_FILES['deliveryImage']['size'][$k],
);
$rs = kernel::single('wap_deliveryimg')->uploadImage($delivery_id, $img['tmp_name'], $img['name']);
if($rs['error']){
echo json_encode(array('res'=>'error', 'msg'=>$rs['error']));
exit;
}
}
}
//执行签收
$dlyProcessLib = kernel::single('wap_delivery_process');
$res = $dlyProcessLib->sign($deliveryInfo);
if($res){
echo json_encode(array('res'=>'succ', 'msg'=>'操作成功'));
exit;
}else {
echo json_encode(array('res'=>'error', 'msg'=>'操作失败 '.$msg));
exit;
}
}
function uploadimage()
{
$delivery_id = $_POST['delivery_id'];
$flag = $_POST['flag'];
$error_msg = '';
//先检查发货单号 和 管理员对应仓库
if(empty($delivery_id))
{
$error_msg = '请填写发货单号';
echo json_encode(array('res'=>'error', 'message'=>$error_msg, 'redirect'=>null));
exit;
}
//[防并发]防止重复点击
$cacheKeyName = sprintf("do_delivery_%s", $_POST['delivery_id']);
$cacheData = cachecore::fetch($cacheKeyName);
if($cacheData !== false) {
echo json_encode(array('res'=>'error', 'msg'=>'请勿重复操作'));
exit;
}
//[防并发]判断重复请求(3秒之内不能重复)
cachecore::store($cacheKeyName, date('YmdHis', time()), 3);
$filter = array('delivery_id'=>$delivery_id);
#管理员对应仓库
$is_super = kernel::single('desktop_user')->is_super();
if(!$is_super){
$branchObj = kernel::single('o2o_store_branch');
$branch_ids = $branchObj->getO2OBranchByUser(true);
if(empty($branch_ids)){
$error_msg = '操作员没有管辖的仓库';
echo json_encode(array('res'=>'error', 'message'=>$error_msg, 'redirect'=>null));
exit;
}
$filter['branch_id'] = $branch_ids;
}
$wapDeliveryObj = app::get('wap')->model('delivery');
$deliveryInfo = $wapDeliveryObj->dump($filter, '*');
if(empty($deliveryInfo))
{
$error_msg = '没有此发货单,请检查';
}elseif($deliveryInfo['is_received'] != 2)
{
$error_msg = '发货单没有签收';
}
$wap_delivery_id = $deliveryInfo['delivery_id'];
//
$wapdeliveryimages = kernel::single('wap_deliveryimg')->getwapdeliveryImages($wap_delivery_id);
if(count($wapdeliveryimages)<=0){
$error_msg = '请上传签收图片';
}
if(count($wapdeliveryimages)>3){
$error_msg = '签收图片限定三张';
}
if((count($wapdeliveryimages)+count($_FILES['deliveryImage']['tmp_name']))>3){
$error_msg = '签收图片超过三张';
}
//错误提示
if($error_msg)
{
echo json_encode(array('res'=>'error','msg'=>$error_msg, 'redirect'=>null));
exit;
}
$deliveryInfo['order_number'] = 1;
//上传图片
$post = file_get_contents('php://input');
$post = json_decode($post, true);
$msg = '';
if(!$_FILES['deliveryImage']){
echo json_encode(array('res'=>'error', 'msg'=>'请上传配送单图片'));
exit;
}
$deliveryImage = [];
$imageModel = app::get('image')->model('image');
//上传并保存图片
if($_FILES['deliveryImage']){
$file_obj = app::get("base")->model("files");
$fileList = kernel::single('base_storager');
foreach($_FILES['deliveryImage']['tmp_name'] as $k => $v){
$img = array(
'name' => $v,
'full_path' => $_FILES['deliveryImage']['full_path'][$k],
'type' => $_FILES['deliveryImage']['type'][$k],
'tmp_name' => $_FILES['deliveryImage']['tmp_name'][$k],
'error' => $_FILES['deliveryImage']['error'][$k],
'size' => $_FILES['deliveryImage']['size'][$k],
);
$rs = kernel::single('wap_deliveryimg')->uploadImage($delivery_id, $img['tmp_name'], $img['name']);
if($rs['error']){
echo json_encode(array('res'=>'error', 'msg'=>$rs['error']));
exit;
}
}
}
echo json_encode(array('res'=>'succ', 'msg'=>'上传成功'));
exit;
}
/**
* onlineDelivery
* @return mixed 返回值
*/
public function onlineDelivery() {
$delivery_id = $_REQUEST['delivery_id'];
#仓库对应_发货单列表
$wapDeliveryLib = kernel::single('wap_delivery');
$deliveryObj = app::get('wap')->model('delivery');
$delivery = $deliveryObj->dump(array('delivery_id' => $delivery_id), 'delivery_id,delivery_bn,outer_delivery_bn,status,branch_id');
$storeObj = app::get('o2o')->model('store');
$storeInfo = $storeObj->dump(array('branch_id' => $delivery['branch_id']), 'store_id');
$this->pagedata['store_id'] = $storeInfo['store_id'];
$delivery_items = $wapDeliveryLib->getDeliveryItemList($delivery['outer_delivery_bn']);
$this->pagedata['title'] = '打印配货单';
$this->pagedata['delivery_items'] = $delivery_items;
$this->pagedata['delivery_id'] = $delivery_id;
$action = $_REQUEST['action'];
$this->pagedata['action'] = $action;
$sdf = kernel::single('wap_event_trigger_cloudprint')->getPrintData($delivery_id);
if($sdf['rsp']=='fail'){
$this->pagedata['msg'] = $sdf['msg'];
$this->pagedata['order_url'] = app::get('wap')->router()->gen_url(array('ctl'=>'order','act'=>'index'), true);
$this->display('order/order_print_error.html');
exit;
}
$dly_tmpl_id = $sdf['dly_tmpl_id'];
$data = kernel::single('wap_event_trigger_cloudprint')->processprintdata($sdf);
require_once(APP_DIR.'/wap/lib/generate_template_image.php');
// 创建生成器实例
$generator = new TemplateImageGenerator();
$base64_image = $generator->getBase64Image($dly_tmpl_id, $data);
$this->pagedata['base64_image'] = $base64_image;
$this->display('order/order_print_delivery.html');
}
/**
* 获取微信签名
*/
public function getWxSign() {
$url = $_POST['url'];
$msg = '';
$wxSign = kernel::single('monitor_wechat_token')->getWxSign($url, $msg);
if (!$wxSign) {
$msg = $msg ? $msg : '网络异常,请重试';
$this->error($msg);
}
$this->success('签名成功', $wxSign);
}
}