|
@@ -10,6 +10,8 @@ use App\Model\InvoiceOrderInfo;
|
|
use App\Model\ProductInventory;
|
|
use App\Model\ProductInventory;
|
|
use App\Model\PurchaseOrder;
|
|
use App\Model\PurchaseOrder;
|
|
use App\Model\PurchaseOrderInfo;
|
|
use App\Model\PurchaseOrderInfo;
|
|
|
|
+use App\Model\ReturnExchangeOrder;
|
|
|
|
+use App\Model\ReturnExchangeOrderProductInfo;
|
|
use App\Model\SalesOrder;
|
|
use App\Model\SalesOrder;
|
|
use App\Model\Setting;
|
|
use App\Model\Setting;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\DB;
|
|
@@ -22,6 +24,7 @@ class CheckService extends Service
|
|
const three = 3; //采购单
|
|
const three = 3; //采购单
|
|
const four = 4; //销售订单
|
|
const four = 4; //销售订单
|
|
const five = 5; //施工单
|
|
const five = 5; //施工单
|
|
|
|
+ const six = 6; //退换货单
|
|
|
|
|
|
//中文对照
|
|
//中文对照
|
|
public $map = [
|
|
public $map = [
|
|
@@ -30,6 +33,7 @@ class CheckService extends Service
|
|
self::three => '采购单',//确认后入库
|
|
self::three => '采购单',//确认后入库
|
|
self::four => '销售订单',
|
|
self::four => '销售订单',
|
|
self::five => '施工单',//确认后出库
|
|
self::five => '施工单',//确认后出库
|
|
|
|
+ self::six => '退换货单',//确认后出库或出库入库
|
|
];
|
|
];
|
|
|
|
|
|
//入库操作
|
|
//入库操作
|
|
@@ -52,6 +56,7 @@ class CheckService extends Service
|
|
self::three => 'confirmPurchaseOrder',
|
|
self::three => 'confirmPurchaseOrder',
|
|
self::four => 'confirmSalesOrder',
|
|
self::four => 'confirmSalesOrder',
|
|
self::five => 'confirmConstruction',
|
|
self::five => 'confirmConstruction',
|
|
|
|
+ self::six => 'confirmReturnExchangeOrder',
|
|
];
|
|
];
|
|
|
|
|
|
//单据库存流水
|
|
//单据库存流水
|
|
@@ -59,6 +64,7 @@ class CheckService extends Service
|
|
self::two => 'recordInvoiceOrder',
|
|
self::two => 'recordInvoiceOrder',
|
|
self::three => 'recordPurchaseOrder',
|
|
self::three => 'recordPurchaseOrder',
|
|
self::five => 'recordConstruction',
|
|
self::five => 'recordConstruction',
|
|
|
|
+ self::six => 'recordReturnExchangeOrder'
|
|
];
|
|
];
|
|
|
|
|
|
public function confirmInvoiceOrder($data){
|
|
public function confirmInvoiceOrder($data){
|
|
@@ -197,6 +203,70 @@ class CheckService extends Service
|
|
return [true,''];
|
|
return [true,''];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public function confirmReturnExchangeOrder($data){
|
|
|
|
+ $model = ReturnExchangeOrder::where('id',$data['id'])
|
|
|
|
+ ->where('del_time',0)
|
|
|
|
+ ->first();
|
|
|
|
+ if(empty($model)) return [false, '退换货单不存在或已被删除'];
|
|
|
|
+ if($model->state != ReturnExchangeOrder::State_zero) return [false, '请确认退换货单状态,操作失败'];
|
|
|
|
+
|
|
|
|
+ ReturnExchangeOrder::where('del_time',0)->where('id',$data['id'])
|
|
|
|
+ ->update(['state' => ReturnExchangeOrder::State_one]);
|
|
|
|
+
|
|
|
|
+ return [true, $model->toArray()];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function recordReturnExchangeOrder($data, $order){
|
|
|
|
+ $result = ReturnExchangeOrderProductInfo::where('del_time',0)
|
|
|
|
+ ->where('return_exchange_id',$order['id'])
|
|
|
|
+ ->get()->toArray();
|
|
|
|
+ if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
|
|
|
|
+ $insert = $insert2 = [];
|
|
|
|
+ $time = time();
|
|
|
|
+ foreach ($result as $value){
|
|
|
|
+ $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
|
|
|
|
+ if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
|
|
|
|
+ //退货
|
|
|
|
+ if(isset($insert[$value['product_id']])){
|
|
|
|
+ $insert[$value['product_id']]['number'] += $value['number'];
|
|
|
|
+ }else{
|
|
|
|
+ $insert[$value['product_id']] = [
|
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
|
+ 'number' => $value['number'],
|
|
|
|
+ 'order_type' => $prefix,
|
|
|
|
+ 'order_number' => $order['order_number'],
|
|
|
|
+ 'crt_time' => $time
|
|
|
|
+ ];
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ //换货
|
|
|
|
+ if(isset($insert2[$value['product_id']])){
|
|
|
|
+ $insert2[$value['product_id']]['number'] += -($value['number']);
|
|
|
|
+ }else{
|
|
|
|
+ $insert2[$value['product_id']] = [
|
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
|
+ 'number' => -($value['number']),
|
|
|
|
+ 'order_type' => $prefix,
|
|
|
|
+ 'order_number' => $order['order_number'],
|
|
|
|
+ 'crt_time' => $time
|
|
|
|
+ ];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ $insert = array_values($insert);
|
|
|
|
+ $bool = InOutRecord::insert($insert);
|
|
|
|
+ if(! $bool) return [false,'流水写入失败'];
|
|
|
|
+
|
|
|
|
+ if(! empty($insert2)) {
|
|
|
|
+ $insert2 = array_values($insert2);
|
|
|
|
+ $bool = InOutRecord::insert($insert2);
|
|
|
|
+ if(! $bool) return [false,'流水写入失败'];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return [true,''];
|
|
|
|
+ }
|
|
|
|
+
|
|
public function checkAll($data,$user){
|
|
public function checkAll($data,$user){
|
|
if(empty($data['id']) || empty($data['opt_case'])) return [false,'必传参数不能为空或者参数值错误!'];
|
|
if(empty($data['id']) || empty($data['opt_case'])) return [false,'必传参数不能为空或者参数值错误!'];
|
|
|
|
|
|
@@ -239,7 +309,7 @@ class CheckService extends Service
|
|
|
|
|
|
//更新库存
|
|
//更新库存
|
|
public function changeInventory($data,$order){
|
|
public function changeInventory($data,$order){
|
|
- $number_symbol = ">";
|
|
|
|
|
|
+ $number_symbol = "";
|
|
if(in_array($data['opt_case'],self::$in_opt)){
|
|
if(in_array($data['opt_case'],self::$in_opt)){
|
|
$number_symbol = ">";
|
|
$number_symbol = ">";
|
|
}elseif (in_array($data['opt_case'],self::$out_opt)){
|
|
}elseif (in_array($data['opt_case'],self::$out_opt)){
|
|
@@ -249,26 +319,50 @@ class CheckService extends Service
|
|
//获取单据最新数据时间 正常审核的数据
|
|
//获取单据最新数据时间 正常审核的数据
|
|
$latest = InOutRecord::where('del_time',0)
|
|
$latest = InOutRecord::where('del_time',0)
|
|
->where('order_number',$order['order_number'])
|
|
->where('order_number',$order['order_number'])
|
|
- ->where('number',$number_symbol,0)
|
|
|
|
|
|
+ ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
|
|
|
|
+ return $query->where('number', $number_symbol,0);
|
|
|
|
+ })
|
|
->select('crt_time')
|
|
->select('crt_time')
|
|
->orderBy('crt_time', 'desc')
|
|
->orderBy('crt_time', 'desc')
|
|
->first();
|
|
->first();
|
|
|
|
|
|
$model = InOutRecord::where('del_time',0)
|
|
$model = InOutRecord::where('del_time',0)
|
|
->where('order_number',$order['order_number'])
|
|
->where('order_number',$order['order_number'])
|
|
- ->where('number',$number_symbol,0)
|
|
|
|
- ->select(DB::raw("sum(number) as number"),'crt_time','product_id');
|
|
|
|
|
|
+ ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
|
|
|
|
+ return $query->where('number', $number_symbol,0);
|
|
|
|
+ })
|
|
|
|
+ ->select('number','crt_time','product_id');
|
|
if(! empty($latest)) {
|
|
if(! empty($latest)) {
|
|
$t = $latest->toArray();
|
|
$t = $latest->toArray();
|
|
$model->where('crt_time',$t['crt_time']);
|
|
$model->where('crt_time',$t['crt_time']);
|
|
}
|
|
}
|
|
|
|
|
|
- $result = $model->get()->toArray();
|
|
|
|
- if (empty($result)) return [false,'流水记录不存在'];
|
|
|
|
|
|
+ $record = $model->get()->toArray();
|
|
|
|
+ if (empty($record)) return [false,'流水记录不存在'];
|
|
|
|
+ $result = $lock_number = [];
|
|
|
|
+ foreach ($record as $value){
|
|
|
|
+ if(isset($result[$value['product_id']])){
|
|
|
|
+ $result[$value['product_id']]['number'] += $value['number'];
|
|
|
|
+ }else{
|
|
|
|
+ $result[$value['product_id']] = [
|
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
|
+ 'number' => $value['number'],
|
|
|
|
+ 'crt_time' => $value['crt_time'],
|
|
|
|
+ ];
|
|
|
|
+ }
|
|
|
|
+ if($value['number'] < 0){
|
|
|
|
+ if(isset($lock_number[$value['product_id']])){
|
|
|
|
+ $lock_number[$value['product_id']] += $value['number'];
|
|
|
|
+ }else{
|
|
|
|
+ $lock_number[$value['product_id']] = $value['number'];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
//是否锁定
|
|
//是否锁定
|
|
$setting_map = Setting::where('setting_name','lock_number')
|
|
$setting_map = Setting::where('setting_name','lock_number')
|
|
->pluck('setting_value','setting_name')->toArray();
|
|
->pluck('setting_value','setting_name')->toArray();
|
|
|
|
+ $result = array_values($result);
|
|
foreach ($result as $key => $value){
|
|
foreach ($result as $key => $value){
|
|
$m = ProductInventory::where('product_id',$value['product_id'])
|
|
$m = ProductInventory::where('product_id',$value['product_id'])
|
|
->select('product_id','number')
|
|
->select('product_id','number')
|
|
@@ -277,14 +371,14 @@ class CheckService extends Service
|
|
if(empty($m)){
|
|
if(empty($m)){
|
|
ProductInventory::insert($result[$key]);
|
|
ProductInventory::insert($result[$key]);
|
|
}else{
|
|
}else{
|
|
- $lock_number = 0;
|
|
|
|
- if(! empty($setting_map['lock_number']) && in_array($data['opt_case'],self::$out_opt)) $lock_number = $value['number'];
|
|
|
|
|
|
+ $lock_number_tmp = 0;
|
|
|
|
+ if(! empty($setting_map['lock_number']) && ! empty($lock_number[$value['product_id']])) $lock_number_tmp = $lock_number[$value['product_id']];
|
|
|
|
|
|
ProductInventory::where('product_id',$m->product_id)
|
|
ProductInventory::where('product_id',$m->product_id)
|
|
->lockForUpdate()
|
|
->lockForUpdate()
|
|
->update([
|
|
->update([
|
|
'number' => DB::raw('number + ('. $value['number'] . ')'),
|
|
'number' => DB::raw('number + ('. $value['number'] . ')'),
|
|
- 'lock_number' => DB::raw('lock_number + ('. $lock_number . ')')
|
|
|
|
|
|
+ 'lock_number' => DB::raw('lock_number + ('. $lock_number_tmp . ')')
|
|
]);
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|