UserThirdRepository.php 44 KB

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