import { Provide } from '@midwayjs/core';
|
import { BaseService, CoolCommException } from '@cool-midway/core';
|
import { InjectEntityModel } from '@midwayjs/typeorm';
|
import { Repository } from 'typeorm';
|
import { BasicdataSorterEntity } from '../entity/sorter';
|
import { BasicdataSiteEntity } from '../entity/site';
|
import { BasicdataWastetypeEntity } from '../entity/wastetype';
|
import { BasicdataBuyerEntity } from '../entity/buyer';
|
|
/**
|
* 分拣员下拉选项
|
*/
|
@Provide()
|
export class BasicdataOptionsService extends BaseService {
|
@InjectEntityModel(BasicdataSorterEntity)
|
basicdataSorterEntity: Repository<BasicdataSorterEntity>;
|
|
@InjectEntityModel(BasicdataSiteEntity)
|
basicdataSiteEntity: Repository<BasicdataSiteEntity>;
|
|
@InjectEntityModel(BasicdataWastetypeEntity)
|
basicdataWastetypeEntity: Repository<BasicdataWastetypeEntity>;
|
|
@InjectEntityModel(BasicdataBuyerEntity)
|
basicdataBuyerEntity: Repository<BasicdataBuyerEntity>;
|
|
async getSorter(sorterId: string) {
|
const sorter = await this.basicdataSorterEntity.findOneBy({
|
businessId: String(sorterId || '').trim(),
|
});
|
if (!sorter || sorter.status !== 0) {
|
throw new CoolCommException('分拣员账号不可用');
|
}
|
return sorter;
|
}
|
|
async sites(sorterId: string, siteType?: string) {
|
const sorter = await this.getSorter(sorterId);
|
const find = this.basicdataSiteEntity
|
.createQueryBuilder('a')
|
.where('a.status = :st', { st: 1 });
|
if (siteType) {
|
find.andWhere('a.siteType = :siteType', { siteType });
|
}
|
if (sorter.departmentId) {
|
find.andWhere('CAST(a.departmentId AS CHAR) = :deptId', {
|
deptId: String(sorter.departmentId),
|
});
|
}
|
find.orderBy('a.id', 'ASC');
|
const list = await find.getMany();
|
// 收集点为可选项:本部门没有时返回全部收集点,避免下拉空白
|
if (!list.length && siteType === '收集点') {
|
return this.basicdataSiteEntity.find({
|
where: { status: 1, siteType: '收集点' },
|
order: { id: 'ASC' },
|
});
|
}
|
return list;
|
}
|
|
async wastetypes(sorterId: string) {
|
await this.getSorter(sorterId);
|
const list = await this.basicdataWastetypeEntity.find({
|
where: { status: 1, isRecyclable: 1 },
|
order: { id: 'ASC' },
|
});
|
if (list.length) {
|
return list;
|
}
|
return this.basicdataWastetypeEntity.find({
|
where: { status: 1 },
|
order: { id: 'ASC' },
|
});
|
}
|
|
async buyers(sorterId: string) {
|
const sorter = await this.getSorter(sorterId);
|
const find = this.basicdataBuyerEntity.createQueryBuilder('a');
|
if (sorter.departmentId) {
|
find.where(
|
'(CAST(a.departmentId AS CHAR) = :deptId OR a.departmentId IS NULL)',
|
{ deptId: String(sorter.departmentId) }
|
);
|
}
|
find.orderBy('a.id', 'ASC');
|
const list = await find.getMany();
|
if (list.length) {
|
return list;
|
}
|
return this.basicdataBuyerEntity.find({
|
order: { id: 'ASC' },
|
});
|
}
|
}
|