|
@@ -19,6 +19,7 @@ use App\Model\OaSub;
|
|
|
use App\Model\OaSubEmployee;
|
|
|
use App\Model\OaSubReportEmployee;
|
|
|
use App\Model\OaSubRule;
|
|
|
+use App\Model\PurchaseOrderSpecial;
|
|
|
use App\Model\RollFilm;
|
|
|
use App\Model\RollFilmCombine;
|
|
|
use App\Model\RollFilmCompany;
|
|
@@ -419,55 +420,114 @@ class OaService extends Service
|
|
|
$order_no = $data['order_number'];
|
|
|
$type = isset($data['opt_case']) ? $data['opt_case'] : 0;
|
|
|
|
|
|
- //特殊的审批
|
|
|
- $list = Oa::from('oa as o')
|
|
|
- ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
|
|
|
- ->select('os.sort', 'os.type', 'os.sub_id')
|
|
|
- ->where('o.del_time', 0)
|
|
|
- ->where('o.sub_type', 2)
|
|
|
- ->where('os.del_time', 0)
|
|
|
- ->where('o.menu_id', $menu_id);
|
|
|
- if (!empty($type)) $list = $list->where('os.sort', 1);
|
|
|
- $list = $list->orderBy('os.sort')->get()->toArray();
|
|
|
- if(empty($list)){
|
|
|
- $list = Oa::from('oa as o')
|
|
|
- ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
|
|
|
- ->select('os.sort', 'os.type', 'os.sub_id')
|
|
|
- ->where('o.del_time', 0)
|
|
|
- ->where('os.del_time', 0)
|
|
|
- ->where('o.channel', $this->user['depart_top'][0]['depart_id'])
|
|
|
- ->where('o.menu_id', $menu_id);
|
|
|
- if (!empty($type)) $list = $list->where('os.sort', 1);
|
|
|
- $list = $list->orderBy('os.sort')->get()->toArray();
|
|
|
- }
|
|
|
-
|
|
|
- if (empty($list)) {
|
|
|
- list($parent_status,$parent_msg) = $this->returnOa($order_no, 1, $type);
|
|
|
- if(!$parent_status) return [false, $parent_msg];
|
|
|
- return [true, ''];
|
|
|
- }
|
|
|
+ //如果是虚拟采购单 自动生成
|
|
|
+ if($menu_id == PurchaseOrderSpecial::menu_id){
|
|
|
+ list($status, $msg) = $this->createPurchaseSpecial($data);
|
|
|
+ return [$status, $msg];
|
|
|
+ }else{
|
|
|
|
|
|
- try {
|
|
|
- DB::beginTransaction();
|
|
|
+ //获取工作流
|
|
|
+ $list = $this->getOaProcess($menu_id);
|
|
|
|
|
|
- list($employee_ids, $oa_sub_id,$order_detail) = $this->oaCommon($menu_id, ['order_number' => $orderObject], 1,0,$this->user);
|
|
|
- if (empty($employee_ids)) {
|
|
|
+ //不存在直接审核通过
|
|
|
+ if(empty($list)){
|
|
|
list($parent_status,$parent_msg) = $this->returnOa($order_no, 1, $type);
|
|
|
- if(!$parent_status) {
|
|
|
- DB::rollBack();
|
|
|
- return [false, $parent_msg];
|
|
|
+ if(!$parent_status) return [false, $parent_msg];
|
|
|
+ return [true, ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+
|
|
|
+ list($employee_ids, $oa_sub_id,$order_detail) = $this->oaCommon($menu_id, ['order_number' => $orderObject], 1,0,$this->user);
|
|
|
+ if (empty($employee_ids)) {
|
|
|
+ list($parent_status,$parent_msg) = $this->returnOa($order_no, 1, $type);
|
|
|
+ if(!$parent_status) {
|
|
|
+ DB::rollBack();
|
|
|
+ return [false, $parent_msg];
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ DB::commit();
|
|
|
+ return [true, '审核成功'];
|
|
|
+ }
|
|
|
}
|
|
|
- else{
|
|
|
- DB::commit();
|
|
|
- return [true, '审核成功'];
|
|
|
+
|
|
|
+ $order = new OaOrder();
|
|
|
+ $order->menu_id = $menu_id;
|
|
|
+ $order->order_no = $order_no;
|
|
|
+ $order->opt_case = $type;
|
|
|
+ $order->channel = $this->user['depart_top'][0]['depart_id'];
|
|
|
+ $order->save();
|
|
|
+ $id = $order->id;
|
|
|
+
|
|
|
+ $oa_order_sub = new OaOrderSub();
|
|
|
+ $oa_order_sub->oa_order_id = $id;
|
|
|
+ $oa_order_sub->sort = 1;
|
|
|
+ $oa_order_sub->remark = '';
|
|
|
+ $oa_order_sub->type = 1;
|
|
|
+ $oa_order_sub->oa_sub_id = $oa_sub_id;
|
|
|
+ $oa_order_sub->save();
|
|
|
+ $oa_order_sub_id = $oa_order_sub->id;
|
|
|
+
|
|
|
+ //组织数据
|
|
|
+ $insert = $send_data = [];
|
|
|
+ $emp_map = Employee::whereIn('id',$employee_ids)->pluck('emp_name','id')->toArray();
|
|
|
+ $sys_menu = SysMenu::where('id', $menu_id)->value('title') ?? "";
|
|
|
+ foreach ($employee_ids as $employee_id) {
|
|
|
+ $emp_tmp = $emp_map[$employee_id] ?? "";
|
|
|
+ $send_data[] = [
|
|
|
+ 'employee_id' => $employee_id,
|
|
|
+ 'type' => 1,
|
|
|
+ 'state' => 0,
|
|
|
+ 'menu_id' => $menu_id,
|
|
|
+ 'order_number' => $order_detail['order_number'],
|
|
|
+ 'tmp_data' => [
|
|
|
+ $order_detail['order_number'],
|
|
|
+ $order_detail['crt_name'].'('.$sys_menu.')',
|
|
|
+ $emp_tmp,
|
|
|
+ date('Y-m-d H:i:s'),
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+ $insert[] = [
|
|
|
+ 'oa_order_id' => $id,
|
|
|
+ 'oa_order_sub_id' => $oa_order_sub_id,
|
|
|
+ 'employee_id' => $employee_id,
|
|
|
+ ];
|
|
|
}
|
|
|
+ OaOrderSubEmployee::insert($insert);
|
|
|
+ DB::commit();
|
|
|
+
|
|
|
+ //发送消息
|
|
|
+ $this->sendWxOaCheckMessage($send_data);
|
|
|
+
|
|
|
+ return [true, '']; //success
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ DB::rollBack();
|
|
|
+ $this->returnOa($order_no, 2, $type);
|
|
|
+ return [false, $e->getFile() . ':' .$e->getLine() . ':' . $e->getMessage()];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function createPurchaseSpecial($data){
|
|
|
+ try {
|
|
|
+ $order = $data['order'] ?? [];
|
|
|
+
|
|
|
+ $depart = Depart::where('id', $order['supplier'])->first();
|
|
|
+ if(empty($depart) || empty($depart->notify_id)) {
|
|
|
+ //不存在直接审核通过
|
|
|
+ list($parent_status,$parent_msg) = $this->returnOa($data['order_number'], 1, $data['opt_case']);
|
|
|
+ if(!$parent_status) return [false, $parent_msg];
|
|
|
+ return [true, ''];
|
|
|
}
|
|
|
+ $employee_ids = [$depart->notify_id];
|
|
|
+
|
|
|
+ DB::beginTransaction();
|
|
|
|
|
|
$order = new OaOrder();
|
|
|
- $order->menu_id = $menu_id;
|
|
|
- $order->order_no = $order_no;
|
|
|
- $order->opt_case = $type;
|
|
|
- $order->channel = $this->user['depart_top'][0]['depart_id'];
|
|
|
+ $order->menu_id = $data['menu_id'];
|
|
|
+ $order->order_no = $data['order_number'];
|
|
|
+ $order->opt_case = $data['opt_case'];
|
|
|
$order->save();
|
|
|
$id = $order->id;
|
|
|
|
|
@@ -476,25 +536,25 @@ class OaService extends Service
|
|
|
$oa_order_sub->sort = 1;
|
|
|
$oa_order_sub->remark = '';
|
|
|
$oa_order_sub->type = 1;
|
|
|
- $oa_order_sub->oa_sub_id = $oa_sub_id;
|
|
|
+ $oa_order_sub->oa_sub_id = 0;
|
|
|
$oa_order_sub->save();
|
|
|
$oa_order_sub_id = $oa_order_sub->id;
|
|
|
|
|
|
//组织数据
|
|
|
$insert = $send_data = [];
|
|
|
$emp_map = Employee::whereIn('id',$employee_ids)->pluck('emp_name','id')->toArray();
|
|
|
- $sys_menu = SysMenu::where('id', $menu_id)->value('title') ?? "";
|
|
|
+ $sys_menu = SysMenu::where('id', $data['menu_id'])->value('title') ?? "";
|
|
|
foreach ($employee_ids as $employee_id) {
|
|
|
$emp_tmp = $emp_map[$employee_id] ?? "";
|
|
|
$send_data[] = [
|
|
|
'employee_id' => $employee_id,
|
|
|
'type' => 1,
|
|
|
'state' => 0,
|
|
|
- 'menu_id' => $menu_id,
|
|
|
- 'order_number' => $order_detail['order_number'],
|
|
|
+ 'menu_id' => $data['menu_id'],
|
|
|
+ 'order_number' => $data['order_number'],
|
|
|
'tmp_data' => [
|
|
|
- $order_detail['order_number'],
|
|
|
- $order_detail['crt_name'].'('.$sys_menu.')',
|
|
|
+ $data['order_number'],
|
|
|
+ "系统生成".'('.$sys_menu.')',
|
|
|
$emp_tmp,
|
|
|
date('Y-m-d H:i:s'),
|
|
|
],
|
|
@@ -506,19 +566,47 @@ class OaService extends Service
|
|
|
];
|
|
|
}
|
|
|
OaOrderSubEmployee::insert($insert);
|
|
|
+
|
|
|
DB::commit();
|
|
|
|
|
|
//发送消息
|
|
|
$this->sendWxOaCheckMessage($send_data);
|
|
|
|
|
|
- return [true, '']; //success
|
|
|
+ return [true, ''];
|
|
|
} catch (\Exception $e) {
|
|
|
DB::rollBack();
|
|
|
- $this->returnOa($order_no, 2, $type);
|
|
|
+ $this->returnOa($data['order_number'], 2, $data['opt_case']);
|
|
|
return [false, $e->getFile() . ':' .$e->getLine() . ':' . $e->getMessage()];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //获取工作流
|
|
|
+ public function getOaProcess($menu_id){
|
|
|
+ //特殊的审批
|
|
|
+ $list = Oa::from('oa as o')
|
|
|
+ ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
|
|
|
+ ->select('os.sort', 'os.type', 'os.sub_id')
|
|
|
+ ->where('o.del_time', 0)
|
|
|
+ ->where('o.sub_type', 2)
|
|
|
+ ->where('os.del_time', 0)
|
|
|
+ ->where('o.menu_id', $menu_id);
|
|
|
+ if (!empty($type)) $list = $list->where('os.sort', 1);
|
|
|
+ $list = $list->orderBy('os.sort')->get()->toArray();
|
|
|
+ if(empty($list)){
|
|
|
+ $list = Oa::from('oa as o')
|
|
|
+ ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
|
|
|
+ ->select('os.sort', 'os.type', 'os.sub_id')
|
|
|
+ ->where('o.del_time', 0)
|
|
|
+ ->where('os.del_time', 0)
|
|
|
+ ->where('o.channel', $this->user['depart_top'][0]['depart_id'])
|
|
|
+ ->where('o.menu_id', $menu_id);
|
|
|
+ if (!empty($type)) $list = $list->where('os.sort', 1);
|
|
|
+ $list = $list->orderBy('os.sort')->get()->toArray();
|
|
|
+ }
|
|
|
+
|
|
|
+ return $list;
|
|
|
+ }
|
|
|
+
|
|
|
public function oaCommon($menu_id, $param, $sort = 1, $parent_id = 0,$user='')
|
|
|
{
|
|
|
//创建request副本对象 没有参数让检索出来的数据为空数组
|
|
@@ -885,31 +973,51 @@ class OaService extends Service
|
|
|
$user_id = $user['id'];
|
|
|
$order_no = $data['order_no'];
|
|
|
$menu_id = $data['menu_id'];
|
|
|
- //特殊的审批
|
|
|
- $oa_id = Oa::where('menu_id',$menu_id)->where('del_time', 0)->where('sub_type',2)->exists();
|
|
|
- if($oa_id){
|
|
|
- $detail = OaOrder::where('order_no', $order_no)
|
|
|
- ->orderBy('id', 'desc')
|
|
|
- ->where('menu_id', $menu_id)
|
|
|
- ->first();
|
|
|
+
|
|
|
+ if($menu_id == PurchaseOrderSpecial::menu_id){
|
|
|
+ //虚拟采购单
|
|
|
+ list($status, $msg) = $this->oaOrderStatePurchase($data,$user);
|
|
|
+ return [$status, $msg];
|
|
|
}else{
|
|
|
- $detail = OaOrder::where('order_no', $order_no)
|
|
|
- ->where('channel',$this->user['depart_top'][0]['depart_id'])
|
|
|
- ->orderBy('id', 'desc')
|
|
|
- ->where('menu_id', $menu_id)
|
|
|
- ->first();
|
|
|
+ //特殊的审批
|
|
|
+ $oa_id = Oa::where('menu_id',$menu_id)->where('del_time', 0)->where('sub_type',2)->exists();
|
|
|
+ if($oa_id){
|
|
|
+ $detail = OaOrder::where('order_no', $order_no)
|
|
|
+ ->orderBy('id', 'desc')
|
|
|
+ ->where('menu_id', $menu_id)
|
|
|
+ ->first();
|
|
|
+ }else{
|
|
|
+ $detail = OaOrder::where('order_no', $order_no)
|
|
|
+ ->where('channel',$this->user['depart_top'][0]['depart_id'])
|
|
|
+ ->orderBy('id', 'desc')
|
|
|
+ ->where('menu_id', $menu_id)
|
|
|
+ ->first();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($detail)) return [true, ['state' => 0]];
|
|
|
+ if ($detail->state == 2) return [true, ['state' => 0]];
|
|
|
+ $oa_detail = OaOrderSubEmployee::where('employee_id', $user_id)->where('oa_order_id', $detail->id)->pluck('oa_order_sub_id')->toArray();
|
|
|
+ if (empty($oa_detail)) return [true, ['state' => 0]];
|
|
|
+ $state = OaOrderSub::wherein('id', $oa_detail)->where('state', '<>', 2)->orderBy('sort', 'desc')->first();
|
|
|
+ if (in_array($state->state, [0, 2])) return [true, ['state' => 1, 'id' => $state->id]];
|
|
|
+
|
|
|
+ return [true, ['state' => 0]];
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ public function oaOrderStatePurchase($data,$user){
|
|
|
+ $detail = OaOrder::where('order_no', $data['order_no'])
|
|
|
+ ->orderBy('id', 'desc')
|
|
|
+ ->where('menu_id', $data['menu_id'])
|
|
|
+ ->first();
|
|
|
if (empty($detail)) return [true, ['state' => 0]];
|
|
|
if ($detail->state == 2) return [true, ['state' => 0]];
|
|
|
- $oa_detail = OaOrderSubEmployee::where('employee_id', $user_id)->where('oa_order_id', $detail->id)->pluck('oa_order_sub_id')->toArray();
|
|
|
+ $oa_detail = OaOrderSubEmployee::where('employee_id', $user['id'])->where('oa_order_id', $detail->id)->pluck('oa_order_sub_id')->toArray();
|
|
|
if (empty($oa_detail)) return [true, ['state' => 0]];
|
|
|
- $state = OaOrderSub::wherein('id', $oa_detail)->where('state', '<>', 2)->orderBy('sort', 'desc')->first();
|
|
|
+ $state = OaOrderSub::whereIn('id', $oa_detail)->where('state', '<>', 2)->orderBy('sort', 'desc')->first();
|
|
|
if (in_array($state->state, [0, 2])) return [true, ['state' => 1, 'id' => $state->id]];
|
|
|
|
|
|
return [true, ['state' => 0]];
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
public function checkAllOver($data)
|