需求:
1、庫存低于n自動給商家發短信,通知商家進貨。
2、通過切換手機號,可以控制是給老板還是給庫管發短信
該功能用的是thinkcmf二開,用到了一個類庫,[請點擊下載](https://download.csdn.net/download/qq_33862644/10421692)
- html 代碼
~~~
<div>
<br/>
<b>設置庫存量,自動發送短信</b><br/>
發給給誰:<input type="text" name="cellphone" class="phone"/>
低于庫存多少發送:<input type="text" name="cellnum" class="num"/>
<input type="button" value="設置" class="set_phone" name="celle">
<a href="{:url('sms/index')}">手動測試發送短信</a>
</div>
~~~
~~~
<script>
$(function () {
//設置短信。點擊設置按鈕
$('.set_phone').click(function () {
//alert('aa');
var phone = $('.phone').val(); //手機號
var num = $('.num').val(); //庫存低於多少發短信
//發送ajax
$.ajax({
method: 'post',
url: "{:url('Sms/add')}",
data: {cellphone: phone, cellnum: num},
success: function (msg) {
if (msg.code == 1) {
layer.alert(msg.msg_info);
}
if (msg.code == 2) {
layer.alert(msg.msg_info);
}
}
});
});
});
</script>
~~~
- 配置文件

- 控制器 代碼
~~~
<?php
namespace app\ws\controller;
use think\Controller;
use think\Loader;
use think\Config;
use think\Db;
class SmsController extends Controller{
//發送手機
public function index(){
header('Content-Type: text/plain; charset=utf-8');
//【查】發送給哪個手機,低于多少發送
$sms = Db::name('ws_sms')->where('status',1)->find(); //倒序,取最新的
//【查】出所有,狀態 == 2 && remnant_inventory < 5
$map = [
'status' => 2,
'remnant_inventory' => ['<',$sms['num']]
];
$info = Db::name('ws_stock')->where($map)->select(); //查數據
//循環發短信
foreach($info as $key => $value){
$res = $this->sendSms($sms['phone'],$value['brand'],$value['version'],$value['remnant_inventory']);
if($res->Message == 'OK'){
echo "手動發送成功";
echo "<br />";
}
if($res->Code == 'isv.BUSINESS_LIMIT_CONTROL'){
$this->success('您今天發送的短信已達上線(60條)',url('Stock/index'));
}
}
}
/**
* 發送短信
* @param $phone 要發送的手機號
* @param array $data 替換模板中的變量
*/
public function sendSms($phone,$goods,$version,$remnant_inventory){
Loader::import('dayu.api_demo.SmsDemo');
$config = Config::get('dayu');
$demo = new \SmsDemo(
"{$config['appKey']}", //需要改的
"{$config['appSecret']}" //需要改的
);
//發送短信
$response = $demo->sendSms(
"{$config['sign_name']}", // 短信簽名(需要改的)
"{$config['templet_code']}", // 短信模板編號(需要改的)
"{$phone}", // 短信接收者(需要改的)
Array( // 短信模板中變量的值(需要改的)
"goods"=>"{$goods}", //品牌
"model"=>"{$version}", //型號
"num"=>"{$remnant_inventory}" //數量
),
"123"
);
return $response;
}
/**
* 【增】【改】手機號
* @return array
*/
public function add(){
$data = $this->request->param();
//驗證數據合法不合法
$preg = '/^1\d{10}$/';
$info = preg_match($preg,$data['cellphone'],$match);
//如果有$find_id走更新,無走添加
$find = DB::name('ws_sms')->where('phone','=',$data['cellphone'])->select();
$find_id = ''; //一個標識 判斷用
foreach ($find as $value){
$find_id = $value['id'];
}
//手機號是11位
if($info && is_numeric($data['cellnum'])){
$add_res = '';
$update_res = '';
//更新
if($find_id){
//將存在的$find_id記錄,更新為1,其他更新為2。
$update_a = DB::name('ws_sms')->where('id','=',$find_id)->setField('status',1);
//更新數量(設置的小于多少發送)
$update_c = DB::name('ws_sms')->where('id','=',$find_id)->setField('num',$data['cellnum']);
$update_b = DB::name('ws_sms')->where('id','<>',$find_id)->setField('status',2);
//echo DB::name('ws_sms')->getLastSql();
if($update_a && $update_b && $update_c){
$update_res = true;
}
}else{
$save_data = [
'phone' => $data['cellphone'],
'num' => $data['cellnum'],
'status' => 1
];
//添加成功1條,將該條置為1。其他的狀態置為2
DB::table('cmf_ws_sms')->insert($save_data);
$user_id = DB::table('cmf_ws_sms')->getLastInsID();
$add_res = DB::name('ws_sms')->where('id','<>',$user_id)->setField('status',2);
}
//添加成功 或 更新成功
if($add_res || $update_res){
$msg = ['code'=>1,'msg_info'=>'設置成功'];
return $msg;
}
}else{
$msg = ['code'=>2,'msg_info'=>'設置失敗,請檢查手機號的位數'];
return $msg;
}
}
}
?>
~~~
- 雜談
- 開發 & 維護的工作流程
- 新手如何看php手冊 和 框架手冊
- 開發 & 維護的不同點
- 從0到1,搭建新項目的工作流程
- 從1到N,維護的工作流程
- 優化流程
- 生成錯誤日志和慢日志的方法
- 查錯思路
- 怎么快速接手一個項目
- 前端常用知識點
- javascript
- 自己封裝的函數
- 處理數字
- 功能代碼
- 動態添加圖片
- 判斷是手機端還是pc端
- javascript:;是什么意思?怎么用呢
- html & h5
- a標簽中target設置為blank和_blank有什么區別?
- 亂碼
- 提交方式:button標簽 和 input
- 塊元素
- 內聯元素
- h5特有屬性
- h5的localStorage【增、刪、改、查】
- jquery
- 常用方法
- 功能代碼
- 動態刪除圖片
- 一個按鈕,切換2種狀態
- 換膚
- 深入理解(function(){... })();
- json & xml
- json
- 語法速記
- json對象取值
- 字符串、對象、數組的區別
- xml
- [CDATA[%s]]的作用是什么
- 轉義字符
- CDATA 想被xml解析的文本數據
- CDATA 不想被xml解析的文本數據
- 微信小程序
- 其他
- websocket
- 跨域
- css
- 行內 & 內連 & 外連 寫法
- 優先級
- 更加精準的匹配
- 使用百分比如何生效
- php在html、js、jq中的的原生寫法
- *php在html中的語法
- php在js中的語法
- php在jq中的語法
- 正則表達式
- php常用基礎知識(思想為主)
- php為什么是“邊編譯邊運行”
- 冒號、endif、endwhile、endfor使用
- 遞歸思想(速記法)
- cookie和session的理解
- php常用內置(系統)函數
- 常量
- 字符串
- 數組
- 日期時間
- 文件 & 目錄
- 數學
- 程序執行
- 判斷
- 選項和信息(修改配置文件的)
- 錯誤處理 & 日志記錄
- 編碼格式
- session
- IP相關
- 類 & 對象
- 性能
- 其他函數
- 魔術方法
- $_SERVER
- 變量處理
- php自己封裝的一些函數
- 導入、導出、生成文件
- 數組
- 數字
- 字符串
- 其他
- 獲取linux硬件信息
- 常見插件/類庫使用
- 前端-框架/插件
- bootstrap 學習筆記
- layer 學習筆記
- layDate 學習筆記
- 百度ueditor1.4.4.3富文本編輯器
- quill富文本編輯器
- 百度ECharts圖形報表
- webuploader上傳圖片
- 后端類庫
- workerman 聊天室
- QRCODE 二維碼
- redis
- seaslog 日志
- phpspider 爬蟲
- Mailer 發送郵件
- simple_html_dom
- phpstorm使用
- 快捷鍵
- 連接mysql數據庫
- 斷點 + debug調試
- 運行內存不夠
- wamp環境
- yii、laravel、tp、開發自己的php框架
- 看框架源碼的思路
- tp5框架的使用
- 1、助手函數原理解析
- 開發自己的php框架
- 常用的開發思路 和 小功能實現代碼
- 爬蟲思路
- 功能點思路
- tp5判斷是不是異地登錄(簡單版)
- 微信開發,反向代理
- 微信開發,關閉當前頁面
- 消息隊列的實現
- 頁面靜態化
- session串號
- 站內信設計思路
- web在線管理器
- 語言相關(開發有關)
- 接收json(text/xml)格式數據
- 原生文件上傳(狀態碼)
- openssl擴展
- 打印對象 和 遍歷對象
- 使用OB緩存的幾個原則
- CLI模式執行php文件
- foreach時,添加元素 或 修改元素的值
- 功能點 代碼實現
- 生成url目錄樹(沒有pid)
- 多圖上傳(vue傳base64)
- 下載文件,耗時算法
- 生成商品二維碼
- 導出excel
- 搜索
- 阿里大魚發短信
- 使用阿里云oss
- location.href跳轉后,丟失用戶的session
- “\r ” “\r\n” “\t”的區別
- php的配置文件詳解
- 開啟錯誤日志
- 開啟慢日志
- 開啟短標簽
- 分析php-fpm.conf中的request_terminate_timeout參數