Api.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2022 勾股工作室
  4. * @license https://opensource.org/licenses/GPL-3.0
  5. * @link https://www.gougucms.com
  6. */
  7. declare (strict_types=1);
  8. namespace app\admin\controller\contract;
  9. use app\api\BaseController;
  10. use app\admin\model\ContractLog;
  11. use think\App;
  12. use think\facade\Db;
  13. use think\facade\View;
  14. class Api extends BaseController
  15. {
  16. public function __construct(App $app)
  17. {
  18. parent::__construct($app);
  19. $this->uid = get_login_admin("id");;
  20. }
  21. //获取合同协议
  22. public function get_contract()
  23. {
  24. $param = get_params();
  25. $where = array();
  26. $whereOr = array();
  27. if (!empty($param['keywords'])) {
  28. $where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
  29. }
  30. $where[] = ['delete_time', '=', 0];
  31. // $where[] = ['check_status', '=', 2];
  32. $where[] = ["subject_id", "=", get_login_admin("unit_name")];
  33. $uid = $this->uid;
  34. // $auth = isAuth($uid,'contract_admin');
  35. // if($auth==0){
  36. // $whereOr[] =['admin_id|prepared_uid|sign_uid|keeper_uid', '=', $uid];
  37. // $whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
  38. // $dids = get_department_role($this->uid);
  39. // if(!empty($dids)){
  40. // $whereOr[] =['sign_did', 'in', $dids];
  41. // }
  42. // }
  43. $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
  44. $list = Db::name('Contract')
  45. ->field('id,name,code,customer_id,sign_uid,sign_time')
  46. ->order('id desc')
  47. ->where($where)
  48. ->where(function ($query) use ($whereOr) {
  49. $query->whereOr($whereOr);
  50. })
  51. ->paginate($rows, false)->each(function ($item, $key) {
  52. $item['sign_name'] = Db::name('Admin')->where('id', $item['sign_uid'])->value('nickname');
  53. $item['sign_time'] = date('Y-m-d', $item['sign_time']);
  54. $item['customer'] = Db::name('Admin')->where('id', $item['customer_id'])->value('nickname');
  55. return $item;
  56. });
  57. table_assign(0, '', $list);
  58. }
  59. //添加附件
  60. public function add_file()
  61. {
  62. $param = get_params();
  63. $param['create_time'] = time();
  64. $param['admin_id'] = $this->uid;
  65. $fid = Db::name('ContractFile')->strict(false)->field(true)->insertGetId($param);
  66. if ($fid) {
  67. $log_data = array(
  68. 'field' => 'file',
  69. 'action' => 'upload',
  70. 'contract_id' => $param['contract_id'],
  71. 'admin_id' => $param['admin_id'],
  72. 'old_content' => '',
  73. 'new_content' => $param['file_name'],
  74. 'create_time' => time(),
  75. );
  76. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  77. return to_assign(0, '上传成功', $fid);
  78. }
  79. }
  80. //删除
  81. public function delete_file()
  82. {
  83. if (request()->isDelete()) {
  84. $id = get_params("id");
  85. $data['id'] = $id;
  86. $data['delete_time'] = time();
  87. if (Db::name('ContractFile')->update($data) !== false) {
  88. $detail = Db::name('ContractFile')->where('id', $id)->find();
  89. $file_name = Db::name('File')->where('id', $detail['file_id'])->value('name');
  90. $log_data = array(
  91. 'field' => 'file',
  92. 'action' => 'delete',
  93. 'contract_id' => $detail['contract_id'],
  94. 'admin_id' => $this->uid,
  95. 'new_content' => $file_name,
  96. 'create_time' => time(),
  97. );
  98. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  99. return to_assign(0, "删除成功");
  100. } else {
  101. return to_assign(1, "删除失败");
  102. }
  103. } else {
  104. return to_assign(1, "错误的请求");
  105. }
  106. }
  107. public function check_agree()
  108. {
  109. if (request()->isPost()) {
  110. $param = get_params();
  111. $check_node = isset($param["check_node"]) ? $param["check_node"] : 0;
  112. if ($check_node == 1) {
  113. $param["check_step_sort"] = 0;
  114. $old = Db::name('Contract')->where('id', $param['id'])->find();
  115. if (!empty($old["check_flow_ids"])) {
  116. $check_step_sort = explode(",", (string)$old["check_flow_ids"]);
  117. $check_step_sort[] = $old["check_step_sort"];
  118. $check_step_sort = implode(",", $check_step_sort);
  119. // halt($check_step_sort);
  120. } else {
  121. $check_step_sort = $old["check_step_sort"];
  122. }
  123. $param["check_flow_ids"] = $check_step_sort;
  124. if (Db::name('Contract')->strict(false)->update($param) !== false) {
  125. $log_data = array(
  126. 'field' => 'check_status',
  127. 'contract_id' => $param['id'],
  128. 'admin_id' => $this->uid,
  129. 'new_content' => $param['check_status'],
  130. 'old_content' => $old['check_status'],
  131. 'create_time' => time(),
  132. );
  133. Db::name("check_step")->update(["id"=>$old["check_step_sort"],"check_status"=>1]);
  134. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  135. return to_assign(0, "操作成功");
  136. } else {
  137. return to_assign(1, "操作失败");
  138. }
  139. } else {
  140. $checkStepData = array(
  141. "check_admin" => $param["check_admin_name"],
  142. "check_id" => $param["check_admin_ids"],
  143. "create_time" => time()
  144. );
  145. $insertId = Db::name("check_step")->strict(false)->insertGetId($checkStepData);
  146. $param["check_step_sort"] = $insertId;
  147. $param["check_user"] = $param["check_admin_name"];
  148. unset($param["check_status"]);
  149. $old = Db::name('Contract')->where('id', $param['id'])->find();
  150. if (!empty($old["check_flow_ids"])) {
  151. $check_step_sort = explode(",", (string)$old["check_flow_ids"]);
  152. $check_step_sort[] = $old["check_step_sort"];
  153. $check_step_sort = implode(",", $check_step_sort);
  154. } else {
  155. $check_step_sort = $old["check_step_sort"];
  156. }
  157. $param["check_flow_ids"] = $check_step_sort;
  158. if (Db::name('Contract')->strict(false)->update($param) !== false) {
  159. $log_data = array(
  160. 'field' => 'check_step_sort',
  161. 'contract_id' => $param['id'],
  162. 'admin_id' => $this->uid,
  163. 'new_content' => $insertId,
  164. 'old_content' => $old['check_step_sort'],
  165. 'create_time' => time(),
  166. );
  167. Db::name("check_step")->update(["id"=>$old["check_step_sort"],"check_status"=>1]);
  168. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  169. return to_assign(0, "操作成功");
  170. } else {
  171. return to_assign(1, "操作失败");
  172. }
  173. }
  174. }
  175. }
  176. public function check_disagree()
  177. {
  178. if (request()->isPost()) {
  179. $param = get_params();
  180. $check_node = isset($param["check_node"]) ? $param["check_node"] : 0;
  181. $param["check_step_sort"] = 0;
  182. $old = Db::name('Contract')->where('id', $param['id'])->find();
  183. if (!empty($old["check_flow_ids"])) {
  184. $check_step_sort = explode(",", (string)$old["check_flow_ids"]);
  185. $check_step_sort[] = $old["check_step_sort"];
  186. $check_step_sort = implode(",", $check_step_sort);
  187. } else {
  188. $check_step_sort = $old["check_step_sort"];
  189. }
  190. $param["check_flow_ids"] = $check_step_sort;
  191. if (Db::name('Contract')->strict(false)->update($param) !== false) {
  192. $log_data = array(
  193. 'field' => 'check_status',
  194. 'contract_id' => $param['id'],
  195. 'admin_id' => $this->uid,
  196. 'new_content' => $param['check_status'],
  197. 'old_content' => $old['check_status'],
  198. 'create_time' => time(),
  199. );
  200. Db::name("check_step")->update(["id"=>$old["check_step_sort"],"check_status"=>2]);
  201. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  202. return to_assign(0, "操作成功");
  203. } else {
  204. return to_assign(1, "操作失败");
  205. }
  206. }
  207. }
  208. //拒绝后修改
  209. public function check_edit()
  210. {
  211. if (request()->isPost()) {
  212. $param = get_params();
  213. if ($param["check_status"] != 7) {
  214. $param["check_status"] = 7;
  215. if(Db::name('Contract')->strict(false)->update($param)){
  216. return to_assign(0, "操作成功");
  217. }else{
  218. return to_assign(1, "操作失败");
  219. }
  220. }
  221. $checkStepData = array(
  222. "check_admin" => $param["check_admin_name"],
  223. "check_id" => $param["check_admin_ids"],
  224. "create_time" => time()
  225. );
  226. $insertId = Db::name("check_step")->strict(false)->insertGetId($checkStepData);
  227. $param["check_step_sort"] = $insertId;
  228. $param["check_user"] = $param["check_admin_name"];
  229. unset($param["check_status"]);
  230. $old = Db::name('Contract')->where('id', $param['id'])->find();
  231. if (!empty($old["check_flow_ids"])) {
  232. $check_step_sort = explode(",", (string)$old["check_step_sort"]);
  233. $check_step_sort[] = $old["check_flow_ids"];
  234. $check_step_sort = implode(",", $check_step_sort);
  235. } else {
  236. $check_step_sort = $old["check_step_sort"];
  237. }
  238. $param["check_flow_ids"] = $check_step_sort;
  239. if (Db::name('Contract')->strict(false)->update($param)) {
  240. $log_data = array(
  241. 'field' => 'check_step_sort',
  242. 'contract_id' => $param['id'],
  243. 'admin_id' => $this->uid,
  244. 'new_content' => $insertId,
  245. 'old_content' => $old['check_step_sort'],
  246. 'create_time' => time(),
  247. );
  248. Db::name("check_step")->update(["id"=>$old["check_step_sort"],"check_status"=>3]);
  249. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  250. return to_assign(0, "操作成功");
  251. } else {
  252. return to_assign(1, "操作失败");
  253. }
  254. }
  255. }
  256. //状态改变等操作
  257. public function check()
  258. {
  259. if (request()->isPost()) {
  260. $param = get_params();
  261. if ($param['check_status'] == 0) {
  262. $param['check_step_sort'] = 0;
  263. }
  264. $checkStepData = array(
  265. "check_admin" => $param["check_admin_name"],
  266. "check_id" => $param["check_admin_ids"],
  267. "create_time" => time()
  268. );
  269. $insertId = Db::name("check_step")->strict(false)->insertGetId($checkStepData);
  270. $param["check_step_sort"] = $insertId;
  271. $param["check_user"] = $param["check_admin_name"];
  272. // halt($param);
  273. $old = Db::name('Contract')->where('id', $param['id'])->find();
  274. if (Db::name('Contract')->strict(false)->update($param) !== false) {
  275. $log_data = array(
  276. 'field' => 'check_status',
  277. 'contract_id' => $param['id'],
  278. 'admin_id' => $this->uid,
  279. 'new_content' => $param['check_status'],
  280. 'old_content' => $old['check_status'],
  281. 'create_time' => time(),
  282. );
  283. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  284. return to_assign(0, "操作成功");
  285. } else {
  286. return to_assign(1, "操作失败");
  287. }
  288. } else {
  289. return to_assign(1, "错误的请求");
  290. }
  291. }
  292. //中止合同
  293. public function discontinue()
  294. {
  295. if (request()->isPost()) {
  296. $param = get_params();
  297. $param['stop_uid'] = $this->uid;
  298. $param["stop_name"] = get_login_admin("nickname");
  299. $param["stop_time"] = time();
  300. $param["stop_remark"] = !empty($param["mark"]) ? $param["mark"] : "";
  301. // halt($param);
  302. $old = Db::name('Contract')->where('id', $param['id'])->find();
  303. if (Db::name('Contract')->strict(false)->update($param) !== false) {
  304. $log_data = array(
  305. 'field' => 'check_status',
  306. 'contract_id' => $param['id'],
  307. 'admin_id' => $this->uid,
  308. 'new_content' => $param['check_status'],
  309. 'old_content' => $old['check_status'],
  310. 'create_time' => time(),
  311. );
  312. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  313. return to_assign(0, "操作成功");
  314. } else {
  315. return to_assign(1, "操作失败");
  316. }
  317. } else {
  318. return to_assign(1, "错误的请求");
  319. }
  320. }
  321. //作废合同
  322. public function obsolete()
  323. {
  324. if (request()->isPost()) {
  325. $param = get_params();
  326. $param['void_uid'] = $this->uid;
  327. $param["void_name"] = get_login_admin("nickname");
  328. $param["void_time"] = time();
  329. $param["void_remark"] = !empty($param["mark"]) ? $param["mark"] : "";
  330. $old = Db::name('Contract')->where('id', $param['id'])->find();
  331. if (Db::name('Contract')->strict(false)->update($param) !== false) {
  332. $log_data = array(
  333. 'field' => 'check_status',
  334. 'contract_id' => $param['id'],
  335. 'admin_id' => $this->uid,
  336. 'new_content' => $param['check_status'],
  337. 'old_content' => $old['check_status'],
  338. 'create_time' => time(),
  339. );
  340. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  341. return to_assign(0, "操作成功");
  342. } else {
  343. return to_assign(1, "操作失败");
  344. }
  345. } else {
  346. return to_assign(1, "错误的请求");
  347. }
  348. }
  349. //归档等操作
  350. public function archive()
  351. {
  352. if (request()->isPost()) {
  353. $param = get_params();
  354. // if($param['archive_status'] == 1){
  355. $param['archive_uid'] = $this->uid;
  356. $param["archive_name"] = get_login_admin("nickname");
  357. $param['archive_time'] = time();
  358. $param["stop_remark"] = !empty($param["mark"]) ? $param["mark"] : "";
  359. // }
  360. $old = Db::name('Contract')->where('id', $param['id'])->find();
  361. if (Db::name('Contract')->strict(false)->update($param) !== false) {
  362. $log_data = array(
  363. 'field' => 'archive_status',
  364. 'contract_id' => $param['id'],
  365. 'admin_id' => $this->uid,
  366. 'new_content' => $param['archive_status'],
  367. 'old_content' => $old['archive_status'],
  368. 'create_time' => time(),
  369. );
  370. Db::name('ContractLog')->strict(false)->field(true)->insert($log_data);
  371. return to_assign(0, "操作成功");
  372. } else {
  373. return to_assign(1, "操作失败");
  374. }
  375. } else {
  376. return to_assign(1, "错误的请求");
  377. }
  378. }
  379. //审核流程
  380. public function check_node(){
  381. // if (request()->isPost()) {
  382. $param = get_params();
  383. $id = isset($param["id"])?$param["id"]:0;
  384. $stepIds = Db::name("contract")->where("id",$id)->column("check_flow_ids,check_step_sort");
  385. $ids = array();
  386. if(!empty($stepIds)){
  387. foreach ($stepIds as $k => $v){
  388. if(!empty($v["check_flow_ids"])){
  389. $ids = explode(",",$v["check_flow_ids"]);
  390. }
  391. if((int)$v["check_step_sort"]){
  392. $ids = array_merge($ids,(array)$v["check_step_sort"]);
  393. }
  394. }
  395. }
  396. $data = Db::name("check_step")->whereIn("id",$ids)->order('create_time asc')->select();
  397. return to_assign(0, "操作成功",$data);
  398. // } else {
  399. // return to_assign(1, "错误的请求");
  400. // }
  401. }
  402. //合同操作日志列表
  403. public function contract_log()
  404. {
  405. $param = get_params();
  406. $list = new ContractLog();
  407. $content = $list->contract_log($param);
  408. return to_assign(0, '', $content);
  409. }
  410. public function relevancy(){
  411. if(request()->isAjax()){
  412. $param = get_params();
  413. $where = [
  414. ["uid","=",$param["uid"]],
  415. ["uuid","=",$param["uuid"]],
  416. ["delete_time","=",0]
  417. ];
  418. $num = Db::name("relation")->where($where)->count();
  419. if($num!==0){
  420. return to_assign(0,"项目已添加");
  421. }
  422. $param["create_time"] = time();
  423. try {
  424. Db::name("relation")->strict(false)->field(true)->insert($param);
  425. } catch (\Exception $e) {
  426. return to_assign(1, '操作失败,原因:' . $e->getMessage());
  427. }
  428. return to_assign(0,"操作成功");
  429. }
  430. }
  431. public function relevancy_del(){
  432. if(request()->isAjax()){
  433. $param = get_params();
  434. $param["delete_time"] = time();
  435. $param["maker_id"] = $this->uid;
  436. try {
  437. Db::name("relation")->strict(false)->field(true)->save($param);
  438. } catch (\Exception $e) {
  439. return to_assign(1, '操作失败,原因:' . $e->getMessage());
  440. }
  441. return to_assign(0,"操作成功");
  442. }
  443. }
  444. public function relevancy_p(){
  445. if(request()->isAjax()){
  446. $param = get_params();
  447. $id = isset($param["id"])?$param["id"]:0;
  448. $uuid = Db::name("relation")->alias("r")
  449. ->leftJoin("cost_project c","c.id=r.uuid")->where("uid",$id)->where([["r.delete_time","=",0]])->column("r.id,project_name,uid,uuid");
  450. $newArr = [];
  451. foreach($uuid as $item){
  452. $key = $item['uid'].'-'.$item['uuid'];
  453. if(!isset($newArr[$key])){
  454. $newArr[$key] = $item;
  455. }
  456. }
  457. $result = array_values($newArr);
  458. return json($result);
  459. }
  460. }
  461. //获取客户列表
  462. public function get_customer()
  463. {
  464. $param = get_params();
  465. $where = array();
  466. if (!empty($param['keywords'])) {
  467. $where[] = ['id|name', 'like', '%' . $param['keywords'] . '%'];
  468. }
  469. $where[] = ['delete_time', '=', 0];
  470. $uid = $this->uid;
  471. $auth = isAuth($uid, 'customer_admin');
  472. $dids = get_department_role($this->uid);
  473. if ($auth == 0) {
  474. $whereOr[] = ['belong_uid', '=', $uid];
  475. if (!empty($dids)) {
  476. $whereOr[] = ['belong_did', 'in', $dids];
  477. }
  478. $whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',share_ids)")];
  479. }
  480. $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
  481. $contact = null;
  482. $list = Db::name('Customer')->field('id,name,address')->order('id asc')->where($where)->paginate($rows, false)->each(function ($item, $key) {
  483. $contact = Db::name('CustomerContact')->where(['cid' => $item['id'], 'is_default' => 1])->find();
  484. if (!empty($contact)) {
  485. $item['contact_name'] = $contact['name'];
  486. $item['contact_mobile'] = $contact['mobile'];
  487. } else {
  488. $item['contact_name'] = '';
  489. $item['contact_mobile'] = '';
  490. }
  491. return $item;
  492. });
  493. halt($list);
  494. table_assign(0, '', $list);
  495. }
  496. }