Commit c7b10f38 by 马丽华

Merge branch 'mlh_jzjx_project' into 'master'

收支表保存提速

See merge request !29
parents 9802149c d42fb772
......@@ -2,8 +2,11 @@ import datetime
import pandas as pd
import xlsxwriter
import psycopg2 # Odoo 依赖 psycopg2 处理 PostgreSQL 交互
from psycopg2 import sql # 用于安全拼接 SQL(防止 SQL 注入)
from odoo import http, tools
from odoo.http import content_disposition, request
from odoo import models, fields, api, SUPERUSER_ID, _
import os
import io
from jinja2 import FileSystemLoader, Environment
......@@ -29,24 +32,64 @@ class ProductIncomeExpenseIframe(http.Controller):
@http.route("/roke/product/product_income_expense/create", type="json", auth='none', cors='*', csrf=False)
def product_income_expense_create(self):
_self = http.request
cr = _self.env.cr # 获取 cursor
data_list = _self.jsonrequest.get("data_list", [])
for v in data_list:
data = {
"business_date": v.get("business_date", False),
"abstract": v.get("abstract", False),
"income": v.get("income", False),
"machinery_type": v.get("machinery_type", "其他"),
"expenditure": v.get("expenditure", False),
"customer": v.get("customer", False)
}
# 看是否有id,如果有的话就说明是更新,没有的话就说明是创建
if v.get("id", False):
expense_obj = _self.env["roke.product.income.expense"].sudo().search([("id", "=", v.get("id"))])
if not expense_obj:
return {"code": 1, "message": "更新失败,没找到对应数据。"}
expense_obj.write(data)
try:
# 获取模型环境
model = _self.env(user=SUPERUSER_ID)["roke.product.income.expense"]
# 查找最新创建的一条数据(按创建时间降序,取第一条)
latest_record = model.search([], order="business_date desc,create_date desc", limit=1)
if latest_record:
data = data_list[0]
balance = round(latest_record.balance + float(data.get("income")) - float(data.get("expenditure")), 2)
else:
_self.env(user=v.get("user_id"))["roke.product.income.expense"].create(data)
# 如果没有找到任何记录
balance = round(0 + data_list.get("income") - data_list.get("expenditure"), 2)
for v in data_list:
data = {
"business_date": v.get("business_date"),
"abstract": v.get("abstract"),
"income": v.get("income"),
"machinery_type": v.get("machinery_type", "其他"),
"expenditure": v.get("expenditure"),
"customer": v.get("customer"),
"balance": balance,
}
if v.get("id"): # 更新
cr.execute("""
UPDATE roke_product_income_expense
SET business_date = %s,
abstract = %s,
income = %s,
machinery_type = %s,
expenditure = %s,
customer = %s,
balance = %s,
WHERE id = %s
""", (
data["business_date"], data["abstract"], data["income"],
data["machinery_type"], data["expenditure"], data["customer"],data["balance"],
v["id"]
))
if cr.rowcount == 0: # 没有找到对应记录
return {"code": 1, "message": "更新失败,没找到对应数据。"}
else: # 创建
cr.execute("""
INSERT INTO roke_product_income_expense
(business_date, abstract, income, machinery_type, expenditure, customer, balance, create_uid, create_date)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, NOW() - INTERVAL '8 hours')
""", (
data["business_date"], data["abstract"], data["income"],
data["machinery_type"], data["expenditure"], data["customer"],
data["balance"],
v.get("user_id", 1) # 默认 user_id 没传的话用 1(管理员)
))
_self.env.cr.commit() # 提交事务,防止数据丢失
except Exception as e:
return {"code": 1, "message": f"操作失败:{str(e)}"}
return {"code": 0, "message": "操作成功!"}
@http.route("/roke/product/product_income_expense/get", type="json", auth='none', cors='*', csrf=False)
......
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