ContractPay.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. <?php
  2. namespace app\common\model;
  3. use app\hander\HelpHander;
  4. use think\Db;
  5. use think\Model;
  6. class ContractPay extends Model
  7. {
  8. public function advancedStartContractPay($id,$orgId,$userId,$formJson){
  9. $formJson = json_decode($formJson,true);
  10. $data = [
  11. 'org_id' => $orgId,
  12. 'user_id' => $userId,
  13. 'apply_id' => $id,
  14. 'create_time' => date('Y-m-d H:i:s'),
  15. 'status' => 0,
  16. 'ispay' => 1
  17. ];
  18. $attachment = 0; //0=无附件 1=有附件
  19. foreach ($formJson as $k=>$v){
  20. if($v['componentName'] == 'ddpaycontractfield'){
  21. foreach ($v['components'] as $key=>$val){
  22. switch ($val['idx']){
  23. case '0':
  24. $data['pay_apply_id'] = $val['values2'][0]['id'];
  25. break;
  26. case '1':
  27. $data['money'] = $val['values'];
  28. break;
  29. // case '2':
  30. // $data['agent'] = $val['values'];
  31. // break;
  32. case '3':
  33. $data['last'] = $val['values'] == '是'?1:0;
  34. break;
  35. case '5':
  36. $attachment = empty($val['values'])?0:1;
  37. break;
  38. case '6':
  39. $data['completion'] = isset($val['values'])?$val['values']:0;;
  40. break;
  41. }
  42. }
  43. break;
  44. }
  45. }
  46. $payinfo = Db::name('contract')->where('apply_id',$data['pay_apply_id'])->find();
  47. $data['company_id'] = $payinfo['company_id'];
  48. $paymoney = $payinfo['pay_money'] + $data['money'];
  49. if($data['last'] == 1 && $paymoney != $payinfo['money'] && $attachment != 1){ // 是尾款
  50. $this->error = '结算价与合同价不同,必须上传附件说明';
  51. return false;
  52. }
  53. $ret = Db::name('contract_pay')->insert($data);
  54. if(!$ret){
  55. $this->error = '数据保存失败';
  56. return false;
  57. }
  58. return true;
  59. }
  60. public function advancedEndContractPay($id,$orgId,$userId,$formJson){
  61. $data = [
  62. 'update_time' => date('Y-m-d H:i:s'),
  63. 'status' => 1
  64. ];
  65. $info = Db::name('contract_pay')->where('apply_id',$id)->find();
  66. $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find();
  67. if($info['completion'] > 0){
  68. if($payinfo['type'] == 0){ //普通合同
  69. $res = Db::name('contract')->where('id',$payinfo['id'])->update([
  70. 'completion' => round($info['completion'],2),
  71. 'update_time' => date('Y-m-d H:i:s')
  72. ]);
  73. }else{ //追加合同
  74. $parent_apply_id = Db::name('contract')->where('id',$payinfo['id'])->value('parent_apply_id');
  75. $pinfo = Db::name('contract')
  76. ->where('apply_id',$parent_apply_id)
  77. ->where('status',1)
  78. ->find();
  79. $res = Db::name('contract')->where('id',$pinfo['id'])->update([
  80. 'completion' => round($info['completion'],2),
  81. 'update_time' => date('Y-m-d H:i:s')
  82. ]);
  83. }
  84. if(!$res){
  85. return false;
  86. }
  87. }
  88. $paymoney = $payinfo['pay_money'] + $info['money'];
  89. $data['pay_money'] = $paymoney;
  90. $res = Db::name('contract_pay')->where('id',$info['id'])->update($data);
  91. if(!$res){
  92. $this->error = '数据修改失败';
  93. return false;
  94. }
  95. $ret = Db::name('contract')->where('id',$payinfo['id'])->update([
  96. 'finish' => $info['last'],
  97. 'pay_money' => $paymoney,
  98. 'update_time' => date('Y-m-d H:i:s')
  99. ]);
  100. if(!$ret){
  101. $this->error = '数据修改失败';
  102. return false;
  103. }
  104. return true;
  105. }
  106. public function advancedDisagreeContractPay($id){
  107. $data = [
  108. 'update_time' => date('Y-m-d H:i:s'),
  109. 'status' => 2
  110. ];
  111. $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data);
  112. return $ret?true:false;
  113. }
  114. public function advancedDelContractPay($id){
  115. $info = Db::name('contract_pay')->where('apply_id',$id)->find();
  116. $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find();
  117. $data = [
  118. 'update_time' => date('Y-m-d H:i:s'),
  119. 'status' => 2
  120. ];
  121. $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data);
  122. if($ret && $info['status'] == 1){
  123. $paymoney = $payinfo['pay_money'] - $info['money'];
  124. $res = Db::name('contract')->where('id',$payinfo['id'])->update([
  125. 'finish' => $info['last'] == 1?0:$payinfo['finish'],
  126. 'pay_money' => $paymoney,
  127. 'update_time' => date('Y-m-d H:i:s')
  128. ]);
  129. if(!$res){
  130. return false;
  131. }
  132. if($info['completion'] > 0){
  133. if($payinfo['type'] == 0){ //普通合同
  134. $res = Db::name('contract')->where('id',$payinfo['id'])->update([
  135. 'completion' => $info['completion'] != $payinfo['completion']?$payinfo['completion']:0,
  136. 'update_time' => date('Y-m-d H:i:s')
  137. ]);
  138. }else{ //追加合同
  139. $parent_apply_id = Db::name('contract')->where('id',$payinfo['id'])->value('parent_apply_id');
  140. $pinfo = Db::name('contract')
  141. ->where('apply_id',$parent_apply_id)
  142. ->where('status',1)
  143. ->find();
  144. $res = Db::name('contract')->where('id',$pinfo['id'])->update([
  145. 'completion' => $info['completion'] != $pinfo['completion']?$pinfo['completion']:0,
  146. 'update_time' => date('Y-m-d H:i:s')
  147. ]);
  148. }
  149. if(!$res){
  150. return false;
  151. }
  152. }
  153. }
  154. return $ret?true:false;
  155. }
  156. public function advancedStartContractGet($id,$orgId,$userId,$formJson){
  157. $formJson = json_decode($formJson,true);
  158. $data = [
  159. 'org_id' => $orgId,
  160. 'user_id' => $userId,
  161. 'apply_id' => $id,
  162. 'create_time' => date('Y-m-d H:i:s'),
  163. 'status' => 0,
  164. 'ispay' => 2
  165. ];
  166. // $attachment = 0; //0=无附件 1=有附件
  167. foreach ($formJson as $k=>$v){
  168. if($v['componentName'] == 'ddgetcontractfield'){
  169. foreach ($v['components'] as $key=>$val){
  170. $val['values2'] = isset($val['values2'])?$val['values2']:[];
  171. $val['values'] = isset($val['values'])?$val['values']:'';
  172. switch ($val['idx']){
  173. case '0':
  174. $data['pay_apply_id'] = $val['values2'][0]['id'];
  175. break;
  176. case '1':
  177. $data['money'] = $val['values'];
  178. break;
  179. // case '2':
  180. // $data['agent'] = $val['values'];
  181. // break;
  182. case '3':
  183. $data['last'] = $val['values'] == '是'?1:0;
  184. break;
  185. // case '5':
  186. // $attachment = empty($val['values'])?0:1;
  187. // break;
  188. }
  189. }
  190. break;
  191. }
  192. }
  193. $payinfo = Db::name('contract')->where('apply_id',$data['pay_apply_id'])->find();
  194. $data['company_id'] = $payinfo['company_id'];
  195. // $paymoney = $payinfo['pay_money'] + $data['money'];
  196. // if($data['last'] == 1 && $paymoney != $payinfo['money'] && $attachment != 1){ // 是尾款
  197. // $this->error = '结算价与合同价不同,必须上传附件说明';
  198. // return false;
  199. // }
  200. $ret = Db::name('contract_pay')->insert($data);
  201. if(!$ret){
  202. $this->error = '数据保存失败';
  203. return false;
  204. }
  205. return true;
  206. }
  207. public function advancedEndContractGet($id,$orgId,$userId,$formJson){
  208. $data = [
  209. 'update_time' => date('Y-m-d H:i:s'),
  210. 'status' => 1
  211. ];
  212. $info = Db::name('contract_pay')->where('apply_id',$id)->find();
  213. $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find();
  214. $paymoney = $payinfo['pay_money'] + $info['money'];
  215. $data['pay_money'] = $paymoney;
  216. $res = Db::name('contract_pay')->where('id',$info['id'])->update($data);
  217. if(!$res){
  218. $this->error = '数据修改失败';
  219. return false;
  220. }
  221. $ret = Db::name('contract')->where('id',$payinfo['id'])->update([
  222. 'finish' => $info['last'],
  223. 'pay_money' => $paymoney,
  224. 'update_time' => date('Y-m-d H:i:s')
  225. ]);
  226. if(!$ret){
  227. $this->error = '数据修改失败';
  228. return false;
  229. }
  230. return true;
  231. }
  232. public function advancedDisagreeContractGet($id){
  233. $data = [
  234. 'update_time' => date('Y-m-d H:i:s'),
  235. 'status' => 2
  236. ];
  237. $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data);
  238. return $ret?true:false;
  239. }
  240. public function advancedDelContractGet($id){
  241. $info = Db::name('contract_pay')->where('apply_id',$id)->find();
  242. $payinfo = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->find();
  243. $data = [
  244. 'update_time' => date('Y-m-d H:i:s'),
  245. 'status' => 2
  246. ];
  247. $ret = Db::name('contract_pay')->where('apply_id',$id)->update($data);
  248. if($ret && $info['status'] == 1){
  249. $d = [
  250. 'pay_money' => $payinfo['pay_money'] - $info['money'],
  251. 'update_time' => date('Y-m-d H:i:s')
  252. ];
  253. if($info['last'] == 1){
  254. $d['finish'] = 0;
  255. }
  256. $res = Db::name('contract')->where('id',$payinfo['id'])->update($d);
  257. if(!$res){
  258. return false;
  259. }
  260. }
  261. return $ret?true:false;
  262. }
  263. public function payLists($applyId){
  264. $map[] = ['status','=',1];
  265. // 先获取追加合同的id
  266. $applyids = Db::name('contract')
  267. ->where('status',1)
  268. ->where('type',1)
  269. ->where('parent_apply_id',$applyId)
  270. ->column('apply_id');
  271. $applyids = $applyids?$applyids:[];
  272. $applyids[] = $applyId;
  273. $map[] = ['pay_apply_id','in',$applyids];
  274. $lists = $this
  275. ->where($map)
  276. ->order('id asc')
  277. ->select();
  278. $lists = $lists?$lists->toArray():[];
  279. foreach ($lists as $k=>$v){
  280. $lists[$k]['company'] = Db::name('company')->where('id',$v['company_id'])->value('title');
  281. $info = Db::name('contract')->where('apply_id',$v['pay_apply_id'])->find();
  282. $lists[$k]['contract_sn'] = $info['contract_sn'];
  283. $lists[$k]['title'] = $info['title'];
  284. $lists[$k]['agent'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
  285. }
  286. return $lists;
  287. }
  288. public function payLists2($page,$size,$title,$contractSn,$qrStatus){
  289. $map[] = ['cp.status','=',1];
  290. if($qrStatus >= 0){
  291. $map[] = ['cp.qr_status','=',$qrStatus];
  292. }
  293. if($title){
  294. $map[] = ['c.title','like','%'.$title.'%'];
  295. }
  296. if($contractSn){
  297. $map[] = ['c.contract_sn','like','%'.$contractSn.'%'];
  298. }
  299. $lists = Db::name('contract_pay')
  300. ->alias('cp')
  301. ->join('contract c','c.apply_id = cp.pay_apply_id')
  302. ->join('apply a','a.id = cp.apply_id')
  303. ->where($map)
  304. ->page($page,$size)
  305. ->field('cp.*,c.title,c.contract_sn,c.type,a.approval_id')
  306. ->order('cp.id desc')
  307. ->select();
  308. $lists = $lists?$lists:[];
  309. foreach ($lists as $k=>$v){
  310. $lists[$k]['userName'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
  311. // 是否可打印请款单
  312. $lists[$k]['print'] = 0;
  313. if($v['ispay'] == 1 && $v['approval_id'] == 88){
  314. $lists[$k]['print'] = 1;
  315. }
  316. $lists[$k]['cw_user_name'] = '';
  317. $lists[$k]['dep_user_name'] = '';
  318. $lists[$k]['leaders_name'] = '';
  319. if($v['cw_user_id'] > 0){
  320. $lists[$k]['cw_user_name'] = Db::name('user_info')->where('user_id',$v['cw_user_id'])->value('name');
  321. }
  322. if($v['dep_user_id'] > 0){
  323. $lists[$k]['dep_user_name'] = Db::name('user_info')->where('user_id',$v['dep_user_id'])->value('name');
  324. }
  325. if($v['leaders']){
  326. $ids = explode(',',$v['leaders']);
  327. $names = [];
  328. foreach ($ids as $val){
  329. $names[] = Db::name('user_info')->where('user_id',$val)->value('name');
  330. }
  331. $lists[$k]['leaders_name'] = implode(',',$names);
  332. }
  333. }
  334. $total = Db::name('contract_pay')
  335. ->alias('cp')
  336. ->join('contract c','c.apply_id = cp.pay_apply_id')
  337. ->join('apply a','a.id = cp.apply_id')
  338. ->where($map)->count();
  339. $data = [
  340. 'total' => $total,
  341. 'list' => $lists
  342. ];
  343. return $data;
  344. }
  345. public function payPrint($applyId){
  346. $this->formatContractPay($applyId);
  347. $info = Db::name('contract_pay')->where('apply_id',$applyId)->where('status',1)->find();
  348. if(!$info){
  349. HelpHander::error('记录不存在');
  350. }
  351. $info['day'] = date('Y年m月d日');
  352. $info['company_name'] = Db::name('company')->where('id',$info['company_id'])->value('title');
  353. $info['contract_company'] = Db::name('contract')->where('apply_id',$info['pay_apply_id'])->value('company2');
  354. $apply = Db::name('apply')->where('id',$info['apply_id'])->find();
  355. $info['dep_name'] = Db::name('dep')->where('id',$apply['dep_id'])->value('name');
  356. $info['content'] = '';
  357. $formJson = json_decode($apply['form_json'],true);
  358. $info['pay'] = '';
  359. foreach ($formJson as $k=>$v){
  360. if($v['componentName'] == 'ddpaycontractfield'){
  361. foreach ($v['components'] as $key=>$val){
  362. $val['values'] = isset($val['values'])?$val['values']:'';
  363. switch ($val['idx']){
  364. case '4':
  365. $info['content'] = $val['values'];
  366. break;
  367. case '2':
  368. $info['pay'] = $val['values'];
  369. break;
  370. }
  371. }
  372. break;
  373. }
  374. }
  375. $info['user_name'] = Db::name('user_info')->where('user_id',$info['user_id'])->value('name');
  376. $info['cw_user_name'] = '';
  377. $info['dep_user_name'] = '';
  378. $info['leaders_name'] = '';
  379. if($info['cw_user_id'] > 0){
  380. $info['cw_user_name'] = Db::name('user_info')->where('user_id',$info['cw_user_id'])->value('name');
  381. $cwrecord = Db::name('apply_record')
  382. ->where('apply_id',$info['apply_id'])
  383. ->where('user_id',$info['cw_user_id'])
  384. ->where('status',1)
  385. ->where('del',0)
  386. ->where('type','in',[2,8])
  387. ->order('id desc')
  388. ->find();
  389. $info['cw_record'] = $cwrecord;
  390. }
  391. if($info['dep_user_id'] > 0){
  392. $info['dep_user_name'] = Db::name('user_info')->where('user_id',$info['dep_user_id'])->value('name');
  393. $deprecord = Db::name('apply_record')
  394. ->where('apply_id',$info['apply_id'])
  395. ->where('user_id',$info['dep_user_id'])
  396. ->where('status',1)
  397. ->where('del',0)
  398. ->where('type','in',[2,8])
  399. ->order('id desc')
  400. ->find();
  401. $info['dep_record'] = $deprecord;
  402. }
  403. if($info['leaders']){
  404. $ids = explode(',',$info['leaders']);
  405. $names = [];
  406. foreach ($ids as $val){
  407. $names[] = Db::name('user_info')->where('user_id',$val)->value('name');
  408. }
  409. $info['leaders_name'] = implode(',',$names);
  410. $deprecord = Db::name('apply_record')
  411. ->where('apply_id',$info['apply_id'])
  412. ->where('user_id','in',$ids)
  413. ->where('status',1)
  414. ->where('del',0)
  415. ->where('type','in',[2,8])
  416. ->order('id desc')
  417. ->select();
  418. foreach ($deprecord as $k=>$v){
  419. $deprecord[$k]['user_name'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
  420. }
  421. $info['leaders_record'] = $deprecord;
  422. }
  423. $info['zr_user_name'] = '';
  424. $info['zr_content'] = '';
  425. $info['zr_time'] = '';
  426. if($applyId == 5573){ //特殊单子
  427. $info['zr_user_name'] = '冯磊';
  428. $info['zr_content'] = '同意';
  429. $info['zr_time'] = '2022-01-05 14:23:37';
  430. }
  431. return $info;
  432. }
  433. // 格式化合同支付会签的各个负责人
  434. public function formatContractPay($applyId){
  435. $info = Db::name('contract_pay')->where('apply_id',$applyId)->where('status',1)->find();
  436. if($info && !$info['dep_user_id']){
  437. $apply = Db::name('apply')->where('id',$info['apply_id'])->find();
  438. if($apply['approval_id'] != 88){
  439. return false;
  440. }
  441. $flow = json_decode($apply['flow_json'],true);
  442. $dnodeId = '';
  443. foreach ($flow as $k=>$v){
  444. if($v['type'] == 2 && $v['name'] == '处室负责人'){
  445. $dnodeId = $v['id'];
  446. }
  447. }
  448. $data = [
  449. 'cw_user_id' => 0,
  450. 'dep_user_id' => 0,
  451. 'leaders' => '',
  452. ];
  453. if($dnodeId){
  454. $depId = Db::name('apply_record')->where('apply_id',$info['apply_id'])->where('nodeid',$dnodeId)->where('status',1)->where('del',0)->value('user_id');
  455. $data['dep_user_id'] = $depId?$depId:0;
  456. }else{
  457. $data['dep_user_id'] = $apply['user_id'];
  458. }
  459. $ldep = 226; // 中心领导部门
  460. $ljobs = [282,161]; // 161=党委书记,主任 282=中心副主任
  461. $cdep = 205; // 财务处
  462. $users = Db::name('apply_record')
  463. ->alias('ar')
  464. ->join('user_job uj','uj.user_id = ar.user_id')
  465. ->join('job j','j.id = uj.job_id')
  466. ->where('ar.apply_id',$info['apply_id'])
  467. ->where('ar.status',1)
  468. ->where('ar.del',0)
  469. ->where('ar.type','in',[2,8])
  470. ->field('ar.user_id,j.dep_id,uj.job_id')
  471. ->select();
  472. $users = $users?$users:[];
  473. $lids = [];
  474. foreach ($users as $k=>$v){
  475. if($v['dep_id'] == $cdep){ // 财务处
  476. $data['cw_user_id'] = $v['user_id'];
  477. }else if($v['dep_id'] == $ldep && !in_array($v['job_id'],$ljobs)){ //中心分管领导
  478. $lids[] = $v['user_id'];
  479. }
  480. }
  481. $data['leaders'] = $lids?implode(',',$lids):'';
  482. Db::name('contract_pay')->where('id',$info['id'])->update($data);
  483. }
  484. }
  485. // 上传支付收款凭证
  486. public function payupdates($id,$sdFile){
  487. $data = [
  488. 'file' => $sdFile,
  489. 'file_time' => date('Y-m-d H:i:s'),
  490. 'file_status' => 1
  491. ];
  492. if($id <= 0){
  493. HelpHander::error('参数错误');
  494. }
  495. if(!$data['file']){
  496. HelpHander::error('未上传支付/收款凭证');
  497. }
  498. $info = Db::name('contract_pay')->where('id',$id)->find();
  499. if(!$info || $info['status'] != 1){
  500. HelpHander::error('记录不存在');
  501. }
  502. if($info['file_status'] == 1){
  503. HelpHander::error('已上传过凭证');
  504. }
  505. $ret = Db::name('contract_pay')->where('id',$id)->update($data);
  506. if(!$ret){
  507. HelpHander::error('操作失败');
  508. }
  509. return true;
  510. }
  511. // 确认
  512. public function payConfirm($id,$userId){
  513. $data = [
  514. 'qr_user_id' => $userId,
  515. 'qr_time' => date('Y-m-d H:i:s'),
  516. 'qr_status' => 1
  517. ];
  518. if($id <= 0){
  519. HelpHander::error('参数错误');
  520. }
  521. $info = Db::name('contract_pay')->where('id',$id)->find();
  522. if(!$info || $info['status'] != 1){
  523. HelpHander::error('记录不存在');
  524. }
  525. if($info['qr_status'] == 1){
  526. HelpHander::error('已确认过');
  527. }
  528. $ret = Db::name('contract_pay')->where('id',$id)->update($data);
  529. if(!$ret){
  530. HelpHander::error('操作失败');
  531. }
  532. return true;
  533. }
  534. }