|
@@ -0,0 +1,772 @@
|
|
|
|
|
+package org.dromara.external.controller.tongji;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import cn.hutool.http.HttpRequest;
|
|
|
|
|
+import cn.hutool.http.HttpResponse;
|
|
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
|
|
+import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.dromara.common.core.domain.zhongche.aftersale.bo.*;
|
|
|
|
|
+import org.dromara.common.core.domain.zhongche.aftersale.vo.*;
|
|
|
|
|
+import org.dromara.common.core.domain.zhongche.vo.OrderDetailVo;
|
|
|
|
|
+import org.dromara.common.core.domain.zhongche.vo.PrepareOrderDetailRespVo;
|
|
|
|
|
+import org.dromara.common.core.exception.api.ZhongcheException;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.ZCR;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.bo.*;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.invoice.bo.*;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.invoice.vo.InvoiceApplyDetailVo;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.invoice.vo.InvoiceApplyOrdersVo;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.invoice.vo.InvoiceApplyWaitlistVo;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.settlement.bo.*;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.settlement.vo.SettlementApplyOrdersVo;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.settlement.vo.SettlementDetailVo;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.settlement.vo.SettlementPaymentDetailVo;
|
|
|
|
|
+import org.dromara.external.api.zhongche.domain.vo.*;
|
|
|
|
|
+import org.dromara.external.util.SM2SignatureUtils;
|
|
|
|
|
+import org.dromara.external.util.SignParamUtils;
|
|
|
|
|
+import org.dromara.external.util.ZCApiUtils;
|
|
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
+
|
|
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 同济拉取接口
|
|
|
|
|
+ * 时间:2026/1/5,19:03
|
|
|
|
|
+ */
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+@Validated
|
|
|
|
|
+@RequiredArgsConstructor
|
|
|
|
|
+@RestController
|
|
|
|
|
+@RequestMapping("/tongji/api")
|
|
|
|
|
+public class TongJiPullController {
|
|
|
|
|
+
|
|
|
|
|
+ //正式环境
|
|
|
|
|
+ // 同济地区查询接口地址(替换为真实域名)
|
|
|
|
|
+ private static final String AREA_QUERY_URL = "https://supply.crrcgo.cc/mallapi";
|
|
|
|
|
+ // 同济提供的配置(替换为真实值)
|
|
|
|
|
+ private static final String CLIENT_ID = "KFZnKGiDsJ7";
|
|
|
|
|
+ private static final String PRIVATE_KEY = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgQu0H97EPqkgz1YS5LkzZNmkG3mS5Er8rJ2LSoJtuOlGgCgYIKoEcz1UBgi2hRANCAARP6NYwTHpW2QTL8A2f2hpgunEpDVkJBhErBQPLqNS/Si5Q+9I9wUpCYdk1EvB5Hw6yzkE4bYk5IZM1j+/SnNFn"; // 电商平台私钥
|
|
|
|
|
+ private static final String ZC_PUBLIC_KEY = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE9ITEKJdH9o1K9AeQYY7zNMo/q5/cdce+9jbawURTPEpBKAx4VkB+lRkb5e5YL+Be4pPM464rPvLyfqGNJvL6uQ=="; // 同济公钥
|
|
|
|
|
+ //测试环境
|
|
|
|
|
+ // 同济地区查询接口地址(替换为真实域名)
|
|
|
|
|
+// private static final String AREA_QUERY_URL = "https://supply-test.crrcgo.cc/mallapi/";
|
|
|
|
|
+// // 同济提供的配置(替换为真实值)
|
|
|
|
|
+// private static final String CLIENT_ID = "KFZAVuIyC56";
|
|
|
|
|
+// private static final String PRIVATE_KEY = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgpQdXwMi21Mg1FhWad2AQLOwfNiDHgwhootau0YerQbagCgYIKoEcz1UBgi2hRANCAATVjJs6XRAMTZ72G6aWbgCAjfAnW0j5R9VFnHySTiF8+1mOisc3xOOr9w/Tu3hixzL5H2gVyLzHDRWkFtyeVqrX"; // 电商平台私钥
|
|
|
|
|
+// private static final String ZC_PUBLIC_KEY = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE1YybOl0QDE2e9humlm4AgI3wJ1tI+UfVRZx8kk4hfPtZjorHN8Tjq/cP07t4Yscy+R9oFci8xw0VpBbcnlaq1w=="; // 同济公钥
|
|
|
|
|
+ //企采公钥
|
|
|
|
|
+ private static final String VERSION = "1.0.0";
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //5 同济电子商城提供服务
|
|
|
|
|
+ //5.1 基础数据服务
|
|
|
|
|
+
|
|
|
|
|
+ //5.1.1 地区查询
|
|
|
|
|
+ @PostMapping("/area/query")
|
|
|
|
|
+ public AreaVo areaQuery(@RequestBody AreaQueryBo bo) {
|
|
|
|
|
+ // 1. 校验业务请求参数(自身先校验,避免无效调用电商平台)
|
|
|
|
|
+ //1 省级,2市级,3县级, 4区级
|
|
|
|
|
+ //父级地址id 当查询省级时填0
|
|
|
|
|
+ if (bo.getLevel() == null || !List.of(1, 2, 3, 4).contains(bo.getLevel())) {
|
|
|
|
|
+ throw new RuntimeException("级次(level)必填,且仅支持1/2/3/4");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StrUtil.isBlank(bo.getPid())) {
|
|
|
|
|
+ throw new RuntimeException("父级地址id(pid)不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ //获取response.body
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/area/query", bo);
|
|
|
|
|
+ // 4. 复用工具类解析响应
|
|
|
|
|
+ return parseZcResponse(responseDto, AreaVo.class);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private Boolean verifyResponseSign(ZCR responseDto) {
|
|
|
|
|
+ // 1. 空值防护
|
|
|
|
|
+ if (responseDto == null || responseDto.getSign() == null || responseDto.getSign().trim().isEmpty()) {
|
|
|
|
|
+ log.warn("通用签名校验 - 电商平台响应签名为空");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 2. 生成响应签名原文(复用 SignParamUtils.getSignContent,剔除 sign 字段)
|
|
|
|
|
+ String signContent = SignParamUtils.getSignContent(responseDto);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. SM2 验签(复用 SM2SignatureUtils.verify,传入电商平台公钥)
|
|
|
|
|
+ return SM2SignatureUtils.verify(
|
|
|
|
|
+ signContent,
|
|
|
|
|
+ responseDto.getSign(),
|
|
|
|
|
+ ZC_PUBLIC_KEY
|
|
|
|
|
+ );
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("通用签名校验 - 校验响应签名异常", e);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private <B> ZCR doZcPost(String apiPath, B bo) {
|
|
|
|
|
+ // 1.BO → JSON
|
|
|
|
|
+ String bizJson;
|
|
|
|
|
+ try {
|
|
|
|
|
+ bizJson = ZCApiUtils.objectToJson(bo);
|
|
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
|
|
+ return ZCR.fail("5000", "业务参数转换失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. JSON→ Base64
|
|
|
|
|
+ String dataBase64;
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 注意:你的 ZCApiUtils.base64Encode 内部用 getBytes(),默认是系统编码,补充 UTF-8 编码保证一致性
|
|
|
|
|
+ dataBase64 = ZCApiUtils.base64Encode(bizJson);
|
|
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
|
|
+ log.error("通用请求 - 业务 JSON Base64 编码失败", e);
|
|
|
|
|
+ return ZCR.fail("5000", "业务参数编码失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //3. 构建 ZCTokenBo 请求体
|
|
|
|
|
+ ZCTokenBo zcTokenBo = getZcTokenBo(dataBase64);
|
|
|
|
|
+ // 4. 生成请求签名
|
|
|
|
|
+ String requestSign;
|
|
|
|
|
+ try {
|
|
|
|
|
+ requestSign = SignParamUtils.generateRequestSign(zcTokenBo, PRIVATE_KEY);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("通用请求 - 生成请求签名失败", e);
|
|
|
|
|
+ return ZCR.fail("5000", "生成请求签名失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ zcTokenBo.setSign(requestSign);
|
|
|
|
|
+ // 5. ZCTokenBo → JSON 字符串
|
|
|
|
|
+ String requestJson;
|
|
|
|
|
+ try {
|
|
|
|
|
+ requestJson = ZCApiUtils.objectToJson(zcTokenBo);
|
|
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
|
|
+ log.error("通用请求 - ZCTokenBo 转换 JSON 失败", e);
|
|
|
|
|
+ return ZCR.fail("5000", "请求体转换失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 6. 发送 HTTP POST 请求(保持 hutool HTTP 工具,保证稳定性)
|
|
|
|
|
+ String fullUrl = AREA_QUERY_URL + apiPath;
|
|
|
|
|
+ HttpResponse httpResponse = HttpRequest
|
|
|
|
|
+ .post(fullUrl)
|
|
|
|
|
+ .charset(StandardCharsets.UTF_8)
|
|
|
|
|
+ .contentType("application/json")
|
|
|
|
|
+ .body(requestJson)
|
|
|
|
|
+ .timeout(60000)
|
|
|
|
|
+ .execute();
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 校验 HTTP 响应状态
|
|
|
|
|
+ if (!httpResponse.isOk()) {
|
|
|
|
|
+ log.error("通用请求 - 电商平台接口调用失败,接口路径:{},HTTP 状态码:{}", apiPath, httpResponse.getStatus());
|
|
|
|
|
+ return ZCR.fail("5000", "电商平台接口调用失败,HTTP 响应异常");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 响应体 → ZCR(复用 ZCApiUtils 转换 JSON)
|
|
|
|
|
+ String responseBody = httpResponse.body();
|
|
|
|
|
+ ZCR responseDto;
|
|
|
|
|
+ try {
|
|
|
|
|
+ responseDto = ZCApiUtils.jsonToObject(responseBody, ZCR.class);
|
|
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
|
|
+ log.error("通用请求 - 响应体转换 ZCR 失败", e);
|
|
|
|
|
+ return ZCR.fail("5000", "响应体解析失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 9. 响应码校验
|
|
|
|
|
+ if (!"0".equals(responseDto.getRespCode())) {
|
|
|
|
|
+ return ZCR.fail(responseDto.getRespCode(), responseDto.getRespMsg());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 10. 响应签名校验(同济强要求)
|
|
|
|
|
+ if (!verifyResponseSign(responseDto)) {
|
|
|
|
|
+ log.error("通用请求 - 响应签名校验失败,apiPath={}", apiPath);
|
|
|
|
|
+ return ZCR.fail("5001", "响应签名验证失败");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return responseDto;
|
|
|
|
|
+ }
|
|
|
|
|
+ private ZCTokenBo getZcTokenBo(String data) {
|
|
|
|
|
+ ZCTokenBo zcTokenBo = new ZCTokenBo();
|
|
|
|
|
+ zcTokenBo.setVersion(VERSION);
|
|
|
|
|
+ zcTokenBo.setTimestamp(DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss"));
|
|
|
|
|
+ zcTokenBo.setClientId(CLIENT_ID);
|
|
|
|
|
+ zcTokenBo.setData(data);
|
|
|
|
|
+ zcTokenBo.setSign(null);
|
|
|
|
|
+ return zcTokenBo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //ZhongCheOrderDeliverVo(outgoingCode=1471093529601249280)
|
|
|
|
|
+ //查询发货单详情
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ OutgoingQueryBo queryBo = new OutgoingQueryBo();
|
|
|
|
|
+ queryBo.setOrderNo("20260210110174131");
|
|
|
|
|
+ OutgoingVo outgoingVo = zhongChePullController.mallOrderQueryOutgoing(queryBo);
|
|
|
|
|
+ System.out.println(outgoingVo);
|
|
|
|
|
+ //OutgoingVo(outgoingList=[OutgoingList(orderNo=20260210110174131, outgoingCode=1470843870811131904, outgoingStatus=0, deliveryType=1, expressCode=123456, expressCompanyName=韵达, outgoingGoods=[OutgoingGoods(goodsId=362032, num=7.0000)])])
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+//OrderDetailVo(orderNo=20260211110174132, purchaserOrderNo=2026021110452506, preOrder=0, mallOrderNo=null, orderStatus=1, orderAmount=205.24, freight=0.00, orderGoods=[OrderGoodsItem(goodsId=362032, num=7.0000, price=29.3200, subAmount=205.24, wishDeliveryDate=null)], name=111, provinceId=1, cityId=2800, countyId=55835, townId=0, address=同济智程, zip=null, mobile=13381115928, phone=null, email=service_yg@bosssoft.com.cn, memo=, orderTime=2026-02-11 10:17:40, buyer=常恒瑀, buyerMobile=18801195315, purchaserName=中国同济, purchaserDeptName=中国同济-同济科技园发展有限公司-同济智程文化科技(北京)有限公司, paymentType=01, orderInvoice=ZhongCheOrderInvoice(invoiceType=2, selectedInvoiceTitle=5, companyName=同济智程文化科技(北京), invoiceContent=1, invoiceName=王琳, invoicePhone=15249101907, invoiceFullAddress=北京海淀区羊坊店街道北京市海淀区羊坊店路11号, regCompanyName=同济智程文化科技(北京), regCode=91110108MAC4385K6J, regAddr=北京市海淀区羊坊店路11号四层428室测试, regPhone=010-51891021, regBank=中国工商银行股份有限公司北京玉渊潭支行测试, regBankAccount=111111111), voucher=0, payClient=0, paySerialNum=null, payAccount=null, payMoney=null, payPrestore=null, files=null)
|
|
|
|
|
+
|
|
|
|
|
+ //他们售后发货了
|
|
|
|
|
+//{"id":"d0094ec3-e032-43df-b95a-7cfb4ac91261","type":"2103","content":{"afterSaleNo":"1471137739549315072","expressCode":"21312321","expressCompanyName":"顺丰快递","freight":0,"deliverTime":"20260211135600"},"time":"20260211135601149","protocolId":null}
|
|
|
|
|
+//{"id":"d0094ec3-e032-43df-b95a-7cfb4ac91261","type":"2001","content":{"orderNo":"20260210110174130"},"time":"20260211135601149"}
|
|
|
|
|
+//{"id":"d0094ec3-e032-43df-b95a-7cfb4ac91261","type":"2101","content":{"afterSaleNo":"1471137739549315072"},"time":"20260211135601149"}
|
|
|
|
|
+//{"id":"d0094ec3-e032-43df-b95a-7cfb4ac91261","type":"2002","content":{"orderNo":"20260210110174130","cancelReason":"不想要了"},"time":"20260211135601149"}
|
|
|
|
|
+//{"id":"d0094ec3-e032-43df-b95a-7cfb4ac91261","type":"2003","content":{"orderNo":"20260210110174131","outgoingCode":"123456789"},"time":"20260211135601149"}
|
|
|
|
|
+//{"outgoingCode":"123456789","waybillType":"1"}
|
|
|
|
|
+
|
|
|
|
|
+ //查询订单详情
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ OrderDetailBo bo = new OrderDetailBo();
|
|
|
|
|
+ bo.setOrderNo("20260210110174131");
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ OrderDetailVo orderDetailVo = zhongChePullController.mallOrderDetail(bo);
|
|
|
|
|
+ System.out.println(orderDetailVo);
|
|
|
|
|
+ //待签名字符串:{"clientId":"KFZAVuIyC56","data":"eyJvcmRlck5vIjoiMjAyNjAyMTAxMTAxNzQxMzAifQ==","timestamp":"20260210174806","version":"1.0.0"}
|
|
|
|
|
+ //OrderDetailVo(orderNo=20260210110174130, purchaserOrderNo=2026021010452504, preOrder=0, mallOrderNo=null, orderStatus=1, orderAmount=205.24, freight=0.00, orderGoods=[OrderGoodsItem(goodsId=362032, num=7.0000, price=29.3200, subAmount=205.24, wishDeliveryDate=null)], name=111, provinceId=1, cityId=2800, countyId=55835, townId=0, address=同济智程, zip=null, mobile=13381115928, phone=null, email=service_yg@bosssoft.com.cn, memo=, orderTime=2026-02-10 17:25:18, buyer=常恒瑀, buyerMobile=18801195315, purchaserName=中国同济, purchaserDeptName=中国同济-同济科技园发展有限公司-同济智程文化科技(北京)有限公司, paymentType=01, orderInvoice=ZhongCheOrderInvoice(invoiceType=2, selectedInvoiceTitle=5, companyName=同济智程文化科技(北京), invoiceContent=1, invoiceName=王琳, invoicePhone=15249101907, invoiceFullAddress=北京海淀区羊坊店街道北京市海淀区羊坊店路11号, regCompanyName=同济智程文化科技(北京), regCode=91110108MAC4385K6J, regAddr=北京市海淀区羊坊店路11号四层428室测试, regPhone=010-51891021, regBank=中国工商银行股份有限公司北京玉渊潭支行测试, regBankAccount=111111111), voucher=0, payClient=0, paySerialNum=null, payAccount=null, payMoney=null, payPrestore=null, files=null)
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //导入商品
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ String username = "admin";
|
|
|
|
|
+ List<GoodsImportItem> batchGoods = new ArrayList<>();
|
|
|
|
|
+ GoodsImportItem item = new GoodsImportItem();
|
|
|
|
|
+ item.setGoodsId("362031");
|
|
|
|
|
+ item.setCatalogId("13012");
|
|
|
|
|
+ item.setCatalogName("原装墨盒");
|
|
|
|
|
+ item.setStandardCatalogId("1750717233748832257");
|
|
|
|
|
+ item.setStandardCatalogName("铁圈装订机耗材");
|
|
|
|
|
+ item.setBrandName("得力");
|
|
|
|
|
+ item.setName("得力");
|
|
|
|
|
+ item.setDsPrice(new BigDecimal(41));
|
|
|
|
|
+ item.setPrice(new BigDecimal(34));
|
|
|
|
|
+ item.setUnit("个");
|
|
|
|
|
+ item.setStock(100);
|
|
|
|
|
+ item.setBarImgUrls("[\"https://img1.com\",\"https://img2.com\"]");
|
|
|
|
|
+ item.setDescription("得力商品");
|
|
|
|
|
+ item.setProperties("{\"颜色\":\"红色\",\"尺寸\":\"XL\",\"材质\":\"棉|涤纶\"}");
|
|
|
|
|
+ item.setIsSelfOperated(1);
|
|
|
|
|
+ item.setTax(new BigDecimal(0.05));
|
|
|
|
|
+ item.setTaxCode("123456");
|
|
|
|
|
+ batchGoods.add(item);
|
|
|
|
|
+ GoodsImportBo bo = new GoodsImportBo();
|
|
|
|
|
+ bo.setAccount(username);
|
|
|
|
|
+ bo.setGoods(batchGoods);
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ GoodsImportVo resp = zhongChePullController.egoodsImport(bo);
|
|
|
|
|
+ System.out.println(resp);
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //发货
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ ZhongCheOrderDeliverBo bo = new ZhongCheOrderDeliverBo();
|
|
|
|
|
+ bo.setOrderNo("20260211110174132");
|
|
|
|
|
+ bo.setDeliveryType("1");
|
|
|
|
|
+ bo.setExpressCode("434848895994511");
|
|
|
|
|
+ bo.setExpressCompanyName("韵达");
|
|
|
|
|
+ List<OrderDeliverGoods> orderDeliverGoods1 = new ArrayList<>();
|
|
|
|
|
+ OrderDeliverGoods orderDeliverGoods = new OrderDeliverGoods();
|
|
|
|
|
+ orderDeliverGoods.setGoodsId("362032");
|
|
|
|
|
+ orderDeliverGoods.setNum(new BigDecimal(7.0000));
|
|
|
|
|
+ orderDeliverGoods.setVoucher("[\"imgUrl1\",\"imgUrl2\"]");
|
|
|
|
|
+ orderDeliverGoods1.add(orderDeliverGoods);
|
|
|
|
|
+ bo.setOrderDeliverGoods(orderDeliverGoods1);
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ ZhongCheOrderDeliverVo vo = zhongChePullController.mallOrderDeliverGoods(bo);
|
|
|
|
|
+ System.out.println(vo);
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //接单
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ OrderConfirmBo bo = new OrderConfirmBo();
|
|
|
|
|
+ bo.setOrderNo("20260211110174132");
|
|
|
|
|
+ bo.setMallOrderNo("RS20260002");
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ GoodsUpdateVo goodsUpdateVo = zhongChePullController.mallOrderConfirm(bo);
|
|
|
|
|
+ System.out.println(goodsUpdateVo);
|
|
|
|
|
+ //待签名字符串:{"clientId":"KFZAVuIyC56","data":"eyJvcmRlck5vIjoiMjAyNjAyMTAxMTAxNzQxMzEiLCJtYWxsT3JkZXJObyI6IlJTMjAyNjAwMDEifQ==","timestamp":"20260210175937","version":"1.0.0"}
|
|
|
|
|
+ //GoodsUpdateVo(result=1, message=null)
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //查询售后单详情
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ AfterSaleDetailBo bo = new AfterSaleDetailBo();
|
|
|
|
|
+ bo.setAfterSaleNo("1471151366025121792");
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ AfterSaleDetailVo vo =zhongChePullController.mallAftersaleDetail(bo);
|
|
|
|
|
+ System.out.println(vo);
|
|
|
|
|
+ //仅退款
|
|
|
|
|
+ //AfterSaleDetailVo(afterSaleNo=1471151366025121792, purchaserAfterSaleNo=1471151366243225600, mallAfterSaleNo=null, orderNo=20260211110174132, afterSaleType=4, memo=null, afterSaleStatus=10, goodsReturnStatus=1, applyTime=20260211143018, afterSaleReason=AfterSaleReason(reasonTypeName=收货商品与商品描述不符, reasonTypeCode=1, reason=2312321, imageList=[]), afterSaleGoods=AfterSaleGoods(goodsId=362032, num=1.0000, needDetectionReport=null, hasPackage=null, packageDesc=null), afterSalePick=null, afterSaleReturn=null, refundAccount=null, refundMoney=null, refundGoodsStatus=1, refundPrestore=null)
|
|
|
|
|
+ //换货
|
|
|
|
|
+ //AfterSaleDetailVo(afterSaleNo=1471137739549315072, purchaserAfterSaleNo=1471137739675144192, mallAfterSaleNo=null, orderNo=20260211110174132, afterSaleType=1, memo=null, afterSaleStatus=10, goodsReturnStatus=1, applyTime=20260211133610, afterSaleReason=AfterSaleReason(reasonTypeName=错发, reasonTypeCode=1, reason=1111, imageList=[]), afterSaleGoods=AfterSaleGoods(goodsId=362032, num=1.0000, needDetectionReport=0, hasPackage=1, packageDesc=10), afterSalePick=AfterSalePick(pickType=3, name=null, provinceId=null, cityId=null, countyId=null, townId=0, address=null, zip=null, mobile=null, phone=null, email=null), afterSaleReturn=null, refundAccount=null, refundMoney=null, refundGoodsStatus=null, refundPrestore=null)
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //同意售后
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ AfterSaleConfirmBo bo = new AfterSaleConfirmBo();
|
|
|
|
|
+ bo.setAfterSaleNo("1471151366025121792");
|
|
|
|
|
+ bo.setMallAfterSaleNo("RT202602110003");
|
|
|
|
|
+ //bo.setName("李景阳");
|
|
|
|
|
+ //bo.setProvinceId("1");
|
|
|
|
|
+ //bo.setCityId("2800");
|
|
|
|
|
+ //bo.setCountyId("55835");
|
|
|
|
|
+ //bo.setAddress("湖北省武汉市武昌区中南国际城C12207");
|
|
|
|
|
+ //bo.setZip("430000");
|
|
|
|
|
+ //bo.setMobile("18327041620");
|
|
|
|
|
+ //bo.setPhone("18327041620");
|
|
|
|
|
+ //bo.setEmail("18327041620@163.com");
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ GoodsUpdateVo vo =zhongChePullController.mallAftersaleConfirm(bo);
|
|
|
|
|
+ System.out.println(vo);
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //换货
|
|
|
|
|
+ //待签名字符串:{"clientId":"KFZAVuIyC56","data":"eyJhZnRlclNhbGVObyI6IjE0NzExNDUwNTAwMjgyNDkwODgifQ==","timestamp":"20260211140847","version":"1.0.0"}
|
|
|
|
|
+ //AfterSaleDetailVo(afterSaleNo=1471145050028249088, purchaserAfterSaleNo=1471145050934218752, mallAfterSaleNo=null, orderNo=20260211110174132, afterSaleType=2, memo=null, afterSaleStatus=10, goodsReturnStatus=1, applyTime=20260211140512, afterSaleReason=AfterSaleReason(reasonTypeName=错发, reasonTypeCode=1, reason=123123, imageList=[]), afterSaleGoods=AfterSaleGoods(goodsId=362032, num=1.0000, needDetectionReport=0, hasPackage=1, packageDesc=10), afterSalePick=AfterSalePick(pickType=1, name=111, provinceId=1, cityId=2800, countyId=55835, townId=0, address=同济智程, zip=null, mobile=13381115928, phone=null, email=null), afterSaleReturn=AfterSaleReturn(name=111, provinceId=1, cityId=2800, countyId=55835, townId=null, address=同济智程, zip=null, mobile=13381115928, phone=null, email=null), refundAccount=null, refundMoney=null, refundGoodsStatus=null, refundPrestore=null)
|
|
|
|
|
+
|
|
|
|
|
+ //收到商品确认
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ AfterSaleReturnReceivedBo bo = new AfterSaleReturnReceivedBo();
|
|
|
|
|
+ bo.setAfterSaleNo("1471145050028249088");
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ GoodsUpdateVo vo =zhongChePullController. mallAftersaleReturnGoodsReceived(bo);
|
|
|
|
|
+ System.out.println(vo);
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //换货新品发货
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ AfterSaleDeliverGoodsBo bo = new AfterSaleDeliverGoodsBo();
|
|
|
|
|
+ bo.setAfterSaleNo("1471145050028249088");
|
|
|
|
|
+ bo.setDeliveryType("1");
|
|
|
|
|
+ bo.setExpressCode("434848895994511");
|
|
|
|
|
+ bo.setExpressCompanyName("韵达");
|
|
|
|
|
+ List<AfterSaleDeliverGoodsItem> afterSaleDeliverGoods = new ArrayList<>();
|
|
|
|
|
+ AfterSaleDeliverGoodsItem afterSaleDeliverGoodsItem = new AfterSaleDeliverGoodsItem();
|
|
|
|
|
+ afterSaleDeliverGoodsItem.setGoodsId("362032");
|
|
|
|
|
+ afterSaleDeliverGoodsItem.setNum(new BigDecimal(1.0000));
|
|
|
|
|
+ afterSaleDeliverGoods.add(afterSaleDeliverGoodsItem);
|
|
|
|
|
+ bo.setAfterSaleDeliverGoods(afterSaleDeliverGoods);
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ AfterSaleDeliverGoodsVo vo = zhongChePullController.mallAftersaleDeliverGoods(bo);
|
|
|
|
|
+ System.out.println(vo);
|
|
|
|
|
+ //待签名字符串:{"clientId":"KFZAVuIyC56","data":"eyJhZnRlclNhbGVObyI6IjE0NzExNDUwNTAwMjgyNDkwODgiLCJkZWxpdmVyeVR5cGUiOiIxIiwiZXhwcmVzc0NvZGUiOiI0MzQ4NDg4OTU5OTQ1MTEiLCJleHByZXNzQ29tcGFueU5hbWUiOiLpn7Xovr4iLCJhZnRlclNhbGVEZWxpdmVyR29vZHMiOlt7Imdvb2RzSWQiOiIzNjIwMzIiLCJudW0iOjF9XX0=","timestamp":"20260211142325","version":"1.0.0"}
|
|
|
|
|
+ //AfterSaleDeliverGoodsVo(outgoingCode=1471149642388475904)
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ //确认退款
|
|
|
|
|
+ /*public static void main(String[] args) {
|
|
|
|
|
+ AfterSaleRefundBo bo = new AfterSaleRefundBo();
|
|
|
|
|
+ bo.setAfterSaleNo("1471151366025121792");
|
|
|
|
|
+ ZhongChePullController zhongChePullController = new ZhongChePullController();
|
|
|
|
|
+ GoodsUpdateVo vo = zhongChePullController.mallAftersaleRefund(bo);
|
|
|
|
|
+ System.out.println(vo);
|
|
|
|
|
+ }*/
|
|
|
|
|
+ //5.2.1 商品导入
|
|
|
|
|
+ @PostMapping("/egoods/import")
|
|
|
|
|
+ public GoodsImportVo egoodsImport(@RequestBody GoodsImportBo bo) throws ZhongcheException {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/egoods/import", bo);
|
|
|
|
|
+ log.info(JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ //解析业务响应参数
|
|
|
|
|
+ GoodsImportVo zcr = parseZcResponse(responseDto, GoodsImportVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+ private <V> V parseZcResponse(ZCR responseDto, Class<V> voClass) throws ZhongcheException {
|
|
|
|
|
+ // 1. 基础校验
|
|
|
|
|
+ if (responseDto == null) {
|
|
|
|
|
+ throw new ZhongcheException("同济响应为空");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!"0".equals(responseDto.getRespCode())) {
|
|
|
|
|
+ throw new ZhongcheException("同济接口返回失败:" + responseDto.getRespCode() + " - " + responseDto.getRespMsg());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (StrUtil.isBlank(responseDto.getData())) {
|
|
|
|
|
+ throw new ZhongcheException("同济响应 data 为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 2. Base64 → JSON
|
|
|
|
|
+ String bizJson = ZCApiUtils.base64Decode(responseDto.getData());
|
|
|
|
|
+
|
|
|
|
|
+ // 3. JSON → VO(Jackson 自动处理嵌套对象 / List)
|
|
|
|
|
+// return ZCApiUtils.jsonToObject(bizJson, voClass);
|
|
|
|
|
+ return JSONUtil.toBean(bizJson, voClass);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("解析同济响应失败,response={}", responseDto, e);
|
|
|
|
|
+ throw new ZhongcheException("同济响应解析失败 : " + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.2.2 商品价格变更
|
|
|
|
|
+ @PostMapping("/egoods/price/update")
|
|
|
|
|
+ public GoodsPriceUpdateVo egoodsPriceUpdate(@RequestBody GoodsImportBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/egoods/price/update", bo);
|
|
|
|
|
+ log.info("商品价格变更参数:{}",JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ GoodsPriceUpdateVo zcr = parseZcResponse(responseDto, GoodsPriceUpdateVo.class);
|
|
|
|
|
+ log.info("商品价格变更结果:{}", zcr);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5.2.3 商品上下架状态变更
|
|
|
|
|
+ @PostMapping("/egoods/status/update")
|
|
|
|
|
+ public GoodsStatusUpdateVo egoodsStatusUpdate(@RequestBody GoodsStatusUpdateBo bo) {
|
|
|
|
|
+
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/egoods/status/update", bo);
|
|
|
|
|
+ log.info("商品上下架状态变更参数:{}",JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ GoodsStatusUpdateVo zcr = parseZcResponse(responseDto, GoodsStatusUpdateVo.class);
|
|
|
|
|
+ log.info("商品上下架状态变更结果:{}", zcr);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5.2.4 商品图片变更
|
|
|
|
|
+ @PostMapping("/egoods/imgs/update")
|
|
|
|
|
+ public GoodsImageUpdateVo egoodsImgsUpdate(@RequestBody GoodsImageUpdateBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/egoods/imgs/update", bo);
|
|
|
|
|
+ log.info("商品图片变更参数:{}",JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ GoodsImageUpdateVo zcr = parseZcResponse(responseDto, GoodsImageUpdateVo.class);
|
|
|
|
|
+ log.info("商品图片变更结果:{}", zcr);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5.2.5 商品规格信息变更
|
|
|
|
|
+ @PostMapping("/egoods/properties/update")
|
|
|
|
|
+ public GoodsUpdateVo egoodsPropertiesUpdate(@RequestBody GoodsPropertiesUpdateBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/egoods/properties/update", bo);
|
|
|
|
|
+ log.info("商品规格信息变更参数:{}",JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ log.info("商品规格信息变更结果:{}", zcr);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.2.6 商品详情信息变更
|
|
|
|
|
+ @PostMapping("/egoods/detail/update")
|
|
|
|
|
+ public GoodsUpdateVo egoodsDetailUpdate(@RequestBody GoodsDetailBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/egoods/detail/update", bo);
|
|
|
|
|
+ log.info("商品详情信息变更参数:{}",JSONUtil.toJsonStr(bo));
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ log.info("商品详情信息变更结果:{}", zcr);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.3 订单服务
|
|
|
|
|
+
|
|
|
|
|
+ // 5.3.1 查询订单详情
|
|
|
|
|
+ @PostMapping("/mall/order/detail")
|
|
|
|
|
+ public OrderDetailVo mallOrderDetail(@RequestBody OrderDetailBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/detail", bo);
|
|
|
|
|
+ OrderDetailVo orderDetailVo = parseZcResponse(responseDto, OrderDetailVo.class);
|
|
|
|
|
+ return orderDetailVo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.2 接单
|
|
|
|
|
+ @PostMapping("/mall/order/confirm")
|
|
|
|
|
+ public GoodsUpdateVo mallOrderConfirm(@RequestBody OrderConfirmBo bo) throws ZhongcheException {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/confirm", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.3 同步商品协商发货时间
|
|
|
|
|
+ @PostMapping("/mall/order/goods/append")
|
|
|
|
|
+ public GoodsUpdateVo mallOrderGoodsAppend(@RequestBody OrderGoodsAppendBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/goods/append", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.4 拒单
|
|
|
|
|
+ @PostMapping("/mall/order/reject")
|
|
|
|
|
+ public GoodsUpdateVo mallOrderReject(@RequestBody OrderRejectBo bo) throws ZhongcheException {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/reject", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.5 发货
|
|
|
|
|
+ @PostMapping("/mall/order/deliver/goods")
|
|
|
|
|
+ public ZhongCheOrderDeliverVo mallOrderDeliverGoods(@RequestBody ZhongCheOrderDeliverBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/deliver/goods", bo);
|
|
|
|
|
+ ZhongCheOrderDeliverVo zcr = parseZcResponse(responseDto, ZhongCheOrderDeliverVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.6 查询待处理订单列表
|
|
|
|
|
+ @PostMapping("/mall/order/pending/list")
|
|
|
|
|
+ public PendingOrderListVo mallOrderPendingList(@RequestBody ZCTokenBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/pending/list", bo);
|
|
|
|
|
+ PendingOrderListVo zcr = parseZcResponse(responseDto, PendingOrderListVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.7 妥投通知
|
|
|
|
|
+ @PostMapping("/mall/order/delivered/notice")
|
|
|
|
|
+ public GoodsUpdateVo mallOrderDeliveredNotice(@RequestBody OrderDeliveredNoticeBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/delivered/notice", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.8 查询发货单信息
|
|
|
|
|
+ @PostMapping("/mall/order/query/outgoing")
|
|
|
|
|
+ public OutgoingVo mallOrderQueryOutgoing(@RequestBody OutgoingQueryBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/query/outgoing", bo);
|
|
|
|
|
+ OutgoingVo zcr = parseZcResponse(responseDto, OutgoingVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.3.9 查询备货单详情
|
|
|
|
|
+ @PostMapping("/mall/prepare/order/detail")
|
|
|
|
|
+ public PrepareOrderDetailRespVo mallPrepareOrderDetail(@RequestBody PrepareOrderDetailReqBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/prepare/order/detail", bo);
|
|
|
|
|
+ PrepareOrderDetailRespVo zcr = parseZcResponse(responseDto, PrepareOrderDetailRespVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.3.10 备货
|
|
|
|
|
+ @PostMapping("/mall/prepare/order/goods")
|
|
|
|
|
+ public GoodsUpdateVo mallPrepareOrderGoods(@RequestBody PrepareOrderDataBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/prepare/order/goods", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //5.3.11 确认取消备货单
|
|
|
|
|
+ @PostMapping("/mall/prepare/order/confirm/cancel")
|
|
|
|
|
+ public GoodsUpdateVo mallPrepareOrderConfirmCancel(@RequestBody PrepareOrderDetailReqBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/prepare/order/confirm/cancel", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.3.12 审核订单取消
|
|
|
|
|
+ /*
|
|
|
|
|
+ //请求业务参数
|
|
|
|
|
+ OrderCancelAuditBo orderCancelAuditBo = new OrderCancelAuditBo();
|
|
|
|
|
+ //响应业务参数
|
|
|
|
|
+ GoodsUpdateVo goodsUpdateVo = new GoodsUpdateVo();
|
|
|
|
|
+ */
|
|
|
|
|
+ @PostMapping("/mall/order/cancel/audit/judge")
|
|
|
|
|
+ public GoodsUpdateVo mallOrderCancelAuditJudge(@RequestBody OrderCancelAuditBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/order/cancel/audit/judge", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+ //5.4.1 查询售后单详情
|
|
|
|
|
+ /*
|
|
|
|
|
+ //请求业务参数
|
|
|
|
|
+ AfterSaleDetailBo afterSaleDetailBo = new AfterSaleDetailBo();
|
|
|
|
|
+ //响应业务参数
|
|
|
|
|
+ AfterSaleDetailVo afterSaleDetailVo = new AfterSaleDetailVo();
|
|
|
|
|
+ AfterSaleReason afterSaleReason = new AfterSaleReason();
|
|
|
|
|
+ AfterSaleGoods afterSaleGoods = new AfterSaleGoods();
|
|
|
|
|
+ AfterSalePick afterSalePick = new AfterSalePick();
|
|
|
|
|
+ ImageList imageList = new ImageList();
|
|
|
|
|
+ AfterSaleReturn afterSaleReturn = new AfterSaleReturn();
|
|
|
|
|
+ */
|
|
|
|
|
+ @PostMapping("/mall/aftersale/detail")
|
|
|
|
|
+ public AfterSaleDetailVo mallAftersaleDetail(@RequestBody AfterSaleDetailBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/detail", bo);
|
|
|
|
|
+ AfterSaleDetailVo zcr = parseZcResponse(responseDto, AfterSaleDetailVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.4.2 接受售后
|
|
|
|
|
+ @PostMapping("/mall/aftersale/confirm")
|
|
|
|
|
+ public GoodsUpdateVo mallAftersaleConfirm(@RequestBody AfterSaleConfirmBo bo) throws ZhongcheException{
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/confirm", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.4.3 拒绝售后
|
|
|
|
|
+ @PostMapping("/mall/aftersale/reject")
|
|
|
|
|
+ public GoodsUpdateVo mallAftersaleReject(@RequestBody AfterSaleRejectBo bo) throws ZhongcheException{
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/reject", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.4.4 确认收到退货
|
|
|
|
|
+ @PostMapping("/mall/aftersale/return/goods/received")
|
|
|
|
|
+ public GoodsUpdateVo mallAftersaleReturnGoodsReceived(@RequestBody AfterSaleReturnReceivedBo bo) throws ZhongcheException{
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/return/goods/received", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.4.5 换货新品发货
|
|
|
|
|
+ @PostMapping("/mall/aftersale/deliver/goods")
|
|
|
|
|
+ public AfterSaleDeliverGoodsVo mallAftersaleDeliverGoods(@RequestBody AfterSaleDeliverGoodsBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/deliver/goods", bo);
|
|
|
|
|
+ AfterSaleDeliverGoodsVo zcr = parseZcResponse(responseDto, AfterSaleDeliverGoodsVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //TODO 5.4.6 查询待处理售后单列表
|
|
|
|
|
+ @PostMapping("/mall/aftersale/pending/list")
|
|
|
|
|
+ public AfterSalePendingListVo mallAftersalePendingList(@RequestBody AfterSalePendingListBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/pending/list", bo);
|
|
|
|
|
+ AfterSalePendingListVo zcr = parseZcResponse(responseDto, AfterSalePendingListVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.4.7 查询换货新品发货单信息
|
|
|
|
|
+ @PostMapping("/mall/aftersale/query/outgoing")
|
|
|
|
|
+ public AfterSaleQueryOutgoingVo mallAftersaleQueryOutgoing(@RequestBody AfterSaleQueryOutgoingBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/query/outgoing", bo);
|
|
|
|
|
+ AfterSaleQueryOutgoingVo zcr = parseZcResponse(responseDto, AfterSaleQueryOutgoingVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.4.8 线下售后
|
|
|
|
|
+ @PostMapping("/mall/aftersale/offline/create")
|
|
|
|
|
+ public AfterSaleOfflineCreateVo mallAftersaleOfflineCreate(@RequestBody AfterSaleOfflineCreateBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/offline/create", bo);
|
|
|
|
|
+ AfterSaleOfflineCreateVo zcr = parseZcResponse(responseDto, AfterSaleOfflineCreateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.4.9 确认退款
|
|
|
|
|
+ @PostMapping("/mall/aftersale/refund")
|
|
|
|
|
+ public GoodsUpdateVo mallAftersaleRefund(@RequestBody AfterSaleRefundBo bo) throws ZhongcheException{
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/aftersale/refund", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.1 查询开票信息
|
|
|
|
|
+ @PostMapping("/mall/invoice/apply/detail")
|
|
|
|
|
+ public InvoiceApplyDetailVo mallInvoiceApplyDetail(@RequestBody InvoiceApplyDetailBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/apply/detail", bo);
|
|
|
|
|
+ InvoiceApplyDetailVo zcr = parseZcResponse(responseDto, InvoiceApplyDetailVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.2 查询开票申请订单列表
|
|
|
|
|
+ @PostMapping("/mall/invoice/apply/orders")
|
|
|
|
|
+ public InvoiceApplyOrdersVo mallInvoiceApplyOrders(@RequestBody InvoiceApplyOrdersBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/apply/orders", bo);
|
|
|
|
|
+ InvoiceApplyOrdersVo zcr = parseZcResponse(responseDto, InvoiceApplyOrdersVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.3 拒绝开票
|
|
|
|
|
+ @PostMapping("/mall/invoice/apply/reject")
|
|
|
|
|
+ public GoodsUpdateVo mallInvoiceApplyReject(@RequestBody InvoiceApplyRejectBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/apply/reject", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.4 电商同步开票信息
|
|
|
|
|
+ @PostMapping("/mall/invoice/sync/invoiceinfos")
|
|
|
|
|
+ public GoodsUpdateVo mallInvoiceSyncInvoiceInfos(@RequestBody InvoiceSyncInvoiceInfosBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/sync/invoiceinfos", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.5 同步纸质发票邮寄信息
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/mall/invoice/sync/waybill")
|
|
|
|
|
+ public GoodsUpdateVo mallInvoiceSyncWaybill(@RequestBody InvoiceSyncWaybillBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/sync/waybill", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.6 发票妥投通知
|
|
|
|
|
+ @PostMapping("/mall/invoice/delivered/notice")
|
|
|
|
|
+ public GoodsUpdateVo mallInvoiceDeliveredNotice(@RequestBody InvoiceDeliveredNoticeBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/delivered/notice", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.7 查询待开票申请单列表
|
|
|
|
|
+ @PostMapping("/mall/invoice/apply/waitlist")
|
|
|
|
|
+ public InvoiceApplyWaitlistVo mallInvoiceApplyWaitList(@RequestBody InvoiceApplyWaitlistBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/apply/waitlist", bo);
|
|
|
|
|
+ InvoiceApplyWaitlistVo zcr = parseZcResponse(responseDto, InvoiceApplyWaitlistVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.8 电商同意退票
|
|
|
|
|
+ @PostMapping("/mall/invoice/refund/agree")
|
|
|
|
|
+ public GoodsUpdateVo mallInvoiceRefundAgree(@RequestBody InvoiceRefundAgreeBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/refund/agree", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.9 电商确认完成退票
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/mall/invoice/refund/finish")
|
|
|
|
|
+ public GoodsUpdateVo mallInvoiceRefundFinish(@RequestBody InvoiceRefundFinishBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/refund/finish", bo);
|
|
|
|
|
+ GoodsUpdateVo zcr = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return zcr;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.7.10 电商拒绝退票申请
|
|
|
|
|
+ @PostMapping("/mall/invoice/refund/reject")
|
|
|
|
|
+ public GoodsUpdateVo mallInvoiceRefundReject(@RequestBody InvoiceRefundRejectBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/invoice/refund/reject", bo);
|
|
|
|
|
+ GoodsUpdateVo goodsUpdateVo = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return goodsUpdateVo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.9.1 查询结算单详情
|
|
|
|
|
+ @PostMapping("/mall/settlement/detail")
|
|
|
|
|
+ public SettlementDetailVo mallSettlementDetail(@RequestBody SettlementDetailBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/settlement/detail", bo);
|
|
|
|
|
+ SettlementDetailVo settlementDetailVo = parseZcResponse(responseDto, SettlementDetailVo.class);
|
|
|
|
|
+ return settlementDetailVo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.9.2 查询结算单订单列表
|
|
|
|
|
+ @PostMapping("/mall/settlement/apply/orders")
|
|
|
|
|
+ public SettlementApplyOrdersVo mallSettlementApplyOrders(@RequestBody SettlementApplyOrdersBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/settlement/apply/orders", bo);
|
|
|
|
|
+ SettlementApplyOrdersVo settlementApplyOrdersVo = parseZcResponse(responseDto, SettlementApplyOrdersVo.class);
|
|
|
|
|
+ return settlementApplyOrdersVo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //5.9.3 结算单确认结算
|
|
|
|
|
+ @PostMapping("/mall/settlement/confirm")
|
|
|
|
|
+ public GoodsUpdateVo mallSettlementConfirm(@RequestBody SettlementConfirmBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/settlement/confirm", bo);
|
|
|
|
|
+ GoodsUpdateVo goodsUpdateVo = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return goodsUpdateVo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.9.4 结算单付款详情
|
|
|
|
|
+ @PostMapping("/mall/settlement/payment/detail")
|
|
|
|
|
+ public SettlementPaymentDetailVo mallSettlementPaymentDetail( @RequestBody SettlementPaymentDetailBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/settlement/payment/detail", bo);
|
|
|
|
|
+ SettlementPaymentDetailVo settlementPaymentDetailVo = parseZcResponse(responseDto, SettlementPaymentDetailVo.class);
|
|
|
|
|
+ return settlementPaymentDetailVo;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //5.9.5 结算单确认收款
|
|
|
|
|
+ @PostMapping("/mall/settlement/confirm/payment")
|
|
|
|
|
+ public GoodsUpdateVo mallSettlementConfirmPayment( @RequestBody SettlementConfirmPaymentBo bo) {
|
|
|
|
|
+ ZCR responseDto = doZcPost("/api/mall/settlement/confirm/payment", bo);
|
|
|
|
|
+ GoodsUpdateVo goodsUpdateVo = parseZcResponse(responseDto, GoodsUpdateVo.class);
|
|
|
|
|
+ return goodsUpdateVo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|