优化wei订单拉取

This commit is contained in:
启航 2026-01-25 17:53:56 +08:00
parent b561226db7
commit 5c35a114ae
7 changed files with 134 additions and 71 deletions

View File

@ -41,22 +41,6 @@ public class DouOrderContoller extends BaseController {
return success(orderService.queryDetailById(id));
}
/**
* 手动推送到系统
* @param bo
* @return
*/
@PostMapping("/push_oms")
@ResponseBody
public AjaxResult pushOms(@RequestBody DouOrderPushBo bo) {
// TODO:需要优化消息格式
if(bo!=null && bo.getIds()!=null) {
for(String id: bo.getIds()) {
mqUtils.sendApiMessage(MqMessage.build(EnumShopType.DOU, MqType.ORDER_MESSAGE, id));
}
}
return success();
}
@PostMapping("/confirmOrder")
public AjaxResult confirmOrder(@RequestBody DouOrderConfirmBo bo) {

View File

@ -14,6 +14,7 @@ import cn.qihangerp.open.wei.model.OrderDetailDeliverInfoAddress;
import cn.qihangerp.security.common.BaseController;
import com.alibaba.fastjson2.JSONObject;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -21,16 +22,22 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import cn.qihangerp.model.request.OrderPullRequest;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@RequestMapping("/wei/order")
@RestController
@AllArgsConstructor
public class WeiOrderApiController extends BaseController {
private final WeiApiCommon apiCommon;
private final WeiOrderService weiOrderService;
private final String DATE_PATTERN =
"^(?:(?:(?:\\d{4}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1\\d|2[0-8]))|(?:(?:(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:(?:0[48]|[2468][048]|[13579][26])00))-0?2-29))$)|(?:(?:(?:\\d{4}-(?:0?[13578]|1[02]))-(?:0?[1-9]|[12]\\d|30))$)|(?:(?:(?:\\d{4}-0?[13-9]|1[0-2])-(?:0?[1-9]|[1-2]\\d|30))$)|(?:(?:(?:\\d{2}(?:0[48]|[13579][26]|[2468][048])|(?:(?:0[48]|[13579][26]|[2468][048])00))-0?2-29))$)$";
private final Pattern DATE_FORMAT = Pattern.compile(DATE_PATTERN);
/**
* 拉取订单
* @param params
@ -41,6 +48,16 @@ public class WeiOrderApiController extends BaseController {
if (params.getShopId() == null || params.getShopId() <= 0) {
return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误没有店铺Id");
}
if (StringUtils.isEmpty(params.getStartTime())) {
return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有下单日期");
}
// 判断时间格式
Matcher matcher = DATE_FORMAT.matcher(params.getStartTime());
boolean b = matcher.find();
if (!b) {
return AjaxResult.error("下单日期格式错误");
}
var checkResult = apiCommon.checkBefore(params.getShopId());
if (checkResult.getCode() != ResultVoEnum.SUCCESS.getIndex()) {
@ -50,8 +67,9 @@ public class WeiOrderApiController extends BaseController {
String accessToken = checkResult.getData().getAccessToken();
// String appKey = checkResult.getData().getAppKey();
// String appSecret = checkResult.getData().getAppSecret();
LocalDateTime endTime = LocalDateTime.now();
LocalDateTime startTime = endTime.minusHours(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(params.getStartTime() + " 00:00:01", formatter);
LocalDateTime endTime = LocalDateTime.parse(params.getStartTime() + " 23:59:59", formatter);
ApiResultVo<Order> orderApiResultVo = WeiOrderApiHelper.pullOrderList(startTime, endTime, accessToken,1,100);
// ApiResultVo<Order> apiResultVo = OrderApiHelper.pullOrderList(startTime, endTime, accessToken);
@ -138,13 +156,14 @@ public class WeiOrderApiController extends BaseController {
} else if (result.getCode() == ResultVoEnum.SUCCESS.getIndex()) {
insertSuccess++;
} else {
log.error(result.getMsg());
totalError++;
}
}
}
}
return AjaxResult.success();
String msg = "成功{startTime:"+startTime.format(formatter)+",endTime:"+endTime.format(formatter)+"} 新增:" + insertSuccess + "条,添加错误:" + totalError + "条,更新:" + hasExistOrder + "";
return AjaxResult.success(msg);
}
/**

View File

@ -8,6 +8,7 @@ import cn.qihangerp.common.enums.EnumShopType;
import cn.qihangerp.common.mq.MqMessage;
import cn.qihangerp.common.mq.MqType;
import cn.qihangerp.common.mq.MqUtils;
import cn.qihangerp.model.bo.WeiOrderBo;
import cn.qihangerp.model.entity.WeiOrder;
import cn.qihangerp.model.bo.WeiOrderConfirmBo;
import cn.qihangerp.model.bo.WeiOrderPushBo;
@ -27,7 +28,7 @@ public class WeiOrderController extends BaseController {
private final WeiOrderService orderService;
private final MqUtils mqUtils;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public TableDataInfo orderList(WeiOrder bo, PageQuery pageQuery) {
public TableDataInfo orderList(WeiOrderBo bo, PageQuery pageQuery) {
PageResult<WeiOrder> result = orderService.queryPageList(bo, pageQuery);
return getDataTable(result);
@ -39,17 +40,7 @@ public class WeiOrderController extends BaseController {
return success(orderService.queryDetailById(id));
}
@PostMapping("/push_oms")
@ResponseBody
public AjaxResult pushOms(@RequestBody WeiOrderPushBo bo) {
// TODO:需要优化消息格式
if(bo!=null && bo.getIds()!=null) {
for(String id: bo.getIds()) {
mqUtils.sendApiMessage(MqMessage.build(EnumShopType.WEI, MqType.ORDER_MESSAGE, id));
}
}
return success();
}
@PostMapping("/confirmOrder")
public AjaxResult confirmOrder(@RequestBody WeiOrderConfirmBo bo) {
log.info("=========确认订单======={}", JSONObject.toJSONString(bo));

View File

@ -0,0 +1,14 @@
package cn.qihangerp.model.bo;
import lombok.Data;
import java.io.Serializable;
@Data
public class WeiOrderBo implements Serializable {
private String orderId;
private Long shopId;
private String startTime;
private String endTime;
private Integer status;
}

View File

@ -3,6 +3,7 @@ package cn.qihangerp.module.service;
import cn.qihangerp.common.PageQuery;
import cn.qihangerp.common.PageResult;
import cn.qihangerp.common.ResultVo;
import cn.qihangerp.model.bo.WeiOrderBo;
import cn.qihangerp.model.entity.WeiOrder;
import cn.qihangerp.model.bo.WeiOrderConfirmBo;
import com.baomidou.mybatisplus.extension.service.IService;
@ -14,7 +15,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @createDate 2024-06-03 16:48:31
*/
public interface WeiOrderService extends IService<WeiOrder> {
PageResult<WeiOrder> queryPageList(WeiOrder bo, PageQuery pageQuery);
PageResult<WeiOrder> queryPageList(WeiOrderBo bo, PageQuery pageQuery);
ResultVo<Integer> saveOrder(Long shopId, WeiOrder order);
WeiOrder queryDetailById(Long id);
WeiOrder queryDetailByOrderId(String orderId);

View File

@ -7,11 +7,8 @@ import cn.qihangerp.common.ResultVoEnum;
import cn.qihangerp.common.enums.EnumShopType;
import cn.qihangerp.mapper.ErpOrderItemMapper;
import cn.qihangerp.mapper.ErpOrderMapper;
import cn.qihangerp.model.entity.OOrder;
import cn.qihangerp.model.entity.OOrderItem;
import cn.qihangerp.model.entity.WeiGoodsSku;
import cn.qihangerp.model.entity.WeiOrder;
import cn.qihangerp.model.entity.WeiOrderItem;
import cn.qihangerp.model.bo.WeiOrderBo;
import cn.qihangerp.model.entity.*;
import cn.qihangerp.model.bo.WeiOrderConfirmBo;
import cn.qihangerp.mapper.WeiGoodsSkuMapper;
import cn.qihangerp.mapper.WeiOrderItemMapper;
@ -32,8 +29,12 @@ import org.springframework.util.StringUtils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author TW
@ -50,21 +51,54 @@ public class WeiOrderServiceImpl extends ServiceImpl<WeiOrderMapper, WeiOrder>
private final ErpOrderMapper erpOrderMapper;
private final ErpOrderItemMapper erpOrderItemMapper;
// private final MQClientService mqClientService;
private final String DATE_PATTERN =
"^(?:(?:(?:\\d{4}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1\\d|2[0-8]))|(?:(?:(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:(?:0[48]|[2468][048]|[13579][26])00))-0?2-29))$)|(?:(?:(?:\\d{4}-(?:0?[13578]|1[02]))-(?:0?[1-9]|[12]\\d|30))$)|(?:(?:(?:\\d{4}-0?[13-9]|1[0-2])-(?:0?[1-9]|[1-2]\\d|30))$)|(?:(?:(?:\\d{2}(?:0[48]|[13579][26]|[2468][048])|(?:(?:0[48]|[13579][26]|[2468][048])00))-0?2-29))$)$";
private final Pattern DATE_FORMAT = Pattern.compile(DATE_PATTERN);
@Override
public PageResult<WeiOrder> queryPageList(WeiOrder bo, PageQuery pageQuery) {
public PageResult<WeiOrder> queryPageList(WeiOrderBo bo, PageQuery pageQuery) {
Long startTimestamp = null;
Long endTimestamp = null;
if(StringUtils.hasText(bo.getStartTime())){
Matcher matcher = DATE_FORMAT.matcher(bo.getStartTime());
boolean b = matcher.find();
if(!b){
bo.setStartTime("");
}
}
if(StringUtils.hasText(bo.getEndTime())){
Matcher matcher = DATE_FORMAT.matcher(bo.getEndTime());
boolean b = matcher.find();
if(!b){
bo.setEndTime("");
}
}else{
if(StringUtils.hasText(bo.getStartTime())) {
bo.setEndTime(bo.getStartTime());
}
}
if(StringUtils.hasText(bo.getStartTime())) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(bo.getStartTime()+" 00:00:00", formatter);
LocalDateTime endTime = LocalDateTime.parse(bo.getEndTime()+" 23:59:59", formatter);
startTimestamp = startTime.toEpochSecond(ZoneOffset.ofHours(8));
endTimestamp = endTime.toEpochSecond(ZoneOffset.ofHours(8));
}
LambdaQueryWrapper<WeiOrder> queryWrapper = new LambdaQueryWrapper<WeiOrder>()
.eq(bo.getShopId()!=null, WeiOrder::getShopId,bo.getShopId())
.eq(StringUtils.hasText(bo.getOrderId()), WeiOrder::getOrderId,bo.getOrderId())
.eq(bo.getStatus()!=null, WeiOrder::getStatus,bo.getStatus())
.ge(StringUtils.hasText(bo.getStartTime()), WeiOrder::getCreateTime, startTimestamp)
.le(StringUtils.hasText(bo.getEndTime()),WeiOrder::getCreateTime,endTimestamp)
;
if(bo.getErpSendStatus()!=null){
if(bo.getErpSendStatus()==-1) {
queryWrapper.lt(WeiOrder::getErpSendStatus,3);
}else {
queryWrapper.eq(WeiOrder::getErpSendStatus, bo.getErpSendStatus());
}
}
// if(bo.getErpSendStatus()!=null){
// if(bo.getErpSendStatus()==-1) {
// queryWrapper.lt(WeiOrder::getErpSendStatus,3);
// }else {
// queryWrapper.eq(WeiOrder::getErpSendStatus, bo.getErpSendStatus());
// }
// }
Page<WeiOrder> page = mapper.selectPage(pageQuery.build(), queryWrapper);
if(page.getRecords()!=null){
@ -100,9 +134,9 @@ public class WeiOrderServiceImpl extends ServiceImpl<WeiOrderMapper, WeiOrder>
if (taoOrderItems != null && taoOrderItems.size() > 0) {
// 更新
WeiOrderItem itemUpdate = new WeiOrderItem();
itemUpdate.setId(taoOrderItems.get(0).getId());
itemMapper.updateById(itemUpdate);
item.setId(taoOrderItems.get(0).getId());
itemMapper.updateById(item);
} else {
// 新增
item.setShopId(shopId);
@ -126,6 +160,7 @@ public class WeiOrderServiceImpl extends ServiceImpl<WeiOrderMapper, WeiOrder>
return ResultVo.success();
}
} catch (Exception e) {
log.error(e.getMessage(), e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResultVo.error(ResultVoEnum.SystemException, "系统异常:" + e.getMessage());
}

View File

@ -20,21 +20,26 @@
</el-select>
</el-form-item>
<el-form-item label="下单日期" prop="orderCreateTime">
<el-date-picker clearable
v-model="queryParams.orderCreateTime"
<el-form-item label="下单日期" prop="startTime">
<el-date-picker clearable @change="handleQuery"
v-model="queryParams.startTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择订单创建时间">
</el-date-picker>
</el-form-item>
<el-form-item label="订单状态" prop="statusStr">
<el-input
v-model="queryParams.statusStr"
placeholder="请输入订单状态"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="订单状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable @change="handleQuery">
<el-option label="待付款" value="10"></el-option>
<el-option label="礼物待收下" value="12"></el-option>
<el-option label="一起买待成团" value="13"></el-option>
<el-option label="待发货" value="20"></el-option>
<el-option label="部分发货" value="21"></el-option>
<el-option label="待收货" value="30"></el-option>
<el-option label="完成" value="100"></el-option>
<el-option label="全部商品售后之后,订单取消" value="200"></el-option>
<el-option label="未付款用户主动取消或超时未付款订单自动取消" value="250"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@ -154,7 +159,7 @@
</template>
</el-table-column>
<el-table-column label="收件人信息" align="center" prop="userName" >
<el-table-column label="收件人信息" align="left" prop="userName" >
<template slot-scope="scope">
<span>{{scope.row.userName}}</span><br />
<span> {{scope.row.provinceName}} {{scope.row.cityName}} {{scope.row.countyName}}
@ -168,9 +173,14 @@
<el-table-column label="订单状态" align="center" prop="status" >
<template slot-scope="scope">
<el-tag v-if="scope.row.status === 10 " size="small">待付款</el-tag>
<el-tag v-if="scope.row.status === 12 " size="small">礼物待收下</el-tag>
<el-tag v-if="scope.row.status === 13 " size="small">一起买待成团</el-tag>
<el-tag v-if="scope.row.status === 20 " size="small">待发货</el-tag>
<el-tag v-if="scope.row.status === 21 " size="small">部分发货</el-tag>
<el-tag v-if="scope.row.status === 30 " size="small">待收货</el-tag>
<el-tag v-if="scope.row.status === 100 " size="small">完成</el-tag>
<el-tag v-if="scope.row.status === 200 " size="small">订单取消</el-tag>
<el-tag v-if="scope.row.status === 250 " size="small">未付款订单自动取消</el-tag>
<br/>
<el-tag style="margin-top: 5px" type="warning" v-if="scope.row.auditStatus === 0 " size="small">待确认</el-tag>
</template>
@ -459,17 +469,26 @@ export default {
this.multiple = !selection.length
},
handlePull() {
if(this.queryParams.shopId){
this.pullLoading = true
pullOrder({shopId:this.queryParams.shopId}).then(response => {
console.log('拉取订单接口返回=====',response)
this.$modal.msgSuccess(JSON.stringify(response));
this.pullLoading = false
this.getList()
})
}else{
this.$modal.msgSuccess("请先选择店铺");
if (!this.queryParams.shopId) {
this.$modal.msgError("请选择店铺");
return
}
if (!this.queryParams.startTime) {
this.$modal.msgError("请选择下单时间");
return
}
this.pullLoading = true
pullOrder({shopId:this.queryParams.shopId,startTime:this.queryParams.startTime}).then(response => {
console.log('拉取订单接口返回=====',response)
if(response.code === 200){
this.$modal.msgSuccess(JSON.stringify(response));
this.getList()
}else{
this.$modal.msgError(response.msg)
}
this.pullLoading = false
})
// this.$modal.msgSuccess("API");
},