新增pdd确认订单

This commit is contained in:
启航老齐 2025-10-02 10:47:38 +08:00
parent 08d44baf85
commit 6a6bacab04
8 changed files with 324 additions and 39 deletions

View File

@ -6,6 +6,7 @@ import cn.qihangerp.common.api.ShopApiParams;
import cn.qihangerp.common.enums.EnumShopType;
import cn.qihangerp.common.enums.HttpStatus;
import cn.qihangerp.model.entity.OShopPlatform;
import cn.qihangerp.module.service.OShopPlatformService;
import cn.qihangerp.module.service.OShopService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
@ -15,7 +16,7 @@ import org.springframework.util.StringUtils;
@Component
public class PddApiCommon {
private final OShopService shopService;
// private final OShopPlatformService platformService;
private final OShopPlatformService platformService;
/**
* 更新前的检查
@ -38,13 +39,23 @@ public class PddApiCommon {
// if (shop.getSellerId() == null || shop.getSellerId()<=0) {
// return ResultVo.error(HttpStatus.PARAMS_ERROR, "参数错误请设置抖店平台店铺IDshopId");
// }
String appKey = shop.getAppKey();
String appSecret = shop.getAppSecret();
String callbackUrl = shop.getApiRedirectUrl();
if(StringUtils.isEmpty(appKey) || StringUtils.isEmpty(appSecret)){
OShopPlatform platform = platformService.getById(EnumShopType.PDD.getIndex());
if(platform != null){
appKey = platform.getAppKey();
appSecret = platform.getAppSecret();
callbackUrl = platform.getRedirectUri();
}
}
//
// OShopPlatform platform = platformService.getById(EnumShopType.PDD.getIndex());
if (!StringUtils.hasText(shop.getAppKey())) {
if (!StringUtils.hasText(appKey)) {
return ResultVo.error(HttpStatus.PARAMS_ERROR, "平台配置错误没有找到AppKey");
}
if (!StringUtils.hasText(shop.getAppSecret())) {
if (!StringUtils.hasText(appSecret)) {
return ResultVo.error(HttpStatus.PARAMS_ERROR, "第三方平台配置错误没有找到AppSercet");
}
// if (!StringUtils.hasText(platform.getRedirectUri())) {
@ -59,11 +70,11 @@ public class PddApiCommon {
// }
ShopApiParams params = new ShopApiParams();
params.setAppKey(shop.getAppKey());
params.setAppSecret(shop.getAppSecret());
params.setAppKey(appKey);
params.setAppSecret(appSecret);
params.setAccessToken(shop.getAccessToken());
params.setRedirectUri(shop.getApiRedirectUrl());
params.setServerUrl(shop.getApiRequestUrl());
params.setRedirectUri(callbackUrl);
// params.setServerUrl(shop.getApiRequestUrl());
params.setSellerId(shop.getSellerId());
if (!StringUtils.hasText(shop.getAccessToken())) {

View File

@ -23,6 +23,7 @@ import lombok.AllArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.time.Duration;
import java.time.LocalDateTime;
@ -203,28 +204,27 @@ public class PddOrderApiController {
* @return
* @throws
*/
// @RequestMapping("/pull_order_detail")
// @ResponseBody
// public AjaxResult getOrderPullDetail(@RequestBody PullRequest req) throws Exception {
// log.info("/**************主动更新pdd订单by number****************/");
// if (req.getShopId() == null || req.getShopId() <= 0) {
// return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误没有店铺Id");
// }
// if (req.getOrderId() !=null) {
// return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误缺少orderId");
// }
//
// var checkResult = apiCommon.checkBefore(req.getShopId());
// if (checkResult.getCode() != HttpStatus.SUCCESS) {
// return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData());
// }
// String accessToken = checkResult.getData().getAccessToken();
// String url = checkResult.getData().getServerUrl();
// String appKey = checkResult.getData().getAppKey();
// String appSecret = checkResult.getData().getAppSecret();
//
//
// ApiResultVo<PddOrderResponse> resultVo = OrderApiHelper.pullOrderDetail(appKey, appSecret, accessToken,req.getOrderId());
@PostMapping("/pull_order_detail")
@ResponseBody
public AjaxResult getOrderPullDetail(@RequestBody PddPullRequest req) throws Exception {
log.info("/**************主动更新pdd订单by number****************/");
if (req.getShopId() == null || req.getShopId() <= 0) {
return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误没有店铺Id");
}
if (StringUtils.isEmpty(req.getOrderId())) {
return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误缺少orderId");
}
var checkResult = pddApiCommon.checkBefore(req.getShopId());
if (checkResult.getCode() != HttpStatus.SUCCESS) {
return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(),checkResult.getData());
}
String accessToken = checkResult.getData().getAccessToken();
String appKey = checkResult.getData().getAppKey();
String appSecret = checkResult.getData().getAppSecret();
// ApiResultVo<PddOrderResponse> resultVo = PddOrderApiHelper.pullOrderDetail(appKey, appSecret, accessToken,req.getOrderId());
// if (resultVo.getCode() == ResultVoEnum.SUCCESS.getIndex()) {
// PddOrder pddOrder = new PddOrder();
// BeanUtils.copyProperties(resultVo.getData(),pddOrder);
@ -251,5 +251,6 @@ public class PddOrderApiController {
// } else {
// return AjaxResult.error(resultVo.getCode(), resultVo.getMsg());
// }
// }
return AjaxResult.error("未知错误");
}
}

