1. 【新增】售后单售后原因类型支持搜索

2. 【新增】手工创建订单折扣可输入正数

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

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

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

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

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

8. 【修复】基础物料分类管理问题
This commit is contained in:
chenping
2026-04-01 11:59:17 +08:00
parent 9341122827
commit 61783b7d01
754 changed files with 46179 additions and 5700 deletions

View File

@@ -51,11 +51,10 @@ class erpapi_shop_matrix_360buy_response_aftersalev2 extends erpapi_shop_respons
}else if( in_array($status,array('3','9')) ){ //成功
$sdf['status'] = 'SUCCESS';
}
if ($sdf['order']['pay_bn'] == 'deposit' && $sdf['refund_fee']<=0){
$sdf['refund_fee'] = $sdf['order']['payed'];
}
if ($sdf['bool_type'] != ome_refund_bool_type::__PROTECTED_CODE && $params['partRefundType']!=1){
$sdf['refund_all_money'] = true;
$order = $this->getOrder('order_id,payed', $this->__channelObj->channel['shop_id'], $sdf['order_bn'],'aftersale');
$sdf['real_refund_amount'] = $params['refund_fee'];
$sdf['refund_fee'] = $order['payed'] ? : $params['refund_fee'];
}
if ($sdf['logistics_company'] == '自动审核' && in_array($status,array('1'))){
@@ -64,13 +63,14 @@ class erpapi_shop_matrix_360buy_response_aftersalev2 extends erpapi_shop_respons
}
if ($sdf['extend_field']){
if($sdf['extend_field'] && $sdf['extend_field']['refundAmt']>0){
$sdf['jsrefund_flag']=1;
}
}
if($sdf['status'] == 'confirm_success') {
$sdf['jsrefund_flag'] = 1;
}
$sdf['pickware_type'] = $params['pickware_type'];
$sdf['refund_version'] = $params['refund_version'];
@@ -102,6 +102,37 @@ class erpapi_shop_matrix_360buy_response_aftersalev2 extends erpapi_shop_respons
&& count($params['apply_detail_list'])== 1) {
$sdf['refund_item_list']['return_item'][0]['sku_uuid'] = $params['apply_detail_list'][0]['skuUuid'];
}
// 价保退款没有 sku_uuid通过 item_id 与订单上的平台 skuid(shop_product_id) 匹配找出 oid多条时用 PHP 取金额最大的子单,并回填 sku_uuid
if ($sdf['bool_type'] & ome_refund_bool_type::__PROTECTED_CODE) {
$order = $this->getOrder('order_id', $this->__channelObj->channel['shop_id'], $sdf['order_bn'], 'aftersale');
if ($order && $order['order_id']) {
$db = kernel::database();
foreach ($sdf['refund_item_list']['return_item'] as $k => $item) {
if (!empty($item['item_id'])) {
$item_id = $db->quote($item['item_id']);
$order_id = intval($order['order_id']);
$sql = "SELECT ob.oid, ob.sku_uuid, COALESCE(ob.divide_order_fee, ob.amount, 0) AS order_fee "
. "FROM sdb_ome_order_objects ob "
. "INNER JOIN sdb_ome_order_items oi ON ob.obj_id = oi.obj_id AND oi.delete = 'false' "
. "WHERE ob.order_id = {$order_id} AND oi.shop_product_id = {$item_id} AND ob.delete = 'false'";
$rows = $db->select($sql);
if ($rows && is_array($rows)) {
usort($rows, function ($a, $b) {
return bccomp((string)$b['order_fee'], (string)$a['order_fee'], 4);
});
$row = reset($rows);
if (!empty($row['oid'])) {
$sdf['refund_item_list']['return_item'][$k]['oid'] = $row['oid'];
if (isset($row['sku_uuid']) && $row['sku_uuid'] !== '' && $row['sku_uuid'] !== null) {
$sdf['refund_item_list']['return_item'][$k]['sku_uuid'] = $row['sku_uuid'];
}
}
}
}
}
}
}
}
return $sdf;

View File

