Files
OMS/app/archive/model/orders.php
2026-01-04 19:08:31 +08:00

524 lines
21 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 archive_mdl_orders extends dbeav_model{
var $has_many = array(
'order_objects' => 'order_objects',
);
//是否有导出配置
var $has_export_cnf = true;
var $defaultOrder = array('createtime DESC ,order_id DESC');
var $export_name = '归档订单';
/**
* 须加密字段
*
* @var string
* */
private $__encrypt_cols = array(
'ship_name' => 'simple',
'ship_mobile' => 'phone',
'ship_tel' => 'phone',
'ship_addr' => 'simple',
);
function _filter($filter,$tableAlias=null,$baseWhere=null){
$where = " 1 ";
if (isset($filter['flag']) && $filter['flag'] == '0') {
return ;
}
if($filter['search_filter']){
$field_map = array(
'receive_name' => 'ship_name',
'mobile' => 'ship_mobile',
'tel' => 'ship_tel'
);
$field = $field_map[$filter['search_filter']];
$encrypt_type = $this->__encrypt_cols[$field];
if ($encrypt_type) {
$searchtype = 'nequal';
if ($searchtype!='nequal' && in_array($encrypt_type,array('search','nick','receiver_name'))) {
$encryptVal = kernel::single('ome_security_factory')->search($filter['search_filter_value'],$encrypt_type);
} else {
$encryptVal = kernel::single('ome_security_factory')->encryptPublic($filter['search_filter_value'],$encrypt_type);
}
$originalVal = utils::addslashes_array($filter['search_filter_value']);
$encryptVal = utils::addslashes_array($encryptVal);
switch ($searchtype) {
case 'has':
$baseWhere[] = "({$field} LIKE '%".$originalVal."%' || {$field} LIKE '%".$encryptVal."%')";
break;
case 'head':
$baseWhere[] = "({$field} LIKE '".$originalVal."%' || {$field} LIKE '%".$encryptVal."%')";
break;
case 'foot':
$baseWhere[] = "({$field} LIKE '%".$originalVal."' || {$field} LIKE '%".$encryptVal."%')";
break;
default:
$baseWhere[] = "{$field} IN('".$originalVal."','".$encryptVal."')";
break;
}
unset($filter['search_filter']);
}
}
if ($filter['search_filter'] && $filter['search_filter_value']) {
switch ($filter['search_filter']) {
case 'order_bn':
$where.=" AND order_bn='".$filter['search_filter_value']."'";
break;
case 'logi_no':
$order_id = [0];
$delivery = app::get('archive')->model('delivery')->db_dump([
'logi_no' => $filter['search_filter_value'],
],'delivery_id');
if ($delivery) {
$deliveryOrder = app::get('archive')->model('delivery_order')->getList('order_id',array(
'delivery_id' => $delivery['delivery_id'],
));
if ($deliveryOrder) {
$order_id = array_column($deliveryOrder, 'order_id');
}
}
$where.=" AND order_id IN(".implode(',', $order_id).")";
break;
case 'member_name':
$member_id = '';
$memberObj = app::get('ome')->model("members");
$rows = $memberObj->getList('member_id',array('uname|head'=>$filter['search_filter_value']));
$memberId[] = 0;
foreach($rows as $row){
$memberId[] = $row['member_id'];
}
$where .= ' AND member_id IN ('.implode(',', $memberId).')';
break;
case 'receive_name':
$where.=" AND ship_name='".$filter['search_filter_value']."'";
break;
case 'mobile':
$where.=" AND ship_mobile='".$filter['search_filter_value']."'";
break;
case 'tel':
$where.=" AND ship_tel='".$filter['search_filter_value']."'";
break;
case 'delivery_bn':
$order_ids = kernel::single('archive_interface_delivery')->getOrderBydeliverybn($filter['search_filter_value']);
if ($order_ids){
$where.=" AND order_id in (".implode(',',$order_ids).")";
}
break;
}
}
if ($filter['time_from'] && $filter['time_to']) {
$time_from = strtotime($filter['time_from']);
$time_to = strtotime($filter['time_to']);
//开始时间
$start_time = strtotime(date("Y-m-1 00:00:00",$time_from));
$where.=" AND createtime >='".$start_time."'";
//获取选择时间范围内的最后一天
if ( date('Ym',$time_to) >= date('Ym') ){
$end_time = strtotime(date("Y-m-j 23:59:59",time()-24*60*60));
}else{
$end_time = strtotime(date('Y-m-t 23:59:59', $time_to));//1351612799
}
$where.=" AND createtime <='".$end_time."'";
}
if ($filter['shop_id']){
$where.=" AND shop_id ='".$filter['shop_id']."'";
}else{
unset($filter['shop_id']);
}
return $where ." AND ".parent::_filter($filter,$tableAlias,$baseWhere);
}
function countlist($filter=null){
$filter['flag'] = '1';
$sql ="SELECT COUNT(order_id) AS _count FROM sdb_archive_orders WHERE".$this->_filter($filter);
$archive = $this->db->selectrow($sql);
return $archive['_count'];
}
/**
* 获取exportdetail
* @param mixed $fields fields
* @param mixed $filter filter
* @param mixed $offset offset
* @param mixed $limit limit
* @param mixed $has_title has_title
* @return mixed 返回结果
*/
public function getexportdetail($fields,$filter,$offset=0,$limit=1,$has_title=false)
{
//获取订单号信息
$orders = $this->db->select("SELECT order_id,order_bn FROM sdb_archive_orders WHERE order_id in(".implode(',', $filter['order_id']).")");
$aOrder = array();
if($orders){
foreach($orders as $order){
$aOrder[$order['order_id']] = $order['order_bn'];
}
}
$pkgLib = kernel::single('archive_service_objtype_pkg');
$lkbLib = kernel::single('archive_service_objtype_lkb');
$pkoLib = kernel::single('archive_service_objtype_pko');
$row_num = 1;
foreach($filter['order_id'] as $oid){
$objects = $this->db->select("SELECT * FROM sdb_archive_order_objects WHERE order_id =".$oid);
if ($objects){
foreach ($objects as $obj){
$obj_type = strtolower($obj['obj_type']);
if ($obj_type == 'pkg'){
$item_data = $pkgLib->process($obj);
if ($item_data){
foreach ($item_data as $itemv){
$orderObjRow = $this->get_order_obj_row_arr($obj_type,$aOrder[$obj['order_id']],$itemv);
$data[$row_num] = implode(',', $orderObjRow );
$row_num++;
}
}
}elseif($obj_type == 'lkb'){
$item_data = $lkbLib->process($obj);
if ($item_data){
foreach ($item_data as $itemv){
$orderObjRow = $this->get_order_obj_row_arr($obj_type,$aOrder[$obj['order_id']],$itemv);
$data[$row_num] = implode(',', $orderObjRow );
$row_num++;
}
}
}elseif($obj_type == 'pko'){
$item_data = $pkoLib->process($obj);
if($item_data){
foreach ($item_data as $itemv){
$orderObjRow = $this->get_order_obj_row_arr($obj_type,$aOrder[$obj['order_id']],$itemv);
$data[$row_num] = implode(',', $orderObjRow );
$row_num++;
}
}
}else {
$aOrder['order_items'] = $this->db->select("SELECT * FROM sdb_archive_order_items WHERE obj_id=".$obj['obj_id']." AND order_id =".$obj['order_id']);
$aOrder['order_items'] = ome_order_func::add_items_colum($aOrder['order_items']);
$orderRow = array();
$orderObjRow = array();
$k = 0;
if ($aOrder['order_items'])
foreach( $aOrder['order_items'] as $itemk => $itemv ){
$orderObjRow = $this->get_order_obj_row_arr($obj_type,$aOrder[$obj['order_id']],$itemv);
$data[$row_num] = implode(',', $orderObjRow );
$row_num++;
}
}
}
}
}
//明细标题处理
if($data && $has_title){
$title = array(
'*:订单号',
'*:商品货号',
'*:商品名称',
'*:购买单位',
'*:商品规格',
'*:购买数量',
'*:商品原价',
'*:销售价',
'*:商品优惠金额',
'*:商品类型',
'*:商品品牌',
);
foreach ((array)$title as $key => $value) {
$title[$key] = mb_convert_encoding($value, 'GBK', 'UTF-8');
}
$data[0] = implode(',', $title);
}
ksort($data);
return $data;
}
//获取导出明细中的行内容
private function get_order_obj_row_arr($obj_type,$order_bn,$itemv){
$orderObjRow = array(
'*:订单号' => mb_convert_encoding($order_bn, 'GBK', 'UTF-8'),
'*:商品货号' => mb_convert_encoding("\t".$itemv['bn'], 'GBK', 'UTF-8'),
'*:商品名称' => mb_convert_encoding("\t".str_replace("\n"," ",$itemv['name']), 'GBK', 'UTF-8'),
'*:购买单位' => mb_convert_encoding($itemv['unit'], 'GBK', 'UTF-8'),
);
if($obj_type == "pkg" || $obj_type == "lkb" || $obj_type == "pko"){
$orderObjRow['*:商品规格'] = $itemv['spec_info'] ? mb_convert_encoding(str_replace("\n"," ",$itemv['spec_info']), 'GBK', 'UTF-8'):"-";
}else{ //普通、赠品
$addon = unserialize($itemv['addon']);
$spec_info = null;
if(!empty($addon)){
foreach($addon as $val){
foreach ($val as $v){
$spec_info[] = $v['value'];
}
}
}
$orderObjRow['*:商品规格'] = $spec_info ? mb_convert_encoding(implode('||', $spec_info), 'GBK', 'UTF-8'):'-';
}
$orderObjRow['*:购买数量'] = $itemv['nums'];
$orderObjRow['*:商品原价'] = $itemv['price'];
$orderObjRow['*:销售价'] = $itemv['sale_price'] / $itemv['nums'];
$orderObjRow['*:商品优惠金额'] = $itemv['pmt_price'];
if($obj_type == "pkg" || $obj_type == "lkb" || $obj_type == "pko"){
$orderObjRow['*:商品规格'] = $itemv['spec_info'] ? mb_convert_encoding(str_replace("\n"," ",$itemv['spec_info']), 'GBK', 'UTF-8'):"-";
}else{ //普通、赠品
$_typeName = app::get('ome')->model('orders')->getTypeName($itemv['product_id']);
$orderObjRow['*:商品类型'] = mb_convert_encoding($_typeName['type_name'], 'GBK', 'UTF-8');
$orderObjRow['*:商品品牌'] = mb_convert_encoding($_typeName['brand_name'], 'GBK', 'UTF-8');
}
return $orderObjRow;
}
/**
* 订单暂停
*/
function pauseOrder($order_id, $must_update = 'false'){
}
function renewOrder($order_id){
}
function save(&$data,$mustUpdate = null){
//外键 先执行save
$this->_save_parent($data,$mustUpdate);
$plainData = $this->sdf_to_plain($data);
if(!$this->db_save($plainData,$mustUpdate )) return false;
$order_id = $plainData['order_id'];
if(isset($data['order_objects'])){
foreach($data['order_objects'] as $k=>$v){
if(isset($v['order_items'])){
foreach($v['order_items'] as $k2=>$item){
$data['order_objects'][$k]['order_items'][$k2]['order_id'] = $order_id;
}
}else{
break;
}
}
}
if( !is_array($this->idColumn) ){
$data[$this->idColumn] = $plainData[$this->idColumn];
$this->_save_depends($data,$mustUpdate );
}
$plainData = null; //内存用完就放
return true;
}
/**
* 归档订单导出列表扩展字段
*/
function export_extra_cols(){
return array(
'column_logi_name' => array('label'=>'物流公司','width'=>'100','func_suffix'=>'logi_name'),
'column_logi_no' => array('label'=>'物流单号','width'=>'100','func_suffix'=>'logi_no'),
);
}
/**
* 扩展字段格式化
*/
function export_extra_logi_name($rows){
return kernel::single('ome_exportextracolumn_archive_loginame')->process($rows);
}
function export_extra_logi_no($rows){
return kernel::single('ome_exportextracolumn_archive_logino')->process($rows);
}
/**
* insert
* @param mixed $data 数据
* @return mixed 返回值
*/
public function insert(&$data)
{
foreach ($this->__encrypt_cols as $field => $type) {
if (isset($data[$field])) {
$data[$field] = (string) kernel::single('ome_security_factory')->encryptPublic($data[$field],$type);
}
}
return parent::insert($data);
}
public function update($data,$filter=array(),$mustUpdate = null)
{
foreach ($this->__encrypt_cols as $field => $type) {
if (isset($data[$field])) {
$data[$field] = (string) kernel::single('ome_security_factory')->encryptPublic($data[$field],$type);
}
}
return parent::update($data,$filter,$mustUpdate);
}
public function getList($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null)
{
$data = parent::getList($cols,$filter,$offset,$limit,$orderType);
foreach ((array) $data as $key => $value) {
foreach ($this->__encrypt_cols as $field => $type) {
if (isset($value[$field])) {
$data[$key][$field] = (string) kernel::single('ome_security_factory')->decryptPublic($value[$field],$type);
}
}
}
return $data;
}
/**
* modifier_ship_name
* @param mixed $ship_name ship_name
* @param mixed $list list
* @param mixed $row row
* @return mixed 返回值
*/
public function modifier_ship_name($ship_name,$list,$row)
{
if ($this->is_export_data) {
if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) {
return kernel::single('ome_view_helper2')->modifier_ciphertext($ship_name,'order','ship_name');
}
return $ship_name;
}
$is_encrypt = kernel::single('ome_security_hash')->check_encrypt($ship_name);
if (!$is_encrypt) return $ship_name;
$base_url = kernel::base_url(1);$order_id = $row['order_id'];
$encryptShipName = kernel::single('ome_view_helper2')->modifier_ciphertext($ship_name,'order','ship_name');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=ome&ctl=admin_order&act=showSensitiveData&p[0]={$order_id}',clickElement:\$(event.target)}).desHtml(\$(event.target).getNext()); });"></a><span><span sensitive-field="ship_name">{$encryptShipName}</span></span>
HTML;
return $ship_name?$return:$ship_name;
}
/**
* modifier_ship_tel
* @param mixed $tel tel
* @param mixed $list list
* @param mixed $row row
* @return mixed 返回值
*/
public function modifier_ship_tel($tel,$list,$row)
{
if ($this->is_export_data) {
if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) {
return kernel::single('ome_view_helper2')->modifier_ciphertext($tel,'order','ship_tel');
}
return $tel;
}
$is_encrypt = kernel::single('ome_security_hash')->check_encrypt($tel);
if (!$is_encrypt) return $tel;
$base_url = kernel::base_url(1);$order_id = $row['order_id'];
$encryptTel = kernel::single('ome_view_helper2')->modifier_ciphertext($tel,'order','ship_tel');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=ome&ctl=admin_order&act=showSensitiveData&p[0]={$order_id}',clickElement:\$(event.target)}).desHtml(\$(event.target).getNext()); });"></a><span><span sensitive-field="ship_tel">{$encryptTel}</span></span>
HTML;
return $tel?$return:$tel;
}
/**
* modifier_ship_mobile
* @param mixed $mobile mobile
* @param mixed $list list
* @param mixed $row row
* @return mixed 返回值
*/
public function modifier_ship_mobile($mobile,$list,$row)
{
if ($this->is_export_data) {
if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) {
return kernel::single('ome_view_helper2')->modifier_ciphertext($mobile,'order','ship_mobile');
}
return $mobile;
}
$is_encrypt = kernel::single('ome_security_hash')->check_encrypt($mobile);
if (!$is_encrypt) return $mobile;
$base_url = kernel::base_url(1);$order_id = $row['order_id'];
$encryptMobile = kernel::single('ome_view_helper2')->modifier_ciphertext($mobile,'order','ship_mobile');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=ome&ctl=admin_order&act=showSensitiveData&p[0]={$order_id}',clickElement:\$(event.target)}).desHtml(\$(event.target).getNext()); });"></a><span><span sensitive-field="ship_mobile">{$encryptMobile}</span></span>
HTML;
return $mobile?$return:$mobile;
}
/**
* modifier_ship_addr
* @param mixed $ship_addr ship_addr
* @param mixed $list list
* @param mixed $row row
* @return mixed 返回值
*/
public function modifier_ship_addr($ship_addr,$list,$row)
{
if ($this->is_export_data) {
if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) {
return kernel::single('ome_view_helper2')->modifier_ciphertext($ship_addr,'order','ship_addr');
}
return $ship_addr;
}
$is_encrypt = kernel::single('ome_security_hash')->check_encrypt($ship_addr);
if (!$is_encrypt) return $ship_addr;
$base_url = kernel::base_url(1);$order_id = $row['order_id'];
$encryptAddr = kernel::single('ome_view_helper2')->modifier_ciphertext($ship_addr,'order','ship_addr');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=ome&ctl=admin_order&act=showSensitiveData&p[0]={$order_id}',clickElement:\$(event.target)}).desHtml(\$(event.target).getNext()); });"></a><span><span sensitive-field="ship_addr">{$encryptAddr}</span></span>
HTML;
return $ship_addr?$return:$ship_addr;
}
}
?>