提交修改

This commit is contained in:
quyixiao 2025-11-06 20:21:58 +08:00
parent e78cce35f2
commit 3949ac0375
10 changed files with 252 additions and 63 deletions

View File

@ -0,0 +1,10 @@
package com.heyu.api.data.dto;
import lombok.Data;
@Data
public class WeiXinPayDelayDTO extends DelayDTO{
private Long tradeOrderId;
}

View File

@ -74,6 +74,8 @@ private static final long serialVersionUID = 1L;
public final static String activity_award_count = CLASS_NAME + "activity_award_count"; // 这次活动的奖励次数
public final static String transaction_id = CLASS_NAME + "transaction_id"; // 支付事务id
public final static String pay_type = CLASS_NAME + "pay_type"; // 支付方式weixin
public final static String gmt_pre_pay = CLASS_NAME + "gmt_pre_pay"; // 预支付时间
public final static String gmt_close = CLASS_NAME + "gmt_close"; // 订单关闭时间
//
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ -181,6 +183,10 @@ private static final long serialVersionUID = 1L;
private String transactionId;
//支付方式weixin
private String payType;
//预支付时间
private Date gmtPrePay;
//订单关闭时间
private Date gmtClose;
/**
*
* @return
@ -976,6 +982,36 @@ private static final long serialVersionUID = 1L;
this.payType = payType;
}
/**
* 预支付时间
* @return
*/
public Date getGmtPrePay() {
return gmtPrePay;
}
/**
* 预支付时间
* @param gmtPrePay
*/
public void setGmtPrePay(Date gmtPrePay) {
this.gmtPrePay = gmtPrePay;
}
/**
* 订单关闭时间
* @return
*/
public Date getGmtClose() {
return gmtClose;
}
/**
* 订单关闭时间
* @param gmtClose
*/
public void setGmtClose(Date gmtClose) {
this.gmtClose = gmtClose;
}
@Override
public String toString() {
return "VvTradeOrderLineEntity{" +
@ -1032,6 +1068,8 @@ private static final long serialVersionUID = 1L;
",activityAwardCount=" + activityAwardCount +
",transactionId=" + transactionId +
",payType=" + payType +
",gmtPrePay=" + gmtPrePay +
",gmtClose=" + gmtClose +
"}";
}
}

View File

