Home.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. namespace app\controller\api;
  3. use app\extra\basic\Base;
  4. use app\extra\tools\CodeExtend;
  5. use app\extra\weMini\Crypt;
  6. use app\middleware\WxMiddleware;
  7. use app\model\saas\SaasShop;
  8. use app\model\saas\SaasUser;
  9. use app\model\saas\SaasUserOpen;
  10. use LinFly\Annotation\Route\Controller;
  11. use LinFly\Annotation\Route\Route;
  12. use support\Request;
  13. use support\Response;
  14. use LinFly\Annotation\Route\Middleware;
  15. use Shopwwi\WebmanAuth\Facade\Auth as AuthMode;
  16. use support\think\Db;
  17. #[Controller(prefix: "/wx_api/default"),Middleware(WxMiddleware::class)]
  18. class Home extends Base
  19. {
  20. protected array $whiteShop = [
  21. "10888572278827" => "10888572278827", // 惠印多马村店
  22. "10888566286841" => "327545130062964", // 中站小学店
  23. "10888590458813" => "326945519114632", // 幸小印美店
  24. "10888645729727" => "326844775971796", // 焦作和平街店
  25. ];
  26. /**
  27. * 跳出授权
  28. * @var array|string[]
  29. */
  30. protected array $noNeedLogin = ['loginHome','changeData','changeDataSubmit'];
  31. /**
  32. * 不需要迁移店铺
  33. * @var array|string[]
  34. */
  35. protected array $shopNoUser = [
  36. "10888742460468",
  37. "10888697645625",
  38. "10888684635673",
  39. "10888684633177",
  40. ];
  41. #[Route(path: "change_save",methods: "post")]
  42. public function changeDataSubmit(Request $request): Response
  43. {
  44. try {
  45. $param = $this->_valid([
  46. "shop.require" => "",
  47. "old.require" => "",
  48. "openid.default" => ""
  49. ],$request->method());
  50. if (!is_array($param)) return error($param);
  51. if (in_array($param['shop'],$this->shopNoUser)) return error("该店铺不支持迁移");
  52. $member = (new SaasUser)->where("openid",$param['openid'])->findOrEmpty();
  53. if (!$member->isEmpty()) return error("无需多次操作");
  54. $old = Db::connect("old")->table("inmei_member_card")->where("openid",$param['old'])->findOrEmpty();
  55. if (isset($this->whiteShop[$param['shop']])) {
  56. $shopId = $this->whiteShop[$param['shop']];
  57. } else {
  58. $shopId = $param['shop'];
  59. }
  60. $state = $member->insertGetId([
  61. "openid" => $param['openid'],
  62. "shop_id" => $shopId,
  63. "card_no" => strtoupper(md5($param['openid'].$shopId)),
  64. "balance" => $old['balance'],
  65. "total_balance" => $old['total_balance']
  66. ]);
  67. if (!$state) return error("操作失败");
  68. return success("转入成功");
  69. } catch (\Throwable $throwable) {
  70. return error($throwable->getMessage());
  71. }
  72. }
  73. #[Route(path: "change",methods: "post")]
  74. public function changeData(Request $request): Response
  75. {
  76. try {
  77. $param = $this->_valid([
  78. "shop.require" => "",
  79. "code.require" => "",
  80. "openid.default" => ""
  81. ],$request->method());
  82. if (!is_array($param)) return error($param);
  83. echo getDateFull()."迁移信息\n";
  84. echo json_encode($param)."\n";
  85. $userinfo = (new Crypt([
  86. "appid" => sConf("wechat.mini_appid"),
  87. "appsecret" => sConf("wechat.mini_secret")
  88. ]))->session($param['code']);
  89. if (!isset($userinfo['openid'])) return error("获取数据失败");
  90. $openId = $userinfo['openid'];
  91. if (isset($this->whiteShop[$param['shop']])) {
  92. $shopId = $this->whiteShop[$param['shop']];
  93. } else {
  94. $shopId = $param['shop'];
  95. }
  96. $old = Db::connect("old")->table("inmei_member_card")->where("openid",$param['openid'])->where("shop_id",$shopId)->find();
  97. print_r($old);
  98. if (empty($old)) $old = null;
  99. $shop = (new SaasShop)->where("shop_id",$shopId)->findOrEmpty();
  100. if ($shop->isEmpty()) $shop = null;
  101. return success("ok",compact("shop",'old','openId'));
  102. } catch (\Throwable $throwable) {
  103. return error($throwable->getMessage());
  104. }
  105. }
  106. /**
  107. * 首页信息
  108. * @return Response
  109. */
  110. #[Route(path: "home",methods: "post")]
  111. public function loginHome(Request $request)
  112. {
  113. try {
  114. $param = $this->_valid([
  115. "shop.require" => "",
  116. "print.require" => "",
  117. "code.require" => "",
  118. "card.default" => "",
  119. "oshop.default" => "",
  120. "oid.default" => ""
  121. ],$request->method());
  122. if (!is_array($param)) return error($param);
  123. $userinfo = (new Crypt([
  124. "appid" => sConf("wechat.mini_appid"),
  125. "appsecret" => sConf("wechat.mini_secret")
  126. ]))->session($param['code']);
  127. if (!isset($userinfo['openid'])) return error("获取数据失败");
  128. $map = ['is_deleted' => 0, 'openid' => $userinfo['openid']];
  129. $user = (new SaasUserOpen)->where($map)->findOrEmpty();
  130. if ($user->isEmpty()) {
  131. $user->insertGetId(['openid' => $userinfo['openid'],'oid' => ($param['oid'] == 'undefined'?'':$param['oid']),'update_at' => getDateFull(),"create_ip" => $request->getRealIp(),"nickname" => "微信用户","headimg" => "https://inmei-print.oss-cn-guangzhou.aliyuncs.com/logo.png"]);
  132. $user = (new SaasUserOpen)->where($map)->findOrEmpty();
  133. } else {
  134. if (!empty($param['oid']) && empty($user['oid'])) {
  135. if ($param['oid'] !== 'undefined') {
  136. $user->oid = ($param['oid'] == 'undefined'?'':$param['oid']);
  137. $user->update_at = getDateFull();
  138. $user->save();
  139. }
  140. }
  141. }
  142. $userAuth = get_object_vars(AuthMode::guard("member")->login($user->toArray()));
  143. $shopData = [];
  144. $cardState = 0;
  145. if (!empty($param['shop']))
  146. {
  147. $shop = (new SaasShop)->where("shop_id", $param['shop'])->field("shop_name,start_at,end_at,vip_end,shop_status,shop_notice,line_time,status,shop_address")->findOrEmpty();
  148. if ($shop->isEmpty()) return error("店铺已被关闭");
  149. $currentTime = time();
  150. $vipEndTime = strtotime($shop['vip_end'] ?? '');
  151. $lineEndTime = strtotime("+10020000 min", strtotime($shop['line_time'] ?? ''));
  152. $today = date('Y-m-d');
  153. $startTime = strtotime("{$today} {$shop['start_at']}");
  154. $endTime = strtotime("{$today} {$shop['end_at']}");
  155. if ($currentTime > $vipEndTime){
  156. $status = ['text' => '已过期', 'val' => 0];
  157. } else if ($shop['status'] == 2) {
  158. $status = ['text' => '已冻结', 'val' => 0];
  159. } else if ($currentTime > $lineEndTime) {
  160. $status = ['text' => '已离线', 'val' => 0];
  161. } else if ($currentTime > $endTime || $currentTime < $startTime) // 过了营业时间
  162. {
  163. $status = ['text' => '休息中', 'val' => 0];
  164. } else {
  165. $status = ['text' => '营业中', 'val' => 1];
  166. }
  167. $shop['status_text'] = $status['text'];
  168. $shop['status_val'] = $status['val'];
  169. $shop['time'] = ($shop['start_at'] == '00:00' && $shop['end_at'] == '23:59')
  170. ? '24小时营业'
  171. : date('H:i', $startTime) . '-' . date('H:i', $endTime);
  172. if ($param['card'] == 1) { // 领取会员卡
  173. $cardInfo = (new SaasUser)->where("shop_id",$param['shop'])->where("openid",$userinfo['openid'])->findOrEmpty();
  174. if ($cardInfo->isEmpty()) {
  175. $cardInfo->insertGetId([
  176. "shop_id" => $param['shop'],
  177. "openid" => $userinfo['openid'],
  178. "card_no" => CodeExtend::uniqidDate(16,"1088")
  179. ]);
  180. $cardState = 1;
  181. }
  182. }
  183. $shopData = $shop->toArray();
  184. }
  185. $share = sConf("wechat.share");
  186. return success("ok",["shop" => $shopData,'user' => ['nickname' => $user['nickname']??'','avatar' => $user['avatar']??''],"token" => $userAuth,"card" => $cardState,"share" => $share]);
  187. }catch (\Throwable $e){
  188. echo $e->getMessage()."\n";
  189. echo $e->getFile()."\n";
  190. echo $e->getLine()."\n";
  191. return error($e->getMessage());
  192. }
  193. }
  194. }