<?php
namespace eapie\source\request\house;
use eapie\main;
use eapie\error;
class admin_product extends \eapie\source\request\house {
public function api_edit($data = array()){
object(parent::REQUEST_ADMIN)->check(parent::AUTHORITY_PRODUCT_EDIT);
object(parent::ERROR)->check($data, 'house_product_id', parent::TABLE_HOUSE_PRODUCT, array('args'));
if( isset($data['wechat_group_id']) )
object(parent::ERROR)->check($data, 'wechat_group_id', parent::TABLE_HOUSE_PRODUCT, array('args'));
$original = object(parent::TABLE_HOUSE_PRODUCT)->find($data['house_product_id']);
if (empty($original))
throw new error('数据不存在');
$whitelist = array(
'wechat_group_id',
);
$update_data = cmd(array($data, $whitelist), 'arr whitelist');
if( !empty($update_data) ){
foreach($update_data as $k => &$v) {
if(isset($original[$k]) && $original[$k] == $v){
unset($update_data[$k]);
}
}
}
if ( empty($update_data) ) throw new error('没有需要更新的数据');
$update_data['house_product_update_time'] = time();
if (object(parent::TABLE_HOUSE_PRODUCT)->update(array(array('house_product_id=[+]', $data['house_product_id'])), $update_data)) {
object(parent::TABLE_ADMIN_LOG)->insert($data, $update_data);
return $data['house_product_id'];
} else {
throw new error('操作失败');
}
}
public function api_state($data = array()){
object(parent::REQUEST_ADMIN)->check(parent::AUTHORITY_PRODUCT_STATE);
object(parent::ERROR)->check($data, 'house_product_id', parent::TABLE_HOUSE_PRODUCT, array('args'));
if( isset($data['house_product_state']) )
object(parent::ERROR)->check($data, 'house_product_state', parent::TABLE_HOUSE_PRODUCT, array('args'));
if( !in_array($data['house_product_state'], array("0", "1")) ){
throw new error('审核状态值不合法');
}
$original = object(parent::TABLE_HOUSE_PRODUCT)->find($data['house_product_id']);
if (empty($original))
throw new error('数据不存在');
if( $original['house_product_state'] != 2 ){
throw new error('非等待审核产品');
}
$whitelist = array(
'house_product_state',
);
$update_data = cmd(array($data, $whitelist), 'arr whitelist');
foreach ($update_data as $key => &$val) {
if( isset($original[$key]) && $original[$key] == $val ){
unset($update_data[$key]);
}
}
if (empty($update_data))
throw new error('没有需要更新的数据');
$update_data['house_product_update_time'] = time();
$update_where = array(array('house_product_id=[+]', $data['house_product_id']));
if( object(parent::TABLE_HOUSE_PRODUCT)->update($update_where, $update_data) ){
if( $update_data['house_product_state'] == 1 ){
$this->_pass_reward_money($original['user_id'], $data['house_product_id'], $original['house_product_name']);
}
object(parent::TABLE_ADMIN_LOG)->insert($data, $update_data);
return $data['house_product_id'];
} else {
throw new error('操作失败');
}
}
private function _pass_reward_money( $user_id, $house_product_id, $house_product_name ){
$find_reward = object(parent::TABLE_ORDER)->find_where(array(
array('order_sign=[+]', $house_product_id),
array('[and] order_type=[+]', parent::TRANSACTION_TYPE_HOUSE_PRODUCT_AWARD_MONEY),
array('[and] order_state=1'),
array('[and] order_pay_state=1')
));
if( !empty($find_reward) ){
return false }
$data_config = object(parent::TABLE_CONFIG)->data(object(parent::TABLE_CONFIG)->find('house_product_add_reward_user_money'), true);
if( empty($data_config['state']) ){
return false;
}
if (empty($data_config['random_state'])) {
if (empty($data_config['user_money']) || !is_numeric($data_config['user_money']))
return false;
$money = $data_config['user_money'];
$comment = '发布楼盘产品“'.$house_product_name.'”审核通过,奖励用户钱包';
}else{
if (empty($data_config['random_min_user_money']) || !is_numeric($data_config['random_min_user_money']))
return false;
if (empty($data_config['random_max_user_money']) ||
!is_numeric($data_config['random_max_user_money']) ||
$data_config['random_max_user_money'] < $data_config['random_min_user_money'])
return false;
$money = mt_rand($data_config['random_min_user_money'], $data_config['random_max_user_money']);
$comment = '发布楼盘产品“'.$house_product_name.'”审核通过,随机奖励用户钱包[¥'.($data_config['random_min_user_money']/100).'~¥'.($data_config['random_max_user_money']/100).']';
}
$order = array(
'order_id' => object(parent::TABLE_ORDER)->get_unique_id(),
'order_type' => parent::TRANSACTION_TYPE_HOUSE_PRODUCT_AWARD_MONEY,
'order_comment' => $comment,
'order_action_user_id' => $_SESSION['user_id'],
'order_plus_method' => parent::PAY_METHOD_USER_MONEY,
'order_plus_account_id' => $user_id,
'order_plus_value' => $money,
'order_plus_transaction_id' => '',
'order_sign' => $house_product_id,
'order_json' => cmd(array($data_config), 'json encode'),
'order_state' => 1,
'order_pay_state' => 1,
'order_pay_time' => time(),
'order_insert_time' => time(),
);
return object(parent::TABLE_USER_MONEY)->reward_money($order);
}
public function api_list($input = array()){
object(parent::REQUEST_ADMIN)->check(parent::AUTHORITY_PRODUCT_READ);
$config = array(
'orderby' => array(),
'where' => array(),
'limit' => object(parent::REQUEST)->limit($input, parent::REQUEST_ADMIN),
);
$config['orderby'] = object(parent::REQUEST)->orderby($input, array(
'user_nickname_desc' => array('u.user_nickname', true),
'user_nickname_asc' => array('u.user_nickname', false),
'name_desc' => array('house_product_name', true),
'name_asc' => array('house_product_name', false),
'state_desc' => array('house_product_state', true),
'state_asc' => array('house_product_state', false),
'insert_time_desc' => array('house_product_insert_time', true),
'insert_time_asc' => array('house_product_insert_time', false),
'update_time_desc' => array('house_product_update_time', true),
'update_time_asc' => array('house_product_update_time', false),
'sort_desc' => array('house_product_sort', true),
'sort_asc' => array('house_product_sort', false),
));
$config['orderby'][] = array('hp.house_product_id', false);
$config["where"][] = array('[and] hp.house_product_trash=0');
if (isset($input['search']['house_product_name']) && is_string($input['search']['house_product_name'])) {
$config['where'][] = array('[and] hp.house_product_name LIKE "%[-]%"', $input['search']['house_product_name']);
}
if (isset($input['search']['house_product_id']) && is_string($input['search']['house_product_id'])) {
$config['where'][] = array('[and] hp.house_product_id=[+]', $input['search']['house_product_id']);
}
if (isset($input['search']['user_id']) && is_string($input['search']['user_id'])) {
$config['where'][] = array('[and] u.user_id=[+]', $input['search']['user_id']);
}
if (isset($input['search']['user_nickname']) && is_string($input['search']['user_nickname'])) {
$config['where'][] = array('[and] u.user_nickname LIKE "%[-]%"', $input['search']['user_nickname']);
}
if (isset($input['search']['user_phone']) && is_string($input['search']['user_phone'])) {
$user_data = object(parent::TABLE_USER_PHONE)->find_verify_data($input['search']['user_phone'], array("u.user_id"));
if( empty($user_data['user_id']) ){
$user_id = "";
}else{
$user_id = $user_data['user_id'];
}
$config['where'][] = array('[and] u.user_id=[+]', $user_id);
}
if( isset($input['search']['state']) &&
(is_string($input['search']['state']) || is_numeric($input['search']['state'])) &&
in_array($input['search']['state'], array("0", "1", "2", "3", "4")) ){
$config["where"][] = array('[and] hp.house_product_state=[+]', $input['search']['state']);
}
return object(parent::TABLE_HOUSE_PRODUCT)->select_page($config);
}
public function api_details($input = array()){
object(parent::REQUEST_ADMIN)->check(parent::AUTHORITY_PRODUCT_DETAILS);
object(parent::ERROR)->check($input, 'house_product_id', parent::TABLE_HOUSE_PRODUCT, array('args'));
$get_data = object(parent::TABLE_HOUSE_PRODUCT)->find($input['house_product_id']);
if( empty($get_data) ){
throw new error('数据不存在');
}
if( !empty($get_data) ){
$data = array($get_data);
$data = object(parent::TABLE_HOUSE_PRODUCT)->get_additional_data($data);
$get_data = $data[0];
}
return $get_data;
}
public function api_trash($data = array()){
object(parent::REQUEST_ADMIN)->check(parent::AUTHORITY_PRODUCT_TRASH);
object(parent::ERROR)->check($data, 'house_product_id', parent::TABLE_HOUSE_PRODUCT, array('args'));
$old_data = object(parent::TABLE_HOUSE_PRODUCT)->find($data['house_product_id']);
if( empty($old_data) ){
throw new error('数据不存在');
}
if( !empty($old_data["house_product_trash"]) ){
throw new error("该产品已经在回收站");
}
$update_data["house_product_trash"] = 1;
$update_data['house_product_trash_time'] = time();
if( object(parent::TABLE_HOUSE_PRODUCT)->update( array(array('house_product_id=[+]', (string)$data['house_product_id'])), $update_data) ){
object(parent::TABLE_ADMIN_LOG)->insert($data, $update_data);
return $data['house_product_id'];
}else{
throw new error("操作失败");
}
}
public function api_trash_restore($data = array()){
object(parent::REQUEST_ADMIN)->check(parent::AUTHORITY_PRODUCT_TRASH_RESTORE);
object(parent::ERROR)->check($data, 'house_product_id', parent::TABLE_HOUSE_PRODUCT, array('args'));
$old_data = object(parent::TABLE_HOUSE_PRODUCT)->find($data['house_product_id']);
if( empty($old_data) ){
throw new error('数据不存在');
}
if( empty($old_data["house_product_trash"]) ){
throw new error("该商品不在回收站");
}
$update_data["house_product_trash"] = 0;
$update_data["house_product_trash_time"] = time();
if( object(parent::TABLE_HOUSE_PRODUCT)->update( array(array('house_product_id=[+]', (string)$data['house_product_id'])), $update_data) ){
object(parent::TABLE_ADMIN_LOG)->insert($data, $update_data);
return $data['house_product_id'];
}else{
throw new error("操作失败");
}
}
public function api_trash_list($data = array()){
object(parent::REQUEST_ADMIN)->check(parent::AUTHORITY_PRODUCT_TRASH_READ);
$config = array(
'orderby' => array(),
'where' => array(),
'limit' => object(parent::REQUEST)->limit($data, parent::REQUEST_ADMIN),
);
$config["orderby"] = object(parent::REQUEST)->orderby($data, array(
'id_desc' => array('house_product_id', true),
'id_asc' => array('house_product_id', false),
'name_desc' => array('house_product_name', true),
'name_asc' => array('house_product_name', false),
'state_desc' => array('house_product_state', true),
'state_asc' => array('house_product_state', false),
'user_id_desc' => array('user_id', true),
'user_id_asc' => array('user_id', false),
'trash_time_desc' => array('house_product_trash_time', true),
'trash_time_asc' => array('house_product_trash_time', false),
'update_time_desc' => array('house_product_update_time', true),
'update_time_asc' => array('house_product_update_time', false),
'insert_time_desc' => array('house_product_insert_time', true),
'insert_time_asc' => array('house_product_insert_time', false),
));
$config["orderby"][] = array('house_product_id', false);
$config["where"][] = array('[and] hp.house_product_trash=1');
if(!empty($data['search'])){
if( isset($data['search']['house_product_id']) && is_string($data['search']['house_product_id']) ){
$config["where"][] = array('[and] hp.house_product_id=[+]', $data['search']['house_product_id']);
}
}
return object(parent::TABLE_HOUSE_PRODUCT)->select_page($config);
}
}