UserThirdRepository.php 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034
  1. <?php
  2. /**
  3. * @package merchant
  4. *
  5. * @author xaboy
  6. * @day 2020-04-28
  7. *
  8. *
  9. */
  10. namespace app\common\repositories\user;
  11. use app\common\dao\user\UserThirdDao;
  12. use app\common\enum\shared\SharedProsperityRewardRecordEnum;
  13. use app\common\model\user\User;
  14. use app\common\repositories\BaseRepository;
  15. use app\common\repositories\shared\SharedProsperityRewardRecordRepository;
  16. use app\common\repositories\shared\SharedProsperityUserRepository;
  17. use app\common\repositories\store\order\StoreOrderRepository;
  18. use app\common\repositories\store\product\ProductRepository;
  19. use app\model\common\TbOrderModel;
  20. use think\exception\ValidateException;
  21. use think\facade\Log;
  22. use think\test\queue\LoopBreakerException;
  23. use function GuzzleHttp\Psr7\str;
  24. use think\facade\Db;
  25. //use think\Db;
  26. /**
  27. * Class UserRepository
  28. * @package app\common\repositories\user
  29. * @author xaboy
  30. * @day 2020-04-28
  31. * @mixin UserThirdDao
  32. */
  33. class UserThirdRepository extends BaseRepository
  34. {
  35. /**
  36. * UserRepository constructor.
  37. * @param UserThirdDao $dao
  38. */
  39. public function __construct(UserThirdDao $dao)
  40. {
  41. $this->dao = $dao;
  42. }
  43. /*创建用户第三方pid*/
  44. public function createPid($data = [])
  45. {
  46. $res = Db::name("user_third")->insertGetId($data);
  47. return $res;
  48. }
  49. /*获取第三方pid*/
  50. public function getDetail($where = [], $field = "*")
  51. {
  52. $res = Db::name("user_third")->where($where)->field($field)->find();
  53. return $res;
  54. }
  55. /*获取配置信息*/
  56. public function config()
  57. {
  58. $config = $data = [
  59. 'promoter_rate_technology' => systemConfig('promoter_rate_technology'), //技术服务费
  60. 'yanglao_Meeting' => systemConfig('yanglao_Meeting'),//会费比例
  61. 'yanglao_Meeting_total' => systemConfig('yanglao_Meeting_total'),//会费总金额
  62. 'yanglaojin_admin' => systemConfig('yanglaojin_admin'), //养老金比例
  63. 'mer_rate' => systemConfig('mer_rate'), //商家比例
  64. 'third_day' => systemConfig('third_day'), //第三方订单结算天数
  65. ];
  66. return $config;
  67. }
  68. /*获取信息*/
  69. public function getOrderDetail($table, $where = [], $field = "*")
  70. {
  71. $res = DB::name("$table")->where($where)->field($field)->find();
  72. return $res;
  73. }
  74. /*创建订单*/
  75. public function createOrder($table, $data, $time = 0)
  76. {
  77. //获取订单结算时间
  78. $day = $this->config();
  79. if ($time > 0) {
  80. $data['bill_end_time'] = $time + $day['third_day'] * 24 * 60 * 60;
  81. }
  82. $res = Db::name("$table")->insertGetId($data);
  83. return $res;
  84. }
  85. //获取第三方订单的计算时间
  86. public function getSettleTime($time)
  87. {
  88. //获取订单结算时间
  89. $day = $this->config();
  90. if ($time > 0) {
  91. $time = $time + $day['third_day'] * 24 * 60 * 60;
  92. }
  93. return $time;
  94. }
  95. /*修改订单*/
  96. public function saveOrder($table, $where = [], $data = [])
  97. {
  98. $res = Db::name("$table")->where($where)->update($data);
  99. return $res;
  100. }
  101. /*计算用户本年已经扣除的会费*/
  102. public function getTotalHui($uid)
  103. {
  104. $data = Db::name("admin_bill")->where(['pm' => 0, 'status' => 1, 'type' => 2, 'link_id' => $uid])->count("number");
  105. return $data;
  106. }
  107. /*获取用户商家信息*/
  108. public function getMer($uid)
  109. {
  110. $data = Db::name("user")->where(['uid' => $uid])->value("mer_id");
  111. return $data;
  112. }
  113. /*处理订单反养老金逻辑
  114. *$order_id 订单id
  115. *$commission 佣金
  116. * $pid 用户广告位id
  117. * $order_sn 订单号
  118. * $table 表名
  119. */
  120. public function successOrder($order_id, $commission, $pid, $order_sn, $type, $table)
  121. {
  122. try {
  123. $bill= Db::name("user_bill")->where("order_sn",$order_sn)->select();
  124. foreach ($bill as $v){
  125. if ($v["commission_type"]==5){
  126. Db::name("user")->where("uid",$v["uid"])->inc('annuity',$v["number"]) ->update();
  127. Db::name("user")->where("uid",$v["uid"])->inc('annuity_num', 1) ->update();
  128. }else{
  129. if($v['title']!='平台奖励'){
  130. Db::name("user")->where("uid",$v["uid"])->inc('brokerage_price', $v["number"]) ->update();
  131. }else{
  132. Db::name("user")->where("uid",$v["uid"])->inc('now_score', $v["number"]) ->update();
  133. }
  134. }
  135. $annuity_once = Db::name("user")->where("uid",$v['uid'])->value('annuity_once');
  136. if($annuity_once == 0){
  137. $spreadUid = Db::name('user') -> where('uid',$v['uid']) -> value('spread_uid');
  138. // Db::name('user')->where('uid',$spreadUid)->inc('score', systemConfig('ylj_first_score'))->update();
  139. // $ins_data['uid'] = $spreadUid;
  140. // $ins_data['reward_socre'] = systemConfig('ylj_first_score');
  141. // $ins_data['addtime'] = time();
  142. // $ins_data['status'] = 1;
  143. // $ins_data['mark'] = '好友首次获得已结算养老金奖励积分';
  144. // Db::name('user_sign_score')->insert($ins_data);
  145. // $userRepository = app()->make(UserRepository::class);
  146. // $userRepository -> sign_add($spreadUid,systemConfig('ylj_first_score'),1,'好友首次获得已结算养老金奖励积分','','','');
  147. Db::name("user")->where("uid",$v['uid'])->update(['annuity_once'=>1]);
  148. }
  149. }
  150. Db::name("user_bill")->where("order_sn",$order_sn)->update(["status"=>1]);
  151. $orderUpdate = ['bill_status' => 1];
  152. if ($type == 6) {//京东订单
  153. $orderUpdate['bill_create_time'] = time();
  154. } else {
  155. $orderUpdate['bill_create_time'] = date("Y-m-d H:i:s");
  156. }
  157. Db::name("$table")->where($table . "_id", $order_id)->update($orderUpdate);
  158. } catch (\Exception $e) {
  159. log::error($e->getFile().':'.$e->getLine().'【'.$e->getMessage().'】');
  160. throw new ValidateException($e->getMessage());
  161. }
  162. }
  163. public function invalidOrder($order_sn){
  164. return Db::name("user_bill")->where("order_sn",$order_sn)->update(["status"=>-1]);
  165. }
  166. /*处理订单预估反养老金逻辑
  167. *$order_id 订单id
  168. *$commission 佣金
  169. * $pid 用户广告位id
  170. * $order_sn 订单号
  171. * $table 表名
  172. */
  173. public function yuguOrder($order_id, $commission, $pid, $order_sn, $type, $table)
  174. {
  175. //配置信息
  176. // $config = $this->config();
  177. //用户pid信息
  178. // if ($type == 6) {//京东联盟改成京推推
  179. // $user['uid'] = intval($pid - pow(10, 5));
  180. // } else {
  181. // $user = $this->getDetail(['pid' => $pid, 'type' => $type]);
  182. // }
  183. //用户商家信息
  184. $user_mer = $this->getMer($pid);
  185. try {
  186. $money=$commission;
  187. //返佣比例
  188. $base_commission= floatval(systemConfig('extension_tao_rate'));
  189. //刷卡手续费
  190. $souxufees=0;
  191. $souxufee =floatval(systemConfig('yanglao'));
  192. if ($souxufee){
  193. $souxufees = bcmul($money, $souxufee * 0.01, 3);
  194. }
  195. //返佣总额 返利总额=(交易金额-手续费)*返利比例
  196. $moneys=bcmul($money-$souxufees,$base_commission/100,3);
  197. $extension_one=$moneys;
  198. $order=[
  199. "order_sn"=>$order_sn,
  200. "order_id"=>$order_id,
  201. "uid"=>$pid,
  202. "mer_id"=>$user_mer,
  203. "total_price"=>$commission,
  204. "extension_one"=>$extension_one,
  205. "type_shop"=>$type,
  206. "table"=>$table
  207. ];
  208. /** @var StoreOrderRepository $StoreOrderRepository */
  209. $StoreOrderRepository = app()->make(StoreOrderRepository::class);
  210. // $StoreOrderRepository->yugu_rebate($order);
  211. log::info("===待进入养老金22222222222");
  212. $StoreOrderRepository->yugu_rebate_gong_fu($order);
  213. // $money_hui = 0;
  214. // $money_user = 0;
  215. // $money_jishu = 0;
  216. // $money_mer = 0;
  217. // //给用户返
  218. // $huiTotal = $this->getTotalHui($user['uid']); //计算已经扣除的会费
  219. // if ($huiTotal < $config['yanglao_Meeting_total']) {
  220. // $money_hui = $commission * ($config['yanglaojin_admin'] / 100) * ($config['yanglao_Meeting'] / 100);//会费
  221. // //存储会费记录
  222. // if (number_format($money_hui, 2) >= 0.01) {
  223. // $this->admin_bill($user['uid'], $money_hui, '养老金扣除会费' . $config['yanglao_Meeting'] . '%', '第三方平台', $order_sn, '2');
  224. // }
  225. // $money_user = ($commission * $config['yanglaojin_admin']) / 100 - $money_hui;//养老金
  226. // } else {
  227. // $money_user = $commission * $config['yanglaojin_admin'] / 100;
  228. // }
  229. //// if (number_format($money_user, 2) >= 0.01) {
  230. //// $this->add_bill($order_id, $user['uid'], $money_user, $order_sn, $type, '购买商品获得养老金' . $config['yanglaojin_admin'] . '%', '第三方平台',$type,0);
  231. //// //修改用户养老金信息
  232. //// Db::name("user")->where("uid", $user['uid'])->inc('annuity', $money_user)->update();
  233. //// }
  234. // //给用户所属商家返
  235. // if ($user_mer) {
  236. // $money_jishu = $commission * $config['mer_rate'] / 100 * $config['promoter_rate_technology'] / 100;
  237. // $money_mer = $commission * $config['mer_rate'] / 100 - $money_jishu;
  238. // if (number_format($money_jishu, 2) >= 0.01) {
  239. // $this->admin_bill($user_mer, $money_jishu, '佣金扣除技术服务费' . $config['yanglao_Meeting'] . '%', '第三方平台', $order_sn, '4');
  240. // }
  241. // if (number_format($money_mer, 2) >= 0.01) {
  242. // $this->add_bill($order_id, $user_mer, $money_mer, $order_sn, $type, '用户购买商品获得佣金' . $config['mer_rate'] . '%', '第三方平台',$type,0);
  243. // //修改商户佣金
  244. // Db::name("user")->where("uid", $user_mer)->inc('brokerage_price', $money_mer)->update();
  245. // }
  246. // }
  247. // //所有金额都小于0.01 佣金金额全归平台所有
  248. // if (number_format($money_hui, 2) <= 0 && number_format($money_jishu, 2) <= 0 && number_format($money_user, 2) <= 0 && number_format($money_mer, 2) <= 0) {
  249. // $this->admin_bill($user['uid'], $commission, '分成后所有金额小于一分存于平台', '第三方平台,不参与用户分成', $order_sn, '5');
  250. // }
  251. //修改订单结算状态
  252. // $orderUpdate = ['bill_status' => 1];
  253. // if ($type == 6) {//京东订单
  254. // $orderUpdate['bill_create_time'] = time();
  255. // } else {
  256. // $orderUpdate['bill_create_time'] = date("Y-m-d H:i:s");
  257. // }
  258. // Db::name("$table")->where($table . "_id", $order_id)->update($orderUpdate);
  259. } catch (\Exception $e) {
  260. throw new ValidateException($e->getMessage());
  261. }
  262. }
  263. /*处理订单预估反养老金逻辑
  264. *$order_id 订单id
  265. *$commission 佣金
  266. * $pid 用户广告位id
  267. * $order_sn 订单号
  268. * $table 表名
  269. */
  270. public function repurchaseAreaEstimateAnnuityOrder($order_id, $commission, $pid, $order_sn, $type, $table)
  271. {
  272. //用户商家信息
  273. // $user_mer = $this->getMer($pid);
  274. try {
  275. $money=$commission;
  276. //返佣比例
  277. $base_commission= floatval(systemConfig('extension_tao_rate'));
  278. //刷卡手续费
  279. $souxufees=0;
  280. $souxufee =floatval(systemConfig('yanglao'));
  281. if ($souxufee){
  282. $souxufees = bcmul($money, $souxufee * 0.01, 3);
  283. }
  284. //返佣总额 返利总额=(交易金额-手续费)*返利比例
  285. $moneys=bcmul($money-$souxufees,$base_commission/100,3);
  286. $extension_one=$moneys;
  287. $order=[
  288. "order_sn"=>$order_sn,
  289. "order_id"=>$order_id,
  290. "uid"=>$pid,
  291. "mer_id"=>Db::name("store_order")->where("order_id",$order_id)->value("mer_id"),
  292. "total_price"=>$commission,
  293. "extension_one"=>$extension_one,
  294. "type_shop"=>$type,
  295. "table"=>$table
  296. ];
  297. /** @var StoreOrderRepository $StoreOrderRepository */
  298. $StoreOrderRepository = app()->make(StoreOrderRepository::class);
  299. // @todo 复购区养老金
  300. $StoreOrderRepository->repurchaseAreaEstimateAnnuity($order);
  301. } catch (\Exception $e) {
  302. throw new ValidateException($e->getMessage());
  303. }
  304. }
  305. /**
  306. * 平台账单记录
  307. * `type` int(1) DEFAULT '0' COMMENT '类型 1刷卡手续费 2 会费',
  308. * `number` decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '明细数字',
  309. * `title` varchar(64) NOT NULL COMMENT '账单标题',
  310. * `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0 = 待确定 1 = 有效 -1 = 无效',
  311. */
  312. public function admin_bill($uid, $number, $title, $mark, $order_sn, $type)
  313. {
  314. $number = round($number, 2);
  315. $data = [
  316. 'link_id' => $uid,
  317. "pm" => 1,
  318. "title" => $title,
  319. // "category"=>"now_money",
  320. "type" => $type,
  321. "number" => $number,
  322. // "balance"=>0,
  323. "mark" => $mark,
  324. "status" => 1,
  325. "order_sn" => $order_sn,
  326. ];
  327. Db::name("admin_bill")->insert($data);
  328. }
  329. /**
  330. * 账单记录
  331. * @param $order
  332. * @param $spread_uid
  333. * @param $commission
  334. * @param string $title
  335. * @param $mark
  336. * @throws \think\db\exception\DbException
  337. */
  338. public function add_bill($order_id, $uid, $commission, $order_sn, $type, $title = "养老金", $mark = '',$type_shop=0,$status=1)
  339. {
  340. $data = [
  341. 'link_id' => $order_id,
  342. "uid" => $uid,
  343. "title" => $title,
  344. "category" => "now_money",
  345. "type" => "commission",
  346. "number" => $commission,
  347. "balance" => 0,
  348. "mark" => $mark,
  349. "status" =>$status,
  350. // 'type' => $type,
  351. "commission_type" => 3,
  352. "order_sn" => $order_sn,
  353. "type_shop"=>$type_shop
  354. ];
  355. Db::name("user_bill")->insert($data);
  356. // Db::name("user")->where("uid",$spread_uid)->inc('brokerage_price', $commission) ->update();
  357. }
  358. /*淘宝物料分类*/
  359. public function getMaterial()
  360. {
  361. $data = Db::name("material")->where(['status' => 1])->select();
  362. return $data;
  363. }
  364. /*京东订单*/
  365. public function GetJdOrder($where = [], $page = 1, $limit = 10)
  366. {
  367. $query = Db::name("order_jd");
  368. $query = $query->when(isset($where['date']) && $where['date'] != '', function ($query) use ($where) {
  369. getModelTime($query, $where['date']);
  370. })->when(isset($where['status']) && $where['status'] != '', function ($query) use ($where) {
  371. $query->where('status', $where['status']);
  372. })->when(isset($where['order_sn']) && $where['order_sn'] != '', function ($query) use ($where) {
  373. $query->where('order_sn', $where['order_sn']);
  374. })->when($where['bill_status'] != '', function ($query) use ($where) {
  375. $query->where('bill_status', $where['bill_status']);
  376. })->when(isset($where['keywords']) && $where['keywords'] != '', function ($query) use ($where) {
  377. $query->whereLike("shop_name|uid", "%" . $where['keywords'] . "%");
  378. });
  379. $count = $query->count();
  380. $list = $query->page($page, $limit)->order('order_jd_id DESC')->select();
  381. $sql = $query->getLastSql();
  382. $userList = User::whereIn('uid', $list->column('uid'))->column('*', 'uid');
  383. $list->each(function ($value) use ($userList) {
  384. $info = $userList[$value['uid']] ?? [];
  385. if ($info) {
  386. $value['account'] = $info['account'];
  387. } else {
  388. $value['account'] = '匹配用户不存在';
  389. }
  390. return $value;
  391. });
  392. return compact('count', 'list', 'sql');
  393. }
  394. /*拼多多订单*/
  395. public function GetPddOrder($where = [], $page = 1, $limit = 10)
  396. {
  397. $query = Db::name("order_pdd");
  398. $query = $query->when(isset($where['date']) && $where['date'] != '', function ($query) use ($where) {
  399. getModelTime($query, $where['date']);
  400. })->when(isset($where['pin_order_status']) && $where['pin_order_status'] != '', function ($query) use ($where) {
  401. $query->where('pin_order_status', $where['pin_order_status']);
  402. })->when(isset($where['order_sn']) && $where['order_sn'] != '', function ($query) use ($where) {
  403. $query->where('order_sn', $where['order_sn']);
  404. })->when($where['bill_status'] != '', function ($query) use ($where) {
  405. $query->where('bill_status', $where['bill_status']);
  406. })->when(isset($where['keywords']) && $where['keywords'] != '', function ($query) use ($where) {
  407. $query->whereLike("goods_name|uid", "%" . $where['keywords'] . "%");
  408. });
  409. $count = $query->count();
  410. $list = $query->page($page, $limit)->order('create_time DESC')->select();
  411. $userList = User::whereIn('uid', $list->column('uid'))->column('*', 'uid');
  412. $list->each(function ($value) use ($userList) {
  413. $info = $userList[$value['uid']] ?? [];
  414. if ($info) {
  415. $value['account'] = $info['account'];
  416. } else {
  417. $value['account'] = '匹配用户不存在';
  418. }
  419. return $value;
  420. });
  421. return compact('count', 'list');
  422. }
  423. /*唯品会订单*/
  424. public function GetVipOrder($where = [], $page = 1, $limit = 10)
  425. {
  426. $query = Db::name("order_vip");
  427. $query = $query->when(isset($where['date']) && $where['date'] != '', function ($query) use ($where) {
  428. getModelTime($query, $where['date']);
  429. })
  430. ->when(isset($where['settled']) && $where['settled'] != '', function ($query) use ($where) {
  431. $query->where('settled', $where['settled']);
  432. })->when(isset($where['order_status']) && $where['order_status'] != '', function ($query) use ($where) {
  433. $query->where('order_status', $where['order_status']);
  434. })->when(isset($where['order_sn']) && $where['order_sn'] != '', function ($query) use ($where) {
  435. $query->where('order_sn', $where['order_sn']);
  436. })->when($where['bill_status'] != '', function ($query) use ($where) {
  437. $query->where('bill_status', $where['bill_status']);
  438. })->when(isset($where['keywords']) && $where['keywords'] != '', function ($query) use ($where) {
  439. $query->whereLike("goods_name|uid", "%" . $where['keywords'] . "%");
  440. });
  441. $count = $query->count();
  442. $list = $query->page($page, $limit)->order('order_vip_id DESC')->select()->each(function ($value) {
  443. $orderTime = $value['order_time'];
  444. // $value['order_time'] = date('Y-m-d H:i:s', $orderTime);
  445. //订单关联用户信息
  446. $value['account'] = User::where('uid', $value['uid'])->value('account', '匹配用户不存在');
  447. return $value;
  448. });
  449. return compact('count', 'list');
  450. }
  451. /*苏宁订单*/
  452. public function GetSuOrder($where = [], $page = 1, $limit = 10)
  453. {
  454. $query = Db::name("order_su");
  455. $query = $query->when(isset($where['date']) && $where['date'] != '', function ($query) use ($where) {
  456. getModelTime($query, $where['date']);
  457. })->when(isset($where['status']) && $where['status'] != '', function ($query) use ($where) {
  458. $query->where('status', $where['status']);
  459. })->when(isset($where['order_sn']) && $where['order_sn'] != '', function ($query) use ($where) {
  460. $query->where('order_sn', $where['order_sn']);
  461. })->when($where['bill_status'] != '', function ($query) use ($where) {
  462. $query->where('bill_status', $where['bill_status']);
  463. })->when(isset($where['keywords']) && $where['keywords'] != '', function ($query) use ($where) {
  464. $query->whereLike("goods_name|uid", "%" . $where['keywords'] . "%");
  465. });
  466. $count = $query->count();
  467. $list = $query->page($page, $limit)->order('create_time DESC')->select()->each(function ($value) {
  468. $orderTime = $value['order_time'];
  469. $value['order_time'] = date('Y-m-d H:i:s', $orderTime);
  470. $payTime = $value['pay_time'];
  471. $value['pay_time'] = date('Y-m-d H:i:s', $payTime);
  472. //订单关联用户信息
  473. $value['account'] = User::where('uid', $value['uid'])->value('account', '匹配用户不存在');
  474. return $value;
  475. });
  476. return compact('count', 'list');
  477. }
  478. /*淘宝订单*/
  479. public function GetTbOrder($where = [], $page = 1, $limit = 10)
  480. {
  481. $query = Db::name("order_tb");
  482. $query = $query->when(isset($where['date']) && $where['date'] != '', function ($query) use ($where) {
  483. getModelTime($query, $where['date']);
  484. })->when(isset($where['tk_status']) && $where['tk_status'] != '', function ($query) use ($where) {
  485. $query->where('tk_status', $where['tk_status']);
  486. })->when(isset($where['order_sn']) && $where['order_sn'] != '', function ($query) use ($where) {
  487. $query->where('order_sn', $where['order_sn']);
  488. })->when($where['bill_status'] != '', function ($query) use ($where) {
  489. $query->where('bill_status', $where['bill_status']);
  490. })->when(isset($where['keywords']) && $where['keywords'] != '', function ($query) use ($where) {
  491. $query->whereLike("item_title|uid", "%" . $where['keywords'] . "%");
  492. });
  493. $count = $query->count();
  494. $list = $query->page($page, $limit)->order('create_time DESC')->select()->each(function ($value) {
  495. $orderTime = $value['create_time'];
  496. // $value['create_time'] = date('Y-m-d H:i:s', $orderTime);
  497. //淘客订单状态
  498. $tkStatus = $value['tk_status'];
  499. $tkStatusName = TbOrderModel::$statusName[$tkStatus] ?? '未知状态';
  500. $value['status_name'] = $tkStatusName;
  501. //订单关联用户信息
  502. $value['account'] = User::where('uid', $value['uid'])->value('account', '匹配用户不存在');
  503. return $value;
  504. });
  505. return compact('count', 'list');
  506. }
  507. /*话费订单*/
  508. public function GetHfOrder($where = [], $page = 1, $limit = 10)
  509. {
  510. $query = Db::name("order_huafei");
  511. $query = $query->when(isset($where['date']) && $where['date'] != '', function ($query) use ($where) {
  512. getModelTime($query, $where['date']);
  513. })->when(isset($where['status']) && $where['status'] != '', function ($query) use ($where) {
  514. $query->where('status', $where['status']);
  515. })->when(isset($where['order_sn']) && $where['order_sn'] != '', function ($query) use ($where) {
  516. $query->where('order_sn', $where['order_sn']);
  517. })->when($where['bill_status'] != '', function ($query) use ($where) {
  518. $query->where('bill_status', $where['bill_status']);
  519. })->when(isset($where['keywords']) && $where['keywords'] != '', function ($query) use ($where) {
  520. $query->whereLike("mobile|uid", "%" . $where['keywords'] . "%");
  521. });
  522. $count = $query->count();
  523. $list = $query->page($page, $limit)->order('create_time DESC')->select()->each(function ($value) {
  524. // $value['create_time'] = date('Y-m-d H:i:s', $value['create_time']);
  525. //淘客订单状态
  526. // $tkStatus = $value['status'];
  527. // $tkStatusName = TbOrderModel::$statusName[$tkStatus] ?? '未知状态';
  528. // $value['status_name'] = $tkStatusName;
  529. //订单关联用户信息
  530. $value['account'] = User::where('uid', $value['uid'])->value('account', '匹配用户不存在');
  531. return $value;
  532. });
  533. return compact('count', 'list');
  534. }
  535. /*详情*/
  536. public function GetThirdDetail($id, $table)
  537. {
  538. $data = Db::name("order_" . $table)->where(['order_' . $table . '_id' => $id])->find();
  539. //养老金修改
  540. $commission = $data['commission'];
  541. $yanglao = 0;
  542. if ($commission) {
  543. $yanglao = app()->make(ProductRepository::class)->yanglaojin(0, $commission);
  544. }
  545. $data['yanglao'] = $yanglao;
  546. switch ($table) {
  547. case 'jd':
  548. $billEndTime = $data['bill_end_time'];
  549. $data['bill_end_time'] = $billEndTime ? date('Y-m-d H:i:s', $billEndTime) : '';
  550. break;
  551. case 'vip':
  552. $orderTime = $data['order_time'];
  553. $data['order_time'] = date('Y-m-d H:i:s', $orderTime);
  554. $updateTime = $data['last_update_time'];
  555. $data['last_update_time'] = date('Y-m-d H:i:s', $updateTime);
  556. $billEndTime = $data['bill_end_time'];
  557. $data['bill_end_time'] = $billEndTime ? date('Y-m-d H:i:s', $billEndTime) : '';
  558. break;
  559. case 'pdd':
  560. $payTime = $data['pay_time'];
  561. $data['pay_time'] = $payTime ? date('Y-m-d H:i:s', $payTime) : '';
  562. $groupTime = $data['group_time'];
  563. $data['group_time'] = $groupTime ? date('Y-m-d H:i:s', $groupTime) : '';
  564. $billEndTime = $data['bill_end_time'];
  565. $data['bill_end_time'] = $billEndTime ? date('Y-m-d H:i:s', $billEndTime) : '';
  566. break;
  567. case 'su':
  568. $payTime = $data['pay_time'];
  569. $data['pay_time'] = $payTime ? date('Y-m-d H:i:s', $payTime) : '';
  570. $billEndTime = $data['bill_end_time'];
  571. $data['bill_end_time'] = $billEndTime ? date('Y-m-d H:i:s', $billEndTime) : '';
  572. break;
  573. case 'tb':
  574. $createTime = $data['create_time'];
  575. $data['create_time'] = $createTime ? $createTime : '';
  576. $billEndTime = $data['bill_end_time'];
  577. $data['bill_end_time'] = $billEndTime ? date('Y-m-d H:i:s', $billEndTime) : '';
  578. break;
  579. case 'huafei':
  580. $createTime = $data['create_time'];
  581. $data['create_time'] = $createTime ? $createTime : '';
  582. $billEndTime = $data['bill_end_time'];
  583. $data['bill_end_time'] = $billEndTime ? date('Y-m-d H:i:s', $billEndTime) : '';
  584. break;
  585. }
  586. return $data;
  587. }
  588. /*pdd满足分佣的订单*/
  589. public function pddOrder()
  590. {
  591. $query = Db::name("order_pdd");
  592. $data = $query->where(['pin_order_status' => 5, 'bill_status' => 0])
  593. ->whereTime("bill_end_time", '<=', time())
  594. ->order('create_time DESC')
  595. ->select()->toArray();
  596. return $data;
  597. }
  598. /*京东满足分佣的订单*/
  599. public function JdOrder()
  600. {
  601. $query = Db::name("order_jd");
  602. $data = $query->where(['status' => 17, 'bill_status' => 0])
  603. ->whereTime("bill_end_time", '<=', time())
  604. ->order('order_jd_id DESC')
  605. ->select()->toArray();
  606. return $data;
  607. }
  608. /*抖音满足分佣的订单*/
  609. public function dyOrder()
  610. {
  611. $query = Db::name("order_dy");
  612. $data = $query->where(['flow_point' => 'SETTLE', 'bill_status' => 0])
  613. ->whereTime("bill_end_time", '<=', time())
  614. ->order('order_dy_id DESC')
  615. ->select()->toArray();
  616. return $data;
  617. }
  618. /*苏宁满足分佣的订单*/
  619. public function SuOrder()
  620. {
  621. $query = Db::name("order_su");
  622. $data = $query->where(['status' => '已结算', 'bill_status' => 0])
  623. ->whereTime("bill_end_time", '<=', time())
  624. ->order('create_time DESC')
  625. ->select()->toArray();
  626. return $data;
  627. }
  628. /**
  629. * 修改积分,养老金,贡献值记录状态
  630. */
  631. public static function updateJilu($user_id,$order_id,$type_shop){
  632. // if (empty($user_id)) {
  633. // Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, $order_sn, 修改积分,养老金,贡献值记录, 不存在用户ID"]);
  634. // return false;
  635. // }
  636. log::info("订单修改开始");
  637. // 更新养老金
  638. Db::name("user_bill")->where("type_shop", $type_shop)->where("link_id", $order_id)->update(['status'=>-1]);
  639. //更新积分
  640. Db::name("user_sign_score")->where("order_type", $type_shop)->where("order_id", $order_id)->update(['status'=>0]);
  641. //更新贡献值
  642. Db::name("user_sign_gongxian")->where("order_type", $type_shop)->where("order_id", $order_id)->update(['status'=>0]);
  643. //更新红包
  644. Db::name("user_sign_hongbao")->where("order_type", $type_shop)->where("order_id", $order_id)->update(['status'=>0]);
  645. log::info("订单 {$order_id} 用户id ={$user_id} 三方来源={$type_shop} 积分,贡献值,养老金,红包更新更新");
  646. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_id, $order_id, 修改积分,养老金,贡献值,红包记录, 更新成功!!!"]);
  647. }
  648. //添加预估复购金记录
  649. public static function yuguFugou($price,$user_id,$order_sn,$type_shop){
  650. try {
  651. $inc_score = $price * 0.1;//推广者的佣金抽10%到个人复购金
  652. $make="";
  653. if($type_shop==1){
  654. $make="拼多多";
  655. }else if($type_shop==5){
  656. $make="淘宝";
  657. }else if($type_shop==6){
  658. $make="京东";
  659. }else if($type_shop==3){
  660. $make="苏宁";
  661. }else if($type_shop==2){
  662. $make="唯品会";
  663. }else if($type_shop==9){
  664. $make="话费";
  665. }
  666. $bill = [
  667. 'uid'=>$user_id,
  668. 'number'=>$inc_score,//数量
  669. 'status'=>-1,//复购金状态1-有效 0-失效 -1待确认
  670. 'mark'=>"购买{$make}商品赠送复购金",//备注
  671. 'order_id'=>$order_sn,//订单id
  672. 'surplus'=>0,//剩余
  673. 'order_type'=>$type_shop,//关联订单ID
  674. 'type'=>1,//复购金类型 :1赠送,2消耗
  675. 'settlement_time'=>date('Y-m-d H:i:s'),//添加时间,
  676. 'addtime'=>time(),
  677. ];
  678. Db::name('user_sign_fugou')->insert($bill);
  679. } catch (Exception $e) {
  680. return app("json")->fail($e->getMessage());
  681. }
  682. }
  683. /**
  684. * 添加预估积分记录
  685. */
  686. public function yuguJifen($order_id,$price,$user_id,$order_sn,$type_shop)
  687. {
  688. if (empty($user_id)) {
  689. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, $order_sn, 赠送积分, 不存在用户ID"]);
  690. return false;
  691. }
  692. //查询用户是否已经存在该订单
  693. $user_sign_score_list = Db::name('user_sign_score')
  694. ->where('uid', $user_id)
  695. ->where('order_type', $type_shop)
  696. ->where('order_id', $order_id)
  697. ->find();
  698. if (!empty($user_sign_score_list)) {
  699. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, $order_sn, 赠送积分, 订单已存在积分发放记录"]);
  700. return false;
  701. }
  702. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, $order_sn, 赠送积分, $price"]);
  703. try {
  704. //更新用户积分
  705. $user = Db::name('user')->where('uid', $user_id)->find();
  706. $systemvalueObj= $goods_obj = Db::name('system_config_value')
  707. -> where('config_key','sanfangfenpei')->find();;
  708. $sanfangfenpei=json_decode($systemvalueObj['value'],true);
  709. $inc_score = $gongxian = round($price*$sanfangfenpei['pv'],2);//pv=佣金的50%=积分=贡献值
  710. //每个表的统计值
  711. $jfzongwei=Db::name('user_sign_score')->where('status', -1)->where('uid', $user_id)->sum('reward_socre');
  712. $gxzongwei=Db::name('user_sign_gongxian')->where('status', -1)->where('uid', $user_id)->sum('number');
  713. $make="";
  714. if($type_shop==1){
  715. $make="拼多多";
  716. }else if($type_shop==5){
  717. $make="淘宝";
  718. }else if($type_shop==6){
  719. $make="京东";
  720. }else if($type_shop==3){
  721. $make="苏宁";
  722. }else if($type_shop==2){
  723. $make="唯品会";
  724. }else if($type_shop==9){
  725. $make="话费";
  726. }
  727. $user_score = $user['score'];
  728. $surplus=$user_score + $inc_score+$jfzongwei;
  729. $surplusgongxian=$user['contribute'] + $gxzongwei;
  730. $data = [
  731. "uid" => $user_id,
  732. "reward_socre" => $inc_score,
  733. "addtime" => time(),
  734. "status" => -1,
  735. "order_type" => $type_shop,
  736. "order_id" => $order_id,
  737. "mark" => "购买{$make}商品赠送积分",
  738. "surplus" => $surplus,
  739. "pm" => 1,
  740. "source_type" => 3
  741. ];
  742. log::info("{$make}==准备开始添加积分,贡献");
  743. Db::name("user_sign_score")->insert($data);//添加积分记录
  744. log::info("准备开始添加积分");
  745. //赠送贡献值
  746. $gongxian_data = [
  747. "uid" =>$user_id,
  748. "number" => $gongxian,
  749. "addtime" =>time(),
  750. "status" =>-1,
  751. "order_type" =>$type_shop,
  752. "order_id" =>$order_id,
  753. "mark" =>"购买{$make}商品赠送贡献值",
  754. "desc" =>'',
  755. "surplus" =>$surplusgongxian+$gxzongwei,
  756. "type" =>1
  757. ];
  758. Db::name("user_sign_gongxian")->insert($gongxian_data);//添加贡献记录
  759. log::info("===添加完积分和贡献值");
  760. /** @var SharedProsperityUserRepository $sharedProsperityUserRepository */
  761. $sharedProsperityUserRepository = app()->make(SharedProsperityUserRepository::class);
  762. $sharedProsperityUserEntity = $sharedProsperityUserRepository->getSharedProsperityUserEntityByUserId($user_id);
  763. // 判断推广者 如果推广者 是共富体系会员
  764. if (empty($sharedProsperityUserEntity->getId())) {
  765. // 添加pv记录
  766. $pv_data = [
  767. "uid" =>$user_id,
  768. "pv" =>$gongxian,
  769. "addtime" =>time(),
  770. "status" =>-1,
  771. "order_type" =>$type_shop,
  772. "order_id" =>$order_id,
  773. "mark" =>"购买{$make}商品获得的PV",
  774. ];
  775. Db::name("user_pv_log")->insert($pv_data);//添加pv记录
  776. } else {
  777. /** @var SharedProsperityRewardRecordRepository $sharedProsperityRewardRecordRepository */
  778. $sharedProsperityRewardRecordRepository = app()->make(SharedProsperityRewardRecordRepository::class);
  779. $sharedProsperityRewardRecordRepository->addSharedProsperityRewardRecord(
  780. $sharedProsperityUserEntity->getUserId(),
  781. SharedProsperityRewardRecordEnum::TYPE['PV']['code'],
  782. SharedProsperityRewardRecordEnum::PM['INCOME']['code'],
  783. $gongxian,
  784. $type_shop,
  785. $order_sn,
  786. "购买{$make}商品获得的PV"
  787. );
  788. }
  789. //判断是否是老用户 is_old=1是1.0的用户,1.0的用户要总pv*45%的红包
  790. if($user["is_old"]==1){
  791. //添加红包
  792. $hongbao = $this->roundOptimize($inc_score*0.45,2);
  793. $hongbao_data = [
  794. "uid" =>$user_id,
  795. "number" => $hongbao,
  796. "addtime" =>time(),
  797. "status" =>-1,
  798. "order_type" =>$type_shop,
  799. "order_id" =>$order_id,
  800. "mark" =>"购买{$make}商品赠送红包",
  801. "desc" =>'',
  802. "surplus" =>$hongbao,
  803. "type" =>1
  804. ];
  805. Db::name("user_sign_hongbao")->insert($hongbao_data);//添加贡献记录
  806. log::info("===添加完红包奖励");
  807. }
  808. // 添加推荐奖励
  809. $zijiUser=Db::name("user")->where('uid',$user_id)->find();
  810. $sprerdUser= Db::name("user")->where('uid',$zijiUser['spread_uid'])->find();
  811. //不为空的时候进行添加推荐奖励
  812. if($sprerdUser){
  813. //奖励推广
  814. $yongjinbili=0;
  815. // @todo 用户身份比例
  816. $yongjinbili = StoreOrderRepository::getUserGroupRate($sprerdUser['user_group']);
  817. $tuiguanyongjin=$this->roundOptimize($yongjinbili*$inc_score,2);//按照身份获得佣金
  818. //添加推广积分
  819. $tuijifendata = [
  820. "uid" => $sprerdUser['uid'],
  821. "reward_socre" => $tuiguanyongjin,
  822. "addtime" => time(),
  823. "status" => -1,
  824. "order_type" => $type_shop,
  825. "order_id" => $order_id,
  826. "mark" => "推广{$make}商品赠送积分",
  827. "surplus" => $sprerdUser['score'] + $tuiguanyongjin,
  828. "pm" => 1,
  829. "source_type" => 4
  830. ];
  831. log::info("{$make}==准备开始添加推广积分,贡献");
  832. Db::name("user_sign_score")->insert($tuijifendata);//添加积分记录
  833. //添加推荐献值 普通用户 贡献值为 pv* 30%;推广人是业务员及以上身份,贡献值为:pv的1:1
  834. if($sprerdUser['user_group'] <= 1){
  835. $gongxian = $this->roundOptimize($gongxian*0.3,2);
  836. }
  837. $tuigangongxian_data = [
  838. "uid" =>$sprerdUser['uid'],
  839. "number" => $gongxian,
  840. "addtime" =>time(),
  841. "status" =>-1,
  842. "order_type" =>$type_shop,
  843. "order_id" =>$order_id,
  844. "mark" =>"推广{$make}商品赠送贡献值",
  845. "desc" =>'',
  846. "surplus" => $sprerdUser['contribute'] + $gongxian,
  847. "type" =>1
  848. ];
  849. Db::name("user_sign_gongxian")->insert($tuigangongxian_data);//添加贡献记录
  850. log::info("===添加完积分和贡献值");
  851. }
  852. //
  853. // Db::name('user')->where('uid', $user_id)->inc('score', $inc_score)->update();
  854. // Db::name('user')->where('uid', $user_id)->inc('contribute', $inc_score)->update();
  855. // $now_score= Db::name('user')->where('uid',$user_id)->value('now_score_estimate');
  856. // $now_score_no= Db::name('user')->where('uid',$user_id)->value('now_score');
  857. // Db::name('user')->where('uid',$user_id)->update(['now_score_estimate'=>$now_score+$price]);
  858. // $insertDta=[
  859. // 'user_id'=>$user_id,
  860. // 'before_price'=>$now_score,//变化前的积分
  861. // 'price'=>$price,//此次变化的积分
  862. // 'after_price'=>$now_score+$price,//变化后的积分
  863. // 'type'=>$type,// 类型 1自营订单 2 第三方订单 3 签到积分 6 其它渠道的积分
  864. // 'third_type'=>$third_type,//第三方的类型 1 淘宝 2 京东 3 唯品会 4 拼多多 5 苏宁易购
  865. // 'other'=>$order_sn,//商城订单 记录订单号 签到记录日期 其它渠道记录获取方式
  866. // 'ctime'=>time(),//创建时间
  867. // 'thaw_time'=>$bill_end_time,//结算的时间
  868. // ];
  869. // $billData=[
  870. // 'uid'=>$user_id,
  871. // 'link_id'=>1,
  872. // 'pm'=>1,
  873. // 'title'=>'平台奖励',
  874. // 'category'=>'now_money',
  875. // 'type'=>'integral',
  876. // 'number'=>$price,
  877. // 'balance'=>$now_score_no,
  878. // 'mark'=>'购买商品获得积分 比例 1:1',
  879. // 'create_time'=>date("Y-m-d H:i:s",time()),
  880. // 'status'=>0,
  881. // 'order_sn'=>$order_sn,
  882. // 'type_shop'=>$type_shop,
  883. // 'commission_type'=>8,
  884. // 'order_type'=>2
  885. // ];
  886. // Db::name('integral_log')->insert($insertDta);
  887. // Db::name('user_bill')->insert($billData);
  888. } catch (Exception $e) {
  889. return app("json")->fail($e->getMessage());
  890. }
  891. }
  892. public static function yuguZhitui($commission, $user_id, $type_shop, $order_sn, $order_id)
  893. {
  894. //查询直推人身份
  895. $user_info = Db::name('user')->where('uid', $user_id)->find();
  896. if (empty($user_info)) {
  897. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, 三方订单直推奖, 用户信息不存在"]);
  898. return false;
  899. }
  900. $spread_uid = $user_info['spread_uid'];
  901. $spread_info = Db::name('user')->where('uid', $spread_uid)->find();
  902. if (empty($user_info)) {
  903. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, 三方订单直推奖, 不存在推荐人"]);
  904. return false;
  905. }
  906. $user_bill = Db::name('user_bill')->where('uid', $spread_uid)->where('order_sn', $order_sn)->where('type_shop', $type_shop)->find();
  907. if (!empty($user_bill)) {
  908. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, 订单已分润"]);
  909. return false;
  910. }
  911. $base_commission = 0;
  912. if ($spread_info['user_group'] == 2) {
  913. $base_commission = 20;
  914. }
  915. if ($spread_info['user_group'] >= 3) {
  916. $base_commission = 30;
  917. }
  918. if ($base_commission == 0) {
  919. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_sn, 三方订单直推奖, 收益比例不能为0"]);
  920. return false;
  921. }
  922. $souxufees=0;
  923. $souxufee =floatval(systemConfig('yanglao'));
  924. if ($souxufee){
  925. $souxufees = bcmul($commission, $souxufee * 0.01, 3);
  926. }
  927. $zhitui_money = bcmul($commission-$souxufees,$base_commission/100,3);
  928. if (empty($user_id)) {
  929. return false;
  930. }
  931. Db::name('log')->insert(['data' => "type_shop:{$type_shop}, $order_id, 三方订单直推奖, 收益:{$commission},手续费:{$souxufees},分润比例:{$base_commission},最终收益:{$zhitui_money}"]);
  932. $StoreOrderRepository = app()->make(StoreOrderRepository::class);
  933. $mark = $user_info['nickname'] . '购买商品';
  934. $title = "直推奖".date('m.d');
  935. $commission_type = 3;
  936. $StoreOrderRepository->add_bill_gongfu($title, $zhitui_money, $spread_uid, $mark, $commission_type, $order_sn, $order_id, 0, 0, 0, $type_shop);
  937. }
  938. }