<?php
/**
  * @method B2C主库表基本操作
  * @author soul
  * @copyright 2016/3/31
  */
class B2cBase
{
	public $B2CDb = null;
	public function __construct($B2CDb = null)
	{	
		$this->B2CDb = $B2CDb==null ?  new LibDb (mvc::$cfg['DB']['B2C']): $B2CDb;
	}

	/**
	  * @method 枚举列表
	  * @param  $filedName 字段名 
	  * @author soul
	  * @copyright 2017/6/5
	  * @return [["status"]=> bool(true) ["data"]=>  ["code"]=> int(0) ]
	  */
	public function getEnum($filedName)
	{
		$arr = [
			'rep_type'=>[
				0=>'仅退款',
				1=>'退货退款',
				2=>'换货'
			],
			'rep_pro_status'=>[
				0=>'未收到',
				1=>'已收到'
			],
		];
		return LibFc::ReturnData(true, $arr[$filedName]);
	}

	
	/**
	  * @method 查询表信息
	  * @param  $table 表明 如：yp_product 或者 yp_product as a join yp_number as b on a.pid=b.pid
	  * @param  $fieldArr 需要查询的字段名称数组
	  * @param  $where 查询条件
	  * @param  $oneRow true|false
	  * @author soul
	  * @copyright 2016/3/30
	  * @return 
			成功 ["status"=>true, "data"=> $oneRow=false 二维数组 ; $oneRow=true 一维数组] 
			失败 ["status"=>false, "data"=> 错误信息]  
	  */
	public function get($table, $fieldArr, $where = '', $oneRow = false)
	{
		if(!empty($table) && is_array($fieldArr))
		{
			if(!empty($where)) $where = ' where 1=1 '.trim($where);
			$sql = sprintf("select %s from %s%s", implode(',', $fieldArr), $table, $where);
			$res = $oneRow? $this->B2CDb->Row($sql): $this->B2CDb->Table($sql);
			if($res !== false)
			{
				return LibFc::ReturnData(true, $res);
			}
			else
			{
				return LibFc::ReturnData(false, 'SQL:'.$sql.'执行失败。');
			}
		}
		return LibFc::ReturnData(false, $table.'查询提供的参数不正确。');
	}



	/**
	  * @method 获取指定条件下的某字段唯一值
	  * @param  $table 表明 如：yp_product 或者 yp_product as a join yp_number as b on a.pid=b.pid
	  * @param  $field 字段名称
	  * @param  $where 查询条件
	  * @author soul
	  * @copyright 2016/3/30
	  * @return 
			成功 ["status"=>true, "data"=> [111,222,....]] 
			失败 ["status"=>false, "data"=> 错误信息]  
	  */
	public function getFieldUniVal($table, $field, $where = '')
	{
		if(!empty($table) && !empty($field))
		{
			$field1 = stripos($where, ' group by ') !== false || stripos($table, ' group by ') !== false? $field: ' distinct '.$field;

			if(!empty($where)) $where = ' where 1=1 '.trim($where);
			$sql = sprintf("select %s from %s%s", $field1, $table, $where);
			$resFlag = $this->B2CDb->Query($sql);
			if($resFlag)
			{
				$arr = array();
				while($row = $this->B2CDb->Fetch())
				{
					$arr[$row[$field]] = $row[$field];
				}
				return LibFc::ReturnData(true, array_values($arr));
			}
			return LibFc::ReturnData(false, 'SQL:'.$sql.'执行失败。');
		}
		return LibFc::ReturnData(false, $table.'查询提供的参数不正确。');
	}



