SCTMES_V5/mes_in_sct/app/action/SetSupplier.php
2025-06-14 18:55:09 +08:00

179 lines
7.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\action;
use Exception;
use libs\db\Db;
/**
* ERP供应商同步接口
* Class SetSupplier
* @package app\action
*/
class SetSupplier
{
public function execute($post)
{
// 验证数据
$param = check_valid($post['action'], [
['supplierData', 'array', '供应商数据集'],
], $post['param']);
try {
$supplierData = $param['supplierData'];
// 检索是否存在必要字段
foreach ($supplierData as $index => $item) {
$idx = $index + 1;
$check_feilds = [
['name' => 'name', 'feild_type' => 'string', 'required' => true, 'len' => 200],
['name' => 'code', 'feild_type' => 'string', 'required' => true, 'len' => 100],
['name' => 'address', 'feild_type' => 'string', 'required' => false, 'len' => 200],
['name' => 'contact_person', 'feild_type' => 'string', 'required' => false, 'len' => 45],
['name' => 'contact_number', 'feild_type' => 'string', 'required' => false, 'len' => 45],
['name' => 'email', 'feild_type' => 'string', 'required' => false, 'len' => 45],
['name' => 'remark', 'feild_type' => 'text', 'required' => false, 'len' => 1],
['name' => 'create_time', 'feild_type' => 'timestamp', 'required' => true, 'len' => 6],
['name' => 'update_time', 'feild_type' => 'timestamp', 'required' => true, 'len' => 6],
['name' => 'remark', 'feild_type' => 'text', 'required' => false, 'len' => 1],
['name' => 'effective_date', 'feild_type' => 'timestamp', 'required' => false, 'len' => 6],
];
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 (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']}]的值不能为空", 4001);
}
}
}
$supplierData[$index]['status'] = '';
if (empty($item['effective_date'])) {
$supplierData[$index]['status'] = 1;
} else {
if (date('Y-m-d', strtotime($item['effective_date'])) != $item['effective_date']) {
throw new Exception("供应商数据集第[{$idx}]位置数据对象字段[effective_date]的时间格式不正确正确例子如2023-01-01", 4001);
}
if (strtotime($item['effective_date']) < time()) {
$supplierData[$index]['status'] = 0;
} else {
$supplierData[$index]['status'] = 1;
}
}
}
foreach ($supplierData as $value) {
// 检测编码是否存在
$sql = sprintf(
"SELECT id
FROM hf_mes_supplier
WHERE code='%s' LIMIT 1;",
$value['code']
);
$ret = Db::fetch($sql);
if (!empty($ret)) {
// 修改数据
$update_keys = [
'name',
'code',
'effective_date',
'create_time',
'update_time',
'status',
'address',
'contact_person',
'contact_number',
'email',
'remark',
];
$update_str = '';
foreach ($update_keys as $key) {
if (isset($value[$key])) {
if (!empty($value[$key])) {
if ($key == 'status') {
$update_str .= "\"{$key}\"={$value[$key]},";
} else {
$update_str .= "\"{$key}\"='{$value[$key]}',";
}
}
}
}
$sql = sprintf(
"UPDATE \"%s\" SET %s WHERE id='%s'",
'hf_mes_supplier',
rtrim($update_str, ','),
$ret['id']
);
Db::query($sql);
} else {
// 新增数据
$insert_keys = [
'name',
'code',
'effective_date',
'create_time',
'update_time',
'status',
'address',
'contact_person',
'contact_number',
'email',
'remark',
];
$insert_key_str = '';
$insert_val_str = '';
foreach ($insert_keys as $key) {
if (isset($value[$key])) {
if (!empty($value[$key])) {
$insert_key_str .= "\"{$key}\",";
if ($key == 'status') {
$insert_val_str .= "{$value[$key]},";
} else {
$insert_val_str .= "'{$value[$key]}',";
}
}
}
}
$sql = sprintf(
"INSERT INTO %s(%s) VALUES (%s)",
'hf_mes_supplier',
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 '';
}
}