$item) { $idx = $index + 1; $check_feilds = [ ['name' => 'delivery_code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'source_herder_num', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'source_line_num', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'material_code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'customer_name', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'customer_code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'unit_code', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'unit_name', 'feild_type' => 'string', 'required' => true, 'len' => 100], ['name' => 'quantity', 'feild_type' => 'string', 'required' => true, 'len' => 20], ['name' => 'create_time', 'feild_type' => 'timestamp', 'required' => true, 'len' => 6], ['name' => 'update_time', 'feild_type' => 'timestamp', 'required' => true, 'len' => 6] ]; foreach ($check_feilds as $val) { if (!isset($item[$val['name']])) { throw new Exception("供应商数据集第[{$idx}]位置数据对象不存在字段[{$val['name']}]"); } if ($val['required']) { if ($val['feild_type'] == 'string') { // 判断是否是一个字符串 if (!is_string($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); } } // 判断创建修改时间格式是否正确 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); } } if (empty($item[$val['name']])) { throw new Exception("供应商数据集第[{$idx}]位置数据对象字段[{$val['name']}]的值不能为空"); } } } $supplierData[$index]['status'] = 1; } // 以发票号分组 $new_group_data = array_group($listData, 'delivery_code'); foreach ($new_group_data as $k1 => $v1) { // 检测是否存在发票号,如果存在,先作废掉之前的数据,再新增数据 $sql = sprintf( "SELECT id FROM hf_mes_wms_erp_product_outbound WHERE delivery_code='%s' LIMIT 1;", $k1 ); $ret = Db::fetch($sql); if (!empty($ret)) { // 作废数据 $sql = sprintf( "UPDATE \"%s\" SET status=%s WHERE delivery_code='%s'", 'hf_mes_wms_erp_product_outbound', 2, $k1 ); Db::query($sql); } // 新增发票号父级数据 $erp_product_outbound_id = Db::insert('hf_mes_wms_erp_product_outbound', [ 'delivery_code' => $k1, 'status' => 1, 'customer_code' => $v1[0]['customer_code'], 'customer_name' => $v1[0]['customer_name'] ]); foreach ($v1 as $k2 => $v2) { Db::insert('hf_mes_wms_erp_product_outbound_details', [ 'erp_product_outbound_id' => $erp_product_outbound_id, 'source_herder_num' => $v2['source_herder_num'], 'source_line_num' => $v2['source_line_num'], 'material_code' => $v2['material_code'], 'quantity' => $v2['quantity'], 'unit_code' => $v2['unit_code'], 'unit_name' => $v2['unit_name'], 'create_time' => $v2['create_time'], 'update_time' => $v2['update_time'] ]); } } } catch (Exception $e) { throw new Exception($e->getMessage()); } return ''; } }