	/**
	  * @method 添加记录
	  * @param  $table 表明 如：yp_product 或者 yp_product as a join yp_number as b on a.pid=b.pid
	  * @param  $dataArr 基本信息字段=>值 数组
	  * @param  $clobfiledArr $dataArr中字段类型为LONG的字段 ------------------已停用
	  * @author soul
	  * @copyright 2016/3/30
	  * @return 
			成功 ["status"=>true, "data"=> 影响行数] 
			失败 ["status"=>false, "data"=> 错误信息] 
	  */
	public function add($table, $dataArr, $clobfiledArr = [])
	{
		if(empty($table) || !is_array($dataArr) || empty($dataArr))
		{
			return LibFc::ReturnData(false, $table.'提供添加记录的参数不正确。');
		}

		$filedArr = array();
		$valArr = array();
		foreach($dataArr as $k=>$v)
		{
			$filedArr[] = LibFc::Escape($k);
			$valArr[] = sprintf("'%s'", LibFc::Escape($v, true));
		}
		$AddSql = sprintf("insert into %s (%s) values(%s)", LibFc::Escape($table), implode(',', $filedArr), implode(',', $valArr));
		$this->B2CDb->Begin();
		$ResFlag = $this->B2CDb->Query($AddSql);
		$Rows = $this->B2CDb->RowCount();
		if($ResFlag && $Rows > 0)
		{
			$Id = $this->B2CDb->InsertID();
			$this->B2CDb->End();
			return LibFc::ReturnData(true, $Id);
		}
		return LibFc::ReturnData(false, $AddSql.'添加记录SQL语句执行失败。');
	}


	/**
	  * @method 添加多条记录
	  * @param  $Table 表明
	  * @param  $FiledArr 基本信息字段['name', ...]
	  * @param  $DataArr [['name'=>'11'...], ['name'=>'22'...]....]
	  * @author soul
	  * @copyright 2016/3/30
	  * @return array(3) { ["status"]=> bool(true) ["data"]=>  ["code"]=> int(0) } 
	  */
	public function addAny($Table, $FiledArr, $DataArr)
	{
		if(empty($Table) || !is_array($FiledArr) || empty($FiledArr) || !is_array($DataArr) || empty($DataArr))
		{
			return LibFc::ReturnData(false, $Table.'添加记录提供的参数不正确。');
		}

		$ValArr = [];
		foreach($DataArr as $V)
		{
			$tempArr =[];
			foreach($FiledArr as $Filed)
			{
				$tempArr[] = sprintf("'%s'", LibFc::Escape($V[$Filed], true));
			}
			$ValArr[] = sprintf("(%s)", implode(',', $tempArr));
		}
		$AddSql = sprintf("INSERT INTO %s (%s) VALUES %s", LibFc::Escape($Table), implode(',', $FiledArr), implode(',', $ValArr));
		$this->B2CDb->Begin();
		$ResFlag = $this->B2CDb->Query($AddSql);
		if($ResFlag)
		{
			$this->B2CDb->End();
			return LibFc::ReturnData(true);
		}
		return LibFc::ReturnData(false, $Table.'添加记录SQL语句执行失败。');
	}

	/**
	  * @method 根据条件修改记录
	  * @param  $table 表明 如：yp_product 或者 yp_product as a join yp_number as b on a.pid=b.pid
	  * @param  $dataArr 基本信息字段=>值 数组  如果需要使用表达式 例如  num=num+1 则提供['num'=>'#@num+'.$num]
	  * @param  $where 修改条件
	  * @param  $clobfiledArr $dataArr中字段类型为LONG的字段 ------------------已停用
	  * @author soul
	  * @copyright 2016/3/30
	  * @return 
			成功 ["status"=>true, "data"=> 影响行数] 
			失败 ["status"=>false, "data"=> 错误信息] 
	  */
	public function set($table, $dataArr, $where, $clobfiledArr = [])
	{
		if(empty($table) || !is_array($dataArr) || empty($dataArr))
		{
			return LibFc::ReturnData(false, $table.'修改记录提供的参数不正确。');
		}
		$valArr = array();
		foreach($dataArr as $k=>$v)
		{
			if(stripos($v, '#@') === 0)
			{
				$valArr[] = sprintf("%s=%s", LibFc::Escape($k), LibFc::Escape(trim(substr($v, 2))));
			}
			else
			{
				$valArr[] = sprintf("%s='%s'", LibFc::Escape($k), LibFc::Escape($v, true));
			}
		}
		if(!empty($where)) $where = ' where 1=1 '.trim($where);
		$SetSql = sprintf("update %s set %s%s", LibFc::Escape($table), implode(',', $valArr), $where);
		$this->B2CDb->Begin();
		$resFlag = $this->B2CDb->Query($SetSql);
		if($resFlag)
		{
			$rows = $this->B2CDb->RowCount();
			$this->B2CDb->End();
			return LibFc::ReturnData(true, $rows);
		}
		return LibFc::ReturnData(false, $table.'修改记录SQL语句执行失败。');
	}

