Files
OMS/app/ome/controller/admin/consign.php
2025-12-28 23:13:25 +08:00

433 lines
18 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.
*/
class ome_ctl_admin_consign extends desktop_controller{
var $name = "发货处理";
var $workground = "delivery_center";
function _views() {
$mdl_order = $this->app->model('orders');
//未发货分两部分sync=none+线上店铺 OR ship_status=0+线下店铺
$shops = $this->app->model('shop')->getList('shop_id,node_id');
$bindShop = $unbindShop = array();
foreach ($shops as $key=>$shop) {
if ($shop['node_id']) {
$bindShop[] = $shop['shop_id'];
} else {
$unbindShop[] = $shop['shop_id'];
}
}
$sync_none_filter = array('ship_status' => '0');
if ($bindShop && $unbindShop) {
$sync_none_filter['filter_sql'] = '(({table}sync="none" AND {table}shop_id in("'.implode('","',$bindShop).'"))'.' OR '.'({table}ship_status="0" AND shop_id in("'.implode('","',$unbindShop).'")))';
} elseif ($bindShop) {
$sync_none_filter['filter_sql'] = '{table}sync="none" AND {table}shop_id in("'.implode('","',$bindShop).'")';
} elseif ($unbindShop) {
$sync_none_filter['filter_sql'] = '{table}ship_status="0" AND {table}shop_id in("'.implode('","',$unbindShop).'")';
}
$base_filter = $this->getFilters();
$sub_menu[0] = array('label' => app::get('base')->_('发货失败'), 'filter' => array_merge($base_filter, array('createway'=>'matrix','sync' => 'fail')), 'optional' => false,'addon' => '_FILTER_POINT_');
//$sub_menu[1] = array('label' => app::get('base')->_('待发货'), 'filter' => array_merge($base_filter, $sync_none_filter), 'optional' => false);
$sub_menu[2] = array('label' => app::get('base')->_('回写未发起'),'filter' => array_merge($base_filter,array('createway' => 'matrix','sync' => 'none' ,'ship_status' => '1')),'optional' => false);
$sub_menu[3] = array('label' => app::get('base')->_('发货中'), 'filter' => array_merge($base_filter, array('createway'=>'matrix','sync' => 'run')), 'optional' => false);
$sub_menu[4] = array('label' => app::get('base')->_('全部'), 'filter' => $base_filter, 'optional' => false);
//$sub_menu[5] = array('label' => app::get('base')->_('京东发货失败'), 'filter' => array_merge($base_filter, array('createway'=>'matrix','sync' => 'fail','shop_type'=>'360buy')), 'optional' => false);
//$sub_menu[6] = array('label' => app::get('base')->_('回写参数错误'), 'filter' => array_merge($base_filter, array('createway' => 'matrix','sync' => 'fail','sync_fail_type' => 'params')), 'optional' => false);
//$sub_menu[7] = array('label' => app::get('base')->_('前端已发货'), 'filter' => array_merge($base_filter, array('createway' => 'matrix','sync' => 'fail','sync_fail_type' => 'shipped')), 'optional' => false);
$sub_menu[8] = array('label' => app::get('base')->_('发货成功'), 'filter' => array_merge($base_filter, array('createway' => 'matrix','sync' => 'succ')), 'optional' => false);
$sub_menu[9] = array('label' => app::get('base')->_('不予回写'),'filter' => array_merge($base_filter, array('createway' => array('local','import'))),'optional' => false);
$sub_menu[10] = array('label' => app::get('base')->_('换货订单回写失败'),'filter' => array_merge($base_filter, array('createway' => array('after'),'sync'=>'fail')),'optional' => false);
$sub_menu[11] = array('label' => app::get('base')->_('物流错误'), 'filter' => array_merge($base_filter, array('createway'=>'matrix', 'sync'=>'fail', 'sync_fail_type'=>'logistics')), 'optional'=>false);
foreach ($sub_menu as $k => $v) {
$sub_menu[$k]['filter'] = $v['filter'] ? $v['filter'] : null;
$sub_menu[$k]['addon'] = $v['addon'] ? $v['addon'] : $mdl_order->viewcount($v['filter']);
$sub_menu[$k]['href'] = 'index.php?app=ome&ctl=' . $_GET['ctl'] . '&act=' . $_GET['act'] . '&flt=' . $_GET['flt'] . '&view=' . $k . $s;
}
return $sub_menu;
}
/**
* 极速发货
*
* @param void
* @return void
*/
function fast_consign()
{
$_GET['view'] = intval($_GET['view']);
$op_id = kernel::single('desktop_user')->get_id();
switch ($_GET['view']) {
case '0':
$action = array(
array('label' => '批量发货', 'submit' => $this->url.'&act=dailog_delivery_confirm','target'=>'dialog::{width:800,height:200,title:\'批量发货\'}"'),
array('label' => '已回写成功', 'submit' => 'index.php?app=ome&ctl=admin_consign&act=batch_sync_succ', 'confirm' => "这些订单系统认为都是在前台(淘宝、京东等)已经发货,请确认这些订单前端已经发货!!!\n\n警告:本操作不会再同步发货状态,并不可恢复,请谨慎使用!!!", 'target' => 'refresh'),
/* array('label' => '不予回写', 'submit' => 'index.php?app=ome&ctl=admin_consign&act=batch_nosync', 'confirm' => "这些订单系统认为不用发货!\n\n警告本操作不会再同步发货状态并不可恢复请谨慎使用", 'target' => 'refresh'),*/
);
break;
case '2':
case '3':
case '5':
case '6':
case '7':
case '11':
$action = array(
array('label' => '批量发货', 'submit' => $this->url.'&act=dailog_delivery_confirm','target'=>'dialog::{width:800,height:200,title:\'批量发货\'}"'),
array('label' => '已回写成功', 'submit' => 'index.php?app=ome&ctl=admin_consign&act=batch_sync_succ', 'confirm' => "这些订单系统认为都是在前台(淘宝、京东等)已经发货,请确认这些订单前端已经发货!!!\n\n警告:本操作不会再同步发货状态,并不可恢复,请谨慎使用!!!", 'target' => 'refresh'),
);
break;
case '10':
$action = array(
array('label' => '批量发货', 'submit' => $this->url . 'index.php?app=ome&ctl=admin_consign&act=batch_change_sync', 'confirm' => '你确定要对勾选的订单进行发货操作吗?', 'target' => 'refresh'),
array('label' => '已回写成功', 'submit' => 'index.php?app=ome&ctl=admin_consign&act=batch_sync_succ', 'confirm' => "这些订单系统认为都是在前台(淘宝、京东等)已经发货,请确认这些订单前端已经发货!!!\n\n警告:本操作不会再同步发货状态,并不可恢复,请谨慎使用!!!", 'target' => 'refresh'),
);
break;
default:
break;
}
//修改物流
if($_GET['view'] == '11'){
$action[] = array(
'label' => '批量修改物流公司',
'submit' => $this->url.'&act=batch_edit_logistics',
'target' => 'dialog::{width:700,height:300,title:\'批量修改物流公司\'}"',
);
}
//params
$params = array(
'title' => '需发货订单',
'actions' => $action,
'use_buildin_new_dialog' => false,
'use_buildin_set_tag' => false,
'use_buildin_recycle' => false,
'use_buildin_export' => true,
'use_buildin_import' => false,
'use_buildin_filter' => true,
'use_view_tab' => true,
'finder_aliasname' => 'order_consign_fast'.$op_id,
'finder_cols' => '_func_0,column_confirm,order_bn,column_sync_status,column_print_status,logi_id,logi_no,column_deff_time,member_id, ship_name,ship_area,total_amount',
'base_filter' => $this->getFilters(),
'object_method' => [
'count' => 'finder_count',
'getlist' => 'finder_getList',
]
);
$this->finder('ome_mdl_orders', $params);
}
/**
* 批量消除冲突
*
* @param void
* @return void
*/
function batch_sync_succ() {
// $this->begin('');
$ids = $_REQUEST['order_id'];
if (!empty($ids)) {
$orderObj = $this->app->model('orders');
$data = array('sync'=>'succ','sync_fail_type'=>'none');
$filter = array('order_id'=>$ids,'createway' => 'matrix');
$orderObj->update($data,$filter);
//记录日志
$logObj = $this->app->model('operation_log');
$logObj->batch_write_log('order_modify@ome',$filter,'手动设为同步成功',time());
}
$this->splash('success', null, '命令已经被成功发送!');
}
/**
* 批量发货
*
* @param void
* @return void
*/
function batch_sync() {
$this->begin('');
$ids = $_REQUEST['order_id'];
$deliveryObj = app::get('ome')->model('delivery');
if (!empty($ids)) {
kernel::single('ome_event_trigger_shop_delivery')->delivery_confirm_retry($ids);
}
$this->end(true, '命令已经被成功发送!!');
}
function getFilters()
{
$base_filter = array();
$base_filter['status'] = array('active', 'finish');
$base_filter['order_confirm_filter'] = "sdb_ome_orders.ship_status IN('1', '2') AND logi_no <> ''";
//$base_filter['order_confirm_filter'] = "(sdb_ome_orders.op_id is not null OR sdb_ome_orders.group_id is not null ) AND (sdb_ome_orders.is_cod='true' OR sdb_ome_orders.pay_status='1' OR sdb_ome_orders.pay_status='4' OR sdb_ome_orders.pay_status='5') and logi_no <> ''";
//$base_filter['process_status'] = array('splited', 'confirmed', 'splitting');
/***
//拆单配置_订单确认状态加入"余单撤消"
$orderSplitLib = kernel::single('ome_order_split');
$split_seting = $orderSplitLib->get_delivery_seting();
if($split_seting){
$base_filter['process_status'] = array('splited', 'confirmed', 'splitting', 'remain_cancel');
}
***/
//check shop permission
$organization_permissions = kernel::single('desktop_user')->get_organization_permission();
if($organization_permissions){
$base_filter['org_id'] = $organization_permissions;
}
return $base_filter;
}
/**
* 天猫换货订单 发货重试
* @DateTime 2018-02-07T11:50:29+0800
* @return
*/
public function batch_change_sync(){
// $this->begin('');
$ids = $_REQUEST['order_id'];
if (!empty($ids)) {
foreach($ids as $order_id){
kernel::single('ome_service_aftersale')->exchange_consigngoods($order_id);
}
}
$this->splash('success', null, '命令已经被成功发送!!');
}
public function dailog_delivery_confirm()
{
$_POST['sync'] = ['fail', 'run', 'none'];
$orderMdl = app::get('ome')->model('orders');
$order_list = $orderMdl->getList('order_id', $_POST);
$order_id = array_column($order_list, 'order_id');
$this->pagedata['GroupList'] = json_encode($order_id);
$this->pagedata['request_url'] = $this->url . '&act=ajax_delivery_confirm';
parent::dialog_batch();
}
/**
* Ajax重试回传平台发货状态
*
* @return void
*/
public function ajax_delivery_confirm()
{
$order_id = explode(',', $_POST['primary_id']);
if (!$order_id) { echo 'Error: 请先选择订单';exit;}
$retArr = array(
'itotal' => count($order_id),
'isucc' => count($order_id),
'ifail' => 0,
'err_msg' => array(),
);
kernel::single('ome_event_trigger_shop_delivery')->delivery_confirm_retry($order_id);
echo json_encode($retArr),'ok.';exit;
}
/**
* 批量修改物流公司
*/
public function batch_edit_logistics()
{
$orderObj = app::get('ome')->model('orders');
$ids = $_POST['order_id'];
//check
if($_POST['isSelectedAll'] == '_ALL_'){
die('不能使用全选功能,每次最多选择500条!');
}
if(count($ids) > 500){
die('每次最多只能选择500条!');
}
//物流公司列表
$sql = "SELECT corp_id,type,name FROM sdb_ome_dly_corp WHERE 1";
$tempList = $orderObj->db->select($sql);
$logiList = array();
foreach ($tempList as $key => $val)
{
if(in_array($val['type'], array('o2o_pickup', 'o2o_ship'))){
continue;
}
$logiList[] = $val;
}
//pagedata
$this->pagedata['logiList'] = $logiList;
$this->pagedata['GroupList'] = $ids;
$this->pagedata['request_url'] = 'index.php?app=ome&ctl=admin_consign&act=ajaxEditLogistics';
$this->pagedata['custom_html'] = $this->fetch('admin/order/edit_logistics.html');
//调用desktop公用进度条
parent::dialog_batch('ome_mdl_orders', false, 10, 10);
}
/**
* 修改物流公司
**/
public function ajaxEditLogistics()
{
$orderObj = app::get('ome')->model('orders');
$operLogObj = app::get('ome')->model('operation_log');
//获取订单号
parse_str($_POST['primary_id'], $postdata);
if(!$postdata){
echo 'Error: 请先选择订单';
exit;
}
//物流公司ID
$corp_id = $_POST['corp_id'];
if(empty($corp_id)){
echo 'Error: 请先选择物流公司';
exit;
}
$retArr = array(
'itotal' => 0,
'isucc' => 0,
'ifail' => 0,
'err_msg' => array(),
);
//物流公司列表
$sql = "SELECT corp_id,type,name FROM sdb_ome_dly_corp WHERE corp_id=".$corp_id;
$corpInfo = $orderObj->db->selectrow($sql);
if(empty($corpInfo)){
echo 'Error: 没有找到物流公司';
exit;
}
//订单列表
$list = $orderObj->getList('order_id,order_bn,ship_status,createway,sync', $postdata['f'], $postdata['f']['offset'], $postdata['f']['limit']);
//count
$retArr['itotal'] = count($list);
foreach ((array)$list as $key => $val)
{
$order_id = $val['order_id'];
//check
if($val['ship_status'] != '1'){
//error
$retArr['ifail'] += 1;
$retArr['err_msg'][] = $val['order_bn'].'订单不是已发货状态';
continue;
}
if($val['createway'] != 'matrix'){
//error
$retArr['ifail'] += 1;
$retArr['err_msg'][] = $val['order_bn'].'订单不是平台下来的';
continue;
}
if($val['sync'] != 'fail'){
//error
$retArr['ifail'] += 1;
$retArr['err_msg'][] = $val['order_bn'].'订单不是回传失败的状态';
continue;
}
//关联发货单(只获取已发货的发货单)
$sql = "SELECT b.delivery_id FROM sdb_ome_delivery_order AS a ";
$sql .= " LEFT JOIN sdb_ome_delivery AS b ON a.delivery_id=b.delivery_id WHERE a.order_id=". $order_id ." AND b.status='succ'";
$deliveryList = $orderObj->db->select($sql);
if(empty($deliveryList)){
//error
$retArr['ifail'] += 1;
$retArr['err_msg'][] = $val['order_bn'].'没有找到已发货的发货单';
continue;
}
$delivery_ids = array_column($deliveryList, 'delivery_id');
//[发货单]更新物流公司
$update_sql = "UPDATE sdb_ome_delivery SET logi_id='%d', logi_name='%s' WHERE delivery_id IN(". implode(',', $delivery_ids) .")";
$update_sql = sprintf($update_sql, $corpInfo['corp_id'], $corpInfo['name']);
$orderObj->db->exec($update_sql);
//[订单]更新物流公司
$update_sql = "UPDATE sdb_ome_orders SET logi_id='%d' WHERE order_id='%d'";
$update_sql = sprintf($update_sql, $corpInfo['corp_id'], $order_id);
$orderObj->db->exec($update_sql);
//log
$operLogObj->write_log('order_edit@ome', $order_id, '修改订单和发货单的物流公司为:'.$corpInfo['name']);
//succ
$retArr['isucc'] += 1;
}
echo json_encode($retArr),'ok.';
exit;
}
/**
* 批量设置不回写
*
* @param void
* @return void
*/
function batch_nosync() {
$this->begin('');
$ids = $_REQUEST['order_id'];
if (!empty($ids)) {
$orderObj = $this->app->model('orders');
$data = array('sync'=>'nosync');
$filter = array('order_id'=>$ids,'createway' => 'matrix','sync'=>'fail');
$orderObj->update($data,$filter);
$logfiter = array('order_id'=>$ids);
//记录日志
$logObj = $this->app->model('operation_log');
$logObj->batch_write_log('order_modify@ome',$logfiter,'不予回写',time());
}
$this->end(true, '命令已经被成功发送!');
}
}