|
|
@@ -7,6 +7,8 @@ use App\Model\Order;
|
|
|
use App\Model\OrderDetails;
|
|
|
use App\Model\Reminder;
|
|
|
use App\Model\ReminderDetails;
|
|
|
+use App\Model\ReminderRecord;
|
|
|
+use App\Model\ReminderRecordDetails;
|
|
|
use App\Model\TodoList;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
@@ -332,21 +334,34 @@ class OrderService extends Service
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private function getDetail1($id){
|
|
|
+ private function getDetail1($id, $user = []){
|
|
|
+ $customer_supply_id = $user['id'] ?? 0;
|
|
|
+
|
|
|
$data = ReminderDetails::from('reminder_details as a')
|
|
|
->leftJoin('customer_supply as b','b.id','a.customer_supply_id')
|
|
|
->where('a.del_time',0)
|
|
|
->where('a.reminder_id', $id)
|
|
|
- ->select('a.customer_supply_id','a.is_main','b.title')
|
|
|
+ ->when(! empty($customer_supply_id), function ($query) use ($customer_supply_id) {
|
|
|
+ return $query->where('a.customer_supply_id', $customer_supply_id);
|
|
|
+ })
|
|
|
+ ->select('a.customer_supply_id','a.is_main','b.title','a.status')
|
|
|
->get()->toArray();
|
|
|
|
|
|
- $unit = [];
|
|
|
+ $unit = $unit2 = [];
|
|
|
foreach ($data as $value){
|
|
|
- $unit[] = [
|
|
|
- 'customer_supply_id' => $value['customer_supply_id'],
|
|
|
- 'is_main' => $value['is_main'],
|
|
|
- ];
|
|
|
+ if(! empty($customer_supply_id)) {
|
|
|
+ $unit2 = [
|
|
|
+ 'status' => $value['status'],
|
|
|
+ ];
|
|
|
+ }else{
|
|
|
+ $unit[] = [
|
|
|
+ 'customer_supply_id' => $value['customer_supply_id'],
|
|
|
+ 'customer_supply_title' => $value['title'],
|
|
|
+ 'is_main' => $value['is_main'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
}
|
|
|
+ if(! empty($unit2)) return $unit2;
|
|
|
|
|
|
$detail = [
|
|
|
'details' => $unit,
|
|
|
@@ -409,6 +424,9 @@ class OrderService extends Service
|
|
|
$details = $this->getDetail1($data['id']);
|
|
|
$customer = array_merge($customer, $details);
|
|
|
|
|
|
+ $details_s = $this->getDetailOut($data);
|
|
|
+ $customer['cd_details'] = $details_s;
|
|
|
+
|
|
|
return [true, $customer];
|
|
|
}
|
|
|
|
|
|
@@ -542,6 +560,16 @@ class OrderService extends Service
|
|
|
return date('YmdHis',time()) . rand(1000,9999);
|
|
|
}
|
|
|
|
|
|
+ public function reminderSendWx($data, $user){
|
|
|
+ if(empty($data['id'])) return [false, 'ID不能为空'];
|
|
|
+
|
|
|
+ $customer = Reminder::where('del_time',0)
|
|
|
+ ->whereIn('id',$data['id'])
|
|
|
+ ->get()->toArray();
|
|
|
+ if(empty($customer)) return [false,'催单数据不存在或已被删除'];
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
//催单管理---------------------------------------------
|
|
|
|
|
|
|
|
|
@@ -729,4 +757,201 @@ class OrderService extends Service
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
+
|
|
|
+ public function reminderDetail2($data, $user){
|
|
|
+ if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
|
|
|
+ $customer = Reminder::where('del_time',0)
|
|
|
+ ->where('id',$data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($customer)) return [false,'催单不存在或已被删除'];
|
|
|
+ $customer = $customer->toArray();
|
|
|
+ $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('emp_name');
|
|
|
+ $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
|
|
|
+ $customer['order_time'] = $customer['order_time'] ? date("Y-m-d",$customer['order_time']): '';
|
|
|
+ $customer['lt_arrived_time'] = $customer['lt_arrived_time'] ? date("Y-m-d",$customer['lt_arrived_time']): '';
|
|
|
+ $customer['tl_arrived_time'] = $customer['tl_arrived_time'] ? date("Y-m-d",$customer['tl_arrived_time']): '';
|
|
|
+ $customer['df_type_title'] = Reminder::$df_type_name[$customer['df_type']] ?? "";
|
|
|
+ $customer['rule_title'] = Reminder::$rule_name[$customer['rule']] ?? "";
|
|
|
+ $customer['status_title'] = Reminder::$status_name[$customer['status']] ?? "";
|
|
|
+
|
|
|
+ $details_status = $this->getDetail1($data['id'], $user);
|
|
|
+ $customer['reminder_detail_status'] = $details_status['status'];
|
|
|
+
|
|
|
+ $details_s = $this->getDetailOut($data, $user);
|
|
|
+ $customer['cd_details'] = $details_s;
|
|
|
+
|
|
|
+ return [true, $customer];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function getDetailOut($data, $user = []){
|
|
|
+ $user_id = $user['id'] ?? 0;
|
|
|
+
|
|
|
+ $record = ReminderRecord::where('del_time',0)
|
|
|
+ ->where('reminder_id',$data['id'])
|
|
|
+ ->when(! empty($user_id), function ($query) use ($user_id) {
|
|
|
+ return $query->where('crt_id', $user_id);
|
|
|
+ })
|
|
|
+ ->select('id','crt_id','tl_type','crt_time','tl_result','tl_ways')
|
|
|
+ ->orderby('id','desc')
|
|
|
+ ->get()->toArray();
|
|
|
+
|
|
|
+ $record_detail = ReminderRecordDetails::where('del_time',0)
|
|
|
+ ->whereIn('reminder_record_id',array_column($record,'id'))
|
|
|
+ ->select('reminder_record_id','quantity','tl_time')
|
|
|
+ ->get()->toArray();
|
|
|
+ $record_detail_map = [];
|
|
|
+ foreach ($record_detail as $value){
|
|
|
+ $record_detail_map[$value['reminder_record_id']][] = [
|
|
|
+ 'quantity' => $value['quantity'],
|
|
|
+ 'tl_time' => date("Y-m-d", $value['tl_time']),
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ $emp_2 = (new CustomerSupplyService())->getEmployeeMap(array_unique(array_column($record,'crt_id')));
|
|
|
+ foreach ($record as $key => $value){
|
|
|
+ $record[$key]['crt_name'] = $emp_2[$value['crt_id']] ?? "";
|
|
|
+ $record[$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']): '';
|
|
|
+ $record[$key]['tl_type_title'] = ReminderRecord::$tl_type_name[$value['tl_type']] ?? "";
|
|
|
+ $record[$key]['tl_ways_title'] = ReminderRecord::$tl_way_name[$value['tl_ways']] ?? "";
|
|
|
+ $record[$key]['tl_result_title'] = ReminderRecord::$tl_result_name[$value['tl_result']] ?? "";
|
|
|
+ $record[$key]['details'] = $record_detail_map[$value['id']] ?? (object)[];
|
|
|
+ }
|
|
|
+
|
|
|
+ return $record ?? (object)[];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function reminderSave($data, $user){
|
|
|
+ list($status, $msg) = $this->reminderSaveRule($data, $user);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ list($reminder, $reminder_details) = $msg;
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ $reminder_details->status = ReminderDetails::status_one;
|
|
|
+ $reminder_details->save();
|
|
|
+
|
|
|
+ $time = time();
|
|
|
+ $model = new ReminderRecord();
|
|
|
+ $model->reminder_id = $reminder->id;
|
|
|
+ $model->tl_type = $data['tl_type'];
|
|
|
+ $model->tl_result = $data['tl_result'];
|
|
|
+ $model->tl_ways = $data['tl_ways'];
|
|
|
+ $model->crt_id = $user['id'];
|
|
|
+ $model->save();
|
|
|
+
|
|
|
+ if(! empty($data['details'])){
|
|
|
+ $insert = [];
|
|
|
+ foreach ($data['details'] as $value){
|
|
|
+ $insert[] = [
|
|
|
+ 'reminder_record_id' => $model->id,
|
|
|
+ 'quantity' => $value['quantity'],
|
|
|
+ 'tl_time' => $value['tl_time'],
|
|
|
+ 'crt_time' => $time,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if(! empty($insert)) ReminderRecordDetails::insert($insert);
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->updateReminderStatus($reminder);
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function reminderSaveRule(&$data, $user){
|
|
|
+ if(empty($data['id'])) return [false, '催单id不能为空'];
|
|
|
+ $reminder = Reminder::where('del_time',0)
|
|
|
+ ->where('id', $data['id'])
|
|
|
+ ->first();
|
|
|
+ if(empty($reminder)) return [false, '催单不存在或已被删除'];
|
|
|
+ list($status,$msg) = $this->limitingSendRequestBackgExpire("reminderSave" . $reminder->id);
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+ if($reminder->status == Reminder::status_one) return [false, '催单已完成,提交失败'];
|
|
|
+ if($reminder->status == Reminder::status_two) return [false, '催单已结束,提交失败'];
|
|
|
+ if(empty($data['tl_type'])) return [false, '提拉类型不能为空'];
|
|
|
+ if(! isset(ReminderRecord::$tl_type_name[$data['tl_type']])) return [false, '提拉类型错误'];
|
|
|
+ if(empty($data['tl_result'])) return [false, '提拉结果不能为空'];
|
|
|
+ if(isset(ReminderRecord::$tl_result_name[$data['tl_result']])) return [false, '提拉结果错误'];
|
|
|
+ if($data['tl_result'] == ReminderRecord::tl_result_one){
|
|
|
+ if(empty($data['tl_ways'])) return [false, '提拉方式不能为空'];
|
|
|
+ if(isset(ReminderRecord::$tl_way_name[$data['tl_ways']])) return [false, '提拉方式错误'];
|
|
|
+ if(empty($data['details'])) return [false, '结果明细不能为空'];
|
|
|
+ foreach ($data['details'] as $key => $value){
|
|
|
+ $res = $this->checkNumber($value['quantity'],2,'positive');
|
|
|
+ if(! $res['valid']) return [false,'提拉应答数量:' . $res['error']];
|
|
|
+ if(empty($value['tl_time'])) return [false, '提拉应答日期不能为空'];
|
|
|
+ $data['details'][$key]['tl_time'] = $this->changeDateToDate($value['tl_time']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $order = ReminderDetails::where('del_time',0)
|
|
|
+ ->where('reminder_id', $data['id'])
|
|
|
+ ->where('customer_supply_id', $user['id'])
|
|
|
+ ->first();
|
|
|
+ if(! $order) return [false, '该人员不在本次催单供应商人员内容'];
|
|
|
+ if($order->status) return [false, '催单信息已回复,请勿重复操作'];
|
|
|
+
|
|
|
+ return [true, [$reminder, $order]];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function updateReminderStatus($reminder)
|
|
|
+ {
|
|
|
+ if (empty($reminder)) return;
|
|
|
+
|
|
|
+ $reminder_id = $reminder->id;
|
|
|
+
|
|
|
+ // 查询主要人员
|
|
|
+ $main_users = ReminderDetails::where('reminder_id', $reminder_id)
|
|
|
+ ->where('is_main', ReminderDetails::is_main_one)
|
|
|
+ ->pluck('customer_supply_id')
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ // 查询主要人员的最新回复结果
|
|
|
+ $records = ReminderRecord::where('reminder_id', $reminder_id)
|
|
|
+ ->whereIn('crt_id', $main_users)
|
|
|
+ ->orderBy('id', 'desc')
|
|
|
+ ->get()
|
|
|
+ ->groupBy('crt_id')
|
|
|
+ ->map(function ($items) {
|
|
|
+ return $items->first(); // 每人最新一次回复
|
|
|
+ });
|
|
|
+
|
|
|
+ // 如果主要人员都还没回复,不更新
|
|
|
+ if ($records->isEmpty()) return;
|
|
|
+
|
|
|
+ // 统计回复结果
|
|
|
+ $agree_count = $records->where('tl_result', ReminderRecord::tl_result_one)->count();
|
|
|
+ $reject_count = $records->where('tl_result', ReminderRecord::tl_result_two)->count();
|
|
|
+ $total_main = count($main_users);
|
|
|
+
|
|
|
+ // 当前规则判断
|
|
|
+ $new_status = null;
|
|
|
+
|
|
|
+ if ($reminder->rule == Reminder::rule_one) {
|
|
|
+ // 与规则:全同意 -> 1;有一人不同意 -> 2
|
|
|
+ if ($reject_count > 0) {
|
|
|
+ $new_status = Reminder::status_two; // 结束
|
|
|
+ } elseif ($agree_count == $total_main) {
|
|
|
+ $new_status = Reminder::status_one; // 完成
|
|
|
+ }
|
|
|
+ } elseif ($reminder->rule == Reminder::rule_two) {
|
|
|
+ // 或规则:任意同意 -> 1;全不同意 -> 2
|
|
|
+ if ($agree_count > 0) {
|
|
|
+ $new_status = Reminder::status_one; // 完成
|
|
|
+ } elseif ($reject_count == $total_main) {
|
|
|
+ $new_status = Reminder::status_two; // 结束
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新状态
|
|
|
+ if ($new_status !== null && $reminder->status != $new_status) {
|
|
|
+ $reminder->status = $new_status;
|
|
|
+ $reminder->save();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|