Prechádzať zdrojové kódy

Merge branch 'master' of https://git.7in6.com/Minong/mes-server-api

曹鹤洋 1 rok pred
rodič
commit
683d3b75d6

+ 41 - 2
application/api/controller/Facility.php

@@ -47,14 +47,14 @@ class Facility extends Api
                 'rtrim(sczl_jtbh)' => '机台编号'
             ])
             ->where('sczl_rq','>',$date)
-            ->cache(true,86400)
+            ->cache(true,3600)
             ->order('sczl_rq desc')
             ->select();
         if (empty($list)){
             $this->success('未找到机台生产记录');
         }
         foreach ($department as $value){
-            $machine = \db('设备_基本资料')->where('使用部门',$value)->where('sys_sbID','<>','')->where('使用部门',$value)->field('rtrim(设备编号) as 设备编号,rtrim(设备名称) as 设备名称')->cache(true)->select();
+            $machine = \db('设备_基本资料')->where('使用部门',$value)->where('sys_sbID','<>','')->where('使用部门',$value)->field('rtrim(设备编号) as 设备编号,rtrim(设备名称) as 设备名称')->select();
             foreach ($machine as $k=>$v){
                 $data[rtrim($value)][$v['设备编号'].'-->'.$v['设备名称']] = [];
                 foreach ($list as $kk=>$vv){
@@ -2213,4 +2213,43 @@ class Facility extends Api
             $this->success('修改成功');
         }
     }
+
+    /**
+     * 色度系数修改
+     * @return void
+     * @throws \think\Exception
+     * @throws \think\db\exception\BindParamException
+     * @throws \think\exception\PDOException
+     */
+    public function PrintingModeDataEdit()
+    {
+        if (Request::instance()->isPost() === false){
+            $this->error('请求错误');
+        }
+        $params = Request::instance()->post();
+        if (empty($params['id'])){
+            $this->error('参数错误');
+        }
+        $idList = explode(',',$params['id']);
+        //获取工单印件工序
+        $orderList = \db('工单_产量计酬')
+            ->where('UniqId',$idList[0])
+            ->field('rtrim(sczl_gdbh) as 工单编号,rtrim(sczl_yjno) as 印件号,rtrim(sczl_gxh) as 工序号')
+            ->find();
+        //修改工艺资料
+        $sql = \db('工单_工艺资料')
+            ->where([
+                'Gy0_gdbh'=>$orderList['工单编号'],
+                'Gy0_yjno'=>$orderList['印件号'],
+                'Gy0_gxh'=>$orderList['工序号']
+            ])
+            ->fetchSql(true)
+            ->update(['版距'=>$params['plate'],'印刷方式'=>$params['mode']]);
+        $res = \db()->query($sql);
+        if ($res === false){
+            $this->error('修改失败');
+        }else{
+            $this->success('修改成功');
+        }
+    }
 }

+ 2 - 6
application/api/controller/Machine.php

@@ -63,12 +63,8 @@ class Machine extends Api
             $this->error('非法请求');
         }
         $list = [
-            0 => '胶印车间',
-            1 => '凹印车间',
-            2 => '丝印车间',
-            3 => '烫模车间',
-            4 => '检验车间',
-            5 => '研发中心',
+            0 => '印刷车间',
+            1 => '印后车间'
         ];
         $this->success('请求成功',$list);
 

+ 83 - 0
application/api/controller/Product.php

@@ -927,4 +927,87 @@ class Product extends Api
             $this->error('新增失败');
         }
     }
+    /**
+     * 3.14工艺资料-获取损耗代号
+     * @ApiMethod GET
+     * @params code
+    */
+    public function getLossCode(){
+        if (Request::instance()->isGet() == false){
+            $this->error('非法请求');
+        }
+        $params = Request::instance()->get();
+        if (empty($params) || !isset($params['code'])){
+            $this->error('参数不能为空');
+        }
+        $code = $params['code'];
+        $data = \db('dic_lzsh')->where('sys_bh','like',$code.'%')->field('rtrim(sys_bh) as sys_bh, rtrim(sys_mc) as sys_mc,sys_rate0,sys_rate1')->select();
+        $this->success('请求成功',$data);
+    }
+
+    /**
+     * 产品工艺资料删除
+     * @return void
+     * @throws \think\Exception
+     * @throws \think\exception\PDOException
+     */
+    public function ProcessDetailDel()
+    {
+        if ($this->request->isGet() === false) {
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (isset($param['UniqId']) === false) {
+            $this->error('参数错误');
+        }
+        $printId = explode(',', $param['UniqId']);
+        $i = 0;
+        //循环删除工艺资料
+        foreach ($printId as $value){
+            $res = \db('产品_工艺资料')
+                ->where('UniqID',$value)
+                ->delete();
+            if ($res === false){
+                $i++;
+            }
+        }
+        if ($i === 0){
+            $this->success('删除成功');
+        }else{
+            $this->error('删除失败');
+        }
+    }
+
+    /**
+     * 产品印件资料删除
+     * @return void
+     * @throws \think\Exception
+     * @throws \think\exception\PDOException
+     */
+    public function PrintDetailDel()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (isset($param['UniqId']) === false){
+            $this->error('参数错误');
+        }
+        $printId = explode(',',$param['UniqId']);
+        $i = 0;
+        foreach ($printId as $value){
+            $res = \db('产品_印件资料')
+                ->where('UniqId',$value)
+                ->delete();
+            if ($res === false){
+                $i++;
+            }
+        }
+        if ($i === 0){
+            $this->success('删除成功');
+        }else{
+            $this->error('删除失败');
+        }
+
+    }
 }

