| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.com
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
- * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
- * =========================================================
- */
- namespace addon\store\event;
- use addon\cashier\model\order\CashierOrderPay;
- use app\model\express\Express;
- use app\model\express\Local;
- use app\model\order\OrderCommon;
- use app\model\order\OrderCreateTool;
- use app\model\store\Store;
- /**
- * 订单创建相关
- */
- class OrderCreateCommonData
- {
- use OrderCreateTool;
- // 行为扩展的执行入口必须是run
- public function handle($params)
- {
- $type = $params['type'];
- $calculate_data = $params['data'];
- $store_id = $calculate_data['store_id'] ?? 0;
- $site_id = $calculate_data['site_id'];
- if($store_id == 0)
- return null;
- $store_model = new Store();
- $store_condition = array(
- ['store_id', '=', $store_id]
- );
- $store_info = $store_model->getStoreInfo($store_condition)['data'] ?? [];
- $store_is_express = $store_info['is_express'];
- $store_is_o2o = $store_info['is_o2o'];
- $store_is_pickup = $store_info['is_pickup'];
- $store_config_model = new \addon\store\model\Config();
- $store_config = $store_config_model->getStoreBusinessConfig($site_id)['data']['value'] ?? [];
- $order_model = new OrderCommon();
- switch($type){
- case 'trade':
- $shop_goods_list = $calculate_data[ 'shop_goods_list' ];
- //必须是连锁模式 还需要判断某一个插件是否存在
- if($store_id > 0 && $store_config['store_business'] == 'store'){
- foreach ($shop_goods_list[ 'deliver_sort' ] as $type) {
- // 物流
- if ($type == 'express') {
- $store_is_express = $store_is_express ?? 0;
- if($store_is_express == 1){
- $title = $shop_goods_list[ 'express_config' ][ 'value' ][ 'express_name' ];
- if ($title == '') {
- $title = Express::express_type[ 'express' ][ 'title' ];
- }
- $express_type[] = [ 'title' => $title, 'name' => 'express' ];
- }
- }
- // 自提
- if ($type == 'store') {
- $store_is_pickup = $store_is_pickup ?? 0;
- if($store_is_pickup == 1){
- //根据坐标查询门店
- $store_model = new Store();
- $store_condition = array (
- [ 'site_id', '=', $site_id ],
- [ 'is_pickup', '=', 1 ],
- [ 'status', '=', 1 ],
- [ 'is_frozen', '=', 0 ],
- );
- $store_condition[] = ['store_id', '=', $store_id];
- $latlng = array (
- 'lat' => $calculate_data[ 'latitude' ],
- 'lng' => $calculate_data[ 'longitude' ],
- );
- $store_list_result = $store_model->getLocationStoreList($store_condition, '*', $latlng);
- $store_list = $store_list_result[ 'data' ];
- $title = $shop_goods_list[ 'store_config' ][ 'value' ][ 'store_name' ];
- if ($title == '') {
- $title = Express::express_type[ 'store' ][ 'title' ];
- }
- $express_type[] = [ 'title' => $title, 'name' => 'store', 'store_list' => $store_list ];
- }
- }
- // 外卖
- if ($type == 'local') {
- $store_is_o2o = $store_is_o2o ?? 0;
- if($store_is_o2o == 1){
- //查询本店的通讯地址
- $title = $shop_goods_list[ 'local_config' ][ 'value' ][ 'local_name' ];
- if ($title == '') {
- $title = '外卖配送';
- }
- $store_model = new Store();
- $store_condition = array (
- [ 'site_id', '=', $site_id ],
- );
- // if (addon_is_exit('store', $site_id)) {
- $store_condition[] = [ 'is_o2o', '=', 1 ];
- $store_condition[] = [ 'status', '=', 1 ];
- $store_condition[] = [ 'is_frozen', '=', 0 ];
- // } else {
- // $store_condition[] = ['is_default', '=', 1];
- // }
- $store_condition[] = ['store_id', '=', $store_id];
- $latlng = array (
- 'lat' => $calculate_data[ 'latitude' ],
- 'lng' => $calculate_data[ 'longitude' ],
- );
- $store_list_result = $store_model->getLocationStoreList($store_condition, '*', $latlng);
- $store_list = $store_list_result[ 'data' ];
- $express_type[] = [ 'title' => $title, 'name' => 'local', 'store_list' => $store_list ];
- }
- }
- }
- return $order_model->success($express_type ?? []);
- }
- break;
- case 'trade_calc':
- if($store_id > 0 && $store_config['store_business'] == 'store'){
- $shop_goods = $params['shop_goods'];
- //如果本地配送开启, 则查询出本地配送的配置
- $local_model = new Local();
- $local_info_result = $local_model->getLocalInfo([ [ 'site_id', '=', $site_id ], ['store_id', '=', $store_id ] ]);
- $local_info = $local_info_result[ 'data' ] ?? [];
- $shop_goods[ 'local_config' ][ 'info' ] = $local_info;
- $delivery_array = $calculate_data[ 'delivery' ] ?? [];
- $delivery_type = $delivery_array[ 'delivery_type' ] ?? 'express';
- if ($delivery_type == 'store') {
- //门店自提
- $delivery_money = 0;
- $shop_goods[ 'delivery' ][ 'delivery_type' ] = 'store';
- if ($store_is_pickup == 0) {
- $error = ['error_msg' => '门店自提方式未开启!'];
- }
- $shop_goods[ 'delivery' ][ 'store_id' ] = $calculate_data[ 'delivery' ][ 'store_id' ];
- $shop_goods[ 'buyer_ask_delivery_time' ] = $calculate_data[ 'buyer_ask_delivery_time' ];
- $shop_goods = $this->storeOrderData($shop_goods, $calculate_data);
- } else {
- if (empty($calculate_data[ 'member_address' ])) {
- $delivery_money = 0;
- $shop_goods[ 'delivery' ][ 'delivery_type' ] = 'express';
- $error = ['error_msg' => '未配置默认收货地址!'];
- } else {
- if ($delivery_type == 'express') {
- if ($store_is_express == 1) {
- //物流配送
- $express = new Express();
- $express_fee_result = $express->calculate($shop_goods, $calculate_data);
- if ($express_fee_result[ 'code' ] < 0) {
- $error = ['error_msg' => $express_fee_result[ 'message' ]];
- $delivery_fee = 0;
- } else {
- $delivery_fee = $express_fee_result[ 'data' ][ 'delivery_fee' ];
- }
- } else {
- $error = ['error_msg' => '物流配送方式未开启!'];
- $delivery_fee = 0;
- }
- $delivery_money = $delivery_fee;
- $shop_goods[ 'delivery' ][ 'delivery_type' ] = 'express';
- } else if ($delivery_type == 'local') {
- //外卖配送
- $delivery_money = 0;
- $shop_goods[ 'delivery' ][ 'delivery_type' ] = 'local';
- if ($store_is_o2o == 0) {
- $error = ['error_msg' => '外卖配送方式未开启!'];
- } else {
- if (empty($calculate_data[ 'delivery' ][ 'store_id' ])) {
- $error = ['error_msg' => '门店未选择!'];
- }
- $local_delivery_time = 0;
- if (!empty($calculate_data[ 'buyer_ask_delivery_time' ])) {
- $local_delivery_time = $calculate_data[ 'buyer_ask_delivery_time' ];
- }
- $shop_goods[ 'buyer_ask_delivery_time' ] = $local_delivery_time;
- $local_model = new Local();
- $local_result = $local_model->calculate($shop_goods, $calculate_data);
- $shop_goods[ 'delivery' ][ 'start_money' ] = 0;
- if ($local_result[ 'code' ] < 0) {
- $shop_goods[ 'delivery' ][ 'start_money' ] = $local_result[ 'data' ][ 'start_money_array' ][ 0 ] ?? 0;
- $error = ['error_msg' => $local_result[ 'message' ], 'priority' => 1, 'error' => $local_result[ 'data' ][ 'code' ]];
- } else {
- $delivery_money = $local_result[ 'data' ][ 'delivery_money' ];
- if (!empty($local_result[ 'data' ][ 'error_code' ])) {
- $error = ['error_msg' => $local_result[ 'data' ][ 'error' ], 'priority' => 1, 'error' => $local_result[ 'data' ][ 'error' ]];
- }
- }
- $shop_goods[ 'delivery' ][ 'error' ] = $error['error'] ?? 0;
- $shop_goods[ 'delivery' ][ 'error_msg' ] = $error['error_msg'] ?? '';
- }
- }
- }
- }
- return $order_model->success(['shop_goods' => $shop_goods, 'delivery_money' => $delivery_money, 'error' => $error ?? []]);
- }
- break;
- }
- }
- }
|