Expense.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. /**
  3. +-----------------------------------------------------------------------------------------------
  4. * GouGuOPEN [ 左手研发,右手开源,未来可期!]
  5. +-----------------------------------------------------------------------------------------------
  6. * @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
  7. +-----------------------------------------------------------------------------------------------
  8. * @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
  9. +-----------------------------------------------------------------------------------------------
  10. * @Author 勾股工作室 <hdm58@qq.com>
  11. +-----------------------------------------------------------------------------------------------
  12. */
  13. namespace app\finance\model;
  14. use think\model;
  15. use think\facade\Db;
  16. class Expense extends Model
  17. {
  18. /**
  19. * 获取分页列表
  20. * @param $where
  21. * @param $param
  22. */
  23. public function datalist($param=[],$where=[],$whereOr=[])
  24. {
  25. $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
  26. $order = empty($param['order']) ? 'id desc' : $param['order'];
  27. try {
  28. $list = self::where($where)
  29. ->where(function ($query) use($whereOr) {
  30. if (!empty($whereOr)){
  31. $query->whereOr($whereOr);
  32. }
  33. })
  34. ->order($order)
  35. ->paginate(['list_rows'=> $rows])
  36. ->each(function ($item, $key){
  37. $item->check_status_str = check_status_name($item->check_status);
  38. $item->income_month_str = empty($item->income_month) ? '-' : date('Y-m', $item->income_month);
  39. $item->expense_time = empty($item->expense_time) ? '-' : date('Y-m-d', $item->expense_time);
  40. $item->admin_name = Db::name('Admin')->where(['id' => $item->admin_id])->value('name');
  41. $item->department = Db::name('Department')->where(['id' => $item->did])->value('title');
  42. $item->create_time = to_date($item->create_time);
  43. $item['check_user'] = '-';
  44. if($item['check_status']==1 && !empty($item['check_uids'])){
  45. $check_user = Db::name('Admin')->where('id','in',$item['check_uids'])->column('name');
  46. $item['check_user'] = implode(',',$check_user);
  47. }
  48. if($item->pay_admin_id>0){
  49. $item->pay_name = Db::name('Admin')->where(['id' => $item->pay_admin_id])->value('name');
  50. $item->pay_time = date('Y-m-d H:i', $item->pay_time);
  51. }
  52. else{
  53. $item->pay_name='-';
  54. $item->pay_time='-';
  55. }
  56. });
  57. return $list;
  58. } catch(\Exception $e) {
  59. return ['code' => 1, 'data' => [], 'msg' => $e->getMessage()];
  60. }
  61. }
  62. //更新冲帐
  63. public function update_loan($id)
  64. {
  65. $balance_cost = Db::name('Expense')->where(['delete_time'=>0,'loan_id'=>$id])->sum('balance_cost');
  66. $loan = Db::name('Loan')->where('id',$id)->find();
  67. if($balance_cost*100 == $loan['cost']*100){
  68. Db::name('Loan')->where('id',$id)->update(['balance_cost'=>$balance_cost,'balance_status'=>2,'back_status'=>2]);
  69. }
  70. if($balance_cost*100 < $loan['cost']*100 && $balance_cost*100>0){
  71. Db::name('Loan')->where('id',$id)->update(['balance_cost'=>$balance_cost,'balance_status'=>1,'back_status'=>0]);
  72. }
  73. if($balance_cost == 0){
  74. Db::name('Loan')->where('id',$id)->update(['balance_cost'=>$balance_cost,'balance_status'=>0,'back_status'=>0]);
  75. }
  76. }
  77. /**
  78. * 添加数据
  79. * @param $param
  80. */
  81. public function add($param)
  82. {
  83. $insertId = 0;
  84. try {
  85. $param['create_time'] = time();
  86. $insertId = self::strict(false)->field(true)->insertGetId($param);
  87. //相报销选项多个数组;
  88. $amountData = isset($param['amount']) ? $param['amount'] : '';
  89. $remarksData = isset($param['remarks']) ? $param['remarks'] : '';
  90. $cateData = isset($param['cate_id']) ? $param['cate_id'] : '';
  91. $idData = isset($param['expense_id']) ? $param['expense_id'] : 0;
  92. if ($amountData) {
  93. foreach ($amountData as $key => $value) {
  94. if (!$value) {
  95. continue;
  96. }
  97. $data = [];
  98. $data['id'] = $idData[$key];
  99. $data['exid'] = $insertId;
  100. $data['admin_id'] = $param['admin_id'];
  101. $data['amount'] = $amountData[$key];
  102. $data['cate_id'] = $cateData[$key];
  103. $data['remarks'] = $remarksData[$key];
  104. if ($data['id'] > 0) {
  105. $data['update_time'] = time();
  106. $resa = Db::name('ExpenseInterfix')->strict(false)->field(true)->update($data);
  107. } else {
  108. $data['create_time'] = time();
  109. $eid = Db::name('ExpenseInterfix')->strict(false)->field(true)->insertGetId($data);
  110. }
  111. }
  112. }
  113. if(!empty($param['loan_id'])){
  114. $this->update_loan($param['loan_id']);
  115. }
  116. add_log('add', $insertId, $param);
  117. } catch(\Exception $e) {
  118. return to_assign(1, '操作失败,原因:'.$e->getMessage());
  119. }
  120. return to_assign(0,'操作成功',['return_id'=>$insertId]);
  121. }
  122. /**
  123. * 编辑信息
  124. * @param $param
  125. */
  126. public function edit($param)
  127. {
  128. try {
  129. $param['update_time'] = time();
  130. $old_loan_id = self::where('id', $param['id'])->value('loan_id');
  131. self::where('id', $param['id'])->strict(false)->field(true)->update($param);
  132. //相报销选项多个数组;
  133. $amountData = isset($param['amount']) ? $param['amount'] : '';
  134. $remarksData = isset($param['remarks']) ? $param['remarks'] : '';
  135. $cateData = isset($param['cate_id']) ? $param['cate_id'] : '';
  136. $idData = isset($param['expense_id']) ? $param['expense_id'] : 0;
  137. if ($amountData) {
  138. foreach ($amountData as $key => $value) {
  139. if (!$value) {
  140. continue;
  141. }
  142. $data = [];
  143. $data['id'] = $idData[$key];
  144. $data['exid'] = $param['id'];
  145. $data['admin_id'] = $param['admin_id'];
  146. $data['amount'] = $amountData[$key];
  147. $data['cate_id'] = $cateData[$key];
  148. $data['remarks'] = $remarksData[$key];
  149. if ($data['id'] > 0) {
  150. $data['update_time'] = time();
  151. $resa = Db::name('ExpenseInterfix')->strict(false)->field(true)->update($data);
  152. } else {
  153. $data['create_time'] = time();
  154. $eid = Db::name('ExpenseInterfix')->strict(false)->field(true)->insertGetId($data);
  155. }
  156. }
  157. }
  158. if(!empty($param['loan_id'])){
  159. $this->update_loan($param['loan_id']);
  160. }
  161. if(!empty($old_loan_id)){
  162. $this->update_loan($old_loan_id);
  163. }
  164. add_log('edit', $param['id'], $param);
  165. } catch(\Exception $e) {
  166. return to_assign(1, '操作失败,原因:'.$e->getMessage());
  167. }
  168. return to_assign(0,'操作成功',['return_id'=>$param['id']]);
  169. }
  170. /**
  171. * 根据id获取信息
  172. * @param $id
  173. */
  174. public function getById($id)
  175. {
  176. $info = self::find($id);
  177. $info['income_month_str'] = to_date($info['income_month'],'Y-m');
  178. $info['expense_time'] = empty($info['expense_time']) ? '-' : date('Y-m-d', $info['expense_time']);
  179. $info['admin_name'] = Db::name('Admin')->where(['id' => $info['admin_id']])->value('name');
  180. $info['department'] = Db::name('Department')->where(['id' => $info['did']])->value('title');
  181. if ($info['pay_time'] > 0) {
  182. $info['pay_time'] = date('Y-m-d H:i:s', $info['pay_time']);
  183. $info['pay_admin'] = Db::name('Admin')->where(['id' => $info['pay_admin_id']])->value('name');
  184. }
  185. else{
  186. $info['pay_time'] = '-';
  187. }
  188. if ($info['project_id'] > 0) {
  189. $info['ptname'] = Db::name('Project')->where(['id' => $info['project_id']])->value('name');
  190. }
  191. else{
  192. $info['ptname'] = '';
  193. }
  194. if ($info['subject_id'] > 0) {
  195. $info['subject_name'] = Db::name('Enterprise')->where(['id' => $info['subject_id']])->value('title');
  196. }
  197. $info['list'] = Db::name('ExpenseInterfix')
  198. ->field('a.*,c.title as cate_title')
  199. ->alias('a')
  200. ->join('ExpenseCate c', 'a.cate_id = c.id','LEFT')
  201. ->where(['a.exid' => $info['id']])
  202. ->select();
  203. if(!empty($info['file_ids'])){
  204. $file_array = Db::name('File')->where('id','in',$info['file_ids'])->select();
  205. $info['file_array'] = $file_array;
  206. }
  207. return $info;
  208. }
  209. /**
  210. * 删除信息
  211. * @param $id
  212. * @param $type
  213. * @return array
  214. */
  215. public function delById($id,$type=0)
  216. {
  217. if($type==0){
  218. //逻辑删除
  219. try {
  220. $param['delete_time'] = time();
  221. self::where('id', $id)->update(['delete_time'=>time()]);
  222. $loan_id = self::where('id', $id)->value('loan_id');
  223. if($loan_id>0){
  224. update_loan($loan_id);
  225. }
  226. add_log('delete', $id);
  227. } catch(\Exception $e) {
  228. return to_assign(1, '操作失败,原因:'.$e->getMessage());
  229. }
  230. }
  231. else{
  232. //物理删除
  233. try {
  234. self::destroy($id);
  235. add_log('delete', $id);
  236. } catch(\Exception $e) {
  237. return to_assign(1, '操作失败,原因:'.$e->getMessage());
  238. }
  239. }
  240. return to_assign();
  241. }
  242. }