PropertyCommissionLogic.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace app\api\logic;
  3. use app\common\enum\GoodsEnum;
  4. use app\common\enum\PayEnum;
  5. use app\common\enum\WorkEnum;
  6. use app\common\logic\BaseLogic;
  7. use app\common\model\coupon\UserCoupon;
  8. use app\common\model\dict\DictData;
  9. use app\common\model\goods\Goods;
  10. use app\common\model\master_worker\MasterWorker;
  11. use app\common\model\orders\RechargeOrder;
  12. use app\common\model\property\PropertyCommission;
  13. use app\common\model\property\PropertyHead;
  14. use app\common\model\property\PropertyOrder;
  15. use app\common\model\property\PropertySurplusLog;
  16. use app\common\model\property\PropertyUser;
  17. use app\common\model\recharge\OrderGoods;
  18. use app\common\model\works\ServiceWork;
  19. use app\workerapi\logic\ServiceWorkLogLogic;
  20. use think\Exception;
  21. use think\facade\Db;
  22. /**
  23. * 物业分成收益逻辑
  24. * Class PropertyCommissionLogic
  25. * @package app\api\logic
  26. */
  27. class PropertyCommissionLogic extends BaseLogic
  28. {
  29. /**
  30. * 确认服务完成物业分成
  31. * @param $params
  32. * @return false|true
  33. */
  34. public static function commissionSurplus($params)
  35. {
  36. Db::startTrans();
  37. try {
  38. $work_id = \app\common\model\recharge\RechargeOrder::where([
  39. 'order_type' => 0,
  40. 'user_id' => $params['user_id'],
  41. 'sn'=>$params['sn']
  42. ])->value('work_id');
  43. if(empty($work_id)){
  44. throw new Exception('订单不存在');
  45. }
  46. // 判断工单是否用户已完结
  47. $service_work = ServiceWork::find($work_id);
  48. if($service_work->user_confirm_status!=5){
  49. throw new Exception('未完结订单,无法完成分成');
  50. }
  51. // 以工单 结算金额 为基准,计算分成金额
  52. $work_amount = $service_work->work_amount;
  53. $propertyUserId = PropertyUser::where('user_id',$params['user_id'])->value('id');
  54. $propertyOrderInfo = PropertyOrder::where(['property_user_id' => $propertyUserId,'order_status' => 1,'work_id'=>$work_id])->findOrEmpty()->toArray();
  55. //计算分成金额
  56. $ratio = PropertyHead::where('id',$propertyOrderInfo['property_head_id'])->value('ratio');
  57. $commission_amount = number_format($work_amount * ($ratio/100),2,'.','');
  58. // 添加分成记录
  59. $propertyCommissionInfo = PropertyCommission::create([
  60. 'property_head_id' => $propertyOrderInfo['property_head_id'],
  61. 'property_user_id' => $propertyUserId,
  62. 'property_order_id' => $propertyOrderInfo['id'],
  63. 'work_id' => $work_id,
  64. 'order_amount' => $work_amount,
  65. 'ratio' => $ratio,
  66. 'commission_amount' => $commission_amount,
  67. ]);
  68. // 更新物业收益/订单状态已完结
  69. PropertyHead::where(['id' => $propertyOrderInfo['property_head_id']])->lock(true)->update([
  70. 'all_profit_amount' => Db::raw('all_profit_amount+'.$commission_amount),
  71. 'surplus_profit_amount' => Db::raw('surplus_profit_amount+'.$commission_amount)
  72. ]);
  73. PropertyOrder::where(['id' => $propertyOrderInfo['id']])->update(['order_status' => 3]);
  74. // 进出账记录
  75. PropertySurplusLog::create([
  76. 'in_out' => 1,
  77. 'property_head_id' => $propertyOrderInfo['property_head_id'],
  78. 'property_commission_id' => $propertyCommissionInfo['id'],
  79. 'amount' => $commission_amount,
  80. 'status' => 1,
  81. 'remark' => '订单完成,分成金额入账'
  82. ]);
  83. Db::commit();
  84. return true;
  85. }catch (\Exception $e) {
  86. Db::rollback();
  87. self::setError($e->getMessage());
  88. return false;
  89. }
  90. }
  91. /**
  92. * 物业负责人用户申请提现
  93. * @param $params
  94. * @return false|true
  95. */
  96. public static function withdrawCash($params)
  97. {
  98. Db::startTrans();
  99. try {
  100. $propertyHeadInfo = PropertyHead::where('user_id',$params['user_id'])->lock(true)->findOrEmpty();
  101. if($propertyHeadInfo->isEmpty()){
  102. throw new Exception('物业负责人不存在');
  103. }
  104. $propertyHeadInfo = $propertyHeadInfo->toArray();
  105. $propertyHeadId = $propertyHeadInfo['id'];
  106. $surplusProfitAmount = $propertyHeadInfo['surplus_profit_amount'];
  107. if(($surplusProfitAmount - $params['amount']) < 0){
  108. throw new Exception('余额不足');
  109. }
  110. // 出账记录 - 提现
  111. PropertySurplusLog::create([
  112. 'in_out' => 2,
  113. 'property_head_id' => $propertyHeadId,
  114. 'amount' => $params['amount'],
  115. 'status' => 0
  116. ]);
  117. // 更新 物业负责人余额收益
  118. PropertyHead::where(['id' => $propertyHeadId])->update([
  119. 'surplus_profit_amount' => Db::raw('surplus_profit_amount-'.$params['amount'])
  120. ]);
  121. Db::commit();
  122. return true;
  123. }catch (\Exception $e) {
  124. Db::rollback();
  125. self::setError($e->getMessage());
  126. return false;
  127. }
  128. }
  129. }