SettleClass.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace bizHd\order\classes;
  3. use bizHd\custom\classes\CustomClass;
  4. use bizHd\shop\classes\MainClass;
  5. use bizHd\shop\classes\ShopMoneyChangeClass;
  6. use bizHd\work\classes\WorkClass;
  7. use common\components\dict;
  8. use common\components\imgUtil;
  9. use common\components\orderSn;
  10. use common\components\util;
  11. use Yii;
  12. use bizHd\base\classes\BaseClass;
  13. class SettleClass extends BaseClass
  14. {
  15. public static $baseFile = '\bizHd\order\models\Settle';
  16. public static function getMyDetail($settle)
  17. {
  18. $settleId = $settle['id'];
  19. $osList = OrderSettleClass::getAllByCondition(['settleId' => $settleId], null, '*', null, true);
  20. $ids = [];
  21. $map = [];
  22. if (!empty($osList)) {
  23. foreach ($osList as $os) {
  24. $orderId = $os->orderId;
  25. $ids[] = $os->orderId;
  26. $amount = $os->amount;
  27. $map[$orderId] = ['amount' => $amount];
  28. }
  29. }
  30. if (empty($ids)) {
  31. util::fail('结账单空的');
  32. }
  33. $orderList = OrderClass::getAllByCondition(['id' => ['in', $ids]], null, '*');
  34. if (!empty($orderList)) {
  35. foreach ($orderList as $key => $orderInfo) {
  36. $orderId = $orderInfo['id'];
  37. $current = $map[$orderId] ?? [];
  38. $currentAmount = $current['amount'] ?? 0;
  39. $currentAmount = floatval($currentAmount);
  40. $orderList[$key]['actSettleAmount'] = $currentAmount;
  41. }
  42. }
  43. $settle['orderNum'] = count($ids);
  44. $settle['orderList'] = $orderList;
  45. return $settle;
  46. }
  47. public static function getMySettleList($where)
  48. {
  49. return self::getList('*', $where, 'addTime DESC');
  50. }
  51. //$side 0 表示花店创建结账单,1客户创建结账单,二者区别有花店有带$staff信息,客户没有
  52. //$params 预留参数
  53. public static function addSettle($orderData, $shop, $custom, $hd, $params = [])
  54. {
  55. $totalClear = 0;
  56. $shopId = $shop->id;
  57. $mainId = $shop->mainId;
  58. $sjId = $shop->sjId;
  59. $customId = $custom->id ?? 0;
  60. $customName = $custom->name ?? '';
  61. $customAvatar = $custom->avatar ?? '';
  62. $customMobile = $custom->mobile;
  63. $customAddress = $custom->address;
  64. $customUserId = $custom->userId;
  65. $hdId = $hd->id;
  66. $hdName = $hd->name;
  67. $hdAvatar = $hd->avatar;
  68. $hdMobile = $hd->mobile;
  69. $hdAddress = $hd->address;
  70. $staffId = $params['staffId'] ?? 0;
  71. $staffName = $params['staffName'] ?? '';
  72. $settleOrderSn = orderSn::getSettleSn();
  73. $num = count($orderData);
  74. $settleData = [
  75. 'prePrice' => 0,
  76. 'actPrice' => 0,
  77. 'realPrice' => 0,
  78. 'payWay' => 0,
  79. 'shopId' => $shopId,
  80. 'mainId' => $mainId,
  81. 'sjId' => $sjId,
  82. 'num' => $num,
  83. 'status' => 1,
  84. 'customId' => $customId,
  85. 'customName' => $customName,
  86. 'customAvatar' => $customAvatar,
  87. 'customMobile' => $customMobile,
  88. 'customAddress' => $customAddress,
  89. 'customUserId' => $customUserId,
  90. 'hdId' => $hdId,
  91. 'hdShopId' => $shopId,
  92. 'hdName' => $hdName,
  93. 'hdAvatar' => $hdAvatar,
  94. 'hdMobile' => $hdMobile,
  95. 'hdAddress' => $hdAddress,
  96. 'hdStaffId' => $staffId,
  97. 'hdStaffName' => $staffName,
  98. 'orderSn' => $settleOrderSn,
  99. 'payTime' => '0000-00-00 00:00:00',
  100. ];
  101. $set = self::addData($settleData);
  102. $settleId = $set->id;
  103. foreach ($orderData as $order) {
  104. $orderId = $order['orderId'];
  105. $clearAmount = $order['clearAmount'] ?? 0;
  106. $orderSn = $order['orderSn'] ?? '';
  107. OrderSettleClass::add(['orderId' => $orderId, 'settleId' => $settleId, 'status' => 0, 'amount' => $clearAmount, 'orderSn' => $orderSn, 'settleSn' => $settleOrderSn]);
  108. $totalClear = bcadd($totalClear, $clearAmount, 2);
  109. }
  110. $set->prePrice = $totalClear;
  111. $set->actPrice = $totalClear;
  112. $set->realPrice = $totalClear;
  113. $set->save();
  114. return $set;
  115. }
  116. public static function clearSettle($set, $recharge = [])
  117. {
  118. //如果带有充值,互相要给信息
  119. if (!empty($recharge)) {
  120. $settleId = $set->id;
  121. $recharge->settleId = $settleId;
  122. $recharge->settleNo = $set->orderSn;
  123. $recharge->settleAmount = $set->actPrice;
  124. $recharge->save();
  125. $payWay = $recharge->payWay ?? 0;
  126. $onlinePay = $recharge->onlinePay ?? 1;
  127. $rechargeId = $recharge->id;
  128. $rechargeSn = $recharge->orderSn;
  129. $set->payWay = $payWay;
  130. $set->rechargeId = $rechargeId;
  131. $set->rechargeSn = $rechargeSn;
  132. $set->onlinePay = $onlinePay;
  133. }
  134. $set->status = 2;
  135. $set->save();
  136. $settleId = $set->id;
  137. $orderSettle = OrderSettleClass::getAllByCondition(['settleId' => $settleId], null, '*', null, true);
  138. $ids = [];
  139. $amountMap = [];
  140. if (!empty($orderSettle)) {
  141. foreach ($orderSettle as $os) {
  142. $orderId = $os->orderId;
  143. $ids[] = $orderId;
  144. $amountMap[$orderId] = $os->amount;
  145. $os->status = 1;
  146. $os->save();
  147. }
  148. }
  149. $totalClearAmount = 0;
  150. if (empty($ids)) {
  151. return ['totalDebtPrice' => $totalClearAmount];
  152. }
  153. $orderList = OrderClass::getAllByCondition(['id' => ['in', $ids]], null, '*', null, true);
  154. if (!empty($orderList)) {
  155. foreach ($orderList as $order) {
  156. $orderId = $order->id;
  157. $mayClearAmount = $amountMap[$orderId] ?? 0;
  158. $totalClearAmount = bcadd($totalClearAmount, $mayClearAmount, 2);
  159. $order->remainDebtPrice = bcsub($order->remainDebtPrice, $mayClearAmount, 2);
  160. if ($order->remainDebtPrice <= 0) {
  161. $order->debt = 0;
  162. }
  163. $order->settleTime = date("Y-m-d H:i:s");
  164. $order->save();
  165. }
  166. }
  167. return ['totalClearAmount' => $totalClearAmount, 'settle' => $set];
  168. }
  169. public static function addData($data)
  170. {
  171. return self::add($data, true);
  172. }
  173. }