xuhy
2026-01-27 2d2a8ce78eff4ff88dc146e26f2722d183445823
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package com.ruoyi.web.controller.yuncang.api.trade;
 
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.model.TErpProcurement;
import com.ruoyi.system.model.TErpProcurementGoods;
import com.ruoyi.web.controller.yuncang.utils.WdtClient;
import lombok.extern.slf4j.Slf4j;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Slf4j
public class TradePush {
 
    /**
     * 推送erp订单
     * @param sid     卖家账号,接口请求的公共参数sid
     * @param appkey     接口账号,接口请求的公共参数appkey
     * @param appsecret 接口秘钥,接口请求的参数appsecret ,用于计算签名
     * @param url     接口地址,接口请求的公共参数url
     * @param erpProcurement 采购单
     * @param erpProcurementGoods 采购单商品
     * @param trade_status 平台订单状态较多且涉及变更,详情介绍单击这里
     * @param clinicName 采购单所属诊所名称
     * @param status 平台子订单状态,子订单状态可以和主订单不一样,比如其中一个子订单退款完成,其状态是80,但主订单仍然是待发货,可选值同trade_status
     * @param refund_status 0:无退款,1:取消退款,2:已申请退款,3:等待退货,4:等待收货,5:退款成功。本字段在售前退款的时候,根据不同的场景填写不同的值,eg:申请退款值为2,取消退款值为1……
     * @param shop_no     代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置,查看路径ERP→设置→基本设置→店铺→店铺列表),用于创建指定店铺单据信息,测试环境店铺编号信息同接口账号。ERP内shop_no对应的“店铺平台”必须为“自有/其它”。正式环境店铺创建成功后ERP会自动授权,如果自动授权失败,在ERP店铺界面(路径ERP→设置→基本设置→店铺→店铺列表)选中授权失败的店铺,点击店铺界面提供的店铺授权按钮重新授权。
     */
    public static JSONObject tradePush(String sid, String appkey, String appsecret, String url,
                                 TErpProcurement erpProcurement, List<TErpProcurementGoods> erpProcurementGoods,
                                 Integer trade_status,String clinicName,Integer status,Integer refund_status,String shop_no) {
        WdtClient client = new WdtClient(sid, appkey, appsecret, url);
        //测试环境sid、appkey、密钥请到旺店通开放平台-自助对接-申请测试环境内查看,测试环境url=https://sandbox.wangdian.cn/openapi2/
        //调用正式环境时请将sid、appkey、appsecret切换为实际参数,参数在旺店通开放平台-自助对接-应用管理内应用状态为已上线的应用中查看,调用正式环境注意切换正式环境url=https://api.wangdian.cn/openapi2/
 
        List<Map<String, Object>> trade_list = new ArrayList<Map<String, Object>>();
        List<Map<String, Object>> order_list = new ArrayList<Map<String, Object>>();
        for (TErpProcurementGoods erpProcurementGood : erpProcurementGoods) {
            Map<String, Object> order_1 = new HashMap<String, Object>();
            order_1.put("oid", erpProcurementGood.getId());
            order_1.put("num", erpProcurementGood.getPurchaseCount());
            order_1.put("price", erpProcurementGood.getPurchasePrice());
            order_1.put("status", status);
            order_1.put("refund_status", refund_status);
            order_1.put("goods_id", "18344");
            order_1.put("spec_id", "18656");
            order_1.put("goods_no", "ghs2");
            order_1.put("spec_no", "ghs201812070212123");
            order_1.put("goods_name", erpProcurementGood.getGoodsName());
            order_1.put("discount", 0);        //子订单折扣
            order_1.put("adjust_amount", 0);    //手工调整,特别注意:正的表示加价,负的表示减价
            order_1.put("share_discount", 0);
            order_list.add(order_1);
        }
 
        Map<String, Object> trade_1 = new HashMap<String, Object>();
        trade_1.put("tid", erpProcurement.getProcurementCode());
        trade_1.put("trade_status", trade_status);
        trade_1.put("pay_status", "2");
        trade_1.put("delivery_term", 1);
        trade_1.put("trade_time", DateUtils.localDateTimeToDate(erpProcurement.getCreateTime()));
        trade_1.put("pay_time", DateUtils.localDateTimeToDate(erpProcurement.getPayTime()));
        trade_1.put("buyer_nick", clinicName);
        trade_1.put("receiver_name", "123");
        trade_1.put("receiver_province", "河南省");
        trade_1.put("receiver_city", "周口市");
        trade_1.put("receiver_district", "川汇区");
        trade_1.put("receiver_address", "123");
        trade_1.put("receiver_mobile", "26283920011");
//        trade_1.put("logistics_type", 4);
        trade_1.put("post_amount", 0);
        trade_1.put("cod_amount", 0);
        trade_1.put("ext_cod_fee", 0);
        trade_1.put("other_amount", 0);
        trade_1.put("paid", erpProcurement.getPayMoney());
        trade_1.put("order_list", order_list);
        trade_list.add(trade_1);
 
        String trade_list_json = JSON.toJSONString(trade_list);
 
        Map<String, String> params = new HashMap<String, String>();
        params.put("shop_no", shop_no);
        params.put("trade_list", trade_list_json);
        try {
            String response = client.execute("trade_push.php", params);
            log.info("推送erp订单结果:{}", response);
            JSONObject jsonObject = JSONObject.parseObject(response);
            if (jsonObject.getIntValue("code") == 0) {
                log.info("推送erp订单成功");
                return jsonObject;
            } else {
                log.info("推送erp订单失败");
                throw new ServiceException(jsonObject.getString("message"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args) {
        WdtClient client = new WdtClient("传入sid", "传入appkey", "传入appsecret", "传入url");
        //测试环境sid、appkey、密钥请到旺店通开放平台-自助对接-申请测试环境内查看,测试环境url=https://sandbox.wangdian.cn/openapi2/
        //调用正式环境时请将sid、appkey、appsecret切换为实际参数,参数在旺店通开放平台-自助对接-应用管理内应用状态为已上线的应用中查看,调用正式环境注意切换正式环境url=https://api.wangdian.cn/openapi2/
 
        List<Map<String, Object>> trade_list = new ArrayList<Map<String, Object>>();
        List<Map<String, Object>> order_list = new ArrayList<Map<String, Object>>();
 
        Map<String, Object> order_1 = new HashMap<String, Object>();
        order_1.put("oid", "ghsTest121101");
        order_1.put("num", 1);
        order_1.put("price", 12);
        order_1.put("status", 30);
        order_1.put("refund_status", 0);
        order_1.put("goods_id", "18344");
        order_1.put("spec_id", "18656");
        order_1.put("goods_no", "ghs2");
        order_1.put("spec_no", "ghs201812070212123");
        order_1.put("goods_name", "123");
        order_1.put("discount", 0);        //子订单折扣
        order_1.put("adjust_amount", 0);    //手工调整,特别注意:正的表示加价,负的表示减价
        order_1.put("share_discount", 0);
 
 
        order_list.add(order_1);
 
        Map<String, Object> trade_1 = new HashMap<String, Object>();
        trade_1.put("tid", "AT201812110002");
        trade_1.put("trade_status", 20);
        trade_1.put("pay_status", "1");
        trade_1.put("delivery_term", 2);
        trade_1.put("trade_time", "2018-12-11 14:21:00");
        trade_1.put("buyer_nick", "三国杀");
        trade_1.put("receiver_province", "河南省");
        trade_1.put("receiver_city", "周口市");
        trade_1.put("receiver_district", "川汇区");
        trade_1.put("receiver_mobile", "26283920011");
        trade_1.put("receiver_name", "123");
        trade_1.put("receiver_address", "123");
        trade_1.put("logistics_type", 4);
        trade_1.put("post_amount", 12);
        trade_1.put("cod_amount", 2);
        trade_1.put("ext_cod_fee", 0);
        trade_1.put("other_amount", 1);
        trade_1.put("paid", 0);
        trade_1.put("order_list", order_list);
 
 
        trade_list.add(trade_1);
 
        String trade_list_json = JSON.toJSONString(trade_list);
        //System.out.println(purchase_info_json);
 
        Map<String, String> params = new HashMap<String, String>();
        params.put("shop_no", "ghs2test");
        params.put("trade_list", trade_list_json);
        try {
            String response = client.execute("trade_push.php", params);
            System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
}