View File

@ -11,12 +11,16 @@ import cn.qihangerp.common.mq.MqType;
import cn.qihangerp.common.mq.MqUtils;
import cn.qihangerp.module.open.pdd.domain.PddOrder;
import cn.qihangerp.module.open.pdd.domain.bo.PddOrderBo;
import cn.qihangerp.module.open.pdd.domain.bo.PddOrderConfirmBo;
import cn.qihangerp.module.open.pdd.domain.bo.PddOrderPushBo;
import cn.qihangerp.module.open.pdd.service.PddOrderService;
import cn.qihangerp.security.common.BaseController;
import com.alibaba.fastjson2.JSONObject;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("/pdd/order")
@ -54,4 +58,15 @@ public class PddOrderController extends BaseController {
}
return success();
}
@PostMapping("/confirmOrder")
public AjaxResult confirmOrder(@RequestBody PddOrderConfirmBo bo) {
log.info("=========确认订单======={}", JSONObject.toJSONString(bo));
// var result = orderService.confirmOrder(bo);
// if(result.getCode()==0) return success();
// else return AjaxResult.error(result.getMsg());
return AjaxResult.error("未实现");
}
}

View File

@ -1,6 +1,5 @@
package cn.qihangerp.api.tao.controller;
import cn.qihangerp.common.AjaxResult;
import cn.qihangerp.common.PageQuery;
import cn.qihangerp.common.PageResult;
@ -12,12 +11,16 @@ import cn.qihangerp.common.mq.MqType;
import cn.qihangerp.common.mq.MqUtils;
import cn.qihangerp.module.open.tao.domain.TaoOrder;
import cn.qihangerp.module.open.tao.domain.bo.TaoOrderBo;
import cn.qihangerp.module.open.tao.domain.bo.TaoOrderConfirmBo;
import cn.qihangerp.module.open.tao.domain.bo.TaoOrderPushBo;
import cn.qihangerp.module.open.tao.service.TaoOrderService;
import cn.qihangerp.security.common.BaseController;
import com.alibaba.fastjson2.JSONObject;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("/tao/order")
@ -56,5 +59,14 @@ public class TaoOrderController extends BaseController {
return success();
}
@PostMapping("/confirmOrder")
public AjaxResult confirmOrder(@RequestBody TaoOrderConfirmBo bo) {
log.info("=========确认订单======={}", JSONObject.toJSONString(bo));
// var result = orderService.confirmOrder(bo);
// if(result.getCode()==0) return success();
// else return AjaxResult.error(result.getMsg());
return AjaxResult.error("未实现");
}
}

View File

@ -0,0 +1,31 @@
package cn.qihangerp.module.open.pdd.domain.bo;
import lombok.Data;
@Data
public class PddOrderConfirmBo {
private Long orderId;
/**
* 收货人的姓名
*/
private String receiver;
/**
* 收货人的手机号码
*/
private String mobile;
private String province;
private String city;
private String town;
/**
* 收货人的详细地址
*/
private String address;
/**
* 发货类型 0仓库发货1供应商代发
*/
// private Integer shipType;
}

View File

@ -0,0 +1,31 @@
package cn.qihangerp.module.open.tao.domain.bo;
import lombok.Data;
@Data
public class TaoOrderConfirmBo {
private Long orderId;
/**
* 收货人的姓名
*/
private String receiver;
/**
* 收货人的手机号码
*/
private String mobile;
private String province;
private String city;
private String town;
/**
* 收货人的详细地址
*/
private String address;
/**
* 发货类型 0仓库发货1供应商代发
*/
// private Integer shipType;
}

View File

