<?php
namespace eapie\source\request\shop;
use eapie\main;
use eapie\error;
class group_goods extends \eapie\source\request\shop
{
public function api_list_goods($data = array()){
$config = array(
'orderby' => array(),
'where' => array(),
'limit' => object(parent::REQUEST)->limit($data, parent::REQUEST_USER),
);
$sql_join_stock_max_price = object(parent::TABLE_SHOP_GOODS_SKU)->sql_join_stock_max_price("sgg");
$sql_join_stock_min_price = object(parent::TABLE_SHOP_GOODS_SKU)->sql_join_stock_min_price("sgg");
$config['select'] = array(
'sgg.shop_group_goods_id AS group_id',
'sgg.shop_goods_id AS goods_id',
'sg.shop_goods_name AS goods_name',
'sgg.shop_group_goods_num AS num',
'sgg.shop_group_goods_now_num AS now_num',
'sku.shop_goods_sku_price as original_price',
'(' . $sql_join_stock_max_price . ') as original_price_max',
'(' . $sql_join_stock_min_price . ') as original_price_min',
'sgg.shop_group_goods_price AS group_price',
'sgg.shop_group_goods_start_time AS start_time',
'sgg.shop_group_goods_end_time AS end_time',
'sg.shop_goods_property AS property',
'sgi.image_id as image_id',
);
$config["orderby"] = object(parent::REQUEST)->orderby($data, array(
'group_id_desc' => array('shop_group_goods_id', true),
'group_id_asc' => array('shop_group_goods_id', false),
'price_desc' => array('shop_group_goods_price', true),
'price_asc' => array('shop_group_goods_price', false),
'num_desc' => array('shop_group_goods_num', true),
'num_asc' => array('shop_group_goods_num', false),
'start_time_desc' => array('shop_group_goods_start_time', true),
'start_time_asc' => array('shop_group_goods_start_time', false),
'end_time_desc' => array('shop_group_goods_end_time', true),
'end_time_asc' => array('shop_group_goods_end_time', false),
'now_num_desc' => array('shop_group_goods_now_num', true),
'now_num_asc' => array('shop_group_goods_now_num', false),
));
$config["orderby"][] = array('shop_group_goods_id', false);
$config['where'][] = array('sgg.shop_group_goods_is_end=0');
$data = object(parent::TABLE_SHOP_GROUP_GOODS)->select_page($config);
return $data;
}
public function api_self_pay($input = array())
{
object(parent::REQUEST_USER)->check();
$user_id = $_SESSION['user_id'];
object(parent::ERROR)->check($input, 'id', parent::TABLE_SHOP_ORDER, array('args'), 'shop_order_id');
object(parent::ERROR)->check($input, 'pay_method', parent::TABLE_SHOP_ORDER, array('args'));
$shop_group_order = object(parent::TABLE_SHOP_GROUP_ORDER)->find($input['id']);
if (empty($shop_group_order) || $shop_group_order['user_id'] != $user_id)
throw new error('订单数据不存在');
if($shop_group_order['shop_group_order_state'] == 1 || $shop_group_order['shop_group_order_state'] == 2 || $shop_group_order['shop_group_order_state'] == 3)
throw new error('拼团时间到');
if ($shop_group_order['shop_group_order_pay_state'] == 1)
throw new error('订单已支付');
$config = object(parent::TABLE_CONFIG)->data(object(parent::TABLE_CONFIG)->find('shop_order'), true);
if (!empty($config['order_timeout'])) {
if (time() - $shop_group_order['shop_group_order_insert_time'] > $config['order_timeout']) {
$update_where = array(array('shop_group_order_id=[+]', $input['id']));
$update_data = array(
'shop_group_order_status' => 1, 'shop_group_order_update_time' => time(),
);
object(parent::TABLE_SHOP_GROUP_ORDER)->update($update_where, $update_data);
throw new error('订单已失效,请重新下单');
}
}
$cache = object(parent::TABLE_SHOP_GROUP_GOODS)->find_join($shop_group_order['shop_group_goods_id']);
$shop_group_goods_name = $cache['shop_goods_name'];
unset($cache);
$order = array(
'order_id' => object(parent::TABLE_ORDER)->get_unique_id(),
'order_type' => parent::TRANSACTION_TYPE_SHOP_GROUP_ORDER,
'order_comment' => '商城拼团',
'order_action_user_id' => $user_id,
'order_plus_method' => '',
'order_plus_account_id' => '',
'order_plus_value' => $shop_group_order['shop_group_order_price'],
'order_minus_method' => $input['pay_method'],
'order_minus_account_id' => $user_id,
'order_minus_value' => $shop_group_order['shop_group_order_price'],
'order_state' => 1,
'order_pay_state' => 1,
'order_sign' => $shop_group_order['shop_order_id'],
'order_json' => array(),
'order_insert_time' => time(),
);
$output['group_now_num'] = object(parent::TABLE_SHOP_GROUP_GOODS)->group_now_num_add($shop_group_order['shop_group_goods_id']);
switch ($input['pay_method']) {
case parent::PAY_METHOD_WEIXINPAY://微信
case parent::PAY_METHOD_ALIPAY://支付宝
$subject = $shop_group_goods_name;
$output = object(parent::REQUEST_APPLICATION)->get_pay_config($input, $order['order_json'], array(
'money_fen' => $shop_group_order['shop_group_order_price'],
'subject' => $subject,
'body' => $subject,
'order_id' => $order['order_id']
));
if (object(parent::TABLE_ORDER)->insert($order)) {
$output['order_id'] = $order['order_id'];
return $output;
} else {
throw new error ('操作失败');
}
break;
case parent::PAY_METHOD_USER_MONEY://用户钱包
object(parent::ERROR)->check($input, 'pay_password', parent::TABLE_USER, array('args'));
$res = object(parent::TABLE_USER)->check_pay_password($input['pay_password']);
if ($res !== true)
throw new error($res);
$user_money = object(parent::TABLE_USER_MONEY)->find_now_data($user_id);
if (empty($user_money['user_money_value']) || $user_money['user_money_value'] < $shop_group_order['shop_group_order_price'])
throw new error('余额不足');
return object(parent::TABLE_SHOP_GROUP_ORDER)->pay_by_user_money($shop_group_order['order_id'], $user_money);
break;
}
}
public function api_get_goods($data = array()){
object(parent::ERROR)->check($data, 'group_id', parent::TABLE_SHOP_GROUP_GOODS, array('args', 'exists_id'));
$is_end = object(parent::TABLE_SHOP_GROUP_GOODS)->group_is_end($data['group_id']);
if ($is_end === 0) {
$group = object(parent::TABLE_SHOP_GROUP_GOODS)->find($data['group_id']);
$goods = object(parent::TABLE_SHOP_GOODS)->find($group['shop_goods_id']);
if (empty($goods))
throw new error('商品不存在');
if ($goods['shop_goods_state'] != 1)
throw new error('商品未发布');
if ($goods['shop_goods_trash'] == 1)
throw new error('商品已回收');
$data = array($goods);
$data = object(parent::TABLE_SHOP_GOODS)->get_additional_data($data, array(
'shop_goods_type' => array(
'where' => array(
array('[and] t.type_state=1')
),
),
));
$data = $data[0];
$data = cmd(array('shop_goods_', $data, true), 'arr key_prefix');
$blacklist = array(
'state',
'warning',
'stock_warning',
'stock_mode',
'sort',
'seller_note',
'trash',
'trash_time',
'user_id',
);
$data = cmd(array($data, $blacklist), 'arr blacklist');
$data['goods_type'] = array();
foreach ($data['type'] as $val) {
$data['goods_type'][] = $val['type_name'];
}
unset($data['type']);
$data['goods_image'] = array();
foreach ($data['image_main'] as $val) {
$data['goods_image'][] = $val['image_id'];
}
unset($data['image_main']);
$data['goods_spu'] = array();
foreach ($data['spu'] as $val) {
$item = array(
'id' => $val['shop_goods_spu_id'],
'parent_id' => $val['shop_goods_spu_parent_id'],
'name' => $val['shop_goods_spu_name'],
'info' => $val['shop_goods_spu_info'],
'sort' => $val['shop_goods_spu_sort'],
'image_id' => $val['image_id'],
'required' => $val['shop_goods_spu_required'],
'son' => array()
);
foreach ($val['son'] as $val2) {
$item['son'][] = array(
'id' => $val2['shop_goods_spu_id'],
'parent_id' => $val2['shop_goods_spu_parent_id'],
'name' => $val2['shop_goods_spu_name'],
'info' => $val2['shop_goods_spu_info'],
'sort' => $val2['shop_goods_spu_sort'],
'image_id' => $val2['image_id'],
'required' => $val2['shop_goods_spu_required'],
);
}
$data['goods_spu'][] = $item;
}
unset($data['spu']);
$data['goods_sku'] = array();
foreach ($data['sku'] as $val) {
$data['goods_sku'][] = array(
'id' => $val['shop_goods_sku_id'],
'spu_id' => $val['shop_goods_spu_id'],
'image_id' => $val['image_id'],
'name' => $val['shop_goods_sku_name'],
'info' => $val['shop_goods_sku_info'],
'stock' => $val['shop_goods_sku_stock'],
'price' => $val['shop_goods_sku_price'],
);
}
unset($data['sku']);
$data['price_min'] = isset($data['sku_min']['shop_goods_sku_price']) ? $data['sku_min']['shop_goods_sku_price'] : 0;
$data['price_max'] = isset($data['sku_max']['shop_goods_sku_price']) ? $data['sku_max']['shop_goods_sku_price'] : 0;
unset($data['sku_min'], $data['sku_max']);
$data['goods_group'] = array(
'id' => $group['shop_group_goods_id'],
'group_price' => $group['shop_group_goods_price'],
'start_time' => $group['shop_group_goods_start_time'],
'end_time' => $group['shop_group_goods_end_time'],
'now_num' => $group['shop_group_goods_now_num'],
'num' => $group['shop_group_goods_num'],
'is_end' => $group['shop_group_goods_is_end'],
'is_success' => $group['shop_group_goods_is_success'],
);
unset($group);
return $data;
} elseif($is_end == 1) {
$data = array('code' => 1, 'msg' => '时间到,人数未满,拼团结束,未拼团成功');
return $data;
} elseif($is_end == 2) {
$data = array('code' => 2, 'msg' => '时间到,人数已满,拼团结束,拼团成功');
return $data;
} elseif($is_end == 3) {
$data = array('code' => 3, 'msg' => '时间未到,拼团人数已满,拼团结束,拼团成功');
return $data;
} else {
$data = array('msg' => '拼团已结束');
return $data;
}
}
public function api_self_add_group($input = array()){
object(parent::REQUEST_USER)->check();
$user_id = $_SESSION['user_id'];
object(parent::ERROR)->check($input, 'group_id', parent::TABLE_SHOP_GROUP_GOODS, array('args', 'exists_id'));
object(parent::ERROR)->check($input, 'address_id', parent::TABLE_SHOP_GROUP_ORDER, array('args'), 'user_address_id');
object(parent::ERROR)->check($input, 'pay_method', parent::TABLE_SHOP_GROUP_ORDER, array('args'));
$is_end = object(parent::TABLE_SHOP_GROUP_GOODS)->group_is_end($input['group_id']);
if($is_end === 1 || $is_end === 2 || $is_end === 3)
throw new error('拼团结束');
$user_address = $this->_get_user_address($input['address_id']);
$group = object(parent::TABLE_SHOP_GROUP_GOODS)->find($input['group_id']);
$goods_sku_id = $group['shop_goods_sku_id'];
$shipping_money = 0;
$money = (int)$group['shop_group_goods_price'] + $shipping_money;
$cache = object(parent::TABLE_SHOP_GOODS)->find($group['shop_goods_id']);
$group['shop_group_goods_property'] = (int)$cache['shop_goods_property'];
unset($cache);
$group_order = array(
'shop_group_order_id' => object(parent::TABLE_SHOP_GROUP_ORDER)->get_unique_id(), 'user_id' => $user_id, 'shop_order_id' => object(parent::TABLE_SHOP_GROUP_ORDER)->get_unique_id(), 'shop_group_goods_id' => $group['shop_group_goods_id'], 'shop_group_order_property' => $group['shop_group_goods_property'], 'shop_group_order_price' => $money, 'shop_group_order_state' => $is_end, 'shop_order_pay_method' => $input['pay_method'], 'shop_group_order_pay_state' => 0, 'shop_group_order_insert_time' => time(),
'shop_group_order_update_time' => time(),
'shop_group_order_json' => array(),
);
$group_order = array_merge($group_order, $user_address);
$group_order['shop_group_order_json'] = cmd(array($group_order['shop_group_order_json']), 'json encode');
$data_goods = object(parent::TABLE_SHOP_GOODS_SKU)->find_join_goods_spu($goods_sku_id);
if ($data_goods['sku_stock'] <= 0)
throw new error('商品:'.$data_goods['goods_name'].'库存不足');
unset($group);
unset($goods_sku_id);
$order = array(
'order_id' => object(parent::TABLE_ORDER)->get_unique_id(),
'order_type' => parent::TRANSACTION_TYPE_SHOP_GROUP_ORDER,
'order_comment' => '商城拼团',
'order_action_user_id' => $user_id,
'order_plus_method' => '',
'order_plus_account_id' => '',
'order_plus_value' => $money,
'order_minus_method' => $input['pay_method'],
'order_minus_account_id' => $user_id,
'order_minus_value' => $money,
'order_state' => 1,
'order_pay_state' => 0,
'order_sign' => $group_order['shop_order_id'],
'order_json' => array(),
'order_insert_time' => time(),
);
$group_order['order_id'] = $order['order_id'];
$output = array();
switch ($input['pay_method']) {
case parent::PAY_METHOD_WEIXINPAY://微信
case parent::PAY_METHOD_ALIPAY://支付宝
$subject = $data_goods['goods_name'];
$output = object(parent::REQUEST_APPLICATION)->get_pay_config($input, $order['order_json'], array(
'money_fen' => $money,
'subject' => $subject,
'body' => $subject,
'order_id' => $order['order_id']
));
break;
case parent::PAY_METHOD_USER_MONEY://用户钱包
$output['order_id'] = $order['order_id'];
$output['shop_order_id'] = $group_order['shop_order_id'];
$output['order_money'] = $money;
break;
}
$order['order_json'] = cmd(array($order['order_json']), 'json encode');
if (object(parent::TABLE_SHOP_GROUP_ORDER)->create_order($order, $group_order)) {
$output['group_order_id'] = $group_order['shop_group_order_id'];
return $output;
} else {
throw new error('操作失败');
}
}
public function api_self_list_order($request = array()){
object(parent::REQUEST_USER)->check();
$user_id = $_SESSION['user_id'];
$config = array(
'orderby' => array(),
'where' => array(),
'limit' => object(parent::REQUEST)->limit($request, parent::REQUEST_USER),
);
$config['select'] = array(
'gorder.shop_order_id AS order_id',
'gorder.shop_group_goods_id AS group_id',
'gorder.shop_group_order_price AS order_price',
'gorder.shop_group_order_property AS property',
'gorder.shop_order_pay_price AS pay_price',
'gorder.shop_order_pay_method AS pay_method',
'gorder.shop_group_order_pay_state AS pay_state',
'gorder.shop_group_order_pay_time AS pay_time',
'gg.shop_goods_id AS goods_id',
'gg.shop_group_goods_start_time AS start_time',
'gg.shop_group_goods_end_time as end_time',
'gg.shop_group_goods_num AS num',
'gg.shop_group_goods_now_num AS now_num',
'gorder.shop_group_order_id as group_order_id',
);
$config["orderby"][] = array('shop_order_id', false);
$config['where'][] = array('gorder.user_id=[+]', $user_id);
$data = object(parent::TABLE_SHOP_GROUP_ORDER)->select_page($config,$user_id);
$config = array();
if (empty($data['order'])) {
return $data;
} else {
for ($i = 0; $i < count($data['order']); $i++) {
$config['where'] = array(
array('shop_goods_id=[+]',$data['order'][$i]['goods_id']),
array('[and] shop_goods_image_main=[+]',1)
);
$config['select'] = array(
'image_id'
);
$img_data = object(parent::TABLE_SHOP_GOODS_IMAGE)->select($config);
if(isset($img_data[0]['image_id']) && $img_data[0]['image_id'] !== null && $img_data[0]['image_id'] !== ''){
$data['order'][$i]['main_img'] = $img_data[0]['image_id'];
}
}
return $data;
}
}
public function api_self_get_order($data = array()){
object(parent::REQUEST_USER)->check();
$user_id = $_SESSION['user_id'];
object(parent::ERROR)->check($data, 'group_order_id', parent::TABLE_SHOP_GROUP_ORDER, array('args','exist'));
$group_id = object(parent::TABLE_SHOP_GROUP_ORDER)->find_group($data['group_order_id']);
$group_id = $group_id['shop_group_goods_id'];
$is_end = object(parent::TABLE_SHOP_GROUP_GOODS)->group_is_end($group_id);
$config = array(
'select' => array(),
'where' => array(),
);
$config['find'] = array(
'gorder.shop_order_id AS order_id',
'gorder.shop_group_goods_id AS group_id',
'gorder.shop_group_order_price AS order_price',
'gorder.shop_group_order_property AS property',
'gorder.shop_group_order_state AS order_state',
'gorder.shop_group_order_price AS pay_price',
'gorder.shop_order_pay_method AS pay_method',
'gorder.shop_group_order_pay_state AS pay_state',
'gorder.shop_group_order_pay_time AS pay_time',
'gorder.user_address_consignee AS consignee',
'gorder.user_address_tel AS tel',
'gorder.user_address_phone AS phone',
'gorder.user_address_country AS country',
'gorder.user_address_province AS province',
'gorder.user_address_city AS city',
'gorder.user_address_district AS district',
'gorder.user_address_details AS details',
'gg.shop_goods_id AS goods_id',
'gg.shop_group_goods_start_time AS start_time',
'gg.shop_group_goods_end_time as end_time',
'gg.shop_group_goods_num AS num',
'gg.shop_group_goods_now_num AS now_num',
);
$config['where'] = array(
array("gorder.user_id=[+]",$user_id),
array("[and] gorder.shop_group_order_id=[+]",$data['group_order_id']),
);
$result = object(parent::TABLE_SHOP_GROUP_ORDER)->find_join_group_goods($config);
# 回收config
unset($config);
if(empty($result['goods_id'])){
return $result;
} else {
$config['where'] = array(
array('shop_goods_id=[+]',$result['goods_id']),
array('[and] shop_goods_image_main=[+]',1)
);
$config['select'] = array('image_id');
$img_data = object(parent::TABLE_SHOP_GOODS_IMAGE)->select($config);
if(isset($img_data[0]['image_id']) && $img_data[0]['image_id'] !== null && $img_data[0]['image_id'] !== ''){
$result['main_img'] = $img_data[0]['image_id'];
}
return $result;
}
}
private function _get_user_address($user_address_id = '')
{
$address = object(parent::TABLE_USER_ADDRESS)->find($user_address_id);
if (empty($address))
throw new error('收货地址ID有误,数据不存在');
object(parent::ERROR)->check($address, 'user_address_consignee', parent::TABLE_USER_ADDRESS, array('args'));
object(parent::ERROR)->check($address, 'user_address_phone', parent::TABLE_USER_ADDRESS, array('args'));
object(parent::ERROR)->check($address, 'user_address_province', parent::TABLE_USER_ADDRESS, array('args'));
object(parent::ERROR)->check($address, 'user_address_city', parent::TABLE_USER_ADDRESS, array('args'));
object(parent::ERROR)->check($address, 'user_address_district', parent::TABLE_USER_ADDRESS, array('args'));
object(parent::ERROR)->check($address, 'user_address_details', parent::TABLE_USER_ADDRESS, array('args'));
$whitelist = array(
'user_address_consignee',
'user_address_phone',
'user_address_province',
'user_address_city',
'user_address_district',
'user_address_details',
);
return cmd(array($address, $whitelist), 'arr whitelist');
}
}