Browse Source

工单资料同步、工单BOM同步

qiuenguang 1 year ago
parent
commit
3da6a74a03

+ 0 - 1
application/api/controller/Manufacture.php

@@ -714,7 +714,6 @@ class Manufacture extends Api
         if (empty($param)){
             $this->error('参数错误');
         }
-
         $i = 0;
         foreach ($param as $key=>$value){
             $data = [

+ 267 - 0
application/api/controller/Synchronization.php

@@ -1 +1,268 @@
 <?php
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use think\Db;
+
+/**
+ * 中间表数据同步
+ */
+class Synchronization extends Api
+{
+    protected $noNeedLogin = ['*'];
+    protected $noNeedRight = ['*'];
+
+    /**
+     * 工单资料数据同步
+     */
+    public function WorkOrderData()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $db2 = Db::connect(config('database.db2'));
+        $nowTime = date('Y-m-d H:i:s',time());
+        $oldTime = date('Y-m-d 00:00:00',time()-259200);
+        $workOrderList = $db2->name('U8_06工单资料')
+            ->where("U8传递时间",'between',[$oldTime,$nowTime])
+            ->where('工单编号','<>','')
+            ->order('U8传递时间 desc')
+            ->limit(10)
+            ->select();
+        if (empty($workOrderList)){
+            $this->success('未获取新工单');
+        }
+        $data = [];
+        $i = $j = $m =0;
+        foreach ($workOrderList as $key=>$value){
+            $res = \db('工单_基本资料')
+                ->where('Uniqid',$value['UniqId'])
+                ->count();
+            $client = \db('产品_基本资料')->where('产品编号',$value['成品编号'])->field('rtrim(客户编号) as 客户编号,rtrim(客户名称) as 客户名称')->find();
+            if ($res === 0){
+                $data['add'][$i] = [
+                    'Gd_gdbh' => $value['工单编号'],
+                    '行号' => $value['行号'],
+                    'Gd_客户代号' => $client['客户编号'],
+                    'Gd_客户名称' => $client['客户名称'],
+                    'Gd_khdh' => $value['客户编号'],
+                    'Gd_khmc' => $value['客户名称'],
+                    '客户料号' => $value['客户料号'],
+                    '成品代号' => $value['成品编号'],
+                    '成品名称' => $value['成品名称'],
+                    'Gd_cpdh' => $value['产品编号'],
+                    'Gd_cpmc' => $value['产品名称'],
+                    '产品版本号' => $value['版本号'],
+                    '销售订单号' => $value['销售订单号'],
+                    '警语版面' => $value['警语版面'],
+                    'Gd_desc' => $value['备注'],
+                    '接单日期' => $value['接单日期'],
+                    '开单日期' => $value['开单日期'],
+                    '交货日期' => $value['交货日期'],
+                    '订单数量' => $value['订单数量'],
+                    '实际投料' => $value['投料数量'],
+                    '产品单价' => $value['产品单价'],
+                    '计量单位' => '万张',
+                    '成本考核_胶印' => 1,
+                    '成本考核_凹印' => 1,
+                    '成本考核_丝印' => 1,
+                    '成本考核_模切' => 1,
+                    '成本考核_检验' => 1,
+                    'gd_statu' => '3-计划中',
+                    'Sys_rq' => date('Y-m-d H:i:s',time()),
+                    'Mod_rq' => date('Y-m-d H:i:s',time()),
+                    'U8UID' => $value['U8_UID'],
+                    'Uniqid' => $value['UniqId']
+                ];
+                $i++;
+            }else{
+                $data['update'] = [
+                    'Gd_gdbh' => $value['工单编号'],
+                    '行号' => $value['行号'],
+                    'Gd_客户代号' => $client['客户编号'],
+                    'Gd_客户名称' => $client['客户名称'],
+                    'Gd_khdh' => $value['客户编号'],
+                    'Gd_khmc' => $value['客户名称'],
+                    '客户料号' => $value['客户料号'],
+                    '成品代号' => $value['成品编号'],
+                    '成品名称' => $value['成品名称'],
+                    'Gd_cpdh' => $value['产品编号'],
+                    'Gd_cpmc' => $value['产品名称'],
+                    '产品版本号' => $value['版本号'],
+                    '销售订单号' => $value['销售订单号'],
+                    '警语版面' => $value['警语版面'],
+                    'Gd_desc' => $value['备注'],
+                    '接单日期' => $value['接单日期'],
+                    '开单日期' => $value['开单日期'],
+                    '交货日期' => $value['交货日期'],
+                    '订单数量' => $value['订单数量'],
+                    '实际投料' => $value['投料数量'],
+                    '产品单价' => $value['产品单价'],
+                    '计量单位' => '万张',
+                    '成本考核_胶印' => 1,
+                    '成本考核_凹印' => 1,
+                    '成本考核_丝印' => 1,
+                    '成本考核_模切' => 1,
+                    '成本考核_检验' => 1,
+                    'gd_statu' => '3-计划中',
+                    'Sys_rq' => date('Y-m-d H:i:s',time()),
+                    'Mod_rq' => date('Y-m-d H:i:s',time()),
+                    'U8UID' => $value['U8_UID']
+                ];
+                $updateSql = \db('工单_基本资料')->where('Uniqid',$value['UniqId'])->fetchSql(true)->update($data['update']);
+                $updateRes = \db()->query($updateSql);
+                if ($updateRes === false){
+                    $j++;
+                }
+            }
+        }
+        if ($i !== 0){
+            $addSql = \db('工单_基本资料')->fetchSql(true)->insertAll($data['add']);
+            $result = \db()->query($addSql);
+            if ($result === false){
+                $m++;
+            }
+        }
+        if ($j !== 0 || $m !==0){
+            $this->error('工单资料同步失败');
+        }else{
+            $this->success('工单资料同步成功');
+        }
+    }
+
+    /**
+     * 工单bom资料同步
+     */
+
+    public function WorkOrderBomData()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $db2 = Db::connect(config('database.db2'));
+        $nowTime = date('Y-m-d H:i:s',time());
+        $oldTime = date('Y-m-d 00:00:00',time()-259200);
+        $BomDataList = $db2->name('U8_09工单bom')
+            ->where('U8传递时间','between',[$oldTime,$nowTime])
+            ->where('BOM_工单编号','<>','')
+            ->order('U8传递时间 desc')
+            ->select();
+        if (empty($BomDataList)){
+            $this->success('未找到新工单BOM');
+        }
+        $data = [];
+        $i = $j = $m = 0;
+        foreach ($BomDataList as $key=>$value){
+            $res = \db('工单_bom资料')->where('UNIQID',$value['UNIQID'])->count();
+            if ($res === 0){
+                $data['add'][$i] = [
+                    'BOM_方案' => '工单评审定案',
+                    'BOM_工单编号' => $value['BOM_工单编号'],
+                    'BOM_版本' => $value['BOM_版本'],
+                    'BOM_工单行号' => $value['BOM_工单行号'],
+                    'BOM_行号' => $value['BOM_行号'],
+                    'BOM_产品编号' => $value['BOM_产品编号'],
+                    'BOM_物料编码' => $value['BOM_物料编码'],
+                    'BOM_物料名称' => $value['BOM_物料名称'],
+                    'BOM_投料单位' => $value['BOM_投料单位'],
+                    'BOM_投入数' => $value['BOM_投入数'],
+                    'BOM_产出数' => $value['BOM_产出数'],
+                    'BOM_产出单位' => $value['BOM_产出单位'],
+                    'BOM_标准用量' => $value['BOM_标准用量'],
+                    'BOM_实际用量' => $value['BOM_实际用量'],
+                    'BOM_计划用量' => $value['BOM_计划用量'],
+                    'BOM_核算价格' => 0,
+                    'Bom_领用工序' => '01-01',
+                    'BOM_备注' => $value['BOM_备注'],
+                    'Mod_rq' => date('Y-m-d H:i:s',time()),
+                    'U8UID' => $value['U8_UID'],
+                    'UNIQID' => $value['UNIQID']
+                ];
+                $i++;
+            }else{
+                $data['update'] = [
+                    'BOM_方案' => '工单评审定案',
+                    'BOM_工单编号' => $value['BOM_工单编号'],
+                    'BOM_版本' => $value['BOM_版本'],
+                    'BOM_工单行号' => $value['BOM_工单行号'],
+                    'BOM_行号' => $value['BOM_行号'],
+                    'BOM_产品编号' => $value['BOM_产品编号'],
+                    'BOM_物料编码' => $value['BOM_物料编码'],
+                    'BOM_物料名称' => $value['BOM_物料名称'],
+                    'BOM_投料单位' => $value['BOM_投料单位'],
+                    'BOM_投入数' => $value['BOM_投入数'],
+                    'BOM_产出数' => $value['BOM_产出数'],
+                    'BOM_产出单位' => $value['BOM_产出单位'],
+                    'BOM_标准用量' => $value['BOM_标准用量'],
+                    'BOM_实际用量' => $value['BOM_实际用量'],
+                    'BOM_计划用量' => $value['BOM_计划用量'],
+                    'BOM_核算价格' => 0,
+                    'Bom_领用工序' => '01-01',
+                    'BOM_备注' => $value['BOM_备注'],
+                    'Mod_rq' => date('Y-m-d H:i:s',time()),
+                    'U8UID' => $value['U8_UID']
+                ];
+                $updateSql = \db('工单_bom资料')
+                    ->where('UNIQID',$value['UNIQID'])
+                    ->fetchSql(true)
+                    ->update($data['update']);
+                $updateRes = \db()->query($updateSql);
+                if ($updateRes === false){
+                    $j++;
+                }
+            }
+        }
+        if ($i !== 0){
+            $addSql = \db('工单_bom资料')->fetchSql(true)->insertAll($data['add']);
+            $addRes = \db()->query($addSql);
+            if ($addRes === false){
+                $m++;
+            }
+        }
+        if ($j !== 0 || $m !== 0){
+            $this->error('工单BOM资料同步失败');
+        }else{
+            $this->success('工单BOM资料同步成功');
+        }
+    }
+
+//    /**
+//     * 物料领用数据同步
+//     */
+//
+//    public function MaterialRequisitionData()
+//    {
+//        if ($this->request->isGet() === false){
+//            $this->error('请求错误');
+//        }
+//        $db2 = Db::connect(config('database.db2'));
+//        $nowTime = date('Y-m-d H:i:s',time());
+//        $oldTime = date('Y-m-d 00:00:00',time()-259200);
+//        $MaterialDataList = $db2->name('U8_07物料领用')
+//            ->where('U8传递时间','between',[$oldTime,$nowTime])
+//            ->where('工单编号','<>','')
+//            ->order('U8传递时间 desc')
+//            ->select();
+//        if (empty($MaterialDataList)){
+//            $this->success('未找到新的物料领用记录');
+//        }
+//        $data = [];
+//        $i = $j = $m = 0;
+//        foreach ($MaterialDataList as $key=>$value){
+//            $res = \db('物料_收发记录')->where('Uniqid',$value['UniqId'])->count();
+//            if ($res === 0){
+////                $data['add']
+//            }
+//        }
+//    }
+//
+//    //产品资料同步
+//
+//    public function ProductData()
+//    {
+//        if ($this->request->isGet() === false){
+//            $this->error('请求错误');
+//        }
+//    }
+}