+ 3 - 15
application/api/controller/ReportingWork.php

@@ -173,22 +173,10 @@ class ReportingWork extends Api
         if (!isset($params['code']) || empty($params['code'])) {
             $this->error('参数错误');
         }
-        if (substr($params['code'],0,2) == 'ZM'){
-            $code = $params['code'];
-        }else{
-            if (strlen($params['code']) != 5){
-                $length = strlen($params['code']);
-                $len = 5 -$length;
-                $str = '';
-                for ($i=0;$i<$len;$i++){
-                    $str .= '0';
-                }
-                $code = 'ZM'.$str.$params['code'];
-            }else{
-                $code = 'ZM'.$params['code'];
-            }
+        $data = \db('人事_基本资料')->where('员工编号',$params['code'])->value('员工姓名');
+        if (empty($data)){
+            $data = \db('人事_基本资料')->where('pycode',$params['code'])->value('员工姓名');
         }
-        $data = \db('人事_基本资料')->where('员工编号',$code)->value('员工姓名');
         $this->success('请求成功',rtrim($data));
     }
     /**

+ 19 - 7
application/api/controller/StaffSalary.php

@@ -99,8 +99,9 @@ class StaffSalary extends Api
         $fields = "a.sczl_gdbh,a.sczl_yjno,a.sczl_gxh,a.sczl_gxmc as sczl_type,a.sczl_rq,a.sczl_jtbh,a.sczl_工价系数,a.sczl_ms,a.sczl_cl as 班组车头产量,a.sczl_Pgcl,a.sczl_zcfp,
                 a.sczl_装版工时 as 装版工时,a.sczl_保养工时 as 保养工时,a.sczl_打样工时 as 打样工时,a.sczl_异常停机工时 as 异常停机工时,a.sczl_设备运行工时 as 车头产量占用机时,
                 a.sczl_bh1,a.sczl_bh2,a.sczl_bh3,a.sczl_bh4,a.sczl_bh5,a.sczl_bh6,a.sczl_bh7,a.sczl_bh8,a.sczl_bh9,a.sczl_bh10,
-                a.sczl_rate1,a.sczl_rate2,a.sczl_rate3,a.sczl_rate4,a.sczl_rate5,a.sczl_rate6,a.sczl_rate7,a.sczl_rate8,a.sczl_rate9,a.sczl_rate10,a.sczl_废品率系数,
-                b.千件工价,b.日定额,b.补产标准,c.工价系数 as 工序难度系数
+                a.sczl_rate1,a.sczl_rate2,a.sczl_rate3,a.sczl_rate4,a.sczl_rate5,a.sczl_rate6,a.sczl_rate7,a.sczl_rate8,a.sczl_rate9,a.sczl_rate10,
+                a.sczl_废品率系数,
+                b.千件工价,b.日定额,b.补产标准,c.工价系数 as 工序难度系数,c.版距
                 ,d1.员工姓名 as name1,d2.员工姓名 as name2,d3.员工姓名 as name3,d4.员工姓名 as name4,d5.员工姓名 as name5,d6.员工姓名 as name6,d7.员工姓名 as name7,d8.员工姓名 as name8
                 ,d9.员工姓名 as name9,d10.员工姓名 as name10";
         $query = Db::name('设备_产量计酬')->alias('a')->field($fields);
@@ -129,10 +130,17 @@ class StaffSalary extends Api
         foreach ($list as $value){
             $value['班组车头产量'] = $value['班组车头产量'] - $value['sczl_zcfp'];
             //计件产量
-            if (substr($value['sczl_jtbh'],0,2) == 'JP'){
-                $value['工序难度系数'] = $value['sczl_废品率系数'];
+            if (substr($value['sczl_jtbh'],0,2) == 'JP'){//检品机
+                $gx_rate = $value['sczl_废品率系数'];
                 $value['班组车头产量'] = $value['班组车头产量'] * $value['sczl_Pgcl'];
                 $byThePieceYield = round($value['班组车头产量']  * $value['sczl_废品率系数']);
+            }elseif (substr($value['sczl_jtbh'],0,2) == 'WY' || substr($value['sczl_jtbh'],0,2) == 'DW'){//凹印机
+                $gx_rate = $value['工序难度系数'];
+                if ($value['版距'] > 0){
+                    $value['版距'] = $value['版距'] / 1000;
+                    $value['班组车头产量'] = $value['班组车头产量'] * $value['版距'];
+                }
+                $byThePieceYield = round($value['班组车头产量'] * $gx_rate);
             }else{
                 if ($value['sczl_工价系数'] == '0.000' || floatval($value['sczl_工价系数']) <= 0){
                     //工序难度系数
@@ -141,7 +149,11 @@ class StaffSalary extends Api
                         $gx_rate = '1.0000';
                     }
                 }else{
-                    $gx_rate = number_format($value['sczl_工价系数'] * $value['工序难度系数'],3);
+                    if (floatval($value['工序难度系数']) > 0 ){
+                        $gx_rate = number_format($value['sczl_工价系数'] * $value['工序难度系数'],3);
+                    }else{
+                        $gx_rate = $value['sczl_工价系数'];
+                    }
                 }
                 $byThePieceYield = round($value['班组车头产量'] * $gx_rate);
             }
@@ -204,7 +216,7 @@ class StaffSalary extends Api
                 }
             }
         }
-
+//        halt($data);
         /**
          * 拆片工序数据
         */
@@ -520,7 +532,7 @@ class StaffSalary extends Api
             // 推送任务到队列
             Queue::push($job,'','default'); // 推送任务到队列
             // 设置任务的标识符到缓存中,并设置有效期,有效期为队列执行时间的两倍
