feat(ops,store,partner): 用户权益列 + 门店合同多图上传
- admin 用户列表新增剩余/已用/累计好客权益金额三列(benefitCoupon groupBy 聚合,排除 VOID) - admin/partner 门店入驻合同支持多张照片与 PDF(CommonResource 多记录,复用 ENV 多图逻辑) - 新增 contract-urls.util 归一化工具,向后兼容旧 contractUrl 字段并标记 deprecated 需求1/2/3
This commit is contained in:
@@ -12,6 +12,7 @@ import { PrismaService } from '../../common/prisma/prisma.module';
|
||||
import { serializeBigInt } from '../../common/decorators/current-user.decorator';
|
||||
import { mapStoreCompat } from '../../common/compat/v31-compat';
|
||||
import { parseBigIntParam } from '../../common/parse-bigint';
|
||||
import { contractMediaType, normalizeContractUrls } from '../../common/store-media/contract-urls.util';
|
||||
import { AnalyticsService } from '../analytics/analytics.service';
|
||||
import { PartnerCityService } from '../city-scope/partner-city.service';
|
||||
import { AuthService } from '../iam/auth.service';
|
||||
@@ -377,11 +378,14 @@ export class StoreService {
|
||||
const city = await this.resolvePartnerCity(partnerAccountId, body.cityId);
|
||||
const coverUrl = body.coverUrl ? String(body.coverUrl).trim() : '';
|
||||
const envPhotoUrls = this.normalizeEnvPhotoUrls(body.envPhotoUrls);
|
||||
const contractUrl = body.contractUrl ? String(body.contractUrl).trim() : '';
|
||||
const contractUrls = normalizeContractUrls(
|
||||
body.contractUrls,
|
||||
body.contractUrl != null ? String(body.contractUrl) : null,
|
||||
);
|
||||
|
||||
if (!coverUrl) throw new BadRequestException('请上传门头照');
|
||||
if (envPhotoUrls.length < 3) throw new BadRequestException('请上传至少 3 张环境照片');
|
||||
if (!contractUrl) throw new BadRequestException('请上传签约合同');
|
||||
if (!contractUrls.length) throw new BadRequestException('请上传签约合同');
|
||||
|
||||
const bankAccountName = body.bankAccountName ? String(body.bankAccountName) : null;
|
||||
const bankAccountNo = body.bankAccountNo ? String(body.bankAccountNo) : null;
|
||||
@@ -486,16 +490,17 @@ export class StoreService {
|
||||
});
|
||||
}
|
||||
|
||||
if (contractUrl) {
|
||||
for (let i = 0; i < contractUrls.length; i++) {
|
||||
await this.prisma.commonResource.create({
|
||||
data: {
|
||||
ownerType: 'STORE',
|
||||
ownerId: store.id,
|
||||
bizType: 'CONTRACT',
|
||||
mediaType: 'FILE',
|
||||
mediaType: contractMediaType(contractUrls[i]),
|
||||
ossBucket,
|
||||
ossKey: contractUrl,
|
||||
url: contractUrl,
|
||||
ossKey: contractUrls[i],
|
||||
url: contractUrls[i],
|
||||
sortOrder: i,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user