wangzhibo
4 天以前 c19f1f7e21c93d1f13b4f44a8a615f65af577559
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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' },
    });
  }
}