Line.php 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <?php
  2. namespace app\models\order;
  3. use app\models\system\SystemUserLevel;
  4. use app\models\user\User;
  5. use app\models\user\UserLevel;
  6. use app\models\store\StoreOrder;
  7. use app\models\user\WechatUser;
  8. use crmeb\basic\BaseModel;
  9. use crmeb\services\MiniProgramService;
  10. use crmeb\services\WechatService;
  11. use crmeb\repositories\PaymentRepositories;
  12. use crmeb\traits\ModelTrait;
  13. use app\models\user\UserBill;
  14. use think\facade\Log;
  15. class Line extends BaseModel
  16. {
  17. use ModelTrait;
  18. /**
  19. * 数据表主键
  20. * @var string
  21. */
  22. protected $pk = 'id';
  23. /**
  24. * 模型名称
  25. * @var string
  26. */
  27. protected $name = 'line';
  28. protected $insert = ['add_time'];
  29. protected static $payType = ['wdc' => 'wdc支付'];
  30. /**
  31. * 生成订单唯一id
  32. * @param $uid 用户uid
  33. * @return string
  34. */
  35. public static function getNewOrderId()
  36. {
  37. list($msec, $sec) = explode(' ', microtime());
  38. $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
  39. $orderId = 'lv' . $msectime . mt_rand(10000, 99999);
  40. while (self::be(['order_id' => $orderId])) $orderId = 'lv' . $msectime . mt_rand(10000, 99999);
  41. return $orderId;
  42. }
  43. /**
  44. * 创建订单
  45. * @param $uid
  46. * @param $level_id
  47. * @param $payType
  48. * @param $mark
  49. * @return Level|bool|\think\Model
  50. */
  51. public static function createLevelOrder($uid, $payType='wdc')
  52. {
  53. self::beginTrans();
  54. try {
  55. //Log::write('会员1:111'.$payType, 'error');
  56. if (!array_key_exists($payType, self::$payType)) return self::setErrorInfo('选择支付方式有误!', true);
  57. $userInfo = User::getUserInfo($uid);
  58. if (!$userInfo) return self::setErrorInfo('用户不存在!', true);
  59. if ($userInfo['wdc'] < 1000)
  60. return self::setErrorInfo(['status' => 'pay_deficiency', 'msg' => 'wdc不足1000']);
  61. $orderInfo = [
  62. 'uid' => $uid,
  63. 'order_id' => self::getNewOrderId(),
  64. 'pay_price' =>1000,
  65. 'add_time' => time()
  66. ];
  67. //print_r($orderInfo);die;
  68. $order = Line::create($orderInfo);
  69. if (!$order) {
  70. Log::write('会员1:订单生成失败', 'error');
  71. return self::setErrorInfo('排队失败!', true);
  72. }
  73. $res1 = false !== User::bcDec($uid, 'wdc', sys_config('del_wdc'), 'uid');
  74. $res2 = UserBill::expend('排队', $uid, 'wdc', 'wdc_pay_product', sys_config('del_wdc'),$order['id'], $userInfo['wdc'], '酒币参加排队');
  75. $res3=self::do_line($order);
  76. $res=$res1 && $res2 && $res3;
  77. self::commitTrans($res);
  78. return $order;
  79. } catch (\PDOException $e) {
  80. Log::write('会员2:' . $e->getMessage(), 'error');
  81. self::rollbackTrans();
  82. return self::setErrorInfo('生成订单时SQL执行错误错误原因:' . $e->getMessage());
  83. }
  84. }
  85. public static function do_line($order){
  86. $sum=new Line();
  87. $sum=$sum->count();
  88. if($sum%5 == 0){
  89. $id=Line::where('status',0)->where('is_ok',0)->order('id asc')->find();
  90. $res1=Line::where('id',$id['id'])->save(['is_ok'=>1,'status'=>1,'suc_time'=>time()]);
  91. $userInfo = User::getUserInfo($id['uid']);
  92. if (!$userInfo) return self::setErrorInfo('用户不存在!', true);
  93. $res2 = false !== User::bcInc($id['uid'], 'brokerage_price',sys_config('suc_bo_pd'), 'uid');
  94. $res3 = UserBill::income('排队完成', $id['uid'], 'now_money', 'brokerage', sys_config('suc_bo_pd'),$order, $userInfo['brokerage_price'], '排队结束奖励佣金');
  95. $res=$res1 && $res2 && $res3;
  96. return $res;
  97. //@file_put_contents('111.txt',json_encode($id));
  98. }
  99. @file_put_contents('222.txt',$sum);
  100. return true;
  101. }
  102. //失败 分发奖励
  103. public static function js_line($order_id){
  104. self::beginTrans();
  105. $arr=self::where('order_id',$order_id)->find();
  106. //每个人获取到的奖金
  107. $userInfo = User::getUserInfo($arr['uid']);
  108. if (!$userInfo) return self::setErrorInfo('用户不存在!', true);
  109. $res1 = false !== User::bcInc($arr['uid'], 'brokerage_price',sys_config('suc_bo_pd'), 'uid');
  110. $res2 = UserBill::income('立即结束排队', $arr['uid'], 'now_money', 'brokerage',sys_config('suc_bo_pd'),$arr['id'], $userInfo['brokerage_price'], '结束排队返回佣金');
  111. $res3=self::where('order_id',$order_id)->save(['is_ok'=>1,'status'=>1,'suc_time'=>time()]);
  112. $res4=User::bcDec($arr['uid'], 'over_num',1, 'uid');
  113. $res=$res1 && $res2 && $res3 && $res4;
  114. if($res){
  115. self::commitTrans($res);
  116. return $res;
  117. }else{
  118. self::rollbackTrans();
  119. }
  120. }
  121. //订单列表
  122. public static function my_line($type,$page,$limit,$uid){
  123. if($type==1){
  124. $arr=self::where('status',0)->where('uid',$uid)->where('is_ok',0)->order('add_time desc')->page($page,$limit)->select();
  125. foreach ($arr as &$item){
  126. $count=self::where('id','<',$item['id'])->where('is_ok',0)->where('status',0)->count();
  127. $item['aa']=$count;
  128. if(!$count){
  129. $item['key']=1;
  130. }else{
  131. $item['key']=$count+1;
  132. }
  133. }
  134. }
  135. if($type==2){
  136. $arr=self::where('status',1)->where('uid',$uid)->where('is_ok',1)->order('add_time desc')->page($page,$limit)->select();
  137. }
  138. if($type==3){
  139. $arr=StoreOrder::where('line_id','<>',0)->where('uid',$uid)->where('paid',1)->order('add_time desc')->page($page,$limit)->select();
  140. foreach ($arr as &$value){
  141. $value=StoreOrder::tidyOrder($value,true);
  142. }
  143. }
  144. return $arr;
  145. }
  146. public static function systemPage($where = [])
  147. {
  148. $model = new self;
  149. if ($where['keyword'] !== '') $model = $model->where('id|uid', 'LIKE', "%$where[keyword]%");
  150. if($where['data'] != ''){
  151. list($startTime,$endTime) = explode(' - ',$where['data']);
  152. $model = $model->where('add_time','>',strtotime($startTime));
  153. $model = $model->where('add_time','<',strtotime($endTime));
  154. }
  155. if ($where['type'] !== '') $model = $model->where('status',$where['type']);
  156. if (isset($where['excel']) && $where['excel'] == 1) {
  157. $data=$model->select()->toArray();
  158. self::SaveExcel($data);
  159. }
  160. $model = $model->order('add_time asc,id asc');
  161. return self::pagee($model);
  162. }
  163. /*
  164. * 保存并下载excel
  165. * $list array
  166. * return
  167. */
  168. public static function SaveExcel($list)
  169. {
  170. $export = [];
  171. foreach ($list as $index => $item) {
  172. $data="姓名:".$item['name'].PHP_EOL.'性别:'.$item['sex'].PHP_EOL.'出生年月:'.$item['birth'].PHP_EOL.'移动电话:'.$item['phone'].PHP_EOL.'固定电话:'.$item['mobile'].PHP_EOL.'电子邮件:'.$item['email']
  173. .PHP_EOL.'联系地址:'.$item['address'].PHP_EOL.'邮编:'.$item['zip'].PHP_EOL.'工作单位:'.$item['work'].PHP_EOL.'职业/职务/专业:'.$item['specialty'].PHP_EOL.'教育程度:'.$item['education'].PHP_EOL.'是否受过志愿服务:'.$item['is_vol'].PHP_EOL.'有无服务经验:'.$item['is_experience'];
  174. $arr='时间段:'.$item['quantum'].PHP_EOL.'日期:'.$item['date'];
  175. $data1=$item['taste'].PHP_EOL.'注明:'.$item['make_taste'];
  176. $data2=$item['speciali'].PHP_EOL.'注明:'.$item['make_speciali'];
  177. $export[] = [
  178. $item['id'],
  179. $data,
  180. $arr,
  181. $data1,
  182. $data2,
  183. $item['add_time'] > 0 ? date('Y/m-d H:i:s', $item['add_time']) : '暂无',
  184. ];
  185. }
  186. PHPExcelService::setExcelHeader(['序号', '个人资料', '可提供服务时间','有兴趣参与的工作','专长','添加时间'])
  187. ->setExcelTile('志愿者申请' . date('YmdHis', time()), '信息' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time()))
  188. ->setExcelContent($export)
  189. ->ExcelSave();
  190. }
  191. /**
  192. * 分页
  193. * @param null $model 模型
  194. * @param null $eachFn 处理结果函数
  195. * @param array $params 分页参数
  196. * @param int $limit 分页数
  197. * @return array
  198. */
  199. public static function pagee($model = null, $eachFn = null, $params = [], $limit = 20)
  200. {
  201. if (is_numeric($eachFn) && is_numeric($model)) {
  202. return parent::page($model, $eachFn);
  203. }
  204. if (is_numeric($eachFn)) {
  205. $limit = $eachFn;
  206. $eachFn = null;
  207. } else if (is_array($eachFn)) {
  208. $params = $eachFn;
  209. $eachFn = null;
  210. }
  211. if (is_callable($model)) {
  212. $eachFn = $model;
  213. $model = null;
  214. } elseif (is_numeric($model)) {
  215. $limit = $model;
  216. $model = null;
  217. } elseif (is_array($model)) {
  218. $params = $model;
  219. $model = null;
  220. }
  221. if (is_numeric($params)) {
  222. $limit = $params;
  223. $params = [];
  224. }
  225. $listRows = [
  226. 'list_rows' => $limit,
  227. 'query' => $params
  228. ];
  229. $paginate = $model === null ? self::paginate($listRows, false) : $model->paginate($listRows, false);
  230. $list = is_callable($eachFn) ? $paginate->each($eachFn) : $paginate;
  231. foreach ($list as &$value){
  232. $value['nickname']=User::where('uid',$value['uid'])->value('nickname');
  233. if($value['status']==0){
  234. $value['status']='正在进行中';
  235. }elseif($value['status']==1){
  236. $value['status']='已完成';
  237. }else{
  238. $value['status']='已兑换';
  239. }
  240. }
  241. $page = $list->render();
  242. $total = $list->total();
  243. return compact('list', 'page', 'total');
  244. }
  245. }