|
@@ -2,6 +2,8 @@
|
|
|
|
|
|
namespace App\Service;
|
|
|
|
|
|
+use Illuminate\Support\Facades\Config;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
class TestService extends Service
|
|
@@ -51,6 +53,126 @@ class TestService extends Service
|
|
|
return [true, $result];
|
|
|
}
|
|
|
|
|
|
+ public function updateTopStock($data){
|
|
|
+ list($status, $msg) = $this->rule();
|
|
|
+ if(! $status) return [false, 'IP未入白名单'];
|
|
|
+ if(empty($data['urlFromT9']) || $data['urlFromT9'] != "getStock") return [false,'API请求参数不能为空'];
|
|
|
+ if(empty($data['code'])) return [false,'API请求参数不能为空'];
|
|
|
+ if(empty($data['warehouse'])) return [false,'API请求参数不能为空'];
|
|
|
+
|
|
|
+ list($status, $msg) = $this->connectYy();
|
|
|
+ if(! $status) return [false, $msg];
|
|
|
+
|
|
|
+ //数据库
|
|
|
+ $db = $msg[0];
|
|
|
+ $u8 = $msg[1];
|
|
|
+ list($status, $msg) = $this->getStock($db, $u8,$data['code'],$data['warehouse']);
|
|
|
+ return [$status, $msg];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function rule(){
|
|
|
+ // 获取用户的IP地址
|
|
|
+ $userIP = $_SERVER['REMOTE_ADDR'];
|
|
|
+ // 获取设置的IP地址
|
|
|
+ $ip = env("AliYUN");
|
|
|
+ $allowedIPs = [$ip];
|
|
|
+ $allowedIPs = array_filter($allowedIPs);
|
|
|
+
|
|
|
+ if(empty($allowedIPs)) return [false, $userIP];
|
|
|
+ // 校验用户IP是否在允许的范围内
|
|
|
+ $isValidIP = false;
|
|
|
+ foreach ($allowedIPs as $allowedIP) {
|
|
|
+ if (strpos($allowedIP, '/') !== false) {
|
|
|
+ // IP段表示法校验
|
|
|
+ list($subnet, $mask) = explode('/', $allowedIP);
|
|
|
+ if ((ip2long($userIP) & ~((1 << (32 - $mask)) - 1)) == ip2long($subnet)) {
|
|
|
+ $isValidIP = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 单个IP地址校验
|
|
|
+ if ($allowedIP === $userIP) {
|
|
|
+ $isValidIP = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return [$isValidIP, $userIP];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function connectYy(){
|
|
|
+ $model_box = DB::connection("mysqlT9");
|
|
|
+ $u8 = $model_box->table('setting')
|
|
|
+ ->where('setting_name','u8')
|
|
|
+ ->where('setting_value','<>','')
|
|
|
+ ->first();
|
|
|
+ if(empty($u8)) return [false, 'u8配置参数不存在!'];
|
|
|
+
|
|
|
+ $u8 = $u8->setting_value;
|
|
|
+ // 使用 eval() 函数执行字符串并转换为数组
|
|
|
+ $u8 = eval("return {$u8};");
|
|
|
+ if(empty($u8['domain'])) return [false, '外部域名不能为空!'];
|
|
|
+ if(empty($u8['u8_api_port'])) return [false, 'u8程序API端口不能为空!'];
|
|
|
+ if(empty($u8['u8_database_port'])) return [false, 'u8程序数据库端口不能为空!'];
|
|
|
+ if(empty($u8['database'])) return [false, 'u8程序数据库不能为空!'];
|
|
|
+ if(empty($u8['database_account'])) return [false, 'u8程序数据库登录账号不能为空!'];
|
|
|
+ if(empty($u8['database_password'])) return [false, 'u8程序数据库登录密码不能为空!'];
|
|
|
+ if(empty($u8['sAccID'])) return [false, 'u8程序sAccID不能为空!'];
|
|
|
+ if(empty($u8['sServer'])) return [false, 'u8程序sServer不能为空!'];
|
|
|
+ if(empty($u8['sUserID'])) return [false, 'u8程序sUserID不能为空!'];
|
|
|
+ if(empty($u8['sPassword'])) return [false, 'u8程序sPassword不能为空!'];
|
|
|
+
|
|
|
+ $config = [
|
|
|
+ 'driver' => 'sqlsrv',
|
|
|
+ 'host' => $u8['domain'],
|
|
|
+ 'port' => $u8['u8_database_port'],
|
|
|
+ 'database' => $u8['database'],
|
|
|
+ 'username' => $u8['database_account'],
|
|
|
+ 'password' => $u8['database_password'],
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 数据库配置设置
|
|
|
+ Config::set('database.connections.sqlsrvs', $config);
|
|
|
+
|
|
|
+ // 连接
|
|
|
+ try {
|
|
|
+ $pdo = DB::connection('sqlsrvs')->getPdo();
|
|
|
+ if ($pdo instanceof \PDO) {
|
|
|
+ // 连接成功的逻辑代码
|
|
|
+ $db = DB::connection('sqlsrvs');
|
|
|
+ return [true, [$db, $u8]];
|
|
|
+ } else {
|
|
|
+ return [false, '连接失败!'];
|
|
|
+ }
|
|
|
+ } catch (\Throwable $e) {
|
|
|
+ return [false, $e->getMessage()];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getStock($db, $u8, $code = [], $warehouse = ""){
|
|
|
+ if(empty($code) || empty($warehouse)) return [false, '存货以及仓库不能为空'];
|
|
|
+
|
|
|
+ //映射ip是否通畅
|
|
|
+ $bool = $this->isDomainAvailable($u8['domain']);
|
|
|
+ if(! $bool) return [false, 'U8程序外部域名不可达'];
|
|
|
+
|
|
|
+ $result = $db->table('CurrentStock')
|
|
|
+ ->where("cWhCode", $warehouse)
|
|
|
+ ->whereIn("cInvCode", $code)
|
|
|
+ ->select('iQuantity as number', 'cInvCode as product_no')
|
|
|
+ ->get()->toArray();
|
|
|
+ $return = [];
|
|
|
+ foreach ($result as $value){
|
|
|
+ $return[] = [
|
|
|
+ 'number' => floatval($value->number),
|
|
|
+ 'product_no' => $value->product_no
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, $return];
|
|
|
+ }
|
|
|
+
|
|
|
public function post_helper($url, $data, $header = [], $timeout = 20){
|
|
|
Log::channel('apiLog')->info('朗峰POST', ["api" => $url , "param" => $data ,"header" => $header]);
|
|
|
|