jh-admin/app/shop/controller/Delivery.php

463 lines
17 KiB
PHP

<?php
/**
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.gobuysaas.com
* =========================================================
*/
namespace app\shop\controller;
use app\model\express\Config as ConfigModel;
use app\model\express\ExpressPackage;
use app\model\order\OrderCommon as OrderCommonModel;
use app\model\order\Order as OrderModel;
use addon\electronicsheet\model\ExpressElectronicsheet as ExpressElectronicsheetModel;
use app\model\web\Config as WebConfig;
use addon\electronicsheet\model\ElectronicsheetDelivery;
use phpoffice\phpexcel\Classes\PHPExcel;
use phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007;
/**
* 配送
* Class Express
* @package app\shop\controller
*/
class Delivery extends BaseShop
{
/**
* 发货列表
*/
public function lists()
{
$order_label_list = array (
'order_no' => '订单号',
'out_trade_no' => '外部单号',
'name' => '收货人姓名',
'order_name' => '商品名称',
"mobile" => "收货人电话",
);
$order_model = new OrderModel();
$order_status_list = $order_model->delivery_order_status;
$order_status = input('order_status', '');//订单状态
$order_name = input('order_name', '');
$pay_type = input('pay_type', '');
$order_from = input('order_from', '');
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
$search_text = input('search', '');
$promotion_type = input('promotion_type', '');//订单类型
$order_type = input('order_type', 'all');//营销类型
$order_common_model = new OrderCommonModel();
if (request()->isAjax()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [
[ 'order_type', '=', 1 ],
[ 'site_id', '=', $this->site_id ],
[ 'is_delete', '=', 0 ]
];
//订单状态
if ($order_status != "") {
$condition[] = [ "order_status", "=", $order_status ];
} else {
$condition[] = [ 'order_status', 'in', array_keys($order_status_list) ];
}
//订单内容 模糊查询
if ($order_name != "") {
$condition[] = [ "order_name", 'like', "%$order_name%" ];
}
//订单来源
if ($order_from != "") {
$condition[] = [ "order_from", "=", $order_from ];
}
//订单支付
if ($pay_type != "") {
$condition[] = [ "pay_type", "=", $pay_type ];
}
//订单类型
if ($order_type != 'all') {
$condition[] = [ "order_type", "=", $order_type ];
}
//营销类型
if ($promotion_type != "") {
if ($promotion_type == 'empty') {
$condition[] = [ "promotion_type", "=", '' ];
} else {
$condition[] = [ "promotion_type", "=", $promotion_type ];
}
}
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ "create_time", ">=", date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ "create_time", "<=", date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty($end_time)) {
$condition[] = [ 'create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
if ($search_text != "") {
$condition[] = [ $order_label, 'like', "%$search_text%" ];
}
$list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'create_time desc');
return $list;
} else {
$this->assign('order_label_list', $order_label_list);
//订单来源 (支持端口)
$order_from = $order_common_model->getOrderFromList();
$this->assign('order_from_list', $order_from);
$pay_type = $order_common_model->getPayType();
$this->assign('pay_type_list', $pay_type);
$this->assign('http_type', get_http_type());
$config_model = new WebConfig();
$mp_config = $config_model->getMapConfig($this->site_id);
$this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ] ?? '');
$this->assign('delivery_order_status', $order_status_list);//订单状态
return $this->fetch('delivery/lists');
}
}
public function syncOrder(){
$order_label_list = array (
'order_no' => '订单号',
'out_trade_no' => '外部单号',
'name' => '收货人姓名',
'order_name' => '商品名称',
"mobile" => "收货人电话",
);
$order_model = new OrderModel();
$order_status_list = $order_model->delivery_order_status;
$order_status = input('order_status', '');//订单状态
$order_name = input('order_name', '');
$pay_type = input('pay_type', '');
$order_from = input('order_from', '');
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
$search_text = input('search', '');
$promotion_type = input('promotion_type', '');//订单类型
$order_type = input('order_type', 'all');//营销类型
$is_sync_order = input('is_sync_order', 'all');//营销类型
$order_common_model = new OrderCommonModel();
if (request()->isAjax()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [
[ 'order_type', '=', 1 ],
[ 'site_id', '=', $this->site_id ],
[ 'is_video_number', '=', 1],
[ 'is_delete', '=', 0 ],
[ 'order_status', 'in', [3,4,10]],
];
//订单内容 模糊查询
if ($order_name != "") {
$condition[] = [ "order_name", 'like', "%$order_name%" ];
}
//订单来源
if ($order_from != "") {
$condition[] = [ "order_from", "=", $order_from ];
}
//订单支付
if ($pay_type != "") {
$condition[] = [ "pay_type", "=", $pay_type ];
}
//订单类型
if ($order_type != 'all') {
$condition[] = [ "order_type", "=", $order_type ];
}
/***
* 组件订单状态
*/
if($is_sync_order!=='all'){
$condition[] = [ "is_sync_order", "=", $is_sync_order ];
}else{
$condition[] = [ "is_sync_order", "=", 2 ];
}
//营销类型
if ($promotion_type != "") {
if ($promotion_type == 'empty') {
$condition[] = [ "promotion_type", "=", '' ];
} else {
$condition[] = [ "promotion_type", "=", $promotion_type ];
}
}
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ "create_time", ">=", date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ "create_time", "<=", date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty($end_time)) {
$condition[] = [ 'create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
if ($search_text != "") {
$condition[] = [ $order_label, 'like', "%$search_text%" ];
}
$list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'create_time desc');
return $list;
} else {
$this->assign('order_label_list', $order_label_list);
//订单来源 (支持端口)
$order_from = $order_common_model->getOrderFromList();
$this->assign('order_from_list', $order_from);
$pay_type = $order_common_model->getPayType();
$this->assign('pay_type_list', $pay_type);
$this->assign('http_type', get_http_type());
$config_model = new WebConfig();
$mp_config = $config_model->getMapConfig($this->site_id);
$this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ] ?? '');
$this->assign('delivery_order_status', $order_status_list);//订单状态
return $this->fetch('delivery/syncOrder');
}
}
/**
* 配送方式
*/
public function express()
{
$config_model = new ConfigModel();
$config_result = $config_model->getExpressConfig($this->site_id);
$express_config = $config_result[ 'data' ];
$this->assign('express_config', $express_config);
$config_result = $config_model->getStoreConfig($this->site_id);
$store_config = $config_result[ 'data' ];
$this->assign('store_config', $store_config);
$config_result = $config_model->getLocalDeliveryConfig($this->site_id);
$local_delivery_config = $config_result[ 'data' ];
$this->assign('local_delivery_config', $local_delivery_config);
$deliver_type = $config_model->getDeliverTypeSort($this->site_id);
$this->assign('deliver_type', explode(',', $deliver_type[ 'data' ][ 'value' ][ 'deliver_type' ]));
return $this->fetch('delivery/delivery');
}
/**
* 物流开关配置
* @return \multitype
*/
public function modifyExpressStatus()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$is_use = input('is_use', 0);
$data = array (
'express_name' => input('express_name')
);
$result = $config_model->setExpressConfig($data, $is_use, $this->site_id);
return $result;
}
}
/**
* 自提配置开关
* @return \multitype
*/
public function modifyStoreStatus()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$is_use = input('is_use', 0);
$data = array (
'store_name' => input('store_name')
);
$result = $config_model->setStoreConfig($data, $is_use, $this->site_id);
return $result;
}
}
/**
* 外卖配送配置开关
* @return \multitype
*/
public function modifyLocalStatus()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$is_use = input('is_use', 0);
$data = array (
'local_name' => input('local_name')
);
$result = $config_model->setLocalDeliveryConfig($data, $is_use, $this->site_id);
return $result;
}
}
/**
* 外卖配送
*/
public function localConfig()
{
$config_model = new ConfigModel();
if (request()->isAjax()) {
$is_use = input('is_use', 0);
$data = array ();
$result = $config_model->setLocalDeliveryConfig($data, $is_use, $this->site_id);
return $result;
} else {
$config_result = $config_model->getLocalDeliveryConfig($this->site_id);
$config = $config_result[ 'data' ];
$this->assign('config', $config);
return $this->fetch('delivery/local_config');
}
}
/**
* 获取电子面单模板列表
*/
public function getExpressElectronicsheetList()
{
//电子面单插件
$addon_is_exit = addon_is_exit('electronicsheet', $this->site_id);
if ($addon_is_exit == 1) {
//获取电子面单模板
$electronicsheet_model = new ExpressElectronicsheetModel();
$condition[] = [ 'site_id', '=', $this->site_id ];
$electronicsheet_list = $electronicsheet_model->getExpressElectronicsheetList($condition, '', 'is_default desc');
return $electronicsheet_list;
} else {
return success(0, 'success', []);
}
}
/**
* 批量发货
*/
public function batchDelivery()
{
if (request()->isAjax()) {
$order_model = new OrderModel();
$data = array (
'type' => input('type', 'manual'),//发货方式(手动发货、电子面单)
'express_company_id' => input('express_company_id', 0),//物流公司
'delivery_type' => input('delivery_type', 0),//是否需要物流
'site_id' => $this->site_id,
'template_id' => input('template_id', 0),//电子面单模板id
);
$order_list = input('order_list', '');
$result = $order_model->orderBatchDelivery($data, $order_list);
return $result;
}
}
/**
* 打印电子面单
*/
public function printElectronicsheet()
{
if (request()->isAjax()) {
$addon_is_exit = addon_is_exit('electronicsheet', $this->site_id);
if ($addon_is_exit != 1) {
return [
'code' => -1001,
'message' => '电子面单插件不存在',
'data' => ''
];
}
$order_model = new OrderModel();
$data = array (
'type' => 'electronicsheet',//电子面单
'express_company_id' => 0,//物流公司
'delivery_type' => 1,
'site_id' => $this->site_id,
'template_id' => input('template_id', 0),//电子面单模板id
'is_delivery' => input('is_delivery', 0),//是否发货
'order_id' => input('order_id'),//订单id
'order_goods_ids' => '',
'delivery_no' => ''
);
$electronicsheet_model = new ElectronicsheetDelivery();
$result = $electronicsheet_model->delivery($data);
if ($result[ 'code' ] >= 0) {
if ($data[ 'is_delivery' ] == 1) {//发货
$data[ 'delivery_no' ] = $result[ 'data' ][ 'Order' ][ 'LogisticCode' ];
$res = $order_model->orderGoodsDelivery($data, 2);
if ($res[ 'code' ] < 0) {
return $res;
}
}
}
return $result;
}
}
/**
* 获取单个订单的物流信息(电子面单的除外)
*/
public function getOrderDelivery()
{
if (request()->isAjax()) {
$order_id = input('order_id', '');
$condition = [
[ 'order_id', '=', $order_id ],
[ 'site_id', '=', $this->site_id ],
[ 'type', '=', 'manual' ]
];
$express_package_model = new ExpressPackage();
$list = $express_package_model->getExpressDeliveryPackageList($condition);
return $list;
}
}
/**
* 修改单个订单的物流信息(电子面单的除外)
*/
public function editOrderDelivery()
{
if (request()->isAjax()) {
$delivery_json = array (
'site_id' => $this->site_id,
'order_id' => input('order_id', ''),//订单id
'package_id' => input('package_id', 0),//包裹id
'delivery_type' => input('delivery_type', 0),//是否需要物流
'express_company_id' => input('express_company_id', 0),//物流公司
'delivery_no' => input('delivery_no', ''),//物流单号
);
$express_package_model = new ExpressPackage();
$res = $express_package_model->editOrderExpressDeliveryPackage($delivery_json);
return $res;
}
}
/**
* 配送方式排序
*/
public function deliverTypeSort()
{
if (request()->isAjax()) {
$config_model = new ConfigModel();
$deliver_type = input('deliver_type', '');
$result = $config_model->setDeliverTypeSort([ 'deliver_type' => $deliver_type ], $this->site_id);
return $result;
}
}
}