<?php
/**
  * @method 财务
  * @author soul
  * @copyright 2018/8/25
  */
class MainCaiwu extends MainBase
{
	/**
	  * @method 自动生成已完成的在线交易的财务凭证
	  * @author soul
	  * @copyright 2020/4/16
	  * @return 
	  */
	public function onlineOrderPingzheng()
	{
		$PjlBase = new PjlBase();
		$this->MainDb->Begin();

		//支付
		$table = 'pa_order LEFT JOIN cw_voucher_list ON por_id = vol_por_id';
		$where = " and vol_por_id IS NULL AND por_status = 1 AND por_transaction_id != '' and por_pay_time > 0 AND por_zhangdan = 1 order by por_pay_time";
		$mres = $this->get($table, ['*'], $where);
		foreach($mres['data'] as $v)
		{
			$voucherArr = [];
			$vokCode = [];
			//支付平台 手续费
			if($v['por_account'] == 'YP')
			{
				$vokCode['pt'] = $v['por_pay_method'] == 'alipay'? 'YPZFB': 'YPWX';
				$vokCode['sxf'] = $v['por_pay_method'] == 'alipay'? 'YPZFBSXF': 'YPWXSXF';
			}
			else
			{
				$vokCode['pt'] = $v['por_pay_method'] == 'alipay'? 'PJLZFB': 'PJLWX';
				$vokCode['sxf'] = $v['por_pay_method'] == 'alipay'? 'PJLZFBSXF': 'PJLWXSXF';
			}
			$voucherArr[] = [
				'vol_vok_code'=>$vokCode['pt'],
				'vol_title'=>$v['por_title'],
				'vol_jiefang'=>$v['por_money']-$v['por_service_fee']
			];
			$voucherArr[] = [
				'vol_vok_code'=>$vokCode['sxf'],
				'vol_title'=>$v['por_title'],
				'vol_jiefang'=>$v['por_service_fee']
			];

			switch($v['por_style'])
			{
				//汽配搜
				case 'QIPERIS':
					$voucherArr[] = [
						'vol_vok_code'=>'YPQIPERISSR',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				//宜配搜搜
				case 'YPYQSYS':
					$voucherArr[] = [
						'vol_vok_code'=>'YPYQSYSSR',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				//积分充值
				case 'YPING':
					$voucherArr[] = [
						'vol_vok_code'=>'YPINGSR',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				//商家入驻 PC会员 资源包
				case 'PJLVIP':
				case 'PJLPAC':
					$vokCode = stripos($v['por_title'], '商家') >  0? 'PJLSHOPSR': 'PJLPCSR';
					$voucherArr[] = [
						'vol_vok_code'=>$vokCode,
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				case 'PJLTSPAC':
					$voucherArr[] = [
						'vol_vok_code'=>'PJLTSPACSR',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				case 'PJLCZ':
					$voucherArr[] = [
						'vol_vok_code'=>'PJLCZSR',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				//商城订单
				case 'PJDORD':
					$voucherArr[] = [
						'vol_vok_code'=>'PJDORDYF',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				//跑街令订单
				case 'PJLORD':
					$voucherArr[] = [
						'vol_vok_code'=>'PJLORDYF',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
				//API资源包
				case 'APIZYB':
					$voucherArr[] = [
						'vol_vok_code'=>'APIZYBSR',
						'vol_title'=>$v['por_title'],
						'vol_daifang'=>$v['por_money']
					];
				break;
			}

			foreach($voucherArr as $add)
			{
				$add['vol_pay_method'] = $v['por_pay_method'];
				$add['vol_account'] = $v['por_account'];
				$add['vol_from_tag'] = $v['por_style'];
				$add['vol_from_dataid'] = $v['por_orderids'];
				$add['vol_por_id'] = $v['por_id'];
				$add['vol_time'] = $v['por_pay_time'];
				$add['vol_add_time'] = time();
				$add['vol_add_by'] = '系统';
				$this->Add('cw_voucher_list', $add);
			}
		}

		//退款
		$table = 'pa_refund join pa_order on por_id = pre_por_id LEFT JOIN cw_voucher_list ON pre_id = vol_pre_id';
		$where = " and vol_pre_id IS NULL AND pre_status = 1 AND pre_refund_id != '' and pre_zhangdan = 1 order by pre_refund_time";
		$mres = $this->get($table, ['*'], $where);
		foreach($mres['data'] as $v)
		{
			//微信退款退回手续费，需要等对账单数据
			if($v['por_pay_method'] == 'weixin' && $v['pre_service_fee'] >= 0) continue; 

			$voucherArr = [];
			$vokCode = [];
			
			$vokCode['pt'] = $v['por_pay_method'] == 'alipay'? 'PJLZFB': 'PJLWX';
			$vokCode['sxf'] = $v['por_pay_method'] == 'alipay'? 'PJLZFBSXF': 'PJLWXSXF';

			$voucherArr[] = [
				'vol_vok_code'=>$vokCode['pt'],
				'vol_title'=>$v['pre_des'],
				'vol_daifang'=>$v['pre_refund_money']+$v['pre_service_fee']
			];
			
			//只有微信退手续费
			if($v['pre_service_fee'] < 0)
			{
				$voucherArr[] = [
					'vol_vok_code'=>$vokCode['sxf'],
					'vol_title'=>$v['pre_des'],
					'vol_daifang'=>-$v['pre_service_fee']
				];
			}

			switch($v['por_style'])
			{
				//商城订单
				case 'PJDORD':
					$voucherArr[] = [
						'vol_vok_code'=>'PJDORDYF',
						'vol_title'=>$v['pre_des'],
						'vol_jiefang'=>$v['pre_refund_money']
					];
				break;
				//跑街令订单
				case 'PJLORD':
					$voucherArr[] = [
						'vol_vok_code'=>'PJLORDYF',
						'vol_title'=>$v['pre_des'],
						'vol_jiefang'=>$v['pre_refund_money']
					];
				break;
				//跑街令电话
				case 'PJLCZ':
					$voucherArr[] = [
						'vol_vok_code'=>'PJLCZSR',
						'vol_title'=>$v['pre_des'],
						'vol_jiefang'=>$v['pre_refund_money']
					];
				break;
			}

			foreach($voucherArr as $add)
			{
				$add['vol_pay_method'] = $v['por_pay_method'];
				$add['vol_account'] = $v['por_account'];
				$add['vol_from_tag'] = $v['por_style'];
				$add['vol_from_dataid'] = $v['por_orderids'];
				$add['vol_pre_id'] = $v['pre_id'];
				$add['vol_time'] = $v['pre_refund_time'];
				$add['vol_add_time'] = time();
				$add['vol_add_by'] = '系统';
				$this->Add('cw_voucher_list', $add);
			}
		}

		//商城提现
		$B2cBase = new B2cBase();
		$res = $B2cBase->get('sh_money_withdrawals', ['*'], ' and mow_status=1 and mow_ok_time > 0 order by mow_ok_time');
		if(!empty($res['data']))
		{
			$vol_from_tag = 'PJDTX';
			$txArr = array_column($res['data'], null, 'mow_id');
			$res = $this->get('cw_voucher_list', ['vol_from_dataid'], sprintf(" and vol_from_tag = '%s' and vol_from_dataid in (%s)", $vol_from_tag, implode(',', array_keys($txArr))));
			$hasArr = array_column($res['data'], 'vol_from_dataid');
			foreach($txArr as $id=>$v)
			{
				if(in_array($id, $hasArr)) continue;
				
				$title = '跑街令提现订单：'.$id;
				//银行 应收 提成
				$voucherArr = [
					[
						'vol_vok_code'=>'PJLYHCK',
						'vol_title'=>$title,
						'vol_daifang'=>$v['mow_real_money']
					],
					[
						'vol_vok_code'=>'PJDORDYF',
						'vol_title'=>$title,
						'vol_jiefang'=>$v['mow_total_money']
					],
					[
						'vol_vok_code'=>'PJDORDSR',
						'vol_title'=>$title,
						'vol_daifang'=>$v['mow_comm_money']
					]
				];
				foreach($voucherArr as $add)
				{
					$add['vol_from_tag'] = $vol_from_tag;
					$add['vol_from_dataid'] = $id;
					$add['vol_time'] = $v['mow_ok_time'];
					$add['vol_add_time'] = time();
					$add['vol_add_by'] = '系统';
					$this->Add('cw_voucher_list', $add);
				}
			}
		}

		//跑街令余额提现
		$res = $PjlBase->get('pl_money_withdrawals', ['*'], ' and mow_status=1 and mow_ok_time > 0 order by mow_ok_time');
		if(!empty($res['data']))
		{
			$vol_from_tag = 'PJLTX';
			$txArr = array_column($res['data'], null, 'mow_id');
			$res = $this->get('cw_voucher_list', ['vol_from_dataid'], sprintf(" and vol_from_tag = '%s' and vol_from_dataid in (%s)", $vol_from_tag, implode(',', array_keys($txArr))));
			$hasArr = array_column($res['data'], 'vol_from_dataid');
			foreach($txArr as $id=>$v)
			{
				if(in_array($id, $hasArr)) continue;
				
				$title = '跑街令提现订单：'.$id;
				if($v['mow_type'] == 0)
				{
					//核对是否转账成功
					$mres = $this->get('pa_mchpay', ['*'], sprintf(" and pmc_id=%d and pmc_status = 1 limit 1", $v['mow_pmc_id']), true);
					if(empty($mres['data'])) continue;
					$pmcArr = $mres['data'];

					$vokCode = [];
					//支付平台 手续费
					if($pmcArr['pmc_account'] == 'YP')
					{
						$vokCode['pt'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'YPZFB': 'YPWX';
						$vokCode['sxf'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'YPZFBSXF': 'YPWXSXF';
					}
					else
					{
						$vokCode['pt'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'PJLZFB': 'PJLWX';
						$vokCode['sxf'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'PJLZFBSXF': 'PJLWXSXF';
					}

					//微信转账
					$voucherArr = [
						[
							'vol_vok_code'=>$vokCode['pt'],
							'vol_title'=>$title,
							'vol_daifang'=>$v['mow_real_money']
						],
						[
							'vol_vok_code'=>'PJLORDYF',
							'vol_title'=>$title,
							'vol_jiefang'=>$v['mow_total_money']
						],
						[
							'vol_vok_code'=>'PJLTXSR',
							'vol_title'=>$title,
							'vol_daifang'=>$v['mow_comm_money']
						]
					];
					foreach($voucherArr as $add)
					{
						$add['vol_pay_method'] = $pmcArr['pmc_pay_by'];
						$add['vol_account'] = $pmcArr['pmc_account'];
						$add['vol_from_tag'] = $vol_from_tag;
						$add['vol_from_dataid'] = $id;
						$add['vol_time'] = $pmcArr['pmc_pay_time'];
						$add['vol_add_time'] = time();
						$add['vol_add_by'] = '系统';
						$this->Add('cw_voucher_list', $add);
					}
				}
				else
				{
					//人工银行 应收 提成
					$voucherArr = [
						[
							'vol_vok_code'=>'PJLYHCK',
							'vol_title'=>$title,
							'vol_daifang'=>$v['mow_real_money']
						],
						[
							'vol_vok_code'=>'PJLORDYF',
							'vol_title'=>$title,
							'vol_jiefang'=>$v['mow_total_money']
						],
						[
							'vol_vok_code'=>'PJLTXSR',
							'vol_title'=>$title,
							'vol_daifang'=>$v['mow_comm_money']
						]
					];
					foreach($voucherArr as $add)
					{
						$add['vol_from_tag'] = $vol_from_tag;
						$add['vol_from_dataid'] = $id;
						$add['vol_time'] = $v['mow_ok_time'];
						$add['vol_add_time'] = time();
						$add['vol_add_by'] = '系统';
						$this->Add('cw_voucher_list', $add);
					}
				}
			}
		}

		//邀请余额提现
		$res = $PjlBase->get('pl_money_withdrawals_share', ['*'], ' and mow_status=1 and mow_ok_time > 0 order by mow_ok_time');
		if(!empty($res['data']))
		{
			$vol_from_tag = 'PJLSHARE';
			$txArr = array_column($res['data'], null, 'mow_id');
			$res = $this->get('cw_voucher_list', ['vol_from_dataid'], sprintf(" and vol_from_tag = '%s' and vol_from_dataid in (%s)", $vol_from_tag, implode(',', array_keys($txArr))));
			$hasArr = array_column($res['data'], 'vol_from_dataid');
			foreach($txArr as $id=>$v)
			{
				if(in_array($id, $hasArr)) continue;
				//核对是否转账成功
				$mres = $this->get('pa_mchpay', ['*'], sprintf(" and pmc_id=%d and pmc_status = 1 limit 1", $v['mow_pmc_id']), true);
				if(empty($mres['data'])) continue;
				$pmcArr = $mres['data'];

				$vokCode = [];
				//支付平台 手续费
				if($pmcArr['pmc_account'] == 'YP')
				{
					$vokCode['pt'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'YPZFB': 'YPWX';
					$vokCode['sxf'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'YPZFBSXF': 'YPWXSXF';
				}
				else
				{
					$vokCode['pt'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'PJLZFB': 'PJLWX';
					$vokCode['sxf'] = $pmcArr['pmc_pay_by'] == 'alipay'? 'PJLZFBSXF': 'PJLWXSXF';
				}

				$voucherArr = [
					[
						'vol_vok_code'=>$vokCode['pt'],
						'vol_title'=>$pmcArr['pmc_des'],
						'vol_daifang'=>$v['mow_money']
					],
					[
						'vol_vok_code'=>'PJLYQTX',
						'vol_title'=>$pmcArr['pmc_des'],
						'vol_jiefang'=>$v['mow_money']
					]
				];
				foreach($voucherArr as $add)
				{
					$add['vol_pay_method'] = $pmcArr['pmc_pay_by'];
					$add['vol_account'] = $pmcArr['pmc_account'];
					$add['vol_from_tag'] = $vol_from_tag;
					$add['vol_from_dataid'] = $id;
					$add['vol_time'] = $pmcArr['pmc_pay_time'];
					$add['vol_add_time'] = time();
					$add['vol_add_by'] = '系统';
					$this->Add('cw_voucher_list', $add);
				}
			}
		}
		$this->MainDb->End();
		return LibFc::ReturnData(true, 'onlineOrderPingzheng');
	}
}