Files
OMS/app/console/model/delivery.php
2025-12-28 23:13:25 +08:00

727 lines
27 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
class console_mdl_delivery extends dbeav_model{
var $defaultOrder = array('delivery_id',' DESC');
/**
* 须加密字段
*
* @var string
* */
private $__encrypt_cols = array(
'ship_name' => 'simple',
'ship_tel' => 'phone',
'ship_mobile' => 'phone',
'ship_addr' => 'simple',
);
/**
* table_name
* @param mixed $real real
* @return mixed 返回值
*/
public function table_name($real = false){
if($real){
$table_name = 'sdb_ome_delivery';
}else{
$table_name = 'delivery';
}
return $table_name;
}
/**
* 获取_schema
* @return mixed 返回结果
*/
public function get_schema(){
return app::get('ome')->model('delivery')->get_schema();
}
function searchOptions(){
$parentOptions = parent::searchOptions();
$childOptions = array(
'delivery_bn'=>app::get('base')->_('发货单号'),
'order_bn'=>app::get('base')->_('订单号'),
'member_uname'=>app::get('base')->_('用户名'),
'ship_name'=>app::get('base')->_('收货人'),
'ship_tel_mobile'=>app::get('base')->_('联系电话'),
'product_bn'=>app::get('base')->_('货号'),
'product_barcode'=>app::get('base')->_('条形码'),
'delivery_ident'=>app::get('base')->_('打印批次号'),
);
return array_merge($childOptions,$parentOptions);
}
/**
* _filter
* @param mixed $filter filter
* @param mixed $tableAlias tableAlias
* @param mixed $baseWhere baseWhere
* @return mixed 返回值
*/
public function _filter($filter,$tableAlias=null,$baseWhere=null)
{
$baseWhere = (array) $baseWhere;
$tPre = ($tableAlias?$tableAlias:'`'.$this->table_name(true).'`').'.';
//setting
$deliveryIds = array();
$where = '';
//filter - 加密字段处理
$encryptWhere = kernel::single('ome_filter_encrypt')->encrypt($filter, $this->__encrypt_cols, $tPre, 'delivery');
$baseWhere = array_merge($baseWhere, $encryptWhere);
if(isset($filter['ship_tel_mobile'])){
$encryptVal = kernel::single('ome_security_factory')->encryptPublic($filter['ship_tel_mobile'],'phone');
$encryptVal = utils::addslashes_array($encryptVal);
$originalVal = utils::addslashes_array($filter['ship_tel_mobile']);
$baseWhere[] = "({$tPre}ship_tel IN('".$originalVal."','".$encryptVal."')||{$tPre}ship_mobile IN('".$originalVal."','".$encryptVal."'))";
unset($filter['ship_tel_mobile']);
}
if(isset($filter['extend_delivery_id'])){
$where .= ' OR delivery_id IN ('.implode(',', $filter['extend_delivery_id']).')';
unset($filter['extend_delivery_id']);
}
if (isset($filter['member_uname'])){
$memberObj = app::get('ome')->model("members");
$rows = $memberObj->getList('member_id',array('uname|has'=>$filter['member_uname']));
$memberId[] = 0;
foreach($rows as $row){
$memberId[] = $row['member_id'];
}
$where .= ' AND member_id IN ('.implode(',', $memberId).')';
unset($filter['member_uname']);
}
if(isset($filter['outer_dlybn'])) {
if(strpos($filter['outer_dlybn'], "\n") !== false){
$filter['outer_dlybn'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['outer_dlybn']))));
}
$rows = app::get('console')->model('delivery_extension')->getList('delivery_bn',['original_delivery_bn'=>$filter['outer_dlybn']]);
unset($filter['outer_dlybn']);
$rows = array_column($rows, 'delivery_bn');
$rows[] = 0;
$where .= ' AND delivery_bn IN ("'.implode('","', $rows).'")';
}
if (isset($filter['order_bn'])){
// 多订单号查询
if(strpos($filter['order_bn'], "\n") !== false){
$filter['order_bn'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['order_bn']))));
}
$orderObj = app::get('ome')->model("orders");
$rows = $orderObj->getList('order_id',array('order_bn'=>$filter['order_bn']));
$orderId[] = 0;
foreach($rows as $row){
$orderId[] = $row['order_id'];
}
$deliOrderObj = app::get('ome')->model("delivery_order");
$rows = $deliOrderObj->getList('delivery_id',array('order_id'=>$orderId));
//delivery_id
$tempDlyIds = array(0);
foreach($rows as $row)
{
$temp_dly_id = $row['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
unset($filter['order_bn']);
}
//按基础物料搜索
if (isset($filter['material_bn'])){
//多货号查询
if(strpos($filter['material_bn'], "\n") !== false){
$material_bns = array_unique(array_map('trim', array_filter(explode("\n", $filter['material_bn']))));
$filter['material_bn'] = $material_bns;
}
//search_delivery_items
$itemsObj = app::get('ome')->model("delivery_items");
$rows = $itemsObj->getDeliveryIdByPbn($filter);
//delivery_id
$tempDlyIds = array(0);
foreach($rows as $row)
{
$temp_dly_id = $row['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
//unset
unset($filter['material_bn']);
}
//按货号搜索
if(isset($filter['product_bn'])){
//search_delivery_items
$itemsObj = app::get('ome')->model("delivery_items");
$rows = $itemsObj->getDeliveryIdByFilter($filter);
//delivery_id
$tempDlyIds = array(0);
foreach($rows as $row)
{
$temp_dly_id = $row['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
//unset
unset($filter['product_bn']);
}
//按条形码搜索
if(isset($filter['product_barcode'])){
//search_delivery_items
$itemsObj = app::get('ome')->model("delivery_items");
//获取条形码关联的货号
$codeSql = "SELECT a.code, b.bm_id,b.material_bn FROM sdb_material_codebase AS a LEFT JOIN sdb_material_basic_material AS b ON a.bm_id=b.bm_id ";
$codeSql .= " WHERE a.code='". addslashes($filter['product_barcode']) ."'";
$materialInfo = $itemsObj->db->selectrow($codeSql);
//用货号进行搜索
$filter['product_bn'] = $materialInfo['material_bn'];
//unset(一定要注销掉,防止重复调用)
unset($filter['product_barcode']);
//list
$rows = $itemsObj->getDeliveryIdByFilter($filter);
//delivery_id
$tempDlyIds = array(0);
foreach($rows as $row)
{
$temp_dly_id = $row['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
//unset
unset($filter['product_bn']);
}
if(isset($filter['logi_no_ext'])){
$logObj = app::get('ome')->model("delivery_log");
$rows = $logObj->getDeliveryIdByLogiNO($filter['logi_no_ext']);
//delivery_id
$tempDlyIds = array(0);
foreach($rows as $row)
{
$temp_dly_id = $row['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
unset($filter['logi_no_ext']);
}
if(isset($filter['addonSQL'])){
$where .= ' AND '.$filter['addonSQL'];
unset($filter['addonSQL']);
}
if(isset($filter['delivery_ident'])){
//delivery_id
$tempDlyIds = array(0);
$arr_delivery_ident = explode('_',$filter['delivery_ident']);
$mdl_queue = app::get('ome')->model("print_queue");
if(count($arr_delivery_ident) == 2){
$ident_dly = array_pop($arr_delivery_ident);
$ident = implode('-',$arr_delivery_ident);
$queueItem = $mdl_queue->findQueueItem($ident,$ident_dly);
if($queueItem){
$temp_dly_id = $queueItem['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
}else{
if (1 == substr_count($filter['delivery_ident'], '-')) {
$queues = $mdl_queue->getList('dly_bns',array('ident|head'=>$filter['delivery_ident']));
if ($queues){
//$queue['dly_bns'] = implode(',', array_map('current', $queues));
$tempDlyIds = array_map('current', $queues);
}
} else {
//获取实际的打印批次号
$delivery_id = $mdl_queue->findQueueDeliveryId($filter['delivery_ident'],'delivery_id');
if($delivery_id){
//$queue['dly_bns'] = $delivery_id;
$tempDlyIds = explode(',', $delivery_id);
}
}
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
unset($filter['delivery_ident']);
}
if($filter['todo']==1){
$where .= " AND (stock_status='false' or expre_status='false' or deliv_status='false')";
unset($filter['todo']);
}
if($filter['todo']==2){
$where .= " AND (stock_status='false' or expre_status='false')";
unset($filter['todo']);
}
if($filter['todo']==3){
$where .= " AND (expre_status='false' or deliv_status='false')";
unset($filter['todo']);
}
if($filter['todo']==4){
$where .= " AND expre_status='false'";
unset($filter['todo']);
}
if (isset($filter['print_finish'])) {
$where_or = array();
foreach((array)$filter['print_finish'] as $key=> $value){
$or = "(deli_cfg='".$key."'";
switch($value) {
case '1_1':
$or .= " AND stock_status='true' AND deliv_status='true' ";
break;
case '1_0':
$or .= " AND stock_status='true' ";
break;
case '0_1':
$or .= " AND deliv_status='true' ";
break;
case '0_0':
break;
}
$or .= ')';
$where_or[] = $or;
}
if($where_or){
$where .= ' AND ('.implode(' OR ',$where_or).')';
}
unset($filter['print_finish']);
}
if (isset($filter['ext_branch_id'])) {
if (isset($filter['branch_id'])){
$filter['branch_id'] = array_intersect((array)$filter['branch_id'],(array)$filter['ext_branch_id']);
$filter['branch_id'] = $filter['branch_id'] ? $filter['branch_id'] : 'false';
}else{
$filter['branch_id'] = $filter['ext_branch_id'];
}
unset($filter['ext_branch_id']);
}
if(isset($filter['logi_no'])){
$obj_delivery_bill = $deliOrderObj = app::get('ome')->model("delivery_bill");
#获取子表物流单号
$delivery_id = $obj_delivery_bill->dump(array('logi_no'=>$filter['logi_no']),'delivery_id');
if(!empty($delivery_id['delivery_id'])){
$temp_dly_id = $delivery_id['delivery_id'];
$tempDlyIds = array(0);
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
unset($filter['logi_no']);
}
}
//客服备注
if(isset($filter['mark_text'])){
$mark_text = $filter['mark_text'];
$sql = "SELECT do.delivery_id FROM sdb_ome_delivery_order do JOIN sdb_ome_orders o ON do.order_id=o.order_id and o.process_status='splited' and o.mark_text like "."'%{$mark_text}%'";
$_rows = $this->db->select($sql);
if(!empty($_rows)){
$tempDlyIds = array(0);
foreach($_rows as $_orders)
{
$temp_dly_id = $_orders['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
unset($filter['mark_text']);
}
}
//买家留言
if(isset($filter['custom_mark'])){
$custom_mark = $filter['custom_mark'];
$sql = "SELECT do.delivery_id FROM sdb_ome_delivery_order do JOIN sdb_ome_orders o ON do.order_id=o.order_id and o.process_status='splited' and o.custom_mark like "."'%{$custom_mark}%'";
$_rows = $this->db->select($sql);
if(!empty($_rows)){
$tempDlyIds = array(0);
foreach($_rows as $_orders)
{
$temp_dly_id = $_orders['delivery_id'];
$tempDlyIds[$temp_dly_id] = $temp_dly_id;
}
//intersection
if(empty($deliveryIds)){
$deliveryIds = $tempDlyIds;
}else{
$deliveryIds = array_intersect($deliveryIds, $tempDlyIds);
}
unset($filter['custom_mark']);
}
}
//同步状态筛查
if (isset($filter['sync_filter'])) {
$boolSync = kernel::single('console_delivery_bool_sync')->getBoolSync($filter['sync_filter']);
$where .= ' AND sync IN ("'.implode('","', $boolSync).'")';
unset($filter['sync_filter']);
}
//delivery_ids
if($deliveryIds){
$where .= " AND delivery_id IN ('". implode("','", $deliveryIds) ."')";
}
//订单标记
if($filter['order_label']){
$ordLabelObj = app::get('ome')->model('bill_label');
$tempData = $ordLabelObj->getList('bill_id', array('label_id'=>$filter['order_label'], 'bill_type'=>'ome_delivery'));
if($tempData){
$orderId = array();
foreach ($tempData as $tempKey => $tempVal)
{
$temp_order_id = $tempVal['bill_id'];
$orderId[$temp_order_id] = $temp_order_id;
}
$where .= ' AND delivery_id IN ("'. implode('","', $orderId) .'")';
}else{
$where .= ' AND delivery_id = "-1"';
}
unset($filter['order_label'], $tempData);
}
if (isset($filter['delivery_bn'])){
// 多发货号查询
if(strpos($filter['delivery_bn'], "\n") !== false){
$filter['delivery_bn'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['delivery_bn']))));
}
}
return parent::_filter($filter,$tableAlias,$baseWhere).$where;
}
/*
* 根据订单id获取是否撤销失败发货单
*
*
* @param bigint $order_id
*
* @return array $ids
*/
function getDeliveryByOrderId($order_id){
$delivery_ids = $this->db->select("SELECT dord.delivery_id FROM sdb_ome_delivery_order AS dord
LEFT JOIN sdb_ome_delivery AS d ON(dord.delivery_id=d.delivery_id)
WHERE dord.order_id={$order_id} AND (d.parent_id=0 OR d.is_bind='true') AND d.disabled='false' AND d.status NOT IN('failed','cancel','back','return_back','succ') AND sync='fail'");
$ids = array();
if($delivery_ids){
foreach($delivery_ids as $v){
$ids[] = $v['delivery_id'];
}
}
return $ids;
}
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);
}
}
//调用原有处理
$result = parent::update($data, $filter, $mustUpdate);
return $result;
}
/**
* 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 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;
}
public function finder_getList($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null)
{
$data = parent::finder_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,'delivery','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);$delivery_id = $row['delivery_id'];
$encryptShipName = kernel::single('ome_view_helper2')->modifier_ciphertext($ship_name,'delivery','ship_name');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=console&ctl=admin_delivery&act=showSensitiveData&p[0]={$delivery_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,'delivery','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);$delivery_id = $row['delivery_id'];
$encryptTel = kernel::single('ome_view_helper2')->modifier_ciphertext($tel,'delivery','ship_tel');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=console&ctl=admin_delivery&act=showSensitiveData&p[0]={$delivery_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,'delivery','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);$delivery_id = $row['delivery_id'];
$encryptMobile = kernel::single('ome_view_helper2')->modifier_ciphertext($mobile,'delivery','ship_mobile');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=console&ctl=admin_delivery&act=showSensitiveData&p[0]={$delivery_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,'delivery','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);$delivery_id = $row['delivery_id'];
$encryptAddr = kernel::single('ome_view_helper2')->modifier_ciphertext($ship_addr,'delivery','ship_addr');
$return =<<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=console&ctl=admin_delivery&act=showSensitiveData&p[0]={$delivery_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;
}
/**
* modifier_member_id
* @param mixed $member_id ID
* @param mixed $list list
* @param mixed $row row
* @return mixed 返回值
*/
public function modifier_member_id($member_id,$list,$row)
{
static $members;
if (!$member_id) return '';
if ($members) return $members[$row['delivery_id']];
$members = array ();
foreach ($list as $key => $value) {
$members[$value['delivery_id']] = $value['member_id'];
}
$rows = array ();
if ($mid = array_filter($members)) {
$mdl = app::get('ome')->model('members');
foreach ($mdl->getList('member_id,uname',array('member_id'=>$mid)) as $value) {
$rows[$value['member_id']] = $value['uname'];
}
}
foreach ($members as $delivery_id => $value) {
$uname = $rows[$value];
$is_encrypt = kernel::single('ome_security_hash')->check_encrypt($uname);
if ($is_encrypt) {
$encrypt = kernel::single('ome_view_helper2')->modifier_ciphertext($uname,'delivery','uname');
$uname = <<<HTML
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=console&ctl=admin_delivery&act=showSensitiveData&p[0]={$delivery_id}',clickElement:\$(event.target)}).desHtml(\$(event.target).getNext()); });"></a><span><span sensitive-field="uname">{$encrypt}</span></span>
HTML;
}
$members[$delivery_id] = $uname;
}
return $members[$row['delivery_id']];
}
function getOrderIdByDeliveryId($dly_ids){
$dly_orderObj = app::get('ome')->model('delivery_order');
$filter['delivery_id'] = $dly_ids;
$data = $dly_orderObj->getList('order_id', $filter);
foreach ($data as $item){
$ids[] = $item['order_id'];
}
return $ids;
}
}