MerchantRepository.php 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. <?php
  2. /**
  3. * @package merchant
  4. *
  5. * @author xaboy
  6. * @day 2020-04-16
  7. *
  8. *
  9. */
  10. namespace app\common\repositories\merchant;
  11. use app\common\dao\system\merchant\MerchantDao;
  12. use app\common\repositories\BaseRepository;
  13. use app\common\repositories\user\UserRepository;
  14. use think\exception\ValidateException;
  15. use think\facade\Db;
  16. use think\facade\Log;
  17. /**
  18. * Class MerchantRepository
  19. * @package app\common\repositories\system\merchant
  20. * @mixin MerchantDao
  21. * @author xaboy
  22. * @day 2020-04-16
  23. */
  24. class MerchantRepository extends BaseRepository
  25. {
  26. /**
  27. * MerchantRepository constructor.
  28. * @param MerchantDao $dao
  29. */
  30. public function __construct(MerchantDao $dao)
  31. {
  32. $this->dao = $dao;
  33. }
  34. //商户统计
  35. public function report_form($uid,$merId,$day){
  36. $payPrice = getModelTime(Db::name("store_order")->where('paid', 1)->where("status","<>",-1)->when($merId, function ($query, $merId) {
  37. $query->where('mer_id', $merId);
  38. }), $day, 'pay_time')->sum('mer_money');
  39. if($payPrice <= 0){
  40. //支付金额 //也就是应到金额 //也可以是已到金额
  41. $payPrice=getModelTime(Db::name("store_order")->where('paid', 1)->where("status","<>",-1)->when($merId, function ($query, $merId) {
  42. $query->where('mer_id', $merId);
  43. }), $day, 'pay_time')->sum('pay_price');
  44. $extension_one=getModelTime(Db::name("store_order")->where('paid', 1)->where("status","<>",-1)->when($merId, function ($query, $merId) {
  45. $query->where('mer_id', $merId);
  46. }), $day, 'pay_time')->sum('extension_one');
  47. $payPrice = $payPrice - $extension_one;
  48. }
  49. if ($day=="today"){
  50. $day_where=[
  51. date("Y-m-d")." 0:0:0",
  52. date("Y-m-d")." 23:59:59"
  53. ];
  54. }elseif ($day=="yesterday"){
  55. $day_where=[
  56. date("Y-m-d",strtotime("-1 day"))." 0:0:0",
  57. date("Y-m-d",strtotime("-1 day"))." 23:59:59"
  58. ];
  59. }else{
  60. $day_where=[
  61. $day." 0:0:0",
  62. $day." 23:59:59"
  63. ];
  64. }
  65. //锁定会员
  66. $userlist=Db::name("store_order")
  67. ->alias("so")
  68. ->join("user u","u.uid=so.uid")
  69. ->where(['paid'=>1,"so.mer_id"=>$merId])
  70. ->where("so.create_time","between time",$day_where)
  71. ->group("so.uid")
  72. ->field("u.mer_id,u.uid")
  73. ->select();
  74. $lockUserNo=0;
  75. $lockUser=Db::name("user")
  76. ->where(["mer_id"=>$merId])
  77. ->whereTime('locktime','between',$day_where)
  78. ->count();
  79. $lockunion_users=Db::name("union_users")
  80. ->where(["lock_mer_id"=>$merId])
  81. ->whereTime('lock_time','between',$day_where)
  82. ->count();
  83. $lockUser=$lockUser+$lockunion_users;
  84. $payYang=Db::name("user_bill")
  85. ->where(["commission_type"=>3,"uid"=>$uid])
  86. ->where('create_time','between time',$day_where)
  87. ->sum("number");
  88. //会员数
  89. $userCount=$lockUser+$lockUserNo;
  90. //储蓄金额
  91. $chuxu=0;
  92. //储蓄人数
  93. $chuxuren=0;
  94. //锁定会员返利
  95. $lockUserfan=Db::name("user_bill")->where("uid",$uid) ->where("create_time","between time",$day_where)->sum("number");
  96. //跨店收入
  97. $kuadian=Db::name("user_bill")->where(["uid"=>$uid,"commission_type"=>7]) ->where("create_time","between time",$day_where)->sum("number");
  98. //推荐人
  99. $recommender=Db::name("merchant")->where("mer_id",$merId) ->where("create_time","between time",$day_where)->value("recommender");
  100. $jiangli=Db::name("user_bill")
  101. ->alias("ub")
  102. ->join("store_order so","so.order_sn=ub.order_sn")
  103. ->where(["so.uid"=>$recommender,"commission_type"=>3,"so.mer_id"=>$merId])
  104. ->where("so.create_time","between time",$day_where)
  105. ->count();
  106. //商家线下充值获得金额
  107. $offlineRecharge1 = Db::name('order_merchant')
  108. ->where("mer_id", $merId)
  109. ->where('status', 1)
  110. ->where("create_time","between time",$day_where)
  111. ->sum('money');
  112. $offlineRecharge2 = Db::name('order_merchant')
  113. ->where("mer_id", $merId)
  114. ->where('status', 1)
  115. ->where("create_time","between time",$day_where)
  116. ->sum('available');
  117. $souxufee = Db::name('order_merchant')
  118. ->where("mer_id", $merId)
  119. ->where('status', 1)
  120. ->where("create_time","between time",$day_where)
  121. ->sum('swipe_fee');
  122. //sat刷卡手续费比例
  123. // $souxufee = systemConfig('yanglao');
  124. // $offlineRecharge = bcmul($offlineRecharge1, (100 - $souxufee) * 0.01, 2);
  125. // $offlineRecharge = bcsub($offlineRecharge, $offlineRecharge2, 2);
  126. $offlineRecharge=bcsub($offlineRecharge1,bcadd($offlineRecharge2,$souxufee,2),2);
  127. //消费分
  128. $startTime = strtotime('today');
  129. $endTime = strtotime('tomorrow -1second');
  130. $score = Db::name('merchant_consumption_score_log')
  131. -> where('mer_id',$merId)
  132. ->where('status','<>',2)
  133. ->where("add_time >= '$startTime' and add_time <= '$endTime'")
  134. -> sum('consumption_score');
  135. return ["score"=>$score,"payPrice"=>$payPrice,"realtoPrice"=>$kuadian,"lockUser"=>$lockUser,"lockUserNo"=>$lockUserNo,"payYang"=>$payYang,"userCount"=>$userCount,"chuxu"=>$chuxu,"chuxuren"=>$chuxuren,"lockUserfan"=>$lockUserfan,"jiangli"=>$jiangli,"xiaofei"=>0,"offlineRecharge"=>$offlineRecharge];
  136. }
  137. //商户
  138. public function index($uid,$where)
  139. {
  140. if ($where["mer_id"]){
  141. // $where["branch"]=1;
  142. }else{
  143. $where=[];
  144. $where["branch"]=0;
  145. $where["uid"]=$uid;
  146. }
  147. $mer=Db::name("merchant")
  148. ->alias("m")
  149. ->join("merchant_category mc","mc.merchant_category_id=m.category_id","left")
  150. ->where($where)
  151. ->field("mer_id,mer_name,mer_avatar,m.create_time,mc.category_name,mer_phone,consumption_score")->find();
  152. if ($mer){
  153. $mer["paycode"]="";
  154. $base_commission=Db::name("system_config_value")
  155. ->where(["mer_id"=>$mer["mer_id"],"config_key"=>"base_commission"])
  156. ->value("value");
  157. $mer["base_commission"]=floatval($base_commission)?$base_commission:0;
  158. $yx = Db::name("merchant_yx")
  159. ->where(["mer_id"=>$mer["mer_id"],"status"=>1])
  160. ->value("sn");
  161. $mer["yx_sn"] = $yx;
  162. return $mer;
  163. }else{
  164. // return $uid;
  165. $mer_id=Db::name("store_staff")->where("uid",$uid)->value("mer_id");
  166. $where=["mer_id"=>$mer_id];
  167. $mer=Db::name("merchant")
  168. ->alias("m")
  169. ->join("merchant_category mc","mc.merchant_category_id=m.category_id","left")
  170. ->where($where)
  171. ->field("mer_id,mer_name,mer_avatar,m.create_time,mc.category_name,mer_phone")->find();
  172. $mer["paycode"]="";
  173. $base_commission=Db::name("system_config_value")
  174. ->where(["mer_id"=>$mer["mer_id"],"config_key"=>"base_commission"])
  175. ->value("value");
  176. $mer["base_commission"]=floatval($base_commission)?$base_commission:0;
  177. $yx = Db::name("merchant_yx")
  178. ->where(["mer_id"=>$mer["mer_id"],"status"=>1])
  179. ->value("sn");
  180. $mer["yx_sn"] = $yx;
  181. return $mer;
  182. }
  183. }
  184. public function set_rebate($uid,$data){
  185. $where=[];
  186. $where["mer_id"]=$data["mer_id"];
  187. $where["config_key"]="base_commission";
  188. $merbili=Db::name("system_config_value")
  189. ->where($where)->count();
  190. $base_commission = systemConfig('extension_one_rate');
  191. $consumption_score = Db::name('merchant') -> where('uid',$uid) -> where('mer_id',$data['mer_id']) -> field('consumption_score') -> find();
  192. if($consumption_score['consumption_score'] == 1){
  193. $base_commission = $base_commission > 2 ? $base_commission : 2;
  194. }
  195. if($base_commission>0&&$base_commission>$data["value"]){
  196. return ["code"=>0,"msg"=>"设置比例不可低于".$base_commission."%"];
  197. }
  198. if ($merbili){
  199. $mer=Db::name("system_config_value")
  200. ->where($where)
  201. ->update(
  202. [
  203. "value"=>$data["value"]
  204. ]
  205. );
  206. }else{
  207. $mer=Db::name("system_config_value")
  208. ->insert(
  209. [
  210. "config_key"=>"base_commission",
  211. "mer_id"=>$data["mer_id"],
  212. "value"=>$data["value"]
  213. ]
  214. );
  215. }
  216. if ($mer){
  217. // return $mer;
  218. return ["code"=>1,"msg"=>"设置成功"];
  219. }else{
  220. // return [];
  221. return ["code"=>0,"msg"=>"设置失败"];
  222. }
  223. }
  224. public function newest_data($uid,$data){
  225. $where=[];
  226. $where["so.mer_id"]=$data["mer_id"];
  227. $where["paid"]=1;
  228. $page=empty($data["page"])?1:$data["page"];
  229. $limit=empty($data["limit"])?10:$data["limit"];
  230. $list=Db::name("store_order")
  231. ->alias("so")
  232. ->where($where)
  233. ->join("user u","u.uid=so.uid")
  234. // ->group("so.uid")
  235. ->field("so.pay_price as ying_price,so.total_price as xf_price,u.uid,u.nickname,u.avatar,u.mer_id")
  236. ->page($page,$limit)
  237. ->select()->toArray();
  238. // $count=Db::name("store_order")
  239. // ->alias("so")
  240. // ->where($where)
  241. // ->join("user u","u.uid=so.uid")
  242. // ->group("so.uid")
  243. // ->count();
  244. $list2=Db::name("order_merchant")
  245. ->alias("so")
  246. ->where($where)
  247. ->where(["paid"=>1])
  248. ->field("so.money as ying_price,so.money as xf_price,uid,nickname,avatar,mer_id,pay_user_id")
  249. ->page($page,1000)
  250. ->order("id desc")
  251. ->select()->toArray();
  252. // $users=[];
  253. foreach ($list2 as $k=>&$v){
  254. if ($v["uid"]==0){
  255. $v["uid"]=$v["pay_user_id"];
  256. }
  257. $mer_id=Db::name("user")->where(["mer_id"=>$v["mer_id"],"uid"=>$v["uid"]])->count();
  258. $mer_id2=Db::name("union_users")->where(["lock_mer_id"=>$v["mer_id"],"unionid"=>$v["uid"]])->count();
  259. if(!$mer_id&&!$mer_id2){
  260. $v["mer_id"]=0;
  261. }
  262. unset($list2[$k]["pay_user_id"]);
  263. }
  264. // if ($users){
  265. // $users=implode(",",$users);
  266. // $union_users=Db::name("union_users")->field("lock_time,uid,nickname,avatar,lock_mer_id as mer_id,balance as xf_price")->where(["lock_mer_id"=>$data["mer_id"],"uid"=>["not in",$users]])->select()->toArray();
  267. // }else{
  268. // $union_users=Db::name("union_users")->field("lock_time,uid,nickname,avatar,lock_mer_id as mer_id,balance as xf_price")->where(["lock_mer_id"=>$data["mer_id"]])->select()->toArray();
  269. // }
  270. // $newstafflsit=array_merge($union_users,$stafflsit);
  271. // foreach ($union_users as &$v){
  272. // $v["ying_price"]=$v["xf_price"];
  273. //// $user_certification=Db::name("mer_id")->where(["uid"=>$v["uid"],"status"=>1])->count();
  274. //// $v["mer_id"] =$user_certification;
  275. // }
  276. $list=array_merge($list2,$list);
  277. // $list=array_merge($list,$union_users);
  278. if ($list){
  279. return ["list"=>$list,"count"=>count($list)];
  280. }else{
  281. return [];
  282. }
  283. }
  284. public function branch_list($uid,$data){
  285. $where=[];
  286. // $where["uid"]=$uid;
  287. $where["branch"]=$data["mer_id"];
  288. $list=Db::name("merchant")
  289. ->where($where)
  290. ->field("mer_id,mer_name,mer_avatar,create_time")
  291. ->select();
  292. if ($list){
  293. return $list;
  294. }else{
  295. return [];
  296. }
  297. }
  298. public function recharge_list($uid,$data){
  299. $where=[];
  300. $where["mer_id"]=$data["mer_id"];
  301. $list=Db::name("recharge")
  302. ->where($where)
  303. ->select()->toArray();
  304. foreach ($list as &$v){
  305. $v["statime"]=date("Y-m-d",$v["statime"]);
  306. $v["endtime"]=date("Y-m-d",$v["endtime"]);
  307. }
  308. if ($list){
  309. return $list;
  310. }else{
  311. return [];
  312. }
  313. }
  314. public function add_recharge($uid,$data){
  315. $where=[];
  316. $where["mer_id"]=$data["mer_id"];
  317. if (!empty($data["statime"])){
  318. $data["statime"]=strtotime($data["statime"]);
  319. }
  320. if (!empty($data["endtime"])){
  321. $data["endtime"]=strtotime($data["endtime"]);
  322. }
  323. if ($data["id"]){
  324. $res=Db::name("recharge")->where("id",$data["id"])->update($data);
  325. }else{
  326. $res=Db::name("recharge")->insert($data);
  327. }
  328. if ($res){
  329. return $res;
  330. }else{
  331. return [];
  332. }
  333. }
  334. public function get_recharge_on($uid,$data){
  335. $res=Db::name("recharge")->where($data)->find();
  336. if ($res){
  337. return $res;
  338. }else{
  339. return [];
  340. }
  341. }
  342. public function del_recharge($uid,$data){
  343. $one=Db::name("recharge")->where("id","in",$data['id'])->find();
  344. if ($one){
  345. $res=Db::name("recharge")->where("id","in",$data['id'])->delete();
  346. }else{
  347. $res='';
  348. }
  349. if ($res){
  350. return $res;
  351. }else{
  352. return [];
  353. }
  354. }
  355. public function add_staff($uid,$data){
  356. $user= Db::name("user")->where("account",$data["phone"])->find();
  357. if ($user){
  358. $isMerchant = Db::name("merchant") -> where(['uid'=>$user['uid']]) -> find();
  359. if($isMerchant){
  360. throw new ValidateException('此账户是商户,无法添加为员工');
  361. }
  362. $staff= Db::name("store_staff")->where("uid",$user["uid"])->find();
  363. if ($staff){
  364. return [];
  365. }
  366. $data["uid"]=$user["uid"];
  367. }else{
  368. $repository = app()->make(\app\common\repositories\user\UserRepository::class);
  369. $user = $repository->registr($data['phone'], $data['password'],'APP',"");
  370. $data["uid"]=$user["uid"];
  371. }
  372. if (!empty($data["password"])){
  373. unset($data["password"]);
  374. }
  375. $res=Db::name("store_staff")->insert($data);
  376. return $res;
  377. }
  378. public function staff_list($uid,$data){
  379. $where["sos.mer_id"]=$data["mer_id"];
  380. $where["sos.status"]=1;
  381. $page = empty($data["page"])?1:$data["page"];
  382. $limit= empty( $data["limit"])?10:$data["limit"];
  383. $stafflsit= Db::name("store_staff")
  384. ->alias("sos")
  385. ->join("store_branch sob","sob.id=sos.department")
  386. ->join("user u","u.uid=sos.uid")
  387. ->where($where)
  388. ->page($page,$limit)
  389. ->field("sos.*,sob.branch,u.avatar")
  390. ->select()->toArray();
  391. $count= Db::name("store_staff")
  392. ->alias("sos")
  393. ->join("store_branch sob","sob.id=sos.department")
  394. ->where($where)
  395. ->count();
  396. foreach ($stafflsit as &$v){
  397. $v["pwd"]="******";
  398. }
  399. if ($stafflsit){
  400. return ["list"=>$stafflsit,"count"=>$count];
  401. }else{
  402. return [];
  403. }
  404. }
  405. public function get_staff_one($uid,$data){
  406. $staff= Db::name("store_staff")
  407. ->where(["id"=>$data["id"]])
  408. ->find();
  409. return $staff;
  410. }
  411. public function edit_staff($uid,$data){
  412. $staff= Db::name("store_staff")
  413. ->where("id",$data["id"])
  414. ->update(
  415. $data
  416. );
  417. return $staff;
  418. }
  419. public function del_staff($uid,$data){
  420. if ($data["id"]){
  421. $staff= Db::name("store_staff")
  422. ->where("id","in",$data["id"])
  423. ->delete();
  424. }else{
  425. $staff=[];
  426. }
  427. return $staff;
  428. }
  429. public function mer_user($uid,$data){
  430. // $where["paid"]=1;
  431. $where[]=["u.mer_id","=",$data["mer_id"]];
  432. // $where["u.mer_id"]=["in","0,".$data["mer_id"]];
  433. if ($data["search"]){
  434. // $where["u.nickname"] =["like","%".$data["search"]."%"];
  435. $where[] =["u.nickname","like","%".$data["search"]."%"];
  436. }
  437. $page = empty($data["page"])?1:$data["page"];
  438. $limit= empty( $data["limit"])?10:$data["limit"];
  439. $stafflsit= Db::name("user")
  440. ->alias("u")
  441. ->where($where)
  442. // ->join("store_order so","so.uid=u.uid")
  443. // ->page($page,$limit)
  444. // sum(so.pay_price) as ying_price,sum(so.total_price) as xf_price
  445. ->field("u.uid,u.nickname,u.avatar,u.mer_id")
  446. ->select()->toArray();
  447. $count= Db::name("user")
  448. ->alias("u")
  449. // ->join("store_order so","so.uid=u.uid")
  450. ->where($where)
  451. ->count();
  452. foreach ($stafflsit as &$v){
  453. if($v["uid"]){
  454. $xf_price=Db::name("order_merchant")->where(["paid"=>1,"uid"=>$v["uid"]])->sum("money");
  455. $xf_price2=Db::name("store_order")->where(["paid"=>1,"uid"=>$v["uid"]])->sum("total_price");
  456. $v["xf_price"]=$xf_price+$xf_price2;
  457. }
  458. }
  459. $wheres=[];
  460. if ($data["search"]){
  461. $wheres[] =["nickname","like","%".$data["search"]."%"];
  462. }
  463. $union_users=Db::name("union_users")->where($wheres)->field("uid,nickname,avatar,unionid,lock_mer_id as mer_id,balance as xf_price")->where(["lock_mer_id"=>$data["mer_id"],"uid"=>0])->select()->toArray();
  464. foreach ($union_users as &$v){
  465. $v["uid"]=$v["unionid"];
  466. $v["xf_price"]=Db::name("order_merchant")->where(["paid"=>1,"pay_user_id"=>$v["unionid"]])->sum("money");
  467. }
  468. $newstafflsit=array_merge($union_users,$stafflsit);
  469. if ($newstafflsit){
  470. return ["list"=>$newstafflsit,"count"=>count($newstafflsit)];
  471. }else{
  472. return [];
  473. }
  474. }
  475. public function mer_user_info($uid,$data){
  476. $userinfo=Db::name("user")->where("uid",$data["uid"]) ->field("uid,nickname,avatar,create_time,mer_id")->find();
  477. $list=Db::name("user_recharge")->where(["mer_id"=>$data["mer_id"],"uid"=>$data["uid"],"paid"=>1])->select()->toArray();
  478. $chonglist=[];
  479. foreach ($list as $v){
  480. $chonglist[]= [
  481. "title"=>"充值",
  482. "refund_price"=>$v["refund_price"],
  483. "price"=>$v["price"]+$v["give_price"],
  484. "create_time"=>$v["create_time"]
  485. ];
  486. }
  487. if(!$userinfo){
  488. $userinfo=Db::name("union_users")->where("unionid",$data["uid"]) ->field("unionid as uid,nickname,avatar,create_time,lock_mer_id as mer_id")->find();
  489. $lists=Db::name("order_merchant")->where(["pay_user_id"=>$data["uid"],"paid"=>1])->select()->toArray();
  490. // $chonglist=[];
  491. foreach ($lists as $vs){
  492. $chonglist[]= [
  493. "title"=>"充值",
  494. "refund_price"=>$vs["money"],
  495. "price"=>$vs["money"]+$vs["give_money"],
  496. "create_time"=>$vs["create_time"]
  497. ];
  498. }
  499. }else{
  500. $lists=Db::name("order_merchant")->where(["uid"=>$data["uid"],"paid"=>1])->select()->toArray();
  501. // $chonglist=[];
  502. foreach ($lists as $vs){
  503. $chonglist[]= [
  504. "title"=>"充值",
  505. "refund_price"=>$vs["money"],
  506. "price"=>$vs["money"]+$vs["give_money"],
  507. "create_time"=>$vs["create_time"]
  508. ];
  509. }
  510. }
  511. return ["user_info"=>$userinfo,"consumption"=>$chonglist];
  512. }
  513. public function add_branch($uid,$data){
  514. $store_branch=Db::name("store_branch")->where(["branch"=>$data["branch"],"mer_id"=>$data["mer_id"]])->find();
  515. if ($store_branch){
  516. return [];
  517. }
  518. $res=Db::name("store_branch")->insert($data);
  519. return $res;
  520. }
  521. public function get_branch($uid,$data){
  522. $res=Db::name("store_branch")->where(["mer_id"=>$data["mer_id"]])->select();
  523. return $res;
  524. }
  525. public function del_branch($uid,$data){
  526. $store_branch=Db::name("store_branch")->where(["id"=>$data["id"],"mer_id"=>$data["mer_id"]])->find();
  527. if ($store_branch){
  528. $res=Db::name("store_branch")->where(["id"=>$store_branch["id"]])->delete();
  529. }else{
  530. $res=[];
  531. }
  532. return $res;
  533. }
  534. public function branch_quanxian($uid){
  535. $res=Db::name("store_branch_jurisdiction")->select();
  536. return $res;
  537. }
  538. public function lock_count($uid,$data){
  539. //今日新增锁定:会员
  540. // $daylock=Db::name("store_order")
  541. // ->alias("so")
  542. // ->join("user u","u.uid=so.uid")
  543. // ->where(["so.mer_id"=>$data["mer_id"],'paid'=>1,"so.mer_id"=>0])
  544. // ->whereTime("pay_time",'today')
  545. // ->group("so.mer_id")
  546. // ->count();
  547. $lockUser=Db::name("user")
  548. ->where(["mer_id"=>$data["mer_id"]])
  549. ->whereTime("locktime",'today')
  550. ->count();
  551. $lockunion_users=Db::name("union_users")
  552. ->where(["lock_mer_id"=>$data["mer_id"]])
  553. ->whereTime('lock_time','today')
  554. ->count();
  555. $daylock=$lockUser+$lockunion_users;
  556. //累计锁定:会员
  557. $lockUsers=Db::name("user")
  558. ->where(["mer_id"=>$data["mer_id"]])
  559. ->count();
  560. $lockunion_userss=Db::name("union_users")
  561. ->where(["lock_mer_id"=>$data["mer_id"],"uid"=>0])
  562. ->count();
  563. $countlock=$lockUsers+$lockunion_userss;
  564. //今日线下奖励
  565. $offlineRecharge1 =Db::name("user_bill")->where(["uid"=>$uid,"commission_type"=>3,"type"=>'commission',"source"=>1])->whereTime("create_time",'today')->sum("number");
  566. $dayprice = $offlineRecharge1;
  567. // $dayprice=$offlineRecharge;
  568. //累计线下奖励
  569. $offlineRecharge22=Db::name("user_bill")->where(["uid"=>$uid,"commission_type"=>3,"type"=>'commission',"source"=>1])->sum("number");
  570. $countprice = $offlineRecharge22;
  571. // $countprice=0;
  572. //今日线上奖励
  573. $dayupprice=Db::name("user_bill")->where(["uid"=>$uid,"commission_type"=>["in","2,3,4"],"type"=>'commission'])->whereTime("create_time",'today')->sum("number");
  574. //线上累计奖励
  575. $countupprice=Db::name("user_bill")->where(["uid"=>$uid,"commission_type"=>["in","2,3,4"],"type"=>'commission'])->sum("number");
  576. //线上已到账奖励
  577. $daoupprice=Db::name("user_bill")->where(["uid"=>$uid,"commission_type"=>["in","2,3,4"],"type"=>'commission'])->where(["uid"=>$uid,"status"=>1])->sum("number");
  578. return [
  579. "daylock"=> $daylock,
  580. "countlock"=> $countlock,
  581. "dayprice"=>$dayprice,
  582. "countprice"=>$countprice,
  583. "dayupprice"=>$dayupprice,
  584. "countupprice"=>$countupprice,
  585. "daoupprice"=>$daoupprice
  586. ];
  587. }
  588. public function count_price($uid,$data){
  589. $uids=Db::name("merchant")->where("mer_id",$data["mer_id"])->value("uid");
  590. $daoupprice=Db::name("user")->where(["uid"=>$uids])->value("brokerage_price");
  591. // $qiyeprice=Db::name("merchant_reconciliation")->where(["mer_id"=>$data["mer_id"],"status"=>2])->sum("price");
  592. // $daoupprice=Db::name("user_bill")->where(["uid"=>$uid,"commission_type"=>3,"type"=>'commission',"source"=>1])->sum("number");
  593. //商家线下充值获得金额
  594. //商家线下充值获得金额
  595. $offlineRecharge1 = Db::name('order_merchant')
  596. ->where("mer_id", $data["mer_id"])
  597. ->where('status', '>', 0)
  598. ->sum('money');
  599. $offlineRecharge2 = Db::name('order_merchant')
  600. ->where("mer_id", $data["mer_id"])
  601. ->where('status', '>', 0)
  602. ->sum('available');
  603. // $payPrice=getModelTime(Db::name("store_order")->where('paid', 1)->when($merId, function ($query, $merId) {
  604. // $query->where('mer_id', $merId);
  605. // }), $day, 'pay_time')->sum('pay_price');
  606. $payPrice=Db::name("store_order")->where('mer_id', $data["mer_id"])->where('paid', 1)->sum('pay_price');
  607. $offlineRecharge = bcsub($offlineRecharge1, $offlineRecharge2, 2);
  608. $qiyeprice=bcadd($offlineRecharge,$payPrice,2);
  609. return ["daoupprice"=>$daoupprice,"qiyeprice"=>$qiyeprice];
  610. }
  611. public function msg_notice($uid,$data){
  612. $page = empty($data["page"])?1:$data["page"];
  613. $limit= empty( $data["limit"])?10:$data["limit"];
  614. $list=Db::name("notice_shop")->where(["mer_id"=>$data["mer_id"],"is_del"=>0,"status"=>1])->page($page,$limit)->select()->toArray();
  615. $count=Db::name("notice_shop")->where(["mer_id"=>$data["mer_id"],"is_del"=>0,"status"=>1])->count();
  616. return ["list"=>$list,"count"=>$count];
  617. }
  618. public function del_notice($uid,$data){
  619. $list=Db::name("notice_shop")->where(["mer_id"=>$data["mer_id"],"is_del"=>0])->update(["is_del"=>1]);
  620. return $list;
  621. }
  622. public function tuijian($uid,$data){
  623. $res=Db::name("user")
  624. ->where(["mer_id"=>$data["mer_id"]])
  625. ->field("nickname,avatar,uid")
  626. ->select()->toArray();
  627. foreach ($res as &$v){
  628. $v["lock"]=1;
  629. }
  630. return $res;
  631. }
  632. public function add_user($uid,$data){
  633. $spread_uid=Db::name("merchant")->where("mer_id",$data["mer_id"])->value("uid");
  634. $user= Db::name("user")->where("account",$data["phone"])->find();
  635. if ($user){
  636. return false;
  637. }else{
  638. $data["spread"]=$spread_uid;
  639. $repository = app()->make(\app\common\repositories\user\UserRepository::class);
  640. $res = $repository->addregistr($data);
  641. }
  642. return $res;
  643. }
  644. //商户统计
  645. public function statistical_chart($uid,$merId){
  646. $date=$this->get_weeks();
  647. $categories=$date;
  648. $payPrice=[];
  649. $lockUser=[];
  650. $lockUserNo=[];
  651. foreach ($date as $v){
  652. $payPrice[]=$this->payPrice($uid,$merId,$v);
  653. $lockUser[]=$this->lockUser($uid,$merId,$v);
  654. $lockUserNo[]=$this->lockUserNo($uid,$merId,$v);
  655. $payYang[]=$this->payYang($uid,$merId,$v);
  656. }
  657. $ydPrice=[0,0,0,0,0,0,0];
  658. $series=[
  659. [
  660. "name"=>"营业收入",
  661. "data"=>$ydPrice
  662. ],
  663. [
  664. "name"=>"跨店收入",
  665. "data"=>$payPrice
  666. ],
  667. [
  668. "name"=>"锁定会员数",
  669. "data"=>$lockUser
  670. ],
  671. [
  672. "name"=>"待锁定会员",
  673. "data"=>$lockUserNo
  674. ],
  675. [
  676. "name"=>"推广收入",
  677. "data"=>$payYang
  678. ]
  679. ];
  680. return [
  681. "categories"=>$categories,
  682. "series"=>$series
  683. ];
  684. }
  685. function get_weeks($time = '', $format='Y-m-d'){
  686. $time = $time != '' ? $time : time();
  687. //组合数据
  688. $date = [];
  689. for ($i=1; $i<=7; $i++){
  690. $date[] = date($format ,strtotime( '+' . $i-7 .' days', $time));
  691. }
  692. return $date;
  693. }
  694. public function payPrice($uid,$merId,$day)
  695. {
  696. //支付金额 //也就是应到金额 //也可以是已到金额
  697. // $payPrice = getModelTime(Db::name("store_order")->where('paid', 1)->when($merId, function ($query, $merId) {
  698. // $query->where('mer_id', $merId);
  699. // }), $day, 'pay_time')->sum('pay_price');
  700. $payPrice =Db::name("store_order")
  701. ->where(['paid'=>1,"mer_id"=>$merId])
  702. ->whereTime('pay_time','between',[$day." 0:0:0",$day." 23:59:59"])
  703. ->sum('pay_price');
  704. return $payPrice;
  705. }
  706. public function lockUser($uid,$merId,$day)
  707. {
  708. //支付金额 //也就是应到金额 //也可以是已到金额
  709. // $lockUser=Db::name("store_order")
  710. // ->alias("so")
  711. // ->join("user u","u.uid=so.uid")
  712. // ->where(['paid'=>1,"so.mer_id"=>$merId,"u.mer_id"=>$merId])
  713. // ->whereTime('so.create_time','between',[$day." 0:0:0",$day." 23:59:59"])
  714. // ->group("so.uid")
  715. // ->count();
  716. $lockUser=Db::name("user")
  717. ->where(["mer_id"=>$merId])
  718. ->whereTime('locktime','between',[$day." 0:0:0",$day." 23:59:59"])
  719. ->count();
  720. // $lockUsers
  721. $lockunion_users=Db::name("union_users")
  722. ->where(["lock_mer_id"=>$merId])
  723. ->whereTime('lock_time','between',[$day." 0:0:0",$day." 23:59:59"])
  724. ->count();
  725. $lockUser=$lockUser+$lockunion_users;
  726. return $lockUser;
  727. }
  728. public function lockUserNo($uid,$merId,$day)
  729. {
  730. //待锁定
  731. $lockUserNo =Db::name("store_order")
  732. ->alias("so")
  733. ->join("user u","u.uid=so.uid")
  734. ->where(['paid'=>1,"so.mer_id"=>$merId,"u.mer_id"=>0])
  735. ->where('so.create_time','between time',[$day." 0:0:0",$day." 23:59:59"])
  736. ->group("so.uid")
  737. ->count();
  738. return $lockUserNo;
  739. }
  740. public function payYang($uid,$merId,$day)
  741. {
  742. //贡献养老金
  743. // $payYang=Db::name("store_order")
  744. // ->alias("so")
  745. // ->join("user_bill u","u.order_sn=so.order_sn")
  746. // ->where(['paid'=>1,"u.commission_type"=>3,"so.mer_id"=>$merId])
  747. // $uid
  748. $payYang=Db::name("user_bill")
  749. ->where(["commission_type"=>3,"uid"=>$uid])
  750. ->where('create_time','between time',[$day." 0:0:0",$day." 23:59:59"])
  751. ->sum("number");
  752. return $payYang;
  753. }
  754. public function get_mer_info($merId){
  755. if ($merId){
  756. $mer=Db::name("merchant")
  757. ->where("mer_id",$merId)
  758. ->field("mer_name,mer_id,mer_address,mer_avatar as mer_banner")
  759. ->find();
  760. if ($mer){
  761. // "statime"=>["<",time()],"endtime"=>[">",time()],
  762. $mer["recharge"]=Db::name("recharge")
  763. ->where(["mer_id"=>$merId])
  764. ->whereTime('statime', '<=', time()) ->whereTime('endtime', '>=', time())
  765. ->select();
  766. }
  767. return $mer;
  768. }else{
  769. return [];
  770. }
  771. }
  772. /**
  773. * 根据商户id获取锁定用户数
  774. * ljj
  775. * 2021-2-25
  776. * @param $mer_id 商户号
  777. * @return int
  778. */
  779. public function get_lock_num($mer_id){
  780. $lockUser=Db::name("user")
  781. ->where(["mer_id"=>$mer_id])
  782. ->count();
  783. $lockunion_users=Db::name("union_users")
  784. ->where(["lock_mer_id"=>$mer_id])
  785. ->count();
  786. $daylock=$lockUser+$lockunion_users;
  787. return $daylock?$daylock:0;
  788. }
  789. /**
  790. * 商户端调整
  791. * 商户会员列表
  792. * ljj 2021/2/27
  793. */
  794. public function new_mer_user($uid,$data){
  795. $where[]=["mer_id","=",$data["mer_id"]];
  796. if ($data["search"]){
  797. $where[] =["u.name","like","%".$data["search"]."%"];
  798. }
  799. $page = empty($data["page"])?1:$data["page"];
  800. $limit= empty( $data["limit"])?10:$data["limit"];
  801. $lsit= Db::name("merchant_user")
  802. ->where($where)
  803. ->page($page,$limit)
  804. ->select()->toArray();
  805. $count= Db::name("merchant_user")
  806. ->where($where)
  807. ->count();
  808. if ($lsit){
  809. return ["list"=>$lsit,"count"=>$count];
  810. }else{
  811. return [];
  812. }
  813. }
  814. /**
  815. * 商户端
  816. * ljj 2021/2/27
  817. */
  818. public function new_add_mer_user($uid,$data){
  819. $count=Db::name("merchant_user")->where("phone",$data["phone"])->count();
  820. if($count){
  821. return [];
  822. }
  823. $id = Db::name("merchant_user")->insertGetId(
  824. [
  825. "phone"=>$data["phone"],
  826. "mer_id"=>$data["mer_id"],
  827. "sex"=>$data["sex"],
  828. "birthday"=>$data["birthday"],
  829. "name"=>$data["name"],
  830. ]
  831. );
  832. $MerchantRepository = app()->make( \app\common\repositories\system\merchant\MerchantRepository::class);
  833. $codeurl=$MerchantRepository->offlineUserQrcode(intval($data["mer_id"]),$id);
  834. return Db::name("merchant_user")->where('id', $id)->update(["codeurl"=>$codeurl]);
  835. }
  836. /**
  837. * 商户端
  838. * ljj 2021/2/27
  839. * 会员详情
  840. */
  841. public function merchant_user_log($uid,$data){
  842. $userinfo=Db::name("merchant_user")->where("id",$data["uid"]) ->find();
  843. if($userinfo){
  844. $lists=Db::name("merchant_user_log")->where("uid",$userinfo["id"]) ->select()->toArray();
  845. $chonglist=[];
  846. foreach ($lists as $vs){
  847. $chonglist[]= [
  848. "title"=>$vs["pm"]?"充值":"消费",
  849. "refund_price"=>$vs["number"],
  850. "price"=>$vs["number"],
  851. "mark"=>$vs["mark"],
  852. "create_time"=>$vs["create_time"],
  853. "pm"=>$vs["pm"]
  854. ];
  855. }
  856. return ["user_info"=>$userinfo,"consumption"=>$chonglist];
  857. }else{
  858. return ["user_info"=>[],"consumption"=>[]];
  859. }
  860. }
  861. /**
  862. * 会员管理
  863. * 操作金额 减
  864. */
  865. public function reduce_money($uid,$data){
  866. $money=Db::name("merchant_user")->where("id",$data["id"])->value("money");
  867. if ($money<$data["money"]){
  868. return [];
  869. }
  870. $number=round($data["money"],2);
  871. $data=[
  872. "uid"=>$data["id"],
  873. "pm"=>0,
  874. "title"=>"消费",
  875. "number"=>$number,
  876. "mark"=>"消费",
  877. "status"=>1,
  878. "mer_id"=>$data["mer_id"],
  879. ];
  880. Db::name("merchant_user_log")->insert($data);
  881. Db::name("merchant_user")->where("id",$uid)->dec('money', $number) ->update();
  882. return true;
  883. }
  884. /**
  885. * 绑定音响
  886. * @Author:lin
  887. * @Date: 2021/3/29
  888. */
  889. public function set_yx($data){
  890. $where=[];
  891. $where["mer_id"]=$data["mer_id"];
  892. $where['status'] = 1;
  893. $check=Db::name("merchant_yx")
  894. ->where($where)
  895. ->find();
  896. if($check){
  897. return ["code"=>0,"msg"=>"此商户已绑定音响"];
  898. }
  899. $check1 = Db::name("merchant_yx")
  900. ->where('sn',$data['sn'])
  901. ->where('status',1)
  902. ->find();
  903. Log::info("=====================".Db::name("merchant_yx") -> getLastSql());
  904. if($check1){
  905. return ["code"=>0,"msg"=>"此音响已被绑定"];
  906. }
  907. if(!is_numeric($data['sn'])){
  908. return ["code"=>0,"msg"=>"二维码无效"];
  909. }
  910. $mer=Db::name("merchant_yx")
  911. ->insert(
  912. [
  913. "uid"=>$data['uid'],
  914. "mer_id"=>$data["mer_id"],
  915. "sn"=>$data['sn'],
  916. "status"=>1
  917. ]
  918. );
  919. if ($mer){
  920. return ["code"=>1,"msg"=>"绑定成功"];
  921. }
  922. return ["code"=>0,"msg"=>"绑定失败"];
  923. }
  924. //每周需释放消费分列表
  925. public function consumptionScoreList(){
  926. return Db::name('merchant_consumption_score') -> where('stages > 0 and surplus_score > 0') -> select();
  927. }
  928. //消费分处理
  929. public function consumptionScore($mer_id,$uid,$consumption_score,$surplus_score,$stages,$id=0){
  930. if($id == 0){
  931. $ins = [
  932. 'mer_id' => $mer_id,
  933. 'uid' => $uid,
  934. 'consumption_score' => $consumption_score,
  935. 'surplus_score' => $surplus_score,
  936. 'stages' => $stages,
  937. 'add_time' => time()
  938. ];
  939. Db::name('merchant_consumption_score') -> insert($ins);
  940. //商户表增加相应消费分
  941. Db::name('merchant') -> where('mer_id',$mer_id) -> inc('score',$consumption_score);
  942. }else{
  943. $c = Db::name('merchant_consumption_score') -> where('id',$id) -> find();
  944. $sf = bcdiv($c['surplus_score'] , $c['stages'],2);//释放分 剩余分 除以 剩余期数
  945. $update = [
  946. 'surplus_score' => bcsub($c['surplus_score'],$sf,2),
  947. 'stages' => $c['stages'] - 1
  948. ];
  949. //消费分表修改期数与剩余消费分
  950. Db::name('merchant_consumption_score') -> where('id',$id) -> update($update);
  951. //商户表减少相应消费分
  952. Db::name('merchant') -> where('mer_id',$mer_id) -> dec('score',$sf);
  953. //消费分记录表
  954. $this -> consumptionScoreLog($mer_id,$uid,$sf,'释放消费分',1,2);
  955. //消费分变成积分
  956. $userRepository = app()->make(UserRepository::class);
  957. $userRepository -> sign_add($uid,$sf,1,'商户释放消费分','','','');
  958. //消费分状态改为已释放
  959. $startTime = strtotime('last week 00:00:00');
  960. $endTime = strtotime('this week 00:00:00 -1second');
  961. Db::name('merchant_consumption_score_log')
  962. -> where('mer_id',$mer_id)
  963. ->where('status',3)
  964. ->where("update_time >= '$startTime' and update_time <= '$endTime'")
  965. -> update(['status'=>1]);
  966. }
  967. }
  968. public function getConsumptionScoreLog($mer_id){
  969. $startTime = strtotime('last week 00:00:00');
  970. $endTime = strtotime('this week 00:00:00 -1second');
  971. return Db::name('merchant_consumption_score_log')
  972. -> where('mer_id',$mer_id)
  973. ->where('status',3)
  974. ->where("update_time >= '$startTime' and update_time <= '$endTime'")
  975. -> sum('consumption_score');
  976. }
  977. public function consumptionScoreLog($mer_id,$uid,$consumption_score,$mark,$status=1,$pm=1,$order_id='',$source=0){
  978. $merchant = Db::name('merchant') -> where('mer_id',$mer_id) -> field('score,uid,consumption_score') -> find();
  979. if($merchant['consumption_score'] != 1) return false;
  980. if($uid == 0){
  981. $uid = $merchant['uid'];
  982. }
  983. $ins = [
  984. 'mer_id' => $mer_id,
  985. 'uid' => $uid,
  986. 'consumption_score' => $consumption_score,
  987. 'pm' => $pm,
  988. 'mark' => $mark,
  989. 'status' => $status,
  990. 'order_id' => $order_id,
  991. 'add_time' => time(),
  992. 'source' => $source,
  993. 'update_time' => time(),
  994. 'surplus' => $merchant['score']
  995. ];
  996. Db::name('merchant_consumption_score_log') -> insert($ins);
  997. }
  998. }