-            $redis->set($taskIdentifier, true,60*5);
+            $redis->set($taskIdentifier, true);
             $this->success('数据正在处理中,请等待...');
         }
     }

+ 121 - 4
application/api/controller/Synchronization.php

@@ -4,6 +4,7 @@ namespace app\api\controller;
 
 use app\common\controller\Api;
 use think\Db;
+use Overtrue\Pinyin;
 
 /**
  * 中间表数据同步
@@ -60,9 +61,15 @@ class Synchronization extends Api
                 }
             }
             //插入工单资料
+            if (preg_match("/[A-Za-z]/",$value['工单编号'])){
+                $workcode = $value['工单编号'];
+            }else{
+                $workcode = 'Y'.$value['工单编号'];
+            }
+
             $client = \db('产品_基本资料')->where('产品编号',$value['成品编号'])->field('rtrim(客户编号) as 客户编号,rtrim(客户名称) as 客户名称')->find();
             $data = [
-                'Gd_gdbh' => $value['工单编号'],
+                'Gd_gdbh' => $workcode,
                 '行号' => $value['行号'],
                 'Gd_客户代号' => $client['客户编号'],
                 'Gd_客户名称' => $client['客户名称'],
@@ -160,9 +167,14 @@ class Synchronization extends Api
         $j = $m = 0;
         foreach ($BomDataList as $key=>$value){
             $res = \db('工单_bom资料')->where('UNIQID',$value['UNIQID'])->count();
+            if (preg_match("/[A-Za-z]/",$value['BOM_工单编号'])){
+                $workcode = $value['BOM_工单编号'];
+            }else{
+                $workcode = 'Y'.$value['BOM_工单编号'];
+            }
             $data = [
                 'BOM_方案' => '工单评审定案',
-                'BOM_工单编号' => $value['BOM_工单编号'],
+                'BOM_工单编号' => $workcode,
                 'BOM_版本' => $value['BOM_版本'],
                 'BOM_工单行号' => $value['BOM_工单行号'],
                 'BOM_行号' => $value['BOM_行号'],
@@ -309,6 +321,8 @@ class Synchronization extends Api
      */
     public function PersonnelData()
     {
+        //拼音类
+        $pinyin = new Pinyin\Pinyin();
         if ($this->request->isGet() === false){
             $this->error('请求错误');
         }
@@ -322,6 +336,9 @@ class Synchronization extends Api
         }
         $i = 0;
         foreach ($PersonnelDataList as $key=>$value){
+            //获取姓名首字母
+            $pycode = $pinyin->abbr($value['员工姓名']);
+            $nameCode = strtoupper($pycode);
             $data = [
                 '工卡编号'=>'',
                 '卡钟设定'=>'',
@@ -366,7 +383,7 @@ class Synchronization extends Api
                 '合同终止日期'=>'1900-01-01 00:00:00',
                 '合同备注'=>'',
                 '出生日期'=>$value['出生日期'],
-                'pycode'=>$value['pycode'],
+                'pycode'=>$nameCode,
                 '籍贯'=>'',
                 '民族'=>'',
                 '身份证号'=>$value['身份证号'],
@@ -720,10 +737,15 @@ class Synchronization extends Api
         }
         $i = 0;
         foreach ($OrganizationalDataList as $key=>$value){
+            if (preg_match("/[A-Za-z]/",$value['工单编号'])){
+                $workcode = $value['工单编号'];
+            }else{
+                $workcode = 'Y'.$value['工单编号'];
+            }
             $data = [
                 'st_rq'=>$value['日期'],
                 'st_jylb'=>$value['交易类别'],
-                'st_gdbh'=>$value['工单编号'],
+                'st_gdbh'=>$workcode,
                 '采购单号'=>$value['采购单号'],
                 '供方批次'=>$value['供方批次'],
                 'st_wlbh'=>$value['物料编号'],
@@ -944,4 +966,99 @@ class Synchronization extends Api
             $this->success('职位编码同步成功');
         }
     }
+
+    /**
+     * 设备产量计酬云中间表数据库同步
+     * @return void
+     * @throws \think\db\exception\BindParamException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     * @throws \think\exception\PDOException
+     */
+    public function ProductionData()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        if(is_dir(ROOT_PATH.'public/'.date('Y-m-d',time())) == null)
+        {
+            mkdir(ROOT_PATH.'public/'.date('Y-m-d',time()),0777,true);
+        }
+//        $lastID = \db('设备_产量计酬')->order('UniqId desc')->value('UniqId');
+//        if (empty($lastID)){
+//            $lastID = 0;
+//        }
+        $db5 = \db()->connect(config('database.db5'));
+        $where = [
+//            'sczl_rq'=>date('Y-m-d',time()),
+//            'UniqId' =>['>',$lastID]
+            'sczl_rq' => ['>=','2024-04-01']
+        ];
+        $productData = $db5->name('设备_产量计酬')
+            ->where($where)
+            ->select();
+        //获取机台信息
+        $machineData = \db('设备_基本资料')
+            ->where('mn_设备编号','<>','')
+            ->field('rtrim(设备编号) as 设备编号,rtrim(mn_设备编号) as 美浓设备编号')
+            ->select();
+        //获取员工资料
+        $employeeData = \db('人事_基本资料')
+            ->where('mn_员工编号','<>','')
+            ->field('rtrim(员工编号) as 员工编号,rtrim(mn_员工编号) as 美浓员工编号')
+            ->select();
+        //循环判断机台、员工编号
+        $j = 0;
+        $data = [];
+        foreach ($productData as $key=>$value){
+            //判断机台编号
+            foreach ($machineData as $v){
+                if ($value['sczl_jtbh'] === $v['美浓设备编号']){
+                    $productData[$key]['sczl_jtbh'] = $v['设备编号'];
+                    array_push($data,$productData[$key]);
+                }
+            }
+        }
+        if (empty($data)){
+            $this->error('未找到新的生产数据');
+        }
+        foreach ($data as $key=>$value){
+            $name = [];
+            //判断员工编号,如果不存在写入日志文件
+            for($i=1;$i<=10;$i++){
+                foreach ($employeeData as $vv){
+                    if ($value['sczl_bh'.$i] === $vv['美浓员工编号']){
+                        $data[$key]['sczl_bh'.$i] = $vv['员工编号'];
+                    }else{
+                        array_push($name,$value['sczl_bh'.$i]);
+                    }
+                }
+            }
+            $name = array_unique($name);
+            $filename = ROOT_PATH.'public/'.date('Y-m-d',time()).'/'.$value['sczl_jtbh'].'日志文件.txt';
+            $handle = fopen($filename, 'w');
+            foreach ($name as $v){
+                fwrite($handle, $v);
+            }
+            fclose($handle);
+            //修改工单编号
+            if (preg_match("/[A-Za-z]/",$value['sczl_gdbh'])){
+                $workcode = $value['sczl_gdbh'];
+            }else{
+                $workcode = 'Y'.$value['sczl_gdbh'];
+            }
+            $data[$key]['sczl_gdbh'] = $workcode;
+        }
+        //插入设备产量计酬数据
+        \db()->startTrans();
+        try {
+            \db('设备_产量计酬')->where('sczl_rq','>=','2024-04-01 00:00:00')->delete();
+            $sql = \db('设备_产量计酬')->fetchSql(true)->insertAll($data);
+            $res = \db()->query($sql);
+        }catch (\Exception $e){
+            \db()->rollback();
+        }
+        $this->success('同步成功');
+    }
 }