@ -0,0 +1,53 @@
package com.heyu.api.data.enums;
public enum DelayTypeEnums {
delivered("delivered", "妥投","deliveredHandler"),
weixinPayClose("weixinPayClose", "微信支付关闭","weiXinPayCloseHandler");
private String type;
private String desc;
private String handler;
DelayTypeEnums(String type, String desc,String handler) {
this.type = type;
this.desc = desc;
this.handler = handler;
}
public static DelayTypeEnums getDelayTypeByType(String type) {
for (DelayTypeEnums value : DelayTypeEnums.values()) {
if (value.getType().equals(type)) {
return value;
}
}
return null;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getHandler() {
return handler;
}
public void setHandler(String handler) {
this.handler = handler;
}
}

View File

@ -17,6 +17,7 @@ import com.heyu.api.data.dto.PackageDelivedDelayDTO;
import com.heyu.api.data.dto.vv.KuaiDi100DTO;
import com.heyu.api.data.entity.vv.VvPackageEntity;
import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity;
import com.heyu.api.data.enums.DelayTypeEnums;
import com.heyu.api.data.enums.KuaiDi100StateEnums;
import com.heyu.api.data.kuaidi100.KuaiDi100Utils;
import com.heyu.api.data.kuaidi100.LogisticsMapUtils;
@ -117,6 +118,8 @@ public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEnt
) {
vvPackageEntity.setShippingFrom(kuaiDi100DTO.getRouteInfo().getFrom().getName());
}
// 如果查询出来包裹状态已经签收
if (KuaiDi100StateEnums.sign_receipt.getState().equals(kuaiDi100DTO.getState())) {
List<KuaiDi100DTO.DataDTO> dataDTOS = kuaiDi100DTO.getData();
@ -135,7 +138,7 @@ public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEnt
dto.setRole(role);
dto.setSendTime(DateUtils.formatDate(new Date(), com.heyu.api.data.utils.DateUtils.YYYY_MM_DD_HH_MM_SS));
dto.setDelayTime(DateUtils.formatDate(timeAfter15, com.heyu.api.data.utils.DateUtils.YYYY_MM_DD_HH_MM_SS));
dto.setType(DelayTypeEnums.delivered.getType());
int second = DateUtils.betweenSecond(time, timeAfter15);
log.info("VvPackageServiceImpl delay send :{}",JSON.toJSONString(dto));
// 通过广播模式发布延时消息 延时30分钟 持久化消息 消费后销毁 这里无需指定路由会广播至每个绑定此交换机的队列
@ -149,8 +152,6 @@ public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEnt
vvPackageEntity.setIscheck("2");
vvPackageEntity.setGmtSendMqDelivered(new Date());
List<VvTradeOrderLineEntity> tradeOrderLineEntities = tradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(trackNumber);
for (VvTradeOrderLineEntity tradeOrderLineEntity : tradeOrderLineEntities) {
tradeOrderLineEntity.setGmtSignReceipt(time);

View File

@ -1,30 +0,0 @@
package com.heyu.api.alibaba.request.mm.enums;
public enum DelayTypeEnums {
delivered("delivered", "妥投");
private String type;
private String desc;
DelayTypeEnums(String type, String desc) {
this.type = type;
this.desc = desc;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}

View File

@ -10,18 +10,21 @@ import com.heyu.api.alibaba.request.mm.order.resp.*;
import com.heyu.api.alibaba.request.vv.AppOrderRequest;
import com.heyu.api.common.annotation.Describe;
import com.heyu.api.data.dao.vv.*;
import com.heyu.api.data.dto.WeiXinPayDelayDTO;
import com.heyu.api.data.entity.vv.*;
import com.heyu.api.data.utils.BigDecimalUtil;
import com.heyu.api.data.utils.R;
import com.heyu.api.data.utils.SanUtils;
import com.heyu.api.data.utils.StringUtils;
import com.heyu.api.data.enums.DelayTypeEnums;
import com.heyu.api.data.enums.RoleEnums;
import com.heyu.api.data.utils.*;
import com.heyu.api.jsapi.JsapiPrepay;
import com.heyu.api.jsapi.dto.DirectAPIv3JsapiPrepayResponse;
import com.heyu.api.utils.ISelect;
import com.heyu.api.utils.PPageUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -68,6 +71,14 @@ public class AppOrderController {
@Autowired
private JsapiPrepay jsapiPrepay;
@Autowired
private RabbitTemplate rabbitTemplate;
@Value("${eb.config.rabbitQueue.delayExchangeName}")
private String delayExchangeName;
/***
* https://api.1024api.com/api-interface/app/order/list
*
@ -312,8 +323,27 @@ public class AppOrderController {
vvTradeOrderLineEntity.setPayType("weixin");
vvTradeOrderLineEntity.setStatus(OrderStatusEnums.wait_pay.getStatus());
vvTradeOrderLineEntity.setTransactionId(jsapiPrepayResponse.getPrepayId());
vvTradeOrderLineEntity.setGmtPrePay(new Date());
vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity);
}
// 发送订单关单的消息
Date currentTime= new Date();
Date after30 = DateUtils.addMinutes(currentTime,30);
Integer second = DateUtils.betweenSecond(currentTime, after30);
WeiXinPayDelayDTO weiXinPayDelayDTO = new WeiXinPayDelayDTO();
weiXinPayDelayDTO.setSendTime(DateUtils.formatDate(currentTime, com.heyu.api.data.utils.DateUtils.YYYY_MM_DD_HH_MM_SS));
weiXinPayDelayDTO.setDelayTime(DateUtils.formatDate(after30, com.heyu.api.data.utils.DateUtils.YYYY_MM_DD_HH_MM_SS));
weiXinPayDelayDTO.setType(DelayTypeEnums.weixinPayClose.getType());
weiXinPayDelayDTO.setRole( RoleEnums.user.getRole());
weiXinPayDelayDTO.setTradeOrderId(vvTradeOrderEntity.getId());
rabbitTemplate.convertAndSend(delayExchangeName, "", JSON.toJSONString(weiXinPayDelayDTO), message -> {
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
message.getMessageProperties().setDelay((second) * 1000); // 毫秒为单位指定此消息的延时时长 ,+ 1 尽量保证机器人跑完了再发送消息
return message;
});
}
return R.ok("订单创建成功");
}

View File

@ -0,0 +1,10 @@
package com.heyu.api.listener;
import com.heyu.api.data.utils.R;
public abstract class BaseDelayedHandler {
public abstract R handler(String message);
}

View File

@ -1,14 +1,10 @@
package com.heyu.api.listener;
import com.alibaba.fastjson.JSONObject;
import com.heyu.api.alibaba.request.mm.enums.DelayTypeEnums;
import com.heyu.api.alibaba.request.mm.enums.OrderStatusEnums;
import com.heyu.api.data.enums.DelayTypeEnums;
import com.heyu.api.data.dao.vv.VvPackageDao;
import com.heyu.api.data.dao.vv.VvTradeOrderLineDao;
import com.heyu.api.data.dto.PackageDelivedDelayDTO;
import com.heyu.api.data.entity.vv.VvPackageEntity;
import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity;
import com.heyu.api.data.enums.RoleEnums;
import com.heyu.api.data.utils.SpringContextUtils;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
@ -21,8 +17,6 @@ import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
@ -48,27 +42,16 @@ public class DelaySimpleRabbitListener {
log.info("DeliveredDelaySimpleRabbitListener delayQueue :{} message:{}", delayQueue, message);
Map<String, Object> map = JSONObject.parseObject(message, Map.class);
String type = map.get("type") + "";
if (DelayTypeEnums.delivered.getType().equals(type)) {
PackageDelivedDelayDTO packageDelivedDelayDTO = JSONObject.parseObject(message, PackageDelivedDelayDTO.class);
// 更新包信息
VvPackageEntity vvPackage = vvPackageDao.selectVvPackageById(packageDelivedDelayDTO.getPackageId());
vvPackage.setIscheck("3");
vvPackage.setGmtDelivered(new Date());
vvPackage.setDeliveredBy(RoleEnums.job.getRole());
DelayTypeEnums delayTypeEnums = DelayTypeEnums.getDelayTypeByType(type);
vvPackageDao.insertOrUpdateVvPackage(vvPackage);
// 更新子单信息
List<VvTradeOrderLineEntity> vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(vvPackage.getTrackNumber());
for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntityList) {
vvTradeOrderLineEntity.setDeliveredBy(RoleEnums.job.getRole());
vvTradeOrderLineEntity.setGmtDelivered(new Date());
vvTradeOrderLineEntity.setStatus(OrderStatusEnums.delivered.getStatus());
vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity);
}
if (delayTypeEnums == null) {
log.info("DelaySimpleRabbitListener type is :{}", type);
return;
}
BaseDelayedHandler baseDelayedHandler = SpringContextUtils.getBean(delayTypeEnums.getHandler());
baseDelayedHandler.handler(message);
} catch (Exception e) {
log.error("DeliveredDelaySimpleRabbitListener handle", e);
} finally {

View File

@ -0,0 +1,51 @@
package com.heyu.api.listener.delay.handler;
import com.alibaba.fastjson.JSONObject;
import com.heyu.api.alibaba.request.mm.enums.OrderStatusEnums;
import com.heyu.api.data.dao.vv.VvPackageDao;
import com.heyu.api.data.dao.vv.VvTradeOrderLineDao;
import com.heyu.api.data.dto.PackageDelivedDelayDTO;
import com.heyu.api.data.entity.vv.VvPackageEntity;
import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity;
import com.heyu.api.data.enums.RoleEnums;
import com.heyu.api.data.utils.R;
import com.heyu.api.listener.BaseDelayedHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component("deliveredHandler")
public class DeliveredHandler extends BaseDelayedHandler {
@Autowired
private VvPackageDao vvPackageDao;
@Autowired
private VvTradeOrderLineDao vvTradeOrderLineDao;
@Override
public R handler(String message) {
PackageDelivedDelayDTO packageDelivedDelayDTO = JSONObject.parseObject(message, PackageDelivedDelayDTO.class);
// 更新包信息
VvPackageEntity vvPackage = vvPackageDao.selectVvPackageById(packageDelivedDelayDTO.getPackageId());
vvPackage.setIscheck("3");
vvPackage.setGmtDelivered(new Date());
vvPackage.setDeliveredBy(RoleEnums.job.getRole());
vvPackageDao.insertOrUpdateVvPackage(vvPackage);
// 更新子单信息
List<VvTradeOrderLineEntity> vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(vvPackage.getTrackNumber());
for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntityList) {
vvTradeOrderLineEntity.setDeliveredBy(RoleEnums.job.getRole());
vvTradeOrderLineEntity.setGmtDelivered(new Date());
vvTradeOrderLineEntity.setStatus(OrderStatusEnums.delivered.getStatus());
vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity);
}
return R.ok();
}
}

View File

@ -0,0 +1,43 @@
package com.heyu.api.listener.delay.handler;
import com.alibaba.fastjson.JSONObject;
import com.heyu.api.alibaba.request.mm.enums.OrderStatusEnums;
import com.heyu.api.data.dao.vv.VvTradeOrderLineDao;
import com.heyu.api.data.dto.WeiXinPayDelayDTO;
import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity;
import com.heyu.api.data.utils.R;
import com.heyu.api.listener.BaseDelayedHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component("weiXinPayCloseHandler")
public class WeiXinPayCloseHandler extends BaseDelayedHandler {
@Autowired
private VvTradeOrderLineDao vvTradeOrderLineDao;
@Override
public R handler(String message) {
WeiXinPayDelayDTO weiXinPayDelayDTO = JSONObject.parseObject(message, WeiXinPayDelayDTO.class);
List<VvTradeOrderLineEntity> vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(weiXinPayDelayDTO.getTradeOrderId());
for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntities) {
if(OrderStatusEnums.wait_pay.getStatus().equals(vvTradeOrderLineEntity.getStatus())){
vvTradeOrderLineEntity.setStatus(OrderStatusEnums.close.getStatus());
vvTradeOrderLineEntity.setGmtClose(new Date());
vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity);
}
}
return R.ok();
}
}