MasterSettlementDetailsLogic.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeadmin快速开发前后端分离管理后台(PHP版)
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
  8. // | github下载:https://github.com/likeshop-github/likeadmin
  9. // | 访问官网:https://www.likeadmin.cn
  10. // | likeadmin团队 版权所有 拥有最终解释权
  11. // +----------------------------------------------------------------------
  12. // | author: likeadminTeam
  13. // +----------------------------------------------------------------------
  14. namespace app\adminapi\logic\financial;
  15. use app\common\model\financial\MasterSettlementDetails;
  16. use app\common\logic\BaseLogic;
  17. use app\common\model\master_worker\EngineerSettlement;
  18. use think\facade\Db;
  19. /**
  20. * MasterSettlementDetails逻辑
  21. * Class MasterSettlementDetailsLogic
  22. * @package app\adminapi\logic
  23. */
  24. class MasterSettlementDetailsLogic extends BaseLogic
  25. {
  26. /**
  27. * @notes 添加
  28. * @param array $params
  29. * @return bool
  30. * @author likeadmin
  31. * @date 2024/12/02 15:57
  32. */
  33. public static function add(array $params): bool
  34. {
  35. Db::startTrans();
  36. try {
  37. MasterSettlementDetails::create([
  38. 'account_log_id' => $params['account_log_id'],
  39. 'payment_time' => $params['payment_time'],
  40. 'batch_number' => $params['batch_number'],
  41. 'status' => $params['status'],
  42. 'master_worker_id' => $params['master_worker_id'],
  43. 'amount_change' => $params['amount_change'],
  44. 'change_time' => $params['change_time'],
  45. 'remark' => $params['remark'],
  46. ]);
  47. Db::commit();
  48. return true;
  49. } catch (\Exception $e) {
  50. Db::rollback();
  51. self::setError($e->getMessage());
  52. return false;
  53. }
  54. }
  55. /**
  56. * @notes 编辑
  57. * @param array $params
  58. * @return bool
  59. * @author likeadmin
  60. * @date 2024/12/02 15:57
  61. */
  62. public static function edit(array $params): bool
  63. {
  64. Db::startTrans();
  65. try {
  66. MasterSettlementDetails::where('id', $params['id'])->update([
  67. 'account_log_id' => $params['account_log_id'],
  68. 'payment_time' => $params['payment_time'],
  69. 'batch_number' => $params['batch_number'],
  70. 'status' => $params['status'],
  71. 'master_worker_id' => $params['master_worker_id'],
  72. 'amount_change' => $params['amount_change'],
  73. 'change_time' => $params['change_time'],
  74. 'remark' => $params['remark'],
  75. ]);
  76. Db::commit();
  77. return true;
  78. } catch (\Exception $e) {
  79. Db::rollback();
  80. self::setError($e->getMessage());
  81. return false;
  82. }
  83. }
  84. /**
  85. * @notes 删除
  86. * @param array $params
  87. * @return bool
  88. * @author likeadmin
  89. * @date 2024/12/02 15:57
  90. */
  91. public static function delete(array $params): bool
  92. {
  93. return MasterSettlementDetails::destroy($params['id']);
  94. }
  95. /**
  96. * @notes 获取详情
  97. * @param $params
  98. * @return array
  99. * @author likeadmin
  100. * @date 2024/12/02 15:57
  101. */
  102. public static function detail($params): array
  103. {
  104. return MasterSettlementDetails::findOrEmpty($params['id'])->toArray();
  105. }
  106. /**
  107. * @notes 更新批次
  108. * @param $params
  109. * @return array
  110. * @author likeadmin
  111. * @date 2024/12/02 15:57
  112. */
  113. public static function upBatchStatus($params,$batch_number)
  114. {
  115. $deadline_time = $params['deadline_time'];
  116. $settlement_type = $params['settlement_type'];
  117. /*$lists = Db::name('master_worker')->alias('a')->field([
  118. 'a.id','a.real_name','a.nickname','a.worker_number','e.account_holder','e.bank_name','e.opening_branch','e.account as bank_account','b.id as detail_id'
  119. ])
  120. ->leftJoin('master_settlement_details b', 'a.id = b.master_worker_id AND b.status = 1')
  121. ->leftJoin('bank_account e', 'a.id = e.worker_id')
  122. ->where('a.audit_state', '=', 1)
  123. ->where('a.user_money', '>', 0)
  124. ->where('b.status', '=', 1)
  125. ->where('a.settlement_type', '=', $settlement_type)
  126. ->where('b.change_time', '<', $deadline_time)
  127. ->select()->toArray();*/
  128. $lists = Db::name('master_worker')->alias('a')->field([
  129. 'a.id','a.real_name','a.nickname','a.worker_number','a.user_money',
  130. 'e.account_holder','e.bank_name','e.opening_branch','e.account as bank_account',
  131. Db::raw("sum(amount_change) as left_amount")
  132. ])
  133. ->leftJoin('master_settlement_details b', 'a.id = b.master_worker_id AND b.status = 1')
  134. ->leftJoin('bank_account e', 'a.id = e.worker_id')
  135. ->where('a.audit_state', '=', 1)
  136. ->where('a.user_money', '>', 0)
  137. ->where('b.status', '=', 1)
  138. ->where('a.settlement_type', '=', $settlement_type)
  139. ->where('b.change_time', '<', $deadline_time)
  140. ->group('a.id')
  141. ->order('a.id desc')
  142. ->having('left_amount > 0')
  143. ->select()->toArray();
  144. // 根据条件获取能打款的 工程师 left_amount user_money
  145. $can_payment_ids = [];
  146. $insertXlsData = [];
  147. foreach ($lists as $item) {
  148. if(!empty($item['left_amount']) && !empty($item['user_money']) && ((float)$item['left_amount'] <= (float)$item['user_money'])){
  149. $can_payment_ids[] = $item['id'];
  150. $insertXlsData[] = [
  151. 'master_worker_id' => $item['id'],
  152. 'worker_number' => $item['worker_number'],
  153. 'engineer_name' => $item['account_holder'],
  154. 'bank_account' => $item['bank_account'],
  155. 'bank_name' => $item['bank_name'],
  156. 'opening_branch' => $item['opening_branch'],
  157. 'original_balance' => $item['user_money'],
  158. 'total_settlement_amount' => $item['left_amount'],
  159. 'payment_status' => 0,
  160. 'is_export' => 1,
  161. 'batch_number'=> $batch_number,
  162. 'create_time'=> time(),
  163. 'update_time'=> time(),
  164. 'admin_id'=> 0,
  165. 'is_deduction'=> 0,
  166. ];
  167. }
  168. }
  169. //由可发工程师, 修改该工程师 截止$deadline_time 的 状态和批号
  170. MasterSettlementDetails::where('id','in', $can_payment_ids)
  171. ->where('change_time', '<', $deadline_time)
  172. ->where('status', '=', 1)
  173. ->update([
  174. 'status' => 2,
  175. 'batch_number' => $batch_number,
  176. ]);
  177. // 生成 可发 数据表格
  178. Db::name('engineer_settlement')->insertAll($insertXlsData);
  179. return $insertXlsData;
  180. }
  181. }