unknown 4 месяцев назад
Родитель
Сommit
e91558c489

+ 288 - 46
application/api/controller/Facility.php

@@ -5,6 +5,7 @@ namespace app\api\controller;
 
 use app\common\controller\Api;
 use think\Db;
+use think\Log;
 use think\Request;
 
 /**
@@ -2095,31 +2096,93 @@ class Facility extends Api
      * @throws \think\db\exception\BindParamException
      * @throws \think\exception\PDOException
      */
+//    public function chanliangEdit()
+//    {
+//        if (Request::instance()->isPost() === false){
+//            $this->error('请求错误');
+//        }
+//        $param = Request::instance()->post();
+//        if (empty($param['UniqId'])){
+//            $this->error('参数错误');
+//        }
+//        $param['mod_rq'] = date('Y-m-d H:i:s',time());
+//        $data = $param;
+//        unset($data['UniqId']);
+//        unset($data['sczl_rq']);
+//        $sql = \db('设备_产量计酬')
+//            ->where('UniqId',$param['UniqId'])
+//            ->fetchSql(true)
+//            ->update($data);
+//        $res = \db()->query($sql);
+//        if ($res !== false){
+//            $this->success('修改成功');
+//        }else {
+//            $this->error('修改失败');
+//        }
+//    }
     public function chanliangEdit()
     {
-        if (Request::instance()->isPost() === false){
-            $this->error('请求错误');
+        // 使用更简洁的请求判断方式
+        if (!Request::instance()->isPost()) {
+            $this->error('请使用POST请求');
         }
+
+        // 获取并过滤POST参数
         $param = Request::instance()->post();
-        if (empty($param['UniqId'])){
-            $this->error('参数错误');
+
+        // 更严格的参数验证
+        if (empty($param['UniqId'])) {
+            $this->error('缺少必要参数: UniqId');
         }
-        $param['mod_rq'] = date('Y-m-d H:i:s',time());
-        $data = $param;
-        unset($data['UniqId']);
-        unset($data['sczl_rq']);
-        $sql = \db('设备_产量计酬')
-            ->where('UniqId',$param['UniqId'])
-            ->fetchSql(true)
-            ->update($data);
-        $res = \db()->query($sql);
-        if ($res !== false){
+
+        // 整理更新数据
+        $updateData = [
+            'mod_rq' => date('Y-m-d H:i:s')
+        ];
+
+        // 合并其他参数(排除不需要的字段)
+        $excludeFields = ['UniqId', 'sczl_rq', 'sczl_装版总工时', 'sczl_换版联拼数', '换版类型'];
+        foreach ($param as $key => $value) {
+            if (!in_array($key, $excludeFields)) {
+                $updateData[$key] = $value;
+            }
+        }
+
+        $uniqId = $param['UniqId'];
+        $success = false;
+
+        try {
+            // 处理装版工时数据(如果存在)
+            if (!empty($param['sczl_装版总工时']) && $param['sczl_装版总工时'] != 0) {
+                $priData = [
+                    '换版总工时' => $param['sczl_装版总工时'],
+                    '换版联拼数' => $param['sczl_换版联拼数'] ?? 0,
+                    '换版类型' => $param['换版类型'] ?? '',
+                    '装版补产工时' => $param['sczl_装版工时'] ?? ''
+                ];
+
+                $priSql = \db('设备_装版工时')->where('yieldUid', $uniqId)->fetchSql(true)->update($priData);
+                \db()->query($priSql);
+
+            }
+
+            // 更新产量计酬数据
+            $rowSql = \db('设备_产量计酬')->where('UniqId', $uniqId)->fetchSql(true)->update($updateData);
+            $rowCount = \db()->query($rowSql);
+            $success = $rowCount !== false;
+
+        } catch (\Exception $e) {
+            // 记录错误日志
+            \think\Log::error('修改产量详情失败: ' . $e->getMessage() . ' 堆栈: ' . $e->getTraceAsString());
+            $this->error('操作失败: ' . $e->getMessage());
+        }
+
+        if ($success) {
             $this->success('修改成功');
-        }else {
-            $this->error('修改失败');
+        } else {
+            $this->error('修改失败,未更新任何数据');
         }
     }
-
     /**
      * 获取当日上报产量详细数据
      * @return void
@@ -2198,26 +2261,113 @@ class Facility extends Api
      * @throws \think\db\exception\BindParamException
      * @throws \think\exception\PDOException
      */
+//    public function MachineChanliangDetailEdit()
+//    {
+//        if (Request::instance()->isPost() === false){
+//            $this->error('请求错误');
+//        }
+//        $param = Request::instance()->post();
+//        if (empty($param['UniqId'])){
+//            $this->error('参数错误');
+//        }
+//        $param['sczl_type'] = $param['sczl_gxmc'];
+//        $param['mod_rq'] = date('Y-m-d H:i:s',time());
+//        $UnidId = $param['UniqId'];
+//        unset($param['UniqId']);
+//        unset($param['sczl_rq']);
+//        if (!empty($param['sczl_装版总工时']) && $param['sczl_装版总工时'] !== 0){
+//            $data = [
+//                'gdbh' => $param['sczl_gdbh'],
+//                'yjno' => $param['sczl_yjno'],
+//                'gxh' => $param['sczl_gxh'],
+//                'jtbh' => $param['sczl_jtbh'],
+//                'startTime' => $param['sczl_sj1'],
+//                'endTime' => $param['sczl_sj2'],
+//                '换版总工时' => $param['sczl_装版总工时'],
+//                '换版联拼数' => $param['sczl_换版联拼数'],
+//                '换版类型' => $param['换版类型']
+//            ];
+//            $priSql = \db('设备_装版工时')->where('yieldUid')->fetchSql(true)->update($data);
+//            $priRes = \db()->query($priSql);
+//
+//        }
+//        $sql = \db('设备_产量计酬')->where('UniqId',$UnidId)->fetchSql(true)->update($param);
+//        $res = \db()->query($sql);
+//        if ($res !== false){
+//            $this->success('修改成功');
+//        }else{
+//            $this->error('修改失败');
+//        }
+//    }
+
     public function MachineChanliangDetailEdit()
     {
-        if (Request::instance()->isPost() === false){
-            $this->error('请求错误');
+        // 使用更简洁的请求判断方式
+        if (!Request::instance()->isPost()) {
+            $this->error('请使用POST请求');
         }
+
+        // 获取并过滤POST参数
         $param = Request::instance()->post();
-        if (empty($param['UniqId'])){
-            $this->error('参数错误');
+
+        // 更严格的参数验证
+        if (empty($param['UniqId'])) {
+            $this->error('缺少必要参数: UniqId');
         }
-        $param['sczl_type'] = $param['sczl_gxmc'];
-        $param['mod_rq'] = date('Y-m-d H:i:s',time());
-        $UnidId = $param['UniqId'];
-        unset($param['UniqId']);
-        unset($param['sczl_rq']);
-        $sql = \db('设备_产量计酬')->where('UniqId',$UnidId)->fetchSql(true)->update($param);
-        $res = \db()->query($sql);
-        if ($res !== false){
+
+        // 整理更新数据
+        $updateData = [
+            'sczl_type' => $param['sczl_gxmc'] ?? '',
+            'mod_rq' => date('Y-m-d H:i:s')
+        ];
+
+        // 合并其他参数(排除不需要的字段)
+        $excludeFields = ['UniqId', 'sczl_rq', 'sczl_装版总工时', 'sczl_换版联拼数', '换版类型'];
+        foreach ($param as $key => $value) {
+            if (!in_array($key, $excludeFields)) {
+                $updateData[$key] = $value;
+            }
+        }
+
+        $uniqId = $param['UniqId'];
+        $success = false;
+
+        try {
+            // 处理装版工时数据(如果存在)
+            if (!empty($param['sczl_装版总工时']) && $param['sczl_装版总工时'] != 0) {
+                $priData = [
+                    'gdbh' => $param['sczl_gdbh'] ?? '',
+                    'yjno' => $param['sczl_yjno'] ?? '',
+                    'gxh' => $param['sczl_gxh'] ?? '',
+                    'jtbh' => $param['sczl_jtbh'] ?? '',
+                    'startTime' => $param['sczl_sj1'] ?? '',
+                    'endTime' => $param['sczl_sj2'] ?? '',
+                    '换版总工时' => $param['sczl_装版总工时'],
+                    '换版联拼数' => $param['sczl_换版联拼数'] ?? 0,
+                    '换版类型' => $param['换版类型'] ?? '',
+                    '装版补产工时' => $param['sczl_装版工时'] ?? ''
+                ];
+
+               $priSql = \db('设备_装版工时')->where('yieldUid', $uniqId)->fetchSql(true)->update($priData);
+               \db()->query($priSql);
+
+            }
+
+            // 更新产量计酬数据
+            $rowSql = \db('设备_产量计酬')->where('UniqId', $uniqId)->fetchSql(true)->update($updateData);
+            $rowCount = \db()->query($rowSql);
+            $success = $rowCount !== false;
+
+        } catch (\Exception $e) {
+            // 记录错误日志
+            \think\Log::error('修改产量详情失败: ' . $e->getMessage() . ' 堆栈: ' . $e->getTraceAsString());
+            $this->error('操作失败: ' . $e->getMessage());
+        }
+
+        if ($success) {
             $this->success('修改成功');
-        }else{
-            $this->error('修改失败');
+        } else {
+            $this->error('修改失败,未更新任何数据');
         }
     }
 
@@ -2255,39 +2405,131 @@ class Facility extends Api
      * @throws \think\db\exception\BindParamException
      * @throws \think\exception\PDOException
      */
+//    public function ChanliangAdd()
+//    {
+//        if (Request::instance()->isPost() === false){
+//            $this->error('请求错误');
+//        }
+//        $params = Request::instance()->post();
+//        if (empty($params['sczl_gdbh'])){
+//            $this->error('参数错误');
+//        }
+//        $lastId = \db('设备_产量计酬')->order('UniqId desc')->value('rtrim(UniqId)');
+//        $massage = \db('工单_工艺资料')
+//            ->where('Gy0_gdbh',$params['sczl_gdbh'])
+//            ->where('Gy0_yjno',$params['sczl_yjno'])
+//            ->where('Gy0_gxh',$params['sczl_gxh'])
+//            ->count();
+//        if ($massage === 0){
+//            $this->error('请选择正确的工序');
+//        }
+//        $params['sczl_type'] = $params['sczl_gxmc'];
+//        $params['sczl_wgsj'] = '1900-01-01 00:00:00';
+//        $params['sczl_废品率系数'] = 0;
+//        $params['sys_rq'] = date('Y-m-d H:i:s',time());
+//        $params['mod_rq'] = date('Y-m-d H:i:s',time());
+//        $params['UniqId'] = $lastId + 1;
+//        if (!empty($params['sczl_装版总工时']) && $params['sczl_装版总工时'] !== 0){
+//            $data = [
+//                'gdbh' => $params['sczl_gdbh'],
+//                'yjno' => $params['sczl_yjno'],
+//                'gxh' => $params['sczl_gxh'],
+//                'jtbh' => $params['sczl_jtbh'],
+//                'startTime' => $params['sczl_sj1'],
+//                'endTime' => $params['sczl_sj2'],
+//                'yieldUid' => $params['UniqId'],
+//                '换版总工时' => $params['sczl_装版总工时'],
+//                '换版联拼数' => $params['sczl_换版联拼数'],
+//                '换版类型' => $params['换版类型'],
+//                'sys_rq' => date('Y-m-d H:i:s',time()),
+//                'sys_id' => $params['sys_id']
+//            ];
+//            $chSql = \db('设备_装版工时')->fetchSql(true)->insert($data);
+//            $chRes = \db()->query($chSql);
+//        }
+//        unset($params['sczl_换版联拼数'],$params['换版类型']);
+//        $sql = \db('设备_产量计酬')->fetchSql(true)->insert($params);
+//        $res = \db()->query($sql);
+//        if ($res !== false){
+//            $this->success('成功');
+//        }else{
+//            $this->error('失败');
+//        }
+//    }
     public function ChanliangAdd()
     {
-        if (Request::instance()->isPost() === false){
+        // 1. 请求验证
+        if (!Request::instance()->isPost()) {
             $this->error('请求错误');
         }
+
         $params = Request::instance()->post();
-        if (empty($params['sczl_gdbh'])){
+
+        // 2. 参数验证
+        if (empty($params['sczl_gdbh'])) {
             $this->error('参数错误');
         }
-        $lastId = \db('设备_产量计酬')->order('UniqId desc')->value('rtrim(UniqId)');
-        $massage = \db('工单_工艺资料')
-            ->where('Gy0_gdbh',$params['sczl_gdbh'])
-            ->where('Gy0_yjno',$params['sczl_yjno'])
-            ->where('Gy0_gxh',$params['sczl_gxh'])
+
+        // 3. 获取最新ID
+        $lastId = db('设备_产量计酬')->order('UniqId desc')->value('rtrim(UniqId)');
+
+        // 4. 验证工序存在性
+        $massage = db('工单_工艺资料')
+            ->where('Gy0_gdbh', $params['sczl_gdbh'])
+            ->where('Gy0_yjno', $params['sczl_yjno'])
+            ->where('Gy0_gxh', $params['sczl_gxh'])
             ->count();
-        if ($massage === 0){
+
+        if ($massage === 0) {
             $this->error('请选择正确的工序');
         }
+
+        // 5. 准备基础数据
+        $currentTime = date('Y-m-d H:i:s');
         $params['sczl_type'] = $params['sczl_gxmc'];
         $params['sczl_wgsj'] = '1900-01-01 00:00:00';
         $params['sczl_废品率系数'] = 0;
-        $params['sys_rq'] = date('Y-m-d H:i:s',time());
-        $params['mod_rq'] = date('Y-m-d H:i:s',time());
+        $params['sys_rq'] = $currentTime;
+        $params['mod_rq'] = $currentTime;
         $params['UniqId'] = $lastId + 1;
-        $sql = \db('设备_产量计酬')->fetchSql(true)->insert($params);
-        $res = \db()->query($sql);
-        if ($res !== false){
+
+        // 6. 处理装版工时记录(如果有)
+        if (!empty($params['sczl_装版总工时']) && $params['sczl_装版总工时'] != 0) {
+            $plateData = [
+                'gdbh' => $params['sczl_gdbh'],
+                'yjno' => $params['sczl_yjno'],
+                'gxh' => $params['sczl_gxh'],
+                'jtbh' => $params['sczl_jtbh'],
+                'startTime' => $params['sczl_sj1'],
+                'endTime' => $params['sczl_sj2'],
+                'yieldUid' => $params['UniqId'],
+                '换版总工时' => $params['sczl_装版总工时'],
+                '换版联拼数' => $params['sczl_换版联拼数'],
+                '换版类型' => $params['换版类型'],
+                'sys_rq' => $currentTime,
+                'sys_id' => $params['sys_id']
+            ];
+
+            $chSql = db('设备_装版工时')->fetchSql(true)->insert($plateData);
+            $chRes = \db()->query($chSql);
+            if ($chRes === false) {
+                $this->error('装版工时记录保存失败');
+            }
+        }
+
+        // 7. 移除不需要的字段
+        unset($params['sczl_换版联拼数'], $params['换版类型']);
+
+        // 8. 保存主记录
+        $sql = db('设备_产量计酬')->fetchSql(true)->insert($params);
+        $res = db()->query($sql);
+
+        if ($res !== false) {
             $this->success('成功');
-        }else{
+        } else {
             $this->error('失败');
         }
     }
-
     /**
      * 日产量上报添加获取工单信息
      * @return void

+ 261 - 0
application/api/controller/MountHours.php

@@ -0,0 +1,261 @@
+<?php
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use think\db\exception\BindParamException;
+use think\exception\PDOException;
+use \think\Request;
+use \think\Db;
+
+/**
+ * 装版工时审核页面
+ */
+class MountHours extends Api
+{
+    protected $noNeedLogin = ['*'];
+    protected $noNeedRight = ['*'];
+
+
+    /**
+     * 装版工时审核页面左侧菜单
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public function getTab()
+    {
+        if (!$this->request->isGet()) {
+            $this->error('请求错误');
+        }
+
+        $data = $this->fetchAndFormatPlateChangeData();
+
+        empty($data) ? $this->error('未找到换版数据') : $this->success('成功', $data);
+    }
+
+    /**
+     * 获取并格式化装版数据
+     */
+    private function fetchAndFormatPlateChangeData()
+    {
+        $departments = ['胶印车间', '凹丝印车间', '印后车间', '检验车间'];
+
+        $list = \db('设备_装版工时')
+            ->alias('a')
+            ->join('设备_基本资料 b', 'a.jtbh = b.设备编号')
+            ->field([
+                'DATE_FORMAT(a.sys_rq, "%Y-%m-%d") as day',
+                'DATE_FORMAT(a.sys_rq, "%Y%m") as month',
+                'b.使用部门'
+            ])
+            ->where('b.使用部门', 'in', $departments)
+            ->group('day, b.使用部门')
+            ->order('day DESC')
+            ->select();
+
+        return array_reduce($list, function ($result, $item) {
+            $month = $item['month'];
+            $department = $item['使用部门'];
+            $day = $item['day'];
+
+            $result[$month][$department][] = $day;
+            return $result;
+        }, []);
+    }
+
+
+    /**
+     * 装版工时审核数据
+     * @return void
+     */
+    public function getMountList()
+    {
+        // 1. 请求验证
+        if (!$this->request->isGet()) {
+            $this->error('请求错误');
+        }
+
+        // 2. 参数验证
+        $params = $this->validateParams($this->request->param());
+
+        // 3. 获取数据
+        $list = $this->fetchMountData($params);
+
+        if (empty($list)) {
+            $this->error('未找到数据');
+        }
+
+        // 4. 处理数据
+        $processedList = $this->processListData($list);
+
+        $this->success('成功', $processedList);
+    }
+
+    /**
+     * 参数验证
+     */
+    private function validateParams($params)
+    {
+        if (empty($params['day']) || empty($params['sist'])) {
+            $this->error('参数错误:day和sist不能为空');
+        }
+
+        // 验证日期格式
+        if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $params['day'])) {
+            $this->error('参数错误:日期格式不正确');
+        }
+
+        return [
+            'day' => $params['day'],
+            'sist' => $params['sist']
+        ];
+    }
+
+    /**
+     * 获取装版数据
+     */
+    private function fetchMountData($params)
+    {
+        $fields = [
+            'a.gdbh' => '工单编号',
+            'a.yjno' => '印件号',
+            'a.gxh'  => '工序号',
+            'b.sczl_gxmc' => '工序名称',
+            'a.jtbh'  => '机台编号',
+            'a.startTime' => '开始时间',
+            'a.endTime'  => '结束时间',
+            'a.换版总工时' => '装版总工时',
+            'a.换版联拼数' => '装版联拼数',
+            'a.换版类型' => '装版类型',
+            'a.sys_rq' => '创建时间',
+            'a.coefficient' => '系数',
+            'a.装版补产工时',
+            'a.leader' => '班组长',
+            'a.leaderConfirm' => '班组长确认时间',
+            'a.statistics' => '统计人员',
+            'a.statisticsConfirm' => '统计确认时间',
+            'a.sys_id' => '上报机台',
+            'a.Uniqid',
+            'a.yieldUid' => '关联ID'
+        ];
+
+        return \db('设备_装版工时')
+            ->alias('a')
+            ->join('设备_产量计酬 b', 'a.yieldUid = b.UniqId')
+            ->join('设备_基本资料 c', 'a.jtbh = c.设备编号')
+            ->field($fields)
+            ->where('a.sys_rq', 'like', $params['day'] . '%')
+            ->where('c.使用部门', $params['sist'])
+            ->group('a.gdbh, a.yjno, a.gxh, a.jtbh, a.换版类型')
+            ->order('a.jtbh')
+            ->select();
+    }
+
+    /**
+     * 处理列表数据
+     */
+    private function processListData($list)
+    {
+        return array_map(function ($item) {
+            return [
+                '工单编号' => $item['工单编号'],
+                '印件号' => $item['印件号'],
+                '工序号' => $item['工序号'],
+                '工序名称' => $item['工序名称'],
+                '机台编号' => $item['机台编号'],
+                '开始时间' => $item['开始时间'],
+                '结束时间' => $item['结束时间'],
+                '装版总工时' => $item['装版总工时'],
+                '装版联拼数' => $item['装版联拼数'],
+                '装版类型' => $item['装版类型'],
+                '创建时间' => $item['创建时间'],
+                '系数' => $item['系数'],
+                '装版补产工时' => $item['装版补产工时'],
+                '班组长' => $item['班组长'],
+                '班组长确认时间' => $item['班组长确认时间'],
+                '统计人员' => $item['统计人员'],
+                '统计确认时间' => $item['统计确认时间'],
+                '上报机台' => $item['上报机台'],
+                'Uniqid' => $item['Uniqid'],
+                '班组长确认状态' => $this->getConfirmationStatus($item['班组长'], $item['班组长确认时间']),
+                '统计确认状态' => $this->getConfirmationStatus($item['统计人员'], $item['统计确认时间'])
+            ];
+        }, $list);
+    }
+
+    /**
+     * 获取确认状态
+     */
+    private function getConfirmationStatus($person, $confirmTime)
+    {
+        return !empty($person) && !empty($confirmTime) ? '已确认' : '未确认';
+    }
+
+
+    /**
+     * 班组长审核
+     * @return void
+     * @throws BindParamException
+     * @throws PDOException
+     * @throws \think\Exception
+     */
+    public function leaderConfirm()
+    {
+        if (!$this->request->isPost()) {
+            $this->error('请求错误');
+        }
+        $param = Request::instance()->post();
+        if (empty($param)) {
+            $this->error('参数错误');
+        }
+        $coefficient = $param['coefficient'];
+        $leader = $param['leader'];
+        $leaderConfirm = date('Y-m-d H:i:s');
+        $sql = \db('设备_装版工时')
+            ->where('Uniqid', $param['Uniqid'])
+            ->fetchSql(true)
+            ->update(['coefficient' => $coefficient, 'leaderConfirm' => $leaderConfirm, 'leader' => $leader]);
+        $res = \db()->query($sql);
+        if ($res) {
+            $this->success('确认成功');
+        }else{
+            $this->error('确认失败');
+        }
+    }
+
+
+    /**
+     * 统计员审核
+     * @return void
+     * @throws BindParamException
+     * @throws PDOException
+     * @throws \think\Exception
+     */
+    public function statisticsConfirm()
+    {
+        if (!$this->request->isPost()) {
+            $this->error('请求错误');
+        }
+        $param = Request::instance()->post();
+        if (empty($param)) {
+            $this->error('参数错误');
+        }
+        $sql = \db('设备_装版工时')
+            ->where('Uniqid', $param['Uniqid'])
+            ->fetchSql(true)
+            ->update(['装版补产工时' => $param['装版补产工时'], 'statisticsConfirm' => $param['statisticsConfirm'], 'statistics' => $param['statistics']]);
+        $res = \db()->query($sql);
+        $clSql = \db('设备_产量计酬')
+            ->where('UniqId', $param['yieldUid'])
+            ->fetchSql(true)
+            ->update(['sczl_装版工时' => $param['装版补产工时']]);
+        $clRes = \db()->query($clSql);
+        if ($res || $clRes) {
+            $this->success('确认成功');
+        }else{
+            $this->error('确认失败');
+        }
+    }
+}

+ 392 - 97
application/api/controller/ReportingWork.php

@@ -3,6 +3,8 @@
 namespace app\api\controller;
 
 use app\common\controller\Api;
+use think\db\exception\BindParamException;
+use think\exception\PDOException;
 use \think\Request;
 use \think\Db;
 /**
@@ -343,117 +345,410 @@ class ReportingWork extends Api
      * @ApiMethod POST
      * @params array data
     */
-    public function submitDailyProduction(){
-        if (Request::instance()->isPost() == false){
+//    public function submitDailyProduction(){
+//        if (Request::instance()->isPost() == false){
+//            $this->error('非法请求');
+//        }
+//        $params = Request::instance()->post();
+//        $time = date('Y-m-d 00:00:00',time()-86400);
+//        if ($params['sczl_sj2']<date('Y-m-d 08:30:00',time()) && $params['sczl_sj2']>date('Y-m-d 00:00:00')){
+//            $params['sczl_rq'] = $time;
+//        }
+//        $machine = $params['sczl_jtbh'].'#';
+//        $batchData = []; //批次追踪数据
+//        $batch = $params['bom'];
+//        $data = $params;//产量数据
+//        $data['sczl_type'] = $params['sczl_gxmc'];
+//        $data['sczl_前工序废'] = $params['last_fp'];
+//        $data['sczl_来料少数'] = $params['less_sl'];
+//        $data['sczl_装版总工时'] = $params['zb_time'];
+//        $data['sczl_打样总工时'] = $params['dy_time'];
+//        $data['sczl_设备运行工时'] = $params['run_time'];
+//        $data['sczl_jtbh'] = $machine;
+//        $data['码包'] = $params['code'];
+//        $data['主电表'] = $params['main_meter'];
+//        $data['辅电表'] = $params['auxiliary_meter'];
+//        unset($data['last_fp']);
+//        unset($data['less_sl']);
+//        unset($data['zb_time']);
+//        unset($data['dy_time']);
+//        unset($data['run_time']);
+//        unset($data['code']);
+//        unset($data['main_meter']);
+//        unset($data['auxiliary_meter']);
+//        unset($data['bom']);
+//        $start_time = \db('设备_产量采集')->where('设备编号',$machine)->order('UniqId desc')->find();
+//        if (!empty($start_time)){
+//            $data['开工时间'] = $start_time['开工时间'];
+//        }else{
+//            $data['开工时间'] = '';
+//        }
+//        $sys_id = \db('设备_基本资料')->where('设备编号',$machine)->value('sys_sbID');
+//        $data['sys_id'] = '['.$sys_id.'/'.$machine.']';
+//        $UniqId = \db('设备_产量计酬')->order('UniqId desc')->value('UniqId');
+//        if ($UniqId < 10000000){
+//            $data['UniqId'] = 10000000;
+//        }else{
+//            $data['UniqId'] = $UniqId + 1;
+//        }
+//        $data['sczl_Pgcl'] = 0;
+//        $data['sczl_oil'] = 0;
+//        $data['sczl_计产系数'] = 0;
+//        $data['sczl_工价系数'] = 0;
+//        $data['sczl_装版工时'] = 0;
+//        $data['sczl_保养工时'] = 0;
+//        $data['sczl_打样工时'] = 0;
+//        $data['sczl_异常停机工时'] = 0;
+//        $data['sczl_异常工时1'] = 0;
+//        $data['sczl_异常类型1'] = '';
+//        $data['sczl_废品率系数'] = '';
+//        $data['sczl_desc'] = '';
+//        $data['sczl_wgsj'] = '1900-01-01 00:00:00';
+//        $data['码开始行'] = $params['ma_start'];
+//        $data['码结束行'] = $params['ma_end'];
+//        $data['mod_rq'] = '1900-01-01 00:00:00';
+//        $data['sys_rq'] = date('Y-m-d H:i:s');
+//        unset($data['ma_start']);
+//        unset($data['ma_end']);
+//        if (!empty($batch)){
+//            $batchData = explode(',',$batch);
+//            $newData = [];
+//            $batchUniqId = \db('物料_批次跟踪')->order('UniqId desc')->value('UniqId');
+//            if ($batchUniqId < 10000000){
+//                $batchUniqId = 10000000;
+//            }
+//            foreach ($batchData as $key=>$item){
+//                $batchUniqId++;
+//                $val = explode('-',$item);
+//                $newData[$key]['wlbh'] = $val[0];
+//                $newData[$key]['wlBatch'] = $val[1];
+//                $newData[$key]['sczl_gdbh'] = $data['sczl_gdbh'];
+//                $newData[$key]['sczl_yjno'] = $data['sczl_yjno'];
+//                $newData[$key]['sczl_gxh'] = $data['sczl_gxh'];
+//                $newData[$key]['sczl_gxmc'] = $data['sczl_gxmc'];
+//                $newData[$key]['sczl_num'] = $data['sczl_num'];
+//                $newData[$key]['sys_id'] = $data['sys_id'];
+//                $newData[$key]['sys_rq'] = $data['sys_rq'];
+//                $newData[$key]['UniqID'] = $batchUniqId;
+//            }
+//        }
+//        if (!empty($data['sczl_装版总工时']) && $data['sczl_装版总工时'] !== 0){
+//            $priData = [
+//                'gdbh' => $data['sczl_gdbh'] ?? '',
+//                'yjno' => $data['sczl_yjno'] ?? '',
+//                'gxh' => $data['sczl_gxh'] ?? '',
+//                'jtbh' => $data['sczl_jtbh'] ?? '',
+//                'startTime' => $data['sczl_sj1'] ?? '',
+//                'endTime' => $data['sczl_sj2'] ?? '',
+//                '换版总工时' => $data['sczl_装版总工时'],
+//                '换版联拼数' => $data['sczl_换版联拼数'] ?? 0,
+//                '换版类型' => $data['换版类型'] ?? ''
+//            ];
+//            $priSql = \db('设备_装版工时')->fetchSql(true)->insert($priData);
+//            $priRes = \db()->query($priSql);
+//        }
+//        unset($data['sczl_换版联拼数']);
+//        unset($data['换版类型']);
+//        $res = false;
+//        $batch_res = false;
+//        Db::startTrans();
+//        try {
+//            $sql = \db('设备_产量计酬')->fetchSql(true)->insert($data);
+//            $res = Db::query($sql);
+//            if (!empty($batch)){
+//                $batch_sql = \db('物料_批次跟踪')->fetchSql(true)->insertAll($newData);
+//                $batch_res = Db::query($batch_sql);
+//            }else{
+//                $batch_res = true;
+//            }
+//
+//            Db::commit();
+//            cache('MachineProductReport-getList',null);
+//        }catch (\Exception $e){
+//            Db::rollback();
+//        }
+//        if ($res === false || $batch_res === false){
+//            $this->error('报工失败');
+//        }else{
+//            $this->success('报工成功');
+//        }
+//
+//    }
+
+    public function submitDailyProduction()
+    {
+        // 1. 请求验证优化
+        if (!Request::instance()->isPost()) {
             $this->error('非法请求');
         }
+
         $params = Request::instance()->post();
-        $time = date('Y-m-d 00:00:00',time()-86400);
-        if ($params['sczl_sj2']<date('Y-m-d 08:30:00',time()) && $params['sczl_sj2']>date('Y-m-d 00:00:00')){
-            $params['sczl_rq'] = $time;
-        }
-        $machine = $params['sczl_jtbh'].'#';
-        $batchData = []; //批次追踪数据
-        $batch = $params['bom'];
-        $data = $params;//产量数据
-        $data['sczl_type'] = $params['sczl_gxmc'];
-        $data['sczl_前工序废'] = $params['last_fp'];
-        $data['sczl_来料少数'] = $params['less_sl'];
-        $data['sczl_装版总工时'] = $params['zb_time'];
-        $data['sczl_打样总工时'] = $params['dy_time'];
-        $data['sczl_设备运行工时'] = $params['run_time'];
-        $data['sczl_jtbh'] = $machine;
-        $data['码包'] = $params['code'];
-        $data['主电表'] = $params['main_meter'];
-        $data['辅电表'] = $params['auxiliary_meter'];
-        unset($data['last_fp']);
-        unset($data['less_sl']);
-        unset($data['zb_time']);
-        unset($data['dy_time']);
-        unset($data['run_time']);
-        unset($data['code']);
-        unset($data['main_meter']);
-        unset($data['auxiliary_meter']);
-        unset($data['bom']);
-        $start_time = \db('设备_产量采集')->where('设备编号',$machine)->order('UniqId desc')->find();
-        if (!empty($start_time)){
-            $data['开工时间'] = $start_time['开工时间'];
-        }else{
-            $data['开工时间'] = '';
+
+        // 2. 数据预处理
+        $processedData = $this->preprocessData($params);
+
+        // 3. 数据验证
+        if (!$this->validateData($processedData)) {
+            $this->error('数据验证失败');
         }
-        $sys_id = \db('设备_基本资料')->where('设备编号',$machine)->value('sys_sbID');
-        $data['sys_id'] = '['.$sys_id.'/'.$machine.']';
-        $UniqId = \db('设备_产量计酬')->order('UniqId desc')->value('UniqId');
-        if ($UniqId < 10000000){
-            $data['UniqId'] = 10000000;
-        }else{
-            $data['UniqId'] = $UniqId + 1;
+
+        // 4. 数据库操作
+        $result = $this->saveProductionData($processedData);
+
+        if ($result) {
+            // 5. 清理缓存
+            cache('MachineProductReport-getList', null);
+            $this->success('报工成功');
+        } else {
+            $this->error('报工失败');
         }
-        $data['sczl_Pgcl'] = 0;
-        $data['sczl_oil'] = 0;
-        $data['sczl_计产系数'] = 0;
-        $data['sczl_工价系数'] = 0;
-        $data['sczl_装版工时'] = 0;
-        $data['sczl_保养工时'] = 0;
-        $data['sczl_打样工时'] = 0;
-        $data['sczl_异常停机工时'] = 0;
-        $data['sczl_异常工时1'] = 0;
-        $data['sczl_异常类型1'] = '';
-        $data['sczl_废品率系数'] = '';
-        $data['sczl_desc'] = '';
-        $data['sczl_wgsj'] = '1900-01-01 00:00:00';
-        $data['码开始行'] = $params['ma_start'];
-        $data['码结束行'] = $params['ma_end'];
-        $data['mod_rq'] = '1900-01-01 00:00:00';
-        $data['sys_rq'] = date('Y-m-d H:i:s');
-        unset($data['ma_start']);
-        unset($data['ma_end']);
-        if (!empty($batch)){
-            $batchData = explode(',',$batch);
-            $newData = [];
-            $batchUniqId = \db('物料_批次跟踪')->order('UniqId desc')->value('UniqId');
-            if ($batchUniqId < 10000000){
-                $batchUniqId = 10000000;
+    }
+
+    /**
+     * 数据预处理
+     */
+    private function preprocessData($params)
+    {
+        $currentTime = time();
+
+        // 处理日期逻辑
+        if ($this->isEarlyMorningProduction($params['sczl_sj2'], $currentTime)) {
+            $params['sczl_rq'] = date('Y-m-d 00:00:00', $currentTime - 86400);
+        }
+
+        $machine = $params['sczl_jtbh'] . '#';
+
+        // 构建基础数据
+        $data = [
+            // 字段映射
+            'sczl_type' => $params['sczl_gxmc'],
+            'sczl_前工序废' => $params['last_fp'],
+            'sczl_来料少数' => $params['less_sl'],
+            'sczl_装版总工时' => $params['zb_time'],
+            'sczl_打样总工时' => $params['dy_time'],
+            'sczl_设备运行工时' => $params['run_time'],
+            'sczl_jtbh' => $machine,
+            '码包' => $params['code'],
+            '主电表' => $params['main_meter'],
+            '辅电表' => $params['auxiliary_meter'],
+            '码开始行' => $params['ma_start'],
+            '码结束行' => $params['ma_end'],
+
+            // 系统字段
+            'sys_rq' => date('Y-m-d H:i:s'),
+            'mod_rq' => '1900-01-01 00:00:00',
+            'sczl_wgsj' => '1900-01-01 00:00:00',
+
+            // 默认值字段
+            'sczl_Pgcl' => 0,
+            'sczl_oil' => 0,
+            'sczl_计产系数' => 0,
+            'sczl_工价系数' => 0,
+            'sczl_装版工时' => 0,
+            'sczl_保养工时' => 0,
+            'sczl_打样工时' => 0,
+            'sczl_异常停机工时' => 0,
+            'sczl_异常工时1' => 0,
+            'sczl_异常类型1' => '',
+            'sczl_废品率系数' => '',
+            'sczl_desc' => '',
+        ];
+
+        // 保留原始参数中的相关字段
+        $preserveFields = [
+            'sczl_gdbh', 'sczl_yjno', 'sczl_gxh', 'sczl_gxmc',
+            'sczl_num', 'sczl_sj1', 'sczl_sj2', 'sczl_rq'
+        ];
+
+        foreach ($preserveFields as $field) {
+            if (isset($params[$field])) {
+                $data[$field] = $params[$field];
             }
-            foreach ($batchData as $key=>$item){
-                $batchUniqId++;
-                $val = explode('-',$item);
-                $newData[$key]['wlbh'] = $val[0];
-                $newData[$key]['wlBatch'] = $val[1];
-                $newData[$key]['sczl_gdbh'] = $data['sczl_gdbh'];
-                $newData[$key]['sczl_yjno'] = $data['sczl_yjno'];
-                $newData[$key]['sczl_gxh'] = $data['sczl_gxh'];
-                $newData[$key]['sczl_gxmc'] = $data['sczl_gxmc'];
-                $newData[$key]['sczl_num'] = $data['sczl_num'];
-                $newData[$key]['sys_id'] = $data['sys_id'];
-                $newData[$key]['sys_rq'] = $data['sys_rq'];
-                $newData[$key]['UniqID'] = $batchUniqId;
+        }
+
+        // 获取开工时间
+        $data['开工时间'] = $this->getMachineStartTime($machine);
+
+        // 生成唯一ID
+        $data['UniqId'] = $this->generateUniqId();
+
+        // 设置系统ID
+        $data['sys_id'] = $this->getSystemId($machine);
+
+        return [
+            'data' => $data,
+            'batch' => $params['bom'] ?? '',
+            'plateChangeData' => $this->preparePlateChangeData($data, $params)
+        ];
+    }
+
+    /**
+     * 判断是否为凌晨生产
+     */
+    private function isEarlyMorningProduction($productionTime, $currentTime)
+    {
+        $productionTimestamp = strtotime($productionTime);
+        $startOfDay = strtotime(date('Y-m-d 00:00:00', $currentTime));
+        $morningTime = strtotime(date('Y-m-d 08:30:00', $currentTime));
+
+        return $productionTimestamp < $morningTime && $productionTimestamp > $startOfDay;
+    }
+
+    /**
+     * 获取设备开工时间
+     */
+    private function getMachineStartTime($machine)
+    {
+        $startTimeRecord = \db('设备_产量采集')
+            ->where('设备编号', $machine)
+            ->order('UniqId desc')
+            ->find();
+
+        return $startTimeRecord['开工时间'] ?? '';
+    }
+
+    /**
+     * 生成唯一ID
+     */
+    private function generateUniqId()
+    {
+        $lastUniqId = \db('设备_产量计酬')->order('UniqId desc')->value('UniqId');
+        return ($lastUniqId < 10000000) ? 10000000 : $lastUniqId + 1;
+    }
+
+    /**
+     * 获取系统ID
+     */
+    private function getSystemId($machine)
+    {
+        $sysId = \db('设备_基本资料')->where('设备编号', $machine)->value('sys_sbID');
+        return '[' . $sysId . '/' . $machine . ']';
+    }
+
+    /**
+     * 准备装版数据
+     */
+    private function preparePlateChangeData($data, $params)
+    {
+        if (empty($data['sczl_装版总工时']) || $data['sczl_装版总工时'] == 0) {
+            return null;
+        }
+
+        return [
+            'gdbh' => $data['sczl_gdbh'] ?? '',
+            'yjno' => $data['sczl_yjno'] ?? '',
+            'gxh' => $data['sczl_gxh'] ?? '',
+            'jtbh' => $data['sczl_jtbh'] ?? '',
+            'startTime' => $data['sczl_sj1'] ?? '',
+            'endTime' => $data['sczl_sj2'] ?? '',
+            '换版总工时' => $data['sczl_装版总工时'],
+            '换版联拼数' => $params['sczl_换版联拼数'] ?? 0,
+            '换版类型' => $params['换版类型'] ?? '',
+            'yieldUid' => $this->generateUniqId(),
+            'sys_rq' => date('Y-m-d H:i:s'),
+            'sys_id' => $this->getSystemId($data['sczl_jtbh'])
+        ];
+    }
+
+    /**
+     * 准备批次数据
+     */
+    private function prepareBatchData($batch, $baseData)
+    {
+        if (empty($batch)) {
+            return [];
+        }
+
+        $batchData = explode(',', $batch);
+        $batchUniqId = \db('物料_批次跟踪')->order('UniqId desc')->value('UniqId');
+        $batchUniqId = ($batchUniqId < 10000000) ? 10000000 : $batchUniqId;
+
+        $newData = [];
+        foreach ($batchData as $item) {
+            $batchUniqId++;
+            $val = explode('-', $item);
+
+            $newData[] = [
+                'wlbh' => $val[0],
+                'wlBatch' => $val[1],
+                'sczl_gdbh' => $baseData['sczl_gdbh'],
+                'sczl_yjno' => $baseData['sczl_yjno'],
+                'sczl_gxh' => $baseData['sczl_gxh'],
+                'sczl_gxmc' => $baseData['sczl_gxmc'],
+                'sczl_num' => $baseData['sczl_num'],
+                'sys_id' => $baseData['sys_id'],
+                'sys_rq' => $baseData['sys_rq'],
+                'UniqID' => $batchUniqId
+            ];
+        }
+
+        return $newData;
+    }
+
+    /**
+     * 数据验证
+     */
+    private function validateData($data)
+    {
+        // 必要的字段验证
+        $requiredFields = ['sczl_gdbh', 'sczl_jtbh', 'sczl_sj1', 'sczl_sj2'];
+
+        foreach ($requiredFields as $field) {
+            if (empty($data['data'][$field])) {
+                return false;
             }
         }
-        $res = false;
-        $batch_res = false;
+
+        // 时间逻辑验证
+        if (strtotime($data['data']['sczl_sj1']) > strtotime($data['data']['sczl_sj2'])) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * 保存生产数据
+     */
+    private function saveProductionData($processedData)
+    {
         Db::startTrans();
+
         try {
-            $sql = \db('设备_产量计酬')->fetchSql(true)->insert($data);
-            $res = Db::query($sql);
-            if (!empty($batch)){
-                $batch_sql = \db('物料_批次跟踪')->fetchSql(true)->insertAll($newData);
-                $batch_res = Db::query($batch_sql);
-            }else{
-                $batch_res = true;
+            // 保存主数据
+            $mainSql = \db('设备_产量计酬')->fetchSql(true)->insert($processedData['data']);
+            $mainResult = \db()->query($mainSql);
+
+            // 保存批次数据
+            $batchData = $this->prepareBatchData($processedData['batch'], $processedData['data']);
+            $batchResult = true;
+
+            if (!empty($batchData)) {
+                $batchResult = \db('物料_批次跟踪')->insertAll($batchData);
+            }
+
+            // 保存装版数据
+            $plateResult = true;
+
+            if (!empty($processedData['plateChangeData'])) {
+                $plateSql = \db('设备_装版工时')->fetchSql(true)->insert($processedData['plateChangeData']);
+                $plateResult = \db()->query($plateSql);
             }
 
-            Db::commit();
-            cache('MachineProductReport-getList',null);
-        }catch (\Exception $e){
+            if ($mainResult !== false && $batchResult !== false && $plateResult !== false) {
+                Db::commit();
+                return true;
+            } else {
+                Db::rollback();
+                return false;
+            }
+
+        } catch (\Exception $e) {
             Db::rollback();
+            // 记录日志
+             \think\Log::error('生产数据保存失败: ' . $e->getMessage());
+            return false;
         }
-        if ($res === false || $batch_res === false){
-            $this->error('报工失败');
-        }else{
-            $this->success('报工成功');
-        }
-
     }
     /**
      * 获取机台编号