Test.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. <?php
  2. namespace app\api\controller;
  3. use app\api\model\Order as OrderModel;
  4. use app\api\model\User as UserModel;
  5. use app\common\enum\order\PayType as OrderPayTypeEnum;
  6. use app\common\enum\order\ReceiptStatus as ReceiptStatusEnum;
  7. use app\common\service\Message;
  8. use app\store\model\card\UserRiceDelivery as UserRiceDeliveryModel;
  9. use app\store\model\card\UserRiceDeliveryExpress as UserRiceDeliveryExpressModel;
  10. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  11. use PhpOffice\PhpSpreadsheet\IOFactory;
  12. use PhpOffice\PhpSpreadsheet\Writer\Xls;
  13. use PhpOffice\PhpSpreadsheet\Writer\Xls\Xf;
  14. use app\api\service\ricecard\PaySuccess;
  15. use app\api\model\card\RiceCardGoods as RiceCardGoodsModel;
  16. use app\api\model\order\RiceCardPay;
  17. use app\common\model\OrderTj;
  18. use app\api\service\groupbuy\PaySuccess as GroupBuyPaySuccess;
  19. use app\api\model\order\GroupBuyPay;
  20. use app\common\enum\order\OrderSource as OrderSourceEnum;
  21. use app\api\model\order\GroupBuyLbPay;
  22. use app\common\model\ConsistentHash;
  23. use app\common\model\Wechat;
  24. use app\common\model\groupbuylb\GroupBuyLbJoin;
  25. use app\api\model\subscribe\WechatSub;
  26. use app\job\MiaoshaPushSubscribe;
  27. use think\queue\Job;
  28. use app\api\service\order\PaySuccess as PaySuccessModel;
  29. use app\console\task\OrderCancel;
  30. use app\console\service\Order as OrderService;
  31. use app\common\service\goods\source\Factory;
  32. use app\api\service\za\PaySuccess as ZaPaySuccessModel;
  33. use think\cache\driver\Redis;
  34. use app\common\model\RedisString;
  35. use app\api\model\kj\KjActivityJoin;
  36. use app\common\service\commission\RecordWaitCommission;
  37. /**
  38. * 默认控制器
  39. * Class Index
  40. * @package app\api\controller
  41. */
  42. class Test extends Controller
  43. {
  44. public function pt(){
  45. $join_id = $_GET['join_id']??0;
  46. if($join_id>0){
  47. $pay = new GroupBuyLbPay;
  48. $pay->ptSuccessNotify($join_id);
  49. echo 'success';
  50. }
  51. }
  52. public function tj(){
  53. $key = 'key1000';
  54. $rds = new Redis(config('cache.stores.redis'));
  55. $value = $rds->get($key);
  56. dd($value);
  57. //待结算佣金计算
  58. $RecordWaitCommission = new RecordWaitCommission;
  59. //分销记录放入队列
  60. $RecordWaitCommission->recordWaitCommission(438);
  61. dd('xxx');
  62. $res = UserModel::setIncAccumulatePoints(107633,99.11,10,'老板赠送');
  63. dd($res);
  64. $otj = new OrderTj;
  65. $day = $otj->day(0);
  66. $day = $otj->day(1);
  67. $month = $otj->month();
  68. $week = $otj->week();
  69. }
  70. public function testPay(){
  71. $join = new KjActivityJoin;
  72. $res = $join->lastHelpAdd(133,rand(100,200));
  73. $res2 = $join->lastHelp(133,1000);
  74. var_dump($res2);
  75. // return $res;
  76. // RedisString::getInstance()->zAdd("na",2,'va2');
  77. // $res = RedisString::getInstance()->zRange("na",0,10);
  78. // var_dump($res);
  79. // $rds = new Redis(config('cache.stores.redis'));
  80. // $rds->handler()->lPush("m",2);
  81. // var_dump($rds->handler()->lrange('m',0,2));
  82. // $order_no = 'ysc2022083110110055';
  83. // $p = new ZaPaySuccessModel($order_no);
  84. // $paydata['transaction_id'] = rand(100000,999999);
  85. // $paydata['out_trade_no'] = $order_no;
  86. // $p->onPaySuccess(20, $paydata);
  87. // Factory::getFactory(60)->test();
  88. // $order_no = 'ysc2022070810249994';
  89. // $p = new PaySuccessModel($order_no);
  90. // $paydata['transaction_id'] = rand(100000,999999);
  91. // $p->onPaySuccess(20, $paydata);
  92. // $cancel = new OrderService;
  93. // $cancel->closeEvent(10001,1);
  94. // $sub = new MiaoshaPushSubscribe;
  95. // $data['ms_id'] =41;
  96. // $data['user_id'] = 107488;
  97. // // $job = new Job();
  98. // $sub->fire(null,$data);
  99. // $a = new GroupBuyPay;
  100. // $a->helpEnd(121);
  101. // $d = new WechatSub('li_ji_can_tuan');
  102. // $res = $d->addSub(220);
  103. // $res2 = $d->checkSub(220);
  104. // $page = 'pages/activity/pages/groupShopping/groupFission/groupFission';
  105. // $data = ['thing1'=>["value"=>"拼团有礼"],'thing2'=>["value"=>'活动已结束,去看看活动结果']];
  106. // $res3 = $d->pushSub(220,$page,$data);
  107. // var_dump($res,$res2);
  108. // $a = new GroupBuyLbPay;
  109. // $a->ptSuccessNotify(72);
  110. // $a->receiveCoupon(107786,15);
  111. // $a->activityEnd(228882,44);
  112. // $join= new GroupBuyLbJoin;
  113. // $openid = 'oQEF55LlnuBD6IVOqdO0eyq44U5M';
  114. // $res = $join->activityEnd($openid);
  115. // var_dump($res);
  116. // $config = (new Wechat)->weixinTokenCache();
  117. // var_dump($config);
  118. // $p = new GroupBuyLbPay;
  119. // $data['out_trade_no'] ='2022061010252495';
  120. // $data['transaction_id'] = 111111111111111;
  121. // $res = $p->notifyPay($data);
  122. // var_dump($res);
  123. // $p = new GroupBuyLbPay;
  124. // $p->receiveCoupon(107580,2);
  125. // $node = ['server1','server2','server3'];
  126. // $c = new ConsistentHash;
  127. // $c->setVirtualNum(3);
  128. // $c->addNodes($node);
  129. // $res1 = $c->getNode('abklsaf');
  130. // $res2 = $c->getNode('b321a21');
  131. // $res3 = $c->getNode('z3212a21');
  132. // var_dump($res1,$res2,$res3);
  133. // $t = new RiceCardPay;
  134. // $pay['out_trade_no'] = '20220118115418571019';
  135. // $t->notifyPay($pay);
  136. // $order_no = 'rc-20211122162120505799';
  137. // $p = new PaySuccess($order_no);
  138. // $orderInfo = $p->getOrderInfo();
  139. // $rs = $p->onPaySuccess(20,['out_trade_no'=>$order_no]);
  140. // $goodList = RiceCardGoodsModel::where('card_id',3)->select()->toArray();
  141. // var_dump($goodList[0]['goods_id']);
  142. // $order_no = 'ysc2022041498575097';
  143. // $p = new GroupBuyPaySuccess($order_no);
  144. // $p->onPaySuccess(20,['out_trade_no'=>$order_no]);
  145. // $p = new GroupBuyPay;
  146. // $data['out_trade_no'] = 'ysc2022041653974953';
  147. // $p->notifyPay($data);
  148. // $g->ptSuccessNotify(1);
  149. // $out_trade_no = 'ysc2022042251505798';
  150. // $data['out_trade_no'] = $out_trade_no;
  151. // $p = new GroupBuyPaySuccess($out_trade_no);
  152. // $p->onPaySuccess(20, $data);
  153. // $p = new GroupBuyPay;
  154. // $p->test();
  155. }
  156. /**
  157. * 导出示例
  158. * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
  159. */
  160. public function testExport(){
  161. $data = [
  162. ['title'=>'张三', 'content' => '张三的内容', 'prices' => '100', 'create_time' => '2017.10.12', 'end_time' =>'2020.12.12'],
  163. ['title'=>'李四', 'content' => '李四的内容', 'prices' => '222', 'create_time' => '2017.10.12', 'end_time' =>'2020.12.12'],
  164. ['title'=>'王莽', 'content' => '王莽的内容', 'prices' => '343', 'create_time' => '2017.10.12', 'end_time' =>'2022.03.12'],
  165. ];
  166. $header = ['名称', '内容', '金额', '开始时间', '结束时间'];
  167. return self::export($data, $header, $title = 'test', $filename = 'test', $file_type = 'Csv');
  168. }
  169. /**
  170. * 下载导出文件
  171. * @param array $data
  172. * @param array $header 表头
  173. * @param string $title excel标题
  174. * @param string $filename 文件名称
  175. * @param string $format
  176. * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
  177. */
  178. public function export(array $data, array $header, $title = 'test', $filename = 'test', $format = 'Csv')
  179. {
  180. set_time_limit(0);
  181. $title_key = [];
  182. foreach ($data[0] as $key=>$val){
  183. $title_key[] = $key;
  184. }
  185. $unit = array(
  186. 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
  187. 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN',
  188. 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'
  189. );
  190. $line_count = count($header);
  191. $newExcel = new Spreadsheet(); //创建一个新的excel文档
  192. $objSheet = $newExcel->getActiveSheet(); //获取当前操作sheet的对象
  193. $objSheet->setTitle($title); //设置当前sheet的标题
  194. $n = 1;
  195. for ($i = 0; $i < $line_count; ++$i){
  196. $newExcel->getActiveSheet()->getColumnDimension($unit[$i])->setAutoSize(true);
  197. $objSheet->setCellValue($unit[$i].$n, $header[$i]);
  198. foreach ($data as $key=>$val){
  199. $m = $key + 2;
  200. $objSheet->setCellValue($unit[$i] . $m, $val[$title_key[$i]]);
  201. }
  202. }
  203. ob_end_clean() ;
  204. // $format只能为 Xlsx 或 Xls
  205. if ($format == 'Xlsx') {
  206. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  207. } elseif ($format == 'Xls') {
  208. header('Content-Type: application/vnd.ms-excel');
  209. }else{
  210. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  211. }
  212. $filename = $filename .'-'. date('YmdHis') . '.' . strtolower($format);
  213. header("Content-Disposition: attachment;filename=" . $filename);
  214. header('Cache-Control: max-age=0');
  215. header('Access-Control-Allow-Origin:*');
  216. $objWriter = IOFactory::createWriter($newExcel, $format);
  217. ob_start(); //打开缓冲区
  218. $objWriter->save('php://output');
  219. $xlsdata =ob_get_contents();
  220. ob_end_clean();
  221. $data['filename'] = $filename;
  222. $data['file'] = "data:application/vnd.ms-excel;base64,".base64_encode($xlsdata);
  223. return $data;
  224. //通过php保存在本地的时候需要用到
  225. // $objWriter->save($filename);
  226. //以下为需要用到IE时候设置
  227. // If you're serving to IE 9, then the following may be needed
  228. // header('Cache-Control: max-age=1');
  229. // //If you're serving to IE over SSL, then the following may be needed
  230. // header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  231. // header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  232. // header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  233. // header('Pragma: public'); // HTTP/1.0
  234. // exit;
  235. }
  236. public function weather($cityNm = '深圳'){
  237. $url = 'http://api.k780.com/?app=weather.future&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&cityNm='.$cityNm;
  238. $curl = curl_init();
  239. curl_setopt($curl, CURLOPT_URL, $url);
  240. curl_setopt($curl, CURLOPT_HEADER, false);
  241. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  242. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
  243. $result = curl_exec($curl);
  244. curl_close($curl);
  245. $ret = json_decode($result,1)['result'];
  246. $str = '城市:'.$cityNm."\r\n";
  247. $i = 0;
  248. foreach ($ret as $arr){
  249. // if($i>2) continue;//只展示最近三天的天气
  250. $i++;
  251. $days = substr($arr['days'],5);
  252. $str .= "{$days},{$arr['week']},{$arr['weather']},{$arr['temp_low']}~{$arr['temp_high']}℃,{$arr['wind']}{$arr['winp']}\r\n";
  253. }
  254. // dd($str);
  255. $url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=bf17777d-35ab-4b80-9361-13927929cce5';//企业微信机器人url
  256. $payload = '{
  257. "msgtype": "text",
  258. "text": {
  259. "content": "'.$str.'",
  260. "mentioned_list":["@all"]
  261. }
  262. }';
  263. curl_post($url,$payload);
  264. }
  265. public function paySuccess(){
  266. // $res = OrderModel::getPayDetail('2021112455575510');
  267. // return $this->renderSuccess(compact('res'));
  268. $data = array(
  269. 'appid' => 'wx7dddfa81774127fd',
  270. 'attach' => '{"order_type":10}',
  271. 'bank_type' => 'OTHERS',
  272. 'cash_fee' => '10',
  273. 'fee_type' => 'CNY',
  274. 'is_subscribe' => 'N',
  275. 'mch_id' => '1503642721',
  276. 'nonce_str' => 'ed78d7c300fa86cc779fcb072c84b2d2',
  277. 'openid' => 'oQEF55KHmx4khsQ8C6QLtYZuhKps',
  278. 'out_trade_no' => '2021112449541015',
  279. 'result_code' => 'SUCCESS',
  280. 'return_code' => 'SUCCESS',
  281. 'sign' => '3D08DF8EA03D2E636A493B88ECFDA214',
  282. 'time_end' => '20211124103303',
  283. 'total_fee' => '10',
  284. 'trade_type' => 'JSAPI',
  285. 'transaction_id' => '4200001161202111248193903429'
  286. );
  287. $model = new \app\api\service\order\PaySuccess($data['out_trade_no']);
  288. $res = $model->onPaySuccess(OrderPayTypeEnum::WECHAT, $data);
  289. dd($res);
  290. }
  291. //测试记录
  292. public function updUserRiceDelivery(){
  293. $model = new UserRiceDeliveryExpressModel();
  294. //获取物流单号相同并且没有签收的订单商品包裹记录
  295. $userRiceDeliveryExpress = $model->where(['express_no'=>'75512535883406斯蒂芬斯蒂芬斯蒂芬','is_sign'=>0])->select();
  296. foreach ($userRiceDeliveryExpress as $express){
  297. $express->is_sign = 1;
  298. $express->sign_time = date('Y-m-d H:i:s');
  299. $express->receipt_status = ReceiptStatusEnum::RECEIVED;
  300. $express->receipt_time = date('Y-m-d H:i:s');
  301. $express->save();
  302. //如果所有的订单商品包裹都已经签收了,那就更新订单商品结算时间
  303. if(!UserRiceDeliveryExpressModel::where(['user_rice_delivery_id'=>$express['user_rice_delivery_id'],'is_sign'=>0])->count()){
  304. $data= [
  305. 'receipt_status' => ReceiptStatusEnum::RECEIVED,
  306. 'receipt_time' => time(),
  307. 'status' => 20,
  308. ];
  309. UserRiceDeliveryModel::updateBase($data, ['id'=>$express['user_rice_delivery_id']]);
  310. }
  311. }
  312. }
  313. /**
  314. * 生成优惠券小程序码(历史数据 执行一次)
  315. * @mixed
  316. */
  317. public function genCouponQrcode()
  318. {
  319. $data = \app\store\model\Coupon::where('qrcode_id', '=', 0)->select();
  320. foreach ($data as $item) {
  321. $qrcodeId = \app\store\model\Coupon::genQrcode($item['coupon_id']);
  322. $item->qrcode_id = $qrcodeId;
  323. $item->save();
  324. }
  325. }
  326. }