mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-31 13:25:32 +08:00
258 lines
9.0 KiB
PHP
258 lines
9.0 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 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.
|
|
*/
|
|
/**
|
|
* ============================
|
|
* @Author: XueDing
|
|
* @Version: 1.0
|
|
* @DateTime: 2021/4/25 16:21:45
|
|
* @describe: 类
|
|
* ============================
|
|
*/
|
|
class omeanalysts_autotask_timer_orderdiscounts
|
|
{
|
|
|
|
/**
|
|
* 处理
|
|
* @param mixed $params 参数
|
|
* @param mixed $error_msg error_msg
|
|
* @return mixed 返回值
|
|
*/
|
|
|
|
public function process($params, &$error_msg = '')
|
|
{
|
|
set_time_limit(0);
|
|
ignore_user_abort(1);
|
|
@ini_set('memory_limit', '512M');
|
|
$key = 'omeanalysts_autotask_timer_ome_orderDiscounts';
|
|
$isRun = cachecore::fetch($key);
|
|
|
|
if ($isRun) {
|
|
$error_msg = 'is running';
|
|
if (!isset($params['execute'])) {
|
|
return false;
|
|
}
|
|
}
|
|
cachecore::store($key, 'running', 1795);
|
|
$offset = 0;
|
|
$count = ceil($this->count_orders($params) / 500);
|
|
while ($offset<=$count) {
|
|
$this->insert_data($offset, $params, $error_msg);
|
|
echo '页码:' . $offset. "\n\r";
|
|
$offset++;
|
|
}
|
|
base_kvstore::instance('omeanalysts_ome_orderDiscounts')->store('order_discounts_last_exec_time', time());
|
|
}
|
|
|
|
/**
|
|
* insert_data
|
|
* @param mixed $offset offset
|
|
* @param mixed $params 参数
|
|
* @param mixed $error_msg error_msg
|
|
* @return mixed 返回值
|
|
*/
|
|
public function insert_data($offset, $params, &$error_msg = '')
|
|
{
|
|
$limit = 500;
|
|
$start = $offset * $limit;
|
|
|
|
$db = kernel::database();
|
|
|
|
base_kvstore::instance('omeanalysts_ome_orderDiscounts')->fetch('order_discounts_last_exec_time',
|
|
$last_exec_time);
|
|
|
|
if ($last_exec_time) {
|
|
$time = $last_exec_time;
|
|
} else {
|
|
$time = time() - 1800;
|
|
}
|
|
|
|
// 如果传参使用传参时间
|
|
if (isset($params['start_time'])) {
|
|
$time = $params['start_time'];
|
|
}
|
|
$ed_time = '';
|
|
if (isset($params['end_time'])) {
|
|
$ed_time = ' AND paytime < "' . $params['end_time'] . '"';
|
|
}
|
|
|
|
//主订单数据查询出来所有符合条件的订单id
|
|
$sql = 'SELECT
|
|
order_id,order_bn,shop_id,shop_type,cost_item,total_amount,payed,createtime,paytime,pay_status,org_id
|
|
FROM
|
|
sdb_ome_orders
|
|
WHERE
|
|
paytime > "' . $time . '"' . $ed_time . ' AND
|
|
pay_status = "1"
|
|
ORDER BY paytime
|
|
LIMIT ' . $start . ',' . $limit;
|
|
$order_list = $db->select($sql);
|
|
|
|
if (empty($order_list)) {
|
|
$error_msg = '没有符合条件插入数据';
|
|
return false;
|
|
}
|
|
$order_list = array_column($order_list, null, 'order_id');
|
|
//查询主表已有数据与字表已有数据排除
|
|
$order_id_arr = array_column($order_list, 'order_id');
|
|
$sql = 'SELECT order_id FROM sdb_omeanalysts_ome_orderDiscounts WHERE order_id IN ( ' . implode(',',
|
|
$order_id_arr) . ' )';
|
|
$discount_list = $db->select($sql);
|
|
$discount_list = array_column($discount_list, null, 'order_id');
|
|
if (!empty($discount_list)) {
|
|
foreach ($order_list as $k => $v) {
|
|
if (isset($discount_list[$v['order_id']])) {
|
|
unset($order_list[$v['order_id']]);
|
|
}
|
|
}
|
|
$order_id_arr = array_column($order_list, 'order_id');
|
|
}
|
|
|
|
if (empty($order_id_arr)) {
|
|
$error_msg = '该时间段内数据已插入';
|
|
return false;
|
|
}
|
|
|
|
//根据剔除已插入的数据order查询优惠明细表
|
|
$sql = 'SELECT order_id,pmt_amount,pmt_describe FROM sdb_ome_order_pmt WHERE order_id IN ( ' . implode(',',
|
|
$order_id_arr) . ' )';
|
|
$order_pmt_list = $db->select($sql);
|
|
|
|
if (!empty($order_pmt_list)) {
|
|
$order_pmt_list = $this->filter_by_value($order_pmt_list, 'order_id');
|
|
}
|
|
|
|
//组装插入数据
|
|
$inset_data_str = '';
|
|
$insert_data = array();
|
|
foreach ($order_list as $k => $v) {
|
|
$insert_data['order_id'] = $v['order_id'];
|
|
$insert_data['order_bn'] = $v['order_bn'];
|
|
$insert_data['shop_id'] = $v['shop_id'];
|
|
$insert_data['shop_type'] = $v['shop_type'];
|
|
$insert_data['original_money'] = $v['cost_item'];
|
|
$insert_data['sale_money'] = $v['total_amount'];
|
|
$insert_data['pay_money'] = !empty($v['payed']) ? $v['payed']: 0;
|
|
$insert_data['order_createtime'] = !empty($v['createtime']) ? $v['createtime'] : time();
|
|
$insert_data['paytime'] = $v['paytime'];
|
|
$insert_data['pay_status'] = $v['pay_status'];
|
|
$insert_data['createtime'] = time();
|
|
if (isset($order_pmt_list[$v['order_id']])) {
|
|
$insert_datas = $insert_data;
|
|
foreach ($order_pmt_list[$v['order_id']] as $key => $value) {
|
|
$insert_datas['discount_name'] = $value['pmt_describe'];
|
|
$insert_datas['discount_money'] = $value['pmt_amount'];
|
|
$insert_datas['org_id'] = $v['org_id'];
|
|
$inset_data_str .= '("' . implode('","', $insert_datas) . '"),';
|
|
}
|
|
unset($insert_data);
|
|
continue;
|
|
} else {
|
|
$insert_data['discount_name'] = '';
|
|
$insert_data['discount_money'] = 0;
|
|
$insert_data['org_id'] = (int) $v['org_id'];
|
|
}
|
|
$inset_data_str .= '("' . implode('","', $insert_data) . '"),';
|
|
unset($insert_data);
|
|
}
|
|
|
|
$field = [
|
|
'order_id',
|
|
'order_bn',
|
|
'shop_id',
|
|
'shop_type',
|
|
'original_money',
|
|
'sale_money',
|
|
'pay_money',
|
|
'order_createtime',
|
|
'paytime',
|
|
'pay_status',
|
|
'createtime',
|
|
'discount_name',
|
|
'discount_money',
|
|
'org_id',
|
|
];
|
|
if (!empty($inset_data_str)) {
|
|
$sql = 'INSERT INTO sdb_omeanalysts_ome_orderDiscounts (' . implode(',',$field) . ') VALUES' . substr($inset_data_str,0, -1);
|
|
$db->exec($sql);
|
|
unset($inset_data_str, $order_pmt_list, $order_id_arr, $discount_list, $order_list);
|
|
$error_msg = 'succ';
|
|
return true;
|
|
} else {
|
|
unset($inset_data_str, $order_pmt_list, $order_id_arr, $discount_list, $order_list);
|
|
$error_msg = 'error';
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* count_orders
|
|
* @param mixed $params 参数
|
|
* @return mixed 返回值
|
|
*/
|
|
public function count_orders($params)
|
|
{
|
|
$db = kernel::database();
|
|
|
|
base_kvstore::instance('omeanalysts_ome_orderDiscounts')->fetch('order_discounts_last_exec_time',
|
|
$last_exec_time);
|
|
|
|
if ($last_exec_time) {
|
|
$time = $last_exec_time;
|
|
} else {
|
|
$time = time() - 1800;
|
|
}
|
|
|
|
// 如果传参使用传参时间
|
|
if (isset($params['start_time'])) {
|
|
$time = $params['start_time'];
|
|
}
|
|
$ed_time = '';
|
|
if (isset($params['end_time'])) {
|
|
$ed_time = ' AND paytime < "' . $params['end_time'] . '"';
|
|
}
|
|
|
|
//主订单数据查询出来所有符合条件的订单id
|
|
$sql = 'SELECT
|
|
count(*) as order_count
|
|
FROM
|
|
sdb_ome_orders
|
|
WHERE
|
|
paytime > "' . $time . '"' . $ed_time . ' AND
|
|
pay_status = "1"
|
|
ORDER BY paytime';
|
|
return $db->select($sql)[0]['order_count'];
|
|
}
|
|
|
|
|
|
/*
|
|
* 根据二维数组某个字段查找数组
|
|
*/
|
|
function filter_by_value($array, $index)
|
|
{
|
|
if (is_array($array) && count($array) > 0) {
|
|
foreach (array_keys($array) as $key) {
|
|
$temp[$key][$index] = $array[$key][$index];
|
|
if ($temp[$key][$index] == $array[$key][$index]) {
|
|
$newarray[$array[$key][$index]][] = $array[$key];
|
|
}
|
|
}
|
|
}
|
|
return $newarray;
|
|
}
|
|
|
|
}
|