$item) { $idx = $index + 1; $check_feilds = [ ['name' => 'supplier_code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'supplier_name', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'purchase_order_code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'po_category', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'po_header_id', 'feild_type' => 'int', 'required' => true, 'len' => 100], ['name' => 'po_number', 'feild_type' => 'int', 'required' => true, 'len' => 100], ['name' => 'po_line_number', 'feild_type' => 'int', 'required' => true, 'len' => 100], ['name' => 'po_release_number', 'feild_type' => 'int', 'required' => true, 'len' => 100], ['name' => 'shipment_num', 'feild_type' => 'int', 'required' => true, 'len' => 100], ['name' => 'code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'name', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'purchase_qty', 'feild_type' => 'int', 'required' => true, 'len' => 20], ['name' => 'acceptable_qty', 'feild_type' => 'int', 'required' => true, 'len' => 20], ['name' => 'estimated_delivery_time', 'feild_type' => 'timestamp', 'required' => false, 'len' => 6], ['name' => 'unit_code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'unit_name', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'create_time', 'feild_type' => 'timestamp', 'required' => true, 'len' => 6], ['name' => 'update_time', 'feild_type' => 'timestamp', 'required' => true, 'len' => 6], ['name' => 'active', 'feild_type' => 'int', 'required' => true, 'len' => 32], ]; foreach ($check_feilds as $val) { if (!isset($item[$val['name']])) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象不存在字段[{$val['name']}]", 4001); } if ($val['required']) { if ($val['feild_type'] == 'string') { // 判断是否是一个字符串 if (!is_string($item[$val['name']])) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象[{$val['name']}]的值不是字符串类型,请检查!", 4001); } if (empty($item[$val['name']])) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象字段[{$val['name']}]的值不能为空", 4001); } // 判断长度 if (strlen($item[$val['name']]) > $val['len']) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象[{$val['name']}]的值不符合规定的长度[{$val['len']}],请检查!", 4001); } } elseif ($val['feild_type'] == 'int') { if (!is_int($item[$val['name']])) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象对应的字段[{$val['name']}]值不是整数数字类型", 4001); } if ($val == 'active') { if (!in_array($item[$val['name']], [0, 1])) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象对应的字段[{$val['name']}]值只能是0或者1", 4001); } } } // 判断采购类型 if ($val['name'] == 'po_category' && !in_array($item['po_category'], ['STANDARD', 'BLANKET'])) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象字段[{$val['name']}]的值只能是STANDARD或者BLANKET", 4001); } // 判断创建修改时间格式是否正确 if ($val['name'] == 'create_time' || $val['name'] == 'update_time') { if (date('Y-m-d H:i:s', strtotime($item[$val['name']])) != $item[$val['name']]) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象字段[{$val['name']}]的时间格式不正确,正确例子如:2023-01-01 09:09:09", 4001); } } } else { if ($val['name'] == 'estimated_delivery_time') { if (!empty($item[$val['name']])) { $is_true = false; if (date('Y-m-d H:i:s', strtotime($item[$val['name']])) == $item[$val['name']]) { $is_true = true; } if (date('Y-m-d', strtotime($item[$val['name']])) == $item[$val['name']]) { $is_true = true; } if (!$is_true) { throw new Exception("采购订单数据集第[{$idx}]位置数据对象字段[{$val['name']}]的时间格式不正确,正确例子如:2023-01-01 09:09:09或者2023-01-01", 4001); } } } } } $orderMaterialData[$index]['status'] = $orderMaterialData[$index]['active']; } foreach ($orderMaterialData as $value) { list($ret_exists, $where) = [ array(), '' ]; // 判断采购单类型,STANDARD(标准)/BLANKET(一揽子发放) if ($value['po_category'] == 'STANDARD') { $where = "po_number='{$value['po_number']}' AND po_release_number='{$value['po_release_number']}' AND shipment_num='{$value['shipment_num']}'"; // 如果是STANDARD,那么以po_header_id(采购订单ID)、po_number(采购订单行号)、shipment_num(采购订单发运行号)作为唯一键修改数据 // 检测编码是否存在 $sql = sprintf( "SELECT id FROM hf_mes_wms_erp_purchase_order WHERE %s LIMIT 1;", $where ); $ret_exists = Db::fetch($sql); } else { $where = "po_number='{$value['po_number']}' AND po_line_number='{$value['po_line_number']}' AND po_release_number='{$value['po_release_number']}' AND shipment_num='{$value['shipment_num']}'"; // 如果是BLANKET,那么以po_header_id(采购订单ID)、po_number(采购订单行号)、shipment_num(采购订单发运行号)、po_line_number(采购订单发放号)作为唯一键修改数据 // 检测编码是否存在 $sql = sprintf( "SELECT id FROM hf_mes_wms_erp_purchase_order WHERE %s LIMIT 1;", $where ); $ret_exists = Db::fetch($sql); } if (!empty($ret_exists)) { // 修改数据 $update_keys = [ 'supplier_code', 'supplier_name', 'purchase_order_code', 'po_category', 'po_header_id', 'po_number', 'po_line_number', 'po_release_number', 'shipment_num', 'code', 'name', 'status', 'purchase_qty', 'acceptable_qty', 'estimated_delivery_time', 'unit_code', 'unit_name', 'create_time', 'update_time' ]; $update_str = ''; foreach ($update_keys as $key) { if (isset($value[$key])) { if (in_array($key, ['status'])) { $update_str .= "\"{$key}\"={$value[$key]},"; } else { $update_str .= "\"{$key}\"='{$value[$key]}',"; } } } $sql = sprintf( "UPDATE \"%s\" SET %s WHERE %s;", 'hf_mes_wms_erp_purchase_order', rtrim($update_str, ','), $where ); Db::query($sql); } else { // 新增数据 $insert_keys = [ 'supplier_code', 'supplier_name', 'purchase_order_code', 'po_category', 'po_header_id', 'po_number', 'po_line_number', 'po_release_number', 'shipment_num', 'code', 'name', 'status', 'purchase_qty', 'acceptable_qty', 'estimated_delivery_time', 'unit_code', 'unit_name', 'create_time', 'update_time' ]; $insert_key_str = ''; $insert_val_str = ''; foreach ($insert_keys as $key) { if (isset($value[$key])) { if (!empty($value[$key])) { $insert_key_str .= "\"{$key}\","; if (in_array($key, ['status'])) { $insert_val_str .= "{$value[$key]},"; } else { $insert_val_str .= "'{$value[$key]}',"; } } } } $sql = sprintf( "INSERT INTO %s(%s) VALUES (%s)", 'hf_mes_wms_erp_purchase_order', rtrim($insert_key_str, ','), rtrim($insert_val_str, ',') ); Db::query($sql); } } } catch (Exception $e) { throw new Exception($e->getMessage(), $e->getCode() ? $e->getCode() : 4001); } return ''; } }