443 lines
19 KiB
PHP
443 lines
19 KiB
PHP
<?php
|
|
namespace addon\supply\v1;
|
|
use addon\supply\model\goods\Goods as GoodsModel;
|
|
use addon\supply\model\order\OrderCreate;
|
|
use addon\supply\model\order\OrderCommon;
|
|
use addon\supply\model\SupplyAccount;
|
|
use app\model\express\ExpressPackage;
|
|
|
|
class Order extends ApiBase
|
|
{
|
|
/***
|
|
* 创建订单
|
|
* @param $data
|
|
* @return mixed
|
|
*/
|
|
public function fastCreateOrder()
|
|
{
|
|
$outOrderId = input('outOrderId');
|
|
$AuthPay = input('AuthPay', 0);
|
|
$buyer_message = input('buyerMessage', '');
|
|
$addressParam = input('addressParam');
|
|
$cargoParamList = input('cargoParamList');
|
|
$invoiceParam = input('invoiceParam');
|
|
$addressParam = json_decode($addressParam, true);
|
|
$cargoParamList = json_decode($cargoParamList, true);
|
|
$invoiceParam = json_decode($invoiceParam, true);
|
|
if ($outOrderId) {
|
|
$info = model('supply_order')->getValue([['buyer_shop_id', '=', $this->appInfo['site_id']], ['custom_order_no', '=', $outOrderId]], 'order_id');
|
|
if ($info) {
|
|
return error(-1, '订单已存在');
|
|
}
|
|
}
|
|
$this->ValidateData('address', $addressParam);
|
|
$cargodata = $this->createOrderData($cargoParamList);//创建订单数据
|
|
$orderCreate = new OrderCreate();
|
|
$orderData['buyer_uid'] = $this->appInfo['id'];
|
|
$orderData['buyer_shop_id'] = $this->appInfo['site_id'];
|
|
$orderData['buyer_shop_name'] = $this->appInfo['app_name'];
|
|
$orderData['outOrderId'] = $outOrderId;
|
|
$orderData['buyer_message'] = $buyer_message;
|
|
$orderData['order_from'] = 'api';
|
|
$orderData['order_from_name'] = 'API下单';
|
|
$orderData['AuthPay'] = $AuthPay;
|
|
$orderData['is_balance'] = $AuthPay;
|
|
$orderData['orderData'] = $cargodata['order_lists'];
|
|
$orderData['sku_ids_num'] = $cargodata['sku_ids_num'];
|
|
$orderData['appInfo'] = $this->appInfo;
|
|
$address = [
|
|
['name', 'in', "{$addressParam['provinceText']},{$addressParam['cityText']},{$addressParam['areaText']}"]
|
|
];
|
|
$AddressArr = model('area')->getColumn($address, 'id', 'name');
|
|
$orderData['member_address'] = [
|
|
'name' => $addressParam['fullName'] ?? '',
|
|
'mobile' => $addressParam['mobile'] ?? '',
|
|
'telephone' => $addressParam['phone'] ?? '',
|
|
'province_id' => $AddressArr[$addressParam['provinceText']] ?? '',
|
|
'city_id' => $AddressArr[$addressParam['cityText']] ?? '',
|
|
'district_id' => $AddressArr[$addressParam['areaText']] ?? '',
|
|
'community_id' => $addressParam['community_id'] ?? '',
|
|
'address' => $addressParam['address'] ?? '',
|
|
'full_address' => "{$addressParam['provinceText']}-{$addressParam['cityText']}-{$addressParam['areaText']}",
|
|
'longitude' => $addressParam['longitude'] ?? '',
|
|
'latitude' => $addressParam['latitude'] ?? '',
|
|
];
|
|
$orderInfo = $orderCreate->SupplyCreateOrder($orderData, $addressParam, $invoiceParam);
|
|
return $orderInfo;
|
|
}
|
|
|
|
/***
|
|
* 预览订单
|
|
* @param $data
|
|
* @return mixed
|
|
*/
|
|
public function preview()
|
|
{
|
|
$outOrderId = input('outOrderId');
|
|
$AuthPay = input('AuthPay', 0);
|
|
$buyer_message = input('buyerMessage', '');
|
|
$addressParam = input('addressParam');
|
|
$cargoParamList = input('cargoParamList');
|
|
$invoiceParam = input('invoiceParam');
|
|
$addressParam = json_decode($addressParam, true);
|
|
$cargoParamList = json_decode($cargoParamList, true);
|
|
$invoiceParam = json_decode($invoiceParam, true);
|
|
if ($outOrderId) {
|
|
$info = model('supply_order')->getValue([['buyer_shop_id', '=', $this->appInfo['site_id']], ['custom_order_no', '=', $outOrderId]], 'order_id');
|
|
if ($info) {
|
|
return error(-1, '订单已存在');
|
|
}
|
|
}
|
|
$this->ValidateData('address', $addressParam);
|
|
$cargodata = $this->createOrderData($cargoParamList);//创建订单数据
|
|
$orderCreate = new OrderCreate();
|
|
$orderData['buyer_uid'] = $this->appInfo['id'];
|
|
$orderData['buyer_shop_id'] = $this->appInfo['site_id'];
|
|
$orderData['buyer_shop_name'] = $this->appInfo['app_name'];
|
|
$orderData['outOrderId'] = $outOrderId;
|
|
$orderData['buyer_message'] = $buyer_message;
|
|
$orderData['order_from'] = 'api';
|
|
$orderData['order_from_name'] = 'API下单';
|
|
$orderData['AuthPay'] = $AuthPay;
|
|
$orderData['is_balance'] = $AuthPay;
|
|
$orderData['orderData'] = $cargodata['order_lists'];
|
|
$orderData['sku_ids_num'] = $cargodata['sku_ids_num'];
|
|
$orderData['appInfo'] = $this->appInfo;
|
|
$address = [
|
|
['name', 'in', "{$addressParam['provinceText']},{$addressParam['cityText']},{$addressParam['areaText']}"]
|
|
];
|
|
$AddressArr = model('area')->getColumn($address, 'id', 'name');
|
|
$orderData['member_address'] = [
|
|
'name' => $addressParam['fullName'] ?? '',
|
|
'mobile' => $addressParam['mobile'] ?? '',
|
|
'telephone' => $addressParam['phone'] ?? '',
|
|
'province_id' => $AddressArr[$addressParam['provinceText']] ?? '',
|
|
'city_id' => $AddressArr[$addressParam['cityText']] ?? '',
|
|
'district_id' => $AddressArr[$addressParam['areaText']] ?? '',
|
|
'community_id' => $addressParam['community_id'] ?? '',
|
|
'address' => $addressParam['address'] ?? '',
|
|
'full_address' => "{$addressParam['provinceText']}-{$addressParam['cityText']}-{$addressParam['areaText']}",
|
|
'longitude' => $addressParam['longitude'] ?? '',
|
|
'latitude' => $addressParam['latitude'] ?? '',
|
|
];
|
|
$invoiceParam = [
|
|
// 'invoiceType' => '',
|
|
// 'provinceText' => '',
|
|
// 'cityText' => '',
|
|
// 'areaText' => '',
|
|
// 'townText' => '',
|
|
// 'postCode' => '',
|
|
// 'address' => '',
|
|
// 'fullName' => '',
|
|
// 'phone' => '',
|
|
// 'mobile' => '',
|
|
// 'companyName' => '',
|
|
// 'taxpayerIdentifier' => '',
|
|
// 'bankAndAccount' => '',
|
|
// 'localInvoiceId' => '',
|
|
];
|
|
// $addressParam = [
|
|
// 'fullName' => '胡哥',
|
|
// 'mobile' => '18982255122',
|
|
// 'phone' => '18982255122',
|
|
// 'postCode' => '000000',
|
|
// 'provinceText' => '四川省',
|
|
// 'cityText' => '成都市',
|
|
// 'areaText' => '西御街',
|
|
// 'townText' => '',
|
|
// 'address' => '西御大厦A1401',
|
|
// 'districtCode' => '',
|
|
// ];
|
|
// $cargoParamList = [
|
|
// [
|
|
// 'extend_sku_id' => '6f36321c9094a8dfc31616f9920f5c56',
|
|
// 'quantity' => 1,
|
|
// 'cloud_id' => 'ag',
|
|
// ],
|
|
// [
|
|
// 'sku_id' => 8,
|
|
// 'quantity' => 1,
|
|
// ]
|
|
// ];
|
|
}
|
|
|
|
|
|
/***
|
|
* 获取订单详情
|
|
* @param $data
|
|
* @return mixed
|
|
*/
|
|
public function buyerView()
|
|
{
|
|
$out_trade_no = input('outTradeNo');
|
|
if (empty($out_trade_no)) {
|
|
return error(-1, '订单号不能为空');
|
|
}
|
|
$condition = [
|
|
'out_trade_no' => $out_trade_no,
|
|
'buyer_uid' => $this->appInfo['id'],
|
|
];
|
|
$field = 'order_id,site_id,custom_order_no as outOrderId,out_trade_no as outTradeNo,order_id,order_status,order_money,pay_type,pay_status,goods_money,balance_money,pay_money,buyer_uid,name,mobile,telephone,full_address,address';
|
|
$order_list = model('supply_order')->getList($condition, $field);
|
|
$express_package_model = new ExpressPackage();
|
|
if (!empty($order_list)) {
|
|
$fields = 'sku_id,sku_name,sku_image,num,goods_money,delivery_no,refund_no,refund_status,refund_reason,refund_real_money,refund_remark';
|
|
foreach ($order_list as $k => $v) {
|
|
$order_goods_list = model("supply_order_goods")->getList(['order_id' => $v['order_id']], $fields);
|
|
$package_list = $express_package_model->package([["order_id", "=", $v['order_id']], ["site_id", '=', $v['site_id']]], '', '', false);
|
|
$order_list[$k]['order_goods'] = $order_goods_list;
|
|
$order_list[$k]['package_list'] = $package_list;
|
|
unset($v['order_id'], $v['site_id']);
|
|
}
|
|
}
|
|
return $order_list;
|
|
}
|
|
|
|
/***
|
|
* 取消订单
|
|
* @param $data
|
|
* @return mixed
|
|
*/
|
|
public function cancel()
|
|
{
|
|
$out_trade_no = input('outTradeNo');
|
|
if (empty($out_trade_no)) {
|
|
return error(-1, '订单号不能为空');
|
|
}
|
|
$cancelReason = input('cancelReason');
|
|
if (empty($cancelReason)) {
|
|
return error(-1, '请输入取消原因');
|
|
}
|
|
$remark = input('remark');
|
|
$upData = [
|
|
'remark' => $remark
|
|
];
|
|
$condition = [
|
|
'out_trade_no' => $out_trade_no,
|
|
'buyer_uid' => $this->appInfo['id'],
|
|
];
|
|
$order_model = new OrderCommon();
|
|
$member_account_model = new SupplyAccount();
|
|
$getLists = $order_model->getOrderList($condition, 'order_id,out_trade_no,buyer_shop_id,order_status,order_money,pay_type,pay_status,goods_money,balance_money,pay_money,buyer_uid')['data']; //获取订单信息
|
|
if (empty($getLists)) return error(-1, '订单不存在');
|
|
// $suk_ids =model('supply_order_goods')->getColumn([['order_id','in',array_column($getLists, 'order_id')]], 'sku_id');
|
|
// $supply_goods_sku=model('supply_goods_sku')->getColumn([['sku_id','in',$suk_ids]],'sku_id,goods_supplier_format,channel_type,extend_sku_id','sku_id');
|
|
foreach ($getLists as $k => $v) {
|
|
if ($v['order_status'] == 0 || $v['order_status'] == 1) {
|
|
if ($remark) {
|
|
$order_model->orderUpdate($upData, $condition);
|
|
}
|
|
$order_model->orderClose($v['order_id']);
|
|
if ($v['pay_status'] == 1 && $v['pay_type'] == 'BALANCE') {
|
|
$member_account_model->AddAppsAccount($v['buyer_shop_id'], $v['buyer_uid'], 'usable_price', $v['balance_money'] + $v['pay_money'], 'buy_order', $v['out_trade_no'], '订单取消退退回余额|' . $v['out_trade_no']);
|
|
}
|
|
}
|
|
}
|
|
return success();
|
|
}
|
|
|
|
|
|
/**
|
|
* 修改订单备注
|
|
* @param $data
|
|
* @return void
|
|
*/
|
|
public function modifymemo($data = [])
|
|
{
|
|
$out_trade_no = input('outTradeNo');
|
|
if (empty($out_trade_no)) {
|
|
return error(-1, '订单号不能为空');
|
|
}
|
|
$remark = input('remark');
|
|
$condition = [
|
|
'out_trade_no' => $out_trade_no,
|
|
'buyer_uid' => $this->appInfo['id'],
|
|
];
|
|
$data = [
|
|
'remark' => $remark
|
|
];
|
|
$order_model = new OrderCommon();
|
|
// $getLists=$order_model->getOrderList($condition)['data']; //获取订单信息
|
|
return $order_model->orderUpdate($data, $condition);
|
|
}
|
|
|
|
/***
|
|
* 获取订单列表
|
|
* @param $data
|
|
* @return mixed
|
|
*/
|
|
public function getBuyerOrderList()
|
|
{
|
|
$page = input('page', 1);
|
|
$pageSize = input('pageSize', 10);
|
|
$condition = [
|
|
['buyer_uid', '=', $this->appInfo['id']]
|
|
];
|
|
$field = 'custom_order_no as outOrderId,out_trade_no as outTradeNo,order_id,site_id,order_status,order_money,pay_type,pay_status,goods_money,balance_money,pay_money,name,mobile,telephone,full_address,address';
|
|
$order_list = model('supply_order')->pageList($condition, $field, '', $page, $pageSize);
|
|
$express_package_model = new ExpressPackage();
|
|
if (!empty($order_list['list'])) {
|
|
$fields = 'sku_id,sku_name,sku_image,num,goods_money,delivery_no,refund_no,refund_status,refund_reason,refund_real_money,refund_remark';
|
|
foreach ($order_list['list'] as $k => $v) {
|
|
$package_list = $express_package_model->package([["order_id", "=", $v['order_id']], ["site_id", '=', $v['site_id']]], '', '', false);
|
|
$order_goods_list = model("supply_order_goods")->getList(['order_id' => $v['order_id']], $fields);
|
|
$order_list['list'][$k]['order_goods'] = $order_goods_list;
|
|
$order_list['list'][$k]['package_list'] = $package_list;
|
|
unset($v['order_id'], $v['site_id']);
|
|
}
|
|
}
|
|
return $order_list;
|
|
}
|
|
|
|
/***
|
|
* 获取订单数据供应链订单
|
|
* @param $cargoParamList
|
|
* @param $addressParam
|
|
* @return array
|
|
*/
|
|
private function createOrderData($cargoParamList = [])
|
|
{
|
|
$sku_ids = []; //入口SKUID
|
|
$quantity_arr = [];//储存订单商品数量
|
|
$extend_sku_ids = [];//储存订单商品数量
|
|
$third_ids = [];//储存订单商品数量
|
|
foreach ($cargoParamList as $key => $value) {
|
|
if (isset($value['extend_sku_id'])) {
|
|
$this->ValidateData('extend_sku_id', $value);
|
|
$extend_sku_ids[] = $value['extend_sku_id'];
|
|
if (isset($quantity_arr[$value['extend_sku_id']])) {
|
|
$quantity_arr[$value['extend_sku_id']] += $value['quantity'];
|
|
} else {
|
|
$quantity_arr[$value['extend_sku_id']] = $value['quantity'];
|
|
}
|
|
if (is_numeric($value['cloud_id'])) {
|
|
$third_ids[$value['cloud_id']] = $value;
|
|
}
|
|
} else if (isset($value['sku_id'])) {
|
|
$this->ValidateData('sku_id', $value);
|
|
$sku_ids[] = $value;
|
|
if (isset($quantity_arr[$value['sku_id']])) {
|
|
$quantity_arr[$value['sku_id']] += $value['quantity'];
|
|
} else {
|
|
$quantity_arr[$value['sku_id']] = $value['quantity'];
|
|
}
|
|
}
|
|
}
|
|
$goods_sku_list = [];
|
|
$goods_model = new GoodsModel();
|
|
if ($extend_sku_ids) {
|
|
$where_extend_sku = [
|
|
['site_id', '=', $this->supplier_site_id],
|
|
['extend_sku_id', 'in', $extend_sku_ids]
|
|
];
|
|
$goods_sku_list = $goods_model->getGoodsSkuList($where_extend_sku, "site_id,sku_id,extend_sku_id,price_json,sku_image,channel_type,goods_supplier_format")['data'];
|
|
}
|
|
if ($sku_ids) { //处理SKUID订单信息
|
|
$where_sku_id = [
|
|
['site_id', '=', $this->supplier_site_id],
|
|
['sku_id', 'in', array_column($sku_ids, 'sku_id')]
|
|
];
|
|
$sku_list = $goods_model->getGoodsSkuList($where_sku_id, "site_id,sku_id,extend_sku_id,price_json,sku_image,channel_type,goods_supplier_format")['data'];
|
|
$goods_sku_list = array_merge($goods_sku_list, $sku_list);
|
|
}
|
|
$order_lists = [];
|
|
$sku_ids_num = [];
|
|
foreach ($goods_sku_list as $key1 => $value1) { //归纳订单信息
|
|
switch ($value1['channel_type']) {
|
|
case 1688:
|
|
$goods_supplier_format = json_decode($value1['goods_supplier_format'], true);
|
|
$orderDatas = [
|
|
'site_id' => $value1['site_id'],
|
|
'sku_id' => $value1['sku_id'],
|
|
'extend_sku_id' => $value1['extend_sku_id'],
|
|
'offerId' => $goods_supplier_format['offerId'],
|
|
'cloud_id' => 'ag',
|
|
];
|
|
if (isset($quantity_arr[$value1['extend_sku_id']])) {
|
|
$orderDatas['quantity'] = $quantity_arr[$value1['extend_sku_id']];
|
|
} else {
|
|
$orderDatas['quantity'] = $quantity_arr[$value1['sku_id']];
|
|
}
|
|
$order_lists['ag'][] = $orderDatas;
|
|
$sku_ids_num[$value1['sku_id']] = $orderDatas['quantity'];
|
|
break;
|
|
default://第三方数据
|
|
$orderDatas = [
|
|
'site_id' => $value1['site_id'],
|
|
'sku_id' => $value1['sku_id'],
|
|
'extend_sku_id' => $value1['extend_sku_id'],
|
|
'cloud_id' => 'own',
|
|
];
|
|
if (isset($quantity_arr[$value1['extend_sku_id']])) {
|
|
$orderDatas['quantity'] = $quantity_arr[$value1['extend_sku_id']];
|
|
} else {
|
|
$orderDatas['quantity'] = $quantity_arr[$value1['sku_id']];
|
|
}
|
|
$order_lists['own'][] = $orderDatas;
|
|
$sku_ids_num[$value1['sku_id']] = $orderDatas['quantity'];
|
|
break;
|
|
}
|
|
}
|
|
$orderData['third_ids'] = $third_ids;
|
|
$orderData['sku_ids_num'] = $sku_ids_num;
|
|
$orderData['order_lists'] = $order_lists;
|
|
return $orderData;
|
|
}
|
|
|
|
private function ValidateData($type = 'address', $data)
|
|
{
|
|
switch ($type) {
|
|
case 'address': //验证地址
|
|
$rule = [
|
|
'fullName' => 'require|min:2',
|
|
'mobile' => 'require',
|
|
// 'phone' => 'require',
|
|
'provinceText' => 'require',
|
|
'cityText' => 'require',
|
|
'areaText' => 'require',
|
|
'address' => 'require',
|
|
];
|
|
$message = [
|
|
'fullName.require' => '请填写收货人姓名',
|
|
'fullName.min' => '收货人姓名字符串长度不能小于2',
|
|
'mobile.require' => '请填写手机号',
|
|
// 'phone.require' => '请填写电话',
|
|
'provinceText.require' => '请填写省份',
|
|
'cityText.require' => '请填写市',
|
|
'areaText.require' => '请填写区',
|
|
'address.require' => '请填写详细地址',
|
|
];
|
|
break;
|
|
case 'invoice': //验证发票
|
|
|
|
break;
|
|
case 'sku_id': //验证地址
|
|
$rule = [
|
|
'sku_id' => 'require',
|
|
'quantity' => 'require|number',
|
|
];
|
|
$message = [
|
|
'sku_id.require' => '请选择商品',
|
|
'quantity.require' => '请填写商品数量',
|
|
'quantity.number' => '商品数量必须为数字',
|
|
];
|
|
break;
|
|
case 'extend_sku_id': //验证地址
|
|
$rule = [
|
|
'cloud_id' => 'require',
|
|
'extend_sku_id' => 'require',
|
|
'quantity' => 'require|number',
|
|
];
|
|
$message = [
|
|
'extend_sku_id.require' => '请选择商品',
|
|
'quantity.require' => '请填写商品数量',
|
|
'quantity.number' => '商品数量必须为数字',
|
|
'cloud_id.require' => '云仓ID不能为空',
|
|
];
|
|
break;
|
|
}
|
|
$validate = $this->validate($data, $rule, $message);
|
|
return $validate;
|
|
}
|
|
}
|