|
@@ -3,12 +3,16 @@
|
|
|
namespace App\Service;
|
|
|
|
|
|
use App\Model\BasicType;
|
|
|
+use App\Model\Construction;
|
|
|
use App\Model\Customer;
|
|
|
+use App\Model\Depart;
|
|
|
use App\Model\Employee;
|
|
|
use App\Model\Product;
|
|
|
use App\Model\SalesOrder;
|
|
|
use App\Model\SalesOrderInfo;
|
|
|
+use App\Model\SalesOrderOtherFee;
|
|
|
use App\Model\SalesOrderProductInfo;
|
|
|
+use App\Model\SalesOrderRange;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class SalesOrderService extends Service
|
|
@@ -104,13 +108,25 @@ class SalesOrderService extends Service
|
|
|
}
|
|
|
|
|
|
if(! empty($data['product'])){
|
|
|
+ $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
|
|
|
+ ->select('bar_code','code','cost','depart_price','size','title','id','retail_price')
|
|
|
+ ->get()->toArray();
|
|
|
+ $pro = array_column($pro,null,'id');
|
|
|
$insert = [];
|
|
|
foreach ($data['product'] as $value){
|
|
|
+ $tmp = $pro[$value['product_id']] ?? [];
|
|
|
$insert[] = [
|
|
|
'sales_order_id' => $model->id,
|
|
|
'product_id' => $value['product_id'],
|
|
|
- 'price' => $value['retail_price'],
|
|
|
'number' => $value['number'],
|
|
|
+ 'title' => $tmp['title'],
|
|
|
+ 'code' => $tmp['code'] ?? '',
|
|
|
+ 'size' => $tmp['size'] ?? '',
|
|
|
+ 'unit' => $tmp['unit'] ?? 0,
|
|
|
+ 'bar_code' => $tmp['bar_code'] ?? '',
|
|
|
+ 'cost' => $tmp['cost'] ?? 0,
|
|
|
+ 'depart_price' => $tmp['depart_price'] ?? 0,
|
|
|
+ 'retail_price' => $tmp['retail_price'] ?? 0,
|
|
|
'mark' => $value['mark'] ?? '',
|
|
|
'crt_time' => $time,
|
|
|
];
|
|
@@ -212,13 +228,25 @@ class SalesOrderService extends Service
|
|
|
}
|
|
|
|
|
|
if(! empty($data['product'])){
|
|
|
+ $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
|
|
|
+ ->select('bar_code','code','cost','depart_price','size','title','id','retail_price')
|
|
|
+ ->get()->toArray();
|
|
|
+ $pro = array_column($pro,null,'id');
|
|
|
$insert = [];
|
|
|
foreach ($data['product'] as $value){
|
|
|
+ $tmp = $pro[$value['product_id']] ?? [];
|
|
|
$insert[] = [
|
|
|
'sales_order_id' => $model->id,
|
|
|
'product_id' => $value['product_id'],
|
|
|
- 'price' => $value['retail_price'],
|
|
|
'number' => $value['number'],
|
|
|
+ 'title' => $tmp['title'],
|
|
|
+ 'code' => $tmp['code'] ?? '',
|
|
|
+ 'size' => $tmp['size'] ?? '',
|
|
|
+ 'unit' => $tmp['unit'] ?? 0,
|
|
|
+ 'bar_code' => $tmp['bar_code'] ?? '',
|
|
|
+ 'cost' => $tmp['cost'] ?? 0,
|
|
|
+ 'depart_price' => $tmp['depart_price'] ?? 0,
|
|
|
+ 'retail_price' => $tmp['retail_price'] ?? 0,
|
|
|
'mark' => $value['mark'] ?? '',
|
|
|
'crt_time' => $time,
|
|
|
];
|
|
@@ -250,6 +278,12 @@ class SalesOrderService extends Service
|
|
|
SalesOrderProductInfo::where('del_time',0)
|
|
|
->where('sales_order_id',$data['id'])
|
|
|
->update(['del_time' => time()]);
|
|
|
+ SalesOrderRange::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$data['id'])
|
|
|
+ ->update(['del_time' => time()]);
|
|
|
+ SalesOrderOtherFee::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$data['id'])
|
|
|
+ ->update(['del_time' => time()]);
|
|
|
|
|
|
DB::commit();
|
|
|
}catch (\Exception $exception){
|
|
@@ -270,7 +304,7 @@ class SalesOrderService extends Service
|
|
|
$sales = $sales->toArray();
|
|
|
$customer = Customer::where('id',$sales['customer_id'])->value('title');
|
|
|
$sales['customer_title'] = $customer;
|
|
|
- $sales['employee_one'] = $sales['employee_two'] = $sales['employee_three'] = $sales['product'] = [];
|
|
|
+ $sales['employee_one'] = $sales['employee_two'] = $sales['employee_three'] = $sales['product'] = $sales['dispatch_depart_one'] = $sales['dispatch_employee'] = $sales['dispatch_depart_two'] = [];
|
|
|
$array = [
|
|
|
$sales['order_type'],
|
|
|
$sales['deal_type'],
|
|
@@ -307,7 +341,7 @@ class SalesOrderService extends Service
|
|
|
foreach ($sales_info as $value){
|
|
|
$tmp = [
|
|
|
'id' => $value['employee_id'],
|
|
|
- 'name' => $emp_map[$value['employee_id']],
|
|
|
+ 'name' => $emp_map[$value['employee_id']] ?? '',
|
|
|
];
|
|
|
if($value['type'] == SalesOrderInfo::type_one){
|
|
|
$sales['employee_one'][] = $tmp;
|
|
@@ -320,30 +354,45 @@ class SalesOrderService extends Service
|
|
|
|
|
|
$sales_p_info = SalesOrderProductInfo::where('del_time',0)
|
|
|
->where('sales_order_id',$sales['id'])
|
|
|
- ->select('id','sales_order_id','product_id','mark','price','number')
|
|
|
- ->get()->toArray();
|
|
|
- $pro = Product::whereIn('id',array_column($sales_p_info,'product_id'))
|
|
|
- ->select('bar_code','code','cost','depart_price','size','title','id')
|
|
|
->get()->toArray();
|
|
|
- $pro = array_column($pro,null,'id');
|
|
|
foreach ($sales_p_info as $value){
|
|
|
- $p = $pro[$value['product_id']] ?? [];
|
|
|
- $sales['product'][] = [
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'mark' => $value['mark'],
|
|
|
- 'retail_price' => $value['price'],
|
|
|
- 'number' => $value['number'],
|
|
|
- 'bar_code' => $p['bar_code'] ?? '',
|
|
|
- 'code' => $p['code'] ?? '',
|
|
|
- 'cost' => $p['cost'] ?? 0,
|
|
|
- 'depart_price' => $p['depart_price'] ?? 0,
|
|
|
- 'size' => $p['size'] ?? '',
|
|
|
- 'title' => $p['title'] ?? '',
|
|
|
- ];
|
|
|
+ $sales['product'][] = $value;
|
|
|
}
|
|
|
$sales['crt_name'] = $emp_map[$sales['crt_id']] ?? '';
|
|
|
$sales['crt_time'] = $sales['crt_time'] ? date("Y-m-d H:i:s",$sales['crt_time']): '';
|
|
|
|
|
|
+ //派单后数据
|
|
|
+ $range = SalesOrderRange::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$data['id'])
|
|
|
+ ->get()->toArray();
|
|
|
+ $emp_map = Employee::whereIn('id',array_unique(array_column($range,'employee_id')))
|
|
|
+ ->pluck('emp_name','id')
|
|
|
+ ->toArray();
|
|
|
+ $depart_map = Depart::whereIn('id',array_unique(array_column($range,'depart_id')))
|
|
|
+ ->pluck('title','id')
|
|
|
+ ->toArray();
|
|
|
+ foreach ($range as $value){
|
|
|
+ if($value['type'] == SalesOrderRange::type_one){
|
|
|
+ $tmp = [
|
|
|
+ 'id' => $value['depart_id'],
|
|
|
+ 'name' => $depart_map[$value['depart_id']],
|
|
|
+ ];
|
|
|
+ $sales['dispatch_depart_one'][] = $tmp;
|
|
|
+ }elseif ($value['type'] == SalesOrderRange::type_two){
|
|
|
+ $tmp = [
|
|
|
+ 'id' => $value['employee_id'],
|
|
|
+ 'name' => $emp_map[$value['employee_id']] ?? '',
|
|
|
+ ];
|
|
|
+ $sales['dispatch_employee'][] = $tmp;
|
|
|
+ }elseif ($value['type'] == SalesOrderRange::type_three){
|
|
|
+ $tmp = [
|
|
|
+ 'id' => $value['employee_id'],
|
|
|
+ 'name' => $depart_map[$value['depart_id']],
|
|
|
+ ];
|
|
|
+ $sales['dispatch_depart_two'][] = $tmp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return [true, $sales];
|
|
|
}
|
|
|
|
|
@@ -353,6 +402,26 @@ class SalesOrderService extends Service
|
|
|
->select('title','id','sales_order_type','model_type','order_number','selling_price','vin_no','car_type','order_type','deal_type','customer_id','sign_time','contract_state','crt_id','crt_time','mark','product_total','rate','construction_time','handover_time','expire_time','other_fee','discount_fee','contract_fee','contract_type','pay_way','send_state','logistics_company','logistics_number','car_type','year','mileage','color','original_set','processing','state')
|
|
|
->orderby('id', 'desc');
|
|
|
|
|
|
+ if($user['id'] != Employee::SPECIAL_ADMIN){
|
|
|
+ //单据中选择的签订负责协同人
|
|
|
+ $sales_order_id = SalesOrderInfo::where('del_time',0)
|
|
|
+ ->where('employee_id',$user['id'])
|
|
|
+ ->select('sales_order_id')
|
|
|
+ ->get()->toArray();
|
|
|
+ $sales_order_id = array_unique(array_column($sales_order_id,'sales_order_id'));
|
|
|
+
|
|
|
+ //指派后
|
|
|
+ $user_id = $user['id'];
|
|
|
+ $depart_id = $user['depart_range'];
|
|
|
+ $sales_order_id2 = SalesOrderRange::where('del_time',0)
|
|
|
+ ->where(function ($query) use($user_id, $depart_id) {
|
|
|
+ $query->where('employee_id',$user_id)
|
|
|
+ ->orWhereIn('depart_id', $depart_id);
|
|
|
+ })->select('sales_order_id')->get()
|
|
|
+ ->toArray();
|
|
|
+ $sales_order_id = array_unique(array_merge_recursive($sales_order_id,array_column($sales_order_id2,'sales_order_id')));
|
|
|
+ $model->whereIn('id',$sales_order_id);
|
|
|
+ }
|
|
|
if(! empty($data['sales_order_type'])) $model->where('sales_order_type',$data['sales_order_type']);
|
|
|
if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
|
|
|
if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);
|
|
@@ -369,6 +438,7 @@ class SalesOrderService extends Service
|
|
|
$model->where('crt_time','<=',$end);
|
|
|
}
|
|
|
}
|
|
|
+ if(! empty($data['add_construction'])) $model->where('state','>=',SalesOrder::State_two);
|
|
|
|
|
|
$list = $this->limit($model,'',$data);
|
|
|
$list = $this->fillData($list,$data);
|
|
@@ -471,31 +541,19 @@ class SalesOrderService extends Service
|
|
|
->pluck('title','id')
|
|
|
->toArray();
|
|
|
|
|
|
- $product = [];
|
|
|
+ $product = $fee = [];
|
|
|
if(! empty($ergs['product'])){
|
|
|
$sales_p_info = SalesOrderProductInfo::where('del_time',0)
|
|
|
->where('sales_order_id',array_column($data['data'],'id'))
|
|
|
- ->select('id','sales_order_id','product_id','mark','price','number')
|
|
|
- ->get()->toArray();
|
|
|
- $pro = Product::whereIn('id',array_column($sales_p_info,'product_id'))
|
|
|
- ->select('bar_code','code','cost','depart_price','size','title','id')
|
|
|
->get()->toArray();
|
|
|
- $pro = array_column($pro,null,'id');
|
|
|
foreach ($sales_p_info as $value){
|
|
|
- $p = $pro[$value['product_id']] ?? [];
|
|
|
- $tmp = [
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'mark' => $value['mark'],
|
|
|
- 'retail_price' => $value['price'],
|
|
|
- 'number' => $value['number'],
|
|
|
- 'bar_code' => $p['bar_code'] ?? '',
|
|
|
- 'code' => $p['code'] ?? '',
|
|
|
- 'cost' => $p['cost'] ?? 0,
|
|
|
- 'depart_price' => $p['depart_price'] ?? 0,
|
|
|
- 'size' => $p['size'] ?? '',
|
|
|
- 'title' => $p['title'] ?? '',
|
|
|
- ];
|
|
|
- $product[$value['sales_order_id']][] = $tmp;
|
|
|
+ $product[$value['sales_order_id']][] = $value;
|
|
|
+ }
|
|
|
+ $sales_o_info = SalesOrderOtherFee::where('del_time',0)
|
|
|
+ ->where('sales_order_id',array_column($data['data'],'id'))
|
|
|
+ ->get()->toArray();
|
|
|
+ foreach ($sales_o_info as $value){
|
|
|
+ $fee[$value['sales_order_id']][] = $value;
|
|
|
}
|
|
|
}
|
|
|
foreach ($data['data'] as $key => $value){
|
|
@@ -512,6 +570,8 @@ class SalesOrderService extends Service
|
|
|
$data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
|
|
|
$data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
|
|
|
$data['data'][$key]['product'] = $product[$value['id']] ?? [];
|
|
|
+ $data['data'][$key]['fee'] = $fee[$value['id']] ?? [];
|
|
|
+ $data['data'][$key]['state_name'] = SalesOrder::$state[$value['state']] ?? '';
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
@@ -527,12 +587,136 @@ class SalesOrderService extends Service
|
|
|
return [true, ['order_number' => $order_number]];
|
|
|
}
|
|
|
|
|
|
- public function salesOrderDispatch($data){
|
|
|
-// list($status,$msg)
|
|
|
+ public function salesOrderDispatchSale($data){
|
|
|
+ list($status,$msg) = $this->salesOrderDispatchSaleRule($data);
|
|
|
+ if(! $status) return [false,$msg];
|
|
|
+
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
|
|
|
+ 'state' => SalesOrder::State_one
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ SalesOrderRange::where('del_time',0)->where('sales_order_id',$msg['id'])->update([
|
|
|
+ 'del_time' => $time
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if(! empty($data['dispatch_depart_one'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['dispatch_depart_one'] as $value){
|
|
|
+ $insert[] = [
|
|
|
+ 'sales_order_id' => $msg['id'],
|
|
|
+ 'depart_id' => $value,
|
|
|
+ 'type' => SalesOrderRange::type_one,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ SalesOrderRange::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(! empty($data['dispatch_employee'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['dispatch_employee'] as $value){
|
|
|
+ $insert[] = [
|
|
|
+ 'sales_order_id' => $msg['id'],
|
|
|
+ 'employee_id' => $value,
|
|
|
+ 'type' => SalesOrderRange::type_two,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ SalesOrderRange::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true,''];
|
|
|
}
|
|
|
|
|
|
- public function salesOrderDispatchRule($data){
|
|
|
+ public function salesOrderDispatchSaleRule($data){
|
|
|
+ if(empty($data['id'])) return [false,'请选择合同派单'];
|
|
|
+ $sale = SalesOrder::where('del_time',0)
|
|
|
+ ->where('id',$data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($sale)) return [false,'合同不存在或已被删除'];
|
|
|
+ if($sale['state'] > SalesOrder::State_one) return [false,'请确认合同状态,操作失败'];
|
|
|
+ $sale = $sale->toArray();
|
|
|
+
|
|
|
+ if(empty($data['dispatch_depart_one']) && empty($data['dispatch_employee'])) return [false, '请指派部门或人员'];
|
|
|
+
|
|
|
+ return [true, $sale];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function salesOrderDispatchCompany($data){
|
|
|
+ list($status,$msg) = $this->salesOrderDispatchCompanyRule($data);
|
|
|
+ if(! $status) return [false,$msg];
|
|
|
+
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ SalesOrder::where('del_time',0)->where('id',$msg['id'])->update([
|
|
|
+ 'state' => SalesOrder::State_two
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ SalesOrderRange::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$msg['id'])
|
|
|
+ ->where('type',SalesOrderRange::type_three)
|
|
|
+ ->update(['del_time' => $time]);
|
|
|
+ SalesOrderOtherFee::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$msg['id'])
|
|
|
+ ->update(['del_time' => $time]);
|
|
|
+ if(! empty($data['dispatch_depart_two'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['dispatch_depart_two'] as $value){
|
|
|
+ $insert[] = [
|
|
|
+ 'sales_order_id' => $msg['id'],
|
|
|
+ 'depart_id' => $value,
|
|
|
+ 'type' => SalesOrderRange::type_three,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ SalesOrderRange::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(! empty($data['other_fee_1'])){
|
|
|
+ $model = new SalesOrderOtherFee();
|
|
|
+ $model->sales_order_id = $msg['id'];
|
|
|
+ $model->other_fee_1 = $data['other_fee_1'] ?? 0;
|
|
|
+ $model->save();
|
|
|
+ }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$exception->getMessage()];
|
|
|
+ }
|
|
|
|
|
|
return [true,''];
|
|
|
}
|
|
|
+
|
|
|
+ public function salesOrderDispatchCompanyRule($data){
|
|
|
+ if(empty($data['id'])) return [false,'请选择合同派单'];
|
|
|
+ $sale = SalesOrder::where('del_time',0)
|
|
|
+ ->where('id',$data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($sale)) return [false,'合同不存在或已被删除'];
|
|
|
+ if($sale['state'] > SalesOrder::State_two) return [false,'请确认合同状态,操作失败'];
|
|
|
+ $sale = $sale->toArray();
|
|
|
+
|
|
|
+ $bool = Construction::where('del_time',0)
|
|
|
+ ->where('sales_order_id',$data['id'])
|
|
|
+ ->exists();
|
|
|
+ if(! $bool) return [false,'合同已下施工,操作失败'];
|
|
|
+
|
|
|
+ if(empty($data['dispatch_depart_two'])) return [false, '请指派总社或分社'];
|
|
|
+ if(empty($value['other_fee_1'])) return [false,'价格不能为空'];
|
|
|
+ $res = $this->checkNumber($value['other_fee_1']);
|
|
|
+ if(! $res) return [false,'价格请输入不超过两位小数并且大于0的数值'];
|
|
|
+
|
|
|
+ return [true, $sale];
|
|
|
+ }
|
|
|
}
|