DefaultController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <?php
  2. namespace addons\Clerk\api\modules\v1\controllers;
  3. use addons\Clerk\common\models\ClerkLog;
  4. use addons\Clerk\common\models\ClerkUser;
  5. use addons\ElectronCoupon\common\models\ElectronCoupon;
  6. use addons\ElectronCoupon\common\models\ElectronCouponCode;
  7. use addons\ElectronCoupon\common\models\ElectronCouponUserCoupon;
  8. use addons\SecondaryCard\common\service\SecondaryCardOrderService;
  9. use addons\Store\common\models\Store;
  10. use common\enums\AddonsEnum;
  11. use common\enums\ClerkEnum;
  12. use common\enums\StatusEnum;
  13. use common\models\mall\MallAddons;
  14. use common\models\user\User;
  15. use api\controllers\OnAuthController;
  16. use common\models\order\Order;
  17. /**
  18. * 默认控制器
  19. *
  20. * Class DefaultController
  21. * @package addons\Clerk\api\modules\v1\controllers
  22. */
  23. class DefaultController extends OnAuthController
  24. {
  25. public $modelClass = '';
  26. /**
  27. * 不用进行登录验证的方法
  28. *
  29. * 例如: ['index', 'update', 'create', 'view', 'delete']
  30. * 默认全部需要验证
  31. *
  32. * @var array
  33. */
  34. protected $authOptional = ['index'];
  35. //主页
  36. public function actionIndex()
  37. {
  38. $config = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLERK, 'basic');
  39. if(empty($config['is_enable'])) return $this->error('请先开启核销');
  40. $clerk_user = ClerkUser::getOne([['mall_id'=>$this->mall_id],['user_id'=>$this->user_id],['status'=>StatusEnum::ENABLED]],true,[],[],'id,user_id');
  41. if(empty($clerk_user)) return $this->error('您不是核销员');
  42. $user = User::findOne(['id'=>$this->user_id]);
  43. $clerk_user['nickname'] = $user['nickname'];
  44. $clerk_user['avatar_url'] = $user['avatar_url'];
  45. return $this->success('操作成功',$clerk_user);
  46. }
  47. //核销记录
  48. public function actionClerkLog(){
  49. $config = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLERK, 'basic');
  50. if(empty($config['is_enable'])) return $this->error('请先开启核销');
  51. $where[] = ['mall_id' => $this->mall_id];
  52. $where[] = ['user_id' => $this->user_id];
  53. $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]];
  54. $params = \Yii::$app->request->get();
  55. if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'].' 00:00:00')];
  56. if (!empty($params['end'])) $where[] = ['<=', 'created_at', strtotime($params['end'].' 23:59:59')];
  57. $params['where'] = $where;
  58. $params['order'] = 'id DESC';
  59. $params['select'] = 'id,mall_id,store_id,clerk_id,user_id,mobile,pic,commission,money,title,created_at,verify_type,source_table,source_table_id';
  60. $pageData = ClerkLog::listPage($params, false);
  61. if (!empty($pageData['list'])) {
  62. $user_ids = array_column($pageData['list'], 'user_id');
  63. $store_ids = array_column($pageData['list'], 'store_id');
  64. $user_list = User ::lists(['where' => [['id' => $user_ids]], 'select' => 'id,nickname,mobile,username,avatar_url', 'index' => 'id']);
  65. if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_STORE)) {
  66. $store_list = Store::lists(['where' => [['id' => $store_ids]], 'select' => 'id,store_name', 'index' => 'id']);
  67. }
  68. $source_table_ids = [];
  69. if (MallAddons::isInstall($this->mall_id, 'ElectronCoupon')) {
  70. foreach ($pageData['list'] as $item) {
  71. if($item['source_table']=='{{%addons_electron_coupon_code}}'){
  72. $source_table_ids[] = $item['source_table_id'];
  73. }
  74. }
  75. $electron_coupon_code_list = ElectronCouponCode::lists([
  76. 'where' => [
  77. ['mall_id' => $this->mall_id],
  78. ['id' => $source_table_ids]
  79. ],
  80. 'select' => 'id,amount',
  81. 'index' => 'id'
  82. ]);
  83. }
  84. $verify_orders = [];
  85. $orders = [];
  86. if(MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_VERIFY_VOUCHER)){
  87. $verify_order_ids = [];
  88. foreach($pageData['list'] as $v){
  89. if($v['verify_type'] == ClerkLog::VERIFY_MAIN_ORDER)
  90. $verify_order_ids[] = $v['source_table_id'];
  91. }
  92. /** @var \addons\VerifyVoucher\common\models\VerifyVoucherOrder $order_class */
  93. $order_class = \addons\VerifyVoucher\common\models\VerifyVoucherOrder::class;
  94. $verify_orders = $order_class::lists([
  95. 'where' => [
  96. ['mall_id' => $this->mall_id],
  97. ['order_id' => $verify_order_ids]
  98. ],
  99. 'select' => 'order_id, order_no',
  100. 'index' => 'order_id'
  101. ]);
  102. $orders = Order::lists([
  103. 'where' => [
  104. ['mall_id' => $this->mall_id],
  105. ['id' => $verify_order_ids],
  106. ],
  107. 'with' => [
  108. 'detail' => function ($q){
  109. return $q->select('id,order_id,goods_name,pic_url,num,goods_price');
  110. }
  111. ],
  112. 'select' => 'id',
  113. 'index' => 'id'
  114. ]);
  115. }
  116. foreach ($pageData['list'] as &$item) {
  117. $item['nickname'] = $item['mobile'] = $item['username'] = $item['store_name'] = $item['avatar_url']= '';
  118. if (isset($user_list[$item['user_id']])) {
  119. $user = $user_list[$item['user_id']];
  120. $item['nickname'] = $user['nickname'];
  121. $item['mobile'] = $user['mobile'];
  122. $item['username'] = $user['username'];
  123. $item['avatar_url'] = $user['avatar_url'];
  124. }
  125. if (isset($store_list[$item['store_id']])) {
  126. $item['store_name'] = $store_list[$item['store_id']]['store_name'];
  127. }
  128. $item['orderinfo'] = isset($orders[$item['source_table_id']]) ? $orders[$item['source_table_id']]['detail']: [];
  129. $item['order_no'] = isset($verify_orders[$item['source_table_id']]) ? $verify_orders[$item['source_table_id']]['order_no'] : '';
  130. $item['scan_type'] = $item['verify_type'] == ClerkLog::VERIFY_MAIN_ORDER ? '核销码核销' : '电子券核销';
  131. $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
  132. $item['clerk_nums'] = 1;
  133. if(isset($electron_coupon_code_list) && $item['source_table']=='{{%addons_electron_coupon_code}}' && isset($electron_coupon_code_list[$item['source_table_id']])){
  134. $item['clerk_nums'] = $electron_coupon_code_list[$item['source_table_id']]['amount'];
  135. }
  136. }
  137. }
  138. return $this->success('操作成功', $pageData);
  139. }
  140. //核销
  141. public function actionClerk(){
  142. $config = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLERK, 'basic');
  143. if(empty($config['is_enable'])) return $this->error('请先开启核销');
  144. $clerk = ClerkUser::getOne([['mall_id'=>$this->mall_id],['user_id'=>$this->user_id],['status'=>StatusEnum::ENABLED]],true,[],[],'id,user_id,store_id,mall_id');
  145. if(empty($clerk)) return $this->error('您不是核销员');
  146. if(\Yii::$app->request->isGet){
  147. try {
  148. $params =\Yii::$app->request->get();
  149. $res = \Yii::$app->services->validate->validate($params, [
  150. [['code'], 'required'],
  151. [['scan_type'], 'string']
  152. ]);
  153. if($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  154. $code = $params['code'];
  155. $code_pre = $code[0].$code[1];
  156. switch ($code_pre){
  157. case ClerkEnum::SECONDARY_CARD_CLERK_CODE_PRE:
  158. return self::getSecondaryCardClerkData($params);
  159. default:
  160. switch($params['scan_type']){
  161. case 'order':
  162. if(MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_VERIFY_VOUCHER) == false) return $this->error('缺少插件模板,暂不支持该功能');
  163. /** @var \addons\VerifyVoucher\common\models\VerifyVoucherOrder $order_class */
  164. $order_class = \addons\VerifyVoucher\common\models\VerifyVoucherOrder::class;
  165. $data = $order_class::getCodeInfo($this->mall_id, $params['code']);
  166. if($data === false) return $this->error($order_class::getStaticError());
  167. break;
  168. default:
  169. $e_coupon_code = ElectronCouponCode::findOne(['code'=>$params['code']]);
  170. if(empty($e_coupon_code)) return $this->error('该核销码不存在');
  171. $e_coupon_user_coupon = ElectronCouponUserCoupon::findOne(['id'=>$e_coupon_code['user_e_coupon_id']]);
  172. $e_coupon = ElectronCoupon::findOne(['id'=>$e_coupon_user_coupon['e_coupon_id']]);
  173. $data['pic'] = $e_coupon['pic'];
  174. $data['name'] = $e_coupon['name'];
  175. $data['money'] = $e_coupon['price'];
  176. $data['clerk_nums'] = $e_coupon_code['amount'];
  177. break;
  178. }
  179. }
  180. return $this->success('ok', $data);
  181. }catch (\Exception $e){
  182. return $this->error($e->getMessage());
  183. }
  184. }else{
  185. $params =\Yii::$app->request->post();
  186. $res = \Yii::$app->services->validate->validate($params, [
  187. [['code'], 'required'],
  188. [['scan_type'], 'string'],
  189. [['clerk_nums'], 'safe']
  190. ]);
  191. if($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  192. $params['store_id'] = $clerk['store_id'];
  193. $params['clerk_id'] = $clerk['id'];
  194. $params['mobile'] = $this->user['mobile']??'';
  195. $params['clerk_admin_id'] = $this->user_id;
  196. $params['clerk_user_id'] = $this->user_id ?: 0;
  197. $params['mall_id'] = $this->mall_id;
  198. $params['user_id'] = $this->user_id;
  199. $code = $params['code'];
  200. $code_pre = $code[0].$code[1];
  201. switch ($code_pre) {
  202. case ClerkEnum::SECONDARY_CARD_CLERK_CODE_PRE:
  203. $res = self::secondaryCardClerk($params);
  204. if(is_string($res)) return $this->error($res);
  205. return $this->success('核销成功');
  206. default:
  207. switch($params['scan_type']){
  208. case 'order':
  209. if(MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_VERIFY_VOUCHER) == false) return $this->error('缺少插件模板,暂不支持该功能');
  210. /** @var \addons\VerifyVoucher\common\models\VerifyVoucherOrder $order_class */
  211. $order_class = \addons\VerifyVoucher\common\models\VerifyVoucherOrder::class;
  212. $result = $order_class::verifyOrder($params);
  213. if($result == false) return $this->error($order_class::getStaticError());
  214. break;
  215. default:
  216. $result = ElectronCouponCode::doClerkCode($params);
  217. if($result == false) return $this->error(ElectronCouponCode::getStaticError());
  218. break;
  219. }
  220. }
  221. return $this->success('核销成功', $result);
  222. }
  223. }
  224. protected function getSecondaryCardClerkData($params){
  225. if(!MallAddons::isInstall($params['mall_id'],'SecondaryCard')) {
  226. throw new \Exception('未安装次卡插件');
  227. }
  228. return SecondaryCardOrderService::getSecondaryCardClerkData($params);
  229. }
  230. protected function secondaryCardClerk($params){
  231. if(!MallAddons::isInstall($params['mall_id'],'SecondaryCard')) {
  232. throw new \Exception('未安装次卡插件');
  233. }
  234. return SecondaryCardOrderService::secondaryCardClerk($params);
  235. }
  236. }