import { Init, Provide } from '@midwayjs/core';
|
import { BaseService } from '@cool-midway/core';
|
import { InjectEntityModel } from '@midwayjs/typeorm';
|
import { Equal, In, Repository } from 'typeorm';
|
import { GoodsSpecEntity } from '../entity/spec';
|
|
/**
|
* 规格
|
*/
|
@Provide()
|
export class GoodsSpecService extends BaseService {
|
@InjectEntityModel(GoodsSpecEntity)
|
goodsSpecEntity: Repository<GoodsSpecEntity>;
|
|
@Init()
|
async init() {
|
await super.init();
|
this.setEntity(this.goodsSpecEntity);
|
}
|
|
/**
|
* 保持规格
|
* @param goodsId
|
* @param specs
|
*/
|
async save(goodsId: number, specs: GoodsSpecEntity[]) {
|
// 先删除原来的规格
|
await this.goodsSpecEntity.delete({ goodsId });
|
// 保存新的规格
|
await this.goodsSpecEntity.save(
|
specs.map(item => {
|
item.goodsId = goodsId;
|
return item;
|
})
|
);
|
}
|
|
/**
|
* 通过商品ID获取规格
|
* @param goodsId
|
*/
|
async removeByGoodsId(goodsIds: number[]) {
|
await this.goodsSpecEntity.delete({ goodsId: In(goodsIds) });
|
}
|
|
/**
|
* 通过商品ID获取规格
|
* @param goodsId
|
* @returns
|
*/
|
async getByGoodsId(goodsId: number) {
|
return await this.goodsSpecEntity.findBy({ goodsId: Equal(goodsId) });
|
}
|
|
/**
|
* 更新库存
|
* @param specId 规格ID
|
* @param count 数量
|
*/
|
async updateStock(specId: number, count: number) {
|
await this.goodsSpecEntity.increment({ id: specId }, 'stock', count);
|
|
// 更新后检查库存,如果小于0则设置为0
|
const spec = await this.goodsSpecEntity.findOneBy({ id: Equal(specId) });
|
if (spec && spec.stock < 0) {
|
await this.goodsSpecEntity.update(spec.id, {
|
stock: 0,
|
});
|
}
|
}
|
}
|