UserThirdRepository.php 45 KB

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