Files
OMS/app/finance/lib/cronjob/autoflagScript.php
2026-01-04 19:08:31 +08:00

127 lines
6.2 KiB
PHP

<?php
/**
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class finance_cronjob_autoflagScript{
/*自动核销账单*/
function autoflag_queue(){
/*
$last_autoflag_queue_run_time = app::get('finance')->getConf("last_autoflag_queue_run_time");
if(!$last_autoflag_queue_run_time) $last_autoflag_queue_run_time = 0;
app::get('finance')->setConf("last_autoflag_queue_run_time",time());
if((time()-$last_autoflag_queue_run_time)<3600) return ;
*/
$ar = app::get("finance")->model('ar');
$araData = $ar->db->select("SELECT a.ar_id,a.ar_bn,a.money as ar_money,a.confirm_money as ar_confirm_money,a.unconfirm_money as ar_unconfirm_money,b.bill_id, b.bill_bn,b.money as bill_money,b.confirm_money as bill_confirm_money,b.unconfirm_money as bill_unconfirm_money,b.trade_time as bill_trade_time from `sdb_finance_ar` as a left join `sdb_finance_bill` as b on a.order_bn=b.order_bn and a.money=b.money where a.auto_flag=0 and a.status=0 and a.charge_status=1 and b.charge_status=1 and b.fee_type_id=1");
foreach($araData as $ak=>$aval){
$time = time();
$ar->db->beginTransaction();
if($aval['ar_id']&&$aval['bill_id']){
$ar_update['auto_flag'] = $bill_update['auto_flag'] = 1;
$ar_update['status'] = $bill_update['status'] = 2;
$ar_update['unconfirm_money'] = $bill_update['unconfirm_money'] = 0;
$ar_update['confirm_money'] = $aval['ar_money'];
$bill_update['confirm_money'] = $aval['bill_money'];
$ar_update['verification_time'] = $bill_update['verification_time']= $time;
$ar_filter['ar_id'] = $aval['ar_id'];
$bill_filter['bill_id'] = $aval['bill_id'];
$ar_rs = $this->auto_ar_status($ar_update,$ar_filter);
$bill_rs = $this->auto_bill_status($bill_update,$bill_filter);
if(!$ar_rs || !$bill_rs){
$ar->db->rollBack();
continue ;
}
//todo 日志
$log_data = $aval;
}
elseif($aval['ar_id']){
$ar_update['auto_flag'] = 1;
$ar_filter['ar_id'] = $aval['ar_id'];
$ar_rs = $this->auto_ar_status($ar_update,$ar_filter);
}
$ar->db->commit();
if($log_data){
$this->write_auto_log($aval);
}
}
$billaData = $ar->db->select("SELECT a.ar_id,a.ar_bn,a.money as ar_money,a.confirm_money as ar_confirm_money,a.unconfirm_money as ar_unconfirm_money,b.bill_id, b.bill_bn,b.money as bill_money,b.confirm_money as bill_confirm_money,b.unconfirm_money as bill_unconfirm_money,b.trade_time as bill_trade_time from `sdb_finance_bill` as b left join `sdb_finance_ar` as a on a.order_bn=b.order_bn and a.money=b.money where b.auto_flag=0 and b.status=0 and a.charge_status=1 and b.charge_status=1 and b.fee_type_id=1");
foreach($billaData as $bk=>$bval){
$time = time();
$ar->db->beginTransaction();
if($bval['ar_id']&&$bval['bill_id']){
$ar_update['auto_flag'] = $bill_update['auto_flag'] = 1;
$ar_update['status'] = $bill_update['status'] = 2;
$ar_update['verification_time'] = $bill_update['verification_time']= $time;
$ar_update['unconfirm_money'] = $bill_update['unconfirm_money'] = 0;
$ar_update['confirm_money'] = $bval['ar_money'];
$bill_update['confirm_money'] = $bval['bill_money'];
$ar_filter['ar_id'] = $bval['ar_id'];
$bill_filter['bill_id'] = $bval['bill_id'];
$ar_rs = $this->auto_ar_status($ar_update,$ar_filter);
$bill_rs = $this->auto_bill_status($bill_update,$bill_filter);
//todo 日志
if(!$ar_rs || !$bill_rs){
$ar->db->rollBack();
continue ;
}
$blog_data = $bval;
}
elseif($bval['bill_id']){
$bill_update['auto_flag'] = 1;
$bill_filter['bill_id'] = $bval['bill_id'];
$ar_rs = $this->auto_bill_status($bill_update,$bill_filter);
}
$ar->db->commit();
if($blog_data){
$this->write_auto_log($blog_data);
}
}
}
function auto_ar_status($update_data=array(),$filter=array()){
if(!$update_data || !$filter) return false;
$ar = app::get("finance")->model('ar');
return $ar->update($update_data,$filter);
}
function auto_bill_status($update_data=array(),$filter=array()){
if(!$update_data || !$filter) return false;
$bill = app::get("finance")->model('bill');
return $bill->update($update_data,$filter);
}
function write_auto_log($aData)
{
$bill_lib = kernel::single("finance_bill");
$bill_data['bill_id'] = $aData['bill_id'];
$bill_data['bill_bn'] = $aData['bill_bn'];
$bill_data['money'] = $aData['bill_money'];
$bill_data['unconfirm_money'] = $aData['bill_unconfirm_money'];
$bill_data['confirm_money'] = $aData['bill_confirm_money'];
$ar_data['ar_id'] = $aData['ar_id'];
$ar_data['ar_bn'] = $aData['ar_bn'];
$ar_data['money'] = $aData['ar_money'];
$ar_data['unconfirm_money'] = $aData['ar_unconfirm_money'];
$ar_data['confirm_money'] = $aData['ar_confirm_money'];
$bdata[] = $bill_data;
$adata[] = $ar_data;
$bill_lib->write_verification_log($bdata,$adata,$aData['bill_trade_time'],1);
}
}