|
@@ -25,6 +25,7 @@ use App\Model\ProductInventorySet;
|
|
|
use App\Model\PurchaseOrder;
|
|
|
use App\Model\PurchaseOrderInfo;
|
|
|
use App\Model\PurchaseOrderInfoForOutBound;
|
|
|
+use App\Model\PurchaseOrderInfoForOutboundInfo;
|
|
|
use App\Model\PurchaseOrderSpecial;
|
|
|
use App\Model\PurchaseOrderSpecialInfo;
|
|
|
use App\Model\ReturnExchangeOrder;
|
|
@@ -995,26 +996,48 @@ class CheckService extends Service
|
|
|
// }
|
|
|
|
|
|
//合同 退货
|
|
|
- $map = [];
|
|
|
+ $map = $outbound = [];
|
|
|
if($order['type'] == ReturnExchangeOrder::Order_type){
|
|
|
//查找 出库数据的产品
|
|
|
$product = OutBoundOrderInfo::where('del_time',0)
|
|
|
->where('data_id', $order['data_id'])
|
|
|
->where('type', OutBoundOrder::out_type_one)
|
|
|
->whereColumn('number','>','return_number')
|
|
|
- ->select('id','product_id','number','return_number')
|
|
|
+ ->select('id','product_id','number','return_number','out_bound_id')
|
|
|
->get()->toArray();
|
|
|
|
|
|
foreach($product as $value){
|
|
|
$map[$value['product_id']][] = $value;
|
|
|
}
|
|
|
+
|
|
|
+ //采购占用数量
|
|
|
+ $purchase = PurchaseOrderInfoForOutBound::where('del_time',0)
|
|
|
+ ->whereIn('data_id', array_unique(array_column($product,'out_bound_id')))
|
|
|
+ ->where('type',PurchaseOrderInfoForOutBound::type_one)
|
|
|
+ ->where('from_order_type',PurchaseOrderInfoForOutBound::from_type_zero)
|
|
|
+ ->where('is_use',PurchaseOrderInfoForOutBound::is_use)
|
|
|
+ ->whereColumn('number','>','return_number')
|
|
|
+ ->get()->toArray();
|
|
|
+ foreach ($purchase as $value){
|
|
|
+ $key = $value['data_id'] . $value['product_id'];
|
|
|
+ $num = bcsub($value['number'],$value['return_number'],2);
|
|
|
+ if(isset($outbound[$key])){
|
|
|
+ $tmp = bcadd($num, $outbound[$key]['number'],2);
|
|
|
+ $outbound[$key]['number'] = $tmp;
|
|
|
+ }else{
|
|
|
+ $outbound[$key] = [
|
|
|
+ 'id' => $value['id'],
|
|
|
+ 'number' => $num,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$result = ReturnExchangeOrderProductInfo::where('del_time',0)
|
|
|
->where('return_exchange_id',$order['id'])
|
|
|
->get()->toArray();
|
|
|
if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
|
|
|
- $insert = $update = $insert2 = [];
|
|
|
+ $insert = $update = $insert2 = $update2 = [];
|
|
|
$time = time();
|
|
|
foreach ($result as $value){
|
|
|
$key = $value['product_id'] . $value['storehouse_id'];
|
|
@@ -1055,6 +1078,22 @@ class CheckService extends Service
|
|
|
'number' => $t,
|
|
|
'crt_time' => $time
|
|
|
];
|
|
|
+
|
|
|
+ $out_key = $out['out_bound_id'] . $value['product_id'];
|
|
|
+ if(isset($outbound[$out_key])){
|
|
|
+ $num = $outbound[$out_key]['number'];
|
|
|
+ $id = $outbound[$out_key]['id'];
|
|
|
+ if($t > $num){
|
|
|
+ $update2_num = $num;
|
|
|
+ }else{
|
|
|
+ $update2_num = $t;
|
|
|
+ }
|
|
|
+ if(isset($update2[$id])){
|
|
|
+ $update2[$id] = bcadd($update2_num, $update2[$id],2);
|
|
|
+ }else{
|
|
|
+ $update2[$id] = $update2_num;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
@@ -1093,6 +1132,24 @@ class CheckService extends Service
|
|
|
->update(['return_number' => $value['return_number']]);
|
|
|
}
|
|
|
}
|
|
|
+ if(! empty($update2)){
|
|
|
+ foreach ($update2 as $key => $value){
|
|
|
+ $insert3[] = [
|
|
|
+ 'order_number' => $order['order_number'],
|
|
|
+ 'purchase_order_info_id' => $key,
|
|
|
+ 'number' => $value,
|
|
|
+ 'crt_time' => $time
|
|
|
+ ];
|
|
|
+
|
|
|
+ PurchaseOrderInfoForOutBound::where('id', $key)
|
|
|
+ ->lockForUpdate()
|
|
|
+ ->update([
|
|
|
+ 'return_number' => DB::raw('return_number + ('. $value . ')'),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(! empty($insert3)) PurchaseOrderInfoForOutboundInfo::insert($insert3);
|
|
|
+ }
|
|
|
|
|
|
return [true,''];
|
|
|
}
|
|
@@ -1684,6 +1741,24 @@ class CheckService extends Service
|
|
|
->update(['del_time' => $time]);
|
|
|
}
|
|
|
|
|
|
+ $info = PurchaseOrderInfoForOutboundInfo::where('del_time',0)
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->get()->toArray();
|
|
|
+ if(! empty($info)){
|
|
|
+ foreach ($info as $value){
|
|
|
+ //退换货退合同 合同占用的采购或盘点占用出库数量解放
|
|
|
+ PurchaseOrderInfoForOutBound::where('id',$value['purchase_order_info_id'])
|
|
|
+ ->lockForUpdate()
|
|
|
+ ->update([
|
|
|
+ 'return_number' => DB::raw('return_number - ('. $value['number'] . ')'),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ //记录信息标记删除
|
|
|
+ PurchaseOrderInfoForOutboundInfo::where('del_time',0)
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->update(['del_time' => $time]);
|
|
|
+ }
|
|
|
+
|
|
|
//写入流水
|
|
|
return [true, ''];
|
|
|
}
|