MigrateOldCommissionDetailToNewSeeder.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. use app\common\model\OrderGoods;
  3. use app\common\model\OrderRefund;
  4. use app\common\model\ShopIdentity;
  5. use app\common\model\Shops;
  6. use app\common\model\store\Setting;
  7. use app\common\model\user\CommissionsDetailOld;
  8. use think\migration\Seeder;
  9. class MigrateOldCommissionDetailToNewSeeder extends Seeder
  10. {
  11. /**
  12. * Run Method.
  13. *
  14. * Write your database seeder using this method.
  15. *
  16. * More information on writing seeders is available here:
  17. * http://docs.phinx.org/en/latest/seeding.html
  18. */
  19. public function run()
  20. {
  21. $list = CommissionsDetailOld::alias('commissions_detail')
  22. ->leftJoin('user us','commissions_detail.user_id=us.user_id')
  23. ->leftJoin('order_goods od','commissions_detail.order_goods_id=od.order_goods_id')
  24. ->field('commissions_detail.*,od.create_time as order_create_time,od.commission_settlement_time,od.commission_settlement_status,us.seller_grade')
  25. ->order(['commissions_detail.order_id'=>'asc','od.commission_settlement_time'=>'desc'])
  26. ->select();
  27. $ratios = Setting::getItem('distributor_grade', 10001)['distributor'];
  28. if (count($list)){
  29. $data = $orderUpdate = $orderIds = [];
  30. $commDetailM = new \app\common\model\user\CommissionsDetail();
  31. $orderM = new \app\common\model\Order();
  32. foreach ($list as $item){
  33. $temp['user_id'] = $item['user_id'];
  34. $temp['clearing_money'] = $item['clearing_money'];
  35. $temp['clearing_money_amount'] = $item['clearing_money_amount'];
  36. $temp['create_time'] = strtotime($item['create_time']);
  37. $temp['update_time'] = strtotime($item['update_time']);
  38. $temp['clearing_status'] = $item['clearing_status'];
  39. $temp['order_id'] = $item['order_id'];
  40. $temp['shop_id'] = $item['shop_id'];
  41. $temp['role'] = $item['role'];
  42. $temp['buyer_user_id'] = $item['buyer_user_id'];
  43. $temp['commission_level'] = $item['commission_level'];
  44. $temp['commission_percent'] = 0;
  45. if ($item['commission_level'] == 1){
  46. $temp['commission_percent'] = $ratios[$item['seller_grade']-1]['first_commission']??0;;
  47. }
  48. if ($item['commission_level'] == 2){
  49. $temp['commission_percent'] = $ratios[$item['seller_grade']-1]['second_commission']??0;;
  50. }
  51. if ($item['role'] == 2){
  52. $shop = Shops::find($item['shop_id']);
  53. $temp['commission_percent'] = $shop->boss_percent;
  54. }
  55. if ($item['role'] == 3){
  56. $shop = Shops::find($item['shop_id']);
  57. $temp['commission_percent'] = $shop->manager_percent;
  58. }
  59. if ($item['role'] == 4){
  60. $shop = Shops::find($item['shop_id']);
  61. $temp['commission_percent'] = $shop->staff_percent;
  62. }
  63. if ($item['role'] == 5){
  64. $md = new ShopIdentity();
  65. $pers = $md->field('shop_id,role_id as role,fc_percent as percent')
  66. ->where('shop_id',$item['shop_id'])
  67. ->where('role_id',5)->find();
  68. $temp['commission_percent'] = $pers->percent??0;
  69. }
  70. $temp['seller_grade'] = $item['seller_grade'];
  71. $temp['order_create_time'] = $item['order_create_time'];
  72. //计算销售额
  73. $orderGoods = OrderGoods::field('order_goods_id,total_num,total_pay_price,rice_card_money,total_pay_price,frozen_status')
  74. ->where('order_id',$item['order_id'])->select();
  75. $saleVolume = '0';
  76. foreach ($orderGoods as $og){
  77. $rate = 1;
  78. $refund = OrderRefund::where('order_goods_id',$og->order_goods_id)
  79. ->where('finance_refund',10)->find();
  80. $ogSale = bcadd($og['total_pay_price'],$og['rice_card_money'],4);
  81. if ($refund){
  82. $rate = bcdiv(strval($og['total_num'] - $refund['goods_num']),strval($og['total_num']),4);
  83. }
  84. if ($rate <= 1 && $rate >= 0){
  85. $saleVolume = bcadd(bcmul($ogSale,strval($rate),4),strval($saleVolume),4);
  86. }
  87. }
  88. $temp['order_sale_volume'] = $saleVolume;
  89. $data[] = $temp;
  90. if (!in_array($temp['order_id'],$orderIds)){
  91. $orderTemp['order_id'] = $item['order_id'];
  92. $orderTemp['commission_settlement_time'] = $item['commission_settlement_time'];
  93. $orderTemp['commission_settlement_status'] = $item['commission_settlement_status'];
  94. $orderUpdate[] = $orderTemp;
  95. $orderIds[] = $item['order_id'];
  96. }
  97. }
  98. //新增到新分佣表
  99. $commDetailM->insertAll($data);
  100. //更新order新增字段
  101. $orderM->saveAll($orderUpdate);
  102. }
  103. }
  104. }