+ 224 - 31
application/api/controller/WorkOrder.php

@@ -38,7 +38,6 @@ class WorkOrder extends Api
             'progressAll' => $progressAll,
             '印刷工单' => [],
             '糊盒工单' => []
-
         ];
         $sql = "SELECT DISTINCT
                     (客户编号),rtrim(客户名称 ) as 客户名称
@@ -236,15 +235,10 @@ class WorkOrder extends Api
                 if ($value['Gy0_gxh']<10){
                     $value['Gy0_gxh'] = '0'.$value['Gy0_gxh'];
                 }
-                if ((int)$value['Gy0_ms'] === 0){
-                    $scrap = ceil(($value['Gy0_Rate0']+((int)($value['Gy0_计划接货数']/$value['Gy0_ls']))*$value['Gy0_Rate1'])*$value['损耗系数']);
-                }else{
-                    $scrap = ceil(($value['Gy0_Rate0']+((int)($value['Gy0_计划接货数']/$value['Gy0_ls']))*$value['Gy0_Rate1'])*$value['损耗系数']*$value['Gy0_ms']);
-                }
                 if (rtrim($value['Gy0_sbbh']) == '' || $value['Gy0_计划接货数'] == 0){
                     $number = 0;
                 }else{
-                    $number = round(($scrap/((int)($value['Gy0_计划接货数']/$value['Gy0_ls'])))*100,2).'%';
+                    $number = round(((int)$value['Gy0_计划损耗']/(int)($value['Gy0_计划接货数']))*100,2).'%';
                 }
                 if ($value['PD_WG'] !== '1900-01-01 00:00:00'){
                     $status = '已完工';
@@ -256,11 +250,11 @@ class WorkOrder extends Api
                     '印件-工序' => rtrim($value['Gy0_yjno']).'-'.rtrim($value['Gy0_gxh']),
                     '备选工序' => rtrim($value['备选工序']),
                     '工序名称' => rtrim($value['Gy0_gxmc']).'【'.rtrim($value['Add_gxmc']).'】',
-                    '计划产量' => (int)($value['Gy0_计划接货数']/$value['Gy0_ls']),
+                    '计划产量' => $value['Gy0_计划接货数'],
                     '基础损耗' => rtrim($value['Gy0_Rate0']),
                     '损耗率' => rtrim($value['Gy0_Rate1']),
                     '机台编号' => rtrim($value['Gy0_sbbh']),
-                    '报废定额' => $scrap,
+                    '报废定额' => rtrim($value['Gy0_计划损耗']),
                     '允损比例' => $number,
                     '难度系数' => isset($value['工价系数'])?rtrim($value['工价系数']):'',
                     '损耗系数' => isset($value['损耗系数'])?rtrim($value['损耗系数']):'',
@@ -349,25 +343,23 @@ class WorkOrder extends Api
         $field = 'rtrim(Gd_lx) as 重点工单,rtrim(Gd_gdbh) as 工单编号,rtrim(Gd_生产分类) as 生产类型,rtrim(Gd_khdh) as 客户代号,rtrim(Gd_客户名称) as 客户名称,
         rtrim(Gd_cpdh) as 印件代号,rtrim(Gd_cpmc) as 印件名称,rtrim(成品代号) as 产品代号,rtrim(成品名称) as 产品名称,rtrim(接单日期) as 开单日期,rtrim(订单数量) as 订单数量,rtrim(交货日期) as 交货日期,
         rtrim(投料率) as 投料率,rtrim(实际投料) as 万小张,rtrim(计量单位) as 单位,rtrim(投料大箱) as 投料大箱,rtrim(排产时库存) as 库存大箱,rtrim(警语版面) as 警语版面,
-        rtrim(销售订单号) as 销售订单号,rtrim(产品版本号) as 版本号,rtrim(客户ERP编码) as 客户ERP编码,rtrim(码源数量) as 码源数量,rtrim(进程备注) as 进程备注,rtrim(Gd_desc) as 备注,rtrim(Uniqid) as Uniqid';
+        rtrim(销售订单号) as 销售订单号,rtrim(产品版本号) as 版本号,rtrim(客户ERP编码) as 客户ERP编码,rtrim(码源数量) as 码源数量,rtrim(进程备注) as 进程备注,rtrim(Gd_desc) as 备注,rtrim(Uniqid) as Uniqid,rtrim(计划投料) as 平张投料';
         $list = \db('工单_基本资料')->where('Gd_gdbh',$workOrder)->field($field)->find();
         if (empty($list)){
             $this->error('未找到该工单信息');
         }
         $printData = \db('工单_印件资料')
             ->where('Yj_Gdbh',$workOrder)
-            ->field('rtrim(yj_yjmc) as 印件名称,rtrim(yj_Yjdh) as 印件代号,rtrim(yj_平张投料) as 平张投料,rtrim(Uniqid) as id')
+            ->field('rtrim(yj_yjmc) as 印件名称,rtrim(yj_Yjdh) as 印件代号,rtrim(Uniqid) as id')
             ->cache(true,84600)
             ->find();
         if (empty($printData)){
             $list['印件名称'] = '';
             $list['印件代号'] = '';
-            $list['平张投料'] = '';
             $list['印件ID'] = '';
         }else{
             $list['印件名称'] = $printData['印件名称'];
             $list['印件代号'] = $printData['印件代号'];
-            $list['平张投料'] = $printData['平张投料'];
             $list['印件ID'] = $printData['id'];
         }
         $this->success('成功',$list);
@@ -417,8 +409,22 @@ class WorkOrder extends Api
             '排产时库存' => isset($param['kc'])?$param['kc']:'',
             '平均合格率' => isset($param['avg'])?$param['avg']:'',
         ];
