OrderClass.php 6.7 KB

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