mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 18:35:35 +08:00
381 lines
13 KiB
PHP
381 lines
13 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
class ome_mdl_payments extends dbeav_model{
|
||
var $has_export_cnf = true;
|
||
var $export_name = '销售收款单';
|
||
var $export_flag = false;
|
||
var $defaultOrder = array('t_begin DESC');
|
||
|
||
/**
|
||
* _filter
|
||
* @param mixed $filter filter
|
||
* @param mixed $tableAlias tableAlias
|
||
* @param mixed $baseWhere baseWhere
|
||
* @return mixed 返回值
|
||
*/
|
||
public function _filter($filter,$tableAlias=null,$baseWhere=null){
|
||
if (isset($filter['order_bn'])){
|
||
$orderObj = $this->app->model("orders");
|
||
$rows = $orderObj->getList('order_id',array('order_bn'=>$filter['order_bn']));
|
||
$orderId[] = 0;
|
||
foreach($rows as $row){
|
||
$orderId[] = $row['order_id'];
|
||
}
|
||
$archive_ordObj = kernel::single('archive_interface_orders');
|
||
|
||
$archives = $archive_ordObj->getOrder_list(array('order_bn'=>$filter['order_bn']),'order_id');
|
||
|
||
foreach ($archives as $archive ) {
|
||
$orderId[] = $archive['order_id'];
|
||
}
|
||
$where .= ' AND order_id IN ('.implode(',', $orderId).')';
|
||
unset($filter['order_bn']);
|
||
}
|
||
return parent::_filter($filter,$tableAlias,$baseWhere).$where;
|
||
}
|
||
|
||
/* create_payments 添加付款单
|
||
* @param sdf $sdf
|
||
* @return sdf
|
||
*/
|
||
function create_payments(&$sdf){
|
||
$payment_bn = $this->dump(array('payment_bn'=>$sdf['payment_bn'],'shop_id'=>$sdf['shop_id']),'payment_id,payment_bn');
|
||
if(!empty($payment_bn)){
|
||
$sdf['payment_id'] = $payment_bn['payment_id'];
|
||
return true;
|
||
}
|
||
$order_id = $sdf['order_id'];
|
||
$payment_money = $sdf['money'];
|
||
$addon['currency'] = $sdf['currency'];
|
||
$addon['paytime'] = $sdf['t_begin'];
|
||
$save_result = false;
|
||
if ($sdf['is_orderupdate'] != 'false'){
|
||
if ($this->_updateOrder($order_id,$payment_money,$addon)){
|
||
if ($this->save($sdf)){
|
||
$save_result = true;
|
||
}else{
|
||
$sql = " UPDATE `sdb_ome_orders` SET `payed`=`payed`-".$sdf['money']." WHERE `order_id`='".$order_id."'";
|
||
$this->db->exec($sql,true);
|
||
}
|
||
}
|
||
}else{
|
||
if ($this->save($sdf)){
|
||
$save_result = true;
|
||
}
|
||
}
|
||
|
||
if ($save_result){
|
||
$objOrder = $this->app->model('orders');
|
||
//如果有OME自动确认订单插件的话,会按照自动确认规则来自动确认订单
|
||
/*if($oAuto = kernel::service('do_autodispatch')){
|
||
$order_sdf = $objOrder->dump($order_id,"*",array("order_objects"=>array("*",array("order_items"=>array("*")))));
|
||
if($order_sdf['shipping']['is_cod'] == 'false' && $order_sdf['pay_status'] == 1){
|
||
if(method_exists($oAuto,'autodispatch')){
|
||
$oAuto->autodispatch($order_sdf);
|
||
}
|
||
}
|
||
}*/
|
||
//如果有KPI考核插件,会增加客服的考核
|
||
if($oKpi = kernel::service('omekpi_servicer_incremental')){
|
||
$kpi_sdf = $objOrder->dump($order_id);
|
||
if(method_exists($oKpi,'getOrderIncremental')){
|
||
$oKpi->getOrderIncremental($kpi_sdf);
|
||
}
|
||
}
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/*
|
||
* 更新订单状态及金额
|
||
* @param string order_id
|
||
* @param money payment_money
|
||
* @param array $addon 附加参数
|
||
*/
|
||
private function _updateOrder($order_id,$payment_money,$addon=array()){
|
||
|
||
$update_fileds = "`payed`=IF(`payed`+{$payment_money}>`total_amount`, `payed`, `payed`+{$payment_money}),`currency`='".$addon['currency']."',`paytime`='".$addon['paytime']."'";
|
||
$sql ="UPDATE `sdb_ome_orders` SET {$update_fileds} WHERE `order_id`='".$order_id."'";
|
||
|
||
if ($payment_money == '0' || ($this->db->exec($sql,true) && $this->db->affect_row())) {
|
||
//更新订单支付状态
|
||
if (kernel::single('ome_order_func')->update_order_pay_status($order_id, true, __CLASS__.'::'.__FUNCTION__)){
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 发起前端店铺支付单请求
|
||
* @param mixed $sdf 请求数据
|
||
* @return boolean
|
||
*/
|
||
function payment_request($sdf=NULL){
|
||
if (IS_NULL($sdf)) return false;
|
||
|
||
$objOrder = $this->app->model('orders');
|
||
$orderdata['pay_status'] = '8';//订单支付状态:支付中
|
||
$filter = array('order_id'=>$sdf['order_id']);
|
||
$objOrder->update($orderdata,$filter);
|
||
kernel::database()->commit();
|
||
|
||
//支付单支付请求
|
||
if ($service_payment = kernel::servicelist('service.payment')){
|
||
foreach($service_payment as $object=>$instance){
|
||
if(method_exists($instance,'payment_request')){
|
||
$instance->payment_request($sdf);
|
||
}
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
function getMethods($type=''){
|
||
if($type=="online"){
|
||
$sql = ' AND pay_type NOT IN(\'OFFLINE\',\'DEPOSIT\')';
|
||
}else{
|
||
if ($type){
|
||
$sql = ' AND pay_type=\''.$type.'\'';
|
||
}
|
||
}
|
||
return $this->db->select('SELECT * FROM sdb_ome_payment_cfg WHERE disabled = \'false\''.$sql,PAGELIMIT);
|
||
}
|
||
function getAccount(){
|
||
$account = $this->app->model('bank_account')->getList('bank,account');
|
||
return $account;
|
||
}
|
||
|
||
/*
|
||
* 生成付款单号
|
||
*
|
||
*
|
||
* @return 付款单号
|
||
*/
|
||
function gen_id(){
|
||
$prefix = date("YmdH");
|
||
$payment_bn = kernel::single('eccommon_guid')->incId('payments', $prefix, 7, true);
|
||
return $payment_bn;
|
||
|
||
/*
|
||
$i = rand(0,9999);
|
||
do{
|
||
if(9999==$i){
|
||
$i=0;
|
||
}
|
||
$i++;
|
||
$payment_bn = date("YmdH").'12'.str_pad($i,6,'0',STR_PAD_LEFT);
|
||
$row = $this->db->selectrow('select payment_id from sdb_ome_payments where payment_bn =\''.$payment_bn.'\'');
|
||
}while($row);
|
||
return $payment_bn;
|
||
*/
|
||
}
|
||
|
||
function searchOptions(){
|
||
$parentOptions = parent::searchOptions();
|
||
$childOptions = array(
|
||
'order_bn'=>app::get('base')->_('订单号'),
|
||
);
|
||
return $Options = array_merge($parentOptions,$childOptions);
|
||
}
|
||
|
||
function io_title( $filter=null,$ioType='csv' ){
|
||
switch( $ioType ){
|
||
case 'csv':
|
||
default:
|
||
$this->oSchema['csv']['payments'] = array(
|
||
'bn:支付单号' => 'payment_bn',
|
||
'col:订单号'=>'order_id',
|
||
'col:收款账号' => 'account',
|
||
'col:收款银行' => 'bank',
|
||
'col:支付账户' => 'pay_account',
|
||
'col:货币' => 'currency',
|
||
'col:支付金额' => 'money',
|
||
'col:支付网关费用' => 'paycost',
|
||
'col:支付类型' => 'pay_type',
|
||
'col:操作员' => 'op_id',
|
||
'col:支付IP' => 'ip',
|
||
'col:支付开始时间' => 't_begin',
|
||
'col:支付完成时间' => 't_end',
|
||
'col:支付状态' => 'status',
|
||
'col:备注' => 'memo',
|
||
'col:来源店铺' => 'shop_id',
|
||
);
|
||
break;
|
||
}
|
||
$this->ioTitle[$ioType]['payments'] = array_keys( $this->oSchema[$ioType]['payments'] );
|
||
return $this->ioTitle[$ioType][$filter];
|
||
}
|
||
|
||
//csv导出
|
||
function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ){
|
||
if( !$data['title']['payments'] ){
|
||
$title = array();
|
||
foreach( $this->io_title('payments') as $k => $v ){
|
||
$title[] = $this->charset->utf2local($v);
|
||
}
|
||
$data['title']['payments'] = '"'.implode('","',$title).'"';
|
||
}
|
||
$limit = 100;
|
||
//if( $filter[''] )
|
||
if( !$list=$this->getList('payment_id',$filter,$offset*$limit,$limit) )return false;
|
||
foreach( $list as $aFilter ){
|
||
$aOrder = $this->dump($aFilter['payment_id']);
|
||
$aOrder['payment_bn'] = "=\"\"".$aOrder['payment_bn']."\"\"";
|
||
|
||
//处理时间
|
||
$aOrder['t_begin'] = $aOrder['t_begin']?date('Y-m-d H:i:s',$aOrder['t_begin']):'';
|
||
$aOrder['t_end'] = $aOrder['t_end']?date('Y-m-d H:i:s',$aOrder['t_end']):'';
|
||
|
||
//处理支付类型
|
||
switch ($aOrder['pay_type']){
|
||
case 'online':
|
||
$aOrder['pay_type'] = '在线支付';
|
||
break;
|
||
case 'offline':
|
||
$aOrder['pay_type'] = '线下支付';
|
||
break;
|
||
case 'deposit':
|
||
$aOrder['pay_type'] = '预存款支付';
|
||
break;
|
||
}
|
||
|
||
//处理支付状态
|
||
switch ($aOrder['status']){
|
||
case 'succ':
|
||
$aOrder['status'] = '支付成功';
|
||
break;
|
||
case 'failed':
|
||
$aOrder['status'] = '支付失败';
|
||
break;
|
||
case 'cancel':
|
||
$aOrder['status'] = '未支付';
|
||
break;
|
||
case 'error':
|
||
$aOrder['status'] = '处理异常';
|
||
break;
|
||
case 'invalid':
|
||
$aOrder['status'] = '非法参数';
|
||
break;
|
||
case 'progress':
|
||
$aOrder['status'] = '处理中';
|
||
break;
|
||
case 'timeout':
|
||
$aOrder['status'] = '超时';
|
||
break;
|
||
case 'ready':
|
||
$aOrder['status'] = '准备中';
|
||
break;
|
||
}
|
||
|
||
//处理操作员
|
||
$po = app::get('pam')->model('account')->dump($aOrder['op_id']);
|
||
$aOrder['op_id'] = $po['login_name'];
|
||
|
||
//处理订单号
|
||
$po = app::get('ome')->model('orders')->dump($aOrder['order_id']);
|
||
$aOrder['order_id'] = "=\"\"".$po['order_bn']."\"\"";
|
||
$shop = app::get('ome')->model('shop')->dump($aOrder['shop_id']);
|
||
$aOrder['shop_id'] = $shop['name'];
|
||
$aOrder['payment_bn'] = "=\"\"".$aOrder['payment_bn']."\"\"";
|
||
//处理备注
|
||
/*
|
||
$aOrder['memo'] = kernel::single('ome_func')->format_memo($aOrder['memo']);
|
||
if(!empty($aOrder['memo'])){
|
||
foreach($aOrder['memo'] as $k => $v){
|
||
$arr[]= $v['op_content']." BY ".$v['op_name']." ".$v['op_time'];
|
||
}
|
||
$aOrder['memo'] = implode(',',$arr);
|
||
}
|
||
*/
|
||
|
||
|
||
foreach( $this->oSchema['csv']['payments'] as $k => $v ){
|
||
$orderRow[$k] = $this->charset->utf2local(utils::apath( $aOrder,explode('/',$v) ));
|
||
}
|
||
$data['content']['payments'][] = '"'.implode('","',$orderRow).'"';
|
||
}
|
||
$data['name'] = '付款单'.date("Ymd");
|
||
return true;
|
||
}
|
||
|
||
function export_csv($data,$exportType = 1 ){
|
||
$output = array();
|
||
foreach( $data['title'] as $k => $val ){
|
||
$output[] = $val."\n".implode("\n",(array)$data['content'][$k]);
|
||
}
|
||
echo implode("\n",$output);
|
||
}
|
||
|
||
/**
|
||
* 获得日志类型(non-PHPdoc)
|
||
* @see dbeav_model::getLogType()
|
||
*/
|
||
public function getLogType($logParams) {
|
||
$type = $logParams['type'];
|
||
$logType = 'none';
|
||
if ($type == 'export') {
|
||
$logType = $this->exportLogType($logParams);
|
||
}
|
||
elseif ($type == 'import') {
|
||
$logType = $this->importLogType($logParams);
|
||
}
|
||
return $logType;
|
||
}
|
||
/**
|
||
* 导出日志类型
|
||
* @param Array $logParams 日志参数
|
||
*/
|
||
public function exportLogType($logParams) {
|
||
$params = $logParams['params'];
|
||
$type = 'bill';
|
||
if ($logParams['app'] == 'ome' && $logParams['ctl'] == 'admin_payment') {
|
||
$type .= '_salesBill_receipts';
|
||
}
|
||
$type .= '_export';
|
||
return $type;
|
||
}
|
||
/**
|
||
* 导入操作日志类型
|
||
* @param Array $logParams 日志参数
|
||
*/
|
||
public function importLogType($logParams) {
|
||
$params = $logParams['params'];
|
||
$type = 'bill';
|
||
if ($logParams['app'] == 'ome' && $logParams['ctl'] == 'admin_payment') {
|
||
$type .= '_salesBill_receipts';
|
||
}
|
||
$type .= '_import';
|
||
return $type;
|
||
}
|
||
|
||
/**
|
||
* 单据来源.
|
||
* @param archive
|
||
* @return
|
||
* @access public
|
||
* @author sunjing@shopex.cn
|
||
*/
|
||
function modifier_archive($row)
|
||
{
|
||
|
||
if($row == '1'){
|
||
$row = sprintf("<div style='background-color:%s;float:left;'><span alt='%s' title='%s' style='color:#eeeeee;'> %s </span></div>", 'red', '归档', '归档', '归档');
|
||
}else{
|
||
$row = '-';
|
||
}
|
||
return $row;
|
||
}
|
||
}
|
||
?>
|