+        //获取印件资料
+        $printCode = \db('工单_印件资料')
+            ->where('Uniqid',$param['printID'])
+            ->value('yj_Yjno');
+        if (empty($printCode)){
+            $this->success('未找到该工单印件资料');
+        }
+        //修改工单工艺计划产量
+        $result = $this->PlannedProcessYield($param['gdbh'],$printCode,0,$param['jhtl']);
+        if ($result === false){
+            $this->success('分配工序计划产量失败');
+        }
+        //修改工单信息
         $sql = \db('工单_基本资料')->where('Uniqid',$param['Uniqid'])->fetchSql(true)->update($row);
         $res = Db::query($sql);
+        //修改印件信息
         $printSql = \db('工单_印件资料')
             ->where('Uniqid',$param['printID'])
             ->fetchSql(true)
@@ -990,6 +996,16 @@ class WorkOrder extends Api
             'yj_ls' => isset($param['ls'])?$param['ls']:'',
             'yj_desc' => isset($param['desc'])?$param['desc']:'',
         ];
+        //获取工单编号
+        $workOrder = \db('工单_印件资料')->where('Uniqid',$param['Uniqid'])->field('Yj_Gdbh,yj_Yjno')->find();
+        if (empty($workOrder)){
+            $this->success('未找到该工单印件资料');
+        }
+        //重新分配工序计划产量
+        $result = $this->PlannedProcessYield($workOrder['Yj_Gdbh'],$workOrder['yj_Yjno'],0,$param['pztl']);
+        if ($result === false){
+            $this->success('修改工序产量失败');
+        }
         $sql = \db('工单_印件资料')->where('Uniqid',$param['Uniqid'])->fetchSql(true)->update($data);
         $res = Db::query($sql);
         if ($res !== false){
@@ -1038,8 +1054,10 @@ class WorkOrder extends Api
             'Gy0_小时产能' => $param['xscn'],
             'Mod_rq' => date('Y-m-d H:i:s',time()),
         ];
+        //修改工艺资料
         $sql = \db('工单_工艺资料')->where('UniqId',$param['UniqId'])->fetchSql(true)->update($data);
         $res = Db::query($sql);
+        //修改工单状态
         $status = \db('工单_基本资料')->where('Gd_gdbh',$param['workOrder'])->field('rtrim(gd_statu) as status')->find();
         if ($status['status'] !== '2-生产中'){
             $statusSql = \db('工单_基本资料')->where('Gd_gdbh',$param['workOrder'])->fetchSql(true)->update(['gd_statu'=>'2-生产中']);
@@ -1358,6 +1376,31 @@ class WorkOrder extends Api
             $this->error('参数错误');
         }
         $num = \db('工单_基本资料')->where('Gd_gdbh',$param['gdbh'])->count();
