Clerk.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <?php
  2. namespace addons\Happiness\common\global_func;
  3. use addons\Happiness\common\models\HappinessClerk;
  4. use addons\Happiness\common\models\HappinessClerkLog;
  5. use addons\Happiness\common\models\HappinessOrder;
  6. use addons\Happiness\common\models\HappinessStore;
  7. use addons\Happiness\common\service\StoreService;
  8. use common\enums\ClerkEnum;
  9. use common\enums\MarketingTypeEnum;
  10. use common\enums\OrderStatusEnum;
  11. use common\enums\PayTypeEnum;
  12. use common\enums\ShippingTypeEnum;
  13. use common\enums\StatusEnum;
  14. use common\globals\GlobalInvoke;
  15. use common\models\common\ClerkLog;
  16. use common\models\goods\Goods;
  17. use common\models\mall\MallAddons;
  18. use common\models\order\Order;
  19. use common\models\order\OrderMarketing;
  20. use common\models\user\User;
  21. use Exception;
  22. class Clerk
  23. {
  24. public static function clerk($params)
  25. {
  26. if (empty($params['clerk_code']) || empty($params['mall_id']) || empty($params['user_id']) || empty($params['method'])) {
  27. return [];
  28. }
  29. $clerk_code = (string)$params['clerk_code'];
  30. $clerk_code_pre = $clerk_code[0] . $clerk_code[1];
  31. switch ($clerk_code_pre) {
  32. case ClerkEnum::HAPPINESS_CLERK_CODE_PRE:
  33. $params['code'] = $params['clerk_code'];
  34. switch ($params['method']) {
  35. case "get":
  36. $select = 'id,mall_id,store_id,order_no,receiver_name,mobile,pay_money,shipping_money,original_goods_price,coupon_money,goods_price,order_status,pay_status,
  37. shipping_status,review_status,is_feedback,address,created_at,pay_time,region_name,remark,consign_time,finish_time,sign_time,shipping_type,payment_type,score,score_money,marketing_id,marketing_type,extra_info,order_source';
  38. $where = [];
  39. $clerk_code = $params['clerk_code'];
  40. $mall_id = $params['mall_id'];
  41. $platform = $params['platform'];
  42. $user_id = $params['user_id'];
  43. $where[] = ['clerk_code' => $clerk_code];
  44. $where[] = ['mall_id' => $mall_id];
  45. $where[] = ['status' => StatusEnum::ENABLED];
  46. $order = Order::getOne($where, true, ['detail' => function ($query) {
  47. $query->select('id,order_id,goods_id,goods_name,pic_url,num,price,is_feedback,sign_id,goods_attr_name,order_status,adjust_money,extra_info');
  48. }], false, $select);
  49. if (empty($order))throw new Exception('该订单不存在');
  50. //获取门店订单
  51. $store_order = HappinessOrder::getOne([
  52. ['mall_id' => $params['mall_id']],
  53. ['order_id' => $order['id']]
  54. ]);
  55. if (empty($store_order)) throw new Exception('不存在该门店订单');
  56. $store_id = $store_order['store_id'];
  57. $store = HappinessStore::getOne([['id' => $store_id]], true, [], false, 'id,user_id,balance');
  58. $store_user_id = $store['user_id'];
  59. $where = [
  60. ['mall_id' => $mall_id],
  61. ['store_id' => $store_id],
  62. ['status' => StatusEnum::ENABLED]
  63. ];
  64. if($user_id != $store_user_id){
  65. $where[] = ['user_id'=>$user_id];
  66. }
  67. $rse = HappinessClerk::getOne($where);
  68. if (empty($rse)) throw new Exception('你不是核销员');
  69. $marketing = OrderMarketing::getMarketingInfo($order);
  70. $order['order_status_text'] = OrderStatusEnum::getMap();
  71. $order['is_feedback_text'] = OrderStatusEnum::getFeedbackMap();
  72. $order['shipping_type_text'] = ShippingTypeEnum::getMap();
  73. $order['payment_type_text'] = PayTypeEnum::getMap();
  74. $order['pay_type_list'] = \Yii::$app->services->pay->getEnablePayment($mall_id, $platform);
  75. $adjust_money = array_sum(array_column($order['detail'], 'adjust_money'));//预留字段
  76. if ($adjust_money) {
  77. $order['change_price'] = $adjust_money;
  78. }
  79. $order['marketing'] = $marketing;
  80. $order['marketing_type_map'] = MarketingTypeEnum::getMap();
  81. $order_setting = \Yii::$app->services->setting->mall->get($mall_id, 'order');
  82. $order['payment_expire_time'] = $order_setting['payment_expire_time'] ?? 30;
  83. $order['auto_receiving_time'] = $order_setting['auto_receiving_time'] ?? 14;
  84. // 获取订单详情的状态文字描述
  85. $order['status_text'] = OrderStatusEnum::getApiStatus($order['status'], $order['shipping_type']);
  86. $order['status'] == OrderStatusEnum::NOT_PAY && $order['status_text']['desc'] = $order['payment_expire_time'] . $order['status_text']['desc'];
  87. $order['status'] == OrderStatusEnum::SHIPMENTS && $order['status_text']['desc'] = $order['auto_receiving_time'] . $order['status_text']['desc'];
  88. // 公共调用
  89. $order = GlobalInvoke::exec(GlobalInvoke::ORDER_DETAIL, $mall_id, [
  90. 'order' => $order,
  91. 'mall_id' => $mall_id,
  92. ]) ?: $order;
  93. // $order['store'] = $order['happiness_store'];
  94. $order['clerk_code'] = $clerk_code;
  95. $order['store_name'] = $order['happiness_store']['store_name'];
  96. $order['clerk_code_pre'] = ClerkEnum::HAPPINESS_CLERK_CODE_PRE;
  97. return $order;
  98. case "post":
  99. //获取订单数据
  100. $order = Order::getOne([
  101. ['mall_id' => $params['mall_id']],
  102. ['clerk_code' => $params['clerk_code']],
  103. ['status' => StatusEnum::ENABLED]
  104. ], true, ['detail']);
  105. if (empty($order)) throw new Exception('不存在该订单');
  106. $store_order = HappinessOrder::getOne([
  107. ['mall_id' => $params['mall_id']],
  108. ['order_id' => $order['id']],
  109. ], true);
  110. if (empty($store_order)) throw new Exception('不存在该门店订单');
  111. $params['store_id'] = !empty($params['store_id']) ? $params['store_id'] : $store_order['store_id'];
  112. $store = HappinessStore::getOne([['id' => $params['store_id']]], true, [], false, 'id,user_id,balance,logo_img,store_name');
  113. $user_id = $params['user_id'];
  114. $storeService = new StoreService();
  115. $storeService->mall_id = $params['mall_id'];
  116. $storeService->store_id = $params['store_id'];
  117. $params['clerk_id'] = $storeService->getClerkIdByUserId($user_id, true);
  118. $rse = HappinessClerk::getOne([['mall_id' => $params['mall_id']], ['user_id' => $user_id], ['status' => StatusEnum::ENABLED],['store_id' => $params['store_id']]]);
  119. if (empty($rse)) throw new \Exception('你不是核销员');
  120. $params['store_id'] = $rse['store_id'];
  121. $rse = HappinessClerkLog::setData($params);
  122. if(!$rse)
  123. {
  124. throw new \Exception(HappinessClerkLog::getStaticError());
  125. }
  126. $extra = ['pay_money' => $order['pay_money'], 'order_money' => $order['pay_money'], 'num' => array_sum(array_column($order['detail'], 'num')), 'order_id' => $order['id'], 'order_no' => $order['order_no']];
  127. //获取商品
  128. $goods_ids = array_column($order['detail'], 'goods_id');
  129. $goods_data = Goods::getOne([
  130. ['mall_id' => $params['mall_id']],
  131. ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]],
  132. ['id' => $goods_ids]
  133. ], true);
  134. $clerk_params = [
  135. 'mall_id' => $params['mall_id'],
  136. 'user_id' => $user_id,
  137. 'mall_logo' => $store['logo_img'],
  138. 'mall_name' => $store['store_name'],
  139. 'clerk_code' => $clerk_code,
  140. 'type' => $clerk_code_pre,
  141. 'status' => StatusEnum::ENABLED,
  142. 'pic' => $goods_data['cover_pic'],
  143. 'extra' => json_encode($extra),
  144. ];
  145. $log_res = ClerkLog::setData($clerk_params);
  146. return $rse;
  147. }
  148. break;
  149. default:
  150. return [];
  151. }
  152. }
  153. public static function clerkDetail($params)
  154. {
  155. if (empty($params['clerk_log_id']) || empty($params['mall_id']) || empty($params['user_id']) || empty($params['type'])) {
  156. return [];
  157. }
  158. $clerk_code_pre = $params['type'];
  159. switch ($clerk_code_pre) {
  160. // case ClerkEnum::O2O_SELF_PICKUP_ORDERS_CLERK_CODE_PRE:
  161. // return StoreOrder::getClerkLogDetail($params);
  162. // case ClerkEnum::ELECTRON_COUPON_CLERK_CODE_PRE:
  163. // if (!MallAddons::isInstall($params['mall_id'], 'ElectronCoupon')) {
  164. // return [];
  165. // }
  166. // $clerk_log_model = \common\models\common\ClerkLog::findOne(['id' => $params['clerk_log_id'], 'mall_id' => $params['mall_id'], 'user_id' => $params['user_id'], 'type' => $params['type']]);
  167. // $params['code'] = $clerk_log_model['clerk_code'];
  168. // $extra = json_decode($clerk_log_model['extra'],true);
  169. // $e_coupon = ElectronCoupon::findOne(['id' => $extra['e_coupon_id']]);
  170. // $data['pic'] = $e_coupon['pic'];
  171. // $data['name'] = $e_coupon['name'];
  172. // $data['money'] = $e_coupon['price'];
  173. // return $data;
  174. // case ClerkEnum::O2O_STORE_CLERK_COUPON_CODE_PRE:
  175. // $clerk_log_model = \common\models\common\ClerkLog::findOne(['id' => $params['clerk_log_id'], 'mall_id' => $params['mall_id'], 'user_id' => $params['user_id'], 'type' => $params['type']]);
  176. // $extra = json_decode($clerk_log_model['extra'],true);
  177. // $coupon_user = StoreVerificationCouponsUser::findOne(['mall_id' => $params['mall_id'], 'clerk_code' => $extra['store_verification_coupons_user_id']]);
  178. // if (empty($coupon_user)) {
  179. // throw new \Exception('核销券不存在');
  180. // }
  181. // $coupon = StoreVerificationCoupons::findOne(['id' => $coupon_user['coupon_id'], 'status' => StatusEnum::ENABLED]);
  182. // if (empty($coupon)) {
  183. // throw new \Exception('核销券不存在或已删除');
  184. // }
  185. // $store = Store::findOne($coupon_user['store_id']);
  186. // $returnData = [];
  187. // $returnData['detail'] = [
  188. // 'name' => $coupon['name'],
  189. // 'num' => $coupon_user['num'],
  190. // 'used_num' => $coupon_user['used_num'],
  191. // 'logo_img' => $store['logo_img'],
  192. // 'store_name' => $store['store_name'],
  193. // 'start_at' => date('Y-m-d H:i:s', $coupon['start_at']),
  194. // 'end_at' => date('Y-m-d H:i:s', $coupon['end_at']),
  195. // ];
  196. // return $returnData;
  197. // case ClerkEnum::PLATFORM_ORDER_BY_O2O_STORE_CLERK_CODE_PRE:
  198. // $clerk_log_model = \common\models\common\ClerkLog::findOne(['id' => $params['clerk_log_id'], 'mall_id' => $params['mall_id'], 'user_id' => $params['user_id'], 'type' => $params['type']]);
  199. // $extra = json_decode($clerk_log_model['extra'],true);
  200. // $clerk_detail = PlatformStoreClerkOrderDetail::find()->where(['id'=>$extra['platform_store_clerk_order_detail_id']])->asArray()->one();
  201. // if (!$clerk_detail) {
  202. // throw new \Exception('该订单不存在');
  203. // }
  204. // $params['order_id'] = $clerk_detail['order_id'];
  205. // $params['goods_id'] = $clerk_detail['goods_id'];
  206. // $params['order_detail_id'] = $clerk_detail['order_detail_id'];
  207. // $params['clerk_code'] = $clerk_log_model['clerk_code'];
  208. // return StoreClerkLog::getPlatformStoreOrderDetail($params);
  209. case ClerkEnum::HAPPINESS_CLERK_CODE_PRE:
  210. $clerk_log_model = \common\models\common\ClerkLog::findOne(['id' => $params['clerk_log_id'], 'mall_id' => $params['mall_id'], 'user_id' => $params['user_id'], 'type' => $params['type']]);
  211. if (empty($clerk_log_model)) return [];
  212. $clerk_log_model['extra'] = json_decode($clerk_log_model['extra'], true);
  213. $params['order_no'] = $clerk_log_model['extra']['order_no'];
  214. return HappinessClerkLog::getPlatformStoreOrderDetail($params);
  215. break;
  216. default:
  217. return [];
  218. }
  219. }
  220. }