AssetService.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. namespace App\Service;
  3. use App\Jobs\AssetDeviceJob;
  4. use App\Model\Asset;
  5. use App\Model\AssetOther;
  6. use App\Model\InventoryOrderAsset;
  7. use App\Model\Settings;
  8. class AssetService extends Service
  9. {
  10. public function edit($data){
  11. list($status,$msg) = $this->AssetRule($data,false);
  12. if(!$status) return [$status,$msg];
  13. $model = new AssetOther();
  14. $model = $model->where('id',$data['id'])->first();
  15. $model->name = $data['name'];
  16. $model->singleCode = $data['singleCode'];
  17. $model->assetNo = $data['assetNo'] ?? '';
  18. $model->version = $data['version'] ?? '';
  19. $model->located = $data['located'] ?? '';
  20. $model->startUseDate = $data['startUseDate'] ?? '';
  21. $model->useDept = $data['useDept'] ?? '';
  22. $model->userName = $data['userName'] ?? '';
  23. $model->assetCode = $data['assetCode'] ?? '';
  24. $model->assetType = $data['assetType'] ?? '';
  25. $model->originalValue = $data['originalValue'] ?? '';
  26. $model->purchaseTime = $data['purchaseTime'] ?? '';
  27. $model->expectedLife = $data['expectedLife'] ?? '';
  28. $model->isKey = $data['isKey'] ?? '';
  29. $model->brand = $data['brand'] ?? '';
  30. $model->type = $data['type'] ?? '';
  31. $model->remark = $data['remark'] ?? '';
  32. $model->kind = $data['kind'] ?? '';
  33. $model->gs1 = $data['gs1'] ?? '';
  34. $model->nextCalibrationTime = $data['nextCalibrationTime'] ?? '';
  35. $model->save();
  36. return [true,''];
  37. }
  38. public function add($data){
  39. list($status,$msg) = $this->AssetRule($data);
  40. if(!$status) return [$status,$msg];
  41. $model = new AssetOther();
  42. $model->name = $data['name'];
  43. $model->singleCode = $data['singleCode'];
  44. $model->assetNo = $data['assetNo'] ?? '';
  45. $model->version = $data['version'] ?? '';
  46. $model->located = $data['located'] ?? '';
  47. $model->startUseDate = $data['startUseDate'] ?? '';
  48. $model->useDept = $data['useDept'] ?? '';
  49. $model->userName = $data['userName'] ?? '';
  50. $model->assetCode = $data['assetCode'] ?? '';
  51. $model->assetType = $data['assetType'] ?? '';
  52. $model->originalValue = $data['originalValue'] ?? '';
  53. $model->purchaseTime = $data['purchaseTime'] ?? '';
  54. $model->expectedLife = $data['expectedLife'] ?? '';
  55. $model->isKey = $data['isKey'] ?? '';
  56. $model->brand = $data['brand'] ?? '';
  57. $model->type = $data['type'] ?? '';
  58. $model->remark = $data['remark'] ?? '';
  59. $model->kind = $data['kind'] ?? '';
  60. $model->gs1 = $data['gs1'] ?? '';
  61. $model->nextCalibrationTime = $data['nextCalibrationTime'] ?? '';
  62. $model->save();
  63. return [true,''];
  64. }
  65. public function del($data){
  66. if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
  67. AssetOther::where('id',$data['id'])->update([
  68. 'del_time' => time()
  69. ]);
  70. return [true,''];
  71. }
  72. public function assetList($data){
  73. $model = Asset::where('del_time',0)
  74. ->select('*')
  75. ->orderby('id', 'desc');
  76. if(! empty($data['name'])) $model->where('name', 'LIKE', '%'.$data['name'].'%');
  77. if(! empty($data['singleCode'])) $model->where('singleCode', 'LIKE', '%'.$data['singleCode'].'%');
  78. if(! empty($data['located'])) $model->where('located', 'LIKE', '%'.$data['located'].'%');
  79. if(! empty($data['useDept'])) $model->where('useDept', 'LIKE', '%'.$data['useDept'].'%');
  80. $list = $this->limit($model,'',$data);
  81. $list = $this->fillData($list);
  82. return [true,$list];
  83. }
  84. public function fillData($data){
  85. if(empty($data['data'])) return $data;
  86. foreach ($data['data'] as $key => $value){
  87. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
  88. $data['data'][$key]['upd_time'] = $value['upd_time'] ? date('Y-m-d H:i:s',$value['upd_time']) : '';
  89. }
  90. return $data;
  91. }
  92. public function assetDetail($data){
  93. if(empty($data['singleCode'])) return [false, '资产唯一编码不能为空'];
  94. $return = [];
  95. $asset = Asset::where('del_time',0)->where('singleCode', $data['singleCode'])->first();
  96. if(! empty($asset)) {
  97. $return = $asset->toArray();
  98. }else{
  99. $asset = AssetOther::where('del_time',0)->where('singleCode', $data['singleCode'])->first();
  100. if(! empty($asset)) $return = $asset->toArray();
  101. }
  102. return [true, 'asset' => $return];
  103. }
  104. public function AssetRule($data, $is_check = true){
  105. if($this->isEmpty($data,'name')) return [false,'资产名称不能为空!'];
  106. if($this->isEmpty($data,'singleCode')) return [false,'资产唯一码不能为空!'];
  107. if($is_check){
  108. $bool = AssetOther::where('del_time',0)
  109. ->where('singleCode',$data['singleCode'])
  110. ->exists();
  111. }else{
  112. if($this->isEmpty($data,'id')) return [false,'数据ID不能为空!'];
  113. $bool = AssetOther::where('del_time',0)
  114. ->where('id','<>',$data['id'])
  115. ->where('singleCode',$data['singleCode'])
  116. ->exists();
  117. }
  118. if($bool) return [false,'资产唯一码不能重复'];
  119. return [true, ''];
  120. }
  121. public function getDepAndArea($data){
  122. $list = Asset::where('del_time',0)
  123. ->select('located','useDept')
  124. ->get()->toArray();
  125. $located = $dep = [];
  126. foreach ($list as $value){
  127. if(! empty($value['located']) && ! in_array($value['located'], $located)) $located[] = $value['located'];
  128. if(! empty($value['useDept']) && ! in_array($value['useDept'], $dep)) $dep[] = $value['useDept'];
  129. }
  130. return [true,['located' => $located,'dep' => $dep]];
  131. }
  132. public function updateData($data){
  133. list($status,$msg) = $this->rule($data);
  134. if(! $status) {
  135. file_put_contents('record_ip.txt',date("Y-m-d H:i:s",time()).json_encode($data) . PHP_EOL."来源IP".$msg.PHP_EOL,8);
  136. return [false, 'IP未入白名单'];
  137. }
  138. dispatch(new AssetDeviceJob($data))->onQueue(Asset::Key_Queue);
  139. return [true,''];
  140. }
  141. public function rule($data){
  142. // 获取用户的IP地址
  143. $userIP = $_SERVER['REMOTE_ADDR'];
  144. // 获取设置的IP地址
  145. $allowedIPs = $this->allowedIPs();
  146. if(empty($allowedIPs)) return [false, $userIP];
  147. // 校验用户IP是否在允许的范围内
  148. $isValidIP = false;
  149. foreach ($allowedIPs as $allowedIP) {
  150. if (strpos($allowedIP, '/') !== false) {
  151. // IP段表示法校验
  152. list($subnet, $mask) = explode('/', $allowedIP);
  153. if ((ip2long($userIP) & ~((1 << (32 - $mask)) - 1)) == ip2long($subnet)) {
  154. $isValidIP = true;
  155. break;
  156. }
  157. } else {
  158. // 单个IP地址校验
  159. if ($allowedIP === $userIP) {
  160. $isValidIP = true;
  161. break;
  162. }
  163. }
  164. }
  165. return [$isValidIP, $userIP];
  166. }
  167. public function allowedIPs(){
  168. $allowedIPs = Settings::where('name','allowedIPs')->first();
  169. if(empty($allowedIPs) || empty($allowedIPs->value)) return [];
  170. return explode(',',$allowedIPs->value);
  171. }
  172. public function assetOtherList($data){
  173. $model = AssetOther::where('del_time',0)
  174. ->select('*')
  175. ->orderby('id', 'desc');
  176. if(! empty($data['name'])) $model->where('name', 'LIKE', '%'.$data['name'].'%');
  177. if(! empty($data['singleCode'])) $model->where('singleCode', 'LIKE', '%'.$data['singleCode'].'%');
  178. if(! empty($data['located'])) $model->where('located', 'LIKE', '%'.$data['located'].'%');
  179. if(! empty($data['useDept'])) $model->where('useDept', 'LIKE', '%'.$data['useDept'].'%');
  180. $list = $this->limit($model,'',$data);
  181. $list = $this->fillOtherData($list);
  182. return [true,$list];
  183. }
  184. public function fillOtherData($data){
  185. if(empty($data['data'])) return $data;
  186. foreach ($data['data'] as $key => $value){
  187. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
  188. $data['data'][$key]['upd_time'] = $value['upd_time'] ? date('Y-m-d H:i:s',$value['upd_time']) : '';
  189. }
  190. return $data;
  191. }
  192. }