Commit 69668d79 by 夏超

[fix] 东联同步功能优化

parent 9b18504f
...@@ -78,3 +78,75 @@ class RokePubIntegrateModel(models.Model): ...@@ -78,3 +78,75 @@ class RokePubIntegrateModel(models.Model):
"response_result": str(data_dicts), "response_result": str(data_dicts),
"integrate_model_id": self.id, "integrate_model_id": self.id,
}) })
def sync_analysis_database(self, rel_data):
print("------------------------****数据库直连方式解析数据%s****------------------------" % rel_data)
parent_model_ = self.env[self.parent_model_name]
parent_model_fields = [] # 主表字段对象
for integrate_field in self.integrate_field_ids:
if integrate_field.grade_sign == "主表":
parent_model_fields.append(integrate_field)
# 按检索字段查询数据是否存在
parent_retrieval_field_obj = [parent_model_field for parent_model_field in parent_model_fields if
parent_model_field.retrieval_field_name == True]
# parent_retrieval_field_obj = parent_retrieval_field_obj[0] if parent_retrieval_field_obj else None
for data in rel_data:
model_obj = None
if parent_retrieval_field_obj:
domain = []
for parent_retrieval_field in parent_retrieval_field_obj:
if parent_retrieval_field.fixed: # 判断是否固定值
field_value = parent_retrieval_field.fixed_value
# 判断字段类型
FieldsObj = self.env["ir.model.fields"].search([
("model_id.model", "=", self.parent_model_name),
("name", "=", parent_retrieval_field.field_name)
])
if FieldsObj.ttype == "many2one":
# field_value = int(field_value)
try_convert_to_int = lambda value: int(value) if str(value).isdigit() else None
field_value = try_convert_to_int(field_value)
else:
field_value = data.get(parent_retrieval_field.opposite_field_name)
domain.append(
(parent_retrieval_field.field_name, '=', field_value)
)
model_obj = parent_model_.search(domain)
# if parent_retrieval_field_obj:
# model_obj = parent_model_.search([(parent_retrieval_field_obj.field_name, '=',
# data.get(parent_retrieval_field_obj.opposite_field_name))])
model_data = {}
for integrate_field in self.integrate_field_ids:
if integrate_field.fixed: # 判断是否固定值
field_value = integrate_field.fixed_value
else:
field_value = data.get(integrate_field.opposite_field_name)
if integrate_field.relation: # 判断是否是关联字段
field_value = self.env[integrate_field.relation_model_name].search(
[(integrate_field.relation_field_name, '=', field_value)]).id
if integrate_field.switch: # 判断是否需要取值转换
for condition in integrate_field.condition_ids:
# 通过配置的运算符进行运算 代替↑if代码
global_param = {
"field_value": field_value,
"check_value": condition.check_value
}
formula_str = f"""
global field_value, check_value
flag = True if field_value %s check_value else False
""" % (condition.option)
_logger.info(formula_str)
param = {}
exec(formula_str, global_param, param)
flag = param["flag"]
if flag:
field_value = condition.rel_value
field_value = self.data_convert(field_value)
_logger.info(condition.rel_value)
model_data[integrate_field.field_name] = field_value
_logger.info(model_data)
if self.parent_model_name != "roke.production.task" and model_obj:
model_obj.write(model_data)
else:
parent_model_.create(model_data)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment