MasterSettlementDetailsLogic.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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. use think\facade\Log;
  20. /**
  21. * MasterSettlementDetails逻辑
  22. * Class MasterSettlementDetailsLogic
  23. * @package app\adminapi\logic
  24. */
  25. class MasterSettlementDetailsLogic extends BaseLogic
  26. {
  27. /**
  28. * @notes 添加
  29. * @param array $params
  30. * @return bool
  31. * @author likeadmin
  32. * @date 2024/12/02 15:57
  33. */
  34. public static function add(array $params): bool
  35. {
  36. Db::startTrans();
  37. try {
  38. MasterSettlementDetails::create([
  39. 'account_log_id' => $params['account_log_id'],
  40. 'payment_time' => $params['payment_time'],
  41. 'batch_number' => $params['batch_number'],
  42. 'status' => $params['status'],
  43. 'master_worker_id' => $params['master_worker_id'],
  44. 'amount_change' => $params['amount_change'],
  45. 'change_time' => $params['change_time'],
  46. 'remark' => $params['remark'],
  47. ]);
  48. Db::commit();
  49. return true;
  50. } catch (\Exception $e) {
  51. Db::rollback();
  52. self::setError($e->getMessage());
  53. return false;
  54. }
  55. }
  56. /**
  57. * @notes 编辑
  58. * @param array $params
  59. * @return bool
  60. * @author likeadmin
  61. * @date 2024/12/02 15:57
  62. */
  63. public static function edit(array $params): bool
  64. {
  65. Db::startTrans();
  66. try {
  67. MasterSettlementDetails::where('id', $params['id'])->update([
  68. 'account_log_id' => $params['account_log_id'],
  69. 'payment_time' => $params['payment_time'],
  70. 'batch_number' => $params['batch_number'],
  71. 'status' => $params['status'],
  72. 'master_worker_id' => $params['master_worker_id'],
  73. 'amount_change' => $params['amount_change'],
  74. 'change_time' => $params['change_time'],
  75. 'remark' => $params['remark'],
  76. ]);
  77. Db::commit();
  78. return true;
  79. } catch (\Exception $e) {
  80. Db::rollback();
  81. self::setError($e->getMessage());
  82. return false;
  83. }
  84. }
  85. /**
  86. * @notes 删除
  87. * @param array $params
  88. * @return bool
  89. * @author likeadmin
  90. * @date 2024/12/02 15:57
  91. */
  92. public static function delete(array $params): bool
  93. {
  94. return MasterSettlementDetails::destroy($params['id']);
  95. }
  96. /**
  97. * @notes 获取详情
  98. * @param $params
  99. * @return array
  100. * @author likeadmin
  101. * @date 2024/12/02 15:57
  102. */
  103. public static function detail($params): array
  104. {
  105. return MasterSettlementDetails::findOrEmpty($params['id'])->toArray();
  106. }
  107. /**
  108. * @notes 更新批次
  109. * @param $params
  110. * @return array
  111. * @author likeadmin
  112. * @date 2024/12/02 15:57
  113. */
  114. public static function upBatchStatus($params,$batch_number)
  115. {
  116. $deadline_time = $params['deadline_time'];
  117. $settlement_type = $params['settlement_type'];
  118. /*$lists = Db::name('master_worker')->alias('a')->field([
  119. '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'
  120. ])
  121. ->leftJoin('master_settlement_details b', 'a.id = b.master_worker_id AND b.status = 1')
  122. ->leftJoin('bank_account e', 'a.id = e.worker_id')
  123. ->where('a.audit_state', '=', 1)
  124. ->where('a.user_money', '>', 0)
  125. ->where('b.status', '=', 1)
  126. ->where('a.settlement_type', '=', $settlement_type)
  127. ->where('b.change_time', '<', $deadline_time)
  128. ->select()->toArray();*/
  129. $lists = Db::name('master_worker')->alias('a')->field([
  130. 'a.id','a.real_name','a.nickname','a.worker_number','a.user_money',
  131. 'e.account_holder','e.bank_name','e.opening_branch','e.account as bank_account',
  132. Db::raw("sum(b.amount_change) as left_amount")
  133. ])
  134. ->leftJoin('master_settlement_details b', 'a.id = b.master_worker_id AND b.status = 1')
  135. ->leftJoin('bank_account e', 'a.id = e.worker_id')
  136. ->where('a.audit_state', '=', 1)
  137. ->where('a.user_money', '>', 0)
  138. ->where('b.status', '=', 1)
  139. ->where('a.settlement_type', '=', $settlement_type)
  140. ->where('b.change_time', '<', $deadline_time)
  141. ->group('a.id')
  142. ->order('a.id desc')
  143. ->having('left_amount > 0')
  144. ->select()->toArray();
  145. // 根据条件获取能打款的 工程师 left_amount user_money
  146. $can_payment_ids = [];
  147. $insertXlsData = [];
  148. foreach ($lists as $item) {
  149. if(!empty($item['left_amount']) && !empty($item['user_money']) && !((float)$item['left_amount'] > (float)$item['user_money'])){
  150. $can_payment_ids[] = $item['id'];
  151. $insertXlsData[] = [
  152. 'master_worker_id' => $item['id'],
  153. 'worker_number' => $item['worker_number'],
  154. 'engineer_name' => $item['account_holder'],
  155. 'bank_account' => $item['bank_account'],
  156. 'bank_name' => $item['bank_name'],
  157. 'opening_branch' => $item['opening_branch'],
  158. 'original_balance' => $item['user_money'],
  159. 'total_settlement_amount' => $item['left_amount'],
  160. 'payment_status' => 0,
  161. 'is_export' => 1,
  162. 'batch_number'=> $batch_number,
  163. 'create_time'=> time(),
  164. 'update_time'=> time(),
  165. 'admin_id'=> 0,
  166. 'is_deduction'=> 0,
  167. ];
  168. }
  169. }
  170. //由可发工程师, 修改该工程师 截止$deadline_time 的 状态和批号
  171. MasterSettlementDetails::where('master_worker_id','in', $can_payment_ids)
  172. ->where('change_time', '<', $deadline_time)
  173. ->where('status', '=', 1)
  174. ->update([
  175. 'status' => 2,
  176. 'batch_number' => $batch_number,
  177. ]);
  178. // 生成 可发 数据表格
  179. Db::name('engineer_settlement')->insertAll($insertXlsData);
  180. Log::info('insertXlsData:'.json_encode($insertXlsData));
  181. return $insertXlsData;
  182. }
  183. }