express) {
return [
'code' => 1,
'msg' => '请选择快递公司'
];
}
$order_type = 0;
if ((int)$this->type === 0) {
$order_id = $this->order_id;
} else {
if (((int)$this->type === 2)) {
$supplier_form = new SupplierForm();
$supplier_form->order_id = (string)$this->order_id;
$res = $supplier_form->supplierOrderList($this->order->supplier_id);
if ($res['code'] === 0) {
$cloud_order = $res['data']['list'][0];
} else {
return [
'code' => 1,
'msg' => '订单信息错误' . $res['msg']
];
}
} else {
$supplier_form = new SupplierForm();
$supplier_form->order_id = $this->order_id;
$res = $supplier_form->supplierPurchaseOrderList();
if ($res['code'] === 0) {
$cloud_order = $res['data']['list'][0];
$order_id = OrderTransit::findOne(['cloud_order_id' => $cloud_order['id']])->order_id;
} else {
return [
'code' => 1,
'msg' => '订单信息错误' . $res['msg']
];
}
}
}
if (in_array((int)$this->type, [0, 1])) {
$order = Order::findOne([
'id' => $order_id,
'mch_id' => get_mch_id(),
]);
} else {
$order = PurchaseOrder::findOne([
'cloud_order_id' => $this->order_id,
'is_delete' => 0
]);
}
if (!$order) {
return [
'code' => 1,
'msg' => '订单错误'
];
}
if (isset($cloud_order)) {
$order->order_no = $cloud_order['order_no'];
}
$express = Express::getOne($this->express);
if (!$express) {
return [
'code' => 1,
'msg' => '快递公司不正确'
];
}
$where = [
'order_id' => $order->id,
'order_type' => $order_type
];
if (get_supplier_id()) {
$kdniao_mch_id = Option::get('kdniao_mch_id', get_supplier_id(), 'supplier');
$where['supplier_id'] = get_supplier_id();
} else {
$kdniao_mch_id = Option::get('kdniao_mch_id', $this->store_id, 'store');
$where['store_id'] = $this->store_id;
}
$where['EBusinessID'] = $kdniao_mch_id['value'];
$orderExpressList = OrderExpress::find()->where($where)
->all();
if (!empty($orderExpressList)) {
foreach ($orderExpressList as $orderExpress) {
if ($orderExpress->express_code == $express['code']) {
$result = [
'EBusinessID' => $orderExpress->EBusinessID,
'Order' => json_decode($orderExpress->order, true),
'PrintTemplate' => $orderExpress->printTeplate
];
return [
'code' => 0,
'msg' => '成功',
'data' => $result
];
}
}
$orderCode = $order->order_no . "-" . count($orderExpressList);
} else {
$orderCode = $order->order_no;
}
// 构造电子面单提交信息
$eorder = [];
if (get_supplier_id()) {
$delivery = Delivery::findOne(['express_id' => $express['id'], 'is_delete' => 0, 'supplier_id' => get_supplier_id()]);
} else {
$delivery = Delivery::findOne(['express_id' => $express['id'], 'is_delete' => 0, 'store_id' => $this->store_id]);
}
if (!$delivery) {
$delivery_id = 0;
$pay_type = 1;
} else {
$delivery_id = $delivery->id;
$pay_type = 3;
$eorder['CustomerName'] = $delivery->customer_name;
$eorder['CustomerPwd'] = $delivery->customer_pwd;
$eorder['SendSite'] = $delivery->send_site;
$eorder['MonthCode'] = $delivery->month_code;
if ($delivery->template_size) {
$eorder["TemplateSize"] = $delivery->template_size;
}
}
if (get_supplier_id()) {
$sender_list = Sender::findOne(['delivery_id' => $delivery_id, 'is_delete' => 0, 'supplier_id' => get_supplier_id()]);
} else {
$sender_list = Sender::findOne(['delivery_id' => $delivery_id, 'is_delete' => 0, 'store_id' => $this->store_id]);
}
if (!$sender_list) {
return [
'code' => 1,
'msg' => '请先设置发件人信息'
];
}
$eorder["ShipperCode"] = $express['code'];
$eorder["OrderCode"] = $orderCode;
$eorder["PayType"] = $pay_type;
$eorder["ExpType"] = 1;
$eorder["IsReturnPrintTemplate"] = 1;
$eorder["IsSendMessage"] = 1;
$sender = [];
$sender["Company"] = $sender_list->company;
$sender["Name"] = $sender_list->name;
$sender["Mobile"] = $sender_list->mobile ? $sender_list->mobile : $sender_list->tel;
$sender["ProvinceName"] = $sender_list->province;
$sender["CityName"] = $sender_list->city;
$sender["ExpAreaName"] = $sender_list->exp_area;
$sender["Address"] = $sender_list->address;
$sender["PostCode"] = $sender_list->post_code;
$receiver = [];
$receiver["Name"] = $order->name;
$receiver["Mobile"] = $order->mobile;
$address = ['province' => '空', 'city' => '空', 'district' => '空', 'detail' => $order->address];
$receiver_address = $order->address_data ? json_decode($order->address_data, true) : $address;
$receiver["ProvinceName"] = $receiver_address['province'];
$receiver["CityName"] = $receiver_address['city'];
$receiver["ExpAreaName"] = $receiver_address['district'];
$receiver["Address"] = str_replace(PHP_EOL, '', $receiver_address['detail']);
$receiver["PostCode"] = $this->post_code;
if (isset($cloud_order)) {
$good_list = $cloud_order['goods_list'];
} else {
$form = new OrderListForm();
$good_list = $form->getOrderGoodsList($order->id);
}
$good = $good_list[0];
$commodity = [];
// TODO 商品信息暂时不显示
foreach ($good_list as $index => $good) {
$commodityOne = [];
$desc = "";
$good['attr_list'] = ($good['attr']['attr_list'] ?? $good['attr']) ?? $good['attr_list'];
if (is_string($good['attr_list'])) {
$good['attr_list'] = json_decode($good['attr_list'], true);
}
foreach ($good['attr_list'] as $key => $value) {
$desc .= ',';
$desc .= ($value['attr_group_name'] ?? '') . '' . $value['attr_name'];
}
$commodityOne["GoodsName"] = $good['name'] .'_'. $desc;
// $commodityOne["GoodsName"] = '商品';
$commodityOne["GoodsCode"] = "";
$commodityOne["Goodsquantity"] = $good['num'];
$commodityOne["GoodsPrice"] = "";
$commodityOne["GoodsWeight"] = number_format($good['weight'] / 1000, 2, '.', '');
$commodityOne['GoodsDesc'] = "";
$commodityOne['GoodsVol'] = "";
$commodity[] = $commodityOne;
}
$eorder["Sender"] = $sender;
$eorder["Receiver"] = $receiver;
$eorder["Commodity"] = $commodity;
// 调用电子面单
$jsonParam = Json::encode($eorder);
// $jsonParam = JSON($eorder);//兼容php5.2(含)以下
// echo "电子面单接口提交内容:
".$jsonParam;
$jsonResult = KdOrder::submitEOrder($jsonParam, $this->store_id, get_supplier_id());
// echo "
电子面单提交结果:
".$jsonResult;
//解析电子面单返回结果
$result = json_decode($jsonResult, true);
// echo "
返回码:".$result["ResultCode"];
if ($result["ResultCode"] == "100" || $result["ResultCode"] == '106') {
// echo "
是否成功:".$result["Success"];
$form = new OrderExpress();
$form->store_id = $this->store_id;
$form->supplier_id = get_supplier_id();
$form->order_id = $order->id;
$form->EBusinessID = $result['EBusinessID'];
$form->order = Json::encode($result['Order']);
$form->printTeplate = $result['PrintTemplate'];
$form->is_delete = 0;
$form->order_type = $order_type;
$form->express_code = $express['code'];
$form->save();
return [
'code' => 0,
'msg' => '成功',
'data' => $result
];
} else {
// echo "
电子面单下单失败";
return [
'code' => 1,
'msg' => $result['Reason'],
'data' => $result
];
}
}
private function getExpressCode($express, $type)
{
$express_afters = [
'快递',
'快运',
'物流',
'速运',
];
$express = Express::find()->orderBy('sort')->where([
'name' => $express,
'type' => $type,
])->one();
if ($express) {
return $express->code;
}
foreach ($express_afters as $after) {
$express = str_replace($after, '', $express);
}
$express = Express::find()->orderBy('sort')->where([
'AND',
['LIKE', 'name', $express,],
['type' => $type,]
])->one();
if ($express) {
return $express;
}
return '';
}
}