+        //插入产品资料
+        $productData = \db('产品_基本资料')
+            ->where('产品编号',$param['cpdh'])
+            ->count();
+        if ($productData === 0) {
+            $clientCode = substr($param['cpdh'], 0, 5);
+            $product = [
+                '客户编号' => $clientCode,
+                '客户名称' => $param['khmc'],
+                '产品编号' => $param['cpdh'],
+                '产品名称' => $param['cpmc'],
+                '计量单位' => '万张',
+                '状态' => '',
+                'Mod_rq' => date('Y-m-d H:i:s', time()),
+                'UniqID' => \db('产品_基本资料')->order('UniqID desc')->value('UniqID') + 1,
+            ];
+            if (strpos($product['产品名称'], '小盒') === false) {
+                $product['产品类别'] = '条盒';
+            } else {
+                $product['产品类别'] = '小盒';
+            }
+            $productSql = \db('产品_基本资料')->fetchSql(true)->insert($product);
+            \db()->query($productSql);
+        }
+        //添加工单
         $productDetail = \db('产品_基本资料')->where('产品编号',$param['cpdh'])->find();
         if (empty($productDetail)){
             $productDetail['客户料号'] = '';
@@ -1429,15 +1472,15 @@ class WorkOrder extends Api
             '待摊其他费用' => 0,
             '加工费' => 0,
             '加工费单价' => 0,
-            '成本考核_胶印' => 0,
-            '成本考核_凹印' => 0,
-            '成本考核_丝印' => 0,
-            '成本考核_模切' => 0,
-            '成本考核_检验' => 0,
+            '成本考核_胶印' => 1,
+            '成本考核_凹印' => 1,
+            '成本考核_丝印' => 1,
+            '成本考核_模切' => 1,
+            '成本考核_检验' => 1,
             '印版费' => 0,
             'V23制造成本' => 0,
             'Prt_rq' => date('Y-m-d H:i:s',time()),
-            'Sys_id' => '',
+            'Sys_id' => $param['Sys_id'],
             'Sys_rq' => date('Y-m-d H:i:s',time()),
             'Mod_rq' => date('Y-m-d H:i:s',time()),
             'U8UID' => '',
@@ -1556,8 +1599,8 @@ class WorkOrder extends Api
             $this->error('参数错误');
         }
         $lastId = \db('工单_印件资料')->order('Uniqid desc')->value('Uniqid');
-        if ($lastId<1000000){
-            $lastId = 1000000;
+        if (empty($lastId)){
+            $lastId = 0;
         }else{
             $lastId = $lastId + 1;
         }
@@ -1589,8 +1632,8 @@ class WorkOrder extends Api
             $this->error('参数错误');
         }
         $lastId = \db('工单_工艺资料')->order('UniqId desc')->value('UniqId');
-        if ($lastId<100000000){
-            $lastId = 100000000;
+        if (empty($lastId)){
+            $lastId = 0;
         }else{
             $lastId = $lastId + 1;
         }
@@ -1612,6 +1655,13 @@ class WorkOrder extends Api
             ->fetchSql(true)
             ->insert($param);
         $res = \db()->query($sql);
+        //获取平张投料
+        $number = \db('工单_印件资料')
+            ->where('Yj_Gdbh',$param['Gy0_gdbh'])
+            ->where('yj_Yjno',$param['Gy0_yjno'])
+            ->value('rtrim(yj_平张投料)');
+        //分配工艺计划产量
+        $this->PlannedProcessYield($param['Gy0_gdbh'],$param['Gy0_yjno'],$param['Gy0_gxh'],$number);
         if ($res !== false){
             $this->success('成功');
         }else{
@@ -1701,6 +1751,19 @@ class WorkOrder extends Api
         }
         $printId = explode(',',$param['UniqId']);
         $i = 0;
+        //获取工单编号、印件号
+        $codeList = \db('工单_工艺资料')
+            ->where('UniqId',$printId[0])
+            ->field('rtrim(Gy0_gdbh) as 工单编号,rtrim(Gy0_yjno) as 印件号')
+            ->find();
+        //获取平张投料数量
+        $number = \db('工单_印件资料')
+            ->where([
+                'Yj_Gdbh' => $codeList['工单编号'],
+                'yj_Yjno' => $codeList['印件号']
+            ])
+            ->value('rtrim(yj_平张投料)');
+        //循环删除工艺资料
         foreach ($printId as $value){
             $res = \db('工单_工艺资料')
                 ->where('UniqId',$value)
@@ -1709,6 +1772,8 @@ class WorkOrder extends Api
                 $i++;
             }
         }
+        //重新分配工艺计划产量
+        $this->PlannedProcessYield($codeList['工单编号'],$codeList['印件号'],0,$number);
         if ($i === 0){
             $this->success('删除成功');
         }else{
@@ -1729,18 +1794,13 @@ class WorkOrder extends Api
             $this->error('请求错误');
         }
         $param = $this->request->param();
