ApproveInfoService.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781
  1. <?php
  2. namespace app\common\service;
  3. use app\common\constant\CommonConstant;
  4. use app\common\model\ApplyGoods;
  5. use app\common\model\Approve;
  6. use app\common\model\ApproveCopy;
  7. use app\common\model\ApproveEvectionPeerUser;
  8. use app\common\model\ApproveInfo;
  9. use app\common\model\Department;
  10. use app\common\model\Goods;
  11. use app\common\model\GoodsStock;
  12. use app\common\model\StockGoods;
  13. use app\common\model\User;
  14. use think\Db;
  15. use think\Exception;
  16. /**
  17. * 审批申请服务类
  18. */
  19. class ApproveInfoService
  20. {
  21. /**
  22. * 申请/重新发起
  23. *
  24. * @param integer $id 申请ID
  25. * @param integer $module 模块类型
  26. * @param array $params
  27. * @param mixed $user 用户信息
  28. **/
  29. public static function create($id, $module, $params, $user)
  30. {
  31. $userid = $user['userid'];
  32. // 编辑
  33. if ($id > 0) {
  34. $info = ApproveInfo::field('user_id,is_deleted', true)
  35. ->where('user_id', $userid)
  36. ->where('is_deleted', CommonConstant::IS_DELETED_0)
  37. ->with([
  38. 'moduleInfo'
  39. ])
  40. ->find($id);
  41. if (!$info) {
  42. except('申请记录不存在或已删除');
  43. }
  44. if (!$info->module_info) {
  45. except(CommonConstant::get_module_list()[$module] . '记录不存在或已删除');
  46. }
  47. if ($info->status != CommonConstant::STATUS_4) {
  48. except('非审批驳回状态无法操作');
  49. }
  50. }
  51. $order_no = get_order_sn($user['id']);
  52. $approve_user = $params['approve_user'] ? explode(',', $params['approve_user']) : [];
  53. $copy_user = $params['copy_user'] ? explode(',', $params['copy_user']) : [];
  54. $approve_num = count($approve_user);
  55. $data = [
  56. 'module' => $module,
  57. 'user_id' => $userid,
  58. 'department' => $user['department'],
  59. 'status' => CommonConstant::STATUS_2,
  60. 'approve_num' => $approve_num,
  61. 'cur_num' => 0,
  62. 'order_no' => $order_no,
  63. 'apply_date' => date("Y-m-d"),
  64. 'reason' => $params['reason'],
  65. 'type' => $params['type'],
  66. 'desc' => $params['desc'],
  67. 'start_time' => $params['start_time'],
  68. 'end_time' => $params['end_time'],
  69. 'apply_id' => $params['apply_id'],
  70. ];
  71. Db::startTrans();
  72. try {
  73. if ($id > 0) {
  74. // 编辑审批申请
  75. $save_data = [
  76. 'create_at' => date('Y-m-d H:i:s'),
  77. ];
  78. $data = array_merge($data, $save_data);
  79. $info->save($data);
  80. // 编辑对应模块
  81. self::create_module($id, $module, $params, $info, 'update');
  82. // 编辑审批抄送
  83. self::create_approve($id, $approve_user, $copy_user, 'update');
  84. } else {
  85. // 添加审批申请
  86. $info = ApproveInfo::create($data);
  87. $info_id = $info->id;
  88. // 添加对应模块
  89. $module_data = self::create_module($info_id, $module, $params, [], 'create');
  90. $info->save(['module_id' => $module_data->id]);
  91. // 添加审批抄送
  92. self::create_approve($info_id, $approve_user, $copy_user, 'create');
  93. }
  94. Db::commit();
  95. } catch (Exception $e) {
  96. except('出现错误:' . $e->getMessage(), 2, $e);
  97. }
  98. return true;
  99. }
  100. /**
  101. * 添加对应模块
  102. *
  103. * @param integer $info_id 申请ID
  104. * @param integer $module 模块类型
  105. * @param array $params
  106. * @param mixed $info 申请信息
  107. * @param string $type 类型:create=申请,update=重新发起
  108. **/
  109. public static function create_module($info_id, $module, $params, $info, $type)
  110. {
  111. $data = [];
  112. switch ($module) {
  113. case CommonConstant::MODULE_1:
  114. // 添加申购物品
  115. $res = self::create_goods($info_id, $module, $params['apply_goods'], $type);
  116. $data['info_id'] = $info_id;
  117. $data['reason'] = $params['reason'];
  118. $data['type'] = $params['type'];
  119. // $data['total_amount'] = $params['total_amount'];
  120. $data['total_amount'] = $res['total_amount'];
  121. $data['apply_date'] = $params['apply_date'];
  122. $data['document'] = $params['document'];
  123. $data['images'] = $params['images'];
  124. $data['pay_type'] = $params['pay_type'];
  125. break;
  126. case CommonConstant::MODULE_2:
  127. $data['info_id'] = $info_id;
  128. $data['type'] = $params['type'];
  129. $data['word_size'] = $params['word_size'];
  130. $data['desc'] = $params['desc'];
  131. $data['number'] = $params['number'];
  132. $data['reason'] = $params['reason'];
  133. $data['remark'] = $params['remark'];
  134. $data['document'] = $params['document'];
  135. break;
  136. case CommonConstant::MODULE_3:
  137. // 添加入库物品
  138. self::create_goods($info_id, $module, $params['stock_goods'], $type);
  139. $data['info_id'] = $info_id;
  140. $data['document'] = $params['document'];
  141. $data['images'] = $params['images'];
  142. $data['remark'] = $params['remark'];
  143. break;
  144. case CommonConstant::MODULE_4:
  145. $data['info_id'] = $info_id;
  146. $data['reason'] = $params['reason'];
  147. $data['document'] = $params['document'];
  148. $data['remark'] = $params['remark'];
  149. break;
  150. case CommonConstant::MODULE_5:
  151. // 添加同行人员
  152. self::create_peer_user($info_id, $params['peer_user'], $type);
  153. $data['info_id'] = $info_id;
  154. $data['reason'] = $params['reason'];
  155. $data['start_time'] = $params['start_time'];
  156. $data['end_time'] = $params['end_time'];
  157. $data['document'] = $params['document'];
  158. $data['images'] = $params['images'];
  159. $data['type'] = $params['type'];
  160. $data['is_who'] = $params['is_who'];
  161. $data['remark'] = $params['remark'];
  162. break;
  163. case CommonConstant::MODULE_6:
  164. $data['info_id'] = $info_id;
  165. $data['type'] = $params['type'];
  166. $data['start_time'] = $params['start_time'];
  167. $data['end_time'] = $params['end_time'];
  168. $data['start_am'] = $params['start_am'];
  169. $data['end_am'] = $params['end_am'];
  170. $data['time'] = $params['time'];
  171. $data['reason'] = $params['reason'];
  172. $data['document'] = $params['document'];
  173. $data['remark'] = $params['remark'];
  174. break;
  175. case CommonConstant::MODULE_7:
  176. $data['info_id'] = $info_id;
  177. $data['reason'] = $params['reason'];
  178. $data['start_time'] = $params['start_time'];
  179. $data['reach_address'] = $params['reach_address'];
  180. $data['end_time'] = $params['end_time'];
  181. $data['end_address'] = $params['end_address'];
  182. $data['document'] = $params['document'];
  183. $data['images'] = $params['images'];
  184. break;
  185. case CommonConstant::MODULE_8:
  186. $data['info_id'] = $info_id;
  187. $data['type'] = $params['type'];
  188. $data['reason'] = $params['reason'];
  189. $data['desc'] = $params['desc'];
  190. $data['images'] = $params['images'];
  191. break;
  192. case CommonConstant::MODULE_9:
  193. $data['info_id'] = $info_id;
  194. $data['type'] = $params['type'];
  195. $data['reason'] = $params['reason'];
  196. $data['desc'] = $params['desc'];
  197. $data['number'] = $params['number'];
  198. $data['scope'] = $params['scope'];
  199. $data['legal_opinion'] = $params['legal_opinion'];
  200. $data['document'] = $params['document'];
  201. $data['remark'] = $params['remark'];
  202. break;
  203. case CommonConstant::MODULE_10:
  204. $data['info_id'] = $info_id;
  205. $data['founder'] = $params['founder'];
  206. $data['desc'] = $params['desc'];
  207. $data['serial_number'] = $params['serial_number'];
  208. $data['reason'] = $params['reason'];
  209. $data['apply_date'] = $params['apply_date'];
  210. $data['remark'] = $params['remark'];
  211. $data['degree'] = $params['degree'];
  212. $data['document'] = $params['document'];
  213. break;
  214. case CommonConstant::MODULE_11:
  215. $data['info_id'] = $info_id;
  216. $data['department'] = $params['department'];
  217. $data['reason'] = $params['reason'];
  218. $data['department_sign'] = $params['department_sign'];
  219. $data['remark'] = $params['remark'];
  220. $data['document'] = $params['document'];
  221. $data['desc'] = $params['desc'];
  222. $data['apply_date'] = $params['apply_date'];
  223. $data['serial_number'] = $params['serial_number'];
  224. break;
  225. }
  226. if ($type == 'update') {
  227. $module_result = $info->module_info->save($data);
  228. } else {
  229. $models = CommonConstant::get_module_model_list();
  230. $model = $models[$module];
  231. $module_result = $model::create($data);
  232. }
  233. return $module_result;
  234. }
  235. /**
  236. * 添加申购物品/入库物品
  237. *
  238. * @param integer $info_id 申请ID
  239. * @param integer $module 模块类型:1,3
  240. * @param array $params 申购物品数据
  241. * @param string $type 类型:create=申请,update=重新发起
  242. **/
  243. public static function create_goods($info_id, $module, $params, $type)
  244. {
  245. if (!$params) {
  246. return true;
  247. }
  248. switch ($module) {
  249. case CommonConstant::MODULE_1:
  250. $model = ApplyGoods::class;
  251. break;
  252. case CommonConstant::MODULE_3:
  253. $model = StockGoods::class;
  254. break;
  255. }
  256. if ($type == 'update') {
  257. $model::where('info_id', $info_id)->delete();
  258. }
  259. $goods_ids = [];
  260. $goods_ids_new = [];
  261. $goods_list_new = [];
  262. $total_amount = 0;
  263. foreach ($params as $value) {
  264. if ($value['id'] > 0) {
  265. // 商品库选择
  266. $goods_ids[$value['id']] = $value;
  267. } else {
  268. if ($value['goods_name']) {
  269. // 添加新商品
  270. $goods_ids_new[] = $value;
  271. $goods_info = Goods::field('status,is_deleted,create_at', true)
  272. ->where('goods_category_id', $value['goods_category_id'])
  273. ->where('goods_name', $value['goods_name'])
  274. ->where('is_deleted', CommonConstant::IS_DELETED_0)
  275. ->with([
  276. 'goodsStock',
  277. ])
  278. ->find();
  279. if ($goods_info) {
  280. $goods_list_new[] = $goods_info->toArray();
  281. }
  282. } else {
  283. // 批量导入
  284. }
  285. }
  286. }
  287. // 商品库选择
  288. if ($goods_ids) {
  289. $goods_list = Goods::field('status,is_deleted,create_at', true)
  290. ->where('id', 'in', array_keys($goods_ids))
  291. ->where('is_deleted', CommonConstant::IS_DELETED_0)
  292. ->with([
  293. 'goodsStock',
  294. ])
  295. ->select()
  296. ->toArray();
  297. $goods_object = $goods_list ? array_column($goods_list, null, 'id') : [];
  298. $goods_name = '';
  299. $goods_stock_name = '';
  300. $apply_goods_data = [];
  301. foreach ($goods_ids as $key=>$value) {
  302. if (array_key_exists($value['id'], $goods_object)) {
  303. // 商品库里有该商品
  304. $goods_info = $goods_object[$value['id']];
  305. $goods_stock_info = array_column($goods_info['goods_stock'], null, 'id');
  306. $goods_stock_data = [];
  307. $total_price = 0;
  308. foreach ($value['goods_stock'] as $val) {
  309. if (array_key_exists($val['id'], $goods_stock_info)) {
  310. // 商品库里有该商品规格
  311. $price = isset($val['price']) ? $val['price'] : 0;
  312. $total_price = bcadd($total_price, $price, 2);
  313. $goods_stock_data[] = [
  314. 'id' => $val['id'],
  315. 'goods_id' => $goods_info['id'],
  316. 'name' => $val['name'],
  317. 'price' => $price,
  318. 'stock' => $val['stock'],
  319. ];
  320. } else {
  321. // 商品库里没有该商品规格
  322. $goods_stock_name .= $value['goods_name'] . $val['name'] . '、';
  323. }
  324. }
  325. $apply_goods_data[] = [
  326. 'info_id' => $info_id,
  327. 'goods_id' => $goods_info['id'],
  328. 'goods_category_first' => $goods_info['goods_category_first'],
  329. 'goods_category_id' => $goods_info['goods_category_id'],
  330. 'goods_no' => $goods_info['goods_no'],
  331. 'goods_name' => $goods_info['goods_name'],
  332. 'goods_brand' => $goods_info['goods_brand'],
  333. 'total_price' => $total_price,
  334. 'goods_data' => json_encode($goods_stock_data, JSON_UNESCAPED_UNICODE),
  335. ];
  336. $total_amount = bcadd($total_amount,$total_price,2);
  337. } else {
  338. // 商品库里没有该商品
  339. $goods_name .= $value['goods_name'] . '、';
  340. }
  341. }
  342. if ($goods_name) {
  343. // 商品库选择的商品 在商品库没有匹配到 返回错误提示
  344. except($goods_name . '等商品在商品库里不存在或已删除');
  345. }
  346. if ($goods_stock_name) {
  347. // 商品库选择的商品的规格 在商品库没有匹配到 返回错误提示
  348. except($goods_stock_name . '等商品规格在商品库里不存在或已删除');
  349. }
  350. $model::insertAll($apply_goods_data);
  351. }
  352. // 添加新商品
  353. if ($goods_ids_new) {
  354. $goods_object = $goods_list_new ? array_column($goods_list_new, null, 'goods_name') : [];
  355. $apply_goods_data = [];
  356. foreach ($goods_ids_new as $value) {
  357. $goods_data = [
  358. 'goods_category_first' => $value['goods_category_first'],
  359. 'goods_category_id' => $value['goods_category_id'],
  360. 'goods_no' => $value['goods_no'],
  361. 'goods_name' => $value['goods_name'],
  362. 'goods_brand' => $value['goods_brand'],
  363. ];
  364. if (array_key_exists($value['goods_name'], $goods_object)) {
  365. // 商品库里有该商品
  366. $goods_info = $goods_object[$value['goods_name']];
  367. $goods_id = $goods_info['id'];
  368. $goods_stock_info = array_column($goods_info['goods_stock'], null, 'name');
  369. } else {
  370. // 商品库里没有该商品 创建
  371. $goods = Goods::create($goods_data);
  372. $goods_id = $goods->id;
  373. $goods_stock_info = [];
  374. }
  375. $goods_stock_data = [];
  376. $total_price = 0;
  377. foreach ($value['goods_stock'] as $val) {
  378. if (array_key_exists($val['name'], $goods_stock_info)) {
  379. // 商品库里有该商品规格
  380. $stock_id = $goods_stock_info[$val['name']]['id'];
  381. } else {
  382. // 商品库里没有该商品规格 创建
  383. $stock_data = [
  384. 'goods_id' => $goods_id,
  385. 'name' => $val['name'],
  386. ];
  387. $stock = GoodsStock::create($stock_data);
  388. $stock_id = $stock->id;
  389. }
  390. $price = isset($val['price']) ? $val['price'] : 0;
  391. $total_price = bcadd($total_price, $price, 2);
  392. $goods_stock_data[] = [
  393. 'id' => $stock_id,
  394. 'goods_id' => $goods_id,
  395. 'name' => $val['name'],
  396. 'price' => $price,
  397. 'stock' => $val['stock'],
  398. ];
  399. }
  400. $goods_data['info_id'] = $info_id;
  401. $goods_data['total_price'] = $total_price;
  402. $goods_data['goods_data'] = json_encode($goods_stock_data, JSON_UNESCAPED_UNICODE);
  403. $apply_goods_data[] = $goods_data;
  404. $total_amount = bcadd($total_amount,$total_price,2);
  405. }
  406. $model::insertAll($apply_goods_data);
  407. }
  408. return compact("total_amount");
  409. }
  410. /**
  411. * 添加同行人员
  412. *
  413. * @param integer $info_id 申请ID
  414. * @param array $params 同行人员数据
  415. * @param string $type 类型:create=申请,update=重新发起
  416. **/
  417. public static function create_peer_user($info_id, $params, $type)
  418. {
  419. if ($type == 'update') {
  420. ApproveEvectionPeerUser::where('info_id', $info_id)->delete();
  421. }
  422. if (!$params) {
  423. return true;
  424. }
  425. $data = [];
  426. foreach ($params as $value) {
  427. if (isset($value['name']) && !empty($value['name'])) {
  428. $data[] = [
  429. 'info_id' => $info_id,
  430. 'is_who' => $value['is_who'],
  431. 'user_id' => isset($value['user_id']) ? $value['user_id'] : '',
  432. 'name' => $value['name'],
  433. 'desc' => isset($value['desc']) ? $value['desc'] : '',
  434. ];
  435. }
  436. }
  437. if ($data) {
  438. ApproveEvectionPeerUser::insertAll($data);
  439. }
  440. }
  441. /**
  442. * 添加审批抄送
  443. *
  444. * @param integer $info_id 申请ID
  445. * @param array $approve_user 审批ID
  446. * @param array $copy_user 抄送ID
  447. * @param string $type 类型:create=申请,update=重新发起
  448. **/
  449. public static function create_approve($info_id, $approve_user, $copy_user, $type)
  450. {
  451. if ($type == 'update') {
  452. Approve::where('info_id', $info_id)->delete();
  453. ApproveCopy::where('info_id', $info_id)->delete();
  454. }
  455. $data = [];
  456. $copy_data = [];
  457. $flow_num = 0;
  458. $copy_num = 0;
  459. $create_at = date('Y-m-d H:i:s');
  460. // 审批人
  461. foreach ($approve_user as $key => $value) {
  462. $flow_num++;
  463. $data[] = [
  464. 'info_id' => $info_id,
  465. 'create_at' => $create_at,
  466. 'status' => $flow_num == 1 ? CommonConstant::STATUS_2 : CommonConstant::STATUS_1,
  467. 'approve_flow' => $flow_num,
  468. 'approve_user' => $value,
  469. 'approve_time' => $create_at,
  470. ];
  471. }
  472. // 抄送人
  473. foreach ($copy_user as $key => $value) {
  474. $copy_num++;
  475. $copy_data[] = [
  476. 'info_id' => $info_id,
  477. 'create_at' => $create_at,
  478. 'approve_flow' => $copy_num,
  479. 'approve_user' => $value,
  480. ];
  481. }
  482. if ($data) {
  483. // 添加审批数据
  484. Approve::insertAll($data);
  485. }
  486. if ($copy_data) {
  487. // 添加抄送数据
  488. ApproveCopy::insertAll($copy_data);
  489. }
  490. }
  491. /**
  492. * 我的申请记录
  493. *
  494. * @param integer $module 模块类型
  495. * @param integer $status 审批状态
  496. * @param string $search 搜索
  497. * @param integer $offset 起始位置
  498. * @param integer $length 查询数量
  499. * @param mixed $user 用户信息
  500. **/
  501. public static function get_list($module, $status, $search, $offset, $length, $user)
  502. {
  503. if (!array_key_exists($module, CommonConstant::get_module_list())) {
  504. return [];
  505. }
  506. if (!array_key_exists($status, CommonConstant::get_status_list())) {
  507. return [];
  508. }
  509. $userid = $user['userid'];
  510. $list = ApproveInfo::field('module_id,user_id,department,is_deleted', true)
  511. ->where('module', $module)
  512. ->where('user_id', $userid)
  513. ->where('status', $status)
  514. ->where('is_deleted', CommonConstant::IS_DELETED_0)
  515. ->when($search, function ($query) use ($search) {
  516. $query->where('order_no|reason', 'like', '%' . $search . '%');
  517. });
  518. $list = self::get_with($list, $module, $status);
  519. $list = $list->order('id desc')
  520. ->limit($offset, $length)
  521. ->select();
  522. return $list;
  523. }
  524. /**
  525. * 详情/信息
  526. *
  527. * @param integer $id 申请ID
  528. * @param mixed $user 用户信息 有数据=我的申请详情/信息,没有数据=审批详情
  529. * @param string $type 类型:detail=详情,info=信息
  530. **/
  531. public static function get_detail($id, $user, $type)
  532. {
  533. $where = $user ? ['user_id' => $user['userid']] : [];
  534. $info = ApproveInfo::field('is_deleted', true)
  535. ->where($where)
  536. ->where('is_deleted', CommonConstant::IS_DELETED_0);
  537. if ($type == 'detail') {
  538. $info->with([
  539. 'moduleInfo',
  540. 'approve' => function ($query) {
  541. $query->field('is_deleted,create_at', true)
  542. ->with([
  543. 'user' => function ($query) {
  544. $query->field('userid,name,avatar');
  545. }
  546. ]);
  547. },
  548. 'approveCopy' => function ($query) {
  549. $query->field('is_deleted,create_at', true)
  550. ->with([
  551. 'user' => function ($query) {
  552. $query->field('userid,name,avatar');
  553. }
  554. ]);
  555. }
  556. ]);
  557. $info = $info->find($id);
  558. if ($info) {
  559. // 审批申请人信息
  560. if ($user) {
  561. $approve_info_user = [
  562. 'userid' => $user['userid'],
  563. 'name' => $user['name'],
  564. 'avatar' => $user['avatar'],
  565. 'create_at' => $info['create_at'],
  566. ];
  567. } else {
  568. $approve_info_user = User::field('userid,name,avatar')->where('userid', $info['user_id'])->find();
  569. $approve_info_user['create_at'] = $info['create_at'];
  570. }
  571. // 部门列表
  572. $department_data = Department::field('dept_id,name')->where('dept_id', 'in', $info['department'])->select();
  573. $info['approve_info_user'] = $approve_info_user;
  574. $info['department_data'] = $department_data;
  575. }
  576. } else {
  577. $info->with([
  578. 'moduleInfo'
  579. ]);
  580. $info = $info->find($id);
  581. }
  582. $info = self::get_item($info, $type);
  583. return $info;
  584. }
  585. /**
  586. * @param mixed $list
  587. * @param integer $module 模块类型
  588. * @param integer $status 审批状态
  589. **/
  590. public static function get_with($list, $module, $status)
  591. {
  592. $field = 'id,info_id,status,approve_user';
  593. switch ($module) {
  594. case CommonConstant::MODULE_1:
  595. if (in_array($status, [CommonConstant::STATUS_2, CommonConstant::STATUS_4])) {
  596. // 审批中或审批驳回 才关联 审批人信息
  597. $list = $list->with([
  598. 'approveOne' => function ($query) use ($status, $field) {
  599. $query->field($field)
  600. ->where('status', $status)
  601. ->with([
  602. 'user' => function ($query) {
  603. $query->field('userid,name');
  604. }
  605. ]);
  606. },
  607. 'applyGoods' => function ($query) {
  608. $query->field('id,info_id,goods_name');
  609. },
  610. ]);
  611. } else {
  612. $list = $list->with([
  613. 'applyGoods' => function ($query) {
  614. $query->field('id,info_id,goods_name');
  615. },
  616. ]);
  617. }
  618. break;
  619. case CommonConstant::MODULE_2:
  620. case CommonConstant::MODULE_3:
  621. case CommonConstant::MODULE_4:
  622. if (in_array($status, [CommonConstant::STATUS_2, CommonConstant::STATUS_4])) {
  623. // 审批中或审批驳回 才关联 审批人信息
  624. $list = $list->with([
  625. 'approveOne' => function ($query) use ($status, $field) {
  626. $query->field($field)
  627. ->where('status', $status)
  628. ->with([
  629. 'user' => function ($query) {
  630. $query->field('userid,name');
  631. }
  632. ]);
  633. }
  634. ]);
  635. }
  636. break;
  637. case CommonConstant::MODULE_5:
  638. if (in_array($status, [CommonConstant::STATUS_2, CommonConstant::STATUS_4])) {
  639. // 审批中或审批驳回 才关联 审批人信息
  640. $list = $list->with([
  641. 'approveOne' => function ($query) use ($status, $field) {
  642. $query->field($field)
  643. ->where('status', $status)
  644. ->with([
  645. 'user' => function ($query) {
  646. $query->field('userid,name');
  647. }
  648. ]);
  649. },
  650. 'peerUser' => function ($query) {
  651. $query->field('id,info_id,name');
  652. },
  653. ]);
  654. } else {
  655. $list = $list->with([
  656. 'peerUser' => function ($query) {
  657. $query->field('id,info_id,name');
  658. },
  659. ]);
  660. }
  661. break;
  662. case CommonConstant::MODULE_6:
  663. case CommonConstant::MODULE_7:
  664. case CommonConstant::MODULE_8:
  665. case CommonConstant::MODULE_9:
  666. case CommonConstant::MODULE_10:
  667. case CommonConstant::MODULE_11:
  668. if (in_array($status, [CommonConstant::STATUS_2, CommonConstant::STATUS_4])) {
  669. // 审批中或审批驳回 才关联 审批人信息
  670. $list = $list->with([
  671. 'approveOne' => function ($query) use ($status, $field) {
  672. $query->field($field)
  673. ->where('status', $status)
  674. ->with([
  675. 'user' => function ($query) {
  676. $query->field('userid,name');
  677. }
  678. ]);
  679. }
  680. ]);
  681. }
  682. break;
  683. }
  684. return $list;
  685. }
  686. /**
  687. * @param mixed $info
  688. * @param string $type 类型:detail=详情,info=信息
  689. **/
  690. public static function get_item($info, $type)
  691. {
  692. $module = $info['module'];
  693. switch ($module) {
  694. case CommonConstant::MODULE_1:
  695. if ($type == 'detail') {
  696. $info['apply_goods'] = $info->applyGoods()->field('id,info_id,goods_name,total_amount,goods_data')->select();
  697. } else {
  698. $info->apply_goods;
  699. }
  700. break;
  701. case CommonConstant::MODULE_5:
  702. if ($type == 'detail') {
  703. $info['peer_user'] = $info->peerUser()->field('id,info_id,name')->select();
  704. } else {
  705. $info->peer_user;
  706. }
  707. break;
  708. }
  709. return $info;
  710. }
  711. /**
  712. * 操作方法
  713. *
  714. * @param integer $id 申请ID
  715. * @param mixed $user 用户信息
  716. * @param string $type 类型:urging=催办,cancel=撤销
  717. */
  718. public static function make($id, $user, $type)
  719. {
  720. $userid = $user['userid'];
  721. $info = ApproveInfo::field('id,module,status')
  722. ->where('user_id', $userid)
  723. ->where('is_deleted', CommonConstant::IS_DELETED_0)
  724. ->find($id);
  725. if (!$info) {
  726. throw new Exception(CommonConstant::get_module_list()[$info->module] . '记录不存在或已删除');
  727. }
  728. switch ($type) {
  729. case 'urging':
  730. if ($info->status != CommonConstant::STATUS_2) {
  731. throw new Exception('其他人已操作');
  732. }
  733. // TODO 待对接钉钉接口
  734. break;
  735. case 'cancel':
  736. if ($info->status != CommonConstant::STATUS_4) {
  737. throw new Exception('非审批驳回状态无法操作');
  738. }
  739. $info->status = CommonConstant::STATUS_5;
  740. $info->save();
  741. break;
  742. }
  743. }
  744. }