Update 2026-06-24 10:47:45

This commit is contained in:
yi
2026-06-24 10:47:45 +08:00
parent ffc7eef984
commit 94625d4f3f
29 changed files with 1417 additions and 158 deletions
+3 -3
View File
@@ -372,7 +372,7 @@ router.post('/execute', async (req, res) => {
break;
}
case 'advance': {
const advRow = await db.query('SELECT project_id, applicant_id, applicant, advance_code, purpose FROM advances WHERE id = $1', [source_id]);
const advRow = await db.query('SELECT project_id, applicant_id, applicant, advance_code, reason AS purpose FROM advances WHERE id = $1', [source_id]);
if (advRow.rows.length > 0) {
finProjectId = advRow.rows[0].project_id;
finUserId = advRow.rows[0].applicant_id;
@@ -385,10 +385,10 @@ router.post('/execute', async (req, res) => {
break;
}
case 'reimbursement': {
const reimbRow = await db.query('SELECT project_id, applicant_id, applicant, reimbursement_code, expense_type, description as reimb_desc FROM reimbursements WHERE id = $1', [source_id]);
const reimbRow = await db.query('SELECT project_id, user_id, applicant, reimbursement_code, expense_type, reason AS reimb_desc FROM reimbursements WHERE id = $1', [source_id]);
if (reimbRow.rows.length > 0) {
finProjectId = reimbRow.rows[0].project_id;
finUserId = reimbRow.rows[0].applicant_id;
finUserId = reimbRow.rows[0].user_id;
finUserName = reimbRow.rows[0].applicant;
finSourceCode = reimbRow.rows[0].reimbursement_code;
finDescription = finDescription || reimbRow.rows[0].reimb_desc || '报销';
+25 -23
View File
@@ -23,7 +23,7 @@ router.get('/', async (req, res) => {
const { purchase_order_id, status } = req.query;
let query = `
SELECT pp.*,
po.order_code,
po.code AS order_code,
po.supplier_id,
s.name as supplier_name,
pr.status as request_status
@@ -36,12 +36,12 @@ router.get('/', async (req, res) => {
const conditions = [];
if (purchase_order_id) {
conditions.push('pp.purchase_order_id = $1');
params.push(purchase_order_id);
conditions.push(`pp.purchase_order_id = $${params.length}`);
}
if (status) {
conditions.push('pp.status = $1');
params.push(status);
conditions.push(`pp.status = $${params.length}`);
}
if (conditions.length > 0) {
@@ -76,7 +76,7 @@ router.get('/:id', async (req, res) => {
const result = await db.query(`
SELECT pp.*,
po.order_code,
po.code AS order_code,
po.supplier_id,
s.name as supplier_name,
pr.status as request_status,
@@ -85,7 +85,7 @@ router.get('/:id', async (req, res) => {
LEFT JOIN purchase_orders po ON pp.purchase_order_id = po.id
LEFT JOIN suppliers s ON po.supplier_id = s.id
LEFT JOIN payment_requests pr ON pp.payment_request_id = pr.id
WHERE pp.id = ?
WHERE pp.id = $1
`, [id]);
if (result.rows.length === 0) {
@@ -155,8 +155,8 @@ router.put('/:id', async (req, res) => {
const result = await db.query(`
UPDATE payment_plans
SET stage = ?, planned_date = ?, planned_amount = ?, planned_percentage = ?, remark = ?, updated_at = CURRENT_TIMESTAMP
WHERE id = ?
SET stage = $1, planned_date = $2, planned_amount = $3, planned_percentage = $4, remark = $5, updated_at = CURRENT_TIMESTAMP
WHERE id = $6
`, [stage, planned_date, planned_amount, planned_percentage, remark, id]);
res.json({
@@ -216,7 +216,7 @@ router.post('/:id/create-request', async (req, res) => {
SELECT pp.*, po.supplier_id, po.currency, po.project_id
FROM payment_plans pp
LEFT JOIN purchase_orders po ON pp.purchase_order_id = po.id
WHERE pp.id = ?
WHERE pp.id = $1
`, [id]);
if (planResult.rows.length === 0) {
@@ -229,7 +229,7 @@ router.post('/:id/create-request', async (req, res) => {
return res.status(400).json({ success: false, message: '只能对待付款状态的计划创建付款申请' });
}
await db.query('BEGIN TRANSACTION');
await db.query('BEGIN');
try {
const requestCode = 'PAY' + new Date().toISOString().slice(0, 10).replace(/-/g, '') +
@@ -237,23 +237,25 @@ router.post('/:id/create-request', async (req, res) => {
const requestResult = await db.query(`
INSERT INTO payment_requests
(code, payment_type, purchase_order_id, amount, currency, applicant, request_date, status, created_at)
(request_code, payment_type, purchase_order_id, amount, currency, applicant, payment_date, status, created_at)
VALUES ($1, 'material', $2, $3, $4, '系统管理员', CURRENT_DATE, 'pending', CURRENT_TIMESTAMP)
RETURNING id`,
[requestCode, plan.purchase_order_id, plan.planned_amount, plan.currency || 'CNY']);
const requestId = requestResult.rows[0].id;
await db.query(`
UPDATE payment_plans
SET status = 'requested', payment_request_id = ?, updated_at = CURRENT_TIMESTAMP
WHERE id = ?
`, [requestResult.lastID, id]);
SET status = 'requested', payment_request_id = $1, updated_at = CURRENT_TIMESTAMP
WHERE id = $2
`, [requestId, id]);
await db.query('COMMIT');
res.json({
success: true,
message: '付款申请创建成功',
data: { request_id: requestResult.lastID, request_code: requestCode }
data: { request_id: requestId, request_code: requestCode }
});
} catch (innerError) {
await db.query('ROLLBACK');
@@ -290,20 +292,20 @@ router.post('/:id/mark-paid', async (req, res) => {
return res.status(400).json({ success: false, message: '只能对已申请或已批准的计划标记为已支付' });
}
await db.query('BEGIN TRANSACTION');
await db.query('BEGIN');
try {
await db.query(`
UPDATE payment_plans
SET status = 'paid', actual_amount = ?, actual_date = ?, updated_at = CURRENT_TIMESTAMP
WHERE id = ?
SET status = 'paid', actual_amount = $1, actual_date = $2, updated_at = CURRENT_TIMESTAMP
WHERE id = $3
`, [actual_amount || plan.planned_amount, actual_date || new Date().toISOString().slice(0, 10), id]);
if (plan.payment_request_id) {
await db.query(`
UPDATE payment_requests
SET status = 'paid', updated_at = CURRENT_TIMESTAMP
WHERE id = ?
WHERE id = $1
`, [plan.payment_request_id]);
}
@@ -311,7 +313,7 @@ router.post('/:id/mark-paid', async (req, res) => {
SELECT SUM(CASE WHEN status = 'paid' THEN actual_amount ELSE 0 END) as paid_amount,
SUM(planned_amount) as total_amount
FROM payment_plans
WHERE purchase_order_id = ?
WHERE purchase_order_id = $1
`, [plan.purchase_order_id]);
const { paid_amount, total_amount } = orderResult.rows[0];
@@ -325,8 +327,8 @@ router.post('/:id/mark-paid', async (req, res) => {
await db.query(`
UPDATE purchase_orders
SET paid_amount = ?, status = ?, updated_at = CURRENT_TIMESTAMP
WHERE id = ?
SET paid_amount = $1, status = $2, updated_at = CURRENT_TIMESTAMP
WHERE id = $3
`, [paid_amount, newOrderStatus, plan.purchase_order_id]);
await db.query('COMMIT');
@@ -360,13 +362,13 @@ router.get('/reminders/upcoming', async (req, res) => {
const result = await db.query(`
SELECT pp.*,
po.order_code,
po.code AS order_code,
s.name as supplier_name
FROM payment_plans pp
LEFT JOIN purchase_orders po ON pp.purchase_order_id = po.id
LEFT JOIN suppliers s ON po.supplier_id = s.id
WHERE pp.status = 'pending'
AND pp.planned_date <= date('now', '+' || ? || ' days')
AND pp.planned_date <= CURRENT_DATE + ($1 || ' days')::interval
AND pp.planned_date >= CURRENT_DATE
ORDER BY pp.planned_date ASC
`, [days]);
+1 -1
View File
@@ -22,7 +22,7 @@ router.get('/', async (req, res) => {
const result = await db.query(`
SELECT r.*, u.name as user_name, p.name as project_name
FROM reimbursements r
LEFT JOIN users u ON r.applicant_id = u.id
LEFT JOIN users u ON r.user_id = u.id
LEFT JOIN projects p ON r.project_id = p.id
ORDER BY r.created_at DESC
`);