Test.php 15 KB

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