Test.php 14 KB

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