-        if (isset($param['search']) === false){
+        if (empty($param['process'])){
             $this->error('参数错误');
         }
         $order = \db('dic_lzsh')
-            ->where('sys_mc','like',substr($param['search'],0,6).'%')
+            ->where('sys_mc','like',$param['process'].'%')
             ->value('rtrim(sys_bh) as 编号');
-        $list = \db('dic_lzsh')
-            ->where('sys_bh','like',$order.'%')
-            ->where('sys_bh','<>',$order)
-            ->field('rtrim(sys_bh) as 编号,rtrim(sys_mc) as 名称,rtrim(UniqId) as UniqId')
-            ->select();
-        $this->success('成功',$list);
+        $this->success('成功',$order);
     }
 
     /**
@@ -2040,6 +2100,11 @@ class WorkOrder extends Api
             $ProcessList[$key]['Gy0_ks'] = $value['Gy0_Ks'];
             $ProcessList[$key]['Gy0_ms'] = $value['Gy0_Ms'];
             $ProcessList[$key]['Gy0_oil'] = $value['Gy0_Oil'];
+            $ProcessList[$key]['Gy0_计划接货数'] = 0;
+            $ProcessList[$key]['Gy0_计划损耗'] = 0;
+            $ProcessList[$key]['无形损承担比例'] = 0;
+            $ProcessList[$key]['超节损承担比例'] = 0;
+            $ProcessList[$key]['超节损核算单价'] = 0;
             $ProcessList[$key]['Gy0_sj1'] = '1900-01-01 00:00:00';
             $ProcessList[$key]['Gy0_sj2'] = '1900-01-01 00:00:00';
             $ProcessList[$key]['UniqId'] = $ProcesslastId + $key + 1;
@@ -2056,10 +2121,15 @@ class WorkOrder extends Api
             $this->error('未找到印件资料');
         }
         $PrintLastId = \db('工单_印件资料')->order('Uniqid desc')->value('rtrim(Uniqid)');
+        $number = \db('工单_基本资料')
+            ->where('Gd_gdbh',$param['workorder'])
+            ->where('成品代号',$param['productCode'])
+            ->value('rtrim(计划投料)');
         foreach ($PrintList as $key => $value){
           $PrintList[$key]['Yj_Gdbh'] = $param['workorder'];
           $PrintList[$key]['yj_Yjno'] = $value['yj_yjno'];
           $PrintList[$key]['yj_Yjdh'] = $value['yj_yjdh'];
+          $PrintList[$key]['yj_平张投料'] = $number;
           $PrintList[$key]['Sys_id'] = $value['sys_id'];
           $PrintList[$key]['Uniqid'] = $PrintLastId + $key + 1;
           $PrintList[$key]['Sys_rq'] = date('Y-m-d H:i:s',time());
@@ -2077,6 +2147,12 @@ class WorkOrder extends Api
         if ($printRes === false){
             $this->error('插入印件资料失败');
         }
+        //计算工序计划生产数量
+        if ($number !== 0){
+            foreach ($PrintList as $value){
+                $this->PlannedProcessYield($param['workorder'],$value['yj_Yjno'],0,$number);
+            }
+        }
         $this->success('成功');
     }
 
@@ -2120,4 +2196,121 @@ class WorkOrder extends Api
         $this->success('成功',$list);
     }
 
+
+    /**
+     * 工艺资料计划产量重新分配
+     * @param string $workOrder 工单
+     * @param int $yjno 印件号
+     * @param int $gxh 工序号
+     * @param int $feed 平张投料
+     * @return bool
+     * @throws \think\Exception
+     * @throws \think\db\exception\BindParamException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     * @throws \think\exception\PDOException
+     */
+    public function PlannedProcessYield($workOrder,$yjno,$gxh,$feed)
+    {
+        if ($gxh === 0){
+            $where = [
+                'Gy0_gdbh'=>$workOrder,
+                'Gy0_yjno'=>$yjno,
+            ];
+        }else{
+            $where = [
+                'Gy0_gdbh'=>$workOrder,
+                'Gy0_yjno'=>$yjno,
+                'Gy0_gxh'=>['>=',$gxh]
+            ];
+        }
+        //获取工艺资料
+        $processList = \db('工单_工艺资料')
+            ->where($where)
+            ->field('Gy0_Rate0 as 损耗定额,Gy0_Rate1 as 损耗率,rtrim(损耗系数) as 损耗系数,Gy0_ms,Gy0_ls,UniqId')
+            ->select();
+        if (empty($processList)){
+            $this->success('未找到该工单工序资料');
+        }
+        //计算损耗定额和计划产量
+        $production = [];
+        $i = 0;
+        foreach ($processList as $key=>$value){
+            if ($key === 0){
+                array_push($production,$feed);
+            }
+            $wastage = 0;
+            if ($value['损耗率'] !== 0 && !empty($value['损耗率'])){
+                $wastage = ($production[$key]*$value['损耗率']+$value['损耗定额'])*$value['损耗系数'];
+            }
+
+            if ($value['Gy0_ms'] >0 && !empty($value['Gy0_ms'])){
+                $wastage = round($wastage * $value['Gy0_ms']);
+            }
+            if ((int)$value['Gy0_ls'] === 1 && $key>=1){
+                $number = $production[$key]*$processList[$key-1]['Gy0_ls'];
+            }else{
+                $number = $production[$key];
+            }
+            array_push($production,ceil($number-$wastage));
+            $processSql = \db('工单_工艺资料')
+                ->where('UniqId',$value['UniqId'])
+                ->fetchSql(true)
+                ->update(['Gy0_计划接货数'=>$production[$key],'Gy0_计划损耗'=>$wastage]);
+            $res = \db()->query($processSql);
+            if ($res === false){
+                $i++;
+            }
+        }
+        if ($i===0){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    /**
+     * 工单资料删除
+     * @return void
+     * @throws \think\exception\PDOException
+     */
+    public function WorkOrderDel()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (isset($param['UniqId']) === false){
+            $this->error('参数错误');
+        }
+        $WorkOrderId = explode(',',$param['UniqId']);
+        $i = 0;
+        foreach ($WorkOrderId as $key=>$value){
+            //获取工单编号
+            $workorder = \db('工单_基本资料')
+                ->where('Uniqid',$value)
+                ->value('rtrim(Gd_gdbh)');
+            //删除工单资料、工艺资料、印件资料
+            \db()->startTrans();
+            try {
+                \db('工单_基本资料')->where('Uniqid',$value)->delete();
+                if (!empty(\db('工单_工艺资料')->where('Gy0_gdbh',$workorder)->find())){
+                    \db('工单_工艺资料')->where('Gy0_gdbh',$workorder)->delete();
+                }
+                if (!empty(\db('工单_印件资料')->where('Yj_Gdbh',$workorder)->find())){
+                    \db('工单_印件资料')->where('Yj_Gdbh',$workorder)->delete();
+                }
+                \db()->commit();
+            }catch (\Exception $e){
+                \db()->rollback();
+                $i++;
+            }
+        }
+        if ($i === 0){
+            $this->success('删除成功');
+        }else{
+            $this->error('删除失败');
+        }
+    }
 }

