|
@@ -9,9 +9,7 @@ use App\Model\Employee;
|
|
|
use App\Model\InOutRecord;
|
|
|
use App\Model\InvoiceOrder;
|
|
|
use App\Model\InvoiceOrderInfo;
|
|
|
-use App\Model\Product;
|
|
|
use App\Model\ProductInventory;
|
|
|
-use App\Model\ProductInventorySet;
|
|
|
use App\Model\PurchaseOrder;
|
|
|
use App\Model\PurchaseOrderInfo;
|
|
|
use App\Model\PurchaseOrderSpecial;
|
|
@@ -22,7 +20,6 @@ use App\Model\SalesOrder;
|
|
|
use App\Model\SalesOrderOtherFee;
|
|
|
use App\Model\SalesOrderProductInfo;
|
|
|
use App\Model\SeeRange;
|
|
|
-use App\Model\Setting;
|
|
|
use App\Model\Storehouse;
|
|
|
use App\Model\Supplier;
|
|
|
use App\Service\Oa\OaService;
|
|
@@ -200,13 +197,13 @@ class CheckService extends Service
|
|
|
|
|
|
|
|
|
public function confirmInvoiceOrder($data){
|
|
|
- $model = InvoiceOrder::where('id',$data['id'])
|
|
|
+ $model = InvoiceOrder::where('order_number',$data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false, '发货单不存在或已被删除'];
|
|
|
if($model->state != InvoiceOrder::STATE_ONE) return [false, '请确认发货单状态,操作失败'];
|
|
|
|
|
|
- InvoiceOrder::where('del_time',0)->where('id',$data['id'])
|
|
|
+ InvoiceOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
->update(['state' => InvoiceOrder::STATE_TWO]);
|
|
|
SalesOrder::where('id',$model->sales_order_id)->update(['state' => SalesOrder::State2_one]);
|
|
|
|
|
@@ -245,26 +242,26 @@ class CheckService extends Service
|
|
|
}
|
|
|
|
|
|
public function confirmPurchaseOrderState($data){
|
|
|
- $model = PurchaseOrder::where('id',$data['id'])
|
|
|
+ $model = PurchaseOrder::where('order_number',$data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false,'采购单不存在或已被删除'];
|
|
|
if($model->state != PurchaseOrder::STATE_ONE) return [false,'请确认采购单状态,操作失败'];
|
|
|
|
|
|
//未入库
|
|
|
- PurchaseOrder::where('id',$data['id'])->update(['state' => PurchaseOrder::STATE_TWO]);
|
|
|
+ PurchaseOrder::where('order_number',$data['order_number'])->update(['state' => PurchaseOrder::STATE_TWO]);
|
|
|
return [true, $model->toArray()];
|
|
|
}
|
|
|
|
|
|
public function confirmPurchaseOrder($data){
|
|
|
- $model = PurchaseOrder::where('id',$data['id'])
|
|
|
+ $model = PurchaseOrder::where('order_number',$data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false, '采购订单不存在或已被删除'];
|
|
|
if($model->state != PurchaseOrder::STATE_Three) return [false, '请确认采购订单状态,操作失败'];
|
|
|
|
|
|
// 已出库
|
|
|
- PurchaseOrder::where('del_time',0)->where('id',$data['id'])
|
|
|
+ PurchaseOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
->update(['state' => PurchaseOrder::STATE_Four]);
|
|
|
|
|
|
return [true, $model->toArray()];
|
|
@@ -381,14 +378,14 @@ class CheckService extends Service
|
|
|
}
|
|
|
|
|
|
public function confirmConstruction($data){
|
|
|
- $model = Construction::where('id',$data['id'])
|
|
|
+ $model = Construction::where('order_number',$data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false, '施工单不存在或已被删除'];
|
|
|
if($model->state != Construction::STATE_ONE) return [false, '请确认施工单状态,操作失败'];
|
|
|
|
|
|
//已确认
|
|
|
- Construction::where('del_time',0)->where('id',$data['id'])
|
|
|
+ Construction::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
->update(['state' => Construction::STATE_TWO]);
|
|
|
//已下施工
|
|
|
SalesOrder::where('id',$model->sales_order_id)->update(['state' => SalesOrder::State_five]);
|
|
@@ -428,17 +425,17 @@ class CheckService extends Service
|
|
|
}
|
|
|
|
|
|
public function confirmReturnExchangeOrder($data){
|
|
|
- $model = ReturnExchangeOrder::where('id',$data['id'])
|
|
|
+ $model = ReturnExchangeOrder::where('order_number',$data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false, '退换货单不存在或已被删除'];
|
|
|
if($model->state != ReturnExchangeOrder::State_one) return [false, '请确认退换货单状态,操作失败'];
|
|
|
|
|
|
- ReturnExchangeOrder::where('del_time',0)->where('id',$data['id'])
|
|
|
+ ReturnExchangeOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
->update(['state' => ReturnExchangeOrder::State_two]);
|
|
|
|
|
|
if($data['data_type'] == ReturnExchangeOrder::Order_type){
|
|
|
- SalesOrder::where('id',$data['id'])->update([
|
|
|
+ SalesOrder::where('id',$model->data_id)->update([
|
|
|
'state' => SalesOrder::State_six
|
|
|
]);
|
|
|
}
|
|
@@ -505,28 +502,28 @@ class CheckService extends Service
|
|
|
}
|
|
|
|
|
|
public function confirmSalesOrder($data){
|
|
|
- $model = SalesOrder::where('id', $data['id'])
|
|
|
+ $model = SalesOrder::where('order_number', $data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false, '合同不存在或已被删除'];
|
|
|
//安装件
|
|
|
- if($model->state == SalesOrder::State_five) return [false, '请确认合同状态,操作失败'];
|
|
|
+ if($model->state == SalesOrder::State_seven) return [false, '请确认合同状态,操作失败'];
|
|
|
|
|
|
- SalesOrder::where('del_time',0)->where('id',$data['id'])
|
|
|
+ SalesOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
->update(['state' => SalesOrder::State_seven]);
|
|
|
|
|
|
return [true, $model->toArray()];
|
|
|
}
|
|
|
|
|
|
public function confirmSales($data){
|
|
|
- $model = SalesOrder::where('id', $data['id'])
|
|
|
+ $model = SalesOrder::where('order_number', $data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false, '合同不存在或已被删除'];
|
|
|
if($model->state != SalesOrder::State_one) return [false, '请确认合同状态,操作失败'];
|
|
|
|
|
|
//已确认
|
|
|
- SalesOrder::where('del_time',0)->where('id',$data['id'])
|
|
|
+ SalesOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
->update(['state' => SalesOrder::State_two]);
|
|
|
|
|
|
return [true, $model->toArray()];
|
|
@@ -618,19 +615,179 @@ class CheckService extends Service
|
|
|
}
|
|
|
|
|
|
public function reject_sales($data){
|
|
|
- $model = SalesOrder::where('id', $data['id'])
|
|
|
+ $model = SalesOrder::where('order_number', $data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
->first();
|
|
|
if(empty($model)) return [false, '合同不存在或已被删除'];
|
|
|
//安装件
|
|
|
if($model->state != SalesOrder::State_two) return [false, '请确认合同状态,操作失败'];
|
|
|
|
|
|
- SalesOrder::where('del_time',0)->where('id',$data['id'])
|
|
|
+ //未确认
|
|
|
+ SalesOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
->update(['state' => SalesOrder::State_zero]);
|
|
|
|
|
|
return [true, $model->toArray()];
|
|
|
}
|
|
|
|
|
|
+ public function reject_purchase($data){
|
|
|
+ $model = PurchaseOrder::where('order_number', $data['order_number'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->first();
|
|
|
+ if(empty($model)) return [false, '采购单不存在或已被删除'];
|
|
|
+ //安装件
|
|
|
+ if($model->state != PurchaseOrder::STATE_Four) return [false, '请确认采购单状态,操作失败'];
|
|
|
+
|
|
|
+ //未出库
|
|
|
+ PurchaseOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
+ ->update(['state' => PurchaseOrder::STATE_TWO]);
|
|
|
+
|
|
|
+ return [true, $model->toArray()];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function reject_construction($data){
|
|
|
+ $model = Construction::where('order_number', $data['order_number'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->first();
|
|
|
+ if(empty($model)) return [false, '施工单不存在或已被删除'];
|
|
|
+ //安装件
|
|
|
+ if($model->state != Construction::STATE_TWO) return [false, '请确认施工单状态,操作失败'];
|
|
|
+
|
|
|
+ Construction::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
+ ->update(['state' => Construction::STATE_ZERO]);
|
|
|
+
|
|
|
+ return [true, $model->toArray()];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function reject_return_exchange($data){
|
|
|
+ $model = ReturnExchangeOrder::where('order_number', $data['order_number'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->first();
|
|
|
+ if(empty($model)) return [false, '退换货单不存在或已被删除'];
|
|
|
+ //安装件
|
|
|
+ if($model->state != ReturnExchangeOrder::State_two) return [false, '请确认退换货单状态,操作失败'];
|
|
|
+
|
|
|
+ ReturnExchangeOrder::where('del_time',0)->where('order_number',$data['order_number'])
|
|
|
+ ->update(['state' => ReturnExchangeOrder::State_zero]);
|
|
|
+
|
|
|
+ return [true, $model->toArray()];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function reject_record_construction($data,$order){
|
|
|
+ //获取单据最新数据时间 正常施工数据
|
|
|
+ $latest = InOutRecord::where('del_time',0)
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->where('number','<',0)
|
|
|
+ ->select('crt_time')
|
|
|
+ ->orderBy('crt_time', 'desc')
|
|
|
+ ->first();
|
|
|
+ $latest = $latest->toArray();
|
|
|
+
|
|
|
+ $result = InOutRecord::where('del_time',0)
|
|
|
+ ->where('crt_time',$latest['crt_time'])
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->where('number','<',0)
|
|
|
+ ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($result)) return false;
|
|
|
+
|
|
|
+ //生成对冲数据
|
|
|
+ $time = time();
|
|
|
+ foreach ($result as $key => $value){
|
|
|
+ $result[$key]['number'] = abs($value['number']);
|
|
|
+ $result[$key]['crt_time'] = $time;
|
|
|
+ }
|
|
|
+
|
|
|
+ //写入流水
|
|
|
+ return InOutRecord::insert($result);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function reject_record_purchase($data,$order){
|
|
|
+ //获取单据最新数据时间 正常采购入库数据
|
|
|
+ $latest = InOutRecord::where('del_time',0)
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->where('number','>',0)
|
|
|
+ ->select('crt_time')
|
|
|
+ ->orderBy('crt_time', 'desc')
|
|
|
+ ->first();
|
|
|
+ $latest = $latest->toArray();
|
|
|
+
|
|
|
+ $result = InOutRecord::where('del_time',0)
|
|
|
+ ->where('crt_time',$latest['crt_time'])
|
|
|
+ ->where('order_number',$data['order_number'])
|
|
|
+ ->where('number','>',0)
|
|
|
+ ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($result)) return false;
|
|
|
+
|
|
|
+ //生成对冲数据
|
|
|
+ $time = time();
|
|
|
+ foreach ($result as $key => $value){
|
|
|
+ $result[$key]['number'] = - $value['number'];
|
|
|
+ $result[$key]['crt_time'] = $time;
|
|
|
+ }
|
|
|
+
|
|
|
+ //写入流水
|
|
|
+ return InOutRecord::insert($result);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function reject_record_return_exchange($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){
|
|
|
+ $key = $value['product_id'] . $value['storehouse_id'];
|
|
|
+ $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
|
|
|
+ if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
|
|
|
+ //退货 扣出
|
|
|
+ if(isset($insert[$key])){
|
|
|
+ $insert[$key]['number'] += -($value['number']);
|
|
|
+ }else{
|
|
|
+ $insert[$key] = [
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
+ 'number' => -($value['number']),
|
|
|
+ 'order_type' => $prefix,
|
|
|
+ 'order_number' => $order['order_number'],
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'storehouse_id' => $value['storehouse_id'],
|
|
|
+ 'depart_id' => $order['depart_id'],
|
|
|
+ 'top_depart_id' => $order['top_depart_id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //换货 加回
|
|
|
+ if(isset($insert2[$key])){
|
|
|
+ $insert2[$key]['number'] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $insert2[$key] = [
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
+ 'number' => $value['number'],
|
|
|
+ 'order_type' => $prefix,
|
|
|
+ 'order_number' => $order['order_number'],
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'storehouse_id' => $value['storehouse_id'],
|
|
|
+ 'depart_id' => $order['depart_id'],
|
|
|
+ 'top_depart_id' => $order['top_depart_id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ $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){
|
|
|
if(empty($data['id']) || empty($data['order_number'])|| empty($data['opt_case'])) return [false,'必传参数不能为空或者参数值错误!'];
|
|
|
|
|
@@ -778,55 +935,104 @@ class CheckService extends Service
|
|
|
}
|
|
|
|
|
|
//业务单据审批通过后 驳回 更新库存
|
|
|
- public function changeInventoryReject($data){
|
|
|
- $number_symbol = "<";
|
|
|
+ public function changeInventoryReject($data,$order){
|
|
|
+ $number_symbol = "";
|
|
|
if(in_array($data['opt_case'],self::$in_opt)){
|
|
|
$number_symbol = "<";
|
|
|
}elseif (in_array($data['opt_case'],self::$out_opt)){
|
|
|
$number_symbol = ">";
|
|
|
}
|
|
|
|
|
|
- //获取单据最新数据时间
|
|
|
+ //获取单据最新数据时间 正常审核的数据
|
|
|
$latest = InOutRecord::where('del_time',0)
|
|
|
- ->where('order_number',$data['order_number'])
|
|
|
- ->where('number',$number_symbol,0)
|
|
|
+ ->where('order_number',$order['order_number'])
|
|
|
+ ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
|
|
|
+ return $query->where('number', $number_symbol,0);
|
|
|
+ })
|
|
|
->select('crt_time')
|
|
|
->orderBy('crt_time', 'desc')
|
|
|
->first();
|
|
|
|
|
|
$model = InOutRecord::where('del_time',0)
|
|
|
- ->where('order_number',$data['order_number'])
|
|
|
- ->where('number',$number_symbol,0)
|
|
|
- ->select('storehouse_id',DB::raw("sum(number) as number"),'roll_film_id','roll_film_number')
|
|
|
- ->groupby('roll_film_id','roll_film_number','storehouse_id');
|
|
|
+ ->where('order_number',$order['order_number'])
|
|
|
+ ->when(! empty($number_symbol), function ($query) use ($number_symbol) {
|
|
|
+ return $query->where('number', $number_symbol,0);
|
|
|
+ })
|
|
|
+ ->select('number','crt_time','product_id','storehouse_id','top_depart_id');
|
|
|
if(! empty($latest)) {
|
|
|
$t = $latest->toArray();
|
|
|
$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){
|
|
|
+ $key = $value['product_id'] . $value['storehouse_id'];
|
|
|
+ if(isset($result[$key])){
|
|
|
+ $result[$key]['number'] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $result[$key] = [
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
+ 'number' => $value['number'],
|
|
|
+ 'crt_time' => $value['crt_time'],
|
|
|
+ 'storehouse_id' => $value['storehouse_id'],
|
|
|
+ 'top_depart_id' => $value['top_depart_id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if($value['number'] > 0){
|
|
|
+ if(isset($lock_number[$key])){
|
|
|
+ $lock_number[$key] += $value['number'];
|
|
|
+ }else{
|
|
|
+ $lock_number[$key] = $value['number'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //是否锁定
|
|
|
+ $lock = 0;
|
|
|
+ $depart = Depart::where('del_time',0)
|
|
|
+ ->where('is_main',1)
|
|
|
+ ->where('parent_id',0)
|
|
|
+ ->first();
|
|
|
+ $head = 0;
|
|
|
+ if(! empty($depart)) $head = $depart->id;//总社
|
|
|
+ if($head != $order['top_depart_id']) $lock = DB::table('depart_set')->where('top_depart_id',$order['top_depart_id'])->value('param_one');
|
|
|
|
|
|
- foreach ($result as $value){
|
|
|
- RollFilmInventory::where('roll_film_id',$value['roll_film_id'])
|
|
|
- ->where('roll_film_number',$value['roll_film_number'])
|
|
|
+ $result = array_values($result);
|
|
|
+ foreach ($result as $key => $value){
|
|
|
+ $keys = $value['product_id'] . $value['storehouse_id'];
|
|
|
+ $m = ProductInventory::where('product_id',$value['product_id'])
|
|
|
->where('storehouse_id',$value['storehouse_id'])
|
|
|
- ->lockForUpdate()
|
|
|
- ->update([
|
|
|
- 'number' => DB::raw('number + ('. $value['number'] . ')'),
|
|
|
- 'lock_number' => DB::raw('lock_number + ('. $value['number'] . ')')
|
|
|
- ]);
|
|
|
+ ->select('product_id','number','storehouse_id')
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ if(empty($m)){
|
|
|
+ ProductInventory::insert($result[$key]);
|
|
|
+ }else{
|
|
|
+ $lock_number_tmp = 0;
|
|
|
+ if($lock && ! empty($lock_number[$keys])) $lock_number_tmp = $lock_number[$keys];
|
|
|
+
|
|
|
+ ProductInventory::where('product_id',$m->product_id)
|
|
|
+ ->where('storehouse_id',$m->storehouse_id)
|
|
|
+ ->lockForUpdate()
|
|
|
+ ->update([
|
|
|
+ 'number' => DB::raw('number + ('. $value['number'] . ')'),
|
|
|
+ 'lock_number' => DB::raw('lock_number + ('. $lock_number_tmp . ')')
|
|
|
+ ]);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- return true;
|
|
|
+ return [true,''];
|
|
|
}
|
|
|
|
|
|
public function createRecordAndInventory($data = []){
|
|
|
- if(empty($data['id']) || empty($data['type']) || empty($data['opt_case'])) return [false, ''];
|
|
|
+ if(empty($data['type']) || empty($data['opt_case']) || empty($data['order_number'])) return [false, ''];
|
|
|
|
|
|
if($data['type'] == self::TYPE_THREE){
|
|
|
//通过后弃审
|
|
|
if(! isset(self::$opt_case_reject[$data['opt_case']])) return [false, ''];
|
|
|
+
|
|
|
//具体方法
|
|
|
$function = self::$opt_case_reject[$data['opt_case']];
|
|
|
|
|
@@ -836,21 +1042,23 @@ class CheckService extends Service
|
|
|
DB::beginTransaction();
|
|
|
|
|
|
//更新单据的状态
|
|
|
- $bool = $this->$function($data);
|
|
|
+ list($bool,$msg) = $this->$function($data);
|
|
|
if(! $bool){
|
|
|
DB::rollBack();
|
|
|
return [false, ''];
|
|
|
}
|
|
|
+ $order = $msg;
|
|
|
+
|
|
|
if($function2) {
|
|
|
//流水
|
|
|
- $boolean = $this->$function2($data);
|
|
|
+ $boolean = $this->$function2($data,$order);
|
|
|
if(! $boolean) {
|
|
|
DB::rollBack();
|
|
|
return [false, ''];
|
|
|
}
|
|
|
|
|
|
//库存
|
|
|
- $bool = $this->changeInventoryReject($data);
|
|
|
+ $bool = $this->changeInventoryReject($data,$order);
|
|
|
if(! $bool){
|
|
|
DB::rollBack();
|
|
|
return [false, ''];
|