Chuyutimedtask.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. <?php
  2. namespace app\api\controller;
  3. use app\admin\model\Cannelorder;
  4. use app\admin\model\RecoveryBill;
  5. use app\admin\model\Smslog;
  6. use app\admin\model\TablewareBill;
  7. use app\admin\model\User;
  8. use app\admin\model\Userscore;
  9. use app\common\controller\Api;
  10. use app\admin\model\Recoveryorder;
  11. use Alicode\Alisms;
  12. use app\common\library\Sms as Smslib;
  13. use fast\Random;
  14. use think\Db;
  15. /**
  16. * 定时任务
  17. */
  18. class Chuyutimedtask extends Api
  19. {
  20. // 如果$noNeedLogin为空表示所有接口都需要登录才能请求 无需登录的接口,*表示全部
  21. /* *可以通过@ApiInternal忽略请求的方法
  22. * @ApiInternal
  23. * */
  24. protected $noNeedLogin = ['*'];
  25. // 如果$noNeedRight为空表示所有接口都需要验证权限才能请求无需鉴权的接口,*表示全部
  26. protected $noNeedRight = ['*'];
  27. private function SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam)
  28. {
  29. // 循环发送
  30. $sendBatchSmsRequest = [
  31. // "templateCode" => "SMS_250975801",
  32. // "phoneNumberJson" => "['13161001120', '15550493042']",
  33. // "signNameJson" => "['乐餐宝', '乐餐宝']",
  34. // "code"=>"123456"
  35. ];
  36. $sendSmsRequest = [
  37. "TemplateCode" => $TemplateCode,
  38. "phoneNumber" => $phoneNumber,
  39. "TemplateParam" => $TemplateParam
  40. ];
  41. $res = Alisms::sendSmsCode($sendSmsRequest);
  42. // 短信发送记录
  43. $smslog_model = new Smslog();
  44. $insert_data = [
  45. 'mobile' => $phoneNumber,
  46. 'template_code' => $TemplateCode,
  47. 'template_param' => $TemplateParam,
  48. 'createtime' => time(),
  49. 'response_param' => json_encode($res),
  50. ];
  51. $smslog_model->insert($insert_data);
  52. return $res['Code'] == 'OK' ? true : false;
  53. }
  54. /**
  55. * 回收订单 - 超时未回收订单提醒
  56. */
  57. public function RecoveryTimeout()
  58. {
  59. // 读取超时时间
  60. $order_recovery_overtime = !empty(config('site.order_recovery_overtime')) ? config('site.order_recovery_overtime') : 8;
  61. $overtime = time() - $order_recovery_overtime * 3600;
  62. $recovery_order_model = new Recoveryorder();
  63. $data = [
  64. 'timeout' => 1,
  65. ];
  66. $where['status'] = 1;
  67. $where['timeout'] = 0;
  68. $where['create_time'] = ['<=', $overtime];
  69. $recovery_order_model->isUpdate(true, $where)->save($data);
  70. $this->success('ok');
  71. }
  72. /**
  73. * 店铺注销退货(餐具)- 超时退货回收提醒 --发给b端配送员
  74. */
  75. public function CancelOrderTimeOut()
  76. {
  77. // 读取超时时限
  78. $cancel_order_recovery = !empty(config('site.cancel_order_recovery')) ? config('site.cancel_order_recovery') : 48;
  79. $overtime = time() - $cancel_order_recovery * 3600;
  80. $cancel_order_model = new Cannelorder();
  81. $data = [
  82. 'timeout' => 1,
  83. ];
  84. $where['status'] = 1;
  85. $where['timeout'] = 0;
  86. $where['create_time'] = ['<=', $overtime];
  87. $cancel_order_model->isUpdate(true, $where)->save($data);
  88. $this->success('ok');
  89. //状态:1=已接收,2=已清点,3=待退款,4=已退款,5=已入库--
  90. // --需求更改不要短信了
  91. // $cancel_order = $cancel_order_model->alias('o')
  92. // ->join('user u', 'o.b_user_id = u.id')
  93. // ->field('o.id,o.b_user_id,u.mobile')
  94. // ->where('o.status', '=', 1)
  95. // ->where('o.timeout', '=', 0)
  96. // ->where('o.createtime', '<=', $overtime)->select();
  97. //
  98. // if (count($cancel_order) == 0) {
  99. // $this->success('无数据');
  100. // }
  101. // $TemplateCode = "SMS_250740130";
  102. // $ids = [];
  103. // foreach ($cancel_order as $k => $row) {
  104. // $phoneNumber = $row['mobile'];
  105. // $code = "786324";
  106. // $TemplateParam = json_encode(['code' => $code]);
  107. // $is_success = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam);
  108. //
  109. // if ($is_success) {
  110. // $ids[] = $row['id'];
  111. // }
  112. // }
  113. // if (count($ids) > 0) {
  114. // $data = [
  115. // 'timeout' => 1,
  116. // ];
  117. // $where['id'] = ['in', $ids];
  118. // $cancel_order_model->isUpdate(true, $where)->save($data);
  119. //
  120. // $this->success(__('发送成功'));
  121. // }
  122. }
  123. /**
  124. * 账单未支付提醒 -- 发给配送员和回收员
  125. */
  126. public function OrderUnpaid()
  127. {
  128. // 读取超时时限
  129. $order_recovery_overtime = !empty(config('site.bill_unpaid_overtime')) ? config('site.bill_unpaid_overtime') : 360;
  130. $overtime = time() - $order_recovery_overtime * 3600;
  131. // 回收月结账单
  132. $recovery_bill_model = new RecoveryBill();
  133. $recovery_bill = $recovery_bill_model->alias('b')
  134. ->join('user u', 'b.b_user_id = u.id')
  135. ->field('b.id,b.b_user_id,u.mobile')
  136. ->where('b.status', '=', 1)
  137. ->where('b.pay_timeout', '=', 0)
  138. ->where('b.createtime', '<=', $overtime)
  139. ->select();
  140. //var_dump($recovery_bill);exit();
  141. if (count($recovery_bill) != 0) {
  142. $ids = [];
  143. // $mobiles = [];
  144. // foreach ($recovery_bill as $k => $row) {
  145. // $mobiles[] = $row['mobile'];
  146. // $ids[] = $row['id'];
  147. // }
  148. $TemplateCode = "SMS_262525727";
  149. foreach ($recovery_bill as $k => $row) {
  150. $phoneNumber = $row['mobile'];
  151. $code = "786324";
  152. $TemplateParam = json_encode(['code' => $code]);
  153. $is_success = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam);
  154. if ($is_success) {
  155. $ids[] = $row['id'];
  156. }
  157. // todo add else log
  158. }
  159. // var_dump($ids);
  160. if (count($ids) > 0) {
  161. $data = [
  162. 'pay_timeout' => 1,
  163. ];
  164. $where['id'] = ['in', $ids];
  165. $recovery_bill_model->isUpdate(true, $where)->save($data);
  166. echo(__('发送成功'));
  167. }
  168. }
  169. //餐具月结账单
  170. $tableware_bill_model = new TablewareBill();
  171. $tableware_bill = $tableware_bill_model->alias('b')
  172. ->join('user u', 'b.b_user_id = u.id')
  173. ->field('b.id,b.b_user_id,u.mobile')
  174. ->where('b.status', '=', 1)
  175. ->where('b.pay_timeout', '=', 0)
  176. ->where('b.createtime', '<=', $overtime)
  177. ->select();
  178. if (count($tableware_bill) != 0) {
  179. $ids = [];
  180. // $mobiles = [];
  181. // foreach ($tableware_bill as $k => $row) {
  182. // $mobiles[] = $row['mobile'];
  183. // $ids[] = $row['id'];
  184. // }
  185. // $msg = "有餐具月结账单未支付,请及时催收";
  186. // $template = 1;
  187. // $ret = Smslib::notice($mobiles, $msg, $template);
  188. $TemplateCode = "SMS_250740130";
  189. foreach ($tableware_bill as $k => $row) {
  190. $phoneNumber = $row['mobile'];
  191. $code = "786324";
  192. $TemplateParam = json_encode(['code' => $code]);
  193. $is_success = $this->SmsTemplate($TemplateCode, $phoneNumber, $TemplateParam);
  194. if ($is_success) {
  195. $ids[] = $row['id'];
  196. }
  197. // todo add else log
  198. }
  199. if (count($ids) > 0) {
  200. $data_tableware_bill = [
  201. 'pay_timeout' => 1,
  202. ];
  203. $where_tableware_bill['id'] = ['in', $ids];
  204. $tableware_bill_model->isUpdate(true, $where_tableware_bill)->save($data_tableware_bill);
  205. echo(__('发送成功'));
  206. }
  207. }
  208. }
  209. /**
  210. * 积分清零
  211. */
  212. public function ScoreClear()
  213. {
  214. $score_clear_date = config('site.score_clear_date');
  215. if (empty($score_clear_date)) {
  216. $this->success('score_clear_date is null!');
  217. }
  218. $score_clear_int = strtotime($score_clear_date); // 函数将日期转换为时间戳;
  219. $clear_date = date('m-d', $score_clear_int);
  220. // today
  221. $now_date = date('m-d', time());
  222. if ($clear_date != $now_date) {
  223. $this->success('not clear date!');
  224. }
  225. $user_model = new User();
  226. // $user_model->where('id','>',0)->update(['score'=>0]);
  227. $users = $user_model->field('id,score,username')->where('score', '>', 0)->select();
  228. if (count($users) == 0) {
  229. $this->success('无操作数据');
  230. }
  231. $insert_list = [];
  232. $user_ids = [];
  233. foreach ($users as $v) {
  234. $insert_list[] = [
  235. 'user_id' => $v['id'],
  236. 'username' => $v['username'],
  237. 'number' => $v['score'],
  238. 'type' => 3,
  239. 'desc' => '程序清零',
  240. ];
  241. $user_ids[] = $v['id'];
  242. }
  243. Db::startTrans();
  244. try {
  245. // 添加记录
  246. $user_score_model = new Userscore();
  247. $user_score_model->saveAll($insert_list);
  248. // 清空积分
  249. $where_user_ids['id'] = ['in', $user_ids];
  250. $user_model->where('id', 'in', $user_ids)->update(['score' => 0, 'updatetime' => time()]);
  251. Db::commit();
  252. } catch (\Exception $e) {
  253. Db::rollback();
  254. $this->error($e->getMessage());
  255. }
  256. $this->success('ok');
  257. }
  258. }