@@ -246,11 +246,17 @@ class erpapi_shop_matrix_360buy_response_order extends erpapi_shop_response_orde
if (is_string($popSignMap)) {
$popSignMap = json_decode($popSignMap, 1);
}
if ($popSignMap && $popSignMap['24'] == '2') {
// 重置guobu_info专项补贴是商家自补行为
// popSignMap[24] 对应的 guobu_type 映射
$popSignMap24TypeMap = [
'2' => ['1024'], // 专项补贴
'4' => [0x2000], // 纯商家出资
'5' => [0x10000], // 政府和商家混合出资
];
if ($popSignMap && isset($popSignMap['24']) && isset($popSignMap24TypeMap[$popSignMap['24']])) {
// 重置guobu_info
$this->_ordersdf['guobu_info'] = [
'use_gov_subsidy_new' => true,
'guobu_type' => ['1024'] // 专项补贴
'guobu_type' => $popSignMap24TypeMap[$popSignMap['24']]
];
}
}
@@ -267,6 +273,8 @@ class erpapi_shop_matrix_360buy_response_order extends erpapi_shop_response_orde
if(is_string($orderExt)) {
$orderExt = json_decode($orderExt, 1);
}
$paymentDetailList = [];
if($this->_ordersdf['extend_field']['version'] >= 3){
if($orderExt
&& !isset($orderExt['totalSellerReceivable'])){
@@ -326,8 +334,11 @@ class erpapi_shop_matrix_360buy_response_order extends erpapi_shop_response_orde
}
}
// type = 244 && bearer = 5 国补立减,也需要算在订单总额里
if($value['type'] == 244) {
// bearer = 5 国补立减,也需要算在订单总额里
//@todo官方文档https://open.jd.com/v2/#/doc/scene?listId=2168
// type = 244 代表244-新品国补立减
// type = 1080 代表1080-政府消费券(可开票)
if(in_array($value['type'], [244, 1080])) {
foreach ($value['orderCostAmounts'] as $orderCostAmount) {
if($orderCostAmount['bearer'] == 5 && $orderCostAmount['bearAmount'] > 0) {
@@ -336,7 +347,7 @@ class erpapi_shop_matrix_360buy_response_order extends erpapi_shop_response_orde
$this->_ordersdf['payments'][] = [
"money" => $orderCostAmount['bearAmount'],
"paymethod" => '国补立减-政府承担'
"paymethod" => isset($value['typeName']) ? $value['typeName'] : '国补立减-政府承担',
];
}
@@ -344,8 +355,32 @@ class erpapi_shop_matrix_360buy_response_order extends erpapi_shop_response_orde
}
}
}
}else{
if(isset($this->_ordersdf['extend_field']['paymentDetailList'])){
$paymentDetailList = $this->_ordersdf['extend_field']['paymentDetailList'];
if(is_string($paymentDetailList)) {
$paymentDetailList = json_decode($paymentDetailList, 1);
}
}
}
// 京东E卡
if($paymentDetailList){
foreach ($paymentDetailList as $pdKey => $payDetais)
{
if(!isset($payDetais['amountExpands'])){
continue;
}
foreach ($payDetais['amountExpands'] as $payDetailKey => $payDetailInfo)
{
if(isset($payDetailInfo['type']) && $payDetailInfo['type'] == 101){
$this->_ordersdf['extend_field']['is_jd_e_card'] = true;
}
}
}
}
// 国补金额(下单立减)
if ($orderExt) {
@@ -388,10 +423,23 @@ class erpapi_shop_matrix_360buy_response_order extends erpapi_shop_response_orde
}
$this->_ordersdf['guobu_info']['gov_subsidy_amount_new'] = $govSubsidyInfo['govSubsidyAmount'];
}
// 国补订单拍照规则
if(isset($orderExt['SnImgRule'])){
$SnImgRuleInfo = $orderExt['SnImgRule'];
if (is_string($SnImgRuleInfo)) {
$SnImgRuleInfo = json_decode($SnImgRuleInfo, true);
}
// 是否需要拍照
if($SnImgRuleInfo['checkImg'] == 1){
$this->_ordersdf['guobu_info'] = ['use_gov_subsidy_new' => true];
$this->_ordersdf['guobu_info']['guobu_type'][] = 1024; // 需要拍照(十六制数值)
}
}
}
}
if(is_array($this->_ordersdf['extend_field']['sendpayMap'])) {
foreach($this->_ordersdf['extend_field']['sendpayMap'] as $spVal){
if(is_string($spVal)) {
@@ -823,6 +871,29 @@ class erpapi_shop_matrix_360buy_response_order extends erpapi_shop_response_orde
{
if($this->_ordersdf['extend_field']['version'] >= 3) {
$this->_ordersdf['coupon_oid_field'] = 'sku_uuid';
if (isset($this->_ordersdf['coupon_field']) && is_array($this->_ordersdf['coupon_field'])) {
// 调用自定义的service来修改$coupon
foreach (kernel::servicelist('erpapi.service.360buy.order.coupon.format') as $service) {
if (method_exists($service, 'format_coupon')) {
$service->format_coupon($this, $this->_ordersdf['coupon_field']);
}
}
// 先构建sku_uuid到实付金额的映射
$skuCalcActuallyPayMap = [];
foreach ($this->_ordersdf['coupon_field'] as $cf) {
if (isset($cf['sku_uuid']) && isset($cf['calcActuallyPay'])) {
$skuCalcActuallyPayMap[$cf['sku_uuid']] += $cf['calcActuallyPay'];
}
}
// 将实付金额写入到order_objects
if (!empty($skuCalcActuallyPayMap) && isset($this->_ordersdf['order_objects']) && is_array($this->_ordersdf['order_objects'])) {
foreach ($this->_ordersdf['order_objects'] as $k => $object) {
if (isset($object['sku_uuid']) && isset($skuCalcActuallyPayMap[$object['sku_uuid']])) {
$this->_ordersdf['order_objects'][$k]['actually_amount'] = $skuCalcActuallyPayMap[$object['sku_uuid']];
}
}
}
}
} else {
//矩阵返回优惠数据不请求接口,否则请求接口
$ext_data = array();