feat(fulfillment): 同城运费与路由修复,配送单展示商品用户地址

同城 MANUAL/ZZXFX 按小飞侠价规计费,路由查询回退仓配凭证;HQ 配送单补商品、用户和收货地址。门店核销回跳与小程序核销码一并带上。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-25 21:12:36 +08:00
parent 52a7d3789d
commit cc0c0a6ef8
44 changed files with 1029 additions and 218 deletions
@@ -14,6 +14,7 @@ import {
allocateBenefitCoupons,
} from '@dukang/domain';
import {
buildShopRedeemLandingUrl,
ClientApp,
REDEEM_PENDING_SNAPSHOT_TTL_SECONDS,
REDEEM_PHONE_SESSION_TTL_SECONDS,
@@ -24,6 +25,7 @@ import {
import { Prisma } from '@prisma/client';
import { PrismaService } from '../../common/prisma/prisma.module';
import { RedisService } from '../../common/redis/redis.service';
import { SystemConfigService } from '../../common/system-config/system-config.service';
import { serializeBigInt } from '../../common/decorators/current-user.decorator';
import { AnalyticsService } from '../analytics/analytics.service';
import { SettlementService } from '../settlement/settlement.service';
@@ -84,6 +86,7 @@ export class RedeemService {
private readonly authService: AuthService,
private readonly payRedeemAnomaly: PayRedeemAnomalyService,
private readonly wecomPush: WecomMessagePushService,
private readonly systemConfig: SystemConfigService,
) {}
private maskPhoneForStore(phone: string) {
@@ -576,7 +579,13 @@ export class RedeemService {
},
});
return { token, expireAt, amount: body.amount, boundStoreId: body.storeId ?? null };
return {
token,
expireAt,
amount: body.amount,
boundStoreId: body.storeId ?? null,
landingUrl: buildShopRedeemLandingUrl(this.systemConfig.getAppConfig().shopH5Url, token),
};
}
async getToken(token: string) {