Files
OMS/app/ome/lib/reshipping.php
chenping 61783b7d01 1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数

3. 【优化】盘点申请单确认

4. 【修复】采购退货单模拟出库失败问题

5. 【新增】订单金额客户实付与结算金额

6. 【优化】仓库发货统计报表物料名称显示

7. 【优化】自有仓储虚拟发货逻辑

8. 【修复】基础物料分类管理问题
2026-04-01 11:59:17 +08:00

759 lines
30 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
/**
* 补寄申请业务逻辑处理
*/
class ome_reshipping extends ome_abstract
{
/**
* 同意补寄申请
*
* @param int $reshipping_id 补寄申请单ID
* @param array $items_detail 商品明细信息actual_product_id, actual_product_bn, actual_nums
* @return array
*/
public function agree($reshipping_id, $items_detail = array())
{
$reshippingModel = app::get('ome')->model('return_reshipping');
$operationLogModel = app::get('ome')->model('operation_log');
// 获取补寄申请单信息
$reshipping = $reshippingModel->db_dump($reshipping_id);
if (empty($reshipping)) {
return array('rsp' => 'fail', 'msg' => '补寄申请单不存在');
}
// 检查状态
if ($reshipping['status'] != '0') {
return array('rsp' => 'fail', 'msg' => '补寄申请单状态不正确,无法同意');
}
// 先做校验并保存商品明细
$validateResult = $this->_validateAndSaveItemsDetail($reshipping_id, $reshipping, $items_detail);
if ($validateResult['rsp'] == 'fail') {
return $validateResult;
}
// 校验通过后,调用矩阵同意接口
$apiResult = kernel::single('erpapi_router_request')->set('shop', $reshipping['shop_id'])->reshipping_agree(array(
'dispute_id' => $reshipping['reshipping_bn'],
));
if ($apiResult['rsp'] == 'fail') {
// 清除写入的明细
$itemsDetailModel = app::get('ome')->model('return_reshipping_items_detail');
$itemsDetailModel->delete(array('reshipping_id' => $reshipping_id));
return array('rsp' => 'fail', 'msg' => '调用同意接口失败:' . (isset($apiResult['msg']) ? $apiResult['msg'] : '未知错误'));
}
// 更新补寄申请单状态
$updateData = array(
'status' => '1', // 等待卖家发货
'is_confirm_goods' => '1', // 商品已确认
'up_time' => date('Y-m-d H:i:s'),
);
$rs = $reshippingModel->update($updateData, array('reshipping_id' => $reshipping_id, 'status' => '0'));
if(is_bool($rs)) {
return array('rsp' => 'fail', 'msg' => '更新补寄申请单状态失败');
}
// 记录操作日志
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, '同意补寄申请');
// 生成补发订单
$orderResult = $this->createReissueOrder($reshipping_id);
if ($orderResult['rsp'] == 'fail') {
// 生成补发订单失败时,记录日志但不报错,继续执行
$errorMsg = '生成补发订单失败:' . (isset($orderResult['msg']) ? $orderResult['msg'] : '未知错误');
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, $errorMsg);
}
return array('rsp' => 'succ', 'msg' => '同意补寄申请成功');
}
/**
* 拒绝补寄申请
*
* @param int $reshipping_id 补寄申请单ID
* @param array $refuseData 拒绝数据refuse_reason_id, refuse_reason, leave_message_pics, leave_message
* @return array
*/
public function refuse($reshipping_id, $refuseData)
{
$reshippingModel = app::get('ome')->model('return_reshipping');
$operationLogModel = app::get('ome')->model('operation_log');
// 获取补寄申请单信息
$reshipping = $reshippingModel->db_dump($reshipping_id);
if (empty($reshipping)) {
return array('rsp' => 'fail', 'msg' => '补寄申请单不存在');
}
// 检查状态
if ($reshipping['status'] != '0') {
return array('rsp' => 'fail', 'msg' => '补寄申请单状态不正确,无法拒绝');
}
// 验证必填字段
if (empty($refuseData['refuse_reason_id'])) {
return array('rsp' => 'fail', 'msg' => '拒绝原因不能为空');
}
if (empty($refuseData['leave_message'])) {
return array('rsp' => 'fail', 'msg' => '拒绝留言不能为空');
}
if (empty($refuseData['leave_message_pics'])) {
return array('rsp' => 'fail', 'msg' => '凭证图片不能为空');
}
// 调用矩阵拒绝接口
$apiResult = kernel::single('erpapi_router_request')->set('shop', $reshipping['shop_id'])->reshipping_refuse(array(
'dispute_id' => $reshipping['reshipping_bn'],
'seller_refuse_reason_id' => $refuseData['refuse_reason_id'],
'leave_message_pics' => $refuseData['leave_message_pics'], // 单个 base64 字符串
'leave_message' => $refuseData['leave_message'],
));
if ($apiResult['rsp'] == 'fail') {
return array('rsp' => 'fail', 'msg' => '调用拒绝接口失败:' . (isset($apiResult['msg']) ? $apiResult['msg'] : '未知错误'));
}
// 更新补寄申请单
$updateData = array(
'status' => '4', // 卖家拒绝补寄
'refuse_reason_id' => $refuseData['refuse_reason_id'],
'refuse_reason' => $refuseData['refuse_reason'],
'up_time' => date('Y-m-d H:i:s'),
);
$rs = $reshippingModel->update($updateData, array('reshipping_id' => $reshipping_id, 'status' => '0'));
if(is_bool($rs)) {
return array('rsp' => 'fail', 'msg' => '更新补寄申请单状态失败');
}
// 记录操作日志
$memo = '拒绝补寄申请,原因:' . $refuseData['refuse_reason'];
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, $memo);
return array('rsp' => 'succ', 'msg' => '拒绝补寄申请成功');
}
/**
* 商品信息确认(淘宝平台同意场景)
*
* @param int $reshipping_id 补寄申请单ID
* @param array $items_detail 商品明细信息
* @return array
*/
public function confirmGoods($reshipping_id, $items_detail = array())
{
$reshippingModel = app::get('ome')->model('return_reshipping');
$operationLogModel = app::get('ome')->model('operation_log');
// 获取补寄申请单信息
$reshipping = $reshippingModel->db_dump($reshipping_id);
if (empty($reshipping)) {
return array('rsp' => 'fail', 'msg' => '补寄申请单不存在');
}
// 检查is_confirm_goods状态
if ($reshipping['is_confirm_goods'] == '1') {
return array('rsp' => 'fail', 'msg' => '商品信息已确认');
}
// 验证并保存商品明细
$validateResult = $this->_validateAndSaveItemsDetail($reshipping_id, $reshipping, $items_detail);
if ($validateResult['rsp'] == 'fail') {
return $validateResult;
}
// 更新补寄申请单
$updateData = array(
'is_confirm_goods' => '1', // 商品已确认
'up_time' => date('Y-m-d H:i:s'),
);
$rs = $reshippingModel->update($updateData, array('reshipping_id' => $reshipping_id, 'status' => '1', 'is_confirm_goods' => '0'));
if(is_bool($rs)) {
app::get('ome')->model('return_reshipping_items_detail')->delete(array('reshipping_id' => $reshipping_id));
return array('rsp' => 'fail', 'msg' => '更新补寄申请单状态失败');
}
// 记录操作日志
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, '商品信息确认成功');
// 生成补发订单(失败时只记录日志,不报错)
$orderResult = $this->createReissueOrder($reshipping_id);
if ($orderResult['rsp'] == 'fail') {
$errorMsg = '生成补发订单失败:' . (isset($orderResult['msg']) ? $orderResult['msg'] : '未知错误');
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, $errorMsg);
}
return array('rsp' => 'succ', 'msg' => '商品信息确认成功');
}
/**
* 验证并保存商品明细(共同逻辑)
*
* @param int $reshipping_id 补寄申请单ID
* @param array $reshipping 补寄申请单信息
* @param array $items_detail 商品明细信息
* @return array
*/
private function _validateAndSaveItemsDetail($reshipping_id, $reshipping, $items_detail)
{
$reshippingItemsModel = app::get('ome')->model('return_reshipping_items');
$reshippingItemsDetailModel = app::get('ome')->model('return_reshipping_items_detail');
$salesMaterialModel = app::get('material')->model('sales_material');
// 获取商品明细
$items = $reshippingItemsModel->getList('*', array('reshipping_id' => $reshipping_id));
// 用于保存校验阶段查询到的sm_id避免重复查询
$itemSmIdMap = array();
// 校验所有商品项的销售物料编码
foreach ($items as $item) {
// 只从sales_material_bn获取销售物料编码如果不存在则报错
if (!isset($items_detail[$item['item_id']]['sales_material_bn']) ||
empty(trim($items_detail[$item['item_id']]['sales_material_bn']))) {
return array('rsp' => 'fail', 'msg' => '商品项ID ' . $item['item_id'] . ' 的销售物料编码不能为空');
}
$sales_material_bn = trim($items_detail[$item['item_id']]['sales_material_bn']);
// 根据sales_material_bn查询销售物料表获取sm_id
$salesMaterialList = $salesMaterialModel->getList(
'sm_id',
array('sales_material_bn' => $sales_material_bn, 'shop_id' => array($reshipping['shop_id'], '_ALL_'), 'sales_material_type' => ['1', '2', '3']),
0,
1
);
// 如果查询不到sm_id报错
if (!$salesMaterialList || !isset($salesMaterialList[0]['sm_id'])) {
return array('rsp' => 'fail', 'msg' => '销售物料编码 ' . $sales_material_bn . ' 不存在或不属于该店铺');
}
// 保存查询到的sm_id供后续使用
$itemSmIdMap[$item['item_id']] = $salesMaterialList[0]['sm_id'];
}
// 校验通过后保存商品明细到items_detail表
foreach ($items as $item) {
$sales_material_bn = trim($items_detail[$item['item_id']]['sales_material_bn']);
// 直接使用校验阶段保存的sm_id不再查询
$sm_id = $itemSmIdMap[$item['item_id']];
$detailData = array(
'reshipping_id' => $reshipping_id,
'item_id' => $item['item_id'],
'sm_id' => $sm_id,
'sales_material_bn' => $sales_material_bn,
'nums' => isset($items_detail[$item['item_id']]['nums']) ? $items_detail[$item['item_id']]['nums'] : $item['nums'],
'price' => $item['price'],
);
$reshippingItemsDetailModel->insert($detailData);
}
return array('rsp' => 'succ', 'msg' => '');
}
/**
* 创建补发订单
*
* @param int $reshipping_id 补寄申请单ID
* @return array
*/
public function createReissueOrder($reshipping_id)
{
$reshippingModel = app::get('ome')->model('return_reshipping');
$reshippingItemsDetailModel = app::get('ome')->model('return_reshipping_items_detail');
$orderModel = app::get('ome')->model('orders');
$salesMaterialModel = app::get('material')->model('sales_material');
$result = array('rsp' => 'fail', 'msg' => '');
// 获取补寄申请单信息
$reshipping = $reshippingModel->db_dump($reshipping_id);
if (empty($reshipping)) {
$result['msg'] = '补寄申请单不存在';
return $result;
}
// 检查是否已经创建过补发订单
if ($reshipping['reissue_order_id']) {
$result['msg'] = '补发订单已存在';
return $result;
}
// 获取原订单信息
$originalOrder = $orderModel->dump($reshipping['order_id']);
if (empty($originalOrder)) {
$result['msg'] = '原订单不存在';
return $result;
}
// 获取商品明细(已确认的商品)
$itemsDetail = $reshippingItemsDetailModel->getList('*', array('reshipping_id' => $reshipping_id));
if (empty($itemsDetail)) {
$result['msg'] = '补寄商品明细不存在';
return $result;
}
// 构建补发订单数据(复制原订单信息)
$bufaOrderSdf = array(
'order_bn'=>$reshipping['reshipping_bn'],
'member_id'=>$originalOrder['member_id'],
'currency'=>'CNY',
'title'=>'',
'createtime'=>time(),
'last_modified'=>time(),
'confirm'=>'N',
'status'=>'active',
'pay_status'=>'1',
'ship_status'=>'0',
'is_delivery'=>'Y',
'shop_id'=>$originalOrder['shop_id'],
'itemnum'=>0,
'relate_order_bn'=>$originalOrder['order_bn'],
'shipping'=>array(
'shipping_id'=>$originalOrder['shipping']['shipping_id'],
'is_cod'=>'false',
'shipping_name'=>$originalOrder['shipping']['shipping_name'],
'cost_shipping'=>0,
'is_protect'=>$originalOrder['shipping']['is_protect'],
'cost_protect'=>0,
),
'mark_type' => 'b1',
'source' => 'local',
'order_type' => 'bufa',
'createway' => 'after',
'is_tax' => $originalOrder["is_tax"],
'tax_title' => $originalOrder["tax_title"],
'shop_type' => $originalOrder["shop_type"],
);
//平台订单号
if($originalOrder['platform_order_bn']){
$bufaOrderSdf['platform_order_bn'] = $originalOrder['platform_order_bn'];
}
// 重置订单信息
$bufaOrderSdf['pay_bn'] = $reshipping['reshipping_bn']; // 支付单号,使用补寄申请单号
$bufaOrderSdf['createtime'] = time();
$bufaOrderSdf['paytime'] = time();
$bufaOrderSdf['modifytime'] = time();
$bufaOrderSdf['is_modify'] = 'false';
$bufaOrderSdf['logi_no'] = '';
$bufaOrderSdf['source_status'] = '';
$bufaOrderSdf['payed'] = 0.00;
$bufaOrderSdf['total_amount'] = 0.00;
$bufaOrderSdf['final_amount'] = 0.00;
$bufaOrderSdf['cost_item'] = 0.00;
$bufaOrderSdf['custom_mark'] = '';
$bufaOrderSdf['mark_text'] = '';
// 收货人信息(使用补寄申请单的购买人信息)
$consignee = $this->_formatReshippingConsignee($reshipping);
$bufaOrderSdf['consignee'] = $consignee;
// 构建订单明细
// $orderObjs 对应销售物料,$order_items 对应销售物料下的基础物料
$order_objects = array();
$salesBasicMaterialModel = app::get('material')->model('sales_basic_material');
$basicMaterialModel = app::get('material')->model('basic_material');
foreach ($itemsDetail as $itemDetail) {
// 获取销售物料信息
$salesMaterial = $salesMaterialModel->db_dump($itemDetail['sm_id'], 'sm_id,sales_material_name,sales_material_bn,sales_material_type');
if (empty($salesMaterial)) {
continue;
}
// 创建销售物料对应的 order_objects
$orderObjs = array(
'obj_type' => $salesMaterial['sales_material_type'] == '2' ? 'pkg' : ($salesMaterial['sales_material_type'] == '3' ? 'gift' : 'goods'),
'obj_alias' => $salesMaterial['sales_material_name'],
'goods_id' => $salesMaterial['sm_id'],
'name' => $salesMaterial['sales_material_name'],
'bn' => $itemDetail['sales_material_bn'],
'quantity' => $itemDetail['nums'],
'price' => 0.00,
'pmt_price' => 0.00,
'sale_price' => 0.00,
'order_items' => array(),
);
// 获取销售物料关联的基础物料
$salesBasicMaterials = $salesBasicMaterialModel->getList('*', array('sm_id' => $salesMaterial['sm_id']), 0, -1);
// 如果没有关联基础物料,跳过该销售物料
if (empty($salesBasicMaterials)) {
continue;
}
// 为每个基础物料创建 order_items
foreach ($salesBasicMaterials as $salesBasicMaterial) {
// 获取基础物料信息
$basicMaterial = $basicMaterialModel->db_dump($salesBasicMaterial['bm_id'], 'bm_id,material_name,material_bn,type');
if (empty($basicMaterial)) {
continue;
}
$order_item = array(
'product_id' => $basicMaterial['bm_id'] ? $basicMaterial['bm_id'] : 0,
'bn' => $basicMaterial['material_bn'],
'name' => $basicMaterial['material_name'],
'quantity' => $salesBasicMaterial['number'] * $itemDetail['nums'],
'addon' => '',
'item_type' => $salesMaterial['sales_material_type'] == '2' ? 'pkg' : 'product',
'price' => 0.00,
'pmt_price' => 0.00,
'sale_price' => 0.00,
'delete' => 'false',
);
$orderObjs['order_items'][] = $order_item;
}
if (empty($orderObjs['order_items'])) {
continue;
}
$order_objects[] = $orderObjs;
}
if (empty($order_objects)) {
$result['msg'] = '没有有效的补寄商品';
return $result;
}
$bufaOrderSdf['order_objects'] = $order_objects;
// 创建补发订单
$error_msg = '';
$orderResult = $orderModel->create_order($bufaOrderSdf, $error_msg);
if (!$orderResult) {
$result['msg'] = '创建补发订单失败:' . $error_msg;
return $result;
}
// 更新为已支付0元订单创建时是未支付
$orderModel->update(array('pay_status' => '1'), array('order_id' => $bufaOrderSdf['order_id']));
// 保存收件人敏感数据
$this->_saveReshippingReceiverEncrypt($bufaOrderSdf['order_id'], $reshipping);
// 计算最晚发货时间(同意时间+24小时
$agreeTime = strtotime($reshipping['up_time'] ? $reshipping['up_time'] : date('Y-m-d H:i:s'));
$latestDeliveryTime = $agreeTime + 24 * 3600; // 24小时后
// 更新ome_order_extend表的最晚发货时间
$orderExtendModel = app::get('ome')->model('order_extend');
$extendData = array(
'order_id' => $bufaOrderSdf['order_id'],
'latest_delivery_time' => $latestDeliveryTime,
);
$orderExtendModel->save($extendData);
// 更新补寄申请单,关联补发订单
$reshippingModel->update(array(
'reissue_order_id' => $bufaOrderSdf['order_id'],
'reissue_order_bn' => $bufaOrderSdf['order_bn'],
), array('reshipping_id' => $reshipping_id));
$result['rsp'] = 'succ';
$result['order_id'] = $bufaOrderSdf['order_id'];
$result['order_bn'] = $bufaOrderSdf['order_bn'];
$result['msg'] = '补发订单创建成功';
return $result;
}
/**
* 处理转退款
* 当补寄申请单状态更新为6转退款时调用
*
* @param int $reshipping_id 补寄申请单ID
* @return array
*/
public function handleTransformToRefund($reshipping_id)
{
$reshippingModel = app::get('ome')->model('return_reshipping');
$orderModel = app::get('ome')->model('orders');
$deliveryModel = app::get('ome')->model('delivery');
$operationLogModel = app::get('ome')->model('operation_log');
$result = array('rsp' => 'fail', 'msg' => '');
// 获取补寄申请单信息
$reshipping = $reshippingModel->db_dump($reshipping_id);
if (empty($reshipping)) {
$result['msg'] = '补寄申请单不存在';
return $result;
}
// 检查状态
if ($reshipping['status'] != '6') {
$result['msg'] = '补寄申请单状态不是转退款';
return $result;
}
// 查询补寄申请单关联的补发订单
if (empty($reshipping['reissue_order_id'])) {
// 没有补发订单,直接返回成功
$result['rsp'] = 'succ';
$result['msg'] = '没有补发订单,无需处理';
return $result;
}
$reissue_order_id = $reshipping['reissue_order_id'];
// 获取补发订单信息
$reissueOrder = $orderModel->db_dump($reissue_order_id, 'order_id,ship_status,order_bn');
if (empty($reissueOrder)) {
$result['msg'] = '补发订单不存在';
return $result;
}
// 打标签:补发转退款
$error_msg = '';
$labelResult = kernel::single('ome_bill_label')->markBillLabel(
$reissue_order_id,
'',
'SOMS_BUFA_REFUND',
'order',
$error_msg
);
if (!$labelResult) {
// 打标签失败,记录日志但不中断流程
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, '打标签失败:' . ($error_msg ? $error_msg : '未知错误'));
}
// 判断是否已发货
$isShipped = in_array($reissueOrder['ship_status'], array('1', '2')); // 1=已发货2=部分发货
if ($isShipped) {
// 已发货,不取消订单
$memo = '转退款处理完成,补发订单已发货,不取消订单';
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, $memo);
$result['rsp'] = 'succ';
$result['msg'] = '转退款处理成功,补发订单已发货,未取消';
return $result;
}
// 未发货,取消订单
$cancelMemo = '补寄转退款,取消补发订单';
$cancelResult = $orderModel->cancel($reissue_order_id, $cancelMemo, false, 'async', false);
if ($cancelResult['rsp'] == 'success') {
$memo = '转退款处理完成,补发订单已取消';
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, $memo);
$result['rsp'] = 'succ';
$result['msg'] = '转退款处理成功,补发订单已取消';
} else {
// 取消失败,记录错误日志但不中断流程
$errorMsg = '取消补发订单失败:' . (isset($cancelResult['msg']) ? $cancelResult['msg'] : '未知错误');
$operationLogModel->write_log('return_reshipping@ome', $reshipping_id, $errorMsg);
$result['rsp'] = 'succ';
$result['msg'] = '转退款处理完成,但取消补发订单失败';
}
return $result;
}
/**
* 撤销发货单
*
* @param int $delivery_id 发货单ID
* @return array
*/
private function _cancelDelivery($delivery_id)
{
$deliveryModel = app::get('ome')->model('delivery');
$delivery = $deliveryModel->db_dump($delivery_id, 'delivery_id,delivery_bn,status,branch_id');
if (empty($delivery)) {
return array('rsp' => 'fail', 'msg' => '发货单不存在');
}
// 调用发货单撤销接口
$branchModel = app::get('ome')->model('branch');
$branch = $branchModel->db_dump($delivery['branch_id'], 'wms_id');
$wms_id = $branch ? $branch['wms_id'] : 0;
if ($wms_id) {
$data = array(
'delivery_bn' => $delivery['delivery_bn'],
'memo' => '补寄转退款,撤销发货单',
);
$cancelResult = kernel::single('ome_event_trigger_delivery')->cancel('wms', $wms_id, $data, true);
if ($cancelResult['rsp'] != 'succ') {
return array('rsp' => 'fail', 'msg' => isset($cancelResult['msg']) ? $cancelResult['msg'] : '撤销发货单失败');
}
}
return array('rsp' => 'succ', 'msg' => '撤销发货单成功');
}
/**
* 拦截发货单
*
* @param int $delivery_id 发货单ID
* @return array
*/
private function _interceptDelivery($delivery_id)
{
$deliveryModel = app::get('ome')->model('delivery');
$delivery = $deliveryModel->db_dump($delivery_id, 'delivery_id,delivery_bn,status,branch_id');
if (empty($delivery)) {
return array('rsp' => 'fail', 'msg' => '发货单不存在');
}
// 调用发货单拦截接口
$branchModel = app::get('ome')->model('branch');
$branch = $branchModel->db_dump($delivery['branch_id'], 'wms_id');
$wms_id = $branch ? $branch['wms_id'] : 0;
if ($wms_id) {
$data = array(
'delivery_bn' => $delivery['delivery_bn'],
);
$interceptResult = kernel::single('ome_event_trigger_delivery')->cut('wms', $wms_id, $data);
if ($interceptResult['rsp'] != 'succ') {
return array('rsp' => 'fail', 'msg' => isset($interceptResult['msg']) ? $interceptResult['msg'] : '拦截发货单失败');
}
}
return array('rsp' => 'succ', 'msg' => '拦截发货单成功');
}
/**
* 处理上传的文件
*
* @param array $file 文件信息
* @param array $allowedTypes 允许的文件类型
* @param object $storager 存储对象
* @return string|false 文件URL或false失败时返回false错误信息通过异常抛出
* @throws Exception 文件验证失败时抛出异常
*/
public function processUploadedFile($file, $allowedTypes, $storager)
{
// 检查文件是否上传
if ($file['error'] != UPLOAD_ERR_OK || empty($file['name'])) {
return false;
}
// 检查文件大小500K限制
if ($file['size'] > 512000) {
throw new Exception('上传文件不能超过500K');
}
// 检查文件类型
$imgext = strtolower($this->fileext($file['name']));
if (!in_array($imgext, $allowedTypes)) {
$text = implode(",", $allowedTypes);
throw new Exception("您只能上传以下类型文件{$text}");
}
// 上传文件
$msg = '';
$id = $storager->save_upload($file, "file", "", $msg);
if (!$id) {
throw new Exception('图片上传失败:' . ($msg ? $msg : '未知错误'));
}
// 获取文件URL
$picUrl = $storager->getUrl($id, "file");
return $picUrl ? $picUrl : false;
}
/**
* 获取文件扩展名
*
* @param string $filename 文件名
* @return string 扩展名
*/
private function fileext($filename)
{
return substr(strrchr($filename, '.'), 1);
}
/**
* 格式化补寄申请单的收货人信息
* 参考 dealExchangeEncrypt 方法处理密文 oaid
*
* @param array $reshipping 补寄申请单信息
* @return array 收货人信息
*/
private function _formatReshippingConsignee($reshipping)
{
$subfix = '';
// 处理 oaid 密文
if ($reshipping['oaid']) {
$subfix = '>>' . $reshipping['oaid'] . kernel::single('ome_security_hash')->get_code();
}
// 构建地址区域
$ship_area = '';
if ($reshipping['buyer_province']) {
$ship_area = $reshipping['buyer_province'];
if ($reshipping['buyer_city']) {
$ship_area .= '/' . $reshipping['buyer_city'];
}
if ($reshipping['buyer_district']) {
$ship_area .= '/' . $reshipping['buyer_district'];
}
if ($reshipping['buyer_town']) {
$ship_area .= '/' . $reshipping['buyer_town'];
}
}
// 验证地址区域
if ($ship_area) {
kernel::single('ome_func')->region_validate($ship_area);
}
// 构建收货人信息
$consignee = array(
'name' => strpos($reshipping['buyer_name'], '*') !== false ? $reshipping['buyer_name'] . $subfix : $reshipping['buyer_name'],
'addr' => strpos($reshipping['buyer_address'], '*') !== false ? $reshipping['buyer_address'] . $subfix : $reshipping['buyer_address'],
'zip' => '',
'telephone' => '',
'mobile' => strpos($reshipping['buyer_phone'], '*') !== false ? $reshipping['buyer_phone'] . $subfix : $reshipping['buyer_phone'],
'email' => '',
'area' => $ship_area,
);
return $consignee;
}
/**
* 保存补寄申请单的收件人敏感数据
* 参考 dealExchangeEncrypt 方法处理密文 oaid
*
* @param int $order_id 补发订单ID
* @param array $reshipping 补寄申请单信息
* @return bool
*/
private function _saveReshippingReceiverEncrypt($order_id, $reshipping)
{
$receiverObj = app::get('ome')->model('order_receiver');
// 构建收件人敏感数据
$receiverData = array(
'order_id' => $order_id,
);
// 如果有 oaid保存到 receiver 表
if ($reshipping['oaid']) {
$receiverData['encrypt_source_data'] = json_encode(array('oaid' => $reshipping['oaid']));
}
// 保存收件人敏感数据
$receiverObj->save($receiverData);
return true;
}
}