Evection.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <?php
  2. namespace app\api\controller;
  3. use AlibabaCloud\SDK\Dingtalk\Vyida_1_0\Models\GetFormDataByIDResponseBody\originator\name;
  4. use app\common\model\EvectionApprove;
  5. use app\common\model\LeaveApprove;
  6. use app\common\model\ApproveFlow;
  7. use app\common\model\EvectionInfo;
  8. use app\common\service\ApproveService;
  9. use think\App;
  10. use think\Db;
  11. use app\common\model\User;
  12. /**
  13. * @title 员工出差管理
  14. * @controller Evection
  15. * @group base
  16. */
  17. class Evection extends Base
  18. {
  19. public function initialize()
  20. {
  21. parent::initialize();
  22. parent::checkLogin();
  23. }
  24. /**
  25. * @title 获取审批流程
  26. * @desc 获取审批流程
  27. * @author qc
  28. * @url /api/Evection/getApproveFlow
  29. * @method GET
  30. * @tag
  31. * @header name:Authorization require:1 desc:Token
  32. * @return name:user_name type:string default:-- desc:会员名称
  33. * @return name:headimg type:string default:-- desc:会员头像
  34. */
  35. public function getApproveFlow()
  36. {
  37. $list = ApproveFlow::getApproveUser(3,$this->user_id);
  38. $this->success('ok',['list'=>$list]);
  39. }
  40. /**
  41. * @title 获取抄送人流程
  42. * @desc 获取抄送人流程
  43. * @author qc
  44. * @url /api/Evection/getCopyFlow
  45. * @method GET
  46. * @tag
  47. * @header name:Authorization require:1 desc:Token
  48. * @return name:user_name type:string default:-- desc:会员名称
  49. * @return name:headimg type:string default:-- desc:会员头像
  50. */
  51. public function getCopyFlow()
  52. {
  53. $check_flow = ApproveFlow::where('user_id',$this->user_id)->where('type',2)->where('module',3)->find();
  54. $where = [];
  55. $where[] = ['l.type','=',2];
  56. $where[] = ['l.module','=',3];
  57. if($check_flow)$where[] = ['l.sort','>',$check_flow->sort];
  58. $list = ApproveFlow::field('l.user_id,u.name user_name,u.headimg')
  59. ->alias('l')
  60. ->where($where)
  61. ->order('l.sort asc')
  62. ->leftJoin('StoreMember u','u.id = l.user_id')
  63. ->select()->toArray();
  64. $this->success('ok',['list'=>$list]);
  65. }
  66. /**
  67. * @title 出差申请
  68. * @desc 出差申请
  69. * @author qc
  70. * @url /api/Evection/applyEvection
  71. * @method GET
  72. * @tag
  73. * @header name:Authorization require:1 desc:Token
  74. * @param name:type type:int default:-- desc:出差类型(1市内2市外)
  75. * @param name:reason type:string default:-- desc:出差事由
  76. * @param name:start_time type:string default:-- desc:开始时间
  77. * @param name:end_time type:string default:-- desc:结束时间
  78. * @param name:document type:string default:-- desc:附件(文件路径)
  79. * @param name:images type:string default:-- desc:图片(多张|隔开)
  80. * @param name:peer_user type:string default:-- desc:同行员工id(多个,隔开)
  81. * @param name:flow_user type:string default:-- desc:审批人id(多个逗号隔开)
  82. * @param name:copy_user type:string default:-- desc:抄送人id(多个逗号隔开)
  83. */
  84. public function applyEvection()
  85. {
  86. $request_param = input('post.');
  87. if(empty($request_param['start_time']) || empty($request_param['end_time'])) $this->error('请选择出差时间');
  88. if(empty($request_param['type'])) $this->error('请选择出差类型');
  89. if(empty($request_param['user_id'])) $request_param['user_id'] = $this->user_id;
  90. $request_param['apply_user'] = $this->user_id;// 申请会员id
  91. $request_param['apply_date'] = date("Y-m-d");
  92. $flow_user = isset($request_param['flow_user']) ? $request_param['flow_user']:'' ;
  93. $copy_user = isset($request_param['copy_user']) ? $request_param['copy_user']:'' ;
  94. if(!$flow_user) $this->error('请选择审批人');
  95. $flow_info = EvectionInfo::create($request_param);//生成出差记录
  96. $approve_res = ApproveFlow::getApproveData($flow_user,$copy_user,$flow_info->id);
  97. $flow_data = $approve_res['flow_data'];// 审批流程
  98. $flow_num = $approve_res['flow_num'];
  99. if(!empty($flow_data)) {
  100. EvectionInfo::where('id',$flow_info->id)->update(['approve_num'=>$flow_num]);
  101. (new EvectionApprove())->saveAll($flow_data);
  102. }else{
  103. EvectionInfo::where('id',$flow_info->id)->update(['status'=>2]);
  104. }
  105. $this->success('出差已提交,请等待审核',['detail'=>$flow_info->toArray()]);
  106. }
  107. /**
  108. * @title 我的出差记录【列表】
  109. * @desc 我的出差记录
  110. * @author qc
  111. * @url /api/Evection/getEvectionList
  112. * @method GET
  113. * @tag
  114. * @header name:Authorization require:1 desc:Token
  115. * @param name:page type:int default:-- desc:页数
  116. * @param name:page_num type:int default:-- desc:每页数量
  117. * @param name:type type:int default:0 desc:出差类型id
  118. * @param name:status type:int default:0 desc:审批状态0全部,1审批中,2审批通过,3审批拒绝,9取消
  119. * @param name:sel_time type:string default:0 desc:时间查询
  120. * @return name:start_time type:string default:-- desc:开始时间
  121. * @return name:end_time type:string default:-- desc:结束时间
  122. * @return name:reason type:string default:-- desc:出差事由
  123. * @return name:document type:string default:-- desc:附件(文件路径)
  124. * @return name:images type:string default:-- desc:图片(多张|隔开)
  125. * @return name:reason type:string default:-- desc:出差事由
  126. * @return name:type type:int default:-- desc:出差类型(1市内2市外)
  127. * @return name:status type:int default:-- desc:状态:1审批中,2审批通过,3审批拒绝,9取消
  128. * @return name:user_id type:int default:-- desc:出差会员id
  129. */
  130. public function getEvectionList()
  131. {
  132. $sel_where = [];
  133. $sel_where[] = ['user_id','=',$this->user_id];
  134. if(input('get.status') > 0) $sel_where[] = ['status','=',input('get.status')];
  135. if(input('get.type') > 0) $sel_where[] = ['type','=',input('get.type')];
  136. $list = EvectionInfo::where($sel_where)->limit($this->off_set,$this->page_num)->select()->toArray();
  137. $this->success('ok',['list'=>$list]);
  138. }
  139. /**
  140. * @title 我的出差详情
  141. * @desc 我的出差详情
  142. * @author qc
  143. * @url /api/Evection/getEvectionDetail
  144. * @method GET
  145. * @tag
  146. * @header name:Authorization require:1 desc:Token
  147. * @param name:id type:int default:-- desc:出差记录id
  148. * @return name:start_time type:string default:-- desc:开始时间
  149. * @return name:end_time type:string default:-- desc:结束时间
  150. * @return name:reason type:string default:-- desc:出差事由
  151. * @return name:document type:string default:-- desc:附件(文件路径)
  152. * @return name:images type:string default:-- desc:图片(多张|隔开)
  153. * @return name:reason type:string default:-- desc:出差事由
  154. * @return name:type type:int default:-- desc:出差类型(1市内2市外)
  155. * @return name:status type:int default:-- desc:状态:1审批中,2审批通过,3审批拒绝,9取消
  156. * @return name:user_id type:int default:-- desc:出差会员id
  157. * @return name:approve_list type:array default:-- desc:审批记录
  158. * @return name:approve_list.status type:int default:-- desc:审批状态:0待审批(未到该审批人审批),1审批中(已到该审批人审批,还未审批)2审批通过3审批拒绝
  159. * @return name:approve_list.approve_time type:string default:-- desc:审批时间
  160. * @return name:approve_list.remark type:string default:-- desc:审批备注
  161. * @return name:approve_list.user_name type:string default:-- desc:审批人
  162. * @return name:approve_list.headimg type:string default:-- desc:审批人头像
  163. * @return name:approve_list.time type:string default:-- desc:审批用时(上一次审批完成到本次审批的时间,单位秒)
  164. * @return name:peer_list type:array default:-- desc:同行员工
  165. * @return name:peer_list type:array default:-- desc:同行员工名
  166. * @return name:peer_list.name type:string default:-- desc:同行员工名
  167. * @return name:peer_list.headimg type:string default:-- desc:同行员工头像
  168. */
  169. public function getEvectionDetail()
  170. {
  171. $id = input('get.id');
  172. $detail = EvectionInfo::with('approveList')->where(['user_id'=>$this->user_id])->where(['id'=>$id])
  173. ->limit($this->off_set,$this->page_num)
  174. ->find()->toArray();
  175. $detail['images_arr'] = $detail['images'] ? explode('|',$detail['images']) : null;
  176. $peer_list = User::field('id,name,headimg')->where('id','in',$detail['peer_user'])->select()->toArray();
  177. $detail['peer_list'] = !empty($peer_list) ?$peer_list: null ;
  178. $this->success('ok',['detail'=>$detail]);
  179. }
  180. /**
  181. * @title 需要我审批的
  182. * @desc 需要我审批的
  183. * @author qc
  184. * @url /api/Evection/getApproveEvection
  185. * @method GET
  186. * @tag
  187. * @header name:Authorization require:1 desc:Token
  188. * @param name:page type:int default:-- desc:页数
  189. * @param name:page_num type:int default:-- desc:每页数量
  190. * @return name:id type:int default:-- desc:出差记录id
  191. * @return name:start_time type:string default:-- desc:开始时间
  192. * @return name:end_time type:string default:-- desc:结束时间
  193. * @return name:reason type:string default:-- desc:出差事由
  194. * @return name:document type:string default:-- desc:附件(文件路径)
  195. * @return name:images type:string default:-- desc:图片(多张|隔开)
  196. * @return name:reason type:string default:-- desc:出差事由
  197. * @return name:type type:int default:-- desc:出差类型(1市内2市外)
  198. * @return name:status type:int default:-- desc:状态:1审批中,2审批通过,3审批拒绝,9取消
  199. * @return name:user_id type:int default:-- desc:出差会员id
  200. * @return name:approve_status type:int default:-- desc:审批状态(我的审批状态)
  201. * @return name:approve_time type:string default:-- desc:审批时间(1审批中2审批通过3审批拒绝)
  202. * @return name:remark type:string default:-- desc:审批备注
  203. *
  204. */
  205. public function getApproveEvection()
  206. {
  207. $list = EvectionApprove::field('i.*,p.status approve_status,p.approve_time,p.remark')
  208. ->alias('p')
  209. ->where(['p.approve_user'=>$this->user_id])
  210. ->where('p.status','>','0')
  211. ->leftJoin('EvectionInfo i','p.info_id = i.id')
  212. ->limit($this->off_set,$this->page_num)
  213. ->select()->toArray();
  214. array_walk($list,function (&$v){
  215. $v['images_arr'] = $v['images'] ? explode('|',$v['images']) : null;
  216. });
  217. $this->success('ok',['list'=>$list]);
  218. }
  219. /**
  220. * @title 审批出差记录
  221. * @desc 审批出差记录
  222. * @author qc
  223. * @url /api/Evection/approveEvection
  224. * @method POST
  225. * @tag
  226. * @header name:Authorization require:1 desc:Token
  227. * @param name:approve_id type:string default:-- desc:审批记录id
  228. * @param name:status type:string default:-- desc:审批状态(2审批通过3审批拒绝)
  229. * @param name:remark type:string default:-- desc:审批备注
  230. */
  231. public function approveEvection()
  232. {
  233. $approve_id = input('post.approve_id');
  234. $status = input('post.status');
  235. $remark = input('post.remark');
  236. $res = ApproveService::approveEvection($approve_id,$this->user_id,$status,$remark);
  237. if(!$res['ret_val']) $this->error($res['msg']);
  238. $this->success('审批完成');
  239. }
  240. /**
  241. * @title 撤销出差申请
  242. * @desc 撤销出差申请
  243. * @author qc
  244. * @url /api/Evection/cancelApply
  245. * @method POST
  246. * @tag
  247. * @header name:Authorization require:1 desc:Token
  248. * @param name:id type:int default:-- desc:出差记录id
  249. *
  250. */
  251. public function cancelApply()
  252. {
  253. $id = input('post.id');
  254. $apply_info = EvectionInfo::where('id',$id)->where('user_id',$this->user_id)->find();
  255. if(!$apply_info)$this->error('出差记录有误');
  256. $apply_info->status = 9;
  257. $apply_info->save();
  258. $this->success('撤销成功');
  259. }
  260. }