@ -19,13 +19,22 @@ export function getOrder(id) {
// 接口拉取淘宝订单
export function pullOrder(query) {
export function pullOrder(data) {
return request({
url: '/api/open-api/pdd/order/pull_order',
method: 'get',
params: query
method: 'post',
data: data
})
}
export function pullOrderDetail(data) {
return request({
url: '/api/open-api/pdd/order/pull_order_detail',
method: 'post',
data: data
})
}
export function pushOms(data) {
return request({
url: '/api/open-api/pdd/order/push_oms',
@ -33,3 +42,11 @@ export function pushOms(data) {
data: data
})
}
// 确认订单
export function confirmOrder(data) {
return request({
url: '/api/open-api/pdd/order/confirmOrder',
method: 'post',
data: data
})
}

View File

@ -172,7 +172,15 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
<el-button style="padding-right: 6px;padding-left: 6px"
v-if="scope.row.auditStatus === 0"
size="mini"
type="success" plain
icon="el-icon-success"
@click="handleConfirm(scope.row)"
v-hasPermi="['dou:order:edit']"
>确认订单</el-button>
<el-button style="padding-right: 6px;padding-left: 6px"
:loading="pullLoading"
size="mini"
icon="el-icon-refresh"
@ -190,34 +198,150 @@
@pagination="getList"
/>
<!-- 订单审核订单详情对话框 -->
<el-dialog :title="detailTitle" :visible.sync="detailOpen" width="1000px" append-to-body >
<el-form ref="form" :model="form" :rules="rules" label-width="100px" inline>
<el-descriptions title="订单信息">
<el-descriptions-item label="ID">{{form.id}}</el-descriptions-item>
<el-descriptions-item label="订单号">{{form.orderId}}</el-descriptions-item>
<el-descriptions-item label="店铺">
{{ shopList.find(x=>x.id === form.shopId)?shopList.find(x=>x.id === form.shopId).name:'' }}
</el-descriptions-item>
<el-descriptions-item label="订单来源">
<el-tag size="small" >{{form.btypeDesc}}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="订单状态">
<el-tag size="small" >{{ form.orderStatusDesc }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="主状态">
<el-tag size="small" >{{ form.mainStatusDesc }}</el-tag>
</el-descriptions-item>
<!-- <el-descriptions-item label="成团状态">-->
<!-- <el-tag size="small" v-if="form.groupStatus ===0 ">拼团中</el-tag>-->
<!-- <el-tag size="small" v-if="form.groupStatus ===1 ">已成团</el-tag>-->
<!-- <el-tag size="small" v-if="form.groupStatus ===2 ">团失败</el-tag>-->
<!-- </el-descriptions-item>-->
<el-descriptions-item label="买家备注">
{{form.buyerWords}}
</el-descriptions-item>
<el-descriptions-item label="卖家备注">
{{form.sellerWords}}
</el-descriptions-item>
<el-descriptions-item label="取消原因">
{{form.cancelReason}}
</el-descriptions-item>
<el-descriptions-item label="创建时间">
{{ parseTime(form.createTime*1000) }}
</el-descriptions-item>
<el-descriptions-item label="支付时间"> {{ parseTime(form.payTime*1000) }}</el-descriptions-item>
<el-descriptions-item label="更新时间"> {{ parseTime(form.updateTime*1000) }}</el-descriptions-item>
</el-descriptions>
<el-descriptions title="付款信息">
<!-- <el-descriptions-item label="商品总额">{{form.goodsAmount}}</el-descriptions-item>-->
<!-- <el-descriptions-item label="团长免单金额">{{form.capitalFreeDiscount}}</el-descriptions-item>-->
<el-descriptions-item label="商家优惠金额">{{form.promotionShopAmount}}</el-descriptions-item>
<el-descriptions-item label="平台优惠金额">{{form.promotionTalentAmount}}</el-descriptions-item>
<el-descriptions-item label="运费">{{form.postAmount}}</el-descriptions-item>
<el-descriptions-item label="实际支付金额">{{form.orderAmount}}</el-descriptions-item>
<el-descriptions-item label="支付方式"> {{ form.payAmount }}</el-descriptions-item>
</el-descriptions>
<el-descriptions title="收货信息">
<el-descriptions-item label="收件人姓名">{{form.maskPostReceiver}}</el-descriptions-item>
<el-descriptions-item label="收件人手机号">{{form.maskPostTel}}</el-descriptions-item>
<el-descriptions-item label="省市区">{{form.provinceName}}{{form.cityName}}{{form.townName}}</el-descriptions-item>
<el-descriptions-item label="详细地址">{{form.maskPostAddress}}</el-descriptions-item>
</el-descriptions>
<!-- <el-descriptions title="发货信息">-->
<!-- &lt;!&ndash; <el-descriptions-item label="发货方式">-->
<!-- <el-tag v-if="form.shipType === 1" type="danger">供应商代发</el-tag>-->
<!-- <el-tag v-if="form.shipType === 0" type="danger">仓库发货</el-tag>-->
<!-- </el-descriptions-item> &ndash;&gt;-->
<!-- <el-descriptions-item label="物流公司">{{form.logisticsCompany}}</el-descriptions-item>-->
<!-- <el-descriptions-item label="物流单号">{{form.logisticsCode}}</el-descriptions-item>-->
<!-- <el-descriptions-item label="发货时间">{{form.logisticsTime}}</el-descriptions-item>-->
<!-- </el-descriptions>-->
<el-divider content-position="center">订单商品</el-divider>
<el-table :data="form.items" style="margin-bottom: 10px;">
<el-table-column label="序号" align="center" type="index" width="50"/>
<el-table-column label="商品图片" width="80">
<template slot-scope="scope">
<el-image style="width: 70px; height: 70px" :src="scope.row.productPic"></el-image>
</template>
</el-table-column>
<el-table-column label="商品标题" prop="productName" ></el-table-column>
<el-table-column label="SKU" prop="goodsSpec" width="150"></el-table-column>
<el-table-column label="sku编码" prop="specNum"></el-table-column>
<el-table-column label="单价" prop="goodsPrice"></el-table-column>
<el-table-column label="数量" prop="comboNum"></el-table-column>
<el-table-column label="商品金额" prop="totalAmount"></el-table-column>
</el-table>
<el-divider content-position="center" v-if="isAudit" >收件人</el-divider>
<el-form-item label="收件人姓名" prop="maskPostReceiver" v-if="isAudit">
<el-input v-model="form.maskPostReceiver" placeholder="请输入收件人姓名" style="width:350px" />
</el-form-item>
<el-form-item label="收件人电话" prop="maskPostTel" v-if="isAudit">
<el-input v-model="form.maskPostTel" placeholder="请输入收件人电话" style="width:350px" />
</el-form-item>
<el-form-item label="省市区" prop="provinces" v-if="isAudit">
<el-cascader style="width:350px"
size="large"
:options="pcaTextArr"
v-model="form.provinces">
</el-cascader>
</el-form-item>
<el-form-item label="详细地址" prop="maskPostAddress" v-if="isAudit">
<el-input v-model="form.maskPostAddress" placeholder="请输入收件地址" style="width:350px" />
</el-form-item>
<!-- <el-form-item label="发货方式" prop="shipType" v-if="isAudit">-->
<!-- <el-select v-model="form.shipType" placeholder="发货类型" style="width:350px">-->
<!-- <el-option label="供应商代发" value="1"></el-option>-->
<!-- <el-option label="仓库发货" value="0"></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer" v-if="isAudit">
<el-button type="primary" @click="submitConfirmForm" v-if="form.auditStatus===0">确认发货</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {listOrder, pullOrder, getOrder, pushOms, pullOrderDetail} from "@/api/pdd/order";
import {listOrder, pullOrder, getOrder, pushOms, pullOrderDetail,confirmOrder} from "@/api/pdd/order";
import { listShop } from "@/api/shop/shop";
import { searchSku } from "@/api/goods/goods";
import {MessageBox} from "element-ui";
import {isRelogin} from "../../../utils/request";
import Clipboard from 'clipboard'
import {pcaTextArr} from "element-china-area-data";
export default {
name: "OrderPdd",
data() {
return {
pcaTextArr,
//
loading: true,
//
showSearch: true,
pullLoading: false,
isAudit: false,
//
ids: [],
//
single: true,
detailOpen: false,
multiple: true,
detailTitle: null,
//
total: 0,
//
@ -305,6 +429,7 @@ export default {
},
/** 搜索按钮操作 */
handleQuery() {
this.pullLoading = false
this.queryParams.pageNum = 1;
this.getList();
},
@ -399,6 +524,48 @@ export default {
this.$modal.msgSuccess("推送成功");
}).catch(() => {});
},
handleConfirm(row) {
this.reset();
const id = row.id || this.ids
getOrder(id).then(response => {
this.form = response.data;
this.form.provinces = []
this.form.provinces.push(response.data.provinceName)
this.form.provinces.push(response.data.cityName)
this.form.provinces.push(response.data.townName)
this.detailOpen = true;
this.detailTitle = "确认订单";
this.isAudit = true
});
},
submitConfirmForm(){
this.$refs["form"].validate(valid => {
if (valid) {
const form = {
orderId:this.form.id,
province:this.form.provinces[0],
city:this.form.provinces[1],
town:this.form.provinces[2],
address:this.form.maskPostAddress,
receiver:this.form.maskPostReceiver,
mobile:this.form.maskPostTel
}
confirmOrder(form).then(response => {
if(response.code===200){
this.$modal.msgSuccess("订单确认成功");
this.detailOpen = false;
this.isAudit = false
this.getList();
}else{
this.$modal.msgError(response.msg);
}
});
}
})
},
}
};
</script>