mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-03 14:15:46 +08:00
503 lines
17 KiB
PHP
503 lines
17 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 liaoyu
|
||
*
|
||
*/
|
||
class wms_print_data_newdelivery extends wms_print_data_abstract {
|
||
/**
|
||
* 电子面单
|
||
*/
|
||
public function getElectronOrder($delivery_id) {
|
||
|
||
$data = $this->formatDelivery($delivery_id);
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 格式化发货数据
|
||
* @param Int $delivery_id 发货ID
|
||
*/
|
||
public function formatDelivery($delivery) {
|
||
if (empty($delivery)) {
|
||
return array();
|
||
}
|
||
//收货人-姓名
|
||
$data['consignee_name'] = $delivery['ship_name'];
|
||
//收货人-地区1级
|
||
$data['consignee_province'] = $delivery['ship_province'];
|
||
//收货人-地区2级
|
||
$data['consignee_city'] = $delivery['ship_city'];
|
||
//收货人-地区3级
|
||
$data['consignee_district'] = $delivery['ship_district'];
|
||
//收货人-地址
|
||
$data['consignee_addr'] = $delivery['ship_addr'];
|
||
//收货人-邮编
|
||
$data['consignee_zip'] = strval($delivery['ship_zip']);
|
||
//收货人-联系电话
|
||
$data['consignee_telephone'] = strval($delivery['ship_tel']);
|
||
//收货人-手机
|
||
$data['consignee_mobile'] = strval($delivery['ship_mobile']);
|
||
//收货人-Email
|
||
$data['consignee_email'] = $delivery['ship_email'];
|
||
$orderWith = $this->getOrderWith($delivery['delivery_id']);
|
||
//会员备注
|
||
|
||
$data['buyWord'] = $delivery['buyWord'];
|
||
//订单附言
|
||
$data['orderMark'] = $delivery['orderMark'];
|
||
|
||
//收货人-发货单号
|
||
$data['delivery_bn'] = strval($delivery['delivery_bn']);
|
||
//店铺信息
|
||
$shop = $this->getShop($delivery['shop_id']);
|
||
$sender_name = '';
|
||
$sender_province = '';
|
||
$sender_city = '';
|
||
$sender_district = '';
|
||
$sender_addr = '';
|
||
$sender_tel = '';
|
||
$sender_mobile = '';
|
||
$shop_name = '';
|
||
if ($shop) {
|
||
$sender_name = $shop['default_sender'];
|
||
$area = substr($shop['area'], strpos($shop['area'], ':') + 1, strrpos($shop['area'], ':') - strpos($shop['area'], ':') -1);
|
||
list ($sender_province, $sender_city, $sender_district) = explode('/', $area);
|
||
$sender_addr = $shop['addr'];
|
||
$sender_tel = strval($shop['tel']);
|
||
$sender_mobile = strval($shop['mobile']);
|
||
$shop_name = $shop['name'];
|
||
}
|
||
//发货人-姓名
|
||
$data['sender_name'] = $sender_name;
|
||
//发货人-地区1级
|
||
$data['sender_province'] = $sender_province;
|
||
//发货人-地区2级
|
||
$data['sender_city'] = $sender_city;
|
||
//发货人-地区3级
|
||
$data['sender_district'] = $sender_district;
|
||
//发货人-地址
|
||
$data['sender_addr'] = $sender_addr;
|
||
//发货人-联系电话
|
||
$data['sender_tel'] = $sender_tel;
|
||
//发货人-手机
|
||
$data['sender_mobile'] = $sender_mobile;
|
||
//店铺名称
|
||
$data['shop_name'] = $shop_name;
|
||
//会员名
|
||
//$member = $this->getMembers($delivery['member_id']);
|
||
$member_name = '';
|
||
$member_tel = '';
|
||
//if ($member) {
|
||
$member_name = $delivery['member_name'];
|
||
$member_tel = $delivery['member_tel'];;
|
||
//}
|
||
$data['member_name'] = $member_name;
|
||
//会员联系方式
|
||
$data['member_tel'] = $member_tel;
|
||
//操作员
|
||
$data['op_name'] = $delivery['op_name'];
|
||
//当日日期-年
|
||
$data['date_y'] = date("Y");
|
||
//当日日期-月
|
||
$data['date_m'] = date("m");
|
||
//当日日期-日
|
||
$data['date_d'] = date("d");
|
||
//当日日期-年月日
|
||
$data['date_ymd'] = date("Ymd");
|
||
//订单-订单号
|
||
$data['order_bn'] = $delivery['order_bn'];
|
||
//商品重量
|
||
$data['net_weight'] = strval($delivery['net_weight']);
|
||
//预计物流费用
|
||
$data['delivery_cost_expect'] = strval(sprintf("%.2f", $delivery['delivery_cost_expect']));
|
||
//物流公司
|
||
$data['logi_name'] = $delivery['logi_name'];
|
||
//批次号
|
||
$batch_number = $delivery['batch_number'];
|
||
$data['batch_number'] = $batch_number ? $batch_number : '';
|
||
$delivery_items = $this->getDeliveryItems($delivery['delivery_items']);
|
||
|
||
|
||
$data['countDeliveryMsg'] = $this->formatCountDeliveryMsgField($delivery_items,$data['net_weight']);
|
||
$data['delivery_items'] = $delivery_items['delivery_items'];
|
||
|
||
// 获取订单总额
|
||
|
||
$data['total_amount'] = $this->getTotalAmount($delivery['orders']);
|
||
|
||
$consigneeCols = array ('consignee_name', 'consignee_addr', 'consignee_telephone', 'consignee_mobile','consignee_email','member_name','member_tel');
|
||
foreach ($consigneeCols as $col) {
|
||
$csIndex = strpos($data[$col], '>>');
|
||
if ($csIndex !== false){
|
||
$data[$col] = substr($data[$col], 0, $csIndex);
|
||
}
|
||
}
|
||
|
||
// 判断是否加密
|
||
// if (kernel::single('ome_security_router',$delivery['shop_type'])->is_encrypt($delivery,'delivery')) {
|
||
// $data['delivery_id'] = $delivery['delivery_id'];
|
||
// $data['is_encrypt'] = true;
|
||
// $data['app'] = 'wms';
|
||
// }
|
||
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 获取订单总额
|
||
* @param $orders
|
||
*/
|
||
function getTotalAmount($orders)
|
||
{
|
||
$total_amount = 0;
|
||
foreach($orders as $key => $val){
|
||
$total_amount += $val['total_amount'];
|
||
}
|
||
|
||
return $total_amount;
|
||
}
|
||
|
||
|
||
function _custom_mark($custom_mark)
|
||
{
|
||
$custom = '';
|
||
$custom_mark = unserialize($custom_mark);
|
||
foreach ($custom_mark as $cv) {
|
||
$custom .= $cv['op_content'] . $nbsp . $cv['op_time'] . $nbsp . $byText . $nbsp . $cv['op_name'] ."\r\n";
|
||
}
|
||
if ($custom) {
|
||
$custom = trim($custom, "\r\n");
|
||
}
|
||
|
||
return $custom;
|
||
}
|
||
|
||
|
||
|
||
function _mark_text($mark_text)
|
||
{
|
||
$mark = '';
|
||
$mark_text = unserialize($mark_text);
|
||
foreach ($mark_text as $mv) {
|
||
$mark .= $mv['op_content'] . $nbsp . $mv['op_time'] . $nbsp . $byText . $nbsp . $mv['op_name'] . "\r\n";
|
||
}
|
||
if ($mark) {
|
||
$mark = trim($mark, "\r\n");
|
||
}
|
||
return $mark;
|
||
}
|
||
/**
|
||
* 获取订单编号
|
||
* @param Int $delivery_id 发货单ID
|
||
*/
|
||
public function getOrderBnstr($delivery_id) {
|
||
$orders = $this->getOrderInfoByDeliverId($delivery_id);
|
||
$orderBnStr = '';
|
||
foreach ($orders as $v) {
|
||
$orderBnStr .= $v['order_bn'] . ',';
|
||
}
|
||
if ($orderBnStr) {
|
||
$orderBnStr = trim($orderBnStr, ',');
|
||
}
|
||
return $orderBnStr;
|
||
}
|
||
|
||
/**
|
||
* 获取订单相关信息
|
||
* @param Int $delivery_id 发货单ID
|
||
*/
|
||
public function getOrderWith($delivery_id) {
|
||
$orders = $this->getOrderInfoByDeliverId($delivery_id);
|
||
$orderBnStr = '';
|
||
$custom = '';
|
||
$mark = '';
|
||
$nbsp = " ";
|
||
$byText = 'by';
|
||
foreach ($orders as $v) {
|
||
#订单编号
|
||
if ($v['order_bn']) {
|
||
$orderBnStr .= $v['order_bn'] . ',';
|
||
}
|
||
#会员留言
|
||
if ($v['custom_mark']) {
|
||
$custom_mark = unserialize($v['custom_mark']);
|
||
foreach ($custom_mark as $cv) {
|
||
$custom .= $cv['op_content'] . $nbsp . $cv['op_time'] . $nbsp . $byText . $nbsp . $cv['op_name'] ."\r\n";
|
||
}
|
||
}
|
||
#订单备注
|
||
if ($v['mark_text']) {
|
||
$mark_text = unserialize($v['mark_text']);
|
||
foreach ($mark_text as $mv) {
|
||
$mark .= $mv['op_content'] . $nbsp . $mv['op_time'] . $nbsp . $byText . $nbsp . $mv['op_name'] . "\r\n";
|
||
}
|
||
}
|
||
}
|
||
if ($orderBnStr) {
|
||
$orderBnStr = trim($orderBnStr, ',');
|
||
}
|
||
if ($custom) {
|
||
$custom = trim($custom, "\r\n");
|
||
}
|
||
if ($mark) {
|
||
$mark = trim($mark, "\r\n");
|
||
}
|
||
$data = array(
|
||
'order_bn' => $orderBnStr,
|
||
'buyWord' => $custom,
|
||
'orderMark' => $mark
|
||
);
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 设置批次号
|
||
* @param Array $idents 批次号
|
||
*/
|
||
public function setBatchNumbers($items) {
|
||
foreach ($items as $k => $v) {
|
||
if (!$this->identsItems[$k]) {
|
||
$this->identsItems[$k] = $v;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取批次号
|
||
* @param Int $delivery_id 发货单ID
|
||
*/
|
||
public function getsBatchNumber($delivery_id) {
|
||
return $this->identsItems[$delivery_id];
|
||
}
|
||
|
||
/**
|
||
* 获取发货单项
|
||
* @param Int $delivery_id 发货单ID
|
||
*/
|
||
public function getDeliveryItems($items) {
|
||
|
||
$deliveryItems = array();
|
||
foreach ($items as $ik=>$item ) {
|
||
$No = 0;
|
||
if ($ik == 'pkg' || $ik == 'lkb') {
|
||
foreach ($item as $pkg_item ) {
|
||
$pkg_items = array();
|
||
$order_items =$pkg_item['order_items'];
|
||
foreach ($order_items as $orditem ) {
|
||
$pkg_items[] = array(
|
||
'bn'=>$orditem['bn'],
|
||
'name'=>$orditem['name'],
|
||
'expire_bn'=>$orditem['expire_bn'],
|
||
'store_position'=>$orditem['store_position'],
|
||
'sale_price'=>$orditem['sale_price'],
|
||
'price'=>$orditem['price'],
|
||
'number'=>$orditem['number'],
|
||
'goods_bn'=>$orditem['goods_bn'],
|
||
'product_weight'=>$orditem['product_weight'],
|
||
'unit'=>$orditem['unit'],
|
||
'brand_name'=>$orditem['brand_name'],
|
||
'type_name'=>$orditem['type_name'],
|
||
'spec_info'=>$orditem['spec_info'],
|
||
'barcode' =>$orditem['barcode'],
|
||
'picurl' =>$orditem['picurl'],
|
||
);
|
||
}
|
||
$object_item = array(
|
||
'bn'=>$pkg_item['bn'],
|
||
'name'=>$pkg_item['name'],
|
||
'sale_price'=>$pkg_item['sale_price'],
|
||
'price'=>$pkg_item['price'],
|
||
'number'=>$pkg_item['quantity'],
|
||
'pmt_price'=>$pkg_item['pmt_price'],
|
||
'spec_info'=>'-',
|
||
'items'=>$pkg_items,
|
||
'goods_bn' =>$pkg_item['bn'],
|
||
'No' =>++$No,
|
||
|
||
);
|
||
$deliveryItems[] =$object_item;
|
||
}
|
||
}else{
|
||
foreach ($item as $product_item ) {
|
||
foreach ($product_item['order_items'] as $order_items ) {
|
||
$product_item =array(
|
||
'bn'=>$order_items['bn'],
|
||
'name'=>$order_items['name'],
|
||
'expire_bn'=>$order_items['expire_bn'],
|
||
'store_position'=>$order_items['store_position'],
|
||
'sale_price'=>$order_items['sale_price'],
|
||
'price'=>$order_items['price'],
|
||
'number'=>$order_items['number'],
|
||
'goods_bn'=>$order_items['goods_bn'],
|
||
'product_weight'=>$order_items['product_weight'],
|
||
'unit'=>$order_items['unit'],
|
||
'brand_name'=>$order_items['brand_name'],
|
||
'type_name'=>$order_items['type_name'],
|
||
'spec_info'=>$order_items['spec_info'],
|
||
'barcode' =>$order_items['barcode'],
|
||
'No' =>++$No,
|
||
);
|
||
$deliveryItems[] =$product_item;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$deliveryItemsStruct = array();
|
||
if ($deliveryItems) {
|
||
$deliveryItemsStruct = $this->deliveryItemsStructA($deliveryItems);
|
||
}
|
||
|
||
//格式化明细
|
||
|
||
return $deliveryItemsStruct;
|
||
}
|
||
|
||
/**
|
||
* 发货单数据格式A
|
||
* @param Arr $data 发货单数据
|
||
*/
|
||
public function deliveryItemsStructA($data) {
|
||
|
||
if (empty($data)) {
|
||
return array();
|
||
}
|
||
#商品数量
|
||
$goodsNum = 0;
|
||
#货品数量
|
||
$saleGoodsNum = 0;
|
||
#实收金额总数
|
||
$sumSalePrice = 0.00;
|
||
#没有捆绑商品总数
|
||
$nobindGoodsNum = 0;
|
||
#商品种类
|
||
$class = 0;
|
||
$item = array();
|
||
$print_number = 1;
|
||
foreach ($data as &$vd) {
|
||
$sumSalePrice += $vd['sale_price'];
|
||
$goodsNum += $vd['number'];
|
||
$vd['print_number'] = $print_number;
|
||
$print_number++;
|
||
if (isset($vd['items'])) {
|
||
|
||
foreach ($vd['items'] as &$vdv) {
|
||
$vdv['sale_price'] = '-';
|
||
$vdv['price'] = '-';
|
||
$saleGoodsNum += $vdv['number'];
|
||
|
||
$class++;
|
||
}
|
||
}
|
||
else {
|
||
$class++;
|
||
$nobindGoodsNum += $vd['number'];
|
||
}
|
||
}
|
||
//usort($data, array('ome_print_data_delivery', 'cmpItem'));
|
||
$item = array(
|
||
'nobindGoodsNum' => $nobindGoodsNum,
|
||
'goodsNum' => $goodsNum,
|
||
'posNum' => ($nobindGoodsNum + $saleGoodsNum),
|
||
'sumSalePrice' => $sumSalePrice,
|
||
'class' => $class,
|
||
'delivery_items' => $data,
|
||
);
|
||
|
||
return $item;
|
||
}
|
||
|
||
/**
|
||
* 获得捆绑商品信息
|
||
* @param Int $obj_id 订单对象ID
|
||
*/
|
||
public function getPkgItems($obj_id) {
|
||
$data = $this->getOrderItems($obj_id);
|
||
$items = array();
|
||
$ii = 0;
|
||
//
|
||
|
||
foreach ($data as $v) {
|
||
|
||
$items[$ii]['price'] = $v['price'] ? $v['price'] : '';
|
||
$items[$ii]['goods_bn'] = $v['bn'];
|
||
$items[$ii]['name'] = $v['name'];
|
||
$items[$ii]['sale_price'] = $v['amount'];
|
||
$items[$ii]['number'] = $v['nums'];
|
||
$items[$ii]['spec_info'] = '';
|
||
|
||
$ii++;
|
||
}
|
||
usort($items, array('ome_print_data_delivery', 'cmp'));
|
||
return $items;
|
||
}
|
||
|
||
/**
|
||
* 格式化CountDeliveryMsg字段
|
||
* @param Array $delivery_items 发货单报表数据
|
||
*/
|
||
public function formatCountDeliveryMsgField($delivery_items,$total_weight) {
|
||
$nbsp = " ";
|
||
$data['total'] = '商品数量:' . $delivery_items['goodsNum'] . $nbsp . $nbsp .
|
||
'累计品种:' . $delivery_items['class'] . $nbsp . $nbsp .
|
||
'货品数量:' . $delivery_items['posNum'] . $nbsp . $nbsp .
|
||
'总重量:' . sprintf("%d", $total_weight);
|
||
$data['empty'] = '';
|
||
return $data;
|
||
}
|
||
|
||
/**
|
||
* 排序
|
||
* @param Array $goods1 商品1
|
||
* @param Array $goods2 商品2
|
||
*/
|
||
public function cmp($goods1, $goods2) {
|
||
return strcmp($goods1['goods_bn'], $goods2['goods_bn']) > 0 ? 1 : -1;
|
||
}
|
||
|
||
/**
|
||
* 排序发货单项目
|
||
* @param Array $goods1 商品1
|
||
* @param Array $goods2 商品2
|
||
*/
|
||
public function cmpItem($goods1, $goods2) {
|
||
$gc1 = isset($goods1['items']) ? count($goods1['items']) : 0;
|
||
$gc2 = isset($goods2['items']) ? count($goods2['items']) : 0;
|
||
return $gc1 == $gc2 ? ($this->cmp($goods1, $goods2)) : ($gc1 > $gc2 ? 1 : -1);
|
||
}
|
||
|
||
|
||
/**
|
||
* 产品信息.
|
||
* @param
|
||
* @return type description
|
||
* @access public
|
||
* @author sunjing@shopex.cn
|
||
*/
|
||
function _getProductinfo($bn)
|
||
{
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
$bMaterialRow = $basicMaterialObj->dump(array('material_bn'=>$bn), '*');
|
||
|
||
$product = array('product_id'=>$bMaterialRow['bm_id'], 'bn'=>$bMaterialRow['material_bn'], 'name'=>$bMaterialRow['material_name']);
|
||
|
||
return $product;
|
||
}
|
||
} |