DeviceForm.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models\adopt;
  8. use app\librarys\YsOpen\YsClient;
  9. use app\plugins\adopt\models\AdoptSetting;
  10. use app\plugins\adopt\models\Monitor;
  11. use app\constants\OptionSetting;
  12. use app\models\Attr;
  13. use app\models\AttrGroup;
  14. use app\models\Form;
  15. use app\models\Goods;
  16. use app\models\GoodsBook;
  17. use app\models\GoodsCat;
  18. use app\models\GoodsPic;
  19. use app\models\Level;
  20. use app\models\Option;
  21. use app\models\PostageRules;
  22. use app\models\VerifyCard;
  23. use app\plugins\adopt\models\AdoptGoods;
  24. use yii\base\Model;
  25. use yii\helpers\Json;
  26. use app\jobs\SyncMdGoodsJob;
  27. use app\utils\Tools;
  28. class DeviceForm extends Model
  29. {
  30. public $store_id;
  31. public $status;
  32. /**
  33. * 初始化
  34. */
  35. public function init()
  36. {
  37. $this->store_id = get_store_id();
  38. }
  39. /**
  40. * @return array
  41. */
  42. public function rules()
  43. {
  44. return [
  45. [['status'], 'integer'],
  46. ];
  47. }
  48. public function attributeLabels()
  49. {
  50. return [
  51. 'status' => '设备状态',
  52. ];
  53. }
  54. /**
  55. * @param array $arr | status 状态 name 名称 cat_id 分类id mch_id 入驻商 is_verify 审核 select 查询数据
  56. * @return array
  57. */
  58. public static function getList ($arr = [])
  59. {
  60. $query = Monitor::find()
  61. ->where(['store_id' => get_store_id()]);
  62. if (isset($arr['status']) && $arr['status'] > -1) {
  63. $query->andWhere([
  64. 'status' => $arr['status']
  65. ]);
  66. }
  67. $query->orderBy(['created_at' => SORT_ASC, 'id' => SORT_DESC]);
  68. $pagination = pagination_make($query);
  69. $pagination['data'] = $pagination['list'];
  70. return [
  71. 'code' => 0,
  72. 'msg' => 'success',
  73. 'data' => $pagination
  74. ];
  75. }
  76. /**
  77. * 绑定设备
  78. * @param $arr
  79. * @return array
  80. */
  81. public static function addItem($arr = []){
  82. if($arr['id']){
  83. $model = Monitor::findOne($arr['id']);
  84. }else{
  85. $model = new Monitor();
  86. }
  87. $model->store_id = get_store_id();
  88. $model->name = $arr['name'];
  89. $model->serial = $arr['serial'];
  90. $model->code = $arr['code'];
  91. $model->cover_pic = $arr['cover_pic'];
  92. $model->status = 1;
  93. $t = \Yii::$app->db->beginTransaction();
  94. try {
  95. if(!$model->save()){
  96. $t->rollBack();
  97. return ['code'=>1,'msg'=>$model->getErrors()];
  98. }
  99. if($arr['id'] <= 0){
  100. // 获取萤石配置
  101. $setting = AdoptSetting::findOne(['store_id'=>get_store_id()]);
  102. if(!$setting->ys_app_key || !$setting->ys_secret){
  103. $t->rollBack();
  104. return ['code'=>1,'msg'=>'未设置萤石信息'];
  105. }
  106. $ysOpen = new YsClient($setting->ys_app_key,$setting->ys_secret);
  107. $getAccessTokenResult = $ysOpen->getAccessToken();
  108. if(false == $getAccessTokenResult){
  109. $t->rollBack();
  110. return ['code'=>1,'msg'=>"萤石账号有误"];
  111. }
  112. $addResult = $ysOpen->addDeviceItem($arr['serial'],$arr['code']);
  113. if($addResult['code'] != 200){
  114. $t->rollBack();
  115. return ['code'=>1,'msg'=>$addResult['msg']];
  116. }
  117. }
  118. $t->commit();
  119. return [
  120. 'code' => 0,
  121. 'msg' => 'success',
  122. ];
  123. }catch (\Exception $e){
  124. $t->rollBack();
  125. return ['code'=>1,'msg'=>$e->getMessage()];
  126. }
  127. }
  128. /**
  129. * 解除绑定
  130. * @param $arr
  131. * @return array
  132. * @throws \Throwable
  133. */
  134. public static function delItem($arr = []){
  135. $model = Monitor::findOne($arr['device_id']);
  136. if(!$model){
  137. return ['code'=>1,'msg'=>'设备不存在,请先刷新设备列表'];
  138. }
  139. $t = \Yii::$app->db->beginTransaction();
  140. try {
  141. // 获取萤石配置
  142. $setting = AdoptSetting::findOne(['store_id'=>get_store_id()]);
  143. if(!$setting->ys_app_key || !$setting->ys_secret){
  144. $t->rollBack();
  145. return ['code'=>1,'msg'=>'未设置萤石信息'];
  146. }
  147. $ysOpen = new YsClient($setting->ys_app_key,$setting->ys_secret);
  148. $getAccessTokenResult = $ysOpen->getAccessToken();
  149. if(false == $getAccessTokenResult){
  150. $t->rollBack();
  151. return ['code'=>1,'msg'=>"萤石账号有误"];
  152. }
  153. $delResult = $ysOpen->delDeviceItem($model->serial);
  154. if($delResult['code'] != 200){
  155. $t->rollBack();
  156. return ['code'=>1,'msg'=>$delResult['msg']];
  157. }
  158. if(!$model->delete()){
  159. $t->rollBack();
  160. return ['code'=>1,'msg'=>"删除设备失败"];
  161. }
  162. $t->commit();
  163. return ['code'=>0,'msg'=> '删除设备成功'];
  164. }catch (\Exception $e){
  165. $t->rollBack();
  166. return ['code'=>1,'msg'=>$e->getMessage()];
  167. }
  168. }
  169. /**
  170. * 刷新设备列表
  171. * @return array|void
  172. */
  173. public static function refresh(){
  174. // 获取萤石配置
  175. $setting = AdoptSetting::findOne(['store_id'=>get_store_id()]);
  176. if(!$setting->ys_app_key || !$setting->ys_secret){
  177. return ['code'=>1,'msg'=>'未设置萤石信息'];
  178. }
  179. $ysOpen = new YsClient($setting->ys_app_key,$setting->ys_secret);
  180. $getAccessTokenResult = $ysOpen->getAccessToken();
  181. if(false == $getAccessTokenResult){
  182. return ['code'=>1,'msg'=>"萤石账号有误"];
  183. }
  184. $result = $ysOpen->getDeviceList();
  185. if($result['code'] != 200){
  186. return ['code'=>1,'msg'=>$result['msg'],'resultCode'=>$result['code']];
  187. }
  188. foreach($result['data'] as $item){
  189. // 根据设备序列号查询设备是否存在
  190. $deviceItem = Monitor::findOne(['serial'=>$item['deviceSerial']]);
  191. if($deviceItem){
  192. // 更新一下状态
  193. $deviceItem->status = $item['status'];
  194. }else{
  195. // 写入一条
  196. $deviceItem = new Monitor();
  197. $deviceItem->store_id = get_store_id();
  198. $deviceItem->name = $item['deviceName'];
  199. $deviceItem->serial = $item['deviceSerial'];
  200. $deviceItem->status = $item['status'];
  201. $deviceItem->created_at = bcdiv($item['addTime'],1000,0);
  202. }
  203. if(!$deviceItem->save()){
  204. }
  205. }
  206. return ['code'=>0,'msg'=>'更新成功'];
  207. }
  208. /**
  209. * 获取设备选择列表
  210. * @return array
  211. */
  212. public static function getSelectList(){
  213. $list = Monitor::find()->where([
  214. 'store_id' => get_store_id()
  215. ])->select('id,name')->all();
  216. return ['code'=>0,'data'=>$list];
  217. }
  218. }