MemberController.php 123 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/3/1
  6. * Time: 下午4:39
  7. */
  8. namespace app\frontend\modules\member\controllers;
  9. use app\backend\modules\charts\modules\phone\models\PhoneAttribution;
  10. use app\backend\modules\charts\modules\phone\services\PhoneAttributionService;
  11. use app\backend\modules\member\models\MemberParent;
  12. use app\backend\modules\member\models\MemberRelation;
  13. use app\backend\modules\order\models\Order;
  14. use app\common\components\ApiController;
  15. use app\common\events\member\MemberBindMobile;
  16. use app\common\events\member\MemberNewOfflineEvent;
  17. use app\common\events\member\MergeMemberEvent;
  18. use app\common\events\order\OrderMiniNoticeListEvent;
  19. use app\common\exceptions\AppException;
  20. use app\common\exceptions\ShopException;
  21. use app\common\facades\EasyWeChat;
  22. use app\common\facades\Setting;
  23. use app\common\helpers\Cache;
  24. use app\common\helpers\Client;
  25. use app\common\helpers\ImageHelper;
  26. use app\common\helpers\MiniCodeHelper;
  27. use app\common\helpers\Url;
  28. use app\common\models\AccountWechats;
  29. use app\common\models\Address;
  30. use app\common\models\Area;
  31. use app\common\models\Goods;
  32. use app\common\models\Income;
  33. use app\common\models\McMappingFans;
  34. use app\common\models\member\MemberCancelSet;
  35. use app\common\models\member\MemberInvitationCodeLog;
  36. use app\common\models\member\MemberInviteGoodsLog;
  37. use app\common\models\member\MemberMerge;
  38. use app\common\models\member\MemberPosition;
  39. use app\common\models\MemberAddress;
  40. use app\common\models\MemberAlipay;
  41. use app\common\models\MemberGroup;
  42. use app\common\models\MemberShopInfo;
  43. use app\common\models\MiniTemplateCorresponding;
  44. use app\common\models\notice\MinAppTemplateMessage;
  45. use app\common\models\YzMemberAddress;
  46. use app\common\modules\member\MemberCenter;
  47. use app\common\services\alipay\OnekeyLogin;
  48. use app\common\services\credit\ConstService;
  49. use app\common\services\finance\BalanceChange;
  50. use app\common\services\finance\PointService;
  51. use app\common\services\member\MemberCenterService;
  52. use app\common\services\member\MemberMergeService;
  53. use app\common\services\notice\share\MiniNoticeTemplate;
  54. use app\common\services\popularize\PortType;
  55. use app\common\services\Session;
  56. use app\common\services\Utils;
  57. use app\framework\Http\Request;
  58. use app\frontend\models\Member;
  59. use app\frontend\modules\member\models\MemberDouyinModel;
  60. use app\frontend\modules\member\models\MemberFavorite;
  61. use app\frontend\modules\member\models\MemberMiniAppModel;
  62. use app\frontend\modules\member\models\MemberModel;
  63. use app\frontend\modules\member\models\MemberUniqueModel;
  64. use app\frontend\modules\member\models\MemberWechatModel;
  65. use app\frontend\modules\member\models\SubMemberModel;
  66. use app\frontend\modules\member\services\MemberCenterDataService;
  67. use app\frontend\modules\member\services\MemberMiniAppService;
  68. use app\frontend\modules\member\services\MemberReferralService;
  69. use app\frontend\modules\member\services\MemberService;
  70. use EasyWeChat\Foundation\Application;
  71. use Illuminate\Support\Facades\DB;
  72. use Illuminate\Support\Facades\Schema;
  73. use Illuminate\Support\Str;
  74. use Yunshop\AlipayOnekeyLogin\services\SynchronousUserInfo;
  75. use Yunshop\Commission\models\Agents;
  76. use Yunshop\Decorate\models\DecorateDefaultTabModel;
  77. use Yunshop\Decorate\models\DecorateDefaultTemplateModel;
  78. use Yunshop\Designer\models\ViewSet;
  79. use Yunshop\GroupWork\frontend\modules\order\models\OrderModel;
  80. use Yunshop\Kingtimes\common\models\Distributor;
  81. use Yunshop\Kingtimes\common\models\Provider;
  82. use Yunshop\Love\Common\Models\MemberLove;
  83. use Yunshop\Love\Common\Services\LoveChangeService;
  84. use Yunshop\Love\Common\Services\SetService;
  85. use Yunshop\Poster\models\Poster;
  86. use Yunshop\Poster\services\CreatePosterService;
  87. use Yunshop\RealNameAuth\common\models\RealNameAuth;
  88. use Yunshop\RealNameAuth\common\models\RealNameAuthSet;
  89. use Yunshop\RegistrationArea\Common\models\MemberLocation;
  90. use Yunshop\ShopEsign\common\service\YunSignService;
  91. use Yunshop\StoreCashier\common\models\Store;
  92. use Yunshop\Designer\models\Designer;
  93. use app\frontend\models\MembershipInformationLog;
  94. use Yunshop\Designer\Backend\Modules\Page\Controllers\RecordsController;
  95. use app\common\models\SynchronizedBinder;
  96. use Illuminate\Support\Facades\Cookie;
  97. use Yunshop\YunSign\common\models\Contract;
  98. use Yunshop\YunSign\common\models\ContractNum;
  99. use Yunshop\YunSign\common\models\PersonAccount;
  100. class MemberController extends ApiController
  101. {
  102. protected $publicAction = [
  103. 'guideFollow',
  104. 'wxJsSdkConfig',
  105. 'memberFromHXQModule',
  106. 'dsAlipayUserModule',
  107. 'isValidatePage',
  108. 'designer',
  109. 'getAdvertisement',
  110. 'miniMemberMobile'
  111. ];
  112. protected $ignoreAction = [
  113. 'guideFollow',
  114. 'wxJsSdkConfig',
  115. 'memberFromHXQModule',
  116. 'dsAlipayUserModule',
  117. 'isValidatePage',
  118. 'designer',
  119. 'getAdvertisement',
  120. 'miniMemberMobile'
  121. ];
  122. protected $type;
  123. protected $sign;
  124. protected $set;
  125. protected $relation_base_set;
  126. public $apiErrMsg = [];
  127. public $apiData = [];
  128. /**
  129. * 获取用户信息
  130. * @param $request
  131. * @param null $integrated
  132. * @return array|\Illuminate\Http\JsonResponse
  133. */
  134. public function getUserInfo(Request $request, $integrated = null)
  135. {
  136. $member_id = \YunShop::app()->getMemberId();
  137. if (empty($member_id)) {
  138. if (is_null($integrated)) {
  139. return $this->errorJson('缺少访问参数');
  140. } else {
  141. return show_json(0, '缺少访问参数');
  142. }
  143. }
  144. $this->type = intval(\YunShop::request()->type);
  145. $this->sign = intval(\YunShop::request()->ingress);
  146. $memberModel = $member_info = MemberModel::getUserInfos_v2($member_id)->first();
  147. if (empty($member_info)) {
  148. $this->jump = true;
  149. $mid = \app\common\models\Member::getMid();
  150. $this->jumpUrl(\YunShop::request()->type, $mid);
  151. }
  152. $member_info = $member_info->toArray();
  153. $data = MemberModel::userData_v2($member_info, $member_info['yz_member']);
  154. $switch = PortType::popularizeShow(\YunShop::request()->type);
  155. $un_withdraw = Income::getIncomes()
  156. ->where('member_id', \YunShop::app()->getMemberId())
  157. ->where('status', 0)
  158. ->sum('amount');
  159. $data['un_withdraw'] = number_format($un_withdraw, 2) ?? 0;
  160. //会员收入
  161. if ($switch) {
  162. $data['income'] = MemberModel::getIncomeCount();
  163. }
  164. //自定义表单
  165. $data['myform'] = (new MemberService())->memberInfoAttrStatus($member_info['yz_member']);
  166. //邀请码
  167. $v = request('v');
  168. if (!is_null($v)) {
  169. $data['inviteCode']['status'] = \Setting::get('shop.member.is_invite') ?: 0;
  170. if (is_null($member_info['yz_member']['invite_code']) || empty($member_info['yz_member']['invite_code'])) {
  171. $data['inviteCode']['code'] = MemberModel::getInviteCode($member_id);
  172. } else {
  173. $data['inviteCode']['code'] = $member_info['yz_member']['invite_code'];
  174. }
  175. } else {
  176. $data['inviteCode'] = 0;
  177. }
  178. // 邀请页面总店强制修改
  179. $member_set = \Setting::get('shop.member');
  180. $data['is_bind_invite'] = $member_set['is_bind_invite'] ?: 0; // 邀请页面总店强制修改
  181. $data['copyrightImg'] = yz_tomedia(\Setting::get('shop.shop.copyrightImg')) ?: '';
  182. $data['copyright'] = \Setting::get('shop.shop.copyright') ?: '';
  183. $data['cat_adv_url'] = \Setting::get('shop.shop.cat_adv_url') ?: '';
  184. $data['small_cat_adv_url'] = \Setting::get('shop.shop.small_cat_adv_url') ?: '';
  185. if (MemberShopInfo::getParentId($member_id) > 0) { // 不是总店
  186. $data['is_bind_invite'] = 0;
  187. }
  188. $member_cancel_set = MemberCancelSet::uniacid()->select('status')->first();
  189. if (isset($member_cancel_set['status'])) {
  190. $data['member_cancel_status'] = $member_cancel_set['status'];
  191. } else {
  192. $data['member_cancel_status'] = 1;
  193. }
  194. //这个参数是要在会员设置里使用的,别再把这个参数移走了
  195. //易宝标准版
  196. $data['yop'] = app('plugins')->isEnabled('yop-pay') ? 1 : 0;
  197. //易宝专业版
  198. $data['yop_pro'] = app('plugins')->isEnabled('yop-pro') ? 1 : 0;
  199. //0.1拼团
  200. $data['group_work'] = app('plugins')->isEnabled('group-work') ? 1 : 0;
  201. // 汇聚支付是否开启
  202. $data['is_open_converge_pay'] = app('plugins')->isEnabled('converge_pay') ? 1 : 0;
  203. //CMC充值
  204. $data['cmc_pay'] = app('plugins')->isEnabled('cmc-pay') ? 1 : 0;
  205. //慈善基金-总捐赠金额
  206. if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('charity_fund_charity_total_money'))) {
  207. $charity_fund_config = \Yunshop\CharityFund\services\SetConfigService::getSetConfig();
  208. if ($charity_fund_config->is_open && $charity_fund_config->is_show_money) {
  209. $class = array_get(
  210. \app\common\modules\shop\ShopConfig::current()->get('charity_fund_charity_total_money'),
  211. 'class'
  212. );
  213. $function = array_get(
  214. \app\common\modules\shop\ShopConfig::current()->get('charity_fund_charity_total_money'),
  215. 'function'
  216. );
  217. $ret = $class::$function();
  218. $data['charity_total_money'] = $ret ?: 0;
  219. }
  220. }
  221. $set = json_decode(\Setting::get('shop.form'), true);
  222. $data['name_must'] = $set['base']['name_must'];
  223. $data['change_info'] = $set['base']['change_info'] == 1 ? true : false;
  224. $data['has_avatar'] = $memberModel->has_avatar;//用来判断会员是否有设置头像,avatar没设置也默认返回头像了
  225. //会员团队
  226. if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('team_name')) && \YunShop::app()->getMemberId(
  227. )) {
  228. $class = array_get(\app\common\modules\shop\ShopConfig::current()->get('team_name'), 'class');
  229. $function = array_get(\app\common\modules\shop\ShopConfig::current()->get('team_name'), 'function');
  230. $member_team = $class::$function(\YunShop::app()->getMemberId());
  231. if ($member_team['res']) {
  232. $data['member_team'] = $member_team;
  233. }
  234. }
  235. //会员等级天数
  236. $data['validity_day'] = $member_info['yz_member']['validity'];
  237. if (is_null($integrated)) {
  238. return $this->successJson('', $data);
  239. } else {
  240. return show_json(1, $data);
  241. }
  242. }
  243. /**
  244. * 检查会员推广资格
  245. *
  246. * @return \Illuminate\Http\JsonResponse
  247. */
  248. public function getMemberRelationInfo()
  249. {
  250. $info = MemberRelation::getSetInfo()->first();
  251. $member_info = SubMemberModel::getMemberShopInfo(\YunShop::app()->getMemberId());
  252. if (empty($info)) {
  253. return $this->errorJson('缺少参数');
  254. } else {
  255. $info = $info->toArray();
  256. }
  257. if (empty($member_info)) {
  258. return $this->errorJson('会员不存在');
  259. } else {
  260. $data = $member_info->toArray();
  261. }
  262. $account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
  263. switch ($info['become']) {
  264. case 0:
  265. case 1:
  266. $apply_qualification = 1;
  267. $mid = \app\common\models\Member::getMid();
  268. $m_member = MemberShopInfo::where('member_id', \YunShop::app()->getMemberId())->first();
  269. if ($m_member->parent_id != $mid && $m_member->parent_id != 0) {
  270. $mid = $m_member->parent_id ?: 0;
  271. }
  272. $parent_name = '';
  273. if (empty($mid)) {
  274. $parent_name = '总店';
  275. } else {
  276. $parent_model = MemberModel::getMemberById($mid);
  277. if (!empty($parent_model)) {
  278. $parent_member = $parent_model->toArray();
  279. $status = '';
  280. if ($parent_model['inviter']) {
  281. $status = '(暂定)';
  282. }
  283. $parent_name = $parent_member['realname'] ?: $status . $parent_member['nickname'];
  284. }
  285. }
  286. $member_model = MemberModel::getMemberById(\YunShop::app()->getMemberId());
  287. if (!empty($member_model)) {
  288. $member = $member_model->toArray();
  289. }
  290. break;
  291. case 2:
  292. $apply_qualification = 2;
  293. $cost_num = Order::getCostTotalNum(\YunShop::app()->getMemberId());
  294. if ($info['become_check'] && $cost_num >= $info['become_ordercount']) {
  295. $apply_qualification = 5;
  296. }
  297. break;
  298. case 3:
  299. $apply_qualification = 3;
  300. $cost_price = Order::getCostTotalPrice(\YunShop::app()->getMemberId());
  301. if ($info['become_check'] && $cost_price >= $info['become_moneycount']) {
  302. $apply_qualification = 6;
  303. }
  304. break;
  305. case 4:
  306. $apply_qualification = 4;
  307. $goods = Goods::getGoodsById($info['become_goods_id']);
  308. $goods_name = '';
  309. if (!empty($goods)) {
  310. $goods = $goods->toArray();
  311. $goods_name = $goods['title'];
  312. }
  313. if ($info['become_check'] && MemberRelation::checkOrderGoods(
  314. $info['become_goods_id'],
  315. $member_info->member_id
  316. )) {
  317. $apply_qualification = 7;
  318. }
  319. break;
  320. default:
  321. $apply_qualification = 0;
  322. }
  323. $relation = [
  324. 'switched' => $info['status'],
  325. 'become' => $apply_qualification,
  326. 'become1' => [
  327. 'shop_name' => $account['name'],
  328. 'parent_name' => $parent_name,
  329. 'realname' => $member['realname'],
  330. 'mobile' => $member['mobile']
  331. ],
  332. 'become2' => ['shop_name' => $account['name'], 'total' => $info['become_ordercount'], 'cost' => $cost_num],
  333. 'become3' => [
  334. 'shop_name' => $account['name'],
  335. 'total' => $info['become_moneycount'],
  336. 'cost' => $cost_price
  337. ],
  338. 'become4' => [
  339. 'shop_name' => $account['name'],
  340. 'goods_name' => $goods_name,
  341. 'goods_id' => $info['become_goods_id']
  342. ],
  343. 'is_agent' => $data['is_agent'],
  344. 'status' => $data['status'],
  345. 'account' => $account['name']
  346. ];
  347. return $this->successJson('', $relation);
  348. }
  349. /**
  350. * 会员是否有推广权限
  351. *
  352. * @return \Illuminate\Http\JsonResponse
  353. */
  354. public function isAgent()
  355. {
  356. if (MemberModel::isAgent()) {
  357. $has_permission = 1;
  358. } else {
  359. $has_permission = 0;
  360. }
  361. return $this->successJson('', ['is_agent' => $has_permission]);
  362. }
  363. /**
  364. * 会员推广二维码
  365. *
  366. * @param $url
  367. * @param string $extra
  368. *
  369. * @return \Illuminate\Http\JsonResponse
  370. */
  371. public function getAgentQR($extra = '')
  372. {
  373. if (empty(\YunShop::app()->getMemberId())) {
  374. return $this->errorJson('请重新登录');
  375. }
  376. $qr_url = MemberModel::getAgentQR($extra = '');
  377. return $this->successJson('', ['qr' => $qr_url]);
  378. }
  379. /**
  380. * 用户推广申请
  381. *
  382. * @return \Illuminate\Http\JsonResponse
  383. */
  384. public function addAgentApply()
  385. {
  386. if (!\YunShop::app()->getMemberId()) {
  387. return $this->errorJson('请重新登录');
  388. }
  389. $sub_member_model = SubMemberModel::getMemberShopInfo(\YunShop::app()->getMemberId());
  390. $sub_member_model->status = 1;
  391. $sub_member_model->apply_time = time();
  392. if (!$sub_member_model->save()) {
  393. return $this->errorJson('会员信息保存失败');
  394. }
  395. $realname = \YunShop::request()->realname;
  396. $moible = \YunShop::request()->mobile;
  397. $member_mode = MemberModel::getMemberById(\YunShop::app()->getMemberId());
  398. $member_mode->realname = $realname;
  399. $member_mode->mobile = $moible;
  400. if (!$member_mode->save()) {
  401. return $this->errorJson('会员信息保存失败');
  402. }
  403. return $this->successJson('ok');
  404. }
  405. /**
  406. * 获取我的下线
  407. *
  408. * @return \Illuminate\Http\JsonResponse
  409. */
  410. public function getMyAgentCount()
  411. {
  412. return $this->successJson('', ['count' => MemberModel::getAgentCount_v2(\YunShop::app()->getMemberId())]);
  413. }
  414. /**
  415. * 我的推荐人
  416. *
  417. * @return \Illuminate\Http\JsonResponse
  418. */
  419. public function getMyReferral()
  420. {
  421. $data = MemberModel::getMyReferral();
  422. if (!empty($data)) {
  423. return $this->successJson('', $data);
  424. } else {
  425. return $this->errorJson('会员不存在');
  426. }
  427. }
  428. /**
  429. * 我的推荐人v2
  430. *
  431. * @return \Illuminate\Http\JsonResponse
  432. */
  433. public function getMyReferral_v2(Request $request, $integrated = null)
  434. {
  435. $data = MemberModel::getMyReferral_v2();
  436. //IOS时,把微信头像url改为https前缀
  437. $data['avatar'] = ImageHelper::iosWechatAvatar($data['avatar']);
  438. if (!empty($data)) {
  439. if (is_null($integrated)) {
  440. return $this->successJson('', $data);
  441. } else {
  442. return show_json(1, $data);
  443. }
  444. } else {
  445. if (is_null($integrated)) {
  446. return $this->errorJson('会员不存在');
  447. } else {
  448. return show_json(0, '会员不存在');
  449. }
  450. }
  451. }
  452. /**
  453. * 会员推荐人上级
  454. * @return array|\Illuminate\Http\JsonResponse
  455. */
  456. public function getMyReferralParents()
  457. {
  458. $member_id = \YunShop::app()->getMemberId();
  459. $yz_member = MemberShopInfo::getMemberShopInfo($member_id);
  460. if ($yz_member['inviter'] == 1 && !empty(MemberShopInfo::getMemberShopInfo($yz_member['parent_id']))) {
  461. $data = MemberParent::getAgentParentByMemberId($yz_member['parent_id']);
  462. return show_json(1, $data);
  463. } else {
  464. return show_json(1, ['is_show' => 0]); //没有推荐人上级
  465. }
  466. }
  467. /**
  468. * 我推荐的人
  469. *
  470. * @return \Illuminate\Http\JsonResponse
  471. */
  472. public function getMyAgent()
  473. {
  474. $data = MemberModel::getMyAgent();
  475. if (!empty($data)) {
  476. return $this->successJson('', $data);
  477. } else {
  478. return $this->errorJson('会员不存在');
  479. }
  480. }
  481. /**
  482. * 我推荐的人 v2 基本信息
  483. *
  484. * @return \Illuminate\Http\JsonResponse
  485. */
  486. public function getMyAgent_v2(Request $request, $integrated = null)
  487. {
  488. $data = MemberModel::getMyAgent_v2();
  489. if (is_null($integrated)) {
  490. return $this->successJson('', $data);
  491. } else {
  492. return show_json(1, $data);
  493. }
  494. }
  495. /**
  496. * 我推荐的人 v2 数据
  497. *
  498. * @return \Illuminate\Http\JsonResponse
  499. */
  500. public function getMyAgentData_v2(Request $request, $integrated = null)
  501. {
  502. app('db')->cacheSelect = true;
  503. $data = MemberModel::getMyAgentData_v2();
  504. if (is_null($integrated)) {
  505. return $this->successJson('', $data);
  506. } else {
  507. return show_json(1, $data);
  508. }
  509. }
  510. /**
  511. * 会员中心我的关系
  512. *
  513. * @return \Illuminate\Http\JsonResponse
  514. */
  515. public function getMyRelation()
  516. {
  517. $my_referral = MemberModel::getMyReferral();
  518. $my_agent = MemberModel::getMyAgent();
  519. $data = [
  520. 'my_referral' => $my_referral,
  521. 'my_agent' => $my_agent
  522. ];
  523. return $this->successJson('', $data);
  524. }
  525. /**
  526. * 通过省份id获取对应的市信息
  527. *
  528. * @return \Illuminate\Http\JsonResponse
  529. */
  530. public function getCitysByProvince()
  531. {
  532. $id = \YunShop::request()->parent_id;
  533. $data = Area::getCitysByProvince($id);
  534. if (!empty($data)) {
  535. return $this->successJson('', $data->toArray());
  536. } else {
  537. return $this->errorJson('查无数据');
  538. }
  539. }
  540. /**
  541. * 通过市id获取对应的区信息
  542. *
  543. * @return \Illuminate\Http\JsonResponse
  544. */
  545. public function getAreasByCity()
  546. {
  547. $id = \YunShop::request()->parent_id;
  548. $data = Area::getAreasByCity($id);
  549. if (!empty($data)) {
  550. return $this->successJson('', $data->toArray());
  551. } else {
  552. return $this->errorJson('查无数据');
  553. }
  554. }
  555. /**
  556. * 更新会员资料
  557. *
  558. * @return \Illuminate\Http\JsonResponse
  559. */
  560. public function updateUserInfo()
  561. {
  562. $birthday = [];
  563. $data = \YunShop::request()->data;
  564. $get = json_decode(\Setting::get('shop.form'), true);
  565. if (empty($data['realname']) && $get['base']['name_must'] == 1) {
  566. return $this->errorJson('请填写姓名');
  567. }
  568. //商家App获取的数据是json字符串
  569. if (\Yunshop::request()->type == 9) {
  570. $data = json_decode($data, true);
  571. }
  572. if (isset($data['birthday'])) {
  573. $birthday = explode('-', $data['birthday']);
  574. }
  575. $member_data = [
  576. 'realname' => $data['realname'] ?: '',
  577. 'avatar' => $data['avatar'],
  578. 'gender' => isset($data['gender']) ? intval($data['gender']) : 0,
  579. 'birthyear' => isset($birthday[0]) ? intval($birthday[0]) : 0,
  580. 'birthmonth' => isset($birthday[1]) ? intval($birthday[1]) : 0,
  581. 'birthday' => isset($birthday[2]) ? intval($birthday[2]) : 0
  582. ];
  583. if ($data['nickname']) {
  584. $member_data['nickname'] = $data['nickname'];
  585. }
  586. // if (!empty($data['mobile'])) {
  587. // $member_data['mobile'] = $data['mobile'];
  588. // }
  589. $member_data['mobile'] = $data['mobile'];
  590. if (!empty($data['telephone'])) {
  591. $member_data['telephone'] = $data['telephone'];
  592. }
  593. $member_shop_info_data = [
  594. 'alipay' => $data['alipay'],
  595. 'alipayname' => $data['alipay_name'],
  596. 'province_name' => isset($data['province_name']) ? $data['province_name'] : '',
  597. 'city_name' => isset($data['city_name']) ? $data['city_name'] : '',
  598. 'area_name' => isset($data['area_name']) ? $data['area_name'] : '',
  599. 'province' => isset($data['province']) ? intval($data['province']) : 0,
  600. 'city' => isset($data['city']) ? intval($data['city']) : 0,
  601. 'area' => isset($data['area']) ? intval($data['area']) : 0,
  602. 'address' => isset($data['address']) ? $data['address'] : '',
  603. 'wechat' => isset($data['wx']) ? $data['wx'] : '',
  604. ];
  605. if (\YunShop::app()->getMemberId()) {
  606. // $memberService = app(MemberService::class);
  607. // $memberService->chkAccount(\YunShop::app()->getMemberId());
  608. $member_model = MemberModel::getMemberById(\YunShop::app()->getMemberId());
  609. $member_shop_info_model = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
  610. $old_data = [
  611. 'alipay' => $member_shop_info_model->alipay,
  612. 'alipayname' => $member_shop_info_model->alipayname,
  613. 'wechat' => $member_shop_info_model->wechat,
  614. 'mobile' => $member_model->mobile,
  615. 'name' => $member_model->realname,
  616. 'type' => \YunShop::request()->type
  617. ];
  618. $new_data = [
  619. 'alipay' => $data['alipay'],
  620. 'alipayname' => $data['alipay_name'],
  621. 'wechat' => isset($data['wx']) ? $data['wx'] : '',
  622. 'mobile' => $data['mobile'],
  623. 'name' => $data['realname'],
  624. 'type' => \YunShop::request()->type
  625. ];
  626. $membership_infomation = [
  627. 'uniacid' => \YunShop::app()->uniacid,
  628. 'uid' => \YunShop::app()->getMemberId(),
  629. 'old_data' => serialize($old_data),
  630. 'new_data' => serialize($new_data),
  631. 'session_id' => session_id()
  632. ];
  633. MembershipInformationLog::create($membership_infomation);
  634. $member_model->setRawAttributes($member_data);
  635. $member_shop_info_model->setRawAttributes($member_shop_info_data);
  636. $member_validator = $member_model->validator($member_model->getAttributes());
  637. $member_shop_info_validator = $member_shop_info_model->validator($member_shop_info_model->getAttributes());
  638. if ($member_validator->fails()) {
  639. $warnings = $member_validator->messages();
  640. $show_warning = $warnings->first();
  641. return $this->errorJson($show_warning);
  642. }
  643. if ($member_shop_info_validator->fails()) {
  644. $warnings = $member_shop_info_validator->messages();
  645. $show_warning = $warnings->first();
  646. return $this->errorJson($show_warning);
  647. }
  648. //自定义表单
  649. $member_form = (new MemberService())->updateMemberForm($data);
  650. if (!empty($member_form)) {
  651. $member_shop_info_model->member_form = json_encode($member_form);
  652. }
  653. if ($member_model->save() && $member_shop_info_model->save()) {
  654. if (Cache::has($member_model->uid . '_member_info')) {
  655. Cache::forget($member_model->uid . '_member_info');
  656. }
  657. $phoneModel = PhoneAttribution::getMemberByID(\YunShop::app()->getMemberId());
  658. if (!is_null($phoneModel)) {
  659. $phoneModel->delete();
  660. }
  661. //手机归属地查询插入
  662. $phoneData = file_get_contents((new PhoneAttributionService())->getPhoneApi($member_model->mobile));
  663. $phoneArray = json_decode($phoneData);
  664. $phone['uid'] = \YunShop::app()->getMemberId();
  665. $phone['uniacid'] = \YunShop::app()->uniacid;
  666. $phone['province'] = $phoneArray->data->province;
  667. $phone['city'] = $phoneArray->data->city;
  668. $phone['sp'] = $phoneArray->data->sp;
  669. $phoneModel = new PhoneAttribution();
  670. $phoneModel->updateOrCreate(['uid' => \YunShop::app()->getMemberId()], $phone);
  671. return $this->successJson('用户资料修改成功');
  672. } else {
  673. return $this->errorJson('更新用户资料失败');
  674. }
  675. } else {
  676. return $this->errorJson('用户不存在');
  677. }
  678. }
  679. public function updateWxOrAli()
  680. {
  681. try {
  682. $yz_member = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
  683. } catch (ShopException $exception) {
  684. return $this->errorJson($exception->getMessage());
  685. }
  686. if (request()->wx) {
  687. $yz_member->wechat = request()->wx;
  688. }
  689. if (request()->alipay) {
  690. $yz_member->alipay = request()->alipay;
  691. }
  692. if (request()->alipay_name) {
  693. $yz_member->alipayname = request()->alipay_name;
  694. }
  695. if (!$yz_member->save()) {
  696. return $this->errorJson('保存失败');
  697. }
  698. return $this->successJson('保存成功');
  699. }
  700. /**
  701. * 手机预绑定
  702. * @return \Illuminate\Http\JsonResponse
  703. */
  704. public function prepBind()
  705. {
  706. $mobile = \YunShop::request()->mobile;
  707. $invite_code = \YunShop::request()->invite_code;
  708. $uid = \YunShop::app()->getMemberId();
  709. $is_show = false;
  710. $save_uid = 0;
  711. $del_uid = 0;
  712. if (empty($mobile)) {
  713. return $this->errorJson('输入手机号码为空');
  714. }
  715. $member_merge_set = Setting::get('relation_base');
  716. $member_model = MemberModel::getMemberById($uid); //当前登录会员
  717. $memberinfo_model = MemberModel::getMemberinfo(\YunShop::app()->uniacid, $mobile); //老手机会员
  718. if (empty($member_merge_set['is_merge_save_level'])) {
  719. //注册时间
  720. if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
  721. $save_uid = $memberinfo_model->uid;
  722. $del_uid = $uid;
  723. } elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
  724. $save_uid = $uid;
  725. $del_uid = $memberinfo_model->uid;
  726. }
  727. } elseif ($member_merge_set['is_merge_save_level'] == 1) {
  728. //手机号
  729. if (!empty($memberinfo_model)) {
  730. $save_uid = $memberinfo_model->uid;
  731. $del_uid = $uid;
  732. }
  733. } elseif ($member_merge_set['is_merge_save_level'] == 2) {
  734. //公众号
  735. $fans = McMappingFans::getFansById($uid);
  736. if ($fans) {
  737. if ($memberinfo_model) {
  738. $save_uid = $uid;
  739. $del_uid = $memberinfo_model->uid;
  740. }
  741. } else {
  742. if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
  743. $save_uid = $memberinfo_model->uid;
  744. $del_uid = $uid;
  745. } elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
  746. $save_uid = $uid;
  747. $del_uid = $memberinfo_model->uid;
  748. }
  749. }
  750. } elseif ($member_merge_set['is_merge_save_level'] == 3) {
  751. //小程序
  752. $mini_fans = MemberMiniAppModel::getFansById($uid);
  753. if ($mini_fans) {
  754. if ($memberinfo_model) {
  755. $save_uid = $uid;
  756. $del_uid = $memberinfo_model->uid;
  757. }
  758. } else {
  759. if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
  760. $save_uid = $memberinfo_model->uid;
  761. $del_uid = $uid;
  762. } elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
  763. $save_uid = $uid;
  764. $del_uid = $memberinfo_model->uid;
  765. }
  766. }
  767. } elseif ($member_merge_set['is_merge_save_level'] == 4) {
  768. //app
  769. $app_fans = MemberWechatModel::getFansById($uid);
  770. if ($app_fans) {
  771. if ($memberinfo_model) {
  772. $save_uid = $uid;
  773. $del_uid = $memberinfo_model->uid;
  774. }
  775. } else {
  776. if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
  777. $save_uid = $memberinfo_model->uid;
  778. $del_uid = $uid;
  779. } elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
  780. $save_uid = $uid;
  781. $del_uid = $memberinfo_model->uid;
  782. }
  783. }
  784. } else {
  785. //alipay
  786. $ali_fans = MemberAlipay::getFansById($uid);
  787. if ($ali_fans) {
  788. if ($memberinfo_model) {
  789. $save_uid = $uid;
  790. $del_uid = $memberinfo_model->uid;
  791. }
  792. } else {
  793. if (!empty($memberinfo_model) && ($memberinfo_model->createtime < $member_model->createtime)) {
  794. $save_uid = $memberinfo_model->uid;
  795. $del_uid = $uid;
  796. } elseif (!empty($memberinfo_model) && ($memberinfo_model->createtime > $member_model->createtime)) {
  797. $save_uid = $uid;
  798. $del_uid = $memberinfo_model->uid;
  799. }
  800. }
  801. }
  802. if (!empty($save_uid) && !empty($del_uid) && $del_uid != $save_uid) {
  803. $is_show = true;
  804. }
  805. return $this->successJson('ok', [
  806. 'is_show' => $is_show,
  807. 'change_uid' => $save_uid,
  808. 'uid' => $del_uid,
  809. ]);
  810. }
  811. /**
  812. * 单纯绑定手机号
  813. * @return \Illuminate\Http\JsonResponse
  814. * @throws AppException
  815. */
  816. public function justBindMobile()
  817. {
  818. $mobile = \YunShop::request()->mobile;
  819. $uid = \YunShop::app()->getMemberId();
  820. $type = \YunShop::request()->type;
  821. if (empty($mobile)) {
  822. return $this->errorJson('输入手机号码为空');
  823. }
  824. $member_merge_set = Setting::get('relation_base');
  825. $member_model = MemberModel::getMemberById($uid);
  826. if (!empty($member_model->mobile) && $member_model->mobile == $mobile) {
  827. return $this->successJson('手机号码绑定成功');
  828. }
  829. $yz_member = MemberShopInfo::getMemberShopInfo($uid);
  830. if ($yz_member->is_old) {
  831. throw new AppException('会员数据有冲突,请联系客服');
  832. }
  833. if ($uid > 0) {
  834. $check_code = MemberService::checkCode();
  835. if ($check_code['status'] != 1) {
  836. return $this->errorJson($check_code['json']);
  837. }
  838. //查询绑定手机号会员
  839. $member_info_model = MemberModel::getMemberinfo(\YunShop::app()->uniacid, $mobile);
  840. \Log::debug('------会员设置--保留方式---just_bind---', $member_merge_set);
  841. \Log::debug('----手机号码绑定--提交的手机号码--当前登录会员信息--手机原始会员信息----', [$mobile, $member_model, $member_info_model]);
  842. if ($member_info_model && (($type == 5 && request()->scope) || $type != 5)) {
  843. $merge_choice = $member_merge_set['is_merge_save_level'];
  844. switch ($merge_choice) {
  845. case 1 :
  846. //手机号
  847. $member_model = $this->phoneMemberSave($uid, $member_info_model, $member_model, $mobile);
  848. break;
  849. case 2 :
  850. //公众号
  851. $fans = McMappingFans::getFansById($uid);
  852. if ($fans) {
  853. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  854. } else {
  855. if ($member_info_model->createtime < $member_model->createtime) {
  856. $member_model = $this->phoneMemberSave(
  857. $uid,
  858. $member_info_model,
  859. $member_model,
  860. $mobile
  861. );
  862. } elseif ($member_info_model->createtime > $member_model->createtime) {
  863. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  864. }
  865. }
  866. break;
  867. case 3 :
  868. //小程序
  869. $mini_fans = MemberMiniAppModel::getFansById($uid);
  870. if ($mini_fans) {
  871. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  872. } else {
  873. if ($member_info_model->createtime < $member_model->createtime) {
  874. $member_model = $this->phoneMemberSave(
  875. $uid,
  876. $member_info_model,
  877. $member_model,
  878. $mobile
  879. );
  880. } elseif ($member_info_model->createtime > $member_model->createtime) {
  881. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  882. }
  883. }
  884. break;
  885. case 4 :
  886. //app
  887. $app_fans = MemberWechatModel::getFansById($uid);
  888. if ($app_fans) {
  889. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  890. } else {
  891. if ($member_info_model->createtime < $member_model->createtime) {
  892. $member_model = $this->phoneMemberSave(
  893. $uid,
  894. $member_info_model,
  895. $member_model,
  896. $mobile
  897. );
  898. } elseif ($member_info_model->createtime > $member_model->createtime) {
  899. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  900. }
  901. }
  902. break;
  903. case 5 :
  904. //alipay
  905. $app_fans = MemberAlipay::getFansById($uid);
  906. if ($app_fans) {
  907. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  908. } else {
  909. if ($member_info_model->createtime < $member_model->createtime) {
  910. $member_model = $this->phoneMemberSave(
  911. $uid,
  912. $member_info_model,
  913. $member_model,
  914. $mobile
  915. );
  916. } elseif ($member_info_model->createtime > $member_model->createtime) {
  917. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  918. }
  919. }
  920. break;
  921. default :
  922. //注册时间
  923. if ($member_info_model->createtime < $member_model->createtime) {
  924. $member_model = $this->phoneMemberSave($uid, $member_info_model, $member_model, $mobile);
  925. } elseif ($member_info_model->createtime > $member_model->createtime) {
  926. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  927. }
  928. break;
  929. }
  930. }
  931. if (!$member_model) {
  932. return $this->errorJson('手机号码绑定失败!');
  933. }
  934. $member_model->mobile = $mobile;
  935. $member_shop_info = MemberShopInfo::uniacid()->where('member_id', $member_model->uid)->first();
  936. if (!$member_model) {
  937. return $this->errorJson('手机号码绑定失败!');
  938. }
  939. if ($member_model->save() && $member_shop_info->save()) {
  940. if ($member_model->save() && $member_shop_info->save()) {
  941. if (Cache::has($member_model->uid . '_member_info')) {
  942. Cache::forget($member_model->uid . '_member_info');
  943. }
  944. if (\YunShop::request()->positioning_success == 1) {
  945. if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('set_location'))) {
  946. $class = array_get(
  947. \app\common\modules\shop\ShopConfig::current()->get('set_location'),
  948. 'class'
  949. );
  950. $function = array_get(
  951. \app\common\modules\shop\ShopConfig::current()->get('set_location'),
  952. 'function'
  953. );
  954. $class::$function(
  955. $member_model->uid,
  956. MemberLocation::TYPE_BIND_MOBILE,
  957. \YunShop::request()->register_province,
  958. \YunShop::request()->register_city
  959. );
  960. }
  961. }
  962. }
  963. event(new MemberBindMobile($member_model));
  964. return $this->successJson('手机号码绑定成功');
  965. } else {
  966. return $this->errorJson('手机号码绑定失败');
  967. }
  968. } else {
  969. return $this->errorJson('手机号或密码格式错误');
  970. }
  971. }
  972. /**
  973. * 小程序首次绑定手机
  974. * @return \Illuminate\Http\JsonResponse
  975. * @throws AppException
  976. */
  977. public function miniFirstTimeBindMobile()
  978. {
  979. $mobile = \YunShop::request()->mobile;
  980. $uid = \YunShop::app()->getMemberId();
  981. $type = \YunShop::request()->type;
  982. $is_first_time_bind = (bool)Setting::get('plugin.min_app.is_first_time_bind');
  983. if (!$is_first_time_bind || $type != 2 || $uid == 0 || empty($mobile)) {
  984. return $this->errorJson('不符合自动绑定手机号要求');
  985. }
  986. $member_model = MemberModel::getMemberById($uid);
  987. if (!empty($member_model->mobile) && $member_model->mobile == $mobile) {
  988. return $this->successJson('已绑定手机号');
  989. }
  990. $yz_member = MemberShopInfo::getMemberShopInfo($uid);
  991. if ($yz_member->is_old) {
  992. throw new AppException('会员数据有冲突,请联系客服');
  993. }
  994. $member_model->mobile = $mobile;
  995. if (!$member_model->save()) {
  996. return $this->errorJson('手机号码绑定失败!');
  997. }
  998. event(new MemberBindMobile($member_model));
  999. return $this->successJson('手机号码绑定成功');
  1000. }
  1001. /**
  1002. * 绑定手机号
  1003. * @return \Illuminate\Http\JsonResponse
  1004. * @throws AppException
  1005. */
  1006. public function bindMobile()
  1007. {
  1008. $mobile = \YunShop::request()->mobile;
  1009. $password = \YunShop::request()->password;
  1010. // $confirm_password = \YunShop::request()->password;
  1011. $uid = \YunShop::app()->getMemberId();
  1012. $type = \YunShop::request()->type;
  1013. $scope = \YunShop::request()->scope;
  1014. $close_invitecode = \YunShop::request()->close;
  1015. $customDatas = \YunShop::request()->customDatas;
  1016. $address = \YunShop::request()->address;
  1017. $birthday = \YunShop::request()->birthday;
  1018. $gender = \YunShop::request()->gender;
  1019. $custom_value = \YunShop::request()->custom_value;
  1020. $mini_first_time_bind = \YunShop::request()->mini_first_time_bind;//是否小程序首次绑定
  1021. if ($birthday) {
  1022. $birthday = explode('-', $birthday);
  1023. }
  1024. //新增验证
  1025. // $this->bindMobileVerify(request()->all());
  1026. if (empty($mobile)) {
  1027. return $this->errorJson('输入手机号码为空');
  1028. }
  1029. $this->relation_base_set = Setting::get('relation_base');
  1030. $member_model = MemberModel::getMemberById($uid);
  1031. if (!empty($member_model->mobile) && $member_model->mobile == $mobile) {
  1032. return $this->successJson('手机号码绑定成功');
  1033. }
  1034. $yz_member = MemberShopInfo::getMemberShopInfo($uid);
  1035. if ($yz_member->is_old) {
  1036. throw new AppException('会员数据有冲突,请联系客服');
  1037. }
  1038. if ($uid > 0) {
  1039. $hasCheckCode = 1;//是否进行校验验证码
  1040. //开启小程序首次登录绑定 && 前端传值目前是授权请求绑定
  1041. if ($type == 2 && (bool)Setting::get(
  1042. 'plugin.min_app.is_first_time_bind'
  1043. ) == 1 && $mini_first_time_bind == 1) {
  1044. $hasCheckCode = 0;//不校验
  1045. }
  1046. if ($hasCheckCode) {
  1047. $check_code = MemberService::checkCode();
  1048. if ($check_code['status'] != 1) {
  1049. return $this->errorJson($check_code['json']);
  1050. }
  1051. }
  1052. if (empty($close_invitecode)) {
  1053. $invite_code = MemberService::inviteCode();
  1054. if ($invite_code['status'] != 1) {
  1055. return $this->errorJson($invite_code['json']);
  1056. }
  1057. //邀请码
  1058. $parent_id = \app\common\models\Member::getMemberIdForInviteCode();
  1059. if (!is_null($parent_id)) {
  1060. MemberShopInfo::change_relation($uid, $parent_id);
  1061. //锁定上线时上级没有奖励积分
  1062. if ($parent_id != $yz_member['parent_id']) {
  1063. MemberRelation::rewardPoint($parent_id, $uid);
  1064. }
  1065. //增加邀请码使用记录
  1066. $code_model = new MemberInvitationCodeLog();
  1067. $code_model->uniacid = \YunShop::app()->uniacid;
  1068. $code_model->invitation_code = trim(\YunShop::request()->invite_code);
  1069. $code_model->member_id = $uid; //使用者id
  1070. $code_model->mid = $parent_id; //邀请人id
  1071. $code_model->save();
  1072. }
  1073. }
  1074. $register = Setting::get('shop.register');
  1075. if (\YunShop::request()->pc == 1 || (isset($register['is_password']) && $register['is_password'] == 0)) {
  1076. $password = '';
  1077. } else {
  1078. if ($hasCheckCode) {
  1079. $msg = MemberService::validate($mobile, $password);
  1080. if ($msg['status'] != 1) {
  1081. return $this->errorJson($msg['json']);
  1082. }
  1083. }
  1084. }
  1085. //查询绑定手机号会员
  1086. $member_info_model = MemberModel::getMemberinfo(\YunShop::app()->uniacid, $mobile);
  1087. \Log::debug('------会员设置--保留方式------', $this->relation_base_set);
  1088. \Log::debug(
  1089. '----手机号码绑定-提交的手机号码-当前登录会员信息-手机原始会员信息-type--scope--',
  1090. [$mobile, $member_model, $member_info_model, $type, $scope]
  1091. );
  1092. try {
  1093. if ($member_info_model && (($type == 5 && request()->scope) || $type != 5)) {
  1094. $merge_choice = $this->relation_base_set['is_merge_save_level'];
  1095. switch ($merge_choice) {
  1096. case 1 :
  1097. //手机号
  1098. $member_model = $this->phoneMemberSave($uid, $member_info_model, $member_model, $mobile);
  1099. break;
  1100. case 2 :
  1101. //公众号
  1102. $fans = McMappingFans::getFansById($uid);
  1103. if ($fans) {
  1104. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  1105. } else {
  1106. if ($member_info_model->createtime < $member_model->createtime) {
  1107. $member_model = $this->phoneMemberSave(
  1108. $uid,
  1109. $member_info_model,
  1110. $member_model,
  1111. $mobile
  1112. );
  1113. } elseif ($member_info_model->createtime > $member_model->createtime) {
  1114. $member_model = $this->fansMemberSave(
  1115. $uid,
  1116. $member_info_model,
  1117. $member_model,
  1118. $mobile
  1119. );
  1120. }
  1121. }
  1122. break;
  1123. case 3 :
  1124. //小程序
  1125. $mini_fans = MemberMiniAppModel::getFansById($uid);
  1126. if ($mini_fans) {
  1127. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  1128. } else {
  1129. if ($member_info_model->createtime < $member_model->createtime) {
  1130. $member_model = $this->phoneMemberSave(
  1131. $uid,
  1132. $member_info_model,
  1133. $member_model,
  1134. $mobile
  1135. );
  1136. } elseif ($member_info_model->createtime > $member_model->createtime) {
  1137. $member_model = $this->fansMemberSave(
  1138. $uid,
  1139. $member_info_model,
  1140. $member_model,
  1141. $mobile
  1142. );
  1143. }
  1144. }
  1145. break;
  1146. case 4 :
  1147. //app
  1148. $app_fans = MemberWechatModel::getFansById($uid);
  1149. if ($app_fans) {
  1150. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  1151. } else {
  1152. if ($member_info_model->createtime < $member_model->createtime) {
  1153. $member_model = $this->phoneMemberSave(
  1154. $uid,
  1155. $member_info_model,
  1156. $member_model,
  1157. $mobile
  1158. );
  1159. } elseif ($member_info_model->createtime > $member_model->createtime) {
  1160. $member_model = $this->fansMemberSave(
  1161. $uid,
  1162. $member_info_model,
  1163. $member_model,
  1164. $mobile
  1165. );
  1166. }
  1167. }
  1168. break;
  1169. case 5 :
  1170. //alipay
  1171. $app_fans = MemberAlipay::getFansById($uid);
  1172. if ($app_fans) {
  1173. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  1174. } else {
  1175. if ($member_info_model->createtime < $member_model->createtime) {
  1176. $member_model = $this->phoneMemberSave(
  1177. $uid,
  1178. $member_info_model,
  1179. $member_model,
  1180. $mobile
  1181. );
  1182. } elseif ($member_info_model->createtime > $member_model->createtime) {
  1183. $member_model = $this->fansMemberSave(
  1184. $uid,
  1185. $member_info_model,
  1186. $member_model,
  1187. $mobile
  1188. );
  1189. }
  1190. }
  1191. break;
  1192. default :
  1193. //注册时间
  1194. if ($member_info_model->createtime < $member_model->createtime) {
  1195. $member_model = $this->phoneMemberSave(
  1196. $uid,
  1197. $member_info_model,
  1198. $member_model,
  1199. $mobile
  1200. );
  1201. } elseif ($member_info_model->createtime > $member_model->createtime) {
  1202. $member_model = $this->fansMemberSave($uid, $member_info_model, $member_model, $mobile);
  1203. }
  1204. break;
  1205. }
  1206. }
  1207. } catch (ShopException $exception) {
  1208. return $this->errorJson($exception->getMessage());
  1209. }
  1210. if (!$member_model) {
  1211. return $this->errorJson('手机号码绑定失败!');
  1212. }
  1213. $salt = Str::random(8);
  1214. $member_model->salt = $salt;
  1215. $member_model->mobile = $mobile;
  1216. $member_model->password = md5($password . $salt);
  1217. $member_model->gender = $gender ?: 0;
  1218. if (request()->input('realname')) {
  1219. $member_model->realname = request()->input('realname');
  1220. }
  1221. $member_model->birthyear = $birthday[0] ?: 0;
  1222. $member_model->birthmonth = $birthday[1] ?: 0;
  1223. $member_model->birthday = $birthday[2] ?: 0;
  1224. $member_shop_info = MemberShopInfo::uniacid()->where('member_id', $member_model->uid)->first();
  1225. $customDatas['customDatas'] = $customDatas;
  1226. //自定义表单
  1227. $member_form = (new MemberService())->updateMemberForm($customDatas);
  1228. if (!empty($member_form)) {
  1229. $member_shop_info->member_form = json_encode($member_form);
  1230. }
  1231. if (!$member_model) {
  1232. return $this->errorJson('手机号码绑定失败!');
  1233. }
  1234. //赋值地址
  1235. if (!empty($address)) {
  1236. $member_shop_info->province = $address['province'] ?: '';
  1237. $member_shop_info->city = $address['city'] ?: '';
  1238. $member_shop_info->area = $address['area'] ?: '';
  1239. $member_shop_info->province_name = $address['province_name'] ?: '';
  1240. $member_shop_info->city_name = $address['city_name'] ?: '';
  1241. $member_shop_info->area_name = $address['area_name'] ?: '';
  1242. $member_shop_info->address = $address['address'] ?: '';
  1243. }
  1244. $member_shop_info->custom_value = $custom_value;
  1245. if ($member_model->save() && $member_shop_info->save()) {
  1246. $member_shop_info->custom_value = $custom_value;
  1247. if ($member_model->save() && $member_shop_info->save()) {
  1248. if (Cache::has($member_model->uid . '_member_info')) {
  1249. Cache::forget($member_model->uid . '_member_info');
  1250. }
  1251. if (\YunShop::request()->positioning_success == 1) {
  1252. if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('set_location'))) {
  1253. $class = array_get(
  1254. \app\common\modules\shop\ShopConfig::current()->get('set_location'),
  1255. 'class'
  1256. );
  1257. $function = array_get(
  1258. \app\common\modules\shop\ShopConfig::current()->get('set_location'),
  1259. 'function'
  1260. );
  1261. $class::$function(
  1262. $member_model->uid,
  1263. MemberLocation::TYPE_BIND_MOBILE,
  1264. \YunShop::request()->register_province,
  1265. \YunShop::request()->register_city
  1266. );
  1267. }
  1268. }
  1269. }
  1270. event(new MemberBindMobile($member_model));
  1271. return $this->successJson('手机号码绑定成功');
  1272. } else {
  1273. return $this->errorJson('手机号码绑定失败');
  1274. }
  1275. } else {
  1276. return $this->errorJson('手机号或密码格式错误');
  1277. }
  1278. }
  1279. private function bindMobileVerify($request)
  1280. {
  1281. $formSet = json_decode(Setting::get('shop.form'), true);
  1282. if ($formSet['base']['basic_register']) {
  1283. //基础信息-注册填写
  1284. if ($formSet['base']['name'] && $formSet['base']['name_must'] && !$request['name']) {
  1285. throw new AppException('请填写姓名');
  1286. }
  1287. if ($formSet['base']['sex'] && $formSet['base']['sex_must'] && !$request['sex']) {
  1288. throw new AppException('请填写性别');
  1289. }
  1290. if ($formSet['base']['address'] && $formSet['base']['address_must'] && !$request['address']) {
  1291. throw new AppException('请填写详细地址');
  1292. }
  1293. if ($formSet['base']['birthday'] && $formSet['base']['birthday_must'] && !$request['birthday']) {
  1294. throw new AppException('请填写生日');
  1295. }
  1296. }
  1297. }
  1298. /**
  1299. * 保留手机号会员数据
  1300. * @param $uid 当前登录会员id
  1301. * @param $member_info_model 当前输入手机号会员model
  1302. * @param $member_model 当前登录会员model
  1303. * @param $mobile 当前输入手机号
  1304. * @return bool|mixed
  1305. */
  1306. public function phoneMemberSave($uid, $member_info_model, $member_model, $mobile)
  1307. {
  1308. $hold_uid = $member_info_model['uid'];
  1309. $give_up_uid = $uid;
  1310. $this->validateYunSignData($give_up_uid);
  1311. $this->validateMerge($mobile);
  1312. //保存修改的信息
  1313. $merge_data = [
  1314. 'uniacid' => \YunShop::app()->uniacid,
  1315. 'before_uid' => $give_up_uid,
  1316. 'after_uid' => $hold_uid,
  1317. 'before_mobile' => $member_model->mobile,
  1318. 'after_mobile' => $mobile,
  1319. 'before_point' => $member_model->credit1 ?: 0.00,
  1320. 'after_point' => bcadd($member_info_model->credit1, $member_model->credit1, 2) ?: 0.00,
  1321. 'before_amount' => $member_model->credit2 ?: 0.00,
  1322. 'after_amount' => bcadd($member_info_model->credit2, $member_model->credit2, 2) ?: 0.00,
  1323. 'set_content' => json_encode($this->relation_base_set),
  1324. 'merge_type' => 1,
  1325. ];
  1326. //保存新积分、余额、token
  1327. $member_info_model->nickname = $member_model->nickname;
  1328. $member_info_model->avatar = $member_model->avatar;
  1329. //删除会员
  1330. $yz_member = MemberShopInfo::getMemberShopInfo($give_up_uid);
  1331. $exception = DB::transaction(
  1332. function () use ($give_up_uid, $hold_uid, $member_info_model, $merge_data, $yz_member) {
  1333. \app\backend\modules\member\models\MemberShopInfo::deleteMemberInfo($give_up_uid);
  1334. \app\common\models\Member::where('uid', $give_up_uid)->delete();
  1335. //公众号
  1336. McMappingFans::where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
  1337. //小程序
  1338. MemberMiniAppModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1339. //app
  1340. MemberWechatModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1341. //聚合cps
  1342. if (Schema::hasTable('yz_member_aggregation_app')) {
  1343. DB::table('yz_member_aggregation_app')->where('member_id', $give_up_uid)->update(
  1344. ['member_id' => $hold_uid]
  1345. );
  1346. }
  1347. //企业微信
  1348. if (Schema::hasTable('yz_member_customer')) {
  1349. DB::table('yz_member_customer')->where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
  1350. }
  1351. //支付宝
  1352. \app\common\models\MemberAlipay::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1353. //统一
  1354. MemberUniqueModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1355. //合并处理服务
  1356. (new MemberMergeService($hold_uid, $give_up_uid, $merge_data))->handel();
  1357. $member_info_model->save();
  1358. \app\backend\modules\member\models\MemberShopInfo::where('member_id', $hold_uid)->update([
  1359. 'access_token_1' => $yz_member->access_token_1,
  1360. 'access_expires_in_1' => $yz_member->access_expires_in_1,
  1361. 'refresh_token_1' => $yz_member->refresh_token_1,
  1362. 'refresh_expires_in_1' => $yz_member->refresh_expires_in_1,
  1363. 'access_token_2' => $yz_member->access_token_2,
  1364. 'access_expires_in_2' => $yz_member->access_expires_in_2,
  1365. 'refresh_token_2' => $yz_member->refresh_token_2,
  1366. 'refresh_expires_in_2' => $yz_member->refresh_expires_in_2,
  1367. ]);
  1368. }
  1369. );
  1370. if (!is_null($exception)) {
  1371. return false;
  1372. }
  1373. event(new MergeMemberEvent($hold_uid, $give_up_uid));
  1374. //查出要保留的会员信息
  1375. $member_model = MemberModel::getMemberById($hold_uid);
  1376. Session::set('member_id', $hold_uid);
  1377. return $member_model;
  1378. }
  1379. /**
  1380. * 保留粉丝会员数据
  1381. * @param $uid 当前登录会员id
  1382. * @param $member_info_model 输入手机号会员model
  1383. * @param $member_model 当前登录会员model
  1384. * @param $mobile 当前输入手机号
  1385. * @return bool|mixed
  1386. */
  1387. public function fansMemberSave($uid, $member_info_model, $member_model, $mobile)
  1388. {
  1389. $hold_uid = $uid;
  1390. $give_up_uid = $member_info_model['uid'];
  1391. $this->validateYunSignData($give_up_uid);
  1392. $this->validateMerge($mobile);
  1393. $merge_data = [
  1394. 'uniacid' => \YunShop::app()->uniacid,
  1395. 'before_uid' => $give_up_uid,
  1396. 'after_uid' => $hold_uid,
  1397. 'before_mobile' => $member_info_model->mobile,
  1398. 'after_mobile' => $mobile,
  1399. 'before_point' => $member_info_model->credit1 ?: 0.00,
  1400. 'after_point' => bcadd($member_info_model->credit1, $member_model->credit1, 2) ?: 0.00,
  1401. 'before_amount' => $member_info_model->credit2 ?: 0.00,
  1402. 'after_amount' => bcadd($member_info_model->credit2, $member_model->credit2, 2) ?: 0.00,
  1403. 'set_content' => json_encode($this->relation_base_set),
  1404. 'merge_type' => 1,
  1405. ];
  1406. //删除会员
  1407. $exception = DB::transaction(function () use ($give_up_uid, $hold_uid, $member_model, $merge_data) {
  1408. \app\backend\modules\member\models\MemberShopInfo::deleteMemberInfo($give_up_uid);
  1409. \app\common\models\Member::where('uid', $give_up_uid)->delete();
  1410. //公众号
  1411. McMappingFans::where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
  1412. //小程序
  1413. MemberMiniAppModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1414. //app
  1415. MemberWechatModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1416. //聚合cps
  1417. if (Schema::hasTable('yz_member_aggregation_app')) {
  1418. DB::table('yz_member_aggregation_app')->where('member_id', $give_up_uid)->update(
  1419. ['member_id' => $hold_uid]
  1420. );
  1421. }
  1422. //企业微信
  1423. if (Schema::hasTable('yz_member_customer')) {
  1424. DB::table('yz_member_customer')->where('uid', $give_up_uid)->update(['uid' => $hold_uid]);
  1425. }
  1426. //支付宝
  1427. \app\common\models\MemberAlipay::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1428. //统一
  1429. MemberUniqueModel::where('member_id', $give_up_uid)->update(['member_id' => $hold_uid]);
  1430. //合并处理服务
  1431. (new MemberMergeService($hold_uid, $give_up_uid, $merge_data))->handel();
  1432. $member_model->save();
  1433. });
  1434. if (!is_null($exception)) {
  1435. return false;
  1436. }
  1437. event(new MergeMemberEvent($hold_uid, $give_up_uid));
  1438. //查出要保留的会员信息
  1439. $member_model = MemberModel::getMemberById($hold_uid);
  1440. Session::set('member_id', $hold_uid);
  1441. return $member_model;
  1442. }
  1443. private function validateMerge($mobile)
  1444. {
  1445. $type = request()->type;
  1446. $member_info = MemberModel::getId(\YunShop::app()->uniacid, $mobile);
  1447. $unique_info = MemberUniqueModel::getUnionidInfoByMemberId(
  1448. \YunShop::app()->uniacid,
  1449. $member_info['uid']
  1450. )->first();
  1451. $fans_info = McMappingFans::getFansById($member_info['uid']);
  1452. $mini_info = MemberMiniAppModel::getFansById($member_info['uid']);
  1453. $wechat_info = MemberWechatModel::getFansById($member_info['uid']);
  1454. $ali_info = MemberAlipay::getFansById($member_info['uid']);
  1455. if ($type != 8 && ($unique_info || $fans_info || $mini_info || $wechat_info)) {
  1456. throw new ShopException('该手机号已被绑定,不能重复绑定');
  1457. }
  1458. if ($type == 8 && $ali_info) {
  1459. throw new ShopException('该手机号已被绑定,不能重复绑定');
  1460. }
  1461. if ($type == 5 && !request()->scope && $member_info) { //request()->scope tjpcps
  1462. throw new ShopException('该手机号已被绑定,不能重复绑定');
  1463. }
  1464. }
  1465. /**
  1466. * 验证是否有芸签数据(有则不能合并)
  1467. * @param $give_up_uid 放弃的会员id
  1468. * @return bool true 有 false 无
  1469. */
  1470. private function validateYunSignData($give_up_uid)
  1471. {
  1472. if (app('plugins')->isEnabled('yun-sign')) {
  1473. $person = PersonAccount::uniacid()->where(['uid' => $give_up_uid, 'status' => 1])->first();
  1474. if ($person) {
  1475. throw new ShopException('合并会员有个人认证数据,不能合并');
  1476. }
  1477. $contract_num = ContractNum::uniacid()->where('uid', $give_up_uid)->where('rest_num', '>', 0)->first();
  1478. if ($contract_num) {
  1479. throw new ShopException('合并会员有合同数量,不能合并');
  1480. }
  1481. $not_sign_contract = Contract::uniacid()->where('status', '<', 2)->whereHas(
  1482. 'hasManyRole',
  1483. function ($q) use ($give_up_uid) {
  1484. $q->where(['uid' => $give_up_uid, 'status' => 0]);
  1485. }
  1486. )->first();
  1487. if ($not_sign_contract) {
  1488. throw new ShopException('合并会员有未签署合同,不能合并');
  1489. }
  1490. }
  1491. if (app('plugins')->isEnabled('shop-esign')) {
  1492. $shop_person = \Yunshop\ShopEsign\common\models\PersonAccount::uniacid()->where(
  1493. ['uid' => $give_up_uid, 'status' => 1]
  1494. )->first();
  1495. if ($shop_person) {
  1496. throw new ShopException('合并会员有商城电子合同个人认证数据,不能合并');
  1497. }
  1498. $shop_not_sign_contract = \Yunshop\ShopEsign\common\models\Contract::uniacid()->where(
  1499. 'uid',
  1500. $give_up_uid
  1501. )->where('status', '<', 2)->first();
  1502. if ($shop_not_sign_contract) {
  1503. throw new ShopException('合并会员有商城电子合同未签署合同,不能合并');
  1504. }
  1505. }
  1506. return false;
  1507. }
  1508. //会员信息同步
  1509. public function synchro($new_member, $old_member)
  1510. {
  1511. $member_merge_set = Setting::get('relation_base');
  1512. $type = \YunShop::request()->type;
  1513. \Log::debug('会员同步type:' . $type);
  1514. $type = empty($type) ? Client::getType() : $type;
  1515. $className = SynchronousUserInfo::create($type);
  1516. if ($className) {
  1517. if (empty($member_merge_set['is_merge_save_level']) || $member_merge_set['is_merge_save_level'] === 1) {
  1518. return $className->updateMember($old_member, $new_member);
  1519. } else {
  1520. return $className->updateMemberOther($old_member, $new_member);
  1521. }
  1522. } else {
  1523. return false;
  1524. }
  1525. }
  1526. /**
  1527. * 绑定提现手机号
  1528. *
  1529. */
  1530. public function bindWithdrawMobile()
  1531. {
  1532. $mobile = \YunShop::request()->mobile;
  1533. $member_model = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
  1534. if (\YunShop::app()->getMemberId() && \YunShop::app()->getMemberId() > 0) {
  1535. $check_code = MemberService::checkCode();
  1536. if ($check_code['status'] != 1) {
  1537. return $this->errorJson($check_code['json']);
  1538. }
  1539. $salt = Str::random(8);
  1540. $member_model->withdraw_mobile = $mobile;
  1541. if ($member_model->save()) {
  1542. return $this->successJson('手机号码绑定成功');
  1543. } else {
  1544. return $this->errorJson('手机号码绑定失败');
  1545. }
  1546. } else {
  1547. return $this->errorJson('手机号或密码格式错误');
  1548. }
  1549. }
  1550. /**
  1551. * @name 微信JSSDKConfig
  1552. * @param int $goods_id
  1553. *
  1554. * @return \Illuminate\Http\JsonResponse
  1555. * @author
  1556. *
  1557. */
  1558. public function wxJsSdkConfig()
  1559. {
  1560. $member = \Setting::get('shop.member');
  1561. $info = [];
  1562. $config = [];
  1563. if (!(isset($member['wechat_login_mode']) && 1 == $member['wechat_login_mode'])) {
  1564. $url = \YunShop::request()->url ?: '';
  1565. $account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
  1566. $app = EasyWeChat::officialAccount([
  1567. 'app_id' => $account->key,
  1568. 'secret' => $account->secret
  1569. ]);
  1570. $js = $app->jssdk;
  1571. $js->setUrl($url);
  1572. $config = $js->buildConfig(array(
  1573. 'onMenuShareTimeline',
  1574. 'onMenuShareAppMessage',
  1575. 'showOptionMenu',
  1576. 'scanQRCode',
  1577. 'updateAppMessageShareData',
  1578. 'updateTimelineShareData',
  1579. 'startRecord',
  1580. 'stopRecord',
  1581. 'playVoice',
  1582. 'pauseVoice',
  1583. 'stopVoice',
  1584. 'uploadVoice',
  1585. 'downloadVoice',
  1586. 'hideMenuItems',
  1587. 'chooseImage',
  1588. 'getLocalImgData',
  1589. 'translateVoice',
  1590. 'agentConfig'
  1591. ));
  1592. $config = json_decode($config, 1);
  1593. }
  1594. if (\YunShop::app()->getMemberId()) {
  1595. // $info = Member::getUserInfos(\YunShop::app()->getMemberId())->first();
  1596. $info = Member::select('uid', 'uniacid', 'mobile', 'nickname', 'avatar')->where(
  1597. 'uid',
  1598. \YunShop::app()->getMemberId()
  1599. )->first();
  1600. if (!empty($info)) {
  1601. $info = $info->toArray();
  1602. }
  1603. }
  1604. $share = \Setting::get('shop.share');
  1605. if ($share) {
  1606. if ($share['icon']) {
  1607. $share['icon'] = replace_yunshop(yz_tomedia($share['icon']));
  1608. }
  1609. $share = [
  1610. 'title' => $share['title'] ?: '',
  1611. 'icon' => $share['icon'] ?: '',
  1612. 'desc' => $share['desc'] ?: '',
  1613. 'url' => $share['url'] ?: ''
  1614. ];
  1615. }
  1616. $shop = \Setting::get('shop');
  1617. $shop['icon'] = replace_yunshop(yz_tomedia($shop['logo']));
  1618. $shop['share']['icon'] = yz_tomedia($shop['share']['icon']);
  1619. //精简数据 优化
  1620. foreach ($shop as $k => $v) {
  1621. if (!in_array($k, ['shop', 'share', 'icon'])) {
  1622. unset($shop[$k]);
  1623. } elseif ($k == 'shop') {
  1624. $shop[$k] = [
  1625. "name" => $v['name'] ?: '',
  1626. "logo" => $v['logo'] ?: '',
  1627. "logo_url" => $v['logo_url'] ?: '',
  1628. "copyright" => $v['copyright'] ?: '',
  1629. "cservice" => $v['cservice'] ?: '',
  1630. ];
  1631. }
  1632. }
  1633. if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('customer_service'))) {
  1634. $class = array_get(\app\common\modules\shop\ShopConfig::current()->get('customer_service'), 'class');
  1635. $function = array_get(\app\common\modules\shop\ShopConfig::current()->get('customer_service'), 'function');
  1636. $ret = $class::$function(request()->goods_id, request()->type);
  1637. if ($ret) {
  1638. if (is_array($ret)) {
  1639. foreach ($ret as $rk => $rv) {
  1640. $shop[$rk] = $rv;
  1641. }
  1642. } else {
  1643. $shop['cservice'] = $ret;
  1644. }
  1645. }
  1646. }
  1647. if (is_null($share) && is_null($shop)) {
  1648. $share = [
  1649. 'title' => '商家分享',
  1650. 'icon' => '#',
  1651. 'desc' => '商家分享'
  1652. ];
  1653. }
  1654. if (app('plugins')->isEnabled('designer')) {
  1655. $index = (new RecordsController())->shareIndex();
  1656. foreach ($index['data'] as $value) {
  1657. foreach ($value['page_type_cast'] as $item) {
  1658. if ($item == 1) {
  1659. $designer = json_decode(htmlspecialchars_decode($value['page_info']))[0]->params;
  1660. if (!empty($designer->title) || !empty($designer->img) || !empty($designer->desc)) {
  1661. $share['title'] = $designer->title;
  1662. $share['icon'] = $designer->img;
  1663. $share['desc'] = $designer->desc;
  1664. }
  1665. break;
  1666. }
  1667. }
  1668. }
  1669. }
  1670. $data = [
  1671. 'config' => $config,
  1672. 'info' => $info, //商城设置
  1673. 'shop' => $shop,
  1674. 'share' => $share, //分享设置
  1675. ];
  1676. return $this->successJson('', $data);
  1677. }
  1678. public function designer(Request $request, $integrated = null, $pageID = '')
  1679. {
  1680. $TemId = $pageID ?: \Yunshop::request()->id;
  1681. if ($TemId) {
  1682. $designerModel = Designer::getDesignerByPageID($TemId);
  1683. if ($designerModel) {
  1684. // $designerSet = json_decode(htmlspecialchars_decode($designerModel->page_info));
  1685. // foreach ($designerSet->toArray as &$set){
  1686. // if (isset($set['temp']) && $set['temp'] == 'topbar'){
  1687. // if (!empty($set['params']['title'])){
  1688. // $shop = Setting::get('shop.shop');
  1689. // $set['params']['title'] = $shop['name'];
  1690. // $set['params']['img'] = $shop['logo'];
  1691. // }
  1692. // }
  1693. // }
  1694. $designerSet = json_decode(htmlspecialchars_decode($designerModel->page_info));
  1695. if ($designerSet[0]->temp == 'topbar') {
  1696. $share = Setting::get('shop.share');
  1697. $designer['title'] = $designerSet[0]->params->title ?: $share['title'];
  1698. $designer['img'] = $designerSet[0]->params->img ?: $share['icon'];
  1699. $designer['desc'] = $designerSet[0]->params->desc ?: $share['desc'];
  1700. }
  1701. if (is_null($integrated)) {
  1702. return $this->successJson('获取数据成功!', $designer);
  1703. } else {
  1704. return show_json(1, $designer);
  1705. }
  1706. }
  1707. }
  1708. if (is_null($integrated)) {
  1709. return $this->successJson('参数有误!', []);
  1710. } else {
  1711. return show_json(1, '');
  1712. }
  1713. }
  1714. /**
  1715. * 申请协议
  1716. *
  1717. * @return \Illuminate\Http\JsonResponse
  1718. */
  1719. public function applyProtocol()
  1720. {
  1721. $protocol = Setting::get('apply_protocol');
  1722. if ($protocol) {
  1723. return $this->successJson('获取数据成功!', $protocol);
  1724. }
  1725. return $this->successJson('未检测到数据!', []);
  1726. }
  1727. /**
  1728. * 推广基本设置
  1729. *
  1730. * @return \Illuminate\Http\JsonResponse
  1731. */
  1732. public function AgentBase()
  1733. {
  1734. $info = \Setting::get('relation_base');
  1735. if ($info) {
  1736. return $this->successJson('', [
  1737. 'banner' => replace_yunshop(yz_tomedia($info['banner']))
  1738. ]);
  1739. }
  1740. return $this->errorJson('暂无数据', []);
  1741. }
  1742. public function guideFollow(Request $request, $integrated = null)
  1743. {
  1744. $member_id = \YunShop::app()->getMemberId();
  1745. if (empty($member_id)) {
  1746. if (is_null($integrated)) {
  1747. return $this->errorJson('用户未登录', []);
  1748. } else {
  1749. return show_json(0, '用户未登录');
  1750. }
  1751. }
  1752. if ($request->type == 1) {
  1753. $set = \Setting::get('shop.share');
  1754. $fans_model = McMappingFans::getFansById($member_id);
  1755. $mid = \app\common\models\Member::getMid();
  1756. if ($set['follow'] == 1 && $fans_model->follow === 0) {
  1757. if ($mid != null && $mid != 'undefined' && $mid > 0) {
  1758. $member_model = Member::getMemberById($mid);
  1759. $logo = $member_model->avatar;
  1760. $text = $member_model->nickname;
  1761. } else {
  1762. $setting = Setting::get('shop');
  1763. $account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
  1764. $logo = replace_yunshop(yz_tomedia($setting['shop']['logo']));
  1765. $text = $account->name;
  1766. }
  1767. if (is_null($integrated)) {
  1768. return $this->successJson('', [
  1769. 'logo' => $logo,
  1770. 'text' => $text,
  1771. 'url' => $set['follow_url'],
  1772. 'follow_img' => replace_yunshop(yz_tomedia($set['follow_img'])),
  1773. 'type' => isset($set['type']) ? $set['type'] : 1,
  1774. ]);
  1775. } else {
  1776. return show_json(1, [
  1777. 'logo' => $logo,
  1778. 'text' => $text,
  1779. 'url' => $set['follow_url'],
  1780. 'follow_img' => replace_yunshop(yz_tomedia($set['follow_img'])),
  1781. 'type' => isset($set['type']) ? $set['type'] : 1, //优化加上链接,图片(0是图片)
  1782. ]);
  1783. }
  1784. }
  1785. }
  1786. if (is_null($integrated)) {
  1787. return $this->errorJson('暂无数据', []);
  1788. } else {
  1789. return show_json(0, '暂无数据');
  1790. }
  1791. }
  1792. //会员广告(涉及小程序第一次登陆)
  1793. public function getAdvertisement(Request $request, $integrated = null)
  1794. {
  1795. $advertisement_data = \Setting::get('designer.first-screen');
  1796. $type = $request ? $request->type : \YunShop::request()->type;
  1797. //empty( Cookie::get('memberlogin_status')) && 去除登录缓存验证,前度做处理
  1798. if (($advertisement_data['switch'] || $advertisement_data['Midswitch']) &&
  1799. ($advertisement_data['rule'] == 0 || $advertisement_data['Midrule'] == 0) &&
  1800. $type != 2) {
  1801. if ($advertisement_data['type'] == 0) {
  1802. unset($advertisement_data['link'], $advertisement_data['prolink']);
  1803. }
  1804. setcookie('memberlogin_status', '1');
  1805. if (is_null($integrated)) {
  1806. return $this->successJson('', [
  1807. 'advertisement' => $advertisement_data,
  1808. ]);
  1809. } else {
  1810. return show_json(1, [
  1811. 'advertisement' => $advertisement_data,
  1812. ]);
  1813. }
  1814. }
  1815. if (($advertisement_data['switch'] || $advertisement_data['Midswitch']) && $type == 2) {
  1816. if (!$this->firstLogin()) {
  1817. if (is_null($integrated)) {
  1818. return $this->errorJson('暂无信息');
  1819. } else {
  1820. return show_json(1, '暂无信息');
  1821. }
  1822. }
  1823. //if ($advertisement_data['type'] == 1) {
  1824. //unset($advertisement_data['time']);
  1825. if ($advertisement_data['rule'] == 1) {
  1826. unset($advertisement_data['link']);
  1827. }
  1828. //}
  1829. if (is_null($integrated)) {
  1830. return $this->successJson('ok', [
  1831. 'advertisement' => $advertisement_data,
  1832. ]);
  1833. } else {
  1834. return show_json(1, [
  1835. 'advertisement' => $advertisement_data,
  1836. ]);
  1837. }
  1838. }
  1839. if (is_null($integrated)) {
  1840. return $this->errorJson('暂无信息');
  1841. } else {
  1842. return show_json(1, '暂无信息');
  1843. }
  1844. }
  1845. //
  1846. /**
  1847. * 小程序第一次登录
  1848. * @param $name 避免有插件或其他类型获取加多一个类型
  1849. */
  1850. private function firstLogin($name = '')
  1851. {
  1852. //0点时间戳
  1853. $start = strtotime(date("Y-m-d"), time());
  1854. $end = $start + 60 * 60 * 24;
  1855. $member_id = \YunShop::app()->getMemberId();
  1856. $member_first_login = Cache::get($member_id . 'first_login' . $name);
  1857. if ($member_first_login) {
  1858. $data = explode('#', $member_first_login);
  1859. $datatime = $data[1];
  1860. }
  1861. if (!$member_first_login || $datatime >= $end || $datatime < $start) {
  1862. //小程序今天第一次登录
  1863. Cache::put($member_id . 'first_login' . $name, $member_id . '#' . time(), 1440);
  1864. return true;
  1865. }
  1866. return false;
  1867. }
  1868. /**
  1869. * 装修2.0 小程序是否首次登录
  1870. */
  1871. public function getFirstLogin($name = '')
  1872. {
  1873. $member_id = \YunShop::app()->getMemberId();
  1874. $type = $request ? $request->type : \YunShop::request()->type;
  1875. if ($member_id && $type == 2) {
  1876. return $this->firstLogin($name);
  1877. }
  1878. return false;
  1879. }
  1880. public function memberInfo()
  1881. {
  1882. $member_id = request()->input('uid');
  1883. if (empty($member_id)) {
  1884. return $this->errorJson('会员不存在');
  1885. }
  1886. $member_info = MemberModel::select(['nickname', 'avatar', 'realname'])->uniacid()->where(
  1887. 'uid',
  1888. $member_id
  1889. )->first();
  1890. if (empty($member_info)) {
  1891. return $this->errorJson('会员不存在');
  1892. }
  1893. return $this->successJson('', $member_info);
  1894. }
  1895. public function forget()
  1896. {
  1897. Session::clear('member_id');
  1898. redirect(Url::absoluteApp('home'))->send();
  1899. }
  1900. public function memberFromHXQModule()
  1901. {
  1902. $uniacid = \YunShop::app()->uniacid;
  1903. $member_id = \YunShop::request()->uid;
  1904. if (!empty($member_id)) {
  1905. $member_shop_info_model = MemberShopInfo::getMemberShopInfo($member_id);
  1906. if (is_null($member_shop_info_model)) {
  1907. (new MemberService)->addSubMemberInfo($uniacid, (int)$member_id);
  1908. }
  1909. $mid = \YunShop::request()->mid ?: 0;
  1910. Member::createRealtion($member_id, $mid);
  1911. \Log::debug('------HXQModule---------' . $member_id);
  1912. \Log::debug('------HXQModule---------' . $mid);
  1913. return $this->successJson('ok');
  1914. }
  1915. return $this->errorJson('uid为空');
  1916. }
  1917. /**
  1918. * 同步模块支付宝用户
  1919. * @return string
  1920. */
  1921. public function dsAlipayUserModule()
  1922. {
  1923. $uniacid = \YunShop::app()->uniacid;
  1924. $member_id = \YunShop::request()->uid;
  1925. $userInfo = \YunShop::request()->user_info;
  1926. if (!is_array($userInfo)) {
  1927. $userInfo = json_decode($userInfo, true);
  1928. }
  1929. if (!empty($member_id)) {
  1930. if (app('plugins')->isEnabled('alipay-onekey-login') && $userInfo) {
  1931. $bool = MemberAlipay::insertData($userInfo, ['member_id' => $member_id, 'uniacid' => $uniacid]);
  1932. if (!$bool) {
  1933. return json_encode(['status' => 0, 'result' => '支付宝用户信息保存失败']);
  1934. }
  1935. } else {
  1936. return json_encode(['status' => 0, 'result' => '未开启插件或未接受到支付宝用户信息']);
  1937. }
  1938. $member_shop_info_model = MemberShopInfo::getMemberShopInfo($member_id);
  1939. if (is_null($member_shop_info_model)) {
  1940. (new MemberService)->addSubMemberInfo($uniacid, (int)$member_id);
  1941. }
  1942. $mid = \YunShop::request()->mid ?: 0;
  1943. Member::createRealtion($member_id, $mid);
  1944. \Log::debug('------HXQModule---------' . $member_id);
  1945. \Log::debug('------HXQModule---------' . $mid);
  1946. return json_encode(['status' => 1, 'result' => 'ok']);
  1947. }
  1948. return json_encode(['status' => 0, 'result' => 'uid为空']);
  1949. }
  1950. public function getCustomField(Request $request, $integrated = null)
  1951. {
  1952. // member.member.get-custom-field
  1953. $member = Setting::get('shop.member');
  1954. $data = [
  1955. 'is_custom' => $member['is_custom'],
  1956. 'custom_title' => $member['custom_title'],
  1957. 'is_validity' => $member['level_type'] == 2 ? true : false,
  1958. 'term' => $member['term'] ? $member['term'] : 0,
  1959. ];
  1960. if (is_null($integrated)) {
  1961. return $this->successJson('获取自定义字段成功!', $data);
  1962. } else {
  1963. return show_json(1, $data);
  1964. }
  1965. }
  1966. public function saveCustomField()
  1967. {
  1968. // member.member.sava-custom-field
  1969. $member_id = \YunShop::app()->getMemberId();
  1970. $custom_value = \YunShop::request()->get('custom_value');
  1971. $data = [
  1972. 'custom_value' => $custom_value,
  1973. ];
  1974. $request = MemberShopInfo::where('member_id', $member_id)->update($data);
  1975. if ($request) {
  1976. return $this->successJson('保存成功!', []);
  1977. }
  1978. return $this->successJson('保存失败!', []);
  1979. }
  1980. public function withdrawByMobile()
  1981. {
  1982. $trade = \Setting::get('shop.trade');
  1983. if ($trade['is_bind'] && \YunShop::app()->getMemberId() && \YunShop::app()->getMemberId() > 0) {
  1984. $member_model = MemberShopInfo::getMemberShopInfo(\YunShop::app()->getMemberId());
  1985. if ($member_model && $member_model->withdraw_mobile) {
  1986. $is_bind_mobile = 0;
  1987. } else {
  1988. $is_bind_mobile = 1;
  1989. }
  1990. } else {
  1991. $is_bind_mobile = 0;
  1992. }
  1993. return $this->successJson('', ['is_bind_mobile' => $is_bind_mobile]);
  1994. }
  1995. /**
  1996. * 修复关系链
  1997. *
  1998. * 历史遗留问题
  1999. */
  2000. public function fixRelation()
  2001. {
  2002. set_time_limit(0);
  2003. //获取修改数据
  2004. $members = MemberShopInfo::uniacid()
  2005. ->where('parent_id', '!=', 0)
  2006. ->where('is_agent', 1)
  2007. ->where('status', 2)
  2008. ->where('relation', '')
  2009. ->orWhereNull('relation')
  2010. ->orWhere('relation', '0,')
  2011. ->whereNull('deleted_at')
  2012. ->get();
  2013. if (!$members->isEmpty()) {
  2014. foreach ($members as $member) {
  2015. //yz_members
  2016. if ($member->is_agent == 1 && $member->status == 2) {
  2017. Member::setMemberRelation($member->member_id, $member->parent_id);
  2018. }
  2019. }
  2020. }
  2021. echo 'yz_member修复完毕<BR>';
  2022. //yz_agents
  2023. //获取修改数据
  2024. $agents = Agents::uniacid()
  2025. ->where('parent_id', '!=', 0)
  2026. ->whereNull('deleted_at')
  2027. ->where('parent', '')
  2028. ->orWhereNull('parent')
  2029. ->orWhere('parent', '0,')
  2030. ->get();
  2031. foreach ($agents as $agent) {
  2032. $rows = DB::table('yz_member')
  2033. ->select()
  2034. ->where('uniacid', $agent->uniacid)
  2035. ->where('member_id', $agent->member_id)
  2036. ->where('parent_id', $agent->parent_id)
  2037. ->where('is_agent', 1)
  2038. ->where('status', 2)
  2039. ->whereNull('deleted_at')
  2040. ->first();
  2041. if (!empty($rows)) {
  2042. $agent->parent = $rows['relation'];
  2043. $agent->save();
  2044. }
  2045. }
  2046. echo 'yz_agents修复完毕';
  2047. }
  2048. public function memberRelationFilter()
  2049. {
  2050. $data = MemberModel::filterMemberRoleAndLevel();
  2051. return $this->successJson('', $data);
  2052. }
  2053. public function isOpenRelation(Request $request, $integrated = null)
  2054. {
  2055. //是否显示我的推广 和 withdraw_status是否显示提现
  2056. $switch = PortType::popularizeShow(\YunShop::request()->type);
  2057. $data = [
  2058. 'switch' => $switch
  2059. ];
  2060. if (is_null($integrated)) {
  2061. return $this->successJson('', $data);
  2062. } else {
  2063. return show_json(1, $data);
  2064. }
  2065. }
  2066. public function anotherShare()
  2067. {
  2068. $order_ids = \YunShop::request()->order_ids;
  2069. $mid = \YunShop::app()->getMemberId();
  2070. if (empty($order_ids)) {
  2071. return $this->errorJson('参数错误', '');
  2072. }
  2073. if (empty($mid)) {
  2074. return $this->errorJson('用户未登陆', '');
  2075. }
  2076. $title = Setting::get('shop.pay.another_share_title');
  2077. $another_share_type = Setting::get('shop.pay.another_share_type') == 2 ? 2 : 1;
  2078. $url = yzAppFullUrl(
  2079. '/member/payanotherdetail',
  2080. ['pid' => $mid, 'order_ids' => $order_ids, 'share_type' => $another_share_type]
  2081. );
  2082. $order_goods = Order::find($order_ids)->hasManyOrderGoods;
  2083. if (is_null($order_goods)) {
  2084. return $this->errorJson('订单商品不存在', '');
  2085. }
  2086. if (empty($title)) {
  2087. $title = '土豪大大,跪求代付';
  2088. }
  2089. if (request()->type == 2) {
  2090. $file_name = 'another_oid_' . $order_ids . '_mid_' . $mid;
  2091. $page = 'packageD/buy/payanotherDetail/payanotherDetail';//todo 需要更换
  2092. $scene = 'id=' . $order_ids . ',p=' . $mid . ',t=' . $another_share_type;
  2093. $dir = 'storage/app/public/mini-qr/another-pay/' . \YunShop::app()->uniacid; //商城根目录下
  2094. try {
  2095. $mini_code_helper = new MiniCodeHelper($dir, $file_name, $page, $scene, 300);
  2096. $code_url = $mini_code_helper->url();
  2097. } catch (ShopException $exception) {
  2098. $code_url = '';
  2099. }
  2100. } else {
  2101. $h5_code = new \app\common\helpers\QrCodeHelper($url, 'app/public/qr/another-pay');
  2102. $code_url = $h5_code->url();
  2103. }
  2104. $data = [
  2105. 'title' => $title,
  2106. 'url' => $url,
  2107. 'code_url' => $code_url,
  2108. 'content' => $order_goods[0]->title,
  2109. 'img' => replace_yunshop(yz_tomedia($order_goods[0]->thumb))
  2110. ];
  2111. return $this->successJson('', $data);
  2112. }
  2113. public function getEnablePlugins(Request $request, $integrated = null)
  2114. {
  2115. $memberId = \YunShop::app()->getMemberId();
  2116. $arr = (new MemberCenterService())->getMemberData($memberId);//获取会员中心页面各入口
  2117. if (is_null($integrated)) {
  2118. return $this->successJson('ok', $arr);
  2119. } else {
  2120. return show_json(1, $arr);
  2121. }
  2122. }
  2123. public function isOpenHuanxun()
  2124. {
  2125. $huanxun = \Setting::get('plugin.huanxun_set');
  2126. if (app('plugins')->isEnabled('huanxun')) {
  2127. if ($huanxun['withdrawals_switch']) {
  2128. return $this->successJson('', $huanxun['withdrawals_switch']);
  2129. }
  2130. }
  2131. return $this->errorJson('', 0);
  2132. }
  2133. /**
  2134. * 推广申请页面数据
  2135. */
  2136. public function shareinfo()
  2137. {
  2138. $data = MemberRelation::uniacid()->where(['status' => 1])->get();
  2139. $become_term = unserialize($data[0]['become_term']);
  2140. $goodsid = explode(',', $data[0]['become_goods_id']);
  2141. foreach ($goodsid as $key => $val) {
  2142. $online_good = Goods::where('status', 1)
  2143. ->select('id', 'title', 'thumb', 'price', 'market_price')
  2144. ->find($val);
  2145. if ($online_good) {
  2146. $online_good['thumb'] = replace_yunshop(yz_tomedia($online_good['thumb']));
  2147. $online_goods[] = $online_good;
  2148. $online_goods_keys[] = $online_good->id;
  2149. }
  2150. }
  2151. unset($online_good);
  2152. $goodskeys = range(0, count($online_goods_keys) - 1);
  2153. $data[0]['become_goods'] = array_combine($goodskeys, $online_goods);
  2154. $termskeys = range(0, count($become_term) - 1);
  2155. $become_term = array_combine($termskeys, $become_term);
  2156. $member_uid = \YunShop::app()->getMemberId();
  2157. $status = $data[0]['become_order'] == 1 ? 3 : 1;
  2158. $terminfo = [];
  2159. foreach ($become_term as $v) {
  2160. if ($v == 2) {
  2161. $terminfo['become_ordercount'] = $data[0]['become_ordercount'];
  2162. }
  2163. if ($v == 3) {
  2164. $terminfo['become_moneycount'] = $data[0]['become_moneycount'];
  2165. }
  2166. if ($v == 4) {
  2167. $terminfo['goodsinfo'] = $data[0]['become_goods'];
  2168. }
  2169. if ($v == 5) {
  2170. $terminfo['become_selfmoney'] = $data[0]['become_selfmoney'];
  2171. }
  2172. }
  2173. $data[0]['become_term'] = $terminfo;
  2174. if ($data[0]['become'] == 2) {
  2175. //或
  2176. $data[0]['tip'] = '满足以下任意条件都可以成为推广员';
  2177. } elseif ($data[0]['become'] == 3) {
  2178. //与
  2179. $data[0]['tip'] = '满足以下所有条件才可以成为推广员';
  2180. }
  2181. $data[0]['getCostTotalNum'] = Order::where('status', '>=', $status)->where('uid', $member_uid)->count('id');
  2182. $data[0]['getCostTotalPrice'] = Order::where('status', '>=', $status)->where('uid', $member_uid)->sum('price');
  2183. if (app('plugins')->isEnabled('sales-commission')) {
  2184. $data[0]['getSelfMoney'] = \Yunshop\SalesCommission\models\SalesCommission::sumDividendAmountByUid(
  2185. $member_uid
  2186. );
  2187. } else {
  2188. $data[0]['getSelfMoney'] = 0;
  2189. if (in_array(5, $become_term)) {
  2190. foreach ($become_term as $k => $v) {
  2191. if ($v == 5) {
  2192. unset($become_term[$k]);
  2193. }
  2194. }
  2195. $become_term = array_values($become_term);
  2196. }
  2197. }
  2198. $data[0]['become_term_id'] = $become_term;
  2199. $account = AccountWechats::getAccountByUniacid(\YunShop::app()->uniacid);
  2200. $mid = \app\common\models\Member::getMid();
  2201. $m_member = MemberShopInfo::where('member_id', \YunShop::app()->getMemberId())->first();
  2202. if ($m_member->parent_id != $mid && $m_member->parent_id != 0) {
  2203. $mid = $m_member->parent_id ?: 0;
  2204. }
  2205. $parent_name = '';
  2206. if (empty($mid)) {
  2207. $parent_name = '总店';
  2208. } else {
  2209. $parent_model = MemberModel::getMemberById($mid);
  2210. if (!empty($parent_model)) {
  2211. $parent_member = $parent_model->toArray();
  2212. $status = '';
  2213. if ($parent_model['inviter']) {
  2214. $status = '(暂定)';
  2215. }
  2216. $parent_name = $parent_member['realname'] ?: $status . $parent_member['nickname'];
  2217. }
  2218. }
  2219. if (!empty($member_model = MemberModel::getMemberById(\YunShop::app()->getMemberId()))) {
  2220. $member = $member_model->toArray();
  2221. }
  2222. $member_info = SubMemberModel::getMemberShopInfo(\YunShop::app()->getMemberId());
  2223. $data[0]['base_info'] = [
  2224. 'shop_name' => $account['name'],
  2225. 'parent_name' => $parent_name,
  2226. 'realname' => $member['realname'],
  2227. 'mobile' => $member['mobile'],
  2228. 'status' => $member_info->status
  2229. ];
  2230. return $this->successJson('ok', $data[0]);
  2231. }
  2232. /**
  2233. * 邀请页面验证
  2234. */
  2235. public function memberInviteValidate()
  2236. {
  2237. $invite_code = request()->invite_code;
  2238. $parent = (new MemberShopInfo())->getInviteCodeMember($invite_code);
  2239. if ($parent) {
  2240. \Log::info('更新上级------' . \YunShop::app()->getMemberId());
  2241. MemberShopInfo::change_relation(\YunShop::app()->getMemberId(), $parent->member_id);
  2242. //增加邀请码使用记录
  2243. $model = new MemberInvitationCodeLog();
  2244. $model->uniacid = \YunShop::app()->uniacid;
  2245. $model->mid = $parent->member_id; //邀请用户
  2246. $model->member_id = \YunShop::app()->getMemberId(); //使用用户
  2247. $model->invitation_code = $invite_code;
  2248. $model->save();
  2249. return $this->successJson('ok', $parent);
  2250. } else {
  2251. return $this->errorJson('邀请码有误!请重新填写');
  2252. }
  2253. }
  2254. /**
  2255. * 邀请页面确认上级
  2256. */
  2257. public function updateMemberInvite()
  2258. {
  2259. $parent_id = (integer)request()->parent_id ?: 0;
  2260. $invitation_code = '';
  2261. if ($parent_id) {
  2262. $invitation_code = MemberShopInfo::where('member_id', $parent_id)->first()->invite_code ?: '';
  2263. }
  2264. $model = new MemberInvitationCodeLog();
  2265. $model->uniacid = \YunShop::app()->uniacid;
  2266. $model->member_id = \YunShop::app()->getMemberId(); //使用用户
  2267. $model->mid = $parent_id; //邀请用户
  2268. $model->invitation_code = $invitation_code;
  2269. $model->save();
  2270. return $this->successJson('成功');
  2271. }
  2272. public function isValidatePage(Request $request, $integrated = null)
  2273. {
  2274. $member_id = \YunShop::app()->getMemberId();
  2275. $invite_page = 0;
  2276. $addressClass = \Setting::get(
  2277. 'shop.trade.is_street'
  2278. ) ? '\app\common\models\YzMemberAddress' : '\app\common\models\MemberAddress';
  2279. $data = [
  2280. 'is_bind_mobile' => 0,
  2281. 'invite_page' => 0,
  2282. 'is_invite' => 0,
  2283. 'is_login' => 0,
  2284. 'invite_mobile' => MemberModel::getMobile($member_id) ? 1 : 0, // 是否已绑定手机号
  2285. 'bind_address' => [
  2286. 'is_bind_address' => $addressClass::uniacid()->where('uid', \YunShop::app()->getMemberId())->where(
  2287. 'isdefault',
  2288. 1
  2289. )->first() ? 1 : 0,
  2290. 'bind_address_type' => 0,
  2291. 'bind_address_page' => [],
  2292. ],
  2293. ];
  2294. if (app('plugins')->isEnabled('real-name-auth')) {
  2295. $real_name_auth_set = RealNameAuthSet::uniacid()->first();
  2296. if ($member_id) {
  2297. $real_name_auth = RealNameAuth::getInfoByUid($member_id);
  2298. $data['is_auth'] = 0;
  2299. if ($real_name_auth->auth_status) {
  2300. $data['is_auth'] = 1;
  2301. }
  2302. }
  2303. $is_open = 0;
  2304. if (!$real_name_auth_set || $real_name_auth_set->status) {
  2305. $is_open = 1;
  2306. }
  2307. $data['real_name_auth_scene'] = $real_name_auth_set->auth_scene ?: [];
  2308. $data['real_name_auth_is_open'] = $is_open;
  2309. }
  2310. //爱心值加速池-钱包地址(钱包登录前端验证有用到)
  2311. if (app('plugins')->isEnabled('love-speed-pool')) {
  2312. $data['lsp_wallet_site'] = \Yunshop\LoveSpeedPool\model\WalletSite::getWalletSite(
  2313. \YunShop::app()->getMemberId()
  2314. ) ?: '';
  2315. }
  2316. //强制绑定手机号
  2317. if (Cache::has('shop_member')) {
  2318. $member_set = Cache::get('shop_member');
  2319. } else {
  2320. $member_set = \Setting::get('shop.member');
  2321. }
  2322. if (!is_null($member_set)) {
  2323. $data['is_bind_mobile'] = $this->isBindMobile($member_set, $member_id);
  2324. $data['bind_mobile_page'] = $member_set['bind_mobile_page'] ?: [];
  2325. $invite_page = $member_set['invite_page'] ? 1 : 0;
  2326. $data['bind_address']['bind_address_type'] = intval($member_set['is_bind_address']) ?: 0;
  2327. $data['bind_address']['bind_address_page'] = $member_set['bind_address_page'] ?: [];
  2328. }
  2329. if ($data['is_bind_mobile']) {
  2330. if (is_null($integrated)) {
  2331. return $this->successJson('强制绑定手机开启', $data);
  2332. } else {
  2333. return show_json(1, $data);
  2334. }
  2335. }
  2336. $type = \YunShop::request()->type;
  2337. $invitation_log = [];
  2338. if ($member_id) {
  2339. $mobile = \app\common\models\Member::where('uid', $member_id)->first();
  2340. if ($mobile->mobile) {
  2341. $invitation_log = 1;
  2342. } else {
  2343. $member = MemberShopInfo::uniacid()->where('member_id', $member_id)->first();
  2344. $invitation_log = MemberInvitationCodeLog::uniacid()->where('member_id', $member_id)->where(
  2345. 'mid',
  2346. $member->parent_id
  2347. )->first();
  2348. }
  2349. }
  2350. $data['invite_page'] = $type == 5 ? 0 : $invite_page;
  2351. $data['is_invite'] = $invitation_log ? 1 : 0;
  2352. $data['is_login'] = $member_id ? 1 : 0;
  2353. if (is_null($integrated)) {
  2354. return $this->successJson('邀请页面开关', $data);
  2355. } else {
  2356. return show_json(1, $data);
  2357. }
  2358. }
  2359. public function confirmGoods()
  2360. {
  2361. $member_id = \YunShop::app()->getMemberId();
  2362. $member = MemberShopInfo::getMemberShopInfo($member_id);
  2363. $parent = MemberShopInfo::getMemberShopInfo($member->parent_id);
  2364. $invite_code = '';
  2365. if ($parent) {
  2366. $invite_code = $parent->invite_code ?: '';
  2367. }
  2368. $model = new MemberInvitationCodeLog();
  2369. $model->uniacid = \YunShop::app()->uniacid;
  2370. $model->member_id = $member_id;
  2371. $model->mid = $member->parent_id;
  2372. $model->invitation_code = $invite_code;
  2373. if (!$model->save()) {
  2374. return $this->errorJson('保存失败');
  2375. }
  2376. return $this->successJson('ok');
  2377. }
  2378. public function refuseGoods()
  2379. {
  2380. $invite_code = request()->invite_code;
  2381. $member_id = \YunShop::app()->getMemberId();
  2382. $parent = (new MemberShopInfo())->getInviteCodeMember($invite_code);
  2383. if (!$parent) {
  2384. return $this->errorJson('邀请码有误!请重新填写');
  2385. }
  2386. $yz_member = MemberShopInfo::getMemberShopInfo($member_id);
  2387. MemberShopInfo::change_relation($member_id, $parent->member_id);
  2388. $model = new MemberInvitationCodeLog();
  2389. $model->uniacid = \YunShop::app()->uniacid;
  2390. $model->member_id = $member_id;
  2391. $model->mid = $parent->member_id;
  2392. $model->invitation_code = $invite_code;
  2393. if (!$model->save()) {
  2394. return $this->errorJson('保存失败');
  2395. }
  2396. if (!$yz_member->inviter) {
  2397. event(new MemberNewOfflineEvent($member_id, $parent->member_id, false));
  2398. }
  2399. return $this->successJson('ok');
  2400. }
  2401. public function isValidatePageGoods()
  2402. {
  2403. $member_id = \YunShop::app()->getMemberId();
  2404. $log = MemberInvitationCodeLog::getLogByMemberId($member_id);
  2405. return $this->successJson('ok', [
  2406. 'is_invite' => $log ? 1 : 0,
  2407. ]);
  2408. }
  2409. public function getShopSet()
  2410. {
  2411. $data = [
  2412. 'shop_set_name' => Setting::get('shop.shop.name') ?: '商城名称',
  2413. 'default_invite' => Setting::get('shop.member.default_invite') ?: '',//默认邀请码
  2414. ];
  2415. return $this->successJson('ok', $data);
  2416. }
  2417. public function getArticleQr()
  2418. {
  2419. if (app('plugins')->isEnabled('article')) {
  2420. $article_qr_set = Setting::get('plugin.article.qr');
  2421. $qr = MemberModel::getAgentQR();
  2422. if ($article_qr_set == 1) {
  2423. return $this->errorJson('二维码开关关闭!');
  2424. }
  2425. return $this->successJson('获取二维码成功!', $qr);
  2426. }
  2427. return $this->errorJson('文章插件未开启!');
  2428. }
  2429. public function isBindMobile($member_set, $member_id)
  2430. {
  2431. $is_bind_mobile = 0;
  2432. if ((0 < $member_set['is_bind_mobile']) && $member_id && $member_id > 0) {
  2433. $member_model = Member::getMemberById($member_id);
  2434. if ($member_model && empty($member_model->mobile)) {
  2435. $is_bind_mobile = intval($member_set['is_bind_mobile']);
  2436. }
  2437. }
  2438. return $is_bind_mobile;
  2439. }
  2440. public function isOpen()
  2441. {
  2442. $settinglevel = \Setting::get('shop.member');
  2443. $info['is_open'] = 0;
  2444. //判断是否显示等级页
  2445. if ($settinglevel['display_page']) {
  2446. $info['is_open'] = 1;
  2447. }
  2448. $info['level_type'] = $settinglevel['level_type'] ?: '0';
  2449. return show_json(1, $info);
  2450. }
  2451. public function pluginStore()
  2452. {
  2453. if (app('plugins')->isEnabled('store-cashier')) {
  2454. $store = Store::getStoreByUid(\YunShop::app()->getMemberId())->first();
  2455. if (!$store || $store->is_black == 1) {
  2456. return show_json(0, ['status' => 0]);
  2457. }
  2458. return show_json(1, ['status' => 1]);
  2459. }
  2460. return show_json(1, ['status' => 0]);
  2461. }
  2462. public function getMemberSetting(Request $request, $integrated)
  2463. {
  2464. $set = \Setting::get('shop.member');
  2465. //判断微信端是否开启了手机号登录
  2466. $data['wechat_login_mode'] = $set['wechat_login_mode'] ? true : false;
  2467. //判断是否显示等级页
  2468. $data['level']['is_open'] = $set['display_page'] ? 1 : 0;
  2469. $data['level']['level_type'] = $set['level_type'] ?: '0';
  2470. //获取自定义字段
  2471. $data['custom'] = [
  2472. 'is_custom' => $set['is_custom'],
  2473. 'custom_title' => $set['custom_title'],
  2474. 'is_validity' => $set['level_type'] == 2 ? true : false,
  2475. 'term' => $set['term'] ?: 0,
  2476. ];
  2477. // 是否显示会员id
  2478. $data['show_member_id'] = $set['show_member_id'] == 1 ? 1 : 0;
  2479. $data['member_auth_pop_switch'] = Setting::get('plugin.min_app.member_auth_pop_switch') ? 1 : 0;
  2480. if (is_null($integrated)) {
  2481. return $this->successJson('获取自定义字段成功!', $data);
  2482. } else {
  2483. return show_json(1, $data);
  2484. }
  2485. }
  2486. public function getMemberOrder(Request $request, $integrated)
  2487. {
  2488. //订单显示
  2489. $order_info = \app\frontend\models\Order::getOrderCountGroupByStatus(
  2490. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::REFUND]
  2491. );
  2492. $order['order'] = $order_info;
  2493. //酒店订单
  2494. if (app('plugins')->isEnabled('hotel')) {
  2495. $order['hotel_order'] = \Yunshop\Hotel\common\models\Order::getHotelOrderCountGroupByStatus(
  2496. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::REFUND]
  2497. );
  2498. }
  2499. // 拼团订单
  2500. if (app('plugins')->isEnabled('fight-groups')) {
  2501. $order['fight_groups_order'] = \Yunshop\FightGroups\common\models\Order::getFightGroupsOrderCountStatus(
  2502. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE, Order::REFUND]
  2503. );
  2504. }
  2505. // 0.1元拼团订单
  2506. if (app('plugins')->isEnabled('group-work')) {
  2507. $order['group_work_order'] = OrderModel::getGroupWorkOrderCountStatus(
  2508. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::REFUND]
  2509. );
  2510. }
  2511. //抢团订单
  2512. if (app('plugins')->isEnabled('snatch-regiment')) {
  2513. $order['snatch_regiment_order'] = \Yunshop\SnatchRegiment\common\models\Order::getSnatchRegimentOrderCountStatus(
  2514. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE, Order::REFUND]
  2515. );
  2516. }
  2517. //上门安装订单
  2518. if (app('plugins')->isEnabled('live-install')) {
  2519. $order['live_install_order'] = \Yunshop\LiveInstall\models\InstallOrder::getInstallOrderCountStatus(
  2520. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
  2521. );
  2522. }
  2523. //上门安装师傅订单
  2524. if (app('plugins')->isEnabled('live-install') && \Yunshop\LiveInstall\services\SettingService::checkIsWorker(
  2525. )) {
  2526. $order['live_install_work_order'] = \Yunshop\LiveInstall\models\InstallOrder::getInstallOrderWorkCountStatus(
  2527. [2, 3, 4, 6]
  2528. );
  2529. }
  2530. //cps订单
  2531. if (app('plugins')->isEnabled('aggregation-cps')) {
  2532. $order['aggregation_cps_order'] = \Yunshop\AggregationCps\api\models\BingBirdOrderModel::countOrderByStatus(
  2533. );
  2534. }
  2535. // 新拼团订单
  2536. if (app('plugins')->isEnabled('ywm-fight-groups')) {
  2537. $order['ywm_fight_groups_order'] = \Yunshop\YwmFightGroups\common\models\Order::getFightGroupsOrderCountStatus(
  2538. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE, Order::REFUND]
  2539. );
  2540. }
  2541. if (\app\common\services\plugin\leasetoy\LeaseToySet::whetherEnabled()) {
  2542. $order['lease_order'] = \Yunshop\LeaseToy\models\Order::getLeaseOrderCountGroupByStatus(
  2543. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
  2544. );
  2545. }
  2546. //消费券联盟订单
  2547. if (app('plugins')->isEnabled('coupon-store') && \Yunshop\CouponStore\services\SettingService::getSetting(
  2548. )['open_state']) {
  2549. $order['coupon_store_order'] = \Yunshop\CouponStore\models\StoreOrder::getOrderCountStatus(
  2550. [Order::WAIT_PAY, Order::WAIT_SEND, Order::COMPLETE]
  2551. );
  2552. }
  2553. //周边游订单
  2554. if (app('plugins')->isEnabled('travel-around')) {
  2555. $order['travel_around_order'] = \Yunshop\TravelAround\models\FrontendOrder::GetTravelAroundOrderCountStatus(
  2556. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
  2557. );;
  2558. }
  2559. //蛋糕叔叔订单
  2560. if (app('plugins')->isEnabled('yz-supply-cake')) {
  2561. $order['yz_supply_cake_order'] = \Yunshop\YzSupplyCake\models\FrontendOrder::GetYzSupplyCakeOrderCountStatus(
  2562. [Order::WAIT_PAY, Order::WAIT_SEND, Order::WAIT_RECEIVE, Order::COMPLETE]
  2563. );;
  2564. }
  2565. foreach ($order as $key => $item) {
  2566. $order[$key] = array_values(collect($item)->sortBy('status')->all());
  2567. }
  2568. // //宠物医院插件会员中心模板化显示 todo;前端说没用了,我就注释掉了
  2569. // $order['current']= MemberCenter::current()->all();
  2570. if (is_null($integrated)) {
  2571. return $this->successJson('获取会员订单成功!', $order);
  2572. } else {
  2573. return show_json(1, $order);
  2574. }
  2575. }
  2576. public function getMemberOrderName(Request $request, $integrated)
  2577. {
  2578. //订单名字
  2579. $order['order'] = '商城订单';
  2580. //酒店订单
  2581. if (app('plugins')->isEnabled('hotel')) {
  2582. $order['hotel_order'] = '酒店订单';
  2583. }
  2584. // 拼团订单
  2585. if (app('plugins')->isEnabled('fight-groups')) {
  2586. $order['fight_groups_order'] = '拼团订单';
  2587. }
  2588. // 0.1元拼团订单
  2589. if (app('plugins')->isEnabled('group-work')) {
  2590. $setGroupWrok = \Setting::get('plugin.group_work');
  2591. $order['group_work_order'] = $setGroupWrok['plugin_name'] ? $setGroupWrok['plugin_name'] : '0.1元拼订单';
  2592. }
  2593. //抢团订单
  2594. if (app('plugins')->isEnabled('snatch-regiment')) {
  2595. $order['snatch_regiment_order'] = '抢团订单';
  2596. }
  2597. //上门安装订单
  2598. if (app('plugins')->isEnabled('live-install')) {
  2599. $another_name = \Yunshop\LiveInstall\services\SettingService::getAnotherName();
  2600. $order['live_install_order'] = $another_name['plugin_name'] . '订单';
  2601. //上门安装师傅订单
  2602. if (\Yunshop\LiveInstall\services\SettingService::checkIsWorker()) {
  2603. $order['live_install_work_order'] = $another_name['worker_name'] . '订单';
  2604. }
  2605. }
  2606. if (app('plugins')->isEnabled('aggregation-cps')) {
  2607. $order['aggregation_cps_order'] = 'CPS订单';
  2608. }
  2609. if (app('plugins')->isEnabled('coupon-store')) {
  2610. $order['coupon_store_order'] = (defined(
  2611. 'COUPON_STORE_PLUGIN_NAME'
  2612. ) ? COUPON_STORE_PLUGIN_NAME : '消费券联盟') . '订单';
  2613. }
  2614. if (\app\common\services\plugin\leasetoy\LeaseToySet::whetherEnabled()) {
  2615. $order['lease_order'] = '租赁订单';
  2616. }
  2617. if (app('plugins')->isEnabled('ys-system')) {
  2618. $order['ys_system'] = '线下订单';
  2619. }
  2620. // 新拼团订单
  2621. if (app('plugins')->isEnabled('ywm-fight-groups')) {
  2622. $order['ywm_fight_groups_order'] = '新拼团订单';
  2623. }
  2624. // 周边游订单
  2625. if (app('plugins')->isEnabled('travel-around')) {
  2626. $order['travel_around_order'] = '周边游订单';
  2627. }
  2628. // 蛋糕叔叔订单
  2629. if (app('plugins')->isEnabled('yz-supply-cake')) {
  2630. $order['yz_supply_cake_order'] = '蛋糕订单';
  2631. }
  2632. if (is_null($integrated)) {
  2633. return $this->successJson('获取会员订单成功!', $order);
  2634. } else {
  2635. return show_json(1, $order);
  2636. }
  2637. }
  2638. public function memberData()
  2639. {
  2640. $request = Request();
  2641. //查看会员订单
  2642. $this->dataIntegrated((new MemberDesignerController())->index($request, true), 'designer');
  2643. if (
  2644. (miniVersionCompare('1.1.109') && versionCompare('1.1.109')) &&
  2645. ($this->apiData['designer'] && $this->apiData['designer']['status'] == false)) {
  2646. //版本符合且没有自定义设置装修
  2647. if (app('plugins')->isEnabled('decorate') && \Setting::get('plugin.decorate.is_open') == "1") {
  2648. //会员中心模版
  2649. $view_set = \Yunshop\Decorate\models\DecorateTempletModel::getList(
  2650. ['is_default' => 1, 'type' => 1],
  2651. '*',
  2652. false
  2653. );
  2654. if (empty($view_set) || $view_set->code == 'member01') {
  2655. return $this->newMemberData();
  2656. }
  2657. }
  2658. }
  2659. $this->dataIntegrated($this->getUserInfo($request, true), 'member');
  2660. $this->dataIntegrated($this->getEnablePlugins($request, true), 'plugins');
  2661. //是否显示我的推广
  2662. // $this->dataIntegrated($this->isOpenRelation($request, true), 'relation');
  2663. //查看自定义
  2664. // $this->dataIntegrated($this->getCustomField($request, true), 'custom');
  2665. //查看等级是否开启
  2666. // $this->dataIntegrated($this->isOpen(), 'level');
  2667. //查看自己是否是门店店主
  2668. // $this->dataIntegrated($this->pluginStore(), 'isStore');
  2669. //查看会员设置
  2670. $this->dataIntegrated($this->getMemberSetting($request, true), 'setting');
  2671. //查看会员订单
  2672. $this->dataIntegrated($this->getMemberOrder($request, true), 'order');
  2673. $this->dataIntegrated($this->getMemberOrderName($request, true), 'order_name');
  2674. return $this->successJson('', $this->apiData);
  2675. }
  2676. /**
  2677. * 新版会员中心数据
  2678. * @return \Illuminate\Http\JsonResponse
  2679. */
  2680. public function newMemberData()
  2681. {
  2682. $request = Request();
  2683. $this->dataIntegrated($this->getUserInfo($request, true), 'member');
  2684. //查看会员设置
  2685. $this->dataIntegrated($this->getMemberSetting($request, true), 'setting');
  2686. //查看会员订单
  2687. $this->dataIntegrated($this->getMemberOrder($request, true), 'order');
  2688. $this->dataIntegrated($this->getMemberOrderName($request, true), 'order_name');
  2689. $memberCenterData = new MemberCenterDataService($this->apiData);
  2690. $this->apiData['plugins'] = $memberCenterData->getEnablePlugins();
  2691. $this->apiData['service'] = $memberCenterData->getService(true);
  2692. $this->apiData['plugins_data'] = $memberCenterData->getPluginData(''); //默认第一个
  2693. if (app('plugins')->isEnabled('decorate') && Setting::get('plugin.decorate.is_open') && Setting::get(
  2694. 'decorate.mc_one_default.open_state'
  2695. )) {
  2696. $this->apiData['plugins_data']['nav'] = DecorateDefaultTabModel::formNav(
  2697. $this->apiData['plugins_data']['nav']
  2698. );
  2699. }
  2700. // $this->dataIntegrated($memberCenterData->getPluginData(''), 'plugins_data');
  2701. return $this->successJson('', $this->apiData);
  2702. }
  2703. /**
  2704. * 会员中心模板01,列表数据获取
  2705. * @return \Illuminate\Http\JsonResponse
  2706. */
  2707. public function pluginData()
  2708. {
  2709. $code = request()->code;
  2710. if (!$code) {
  2711. return $this->errorJson('参数错误');
  2712. }
  2713. $memberCenterData = new MemberCenterDataService();
  2714. $data = $memberCenterData->getPluginData($code, false);
  2715. return $this->successJson('ok', ['data' => $data['data']]);
  2716. }
  2717. /**
  2718. * 更多工具、插件
  2719. */
  2720. public function morePlugins()
  2721. {
  2722. $memberId = \YunShop::app()->getMemberId();
  2723. $memberCenter = new MemberCenterService();
  2724. $arr = $memberCenter->getMemberData($memberId);//获取会员中心页面各入口
  2725. $newArr = $memberCenter->defaultPluginData($memberId);;
  2726. foreach ($arr as $key => $item) {
  2727. if (!in_array($key, ['is_open', 'hotel', 'plugins', 'ViewSet'])) {
  2728. $newArr = array_merge($newArr, $item);
  2729. }
  2730. }
  2731. unset($arr);
  2732. $newArr = collect($newArr);
  2733. $plugin = $memberCenter->morePluginData();
  2734. foreach ($plugin as $key => $item) {
  2735. $plugin[$key]['plugin'] = $newArr->whereIn('name', $item['plugin'])->all();
  2736. $plugin[$key]['plugin'] = array_values($plugin[$key]['plugin']);
  2737. }
  2738. return $this->successJson('ok', ['plugin' => $plugin]);
  2739. }
  2740. /**
  2741. * @return \Illuminate\Http\JsonResponse
  2742. * @throws AppException
  2743. */
  2744. public function getMemberList()
  2745. {
  2746. app('db')->cacheSelect = true;
  2747. $member_referral = new MemberReferralService();
  2748. $this->dataIntegrated($member_referral->getMyAgentData_v2(), 'agent_data');
  2749. $this->dataIntegrated($member_referral->getMyAgent_v2(), 'my_agent');
  2750. $this->dataIntegrated($member_referral->getMyReferral_v2(), 'my_referral');
  2751. $this->dataIntegrated($member_referral->getMyReferralParents(), 'my_referral_parents');
  2752. // $request = Request();
  2753. // $this->dataIntegrated($this->getMyAgentData_v2($request, true), 'agent_data');
  2754. // $this->dataIntegrated($this->getMyAgent_v2($request, true), 'my_agent');
  2755. // $this->dataIntegrated($this->getMyReferral_v2($request, true), 'my_referral');
  2756. // $this->dataIntegrated($this->getMyReferralParents($request), 'my_referral_parents');
  2757. $this->pluginEnable();
  2758. return $this->successJson('', $this->apiData);
  2759. }
  2760. public function getMiniTemplateCorrespond()
  2761. {
  2762. app('db')->cacheSelect = true;
  2763. $status = \YunShop::request()->get("small_type");
  2764. $status = empty($status) ? 0 : $status;
  2765. $list = MiniTemplateCorresponding::uniacid()->where("small_type", $status)->get();
  2766. $list = empty($list) ? [] : $list->toArray();
  2767. $mini = MinAppTemplateMessage::where('is_open', 1)->pluck("title");
  2768. $mini = empty($mini) ? [] : $mini->toArray();
  2769. if ($list) {
  2770. foreach ($list as $key => $value) {
  2771. if (!in_array($value['template_name'], $mini)) {
  2772. unset($list[$key]);
  2773. }
  2774. }
  2775. }
  2776. $list = array_values($list);
  2777. event($event = new OrderMiniNoticeListEvent($list, $status, intval(request()->order_id) ?: 0));
  2778. $list = $event->getList();
  2779. if (count($list) > 3) {
  2780. array_splice($list, 3);
  2781. }
  2782. return $this->successJson("", $list);
  2783. }
  2784. public function pluginEnable()
  2785. {
  2786. if (app('plugins')->isEnabled('regional-reward')) {
  2787. $regional_set = array_pluck(Setting::getAllByGroup('regional-reward')->toArray(), 'value', 'key');
  2788. if ($regional_set['achievement_show'] == 1) {
  2789. $this->apiData['my_achievement'] = true;
  2790. }
  2791. }
  2792. if (app('plugins')->isEnabled('member-center-agent') && \Setting::get('plugin.member-center-agent.is_open')) {
  2793. $this->apiData['is_link'] = true;
  2794. }
  2795. }
  2796. /**
  2797. * 会员定位记录
  2798. */
  2799. public function saveMemberLocation()
  2800. {
  2801. $data = [];
  2802. $data['uniacid'] = \Yunshop::app()->uniacid;
  2803. $data['member_id'] = \YunShop::app()->getMemberId();
  2804. $data['province_name'] = request()->province_name; //省
  2805. $data['city_name'] = request()->city_name; //市
  2806. $data['district_name'] = request()->district_name; //区
  2807. $data['longitude'] = request()->longitude; //经度
  2808. $data['latitude'] = request()->latitude; //纬度
  2809. if (!$data['member_id']) {
  2810. return $this->errorJson('会员不存在!');
  2811. }
  2812. foreach ($data as $key => $value) {
  2813. if (!$value) {
  2814. return $this->errorJson('定位数据错误!');
  2815. }
  2816. }
  2817. $memberPosition = MemberPosition::getMemberLocation($data['member_id']);
  2818. if (!$memberPosition) {
  2819. $memberPosition = new MemberPosition();
  2820. }
  2821. $memberPosition->fill($data);
  2822. if ($memberPosition->save()) {
  2823. return $this->successJson('会员位置信息记录成功');
  2824. }
  2825. return $this->errorJson('会员位置信息记录失败');
  2826. }
  2827. /**
  2828. * 获取小程序会员手机号
  2829. *
  2830. * @return \Illuminate\Http\JsonResponse
  2831. */
  2832. public function miniMemberMobile()
  2833. {
  2834. $code = \YunShop::request()->code;
  2835. if (empty($code)) {
  2836. return $this->errorJson('手机号获取凭证不能为空');
  2837. }
  2838. $data = app(MemberMiniAppService::class)->getPhoneNumber($code);
  2839. return $this->successJson('ok', $data);
  2840. }
  2841. public function invitationCode()
  2842. {
  2843. $member_id = \YunShop::app()->getMemberId();
  2844. $qrCodeUrl = '';
  2845. if (request()->input('type') == 2) {
  2846. $waxCode = new \app\common\services\wechat\WxaQrCodeService(
  2847. 'static/qrcode/invitation/' . \YunShop::app()->uniacid
  2848. );
  2849. $waxCode->setParameter('scene', "m={$member_id}&lk=1");
  2850. $waxCode->setParameter('page', 'packageF/sign_in_subscribe/invite/invite');
  2851. $qrCodeUrl = $waxCode->getQrCode();
  2852. }
  2853. return $this->successJson('小程序码', ['qr_code_url' => $qrCodeUrl]);
  2854. }
  2855. }