Index.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. <?php
  2. namespace app\admin\controller\contract;
  3. use app\admin\model\Contract;
  4. use app\api\BaseController;
  5. use app\admin\validate\contract\ContractCheck;
  6. use think\App;
  7. use think\exception\ValidateException;
  8. use think\facade\Db;
  9. use think\facade\View;
  10. class Index extends BaseController
  11. {
  12. public function __construct(App $app)
  13. {
  14. parent::__construct($app);
  15. $this->model = new Contract();
  16. $this->uid = get_login_admin("id");
  17. $this->unit_name = Db::name('department')->where("id", get_login_admin("unit_name"))->value("title");
  18. }
  19. const ZERO = 0;
  20. const ONE = 1;
  21. const TWO = 2;
  22. const THREE = 3;
  23. const FORE = 4;
  24. const FIVE = 5;
  25. const SIX = 6;
  26. const SEVEN = 7;
  27. public static $Type = [
  28. self::ZERO => '未设置',
  29. self::ONE => '普通合同',
  30. self::TWO => '框架合同',
  31. self::THREE => '补充协议',
  32. self::FORE => '其他合同',
  33. ];
  34. public static $Status = [
  35. self::ZERO => '待审核',
  36. self::ONE => '审核中',
  37. self::TWO => '审核通过',
  38. self::THREE => '审核拒绝',
  39. self::FORE => '已撤销',
  40. self::FIVE => '已中止',
  41. self::SIX => '已作废',
  42. self::SEVEN => '修改中',
  43. ];
  44. public static $ArchiveStatus = [
  45. self::ZERO => '未归档',
  46. self::ONE => '已归档',
  47. ];
  48. public function index()
  49. {
  50. if (request()->isAjax()) {
  51. $param = get_params();
  52. $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
  53. $where = [
  54. ["subject_id", "=", get_login_admin("unit_name")],
  55. ["delete_time", "=", 0],
  56. ["archive_status", "=", 0]
  57. ];
  58. if (!empty($param['keywords'])) {
  59. $where[] = ['a.id|a.name|c.title', 'like', '%' . $param['keywords'] . '%'];
  60. }
  61. if (!empty($param['cate_id'])) {
  62. $where[] = ['a.cate_id', '=', $param['cate_id']];
  63. }
  64. if (!empty($param['type'])) {
  65. $where[] = ['a.type', '=', $param['type']];
  66. }
  67. if (isset($param['check_status']) && $param['check_status'] != '') {
  68. $where[] = ['a.check_status', '=', $param['check_status']];
  69. }
  70. $list = $this->model
  71. ->alias('a')
  72. ->field('a.*,a.type as type_a, c.title as cate_title')
  73. ->where($where)
  74. ->join('contract_cate c', 'a.cate_id = c.id')
  75. ->order('a.create_time desc')
  76. ->paginate($rows, false, ['query' => $param])
  77. ->each(function ($item) {
  78. $item->keeper_name = Db::name('Admin')->where(['id' => $item->keeper_uid])->value('nickname');
  79. $item->sign_name = Db::name('Admin')->where(['id' => $item->sign_uid])->value('nickname');
  80. $item->cate_title = Db::name('ContractCate')->where("id", $item->cate_id)->value("title");
  81. $item->sign_time = date('Y-m-d', $item->sign_time);
  82. $item->interval_time = date('Y-m-d', $item->start_time) . ' 至 ' . date('Y-m-d', $item->end_time);
  83. $item->type_name = self::$Type[(int)$item->type];
  84. $item->status_name = self::$Status[(int)$item->check_status];
  85. $item->delay = countDays(date("Y-m-d"), date('Y-m-d', $item->end_time));
  86. if ($item->cost == 0) {
  87. $item->cost = '-';
  88. }
  89. });
  90. return table_assign(0, '', $list);
  91. } else {
  92. $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select();
  93. View::assign('cate', $cate);
  94. return view();
  95. }
  96. }
  97. public function add()
  98. {
  99. $param = get_params();
  100. if (request()->isAjax()) {
  101. if (isset($param['sign_time'])) {
  102. $param['sign_time'] = strtotime($param['sign_time']);
  103. }
  104. if (isset($param['start_time'])) {
  105. $param['start_time'] = strtotime($param['start_time']);
  106. }
  107. if (isset($param['end_time'])) {
  108. $param['end_time'] = strtotime($param['end_time']);
  109. if ($param['end_time'] <= $param['start_time']) {
  110. return to_assign(1, "结束时间需要大于开始时间");
  111. }
  112. }
  113. try {
  114. validate(ContractCheck::class)->scene('add')->check($param);
  115. } catch (ValidateException $e) {
  116. // 验证失败 输出错误信息
  117. return to_assign(1, $e->getError());
  118. }
  119. $param['create_time'] = time();
  120. $param['admin_id'] = $this->uid;
  121. $param['subject_id'] = get_login_admin("unit_name");
  122. // halt($param);
  123. $aid = $this->model->strict(false)->field(true)->insertGetId($param);
  124. if ($aid) {
  125. $log_data = array(
  126. 'field' => 'new',
  127. 'action' => 'add',
  128. 'contract_id' => $aid,
  129. 'admin_id' => $param['admin_id'],
  130. 'create_time' => time(),
  131. );
  132. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  133. return to_assign();
  134. } else {
  135. return to_assign(1, '操作失败');
  136. }
  137. } else {
  138. $type = isset($param['type']) ? $param['type'] : 0;
  139. $pid = isset($param['pid']) ? $param['pid'] : 0;
  140. $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select();
  141. View::assign('type', $type);
  142. View::assign('pid', $pid);
  143. View::assign('cate', $cate);
  144. if ($pid > 0) {
  145. $p_contract = Db::name('Contract')->where(['id' => $pid])->find();
  146. View::assign('p_contract', $p_contract);
  147. }
  148. return view();
  149. }
  150. }
  151. public function edit()
  152. {
  153. $param = get_params();
  154. if (request()->isAjax()) {
  155. if (isset($param['sign_time'])) {
  156. $param['sign_time'] = strtotime($param['sign_time']);
  157. }
  158. if (isset($param['start_time'])) {
  159. $param['start_time'] = strtotime($param['start_time']);
  160. }
  161. if (isset($param['end_time'])) {
  162. $param['end_time'] = strtotime($param['end_time']);
  163. if ($param['end_time'] <= $param['start_time']) {
  164. return to_assign(1, "结束时间需要大于开始时间");
  165. }
  166. }
  167. try {
  168. validate(ContractCheck::class)->scene($param['scene'])->check($param);
  169. } catch (ValidateException $e) {
  170. // 验证失败 输出错误信息
  171. return to_assign(1, $e->getError());
  172. }
  173. $param['update_time'] = time();
  174. $old = Db::name('Contract')->where(['id' => $param['id']])->find();
  175. $res = $this->model->strict(false)->field(true)->update($param);
  176. if (!$res) {
  177. return to_assign(1, '操作失败');
  178. }
  179. return to_assign(0, '操作成功');
  180. } else {
  181. $id = isset($param['id']) ? $param['id'] : 0;
  182. $type = isset($param['type']) ? $param['type'] : 0;
  183. $pid = isset($param['pid']) ? $param['pid'] : 0;
  184. $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select();
  185. View::assign('cate', $cate);
  186. if ($id > 0) {
  187. $detail = $this->model->detail($id);
  188. $file_array_other = Db::name('ContractFile')
  189. ->field('cf.id,f.filepath,f.name,f.filesize,f.fileext,f.create_time,f.admin_id')
  190. ->alias('cf')
  191. ->join('File f', 'f.id = cf.file_id', 'LEFT')
  192. ->order('cf.create_time asc')
  193. ->where(array('cf.contract_id' => $id, 'cf.delete_time' => 0))
  194. ->select()->toArray();
  195. $detail['file_array_other'] = $file_array_other;
  196. if ($detail['check_status'] == 0 || $detail['check_status'] == 4 || $detail['check_status'] == 7) {
  197. View::assign('detail', $detail);
  198. return view('edit');
  199. } else {
  200. echo '<div style="text-align:center;color:red;margin-top:20%;">当前状态不开放编辑,请联系合同管理员</div>';
  201. exit;
  202. }
  203. }
  204. return view();
  205. }
  206. }
  207. public function view()
  208. {
  209. $param = get_params();
  210. $id = get_params("id");
  211. $detail = (new Contract())->detail($id);
  212. //从项目页面进来的不给按钮
  213. $view_auth = isset($param['type']) ? $param['type'] : 0;
  214. $auth = 0;
  215. $is_check_admin = 0;
  216. $is_create_admin = 0;
  217. $check_record = [];
  218. $detail['create_user'] = Db::name('Admin')->where(['id' => $detail['admin_id']])->value('nickname');
  219. $detail['copy_user'] = '-';
  220. if ($detail['copy_uids'] != '') {
  221. $copy_user = Db::name('Admin')->where('id', 'in', $detail['copy_uids'])->column('nickname');
  222. $detail['copy_user'] = implode(',', $copy_user);
  223. }
  224. $check_id = Db::name("check_step")->where("id", $detail["check_step_sort"])->value("check_id");
  225. if ($check_id == $this->uid) {
  226. $is_check_admin = 1;
  227. }
  228. if ($detail['admin_id'] == $this->uid) {
  229. $is_create_admin = 1;
  230. $auth = 1;
  231. }
  232. $file_array_other = Db::name('ContractFile')
  233. ->field('cf.id,f.filepath,f.name,f.filesize,f.fileext,f.create_time,f.admin_id')
  234. ->alias('cf')
  235. ->join('File f', 'f.id = cf.file_id', 'LEFT')
  236. ->order('cf.create_time asc')
  237. ->where(array('cf.contract_id' => $id, 'cf.delete_time' => 0))
  238. ->select()->toArray();
  239. $detail['file_array_other'] = $file_array_other;
  240. foreach ($check_record as $kk => &$vv) {
  241. $vv['check_time_str'] = date('Y-m-d H:i', $vv['check_time']);
  242. $vv['status_str'] = '提交';
  243. if ($vv['status'] == 1) {
  244. $vv['status_str'] = '审核通过';
  245. } else if ($vv['status'] == 2) {
  246. $vv['status_str'] = '审核拒绝';
  247. }
  248. if ($vv['status'] == 3) {
  249. $vv['status_str'] = '撤销';
  250. }
  251. }
  252. View::assign('is_check_admin', $is_check_admin);
  253. View::assign('auth', $auth);
  254. View::assign('view_auth', $view_auth);
  255. View::assign('is_create_admin', $is_create_admin);
  256. View::assign('check_record', $check_record);
  257. // View::assign('flows', $flows);
  258. View::assign('detail', $detail);
  259. return view();
  260. }
  261. public function delete()
  262. {
  263. if (request()->isDelete()) {
  264. $id = get_params("id");
  265. $data['id'] = $id;
  266. $data['delete_time'] = time();
  267. if (Db::name('Contract')->update($data) !== false) {
  268. add_log('delete', $id);
  269. $log_data = array(
  270. 'field' => 'del',
  271. 'action' => 'delete',
  272. 'contract_id' => $id,
  273. 'admin_id' => $this->uid,
  274. 'create_time' => time(),
  275. );
  276. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  277. return to_assign(0, "删除成功");
  278. } else {
  279. return to_assign(1, "删除失败");
  280. }
  281. } else {
  282. return to_assign(1, "错误的请求");
  283. }
  284. }
  285. public function archive()
  286. {
  287. if (request()->isAjax()) {
  288. $param = get_params();
  289. $where = [
  290. ["subject_id", "=", get_login_admin("unit_name")],
  291. ["delete_time", "=", 0],
  292. ["archive_status", "=", 1]
  293. ];
  294. if (!empty($param['keywords'])) {
  295. $where[] = ['a.id|a.name|c.title', 'like', '%' . $param['keywords'] . '%'];
  296. }
  297. if (!empty($param['cate_id'])) {
  298. $where[] = ['a.cate_id', '=', $param['cate_id']];
  299. }
  300. if (!empty($param['cate_id'])) {
  301. $where[] = ['a.cate_id', '=', $param['cate_id']];
  302. }
  303. if (!empty($param['type'])) {
  304. $where[] = ['a.type', '=', $param['type']];
  305. }
  306. $list = $this->model
  307. ->alias('a')
  308. ->field('a.*,a.type as type_a, c.title as cate_title')
  309. ->join('contract_cate c', 'a.cate_id = c.id')
  310. ->where($where)->order('create_time desc')->paginate()->each(function ($item) {
  311. $item->keeper_name = Db::name('Admin')->where(['id' => $item->keeper_uid])->value('nickname');
  312. $item->sign_name = Db::name('Admin')->where(['id' => $item->sign_uid])->value('nickname');
  313. $item->cate_title = Db::name('ContractCate')->where("id", $item->cate_id)->value("title");
  314. $item->sign_time = date('Y-m-d', $item->sign_time);
  315. $item->interval_time = date('Y-m-d', $item->start_time) . ' 至 ' . date('Y-m-d', $item->end_time);
  316. $item->type_name = self::$Type[(int)$item->type];
  317. $item->status_name = self::$Status[(int)$item->check_status];
  318. $item->delay = countDays(date("Y-m-d"), date('Y-m-d', $item->end_time));
  319. if ($item->cost == 0) {
  320. $item->cost = '-';
  321. }
  322. });
  323. return table_assign(0, '', $list);
  324. } else {
  325. $cate = Db::name('ContractCate')->where("unit_id", get_login_admin("unit_name"))->order('create_time asc')->select();
  326. View::assign('cate', $cate);
  327. return view();
  328. }
  329. }
  330. }