feat: update task relation
This commit is contained in:
parent
d58d88c0d4
commit
46a16cf697
3 changed files with 105 additions and 71 deletions
|
|
@ -1428,8 +1428,6 @@ enum RequestWorkStatus {
|
||||||
Validate
|
Validate
|
||||||
Ended
|
Ended
|
||||||
Completed
|
Completed
|
||||||
|
|
||||||
Redo
|
|
||||||
Canceled
|
Canceled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1470,28 +1468,49 @@ model RequestWorkStepStatus {
|
||||||
responsibleUserId String?
|
responsibleUserId String?
|
||||||
responsibleUser User? @relation(fields: [responsibleUserId], references: [id])
|
responsibleUser User? @relation(fields: [responsibleUserId], references: [id])
|
||||||
|
|
||||||
taskOrder TaskOrder? @relation(fields: [taskOrderId], references: [id], onDelete: SetNull)
|
task Task[]
|
||||||
taskOrderId String?
|
|
||||||
|
|
||||||
@@id([step, requestWorkId])
|
@@id([step, requestWorkId])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum TaskOrderStatus {
|
||||||
|
Pending
|
||||||
|
InProgress
|
||||||
|
Validate
|
||||||
|
Complete
|
||||||
|
Canceled
|
||||||
|
}
|
||||||
|
|
||||||
enum TaskStatus {
|
enum TaskStatus {
|
||||||
Pending
|
Pending
|
||||||
InProgress
|
InProgress
|
||||||
Validate
|
Validate
|
||||||
Complete
|
Complete
|
||||||
|
Redo
|
||||||
Canceled
|
Canceled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model Task {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
|
||||||
|
taskStatus TaskStatus @default(Pending)
|
||||||
|
|
||||||
|
step Int
|
||||||
|
requestWorkId String
|
||||||
|
requestWorkStep RequestWorkStepStatus @relation(fields: [step, requestWorkId], references: [step, requestWorkId])
|
||||||
|
|
||||||
|
taskOrder TaskOrder @relation(fields: [taskOrderId], references: [id])
|
||||||
|
taskOrderId String
|
||||||
|
}
|
||||||
|
|
||||||
model TaskOrder {
|
model TaskOrder {
|
||||||
id String @id @default(cuid())
|
id String @id @default(cuid())
|
||||||
|
|
||||||
code String
|
code String
|
||||||
|
|
||||||
taskName String
|
taskName String
|
||||||
taskStatus TaskStatus @default(Pending)
|
taskOrderStatus TaskOrderStatus @default(Pending)
|
||||||
taskList RequestWorkStepStatus[]
|
taskList Task[]
|
||||||
|
|
||||||
contactName String
|
contactName String
|
||||||
contactTel String
|
contactTel String
|
||||||
|
|
|
||||||
|
|
@ -196,10 +196,10 @@ export class RequestDataActionController extends Controller {
|
||||||
prisma.taskOrder.updateMany({
|
prisma.taskOrder.updateMany({
|
||||||
where: {
|
where: {
|
||||||
taskList: {
|
taskList: {
|
||||||
every: { workStatus: RequestWorkStatus.Canceled },
|
every: { taskStatus: RequestWorkStatus.Canceled },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data: { taskStatus: TaskStatus.Canceled },
|
data: { taskOrderStatus: TaskStatus.Canceled },
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
@ -223,7 +223,12 @@ export class RequestListController extends Controller {
|
||||||
if (readyToTask) {
|
if (readyToTask) {
|
||||||
statusCondition = {
|
statusCondition = {
|
||||||
some: {
|
some: {
|
||||||
OR: [{ workStatus: RequestWorkStatus.Ready }, { workStatus: RequestWorkStatus.Redo }],
|
OR: [
|
||||||
|
{ workStatus: RequestWorkStatus.Ready },
|
||||||
|
{
|
||||||
|
task: { some: { taskStatus: TaskStatus.Redo } },
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import {
|
||||||
} from "tsoa";
|
} from "tsoa";
|
||||||
import prisma from "../db";
|
import prisma from "../db";
|
||||||
import { notFoundError } from "../utils/error";
|
import { notFoundError } from "../utils/error";
|
||||||
import { TaskStatus } from "@prisma/client";
|
import { TaskOrderStatus, TaskStatus } from "@prisma/client";
|
||||||
import { RequestWithUser } from "../interfaces/user";
|
import { RequestWithUser } from "../interfaces/user";
|
||||||
import {
|
import {
|
||||||
branchRelationPermInclude,
|
branchRelationPermInclude,
|
||||||
|
|
@ -44,17 +44,17 @@ export class TaskController extends Controller {
|
||||||
@Get("stats")
|
@Get("stats")
|
||||||
async getTaskOrderStats() {
|
async getTaskOrderStats() {
|
||||||
const task = await prisma.taskOrder.groupBy({
|
const task = await prisma.taskOrder.groupBy({
|
||||||
by: ["taskStatus"],
|
by: ["taskOrderStatus"],
|
||||||
_count: true,
|
_count: true,
|
||||||
});
|
});
|
||||||
return task.reduce<Record<TaskStatus, number>>(
|
return task.reduce<Record<TaskOrderStatus, number>>(
|
||||||
(a, c) => Object.assign(a, { [c.taskStatus]: c._count }),
|
(a, c) => Object.assign(a, { [c.taskOrderStatus]: c._count }),
|
||||||
{
|
{
|
||||||
[TaskStatus.Pending]: 0,
|
[TaskOrderStatus.Pending]: 0,
|
||||||
[TaskStatus.InProgress]: 0,
|
[TaskOrderStatus.InProgress]: 0,
|
||||||
[TaskStatus.Validate]: 0,
|
[TaskOrderStatus.Validate]: 0,
|
||||||
[TaskStatus.Complete]: 0,
|
[TaskOrderStatus.Complete]: 0,
|
||||||
[TaskStatus.Canceled]: 0,
|
[TaskOrderStatus.Canceled]: 0,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -66,9 +66,9 @@ export class TaskController extends Controller {
|
||||||
@Query() query: string = "",
|
@Query() query: string = "",
|
||||||
@Query() page = 1,
|
@Query() page = 1,
|
||||||
@Query() pageSize = 30,
|
@Query() pageSize = 30,
|
||||||
@Query() taskStatus?: TaskStatus,
|
@Query() taskOrderStatus?: TaskOrderStatus,
|
||||||
) {
|
) {
|
||||||
return this.getTaskOrderListByCriteria(req, query, page, pageSize, taskStatus);
|
return this.getTaskOrderListByCriteria(req, query, page, pageSize, taskOrderStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Post("list")
|
@Post("list")
|
||||||
|
|
@ -78,13 +78,13 @@ export class TaskController extends Controller {
|
||||||
@Query() query: string = "",
|
@Query() query: string = "",
|
||||||
@Query() page = 1,
|
@Query() page = 1,
|
||||||
@Query() pageSize = 30,
|
@Query() pageSize = 30,
|
||||||
@Query() taskStatus?: TaskStatus,
|
@Query() taskOrderStatus?: TaskOrderStatus,
|
||||||
@Body() body?: { code?: string[] },
|
@Body() body?: { code?: string[] },
|
||||||
) {
|
) {
|
||||||
const [result, total] = await prisma.$transaction([
|
const [result, total] = await prisma.$transaction([
|
||||||
prisma.taskOrder.findMany({
|
prisma.taskOrder.findMany({
|
||||||
where: {
|
where: {
|
||||||
taskStatus,
|
taskOrderStatus,
|
||||||
registeredBranch: { OR: permissionCondCompany(req.user) },
|
registeredBranch: { OR: permissionCondCompany(req.user) },
|
||||||
code: body?.code ? { in: body.code } : undefined,
|
code: body?.code ? { in: body.code } : undefined,
|
||||||
OR: [
|
OR: [
|
||||||
|
|
@ -112,6 +112,8 @@ export class TaskController extends Controller {
|
||||||
where: { id: taskId, registeredBranch: { OR: permissionCondCompany(req.user) } },
|
where: { id: taskId, registeredBranch: { OR: permissionCondCompany(req.user) } },
|
||||||
include: {
|
include: {
|
||||||
taskList: {
|
taskList: {
|
||||||
|
include: {
|
||||||
|
requestWorkStep: {
|
||||||
include: {
|
include: {
|
||||||
requestWork: {
|
requestWork: {
|
||||||
include: {
|
include: {
|
||||||
|
|
@ -132,6 +134,8 @@ export class TaskController extends Controller {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
institution: true,
|
institution: true,
|
||||||
createdBy: true,
|
createdBy: true,
|
||||||
},
|
},
|
||||||
|
|
@ -200,6 +204,8 @@ export class TaskController extends Controller {
|
||||||
return await tx.taskOrder.create({
|
return await tx.taskOrder.create({
|
||||||
include: {
|
include: {
|
||||||
taskList: {
|
taskList: {
|
||||||
|
include: {
|
||||||
|
requestWorkStep: {
|
||||||
include: {
|
include: {
|
||||||
requestWork: {
|
requestWork: {
|
||||||
include: {
|
include: {
|
||||||
|
|
@ -220,6 +226,8 @@ export class TaskController extends Controller {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
institution: true,
|
institution: true,
|
||||||
createdBy: true,
|
createdBy: true,
|
||||||
},
|
},
|
||||||
|
|
@ -228,9 +236,7 @@ export class TaskController extends Controller {
|
||||||
code,
|
code,
|
||||||
registeredBranchId: userAffiliatedBranch.id,
|
registeredBranchId: userAffiliatedBranch.id,
|
||||||
createdByUserId: req.user.sub,
|
createdByUserId: req.user.sub,
|
||||||
taskList: {
|
taskList: { create: taskList },
|
||||||
connect: taskList.map((v) => ({ step_requestWorkId: v })),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -244,7 +250,7 @@ export class TaskController extends Controller {
|
||||||
@Body()
|
@Body()
|
||||||
body: {
|
body: {
|
||||||
taskName: string;
|
taskName: string;
|
||||||
taskStatus: TaskStatus;
|
taskOrderStatus: TaskOrderStatus;
|
||||||
|
|
||||||
contactName: string;
|
contactName: string;
|
||||||
contactTel: string;
|
contactTel: string;
|
||||||
|
|
@ -259,8 +265,12 @@ export class TaskController extends Controller {
|
||||||
include: {
|
include: {
|
||||||
registeredBranch: { include: branchRelationPermInclude(req.user) },
|
registeredBranch: { include: branchRelationPermInclude(req.user) },
|
||||||
taskList: {
|
taskList: {
|
||||||
|
include: {
|
||||||
|
requestWorkStep: {
|
||||||
include: { requestWork: true },
|
include: { requestWork: true },
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
institution: true,
|
institution: true,
|
||||||
createdBy: true,
|
createdBy: true,
|
||||||
},
|
},
|
||||||
|
|
@ -274,10 +284,14 @@ export class TaskController extends Controller {
|
||||||
where: { id: taskId },
|
where: { id: taskId },
|
||||||
include: {
|
include: {
|
||||||
taskList: {
|
taskList: {
|
||||||
|
include: {
|
||||||
|
requestWorkStep: {
|
||||||
include: {
|
include: {
|
||||||
requestWork: true,
|
requestWork: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
institution: true,
|
institution: true,
|
||||||
registeredBranch: true,
|
registeredBranch: true,
|
||||||
createdBy: true,
|
createdBy: true,
|
||||||
|
|
@ -285,20 +299,16 @@ export class TaskController extends Controller {
|
||||||
data: {
|
data: {
|
||||||
...body,
|
...body,
|
||||||
taskList: {
|
taskList: {
|
||||||
disconnect: record?.taskList
|
deleteMany: record?.taskList.filter(
|
||||||
.filter(
|
|
||||||
(lhs) =>
|
(lhs) =>
|
||||||
!body.taskList.find(
|
!body.taskList.find(
|
||||||
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
|
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
.map((v) => ({
|
createMany: {
|
||||||
step_requestWorkId: {
|
data: body.taskList,
|
||||||
requestWorkId: v.requestWorkId,
|
skipDuplicates: true,
|
||||||
step: v.step,
|
|
||||||
},
|
},
|
||||||
})),
|
|
||||||
connect: body.taskList.map((v) => ({ step_requestWorkId: v })),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -345,13 +355,13 @@ export class TaskActionController extends Controller {
|
||||||
await tx.taskOrder.update({
|
await tx.taskOrder.update({
|
||||||
where: { id: taskId },
|
where: { id: taskId },
|
||||||
data: {
|
data: {
|
||||||
taskStatus: "InProgress",
|
taskOrderStatus: TaskOrderStatus.InProgress,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
await tx.requestWorkStepStatus.updateMany({
|
await tx.task.updateMany({
|
||||||
where: { taskOrderId: taskId },
|
where: { taskOrderId: taskId },
|
||||||
data: {
|
data: {
|
||||||
workStatus: "InProgress",
|
taskStatus: TaskStatus.InProgress,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
await tx.requestData.updateMany({
|
await tx.requestData.updateMany({
|
||||||
|
|
@ -359,7 +369,7 @@ export class TaskActionController extends Controller {
|
||||||
requestWork: {
|
requestWork: {
|
||||||
some: {
|
some: {
|
||||||
stepStatus: {
|
stepStatus: {
|
||||||
some: { taskOrderId: taskId },
|
some: { task: { some: { taskOrderId: taskId } } },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -378,7 +388,7 @@ export class TaskActionController extends Controller {
|
||||||
async completeTaskOrder(@Request() req: RequestWithUser, @Path() taskId: string) {}
|
async completeTaskOrder(@Request() req: RequestWithUser, @Path() taskId: string) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Route("api/v1/task-order/{taskId}")
|
@Route("api/v1/task/{taskId}")
|
||||||
@Tags("Task Order")
|
@Tags("Task Order")
|
||||||
export class TaskOrderAttachmentController extends Controller {
|
export class TaskOrderAttachmentController extends Controller {
|
||||||
private async checkPermission(user: RequestWithUser["user"], id: string) {
|
private async checkPermission(user: RequestWithUser["user"], id: string) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue