|
@@ -2,7 +2,20 @@
|
|
|
|
|
|
namespace App\Service;
|
|
|
|
|
|
+use App\Model\BasicType;
|
|
|
+use App\Model\Construction;
|
|
|
+use App\Model\ConstructionProductInfo;
|
|
|
+use App\Model\Customer;
|
|
|
+use App\Model\CustomerInfo;
|
|
|
+use App\Model\Product;
|
|
|
+use App\Model\ProductCategory;
|
|
|
+use App\Model\ProductSnInfo;
|
|
|
+use App\Model\ReturnExchangeOrder;
|
|
|
+use App\Model\ReturnExchangeOrderProductInfo;
|
|
|
+use App\Model\SalesOrder;
|
|
|
+use App\Model\SalesOrderProductInfo;
|
|
|
use App\Model\TSpaceSet;
|
|
|
+use App\Model\Warranty;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class TSpaceService extends Service
|
|
@@ -27,12 +40,11 @@ class TSpaceService extends Service
|
|
|
$insert = $update = $new = $old = $id = [];
|
|
|
foreach ($data['data'] as $value){
|
|
|
$text = "";
|
|
|
- if(! empty($value['text'])) $text = json_encode($data['text']);
|
|
|
+ if(! empty($value['text'])) $text = json_encode($value['text']);
|
|
|
if(! empty($value['id'])){
|
|
|
$file = $set_map[$value['id']] ?? "";
|
|
|
if($value['file'] != $file){
|
|
|
$old[] = $file;
|
|
|
- }else{
|
|
|
$new[] = $value['file'];
|
|
|
}
|
|
|
$update[] = [
|
|
@@ -100,10 +112,768 @@ class TSpaceService extends Service
|
|
|
->where('type', $data['type'])
|
|
|
->select('file', 'id', 'text')
|
|
|
->get()->toArray();
|
|
|
+ $fileUploadService = new FileUploadService();
|
|
|
foreach ($set as $key => $value){
|
|
|
if(! empty($value['text'])) $set[$key]['text'] = json_decode($value['text'], true);
|
|
|
+ $url = "";
|
|
|
+ if(! empty($value['file'])) $url = $fileUploadService->getFileShow($value['file']);
|
|
|
+ $set[$key]['file_url'] = $url;
|
|
|
}
|
|
|
|
|
|
return [true, $set];
|
|
|
}
|
|
|
+
|
|
|
+ public function tSpacelist($data){
|
|
|
+ if(empty($data['type'])){
|
|
|
+ $type = [];
|
|
|
+ }else{
|
|
|
+ if(! is_array($data['type'])){
|
|
|
+ $type = [$data['type']];
|
|
|
+ }else{
|
|
|
+ $type = $data['type'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $set = TSpaceSet::where('del_time',0)
|
|
|
+ ->when(! empty($type), function ($query) use ($type) {
|
|
|
+ return $query->whereIn('type',$type);
|
|
|
+ })
|
|
|
+ ->select('file', 'id', 'text', 'type')
|
|
|
+ ->get()->toArray();
|
|
|
+ $fileUploadService = new FileUploadService();
|
|
|
+ foreach ($set as $key => $value){
|
|
|
+ if(! empty($value['text'])) $set[$key]['text'] = json_decode($value['text'], true);
|
|
|
+ $url = "";
|
|
|
+ if(! empty($value['file'])) $url = $fileUploadService->getFileShow($value['file']);
|
|
|
+ $set[$key]['file_url'] = $url;
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, $set];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function warrantyGetProduct($data, $user){
|
|
|
+ if(empty($data['sale_order_id'])) return [false, '合同ID不能为空'];
|
|
|
+ $return = $this->warrantyGetProductList($data, $user);
|
|
|
+
|
|
|
+ return [true, $return];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function warrantyGetProductList($data, $user){
|
|
|
+ $return = [];
|
|
|
+ $data_id = $data['sale_order_id'];
|
|
|
+
|
|
|
+ //销售订单对应产品总数
|
|
|
+ $product = SalesOrderProductInfo::from('sales_order_product_info as a')
|
|
|
+ ->join('product as b','a.product_id','b.id')
|
|
|
+ ->where('a.del_time',0)
|
|
|
+ ->where('a.sales_order_id', $data_id)
|
|
|
+ ->where('b.warranty_time', '>', 0)
|
|
|
+ ->select('a.number','a.product_id','b.product_category')
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($product)) return $return;
|
|
|
+ $product_id = array_column($product,'product_id');
|
|
|
+ $map = (new ProductService())->getProductDetail($product_id);
|
|
|
+
|
|
|
+ //合同质保产品
|
|
|
+ $sn_product = ProductSnInfo::where("del_time",0)
|
|
|
+ ->where('data_id', $data_id)
|
|
|
+ ->where('type',ProductSnInfo::type_two)
|
|
|
+ ->whereIn('product_id',$product_id)
|
|
|
+ ->select('product_id')
|
|
|
+ ->get()->toArray();
|
|
|
+ $product_map1 = [];
|
|
|
+ foreach ($sn_product as $value){
|
|
|
+ $key = $value['product_id'];
|
|
|
+
|
|
|
+ if(isset($product_map1[$key])){
|
|
|
+ $number = bcadd(1, $product_map1[$key],2);
|
|
|
+ $product_map1[$key] = $number;
|
|
|
+ }else{
|
|
|
+ $product_map1[$key] = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //合同退货产品
|
|
|
+ $product_map2 = [];
|
|
|
+ $return_id = ReturnExchangeOrder::where('del_time',0)
|
|
|
+ ->where('type', ReturnExchangeOrder::Order_type)
|
|
|
+ ->where('model_type', ReturnExchangeOrder::Model_type_one)
|
|
|
+ ->where('data_id', $data_id)
|
|
|
+ ->select('id')
|
|
|
+ ->get()->toArray();
|
|
|
+ $save2 = ReturnExchangeOrderProductInfo::where('del_time',0)
|
|
|
+ ->whereIn('return_exchange_id', array_column($return_id,'id'))
|
|
|
+ ->where('return_or_exchange',ReturnExchangeOrderProductInfo::type_one)
|
|
|
+ ->select('number', 'return_exchange_id','product_id')
|
|
|
+ ->get()->toArray();
|
|
|
+ foreach ($save2 as $value){
|
|
|
+ $key = $value['product_id'];
|
|
|
+ if(isset($product_map2[$key])){
|
|
|
+ $number = bcadd($value['number'], $product_map2[$key],2);
|
|
|
+ $product_map2[$key] = $number;
|
|
|
+ }else{
|
|
|
+ $product_map2[$key] = $value['number'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($product as $value){
|
|
|
+ $category = json_decode($value['product_category'],true);
|
|
|
+ //车窗膜不管数量算一个
|
|
|
+ if(in_array(ProductCategory::Special_for_sn, $category)) $value['number'] = 1;
|
|
|
+
|
|
|
+ //合同质保产品
|
|
|
+ $p1 = $product_map1[$value['product_id']] ?? 0;
|
|
|
+ //合同退货产品
|
|
|
+ $p2 = $product_map2[$value['product_id']] ?? 0;
|
|
|
+ $number = bcsub($value['number'], $p1,2);
|
|
|
+ $number = bcsub($number, $p2,2);
|
|
|
+ if($number <= 0) continue;
|
|
|
+ $tmp = $map[$value['product_id']] ?? [];
|
|
|
+
|
|
|
+ $return[] = [
|
|
|
+ 'number' => $number, //可出数量
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
+ 'title' => $tmp['title'] ?? "",
|
|
|
+ 'code' => $tmp['code'] ?? "",
|
|
|
+ 'size' => $tmp['size'] ?? "",
|
|
|
+ 'unit' => $tmp['unit'] ?? "",
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $return;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function warrantyAdd($data, $user){
|
|
|
+ list($status, $msg) = $this->warrantyAddRule($data,$user);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ list($warranty, $sn) = $msg;
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ Warranty::insert($warranty);
|
|
|
+
|
|
|
+ if(! empty($sn)){
|
|
|
+ $warranty_list = Warranty::where('del_time',0)
|
|
|
+ ->whereIn("sn",$sn)
|
|
|
+ ->select('id','sn')
|
|
|
+ ->get()->toArray();
|
|
|
+ foreach ($warranty_list as $value){
|
|
|
+ ProductSnInfo::where('del_time',0)
|
|
|
+ ->where('sn', $value['sn'])
|
|
|
+ ->update(['warranty_id' => $value['id']]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// if($data['type'] == ProductSnInfo::type_two){
|
|
|
+// //同一个合同,多次填写的客户基本信息按最后一次更新为主
|
|
|
+// Warranty::where('del_time',0)
|
|
|
+// ->where('data_id',$data['data_id'])
|
|
|
+// ->where('type', $data['type'])
|
|
|
+// ->update(['customer_name' => $data['customer_name'], 'customer_contact' => $data['customer_contact']]);
|
|
|
+// }
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function warrantyAddRule($data, $user){
|
|
|
+ if(empty($data['type'])) return [false, 'type不能为空'];
|
|
|
+ if(! isset(ProductSnInfo::$type_name[$data['type']])) return [false,'type不存在'];
|
|
|
+ if(empty($data['data_id'])) return [false, 'data_id不能为空'];
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ $warranty = $sn_update = [];
|
|
|
+ if($data['type'] == ProductSnInfo::type_one){
|
|
|
+ $order = Construction::where('del_time',0)->where('id',$data['data_id'])->first();
|
|
|
+ if(empty($order)) return [false, '施工单不存在或已被删除'];
|
|
|
+ $order = $order->toArray();
|
|
|
+ if($order['state'] != Construction::STATE_FOUR) return [false, '施工单暂未完结,生成质保信息失败'];
|
|
|
+ if(empty($order['vin_no'])) return [false, '车架号不能为空'];
|
|
|
+ $bool = $this->isValidVin($order['vin_no']);
|
|
|
+ if(! $bool) return [false, '车架号错误,请查看原施工单车架号,编辑输入完整车架号'];
|
|
|
+ if(empty($order['customer_id'])) return [false, '客户信息不存在'];
|
|
|
+ $customer = Customer::where('del_time', 0)->where('id',$order['customer_id'])->first();
|
|
|
+ if(empty($customer)) return [false, '客户不存在或已被删除'];
|
|
|
+ $customer = $customer->toArray();
|
|
|
+ $info = CustomerInfo::where('del_time',0)
|
|
|
+ ->where('type',CustomerInfo::type_one)
|
|
|
+ ->where('customer_id', $customer['id'])
|
|
|
+ ->where('contact_info', "<>", "")
|
|
|
+ ->select('contact_info')
|
|
|
+ ->first();
|
|
|
+ if(empty($info)) return [false, "客户的联系方式不能为空"];
|
|
|
+ $info = $info->toArray();
|
|
|
+ $customer_info = $info['contact_info'];
|
|
|
+
|
|
|
+ $product_sn = ProductSnInfo::from('product_sn_info as a')
|
|
|
+ ->leftJoin('product as b','b.id','a.product_id')
|
|
|
+ ->select('a.*','b.title','b.warranty_time')
|
|
|
+ ->where('a.del_time',0)
|
|
|
+ ->where('a.data_id',$data['data_id'])
|
|
|
+ ->where('a.type', ProductSnInfo::type_one)
|
|
|
+ ->where('a.warranty_id', 0)
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($product_sn)) return [false, '施工单暂无未生成质保信息的sn码'];
|
|
|
+
|
|
|
+ $construction_site = BasicType::where('id',$order['install_position'])->value('title') ?? "";
|
|
|
+ //质保单数据 需要更新的sn码信息
|
|
|
+ foreach ($product_sn as $value){
|
|
|
+ $warranty[] = [
|
|
|
+ 'data_id' => $order['id'],
|
|
|
+ 'data_title' => $order['order_number'],
|
|
|
+ 'type' => ProductSnInfo::type_one,
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
+ 'code' => $value['code'],
|
|
|
+ 'title' => $value['title'],
|
|
|
+ 'sn' => $value['sn'],
|
|
|
+ 'customer_id' => $order['customer_id'],
|
|
|
+ 'customer_name' => $customer['title'],
|
|
|
+ 'customer_contact' => $customer_info,
|
|
|
+ 'vin_no' => $order['vin_no'],
|
|
|
+ 'warranty_time' => $value['warranty_time'],
|
|
|
+ 'construction_site_title' => $construction_site,
|
|
|
+ 'start_time' => $order['end_time'],
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'crt_id' => $user['id'],
|
|
|
+ ];
|
|
|
+ $sn_update[] = $value['sn'];
|
|
|
+ }
|
|
|
+ }elseif($data['type'] == ProductSnInfo::type_two){
|
|
|
+ $order = SalesOrder::where('del_time',0)->where('id',$data['data_id'])->first();
|
|
|
+ if(empty($order)) return [false, '合同不存在或已被删除'];
|
|
|
+ $order = $order->toArray();
|
|
|
+ if(empty($order['customer_id'])) return [false, '客户不能为空'];
|
|
|
+ $customer_name = Customer::where('id', $order['customer_id'])->value('title');
|
|
|
+ if(empty($order['customer_contact'])) return [false, '客户联系方式不能为空'];
|
|
|
+ $product = (new SalesOrderService())->getSalesProductForWarranty($data['data_id']);
|
|
|
+ if(empty($product)) return [false, '合同已全部或暂无可生成质保信息的产品'];
|
|
|
+ foreach ($product as $value){
|
|
|
+ for($i = 0 ;$i < $value['number']; $i++){
|
|
|
+ $warranty[] = [
|
|
|
+ 'data_id' => $order['id'],
|
|
|
+ 'data_title' => $order['order_number'],
|
|
|
+ 'type' => ProductSnInfo::type_two,
|
|
|
+ 'product_id' => $value['product_id'],
|
|
|
+ 'code' => $value['code'],
|
|
|
+ 'title' => $value['title'],
|
|
|
+ 'sn' => "",
|
|
|
+ 'customer_id' => $order['customer_id'],
|
|
|
+ 'customer_name' => $customer_name,
|
|
|
+ 'customer_contact' => $order['customer_contact'],
|
|
|
+ 'vin_no' => "",
|
|
|
+ 'warranty_time' => $value['warranty_time'],
|
|
|
+ 'construction_site_title' => "",
|
|
|
+ 'start_time' => $time,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'crt_id' => $user['id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ return [false, '质保生成类型错误'];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, [$warranty, $sn_update]];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function ori()
|
|
|
+ {//生成质保 合同原来的代码
|
|
|
+ $order = SalesOrder::where('del_time', 0)->where('id', $data['data_id'])->first();
|
|
|
+ if (empty($order)) return [false, '合同不存在或已被删除'];
|
|
|
+ $order = $order->toArray();
|
|
|
+ if (empty($data['customer_name'])) return [false, '客户名称不能为空'];
|
|
|
+ if (empty($data['customer_contact'])) return [false, '客户联系方式不能为空'];
|
|
|
+ $bool = $this->isValidMobile($data['customer_contact']);
|
|
|
+ if (!$bool) return [false, '手机号错误,请输入完整的手机号'];
|
|
|
+ $vin_no = "";
|
|
|
+ if (!empty($data['vin_no'])) {
|
|
|
+ $bool = $this->isValidVin($data['vin_no']);
|
|
|
+ if (!$bool) return [false, '车架号错误,请填写完整车架号'];
|
|
|
+ $vin_no = $data['vin_no'];
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($data['product'])) return [false, '合同无生成质保的产品信息'];
|
|
|
+ $product = (new SalesOrderService())->getSalesProductForWarranty($data['data_id']);
|
|
|
+ if (empty($product)) return [false, '合同暂无能生成质保信息的产品'];
|
|
|
+ foreach ($data['product'] as $value) {
|
|
|
+ $tmp = $product[$value['product_id']] ?? [];
|
|
|
+ if (empty($tmp)) return [false, '存在不能生成质保的产品'];
|
|
|
+ if ($tmp['number'] > $value['number']) return [false, '产品编码:' . $tmp['code'] . '本次可生成质保信息的产品最多' . $tmp['number']];
|
|
|
+
|
|
|
+ $warranty[] = [
|
|
|
+ 'data_id' => $order['id'],
|
|
|
+ 'data_title' => $order['order_number'],
|
|
|
+ 'type' => ProductSnInfo::type_two,
|
|
|
+ 'product_id' => $tmp['product_id'],
|
|
|
+ 'code' => $tmp['code'],
|
|
|
+ 'title' => $tmp['title'],
|
|
|
+ 'sn' => "",
|
|
|
+ 'customer_id' => $order['customer_id'],
|
|
|
+ 'customer_name' => $data['customer_name'],
|
|
|
+ 'customer_contact' => $data['customer_contact'],
|
|
|
+ 'vin_no' => $vin_no,
|
|
|
+ 'warranty_time' => $tmp['warranty_time'],
|
|
|
+ 'construction_site_title' => "",
|
|
|
+ 'start_time' => $time,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'crt_id' => $user['id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function saveWarrantyByMyself($data){
|
|
|
+ list($status, $msg) = $this->saveWarrantyByMyselfRule($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ list($warranty, $sn) = $msg;
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ $warranty_id = DB::table('warranty')->insertGetId($warranty);
|
|
|
+ $sn['warranty_id'] = $warranty_id;
|
|
|
+ ProductSnInfo::insert($sn);
|
|
|
+
|
|
|
+ (new DataSyncToU8Service())->updateByVinNo($data);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function saveWarrantyByMyselfRule($data){
|
|
|
+ if(empty($data['product_id'])) return [false, '产品ID不能为空'];
|
|
|
+ $product = Product::where('del_time',0)
|
|
|
+ ->where('id',$data['product_id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($product)) return [false, '产品不存在或已被删除'];
|
|
|
+ $product = $product->toArray();
|
|
|
+ if(empty($data['start_time'])) return [false, '施工日期不能为空'];
|
|
|
+ if(empty($product['warranty_time'])) return [false, '质保时长不能为空'];
|
|
|
+ if(empty($data['sn'])) return [false, '产品序列号不能为空'];
|
|
|
+ list($status, $msg) = (new DataSyncToU8Service())->snForWarranty($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ //校验sn是否被占用
|
|
|
+ $submit_info[] = $product['code'] . $data['sn'];
|
|
|
+ list($status, $msg) = (new DataSyncToU8Service())->snForCheck([$product['code']], [$data['sn']], $submit_info);
|
|
|
+ if(! $status) return [false, "产品序列号:" . $data['sn'] . "已存在于门店系统"];
|
|
|
+
|
|
|
+ if(empty($data['customer_name'])) return [false, '客户名称不能为空'];
|
|
|
+ if(empty($data['customer_contact'])) return [false, '客户联系方式不能为空'];
|
|
|
+ $bool = $this->isValidMobile($data['customer_contact']);
|
|
|
+ if(! $bool) return [false, '手机号错误,请填写完整的11位手机号'];
|
|
|
+ if(empty($data['vin_no'])) return [false, '车架号不能为空'];
|
|
|
+ $bool = $this->isValidVin($data['vin_no']);
|
|
|
+ if(! $bool) return [false, '车架号错误,请填写完整的17位车架号'];
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ //质保单数据 sn码数据
|
|
|
+ $warranty = [
|
|
|
+ 'data_id' => 0,
|
|
|
+ 'data_title' => '',
|
|
|
+ 'type' => ProductSnInfo::type_three,
|
|
|
+ 'product_id' => $product['id'],
|
|
|
+ 'code' => $product['code'],
|
|
|
+ 'title' => $product['title'],
|
|
|
+ 'sn' => $data['sn'],
|
|
|
+ 'customer_id' => 0,
|
|
|
+ 'customer_name' => $data['customer_name'],
|
|
|
+ 'customer_contact' => $data['customer_contact'],
|
|
|
+ 'vin_no' => $data['vin_no'],
|
|
|
+ 'warranty_time' => $product['warranty_time'],
|
|
|
+ 'construction_site_title' => $data['construction_site_title'] ?? "",
|
|
|
+ 'start_time' => $data['start_time'],
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'crt_id' => 0,
|
|
|
+ 'is_active' => Warranty::type_one,
|
|
|
+ ];
|
|
|
+ $sn_update = [
|
|
|
+ 'data_id' => 0,
|
|
|
+ 'type' => ProductSnInfo::type_three,
|
|
|
+ 'product_id' => $product['id'],
|
|
|
+ 'code' => $product['code'],
|
|
|
+ 'sn' => $data['sn'],
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'warranty_id' => 0,
|
|
|
+ ];
|
|
|
+
|
|
|
+ return [true, [$warranty, $sn_update]];
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取未激活列表
|
|
|
+ public function getWarrantyNotActiveList($data){
|
|
|
+ if(empty($data['customer_contact'])) return [false, '手机号不能为空'];
|
|
|
+
|
|
|
+ $model = Warranty::where('del_time',0)
|
|
|
+ ->where('customer_contact',$data['customer_contact'])
|
|
|
+ ->where('is_active',Warranty::type_zero)
|
|
|
+ ->whereIn('type',[ProductSnInfo::type_one, ProductSnInfo::type_two])
|
|
|
+ ->select('id','data_id','data_title','type','product_id','title','sn','customer_name','customer_contact','vin_no','warranty_time','construction_site_title','start_time');
|
|
|
+
|
|
|
+ $list = $this->limit($model,'', $data);
|
|
|
+ $list = $this->fillGetWarrantyNotActiveList($list);
|
|
|
+
|
|
|
+ return [true, $list];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function fillGetWarrantyNotActiveList($data){
|
|
|
+ if(empty($data['data'])) return $data;
|
|
|
+
|
|
|
+ foreach ($data['data'] as $key => $value){
|
|
|
+ $data['data'][$key]['start_time'] = $value['start_time'] ? date('Y-m-d',$value['start_time']) : '';
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ //质保激活
|
|
|
+ public function warrantyActivationCustomer($data){
|
|
|
+ list($status, $msg) = $this->warrantyActivationCustomerRule($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ $order = $msg;
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ if($order['type'] == ProductSnInfo::type_two){
|
|
|
+ $update = [
|
|
|
+ 'sn' => $data['sn'] ?? '',
|
|
|
+ 'construction_site_title' => $data['construction_site_title'] ?? '',
|
|
|
+ 'vin_no' => $data['vin_no'],
|
|
|
+ 'is_active' => Warranty::type_one
|
|
|
+ ];
|
|
|
+ Warranty::where('id',$data['id'])->update($update);
|
|
|
+
|
|
|
+ if(! empty($data['sn'])){
|
|
|
+ $order = Warranty::where('id',$data['id'])->first()->toArray();
|
|
|
+
|
|
|
+ $sn_update = [
|
|
|
+ 'data_id' => $order['data_id'],
|
|
|
+ 'type' => $order['type'],
|
|
|
+ 'product_id' => $order['product_id'],
|
|
|
+ 'code' => $order['code'],
|
|
|
+ 'sn' => $order['sn'],
|
|
|
+ 'crt_time' => time(),
|
|
|
+ 'warranty_id' => $order['id'],
|
|
|
+ ];
|
|
|
+ ProductSnInfo::insert($sn_update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ (new DataSyncToU8Service())->updateByVinNo($data);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function warrantyActivationCustomerRule($data){
|
|
|
+ if(empty($data['id'])) return [false, '质保ID不能为空'];
|
|
|
+ $order = Warranty::where('del_time',0)
|
|
|
+ ->where('id', $data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($order)) return [false, '质保卡不存在或已被删除'];
|
|
|
+ $order = $order->toArray();
|
|
|
+ if($order['is_active'] > Warranty::type_zero) return [false, '质保卡已激活,请勿重复操作'];
|
|
|
+
|
|
|
+ if(empty($data['customer_name'])) return [false, '车主姓名不能为空'];
|
|
|
+ if(empty($data['customer_contact'])) return [false, '联系方式不能为空'];
|
|
|
+ if(empty($data['vin_no'])) return [false, '车架号不能为空'];
|
|
|
+ if($order['type'] == ProductSnInfo::type_one){
|
|
|
+ }else{
|
|
|
+ if(! empty($data['sn'])){
|
|
|
+ list($status, $msg) = (new DataSyncToU8Service())->snForWarranty($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ $submit_info[] = $order['code'] . $data['sn'];
|
|
|
+ list($status, $msg) = (new DataSyncToU8Service())->snForCheck([$order['code']], [$data['sn']], $submit_info);
|
|
|
+ if(! $status) return [false, "产品序列号:" . $data['sn'] . "已存在于门店系统"];
|
|
|
+ }
|
|
|
+
|
|
|
+ $bool = $this->isValidVin($data['vin_no']);
|
|
|
+ if(! $bool) return [false, '车架号错误,请填写完整车架号'];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, $order];
|
|
|
+ }
|
|
|
+
|
|
|
+ //后台列表
|
|
|
+ public function warrantyList($data,$user){
|
|
|
+ $model = Warranty::where('del_time',0)
|
|
|
+ ->select('id','data_id','data_title','code','type','product_id','title','sn','customer_name','customer_contact','vin_no','warranty_time','construction_site_title','start_time','crt_id','is_active','active_id')
|
|
|
+ ->orderBy('id','desc');
|
|
|
+
|
|
|
+ if(! empty($data['type'])) $model->where('type', $data['type']);
|
|
|
+ if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
|
|
|
+ if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
|
|
|
+ if(! empty($data['data_title'])) $model->where('data_title', 'LIKE', '%'.$data['data_title'].'%');
|
|
|
+ if(! empty($data['sn'])) $model->where('sn', 'LIKE', '%'.$data['sn'].'%');
|
|
|
+ if(! empty($data['customer_name'])) $model->where('customer_name', 'LIKE', '%'.$data['customer_name'].'%');
|
|
|
+ if(! empty($data['customer_contact'])) $model->where('customer_contact', 'LIKE', '%'.$data['customer_contact'].'%');
|
|
|
+ if(! empty($data['vin_no'])) $model->where('vin_no', 'LIKE', '%'.$data['vin_no'].'%');
|
|
|
+ if(! empty($data['construction_site_title'])) $model->where('construction_site_title', 'LIKE', '%'.$data['construction_site_title'].'%');
|
|
|
+ if(! empty($data['warranty_time'])) $model->where('warranty_time', $data['warranty_time']);
|
|
|
+ if(isset($data['is_active'])) $model->where('is_active', $data['is_active']);
|
|
|
+ if(! empty($data['crt_id'])) $model->where('crt_id', $data['crt_id']);
|
|
|
+ if(! empty($data['id'])) $model->where('id', $data['id']);
|
|
|
+
|
|
|
+ $list = $this->limit($model,'', $data);
|
|
|
+ $list = $this->fillWarrantyList($list);
|
|
|
+
|
|
|
+ return [true, $list];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function fillWarrantyList($data){
|
|
|
+ if(empty($data['data'])) return $data;
|
|
|
+
|
|
|
+ foreach ($data['data'] as $key => $value){
|
|
|
+ $data['data'][$key]['start_time'] = $value['start_time'] ? date('Y-m-d',$value['start_time']) : '';
|
|
|
+ $data['data'][$key]['type_title'] = ProductSnInfo::$type_name[$value['type']] ?? "";
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ //后台质保编辑以及激活
|
|
|
+ public function warrantyEditAndActivation($data,$user){
|
|
|
+ list($status, $msg) = $this->warrantyEditAndActivationRule($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ $order = $msg;
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ $sn = $data['sn'] ?? "";
|
|
|
+ $order_sn = $order['sn'];
|
|
|
+ if(! empty($order_sn) && ! empty($sn) && $order_sn != $sn){
|
|
|
+ ProductSnInfo::where('del_time',0)
|
|
|
+ ->where('data_id', $order['data_id'])
|
|
|
+ ->where('type', $order['type'])
|
|
|
+ ->where('sn', $order_sn)
|
|
|
+ ->update(['del_time' => $time]);
|
|
|
+ $sn_update = [
|
|
|
+ 'data_id' => $order['data_id'],
|
|
|
+ 'type' => $order['type'],
|
|
|
+ 'product_id' => $order['product_id'],
|
|
|
+ 'code' => $order['code'],
|
|
|
+ 'sn' => $order['sn'],
|
|
|
+ 'crt_time' => time(),
|
|
|
+ 'warranty_id' => $order['id'],
|
|
|
+ ];
|
|
|
+ ProductSnInfo::insert($sn_update);
|
|
|
+ }
|
|
|
+ $update = [
|
|
|
+ 'sn' => $sn,
|
|
|
+ 'construction_site_title' => $data['construction_site_title'] ?? '',
|
|
|
+ 'vin_no' => $data['vin_no'],
|
|
|
+ 'start_time' => $data['start_time'],
|
|
|
+ 'customer_name' => $data['customer_name'],
|
|
|
+ 'customer_contact' => $data['customer_contact'],
|
|
|
+ 'warranty_time' => $data['warranty_time'],
|
|
|
+ ];
|
|
|
+ if(empty($data['is_active'])) {
|
|
|
+ $update['is_active'] = Warranty::type_one;
|
|
|
+ $update['active_id'] = $user['id'];
|
|
|
+ }
|
|
|
+ Warranty::where('id',$data['id'])->update($update);
|
|
|
+
|
|
|
+ (new DataSyncToU8Service())->updateByVinNo($data);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function warrantyEditAndActivationRule(&$data){
|
|
|
+ if(empty($data['id'])) return [false, '质保ID不能为空'];
|
|
|
+ $order = Warranty::where('del_time',0)
|
|
|
+ ->where('id', $data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($order)) return [false, '质保卡不存在或已被删除'];
|
|
|
+ $order = $order->toArray();
|
|
|
+// if(! empty($data['is_active']) && $order['is_active'] > Warranty::type_zero) return [false, '质保卡已激活,请勿重复操作'];
|
|
|
+
|
|
|
+ if(empty($data['start_time'])) return [false, '请填写施工日期/生效日期'];
|
|
|
+ $data['start_time'] = $this->changeDateToDateMin($data['start_time']);
|
|
|
+ if(empty($data['customer_name'])) return [false, '车主姓名不能为空'];
|
|
|
+ if(empty($data['customer_contact'])) return [false, '联系方式不能为空'];
|
|
|
+ if(empty($data['warranty_time'])) return [false, '质保时长(月)不能为空'];
|
|
|
+ if(empty($data['vin_no'])) return [false, '车架号不能为空'];
|
|
|
+ $bool = $this->isValidVin($data['vin_no']);
|
|
|
+ if(! $bool) return [false, '车架号错误,请填写完整车架号'];
|
|
|
+ if(! empty($data['sn'])){
|
|
|
+ list($status, $msg) = (new DataSyncToU8Service())->snForWarranty($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ $submit_info[] = $order['code'] . $data['sn'];
|
|
|
+ $message = [
|
|
|
+ 'id' => $order['data_id'],
|
|
|
+ 'data_type' => $order['type']
|
|
|
+ ];
|
|
|
+ list($status, $msg) = (new DataSyncToU8Service())->snForCheck([$order['code']], [$data['sn']], $submit_info, $message);
|
|
|
+ if(! $status) return [false, "产品序列号:" . $data['sn'] . "已存在于门店系统"];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, $order];
|
|
|
+ }
|
|
|
+
|
|
|
+ //后台质保激活
|
|
|
+ public function warrantyActivation($data,$user){
|
|
|
+ list($status, $msg) = $this->warrantyActivationRule($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ $order = $msg;
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ $update['is_active'] = Warranty::type_one;
|
|
|
+ $update['active_id'] = $user['id'];
|
|
|
+ Warranty::where('id', $data['id'])->update($update);
|
|
|
+
|
|
|
+ (new DataSyncToU8Service())->updateByVinNo($order);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function warrantyActivationRule($data){
|
|
|
+ if(empty($data['id'])) return [false, '质保ID不能为空'];
|
|
|
+ $order = Warranty::where('del_time',0)
|
|
|
+ ->where('id', $data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($order)) return [false, '质保卡不存在或已被删除'];
|
|
|
+ $order = $order->toArray();
|
|
|
+ if(! empty($data['is_active']) && $order['is_active'] > Warranty::type_zero) return [false, '质保卡已激活,请勿重复操作'];
|
|
|
+
|
|
|
+ if(empty($order['start_time'])) return [false, '施工日期/生效日期不能为空'];
|
|
|
+ if(empty($order['customer_name'])) return [false, '车主姓名不能为空'];
|
|
|
+ if(empty($order['customer_contact'])) return [false, '联系方式不能为空'];
|
|
|
+ if(empty($order['warranty_time'])) return [false, '质保时长(月)不能为空'];
|
|
|
+ if(empty($order['vin_no'])) return [false, '车架号不能为空'];
|
|
|
+ $bool = $this->isValidVin($order['vin_no']);
|
|
|
+ if(! $bool) return [false, '车架号错误,请填写完整车架号'];
|
|
|
+
|
|
|
+ return [true, $order];
|
|
|
+ }
|
|
|
+
|
|
|
+ //质保卡作废
|
|
|
+ public function warrantyDel($data,$user){
|
|
|
+ list($status, $msg) = $this->warrantyDelRule($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ $order = $msg;
|
|
|
+ $time = time();
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ Warranty::where('id', $data['id'])->update(['del_time' => $time]);
|
|
|
+
|
|
|
+ if(! empty($order['sn'])) ProductSnInfo::where('del_time',0)->where('sn', $order['sn'])->update(['del_time' => $time]);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Throwable $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function warrantyDelRule($data){
|
|
|
+ if(empty($data['id'])) return [false, '质保ID不能为空'];
|
|
|
+ $order = Warranty::where('del_time',0)
|
|
|
+ ->where('id', $data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($order)) return [false, '质保卡不存在或已被删除'];
|
|
|
+ $order = $order->toArray();
|
|
|
+
|
|
|
+ return [true, $order];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function searchWarranty($data){
|
|
|
+ list($status, $msg) = $this->searchWarrantyRule($data);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ list($search_field, $search) = $msg;
|
|
|
+
|
|
|
+ $order_list = Warranty::where('del_time',0)
|
|
|
+ ->when($search_field == 1, function ($query) use ($search) {
|
|
|
+ return $query->where("customer_contact", $search);
|
|
|
+ })
|
|
|
+ ->when($search_field == 2, function ($query) use ($search) {
|
|
|
+ return $query->where("vin_no", $search);
|
|
|
+ })
|
|
|
+ ->orderBy('id','desc')
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($order_list)) return [true , []];
|
|
|
+ $first = $order_list[0];
|
|
|
+ $order['main'] = [
|
|
|
+ 'customer_name' => $first['customer_name'],
|
|
|
+ 'customer_contact' => $first['customer_contact'],
|
|
|
+ 'vin_no' => $first['vin_no'],
|
|
|
+ ];
|
|
|
+ foreach ($order_list as $key => $value){
|
|
|
+ $order_list[$key]['start_time'] = $value['start_time'] ? date('Y-m-d',$value['start_time']) : '';
|
|
|
+ }
|
|
|
+ $order['list'] = $order_list;
|
|
|
+
|
|
|
+ return [true, $order];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function searchWarrantyRule($data){
|
|
|
+ if(empty($data['from'])) return [false, '查询来源不能为空'];
|
|
|
+ $search = $data['customer_contact_or_vin_no'];
|
|
|
+ if($data['from'] == 1){
|
|
|
+ if(empty($data['customer_contact_or_vin_no'])) return [false, '手机号不能为空'];
|
|
|
+ $length = strlen($data['customer_contact_or_vin_no']);
|
|
|
+ if($length != 11) return [false, '请输入完整的11位手机号'];
|
|
|
+ list($status,$msg) = $this->searchWarrantyCommon($data['customer_contact_or_vin_no']);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ $search_field = 1;
|
|
|
+ }elseif($data['from'] == 2){
|
|
|
+ if(empty($data['customer_contact_or_vin_no'])) return [false, '手机号或车架号不能为空'];
|
|
|
+ $length = strlen($data['customer_contact_or_vin_no']);
|
|
|
+ if($length != 11 && $length != 17) return [false, '请输入完整的11位手机号或完整的17位车架号'];
|
|
|
+ if($length == 11){
|
|
|
+ list($status,$msg) = $this->searchWarrantyCommon($data['customer_contact_or_vin_no']);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ $search_field = 1;
|
|
|
+ }else{
|
|
|
+ $search_field = 2;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ return [false, '查询来源错误'];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, [$search_field, $search]];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function searchWarrantyCommon($customer_contact){
|
|
|
+ $vinCount = Warranty::where('del_time', 0)
|
|
|
+ ->where('customer_contact', $customer_contact)
|
|
|
+ ->whereNotNull('vin_no')
|
|
|
+ ->distinct()
|
|
|
+ ->count('vin_no');
|
|
|
+ if($vinCount > 1) return [false, '手机号:' . $customer_contact . '下有个多个车架号,请去质保查询功能按需查询质保信息'];
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
}
|