OrderClass.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. namespace bizMall\order\classes;
  3. use bizMall\merchant\classes\MerchantAssetClass;
  4. use bizMall\merchant\classes\MerchantClass;
  5. use bizMall\message\classes\InformAdminClass;
  6. use bizMall\message\classes\InformUserClass;
  7. use bizMall\stat\classes\StatOrderClass;
  8. use bizMall\stat\classes\StatOrderCountClass;
  9. use bizMall\stat\classes\StatOrderMonthClass;
  10. use bizMall\user\classes\UserClass;
  11. use common\components\miniUtil;
  12. use common\components\orderSn;
  13. use common\components\stringUtil;
  14. use common\services\xhOrderDayNumService;
  15. use common\services\xhOrderMonthNumService;
  16. use Yii;
  17. use bizMall\base\classes\BaseClass;
  18. class OrderClass extends BaseClass
  19. {
  20. public static $baseFile = '\bizMall\order\models\Order';
  21. //已退款
  22. const ORDER_STATUS_REFUND = 6;
  23. //完成
  24. const ORDER_STATUS_COMPLETE = 5;
  25. //已取消
  26. const ORDER_STATUS_CANCEL = 4;
  27. //待通知
  28. const ORDER_STATUS_UN_NOTICE = 3;
  29. //配送中
  30. const ORDER_STATUS_SENDING = 2;
  31. //待配送
  32. const ORDER_STATUS_UN_SEND = 1;
  33. //待付款
  34. const ORDER_STATUS_UN_PAY = 0;
  35. //订单总流程数
  36. const ORDER_TOTAL_FLOW = 4;
  37. //未确认配送方式
  38. const SEND_TYPE_UNKNOWN = 0;
  39. //自取
  40. const SEND_TYPE_NO = 1;
  41. //自己送
  42. const SEND_TYPE_MYSELF = 2;
  43. //代送
  44. const SEND_TYPE_OTHER = 3;
  45. //送达时间段
  46. public static $reachPeriod = [0 => '上午', 1 => '下午', 2 => '晚上'];
  47. //优惠金额
  48. public static $randDiscount = [
  49. 50 => [1, 3],
  50. 100 => [5, 9],
  51. 300 => [10, 15],
  52. 500 => [16, 18],
  53. 1000 => [18, 30],
  54. 20000 => [90, 100],
  55. ];
  56. //添加订单 shish 2019.12.5
  57. public static function addOrder($data)
  58. {
  59. $date = date("Y-m-d H:i:s");
  60. $merchantId = $data['merchantId'];
  61. $data['orderSn'] = orderSn::getOrderSn();
  62. $data['payStatus'] = 0;
  63. $data['createTime'] = $date;
  64. $data['addTime'] = time();
  65. $month = date("Ym");
  66. $riseNum = StatOrderCountClass::addOrder($month, $merchantId);
  67. //将花店每月的总订单数作为编号
  68. $data['sendNum'] = $riseNum;
  69. $data['totalFlow'] = OrderClass::ORDER_TOTAL_FLOW;
  70. $return = self::add($data);
  71. //全部订单+1,待付款订单+1
  72. $merchantAsset = MerchantAssetClass::getByMerchantId($merchantId, true);
  73. $merchantAsset->unPayOrder += 1;
  74. $merchantAsset->totalOrder += 1;
  75. $merchantAsset->save();
  76. return $return;
  77. }
  78. public static function getByOrderSn($orderSn)
  79. {
  80. return self::getByCondition(['orderSn' => $orderSn]);
  81. }
  82. //评价 shish 2019.12.16
  83. public static function comment($data)
  84. {
  85. $id = $data['id'];
  86. unset($data['id']);
  87. return self::updateById($id, $data);
  88. }
  89. //订单
  90. public static function getOrderById($id)
  91. {
  92. $order = self::getById($id);
  93. if (empty($order)) {
  94. return [];
  95. }
  96. $order['goodsInfoList'] = OrderGoodsClass::getGoodsListById($id);
  97. return $order;
  98. }
  99. //根据订单查询 shish 2020.1.4
  100. public static function getOrderBySn($orderSn)
  101. {
  102. $order = self::getByCondition(['orderSn' => $orderSn]);
  103. if (empty($order)) {
  104. return [];
  105. }
  106. $id = $order['id'];
  107. $order['goodsInfoList'] = OrderGoodsClass::getGoodsListById($id);
  108. return $order;
  109. }
  110. //返回随机优惠金额 shish 2019.9.12
  111. public static function getRandDiscount($amount)
  112. {
  113. if ($amount <= 0) {
  114. return 0;
  115. }
  116. $randDiscount = self::$randDiscount;
  117. krsort($randDiscount);
  118. $rand = 0;
  119. foreach ($randDiscount as $currentAmount => $val) {
  120. if ($amount >= $currentAmount) {
  121. $rand = rand($val[0], $val[1]);
  122. break;
  123. }
  124. }
  125. return $rand / 10;
  126. }
  127. //订单完成 shish 2020.3.12
  128. public static function complete($order, $currentFlow)
  129. {
  130. $id = $order['id'];
  131. self::updateById($id, ['status' => OrderClass::ORDER_STATUS_COMPLETE, 'currentFlow' => $currentFlow]);
  132. }
  133. //转化出送到时间 shish 2020.3.15
  134. public static function getReachTime($order)
  135. {
  136. $reachTime = '';
  137. if (isset($order['reachDate']) && !empty($order['reachDate'])) {
  138. $prev = date("n-j", strtotime($order['reachDate']));
  139. $periodData = self::$reachPeriod;
  140. $periodKey = $order['reachPeriod'];
  141. $period = isset($periodData[$periodKey]) ? $periodData[$periodKey] : '上午';
  142. $reachTime = $prev . ' ' . $period;
  143. }
  144. return $reachTime;
  145. }
  146. //支付成功获取unionId shish 2020.5.12
  147. public static function payToUpdateUnionId($merchant, $merchantExtend, $orderSn, $user)
  148. {
  149. $mcId = $merchantExtend['wxPayMerchantId'];
  150. $miniOpenId = isset($user['miniOpenId']) ? $user['miniOpenId'] : '';
  151. $unionId = isset($user['unionId']) ? $user['unionId'] : '';
  152. $userId = $user['id'];
  153. if (empty($unionId)) {
  154. $unionId = miniUtil::getPaidUnionId($merchant, $miniOpenId, $mcId, (string)$orderSn, 0);
  155. if (!empty($unionId)) {
  156. $findUser = UserClass::getByUnionId($unionId);
  157. if (empty($findUser)) {
  158. UserClass::updateByCondition(['id' => $userId], ['unionId' => $unionId]);
  159. } else {
  160. UserClass::mergeUser($findUser, $user);
  161. }
  162. }
  163. }
  164. }
  165. //订单到期未付款的订单置成取消状态 shish 2020.5.25
  166. public static function setExpire($order)
  167. {
  168. $now = time();
  169. if (!empty($order['deadline']) && $now > $order['deadline']) {
  170. if ($order['status'] == 0) {
  171. $id = $order['id'];
  172. OrderClass::updateById($id, ['status' => 4]);
  173. }
  174. }
  175. }
  176. //支付成功需要处理的流程 shish 2020.5.25
  177. public static function payAfter($order, $updateData)
  178. {
  179. $orderId = $order['id'];
  180. $now = time();
  181. self::updateById($orderId, $updateData);
  182. //发货流程的完成下单
  183. OrderSendClass::placeOrder(['orderId' => $orderId, 'payTime' => $now]);
  184. $merchantId = $order['merchantId'];
  185. $asset = MerchantAssetClass::getByMerchantId($merchantId);
  186. //增加订单数
  187. StatOrderClass::addOrder($merchantId, $asset);
  188. //如果门店和朋友圈订单并且没有填写收花人的直接将订单置为自取并且是完成状态
  189. if (isset($order['fromType']) && in_array($order['fromType'], [0, 2])) {
  190. if (isset($order['receiveMobile']) && isset($order['address'])) {
  191. if (empty($order['receiveMobile']) && empty($order['address'])) {
  192. OrderSendClass::withoutSend($order);
  193. }
  194. }
  195. }
  196. }
  197. }