OrderService.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. namespace biz\order\services;
  3. use biz\base\services\BaseService;
  4. use biz\merchant\services\SjCapitalService;
  5. use biz\merchant\services\MerchantService;
  6. use biz\order\classes\OrderClass;
  7. use biz\order\models\Order;
  8. use biz\promote\services\CouponRightService;
  9. use biz\promote\services\CouponService;
  10. use biz\user\classes\UserAssetClass;
  11. use biz\user\services\UserService;
  12. use common\components\error;
  13. use common\components\stringUtil;
  14. use common\components\validate;
  15. use common\components\util;
  16. use Yii;
  17. use linslin\yii2\curl;
  18. class OrderService extends BaseService
  19. {
  20. public static $baseFile = '\biz\order\classes\OrderClass';
  21. //添加订单
  22. public static function addOrder($data)
  23. {
  24. return OrderClass::addOrder($data);
  25. }
  26. //获取订单信息 shish 2019.11.28
  27. public static function getOrderList($where)
  28. {
  29. $data = self::getList('*', $where, 'addTime DESC');
  30. if (isset($data['list']) == false || empty($data['list'])) {
  31. return $data;
  32. }
  33. $orderIds = array_column($data['list'], 'id');
  34. //获取订单的商品信息
  35. $goodsList = OrderGoodsService::getGoodsListByOrderIds($orderIds);
  36. //获取订花人的用户信息
  37. $orderUserIds = array_column($data['list'], 'userId');
  38. $orderUserIds = array_unique($orderUserIds);
  39. $userInfoList = UserService::getUserByIds($orderUserIds);
  40. $merchantIdList = array_column($data['list'], 'merchantId');
  41. $merchantIdList = array_filter(array_unique($merchantIdList));
  42. $merchantList = MerchantService::getByIds($merchantIdList, null, 'id');
  43. $periodData = [0 => '上午', 1 => '下午', 2 => '晚上'];
  44. foreach ($data['list'] as $key => $val) {
  45. $id = $val['id'];
  46. $userId = $val['userId'];
  47. $data['list'][$key]['goodsInfoList'] = isset($goodsList[$id]) ? $goodsList[$id] : [];
  48. $data['list'][$key]['bookAvatar'] = isset($userInfoList[$userId]['smallAvatarUrl']) ? $userInfoList[$userId]['smallAvatarUrl'] : '';
  49. $merchantId = $val['merchantId'];
  50. $data['list'][$key]['merchantName'] = isset($merchantList[$merchantId]['merchantName']) ? $merchantList[$merchantId]['merchantName'] : '';
  51. $data['list'][$key]['reachTime'] = OrderClass::getReachTime($val);
  52. $requireReachTime = '';
  53. if ($val['reachDate'] != '0000-00-00') {
  54. $reachPeriodId = $val['reachPeriod'];
  55. $reachPeriod = isset($periodData[$reachPeriodId]) ? $periodData[$reachPeriodId] : '上午';
  56. $requireReachTime = date("m-d", strtotime($val['reachDate'])) . ' ' . $reachPeriod;
  57. }
  58. $data['list'][$key]['requireReachTime'] = $requireReachTime;
  59. }
  60. return $data;
  61. }
  62. //取客户最近若干条订单 shish 2019.11.30
  63. public static function getUserOrder($userId, $limit = 10, $order = null, $with = null)
  64. {
  65. $where = ['adminId' => $userId, 'payStatus' => 1];
  66. return self::getLimitList('*', $where, $limit, $order, $with);
  67. }
  68. //支付前验证订单 shish 2019.12.6
  69. public static function checkBeforePay($order, $userId)
  70. {
  71. $now = time();
  72. OrderClass::setExpire($order);
  73. if (empty($order)) {
  74. util::fail('订单无效');
  75. }
  76. if (isset($order['userId']) && $order['userId'] != $userId) {
  77. util::fail('非法访问');
  78. }
  79. if ($order['status'] != 0) {
  80. util::fail('订单不是待付款状态');
  81. }
  82. if (!empty($order['deadline']) && $now > $order['deadline']) {
  83. util::fail('订单已过期');
  84. }
  85. if (ceil($order['actPrice']) <= 0) {
  86. util::fail('订单金额有问题');
  87. }
  88. if ($order['payStatus'] == 1) {
  89. util::fail('您已经付过了');
  90. }
  91. }
  92. //商家验证是否有效 shish 2019.12.15
  93. public static function valid($order, $merchantId)
  94. {
  95. OrderClass::setExpire($order);
  96. if (empty($order)) {
  97. util::fail('订单无效');
  98. }
  99. if ($order['merchantId'] != $merchantId) {
  100. util::fail('不是您的订单');
  101. }
  102. }
  103. //根据编号查询 shish 2019.12.14
  104. public static function getByOrderSn($orderSn)
  105. {
  106. return OrderClass::getByOrderSn($orderSn);
  107. }
  108. //点评 shish 2019.12.16
  109. public static function comment($data)
  110. {
  111. return OrderClass::comment($data);
  112. }
  113. //订单归类
  114. public static function classify($id, $categoryId, $usageId)
  115. {
  116. $connection = Yii::$app->db;//事务处理
  117. $transaction = $connection->beginTransaction();
  118. try {
  119. $order = OrderClass::getById($id, true);
  120. if ($order->payStatus != 1) {
  121. util::fail('订单还未付款');
  122. }
  123. if ($order->classify == 1) {
  124. util::fail('已经归类过了');
  125. }
  126. $order->categoryId = $categoryId;
  127. $order->usageId = $usageId;
  128. $order->classify = 1;
  129. $order->save();
  130. //设置流水的分类和用途并分配资金
  131. $setData = [
  132. 'merchantId' => $order->merchantId,
  133. 'capitalId' => $order->capitalId,
  134. 'time' => $order->payTime,
  135. 'usageId' => $order->usageId,
  136. 'categoryId' => $order->categoryId,
  137. 'amount' => $order->actPrice,
  138. 'payWay' => $order->payWay,
  139. ];
  140. SjCapitalService::orderClassify($setData);
  141. $transaction->commit();
  142. } catch (Exception $e) {
  143. $transaction->rollBack();
  144. util::fail('没有归类成功');
  145. }
  146. }
  147. //更新配送单 shish 2019.12.17
  148. public static function updateSheet($order, $data)
  149. {
  150. $id = $order['id'];
  151. if ($order['status'] != OrderClass::ORDER_STATUS_UN_SEND) {
  152. util::fail('订单当前不是待配送状态');
  153. }
  154. $data['deliver'] = 1;
  155. OrderClass::updateById($id, $data);
  156. }
  157. //订单详情 shish 2020.1.2
  158. public static function getOrderById($id)
  159. {
  160. return OrderClass::getOrderById($id);
  161. }
  162. //查看订单详情 shish 2020.1.4
  163. public static function getOrderBySn($orderSn)
  164. {
  165. return OrderClass::getOrderBySn($orderSn);
  166. }
  167. //计算优惠 shish 2020.3.9
  168. public static function getDiscountPrice($params)
  169. {
  170. $couponId = isset($params['couponId']) ? $params['couponId'] : 0;
  171. $userId = isset($params['userId']) ? $params['userId'] : 0;
  172. $price = isset($params['price']) ? $params['price'] : 0;
  173. $sourceType = isset($params['sourceType']) ? $params['sourceType'] : 0;
  174. $discountAmount = 0;
  175. $discountType = 0;
  176. $discountPrice = $price;
  177. //使用优惠券
  178. if (!empty($couponId)) {
  179. $discountAmount = CouponService::checkBeforeUse($couponId, $price, $userId);
  180. $discountPrice = stringUtil::calcSub($price, $discountAmount);
  181. $discountType = 1;
  182. } else {
  183. //使用会员
  184. $asset = UserAssetClass::getByUserId($userId);
  185. if (isset($asset['member']) && $asset['member'] > 0) {
  186. $currentDiscount = $asset['discount'];
  187. $currentPrice = $price * $currentDiscount;
  188. $newPrice = substr(sprintf("%.3f", $currentPrice), 0, -1);
  189. $discountType = 2;
  190. $discountAmount = stringUtil::calcSub($price, $newPrice);
  191. $discountPrice = $newPrice;
  192. }
  193. }
  194. //如果没有优惠券和会员优惠,并且是朋友圈收款,则进行随机优惠 shish 2019.9.12
  195. if ($discountPrice == $price && $sourceType == 3) {
  196. $discountAmount = OrderClass::getRandDiscount($price);
  197. //开发和测试环境直接随机优惠
  198. $env = getenv('YII_ENV');
  199. if ($env == 'local' || $env == 'test') {
  200. $discountAmount = 0.01;
  201. }
  202. $discountPrice = stringUtil::calcSub($price, $discountAmount);
  203. $discountType = 3;
  204. }
  205. $discountType = $discountAmount <= 0 ? 0 : $discountType;
  206. $discountPrice = $discountPrice <= 0 ? 0.01 : $discountPrice;
  207. return ['price' => $discountPrice, 'discountType' => $discountType, 'discountAmount' => $discountAmount];
  208. }
  209. }