From c19f1f7e21c93d1f13b4f44a8a615f65af577559 Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期日, 16 八月 2026 15:10:24 +0800
Subject: [PATCH] 添加 android 端接口

---
 src/modules/operation/service/wastesale.ts |   93 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 90 insertions(+), 3 deletions(-)

diff --git a/src/modules/operation/service/wastesale.ts b/src/modules/operation/service/wastesale.ts
index 70b0f4c..8e6cd6f 100644
--- a/src/modules/operation/service/wastesale.ts
+++ b/src/modules/operation/service/wastesale.ts
@@ -1,8 +1,12 @@
 import { Provide } from '@midwayjs/core';
-import { BaseService } from '@cool-midway/core';
+import { BaseService, CoolCommException } from '@cool-midway/core';
 import { InjectEntityModel } from '@midwayjs/typeorm';
 import { Repository } from 'typeorm';
 import { OperationWastesaleEntity } from '../entity/wastesale';
+import { BasicdataSorterEntity } from '../../basicdata/entity/sorter';
+import { BasicdataWastetypeEntity } from '../../basicdata/entity/wastetype';
+import { BasicdataBuyerEntity } from '../../basicdata/entity/buyer';
+import { BasicdataSiteEntity } from '../../basicdata/entity/site';
 
 /**
  * 鍙洖鏀剁墿鏀剁泭鏈嶅姟
@@ -12,14 +16,97 @@
   @InjectEntityModel(OperationWastesaleEntity)
   operationWastesaleEntity: Repository<OperationWastesaleEntity>;
 
+  @InjectEntityModel(BasicdataSorterEntity)
+  basicdataSorterEntity: Repository<BasicdataSorterEntity>;
+
+  @InjectEntityModel(BasicdataWastetypeEntity)
+  basicdataWastetypeEntity: Repository<BasicdataWastetypeEntity>;
+
+  @InjectEntityModel(BasicdataBuyerEntity)
+  basicdataBuyerEntity: Repository<BasicdataBuyerEntity>;
+
+  @InjectEntityModel(BasicdataSiteEntity)
+  basicdataSiteEntity: Repository<BasicdataSiteEntity>;
+
   /**
    * 鍐欏叆鍓嶈绠楁�讳环
    */
   async modifyBefore(data: any, type: 'add' | 'update') {
     if (type === 'add' || type === 'update') {
       if (data.weight !== undefined && data.unitPrice !== undefined) {
-        data.totalPrice = Number((Number(data.weight) * Number(data.unitPrice)).toFixed(2));
+        data.totalPrice = Number(
+          (Number(data.weight) * Number(data.unitPrice)).toFixed(2)
+        );
       }
     }
   }
-}
\ No newline at end of file
+
+  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 appAdd(param: any) {
+    const sorter = await this.getSorter(param.sorterId);
+    const weight = Number(param.weight);
+    let unitPrice = Number(param.unitPrice);
+    if (!weight || weight <= 0) {
+      throw new CoolCommException('璇峰~鍐欓噸閲�');
+    }
+    if (!param.wasteCode) {
+      throw new CoolCommException('璇烽�夋嫨鍨冨溇绉嶇被');
+    }
+    if (!param.buyerCode) {
+      throw new CoolCommException('璇烽�夋嫨鏀惰喘鏂�');
+    }
+    if (!unitPrice) {
+      const waste = await this.basicdataWastetypeEntity.findOneBy({
+        code: param.wasteCode,
+      });
+      unitPrice = Number(waste?.price || 0);
+    }
+    const data: any = {
+      departmentId: param.departmentId || sorter.departmentId,
+      siteId: param.siteId,
+      wasteCode: param.wasteCode,
+      dateTime: param.dateTime || new Date(),
+      weight,
+      unitPrice,
+      totalPrice: Number((weight * unitPrice).toFixed(2)),
+      handlerId: sorter.businessId,
+      buyerCode: param.buyerCode,
+    };
+    await this.operationWastesaleEntity.save(data);
+    return data;
+  }
+
+  /**
+   * 鏌ョ湅褰撳墠鍒嗘嫞鍛樼殑閿�鍞褰�
+   */
+  async appPage(query: any) {
+    const { sorterId, page = 1, size = 10 } = query || {};
+    const sorter = await this.getSorter(sorterId);
+    const find = this.operationWastesaleEntity
+      .createQueryBuilder('a')
+      .select([
+        'a.*',
+        'c.businessName AS siteName',
+        'd.name AS wasteName',
+        'f.name AS buyerName',
+      ])
+      .leftJoin(BasicdataSiteEntity, 'c', 'a.siteId = c.businessId')
+      .leftJoin(BasicdataWastetypeEntity, 'd', 'a.wasteCode = d.code')
+      .leftJoin(BasicdataBuyerEntity, 'f', 'a.buyerCode = f.code')
+      .where('a.handlerId = :hid', { hid: sorter.businessId })
+      .orderBy('a.dateTime', 'DESC');
+    return this.entityRenderPage(find, { ...query, page, size }, false);
+  }
+}

--
Gitblit v1.9.1