333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//#region import
import BaseApiService from "../baseApiService";
import { ResultInfo } from "../../public/commonInterface";
import moment = require("moment");
// import { In } from "typeorm";
import { TMSWayBill } from "../../entity/express/tms/tmsWayBill";
import { ExpressEMSOrderList } from "../../entity/express/ems/expressEMSOrderList";
import { ExpressEMSOrder } from "../../entity/express/ems/expressEMSOrder";
// import moment = require("moment");
 
//#endregion
 
/**
 * 北京EMS接口帮助类
 */
export default class emsHelper extends BaseApiService {
  //#region 北京EMS通过宏远获取快递单号
  public async pushOrderByHY(orderId, typeID): Promise<ResultInfo> {
    let { ctx } = this;
    let info: ResultInfo = {
      result: false,
      msg: undefined
    };
    try {
      let expressList = await this.dbRead
        .createQueryBuilder(ExpressEMSOrderList, "t")
        .where(`eMSOrder_Id=:eMSOrder_Id`, {
          eMSOrder_Id: orderId
        })
        .getMany();
      var hYOrderList = [];
      for (let item of expressList) {
        if (item.name && item.name.length > 20) {
          item.name = item.name.substring(0, 20);
        }
        var hYOrderListInfo = {
          name: item.name,
          amount: item.amount,
          count: item.count,
          weight: item.weight
        };
        hYOrderList.push(hYOrderListInfo);
      }
      let orderInfo = await this.dbRead.findOne(ExpressEMSOrder, {
        eMSOrder_Id: orderId
      });
      if (!orderInfo.pushNum) {
        orderInfo.pushNum = 1;
      } else {
        orderInfo.pushNum = orderInfo.pushNum + 1;
      }
      await this.dbWrite.update(ExpressEMSOrder, orderInfo.eMSOrder_Id, {
        pushNum: orderInfo.pushNum
      });
 
      if (orderInfo.pushNum <= 5 || typeID == 1) {
        var hYOrderInfo = {
          logisticProviderID: "EMS",
          ordernoOid: orderInfo.orderCode,
          shipper: orderInfo.j_contact,
          shippercity: orderInfo.j_city,
          shippercountry: "142",
          shipperaddress: orderInfo.j_address,
          shippertelephone: orderInfo.j_mobile,
          consignee: orderInfo.d_contact,
          consigneeprovince: orderInfo.d_province,
          consigneecity: orderInfo.d_city,
          consigneedistrict: orderInfo.d_county,
          consigneedeliver: orderInfo.d_address,
          consigneecountry: "142",
          consigneestreet: orderInfo.d_address,
          consigneetelephone: orderInfo.d_mobile,
          paymethod: "1",
          cargototalweight: orderInfo.cargo_total_weight,
          cargo: hYOrderList
        };
        var hyInfo = null;
        hyInfo = await ctx.service.express.hongyuanHelper.pushOrder(hYOrderInfo);
        ctx.logger.info(
          "北京EMS推送:单号" +
            orderInfo.orderCode +
            "/结果:" +
            hyInfo.msg +
            "/时间:" +
            moment(new Date()).format("YYYY-MM-DD HH:mm:ss")
        );
        if (hyInfo.result) {
          await this.dbWrite
            .createQueryBuilder(ExpressEMSOrder, "t")
            .update()
            .set({
              mailno: hyInfo.data.logisticsno,
              interfaceStatusID: 3,
              interfaceStatusText: "宏远推送成功",
              destcode: hyInfo.data.shortaddress
              // ,bigPen: hyInfo.data.shortaddress
            })
            .where(`eMSOrder_Id=:eMSOrder_Id`, {
              eMSOrder_Id: orderInfo.eMSOrder_Id
            })
            .execute();
          await this.dbWrite
            .createQueryBuilder(TMSWayBill, "t")
            .update()
            .set({
              expressCode: hyInfo.data.logisticsno,
              bigPen: hyInfo.data.shortaddress
            })
            .where(`wayBill_Id=:wayBill_Id and expressCode is null  and expressCorpType='3'`, {
              wayBill_Id: orderInfo.order_Id
            })
            .execute();
          let where = "wayBill_Id=:wayBill_Id";
          var tmsWayBillInfo = await this.dbRead
            .createQueryBuilder(TMSWayBill, "t")
            .where(where, {
              wayBill_Id: orderInfo.order_Id
            })
            .getOne();
          if (tmsWayBillInfo) {
            await ctx.service.tms.wayBillHelper.setStatusHistory(
              tmsWayBillInfo,
              "获取快递号",
              "北京EMS单号" + hyInfo.data.logisticsno
            );
          }
        } else {
          await this.dbWrite
            .createQueryBuilder(ExpressEMSOrder, "t")
            .update()
            .set({
              remark: hyInfo.msg
            })
            .where(`eMSOrder_Id=:eMSOrder_Id`, {
              eMSOrder_Id: orderInfo.eMSOrder_Id
            })
            .execute();
        }
        info.msg = hyInfo.msg;
        info.result = hyInfo.result;
      } else {
        info.result = false;
        info.msg = "推送失败次数超过5次,单据已失效请重新生成。";
      }
    } catch (error) {
      info.msg = error.message;
      info.result = false;
    }
    return info;
  }
 
  //#endregion
}