Test.php 19 KB

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