fix(c3): 扑空 not_met_reason 截断 50 + report 坐标 Decimal 转字符串
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
c00c4ee007
commit
5f060292c6
@ -68,7 +68,7 @@ describe('AbnormalService', () => {
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
expect(orderUpdate).not.toHaveBeenCalled();
|
expect(orderUpdate).not.toHaveBeenCalled();
|
||||||
expect(res).toEqual({ id: 'a1' });
|
expect(res).toEqual({ id: 'a1', visitLat: null, visitLng: null });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('report 扑空(not_met)→ 工单转 not_met + 写 record_abnormal(到访时间/定位/原因),不产生 ho_record', async () => {
|
it('report 扑空(not_met)→ 工单转 not_met + 写 record_abnormal(到访时间/定位/原因),不产生 ho_record', async () => {
|
||||||
@ -112,6 +112,55 @@ describe('AbnormalService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('report 扑空 reason 超 50 字 → not_met_reason 截断为 50,record_abnormal 保留全文', async () => {
|
||||||
|
const longReason = 'x'.repeat(80);
|
||||||
|
const { service, recordAbnormalCreate, orderUpdate } = makeService();
|
||||||
|
|
||||||
|
await runWithRequestContext(ctx, () =>
|
||||||
|
service.report({
|
||||||
|
abnormalType: 'not_met',
|
||||||
|
elderId: 'e1',
|
||||||
|
orderId: 'o1',
|
||||||
|
abnormalDesc: longReason,
|
||||||
|
visitTime: '2026-10-15T09:30:00',
|
||||||
|
visitLat: 25.01,
|
||||||
|
visitLng: 102.7,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(orderUpdate).toHaveBeenCalledWith({
|
||||||
|
where: { id: 'o1' },
|
||||||
|
data: expect.objectContaining({ notMetReason: 'x'.repeat(50) }),
|
||||||
|
});
|
||||||
|
expect(recordAbnormalCreate).toHaveBeenCalledWith({
|
||||||
|
data: expect.objectContaining({ abnormalDesc: longReason }),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('report 扑空返回 visitLat/visitLng 为字符串(Decimal 不泄漏)', async () => {
|
||||||
|
const recordAbnormalCreate = vi.fn().mockResolvedValue({
|
||||||
|
id: 'a1',
|
||||||
|
abnormalType: 'not_met',
|
||||||
|
visitLat: { toString: () => '25.010000' },
|
||||||
|
visitLng: { toString: () => '102.700000' },
|
||||||
|
});
|
||||||
|
const { service } = makeService({ recordAbnormalCreate });
|
||||||
|
|
||||||
|
const res = await runWithRequestContext(ctx, () =>
|
||||||
|
service.report({
|
||||||
|
abnormalType: 'not_met',
|
||||||
|
elderId: 'e1',
|
||||||
|
orderId: 'o1',
|
||||||
|
abnormalDesc: '老人不在家',
|
||||||
|
visitTime: '2026-10-15T09:30:00',
|
||||||
|
visitLat: 25.01,
|
||||||
|
visitLng: 102.7,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(res).toMatchObject({ id: 'a1', visitLat: '25.010000', visitLng: '102.700000' });
|
||||||
|
});
|
||||||
|
|
||||||
it('report 扑空缺定位 → 拒(3003),不写工单/异常', async () => {
|
it('report 扑空缺定位 → 拒(3003),不写工单/异常', async () => {
|
||||||
const { service, recordAbnormalCreate, orderUpdate } = makeService();
|
const { service, recordAbnormalCreate, orderUpdate } = makeService();
|
||||||
|
|
||||||
|
|||||||
@ -43,13 +43,14 @@ export class AbnormalService {
|
|||||||
where: { id: dto.orderId! },
|
where: { id: dto.orderId! },
|
||||||
data: {
|
data: {
|
||||||
orderStatus: 'not_met',
|
orderStatus: 'not_met',
|
||||||
notMetReason: dto.abnormalDesc ?? null,
|
// not_met_reason 为 VarChar(50),abnormalDesc 为 Text,须截断避免超长 500。
|
||||||
|
notMetReason: (dto.abnormalDesc ?? '').slice(0, 50),
|
||||||
notMetAt: toDateTime(dto.visitTime) ?? new Date(),
|
notMetAt: toDateTime(dto.visitTime) ?? new Date(),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.prisma.client.recordAbnormal.create({
|
const created = await this.prisma.client.recordAbnormal.create({
|
||||||
data: {
|
data: {
|
||||||
tenantCode,
|
tenantCode,
|
||||||
elderId: dto.elderId,
|
elderId: dto.elderId,
|
||||||
@ -68,6 +69,12 @@ export class AbnormalService {
|
|||||||
handleStatus: 'open',
|
handleStatus: 'open',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
// Prisma Decimal(visit_lat/visit_lng)转字符串,避免经 TransformInterceptor 泄漏为 {s,e,d}。
|
||||||
|
return {
|
||||||
|
...created,
|
||||||
|
visitLat: created.visitLat != null ? created.visitLat.toString() : null,
|
||||||
|
visitLng: created.visitLng != null ? created.visitLng.toString() : null,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 异常列表(后台 B4)。 */
|
/** 异常列表(后台 B4)。 */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user