初始上传
This commit is contained in:
172
addon/electronicsheet/model/ElectronicsheetDelivery.php
Executable file
172
addon/electronicsheet/model/ElectronicsheetDelivery.php
Executable file
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\electronicsheet\model;
|
||||
|
||||
use app\model\BaseModel;
|
||||
use app\model\shop\Shop;
|
||||
use extend\Kdniao;
|
||||
use app\model\system\Address;
|
||||
|
||||
/**
|
||||
* 电子面单物流配送
|
||||
*/
|
||||
class ElectronicsheetDelivery extends BaseModel
|
||||
{
|
||||
|
||||
/**
|
||||
* 电子面单发货
|
||||
* @param $param
|
||||
* @param $is_delivery
|
||||
* @return array
|
||||
*/
|
||||
public function delivery($param)
|
||||
{
|
||||
//获取电子面单设置
|
||||
$electronicsheet_model = new ExpressElectronicsheet();
|
||||
$config_info = $electronicsheet_model->getElectronicsheetConfig($param[ 'site_id' ])[ 'data' ][ 'value' ];
|
||||
if (empty($config_info)) {
|
||||
return $this->error('', '请先配置电子面单');
|
||||
}
|
||||
|
||||
if (empty($param[ 'template_id' ])) {
|
||||
return $this->error('', '请先配置电子面单模板');
|
||||
}
|
||||
//获取电子模板信息
|
||||
$template = $electronicsheet_model->getExpressElectronicsheetInfo([ [ 'id', '=', $param[ 'template_id' ] ] ])[ 'data' ];
|
||||
if (empty($template)) {
|
||||
return $this->error('', '电子面单模板不存在');
|
||||
}
|
||||
|
||||
//获取店铺信息
|
||||
$shop_model = new Shop();
|
||||
$shop_info = $shop_model->getShopInfo([ [ 'site_id', '=', $param[ 'site_id' ] ] ])[ 'data' ];
|
||||
|
||||
if (empty($shop_info[ 'name' ])) {
|
||||
return $this->error('', '店铺联系地址中联系人姓名未设置');
|
||||
}
|
||||
if (empty($shop_info[ 'province_name' ]) || empty($shop_info[ 'city_name' ]) || empty($shop_info[ 'district_name' ]) || empty($shop_info[ 'address' ])) {
|
||||
return $this->error('', '店铺联系地址中联系地址未设置');
|
||||
}
|
||||
if (empty($shop_info[ 'telephone' ]) && empty($shop_info[ 'mobile' ])) {
|
||||
return $this->error('', '店铺联系地址中联系方式未设置');
|
||||
}
|
||||
|
||||
$result = $this->electronicsheetDelivery($param, $config_info, $template, $shop_info);
|
||||
if (isset($result[ 'code' ]) && $result[ 'code' ] < 0) {
|
||||
return $result;
|
||||
} else {
|
||||
return $this->success($result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 电子面单发货
|
||||
* @param $delivery_id //包裹id
|
||||
* @param $config_info //快递鸟配置信息
|
||||
* @param $template //电子面单模板
|
||||
* @param $shop_info //发货人信息
|
||||
* @param $goods_array //商品信息
|
||||
* @return array
|
||||
*/
|
||||
public function electronicsheetDelivery($param, $config_info, $template, $shop_info)
|
||||
{
|
||||
//获取订单信息
|
||||
$order_info = model('order')->getInfo([ [ 'order_id', '=', $param[ 'order_id' ] ] ]);
|
||||
//获取快递公司编码
|
||||
$express_company = model('express_company_template')->getInfo([ [ 'company_id', '=', $template[ 'company_id' ] ] ], 'express_no,print_style');
|
||||
$print_style = json_decode($express_company[ 'print_style' ], true);
|
||||
|
||||
$goods_commodity = [];
|
||||
//获取商品信息
|
||||
if (empty($param[ 'order_goods_id_array' ])) {
|
||||
$goods_array = model('order_goods')->getList(
|
||||
[
|
||||
[ 'order_id', '=', $param[ 'order_id' ] ]
|
||||
], 'sku_name as GoodsName,num as GoodsQuantity'
|
||||
);
|
||||
} else {
|
||||
$goods_array = model('order_goods')->getList(
|
||||
[
|
||||
[ 'order_goods_id', 'in', $param[ 'order_goods_id_array' ] ],
|
||||
[ 'order_id', '=', $param[ 'order_id' ] ]
|
||||
], 'sku_name as GoodsName,num as GoodsQuantity'
|
||||
);
|
||||
}
|
||||
//替换商品名称中的特殊字符 ' " # & + < > % \
|
||||
$search = array ( "'", '"', '&', '+', '<', '>', '%', "\\", '#', "and" );
|
||||
foreach ($goods_array as $key => $val){
|
||||
$goods_commodity[] = [
|
||||
'GoodsName' => str_replace($search, '', $val[ 'GoodsName' ]),
|
||||
'GoodsQuantity' => $val['GoodsQuantity']
|
||||
];
|
||||
}
|
||||
|
||||
//实例化快递鸟
|
||||
$config = [
|
||||
'EBusinessID' => $config_info[ 'kdniao_user_id' ],
|
||||
'AppKey' => $config_info[ 'kdniao_api_key' ]
|
||||
];
|
||||
$kdniao = new Kdniao($config);
|
||||
//构造电子面单提交信息
|
||||
$eorder = [];
|
||||
$eorder[ 'CustomerName' ] = $template[ 'customer_name' ];
|
||||
$eorder[ 'CustomerPwd' ] = $template[ 'customer_pwd' ];
|
||||
$eorder[ 'SendSite' ] = $template[ 'send_site' ];
|
||||
$eorder[ 'SendStaff' ] = $template[ 'send_staff' ];
|
||||
$eorder[ 'MonthCode' ] = $template[ 'month_code' ];
|
||||
$eorder[ 'ShipperCode' ] = $express_company[ 'express_no' ];//快递公司编码
|
||||
$eorder[ 'OrderCode' ] = $order_info[ 'order_no' ];//订单号
|
||||
$eorder[ 'PayType' ] = $template[ 'postage_payment_method' ]; //邮费支付方式
|
||||
$eorder[ 'ExpType' ] = 1; //快递类型
|
||||
$eorder[ 'TemplateSize' ] = $print_style[ $template[ 'print_style' ] ][ 'template_size' ]; //模板规格
|
||||
//发货人信息
|
||||
$sender = [];
|
||||
$sender[ 'Name' ] = $shop_info[ 'name' ];
|
||||
$sender[ 'Mobile' ] = $shop_info[ 'mobile' ];
|
||||
$sender[ 'Tel' ] = $shop_info[ 'telephone' ];
|
||||
$sender[ 'ProvinceName' ] = $shop_info[ 'province_name' ];
|
||||
$sender[ 'CityName' ] = $shop_info[ 'city_name' ];
|
||||
$sender[ 'ExpAreaName' ] = $shop_info[ 'district_name' ];
|
||||
$sender[ 'Address' ] = $shop_info[ 'address' ];
|
||||
$sender[ 'PostCode' ] = '000000';
|
||||
//获取收货人信息
|
||||
$area_model = new Address();
|
||||
$province_name = $area_model->getAreasInfo([ [ 'id', '=', $order_info[ 'province_id' ] ] ], 'name');
|
||||
$city_name = $area_model->getAreasInfo([ [ 'id', '=', $order_info[ 'city_id' ] ] ], 'name');
|
||||
$district_name = $area_model->getAreasInfo([ [ 'id', '=', $order_info[ 'district_id' ] ] ], 'name');
|
||||
$receiver = [];
|
||||
$receiver[ 'Name' ] = $order_info[ 'name' ];
|
||||
$receiver[ 'Mobile' ] = $order_info[ 'mobile' ];
|
||||
$receiver[ 'ProvinceName' ] = $province_name[ 'data' ][ 'name' ];
|
||||
$receiver[ 'CityName' ] = $city_name[ 'data' ][ 'name' ];
|
||||
$receiver[ 'ExpAreaName' ] = empty($district_name[ 'data' ][ 'name' ]) ? '' : $district_name[ 'data' ][ 'name' ];
|
||||
$receiver[ 'Address' ] = $order_info[ 'address' ];
|
||||
$receiver[ 'PostCode' ] = '000000';
|
||||
|
||||
// $commodity[] = $goods_array;
|
||||
$eorder[ 'Sender' ] = $sender;
|
||||
$eorder[ 'Receiver' ] = $receiver;
|
||||
$eorder[ 'Commodity' ] = $goods_commodity; //商品信息
|
||||
|
||||
$eorder[ 'IsReturnPrintTemplate' ] = 1; //是否返回电子模板
|
||||
|
||||
$jsonResult = $kdniao->submitEOrder($eorder);
|
||||
|
||||
$result = json_decode($jsonResult, true);
|
||||
if (isset($result[ 'ResultCode' ])) {
|
||||
if ($result[ 'ResultCode' ] == '100' || $result[ 'ResultCode' ] == '106') {
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
return $this->error('', $result[ 'Reason' ]);
|
||||
}
|
||||
|
||||
}
|
||||
213
addon/electronicsheet/model/ExpressElectronicsheet.php
Executable file
213
addon/electronicsheet/model/ExpressElectronicsheet.php
Executable file
@@ -0,0 +1,213 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\electronicsheet\model;
|
||||
|
||||
use app\model\express\ExpressCompanyTemplate;
|
||||
use app\model\system\Config;
|
||||
use app\model\BaseModel;
|
||||
|
||||
class ExpressElectronicsheet extends BaseModel
|
||||
{
|
||||
|
||||
/************************************ 电子面单设置 start **********************************************************/
|
||||
/**
|
||||
* 电子面单设置
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function setElectronicsheetConfig($data)
|
||||
{
|
||||
$config = new Config();
|
||||
$res = $config->setConfig($data, '电子面单设置', 1, [ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'ELECTRONICSHEET_CONFIG' ] ]);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单设置
|
||||
* @return array
|
||||
*/
|
||||
public function getElectronicsheetConfig($site_id)
|
||||
{
|
||||
$config = new Config();
|
||||
$res = $config->getConfig([ [ 'site_id', '=', $site_id ], [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'ELECTRONICSHEET_CONFIG' ] ]);
|
||||
if (empty($res[ 'data' ][ 'value' ])) {
|
||||
$res[ 'data' ][ 'value' ] = [
|
||||
'type' => 'kdniao',
|
||||
|
||||
'kdniao_user_id' => '',
|
||||
'kdniao_api_key' => '',
|
||||
'kdniao_port' => '',
|
||||
|
||||
'cainiao_token' => '',
|
||||
'cainiao_ip' => ''
|
||||
];
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/************************************ 电子面单设置 end **********************************************************/
|
||||
|
||||
/**
|
||||
* 添加电子面单
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function addExpressElectronicsheet($data)
|
||||
{
|
||||
//判断模板名称是否重复
|
||||
$count = model('express_electronicsheet')->getCount(
|
||||
[
|
||||
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||
[ 'template_name', '=', $data[ 'template_name' ] ]
|
||||
]);
|
||||
|
||||
if ($count > 0) {
|
||||
return $this->error('', '该电子面单名称已存在');
|
||||
}
|
||||
$express_company_model = new ExpressCompanyTemplate();
|
||||
$express_company_info = $express_company_model->getExpressCompanyTemplateInfo([ [ 'company_id', '=', $data[ 'company_id' ] ] ], 'company_id,company_name,express_no');
|
||||
if (empty($express_company_info)) {
|
||||
return $this->error('', '快递公司不存在');
|
||||
}
|
||||
if (empty($express_company_info[ 'data' ][ 'express_no' ]) || empty($express_company_info[ 'data' ][ 'company_name' ])) {
|
||||
return $this->error('', '快递公司名称或者快递鸟编码为空');
|
||||
}
|
||||
|
||||
$data[ 'express_no' ] = $express_company_info[ 'data' ][ 'express_no' ];
|
||||
$data[ 'company_name' ] = $express_company_info[ 'data' ][ 'company_name' ];
|
||||
$data[ 'create_time' ] = time();
|
||||
|
||||
model('express_electronicsheet')->startTrans();
|
||||
try {
|
||||
|
||||
if ($data[ 'is_default' ] == 1) {
|
||||
$this->setExpressElectronicsheetDefault([ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'is_default', '=', 1 ] ], 0);
|
||||
}
|
||||
model('express_electronicsheet')->add($data);
|
||||
|
||||
model('express_electronicsheet')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
model('express_electronicsheet')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑电子面单
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function editExpressElectronicsheet($data)
|
||||
{
|
||||
//判断模板名称是否重复
|
||||
$count = model('express_electronicsheet')->getCount(
|
||||
[
|
||||
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||
[ 'id', '<>', $data[ 'id' ] ],
|
||||
[ 'template_name', '=', $data[ 'template_name' ] ]
|
||||
]);
|
||||
if ($count > 0) {
|
||||
return $this->error('', '该电子面单名称已存在');
|
||||
}
|
||||
|
||||
$express_company_model = new ExpressCompanyTemplate();
|
||||
$express_company_info = $express_company_model->getExpressCompanyTemplateInfo([ [ 'company_id', '=', $data[ 'company_id' ] ] ], 'company_id,company_name,express_no');
|
||||
if (empty($express_company_info)) {
|
||||
return $this->error('', '快递公司不存在');
|
||||
}
|
||||
if (empty($express_company_info[ 'data' ][ 'express_no' ]) || empty($express_company_info[ 'data' ][ 'company_name' ])) {
|
||||
return $this->error('', '快递公司名称或者快递鸟编码为空');
|
||||
}
|
||||
$data[ 'express_no' ] = $express_company_info[ 'data' ][ 'express_no' ];
|
||||
$data[ 'company_name' ] = $express_company_info[ 'data' ][ 'company_name' ];
|
||||
$data[ 'update_time' ] = time();
|
||||
|
||||
model('express_electronicsheet')->startTrans();
|
||||
try {
|
||||
|
||||
if ($data[ 'is_default' ] == 1) {
|
||||
$this->setExpressElectronicsheetDefault([ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'id', '<>', $data[ 'id' ] ], [ 'is_default', '=', 1 ] ], 0);
|
||||
}
|
||||
model('express_electronicsheet')->update($data, [ [ 'id', '=', $data[ 'id' ] ], [ 'site_id', '=', $data[ 'site_id' ] ] ]);
|
||||
|
||||
model('express_electronicsheet')->commit();
|
||||
return $this->success();
|
||||
} catch (\Exception $e) {
|
||||
|
||||
model('express_electronicsheet')->rollback();
|
||||
return $this->error('', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认状态
|
||||
* @param $condition
|
||||
* @param $is_default
|
||||
* @return array
|
||||
*/
|
||||
public function setExpressElectronicsheetDefault($condition, $is_default)
|
||||
{
|
||||
$res = model('express_electronicsheet')->update([ 'is_default' => $is_default ], $condition);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @param $condition
|
||||
* @return array
|
||||
*/
|
||||
public function deleteExpressElectronicsheet($condition)
|
||||
{
|
||||
$res = model('express_electronicsheet')->delete($condition);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单信息
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @return array
|
||||
*/
|
||||
public function getExpressElectronicsheetInfo($condition = [], $field = '*')
|
||||
{
|
||||
$res = model('express_electronicsheet')->getInfo($condition, $field);
|
||||
return $this->success($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单列表
|
||||
* @param array $condition
|
||||
* @param string $field
|
||||
* @param string $order
|
||||
* @param string $limit
|
||||
*/
|
||||
public function getExpressElectronicsheetList($condition = [], $field = '*', $order = '', $limit = null)
|
||||
{
|
||||
$list = model('express_electronicsheet')->getList($condition, $field, $order, '', '', '', $limit);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单分页列表
|
||||
* @param array $condition
|
||||
* @param number $page
|
||||
* @param string $page_size
|
||||
* @param string $order
|
||||
* @param string $field
|
||||
*/
|
||||
public function getExpressElectronicsheetPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
|
||||
{
|
||||
$list = model('express_electronicsheet')->pageList($condition, $field, $order, $page, $page_size);
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user