+ 83 - 8
application/database.php

@@ -16,16 +16,46 @@ return [
 
     // 数据库类型
     'type'            => Env::get('database.type', 'mysql'),
+//    // 服务器地址
+//    'hostname'        => Env::get('database.hostname', '127.0.0.1'),
+//    // 数据库名
+//    'database'        => Env::get('database.database', 'fastadmin'),
+//    // 用户名
+//    'username'        => Env::get('database.username', 'root'),
+//    // 密码
+//    'password'        => Env::get('database.password', ''),
+//    // 端口
+//    'hostport'        => Env::get('database.hostport', ''),
+//// 服务器地址
+//    'hostname'        => Env::get('database.hostname', 'rm-bp1y64151f8x1b37n0o.mysql.rds.aliyuncs.com'),
+//// 数据库名
+//    'database'        => Env::get('database.database', 'zjmn_mes'),
+//// 用户名
+//    'username'        => Env::get('database.username', 'zjminong'),
+//// 密码
+//    'password'        => Env::get('database.password', '83h2)$3^kd(up^w'),
+//    // 端口
+//    'hostport'        => Env::get('database.hostport', ''),
     // 服务器地址
-    'hostname'        => Env::get('database.hostname', '20.0.16.161'),
+    //    'hostname'        => Env::get('database.hostname', '20.0.16.172'),
+    //    // 数据库名
+    //    'database'        => Env::get('database.database', 'mesdb'),
+    //    // 用户名
+    //    'username'        => Env::get('database.username', 'root'),
+    //    // 密码
+    //    'password'        => Env::get('database.password', 'ZJYX_Mes8052'),
+    //    // 端口
+    //    'hostport'        => Env::get('database.hostport', '3306'),
+    // 服务器地址
+    'hostname'        => Env::get('database.hostname', '20.0.51.77'),
     // 数据库名
     'database'        => Env::get('database.database', 'mesdb'),
     // 用户名
-    'username'        => Env::get('database.username', 'root'),
+    'username'        => Env::get('database.username', 'mesdb'),
     // 密码
-    'password'        => Env::get('database.password', 'ZJYX_Mes8052'),
+    'password'        => Env::get('database.password', 'nY72kLdaXtpKdLNf'),
     // 端口
-    'hostport'        => Env::get('database.hostport', '8066'),
+    'hostport'        => Env::get('database.hostport', '3306'),
     // 连接dsn
     'dsn'             => '',
     // 数据库连接参数
@@ -61,13 +91,58 @@ return [
         // 数据库类型
         'type'            => Env::get('database3.type', 'sqlsrv'),
         // 服务器地址
-        'hostname'        => Env::get('database3.hostname', '10.10.4.8'),
+        'hostname'        => Env::get('database.hostname', '20.0.51.77'),
+        // 数据库名
+        'database'        => Env::get('database.database', 'mesdb'),
+        // 用户名
+        'username'        => Env::get('database.username', 'mesdb'),
+        // 密码
+        'password'        => Env::get('database.password', 'nY72kLdaXtpKdLNf'),
+        // 端口
+        'hostport'        => Env::get('database.hostport', '3306'),
+        // 连接dsn
+        'dsn'             => '',
+        // 数据库连接参数
+        'params'          => [],
+        // 数据库编码默认采用 utf8mb4
+        'charset'         => Env::get('database3.charset', 'utf8mb4'),
+        // 数据库表前缀
+        'prefix'          => Env::get('database3.prefix', ''),
+        // 数据库调试模式
+        'debug'           => Env::get('database3.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,
+    ],
+    /**
+     * mes云同步数据库
+     */
+    'db4'             => [
+        // 数据库类型
+        'type'            => Env::get('database.type', 'mysql'),
+        // 服务器地址
+        'hostname'        => Env::get('database3.hostname', 'rm-bp1y64151f8x1b37n0o.mysql.rds.aliyuncs.com'),
         // 数据库名
-        'database'        => Env::get('database3.database', 'U8ERPDATA'),
+        'database'        => Env::get('database3.database', 'zjmn_mes'),
         // 用户名
-        'username'        => Env::get('database3.username', 'sa'),
+        'username'        => Env::get('database3.username', 'zjminong'),
         // 密码
-        'password'        => Env::get('database3.password', 'ZJMN_ADMIN8052'),
+        'password'        => Env::get('database3.password', '83h2)$3^kd(up^w'),
         // 端口
         'hostport'        => Env::get('database3.hostport', ''),
         // 连接dsn

+ 14 - 0
application/job/InsertDataJob.php

@@ -4,6 +4,7 @@ namespace app\job;
 
 use think\Db;
 use think\Cache;
+use think\cache\driver\Redis;
 
 class InsertDataJob
 {
@@ -16,6 +17,18 @@ class InsertDataJob
 
     public function handle()
     {
+        $options = [
+            'host'       => '127.0.0.1',
+            'port'       => 6379,
+            'password'   => '',
+            'select'     => 15,
+            'timeout'    => 0,
+            'expire'     => 0,
+            'persistent' => false,
+            'prefix'     => '',
+        ];
+        $redis = new Redis($options);
+        $taskIdentifier = md5(json_encode('date'));
         $handData = [];
         foreach ($this->data as $key=>$value){
             $handData[$key]['sczl_gdbh'] = $value['sczl_gdbh'];
@@ -58,6 +71,7 @@ class InsertDataJob
             $queueKey = 'default';
             // 删除队列
             Cache::store('redis')->handler()->del($queueKey);
+            $redis->rm($taskIdentifier);
         }
     }
 }