|
@@ -0,0 +1,259 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Service;
|
|
|
+
|
|
|
+use App\Model\Employee;
|
|
|
+use App\Model\InventoryOrder;
|
|
|
+use App\Model\InventoryOrderAsset;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+
|
|
|
+class InventoryService extends Service
|
|
|
+{
|
|
|
+ public function edit($data){
|
|
|
+ list($status,$msg) = $this->orderRule($data,false);
|
|
|
+ if(!$status) return [$status,$msg];
|
|
|
+
|
|
|
+ try{
|
|
|
+ DB::beginTransaction();
|
|
|
+ $inventory_model = InventoryOrder::where('order_no',$data['order_no'])->first();
|
|
|
+ $inventory_model->order_no = $data['order_no'];
|
|
|
+ $inventory_model->oa_employee_id = $data['oa_employee_id'] ?? 0;
|
|
|
+ $inventory_model->save();
|
|
|
+
|
|
|
+ InventoryOrderAsset::where('order_no',$data['order_no'])->update([
|
|
|
+ 'del_time' => time()
|
|
|
+ ]);
|
|
|
+ if(! empty($data['sub'])){
|
|
|
+ $sub = [];
|
|
|
+ foreach ($data['sub'] as $value){
|
|
|
+ $sub[] = [
|
|
|
+ 'asset_id' => $value['asset_id'],
|
|
|
+ 'remark' => $value['remark'],
|
|
|
+ 'order_no' => $data['order_no'],
|
|
|
+ 'area' => $value['area'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ InventoryOrderAsset::insert($sub);
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $e){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$e->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function add($data,$user){
|
|
|
+ list($status,$msg) = $this->orderRule($data);
|
|
|
+ if(!$status) return [$status,$msg];
|
|
|
+ try{
|
|
|
+ DB::beginTransaction();
|
|
|
+ $inventory_model = new InventoryOrder();
|
|
|
+ $inventory_model->order_no = $data['order_no'];
|
|
|
+ $inventory_model->oa_employee_id = $data['oa_employee_id'] ?? 0;
|
|
|
+ $inventory_model->crt_id = $user['id'];
|
|
|
+ $inventory_model->save();
|
|
|
+
|
|
|
+ if(! empty($data['sub'])){
|
|
|
+ $sub = [];
|
|
|
+ foreach ($data['sub'] as $value){
|
|
|
+ $sub[] = [
|
|
|
+ 'asset_id' => $value['asset_id'],
|
|
|
+ 'remark' => $value['remark'],
|
|
|
+ 'order_no' => $data['order_no'],
|
|
|
+ 'area' => $value['area'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ InventoryOrderAsset::insert($sub);
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $e){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$e->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function detail($data){
|
|
|
+ if($this->isEmpty($data,'order_no')) return [false,'请选择数据'];
|
|
|
+
|
|
|
+ $order = InventoryOrder::where('order_no',$data['order_number'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->select('id','order_no','crt_time','state','crt_id')
|
|
|
+ ->first();
|
|
|
+ if(empty($order)) return [true,[]];
|
|
|
+ $order = $order->toArray();
|
|
|
+
|
|
|
+ $apply = InventoryOrderAsset::where('order_no',$data['order_no'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->select('id','asset_id','state','remark','order_no','area')
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ $order['sub'] = $apply;
|
|
|
+
|
|
|
+ return [true,$order];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function del($data){
|
|
|
+ if($this->isEmpty($data,'order_no')) return [false,'请选择数据!'];
|
|
|
+
|
|
|
+ $bool = InventoryOrder::whereIn('order_no',$data['order_no'])
|
|
|
+ ->where('status','>',InventoryOrder::STATE_ZERO)
|
|
|
+ ->exists();
|
|
|
+ if($bool) return [false,'请确认盘点单状态,删除失败!'];
|
|
|
+
|
|
|
+ try{
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ InventoryOrder::whereIn('order_no',$data['order_no'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->update(['del_time' => time()]);
|
|
|
+ InventoryOrderAsset::whereIn('order_no',$data['order_no'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->update(['del_time' => time()]);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $e){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$e->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true,'删除成功'];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getList($data){
|
|
|
+ $model = InventoryOrder::where('del_time',0)
|
|
|
+ ->select('order_no','id','crt_time','state','crt_id')
|
|
|
+ ->orderby('id', 'desc');
|
|
|
+ if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])){
|
|
|
+ $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
|
|
|
+ $model->where('crt_time','>=',$return[0]);
|
|
|
+ $model->where('crt_time','<',$return[1]);
|
|
|
+ }
|
|
|
+ if(! empty($data['order_no'])) $model->where('order_no', 'LIKE', '%'.$data['order_no'].'%');
|
|
|
+ if(! empty($data['state'])) $model->where('state', $data['state']);
|
|
|
+
|
|
|
+ $list = $this->limit($model,'',$data);
|
|
|
+ $list = $this->fillListData($list);
|
|
|
+
|
|
|
+ return [true, $list];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function fillListData($data){
|
|
|
+ if(empty($data['data'])) return $data;
|
|
|
+
|
|
|
+ $emp_map = Employee::whereIn('id',array_column($data['data'],'crt_id'))->pluck('emp_name','id')->toArray();
|
|
|
+
|
|
|
+ date_default_timezone_set('PRC');
|
|
|
+ foreach ($data['data'] as $key => $value){
|
|
|
+ $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']) : '';
|
|
|
+ $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function orderRule(&$data, $is_check = true){
|
|
|
+ if($this->isEmpty($data,'sub')) return [false,'盘点数据不能为空!'];
|
|
|
+
|
|
|
+ if($is_check){
|
|
|
+ $order_no = $this->createOrderNumber();
|
|
|
+ if(empty($order_no)) return [false,'盘点单号生成失败!'];
|
|
|
+ $data['order_no'] = $order_no;
|
|
|
+ }else{
|
|
|
+ if($this->isEmpty($data,'order_no')) return [false,'盘点单号不能为空!'];
|
|
|
+ $bool = InventoryOrder::where('del_time',0)
|
|
|
+ ->where('state','>',InventoryOrder::STATE_ZERO)
|
|
|
+ ->exists();
|
|
|
+ if($bool) return [false,'编辑失败,请确认盘点单状态!'];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function createOrderNumber(){
|
|
|
+ $str = InventoryOrder::prefix . date('Ymd',time());
|
|
|
+
|
|
|
+ $order_number = InventoryOrder::where('order_no','Like','%'. $str . '%')
|
|
|
+ ->max('order_no');
|
|
|
+
|
|
|
+ if(empty($order_number)){
|
|
|
+ $number = str_pad(1,6,'0',STR_PAD_LEFT);
|
|
|
+ $number = $str . $number;
|
|
|
+ }else{
|
|
|
+ $tmp = substr($order_number, -6);
|
|
|
+ $tmp = $tmp + 1;
|
|
|
+
|
|
|
+ if(strlen($tmp) > 6) return '';
|
|
|
+
|
|
|
+ $number = str_pad($tmp,6,'0',STR_PAD_LEFT);
|
|
|
+ $number = $str . $number;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $number;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function updateAssetState($data){
|
|
|
+ list($status,$msg) = $this->updateAssetStateRule($data);
|
|
|
+ if(! $status) return [false,$msg];
|
|
|
+
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ foreach ($data as $value){
|
|
|
+ InventoryOrderAsset::whereIn('id',$value['id'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->update([
|
|
|
+ 'remark' => $value['remark'],
|
|
|
+ 'state' => $value['state']
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function updateAssetStateRule($data){
|
|
|
+ if(empty($data['data'])) return [false,'盘点单资产数据不能为空'];
|
|
|
+
|
|
|
+ $id = array_column($data['data'],'id');
|
|
|
+ $bool = InventoryOrderAsset::whereIn('id',$id)
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->where('state','>',InventoryOrderAsset::STATE_ZERO)
|
|
|
+ ->exists();
|
|
|
+ if($bool) return [false,'请确认盘点数据资产的状态,盘点失败!'];
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function updateOrderState($data){
|
|
|
+ list($status,$msg) = $this->updateOrderStateRule($data);
|
|
|
+ if(! $status) return [false,$msg];
|
|
|
+
|
|
|
+ InventoryOrder::where('order_no',$data['order_no'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->update(['state' => $data['state']]);
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function updateOrderStateRule($data){
|
|
|
+ if(empty($data['order_no'])) return [false,'盘点单单号不能为空'];
|
|
|
+ if(empty($data['state'])) return [false,'盘点单状态不能为空'];
|
|
|
+
|
|
|
+ $bool = InventoryOrder::where('order_no',$data['order_no'])
|
|
|
+ ->where('del_time',0)
|
|
|
+ ->where('state','>',InventoryOrder::STATE_ZERO)
|
|
|
+ ->exists();
|
|
|
+ if($bool) return [false,'请确认盘点单的状态,操作失败!'];
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
+ }
|
|
|
+}
|