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; } }