+ 50 - 5
application/database.php

@@ -17,15 +17,15 @@ return [
     // 数据库类型
     'type'            => Env::get('database.type', 'mysql'),
     // 服务器地址
-    'hostname'        => Env::get('database.hostname', '127.0.0.1'),
+    'hostname'        => Env::get('database.hostname', '20.0.16.161'),
     // 数据库名
-    'database'        => Env::get('database.database', 'fastadmin'),
+    'database'        => Env::get('database.database', 'mesdb'),
     // 用户名
     'username'        => Env::get('database.username', 'root'),
     // 密码
-    'password'        => Env::get('database.password', ''),
+    'password'        => Env::get('database.password', 'ZJYX_Mes8052'),
     // 端口
-    'hostport'        => Env::get('database.hostport', ''),
+    'hostport'        => Env::get('database.hostport', '8066'),
     // 连接dsn
     'dsn'             => '',
     // 数据库连接参数
@@ -33,7 +33,7 @@ return [
     // 数据库编码默认采用 utf8mb4
     'charset'         => Env::get('database.charset', 'utf8mb4'),
     // 数据库表前缀
-    'prefix'          => Env::get('database.prefix', 'fa_'),
+    'prefix'          => Env::get('database.prefix', ''),
     // 数据库调试模式
     'debug'           => Env::get('database.debug', false),
     // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
@@ -54,4 +54,49 @@ return [
     'datetime_format' => false,
     // 是否需要进行SQL性能分析
     'sql_explain'     => false,
+    /**
+     * 配置第二数据库
+     **/
+    'db2'             => [
+        // 数据库类型
+        'type'            => Env::get('database2.type', 'sqlsrv'),
+        // 服务器地址
+        'hostname'        => Env::get('database2.hostname', '10.10.4.8'),
+        // 数据库名
+        'database'        => Env::get('database2.database', 'U8ERPDATA'),
+        // 用户名
+        'username'        => Env::get('database2.username', 'sa'),
+        // 密码
+        'password'        => Env::get('database2.password', 'ZJMN_ADMIN8052'),
+        // 端口
+        'hostport'        => Env::get('database2.hostport', ''),
+        // 连接dsn
+        'dsn'             => '',
+        // 数据库连接参数
+        'params'          => [],
+        // 数据库编码默认采用 utf8mb4
+        'charset'         => Env::get('database2.charset', 'utf8mb4'),
+        // 数据库表前缀
+        'prefix'          => Env::get('database2.prefix', ''),
+        // 数据库调试模式
+        'debug'           => Env::get('database2.debug', false),
+        // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
+        'deploy'          => 0,
+        // 数据库读写是否分离 主从式有效
+        'rw_separate'     => false,
+        // 读写分离后 主服务器数量
+        'master_num'      => 1,
+        // 指定从服务器序号
+        'slave_no'        => '',
+        // 是否严格检查字段是否存在
+        'fields_strict'   => true,
+        // 数据集返回类型
+        'resultset_type'  => 'array',
+        // 自动写入时间戳字段
+        'auto_timestamp'  => false,
+        // 时间字段取出后的默认时间格式,默认为Y-m-d H:i:s
+        'datetime_format' => false,
+        // 是否需要进行SQL性能分析
+        'sql_explain'     => false,
+    ]
 ];

+ 2 - 1
thinkphp/library/think/db/builder/Sqlsrv.php

@@ -13,6 +13,7 @@ namespace think\db\builder;
 
 use think\db\Builder;
 use think\db\Expression;
+use think\Exception;
 
 /**
  * Sqlsrv数据库驱动
@@ -95,7 +96,7 @@ class Sqlsrv extends Builder
             }
         }
 
-        if ($strict && !preg_match('/^[\w\.\*]+$/', $key)) {
+        if ($strict && !preg_match('/^[\w\.\*\x7f-\xff]+$/', $key)) {
             throw new Exception('not support data:' . $key);
         }
         if ('*' != $key && ($strict || !preg_match('/[,\'\"\*\(\)\[.\s]/', $key))) {