	/**
	  * @method 根据条件删除记录
	  * @param  $table 表明 如：yp_product 或者 yp_product as a join yp_number as b on a.pid=b.pid
	  * @param  $where 修改条件
	  * @author soul
	  * @copyright 2016/3/30
	  * @return 
			成功 ["status"=>true, "data"=> 影响行数] 
			失败 ["status"=>false, "data"=> 错误信息] 
	  */
	public function del($table, $where)
	{
		if(empty($table)) return LibFc::ReturnData(false, $table.'删除记录提供的参数不正确。');
		if(!empty($where)) $where = ' where 1=1 '.trim($where);
		$DelSql = sprintf("delete from %s%s",  LibFc::Escape($table), $where );
		$this->B2CDb->Begin();
		$resFlag = $this->B2CDb->Query($DelSql);
		if($resFlag)
		{
			$rows = $this->B2CDb->RowCount();
			$this->B2CDb->End();
			return LibFc::ReturnData(true, $rows);
		}
		return LibFc::ReturnData(false,  $table.'删除记录SQL语句执行失败。');
	}


	/**
	  * @method 执行语句
	  * @param  $sql 需要执行的语句
	  * @author soul
	  * @copyright 2020/4/13
	  * @return 
	  */
	public function query($sql)
	{
		if(empty($sql)) return LibFc::ReturnData(false, $sql.'提供的参数不正确。');
		$resFlag = $this->B2CDb->Query($sql);
		if($resFlag)
		{
			return LibFc::ReturnData(true);
		}
		return LibFc::ReturnData(false,  $sql.' SQL语句执行失败。');
	}

	/**
	 * @method 获取业务员列表
	 * @author zhengweihua 
	 * @copyright 2025-11-22
	 */
	public function getYeWuList($status = 1)
	{	
		if($status==1){
			$sqlson = ' and au.au_status = 1';
		}
		$sql = sprintf("
			SELECT DISTINCT au.au_uid, au.au_name
			FROM an_user_group_link AS ugl
			JOIN an_user AS au ON au.au_uid = ugl.ugl_uid
			JOIN an_user_group AS ug ON ugl.ugl_ugid = ug.ugp_id
			WHERE 
			(
				FIND_IN_SET('19', ug.ugp_path) OR
				FIND_IN_SET('26', ug.ugp_path) OR
				FIND_IN_SET('27', ug.ugp_path) OR
				FIND_IN_SET('39', ug.ugp_path) OR
				ugl.ugl_ugid IN (19, 26, 27, 39,32)
			) %s
			order by convert(au_name using gbk)
		",$sqlson);
    
		$result = $this->B2CDb->Table($sql);
		
		if ($result !== false) {
			$salesArr = [];
			foreach ($result as $row) {
				$salesArr[] = $row;
			}
			$salesArr[]  = ['au_uid'=>172999,'au_name'=>'跑街令'];
			return LibFc::ReturnData(true, $salesArr);
		}
    
    	return LibFc::ReturnData(false, '查询业务员列表失败');
	}
}