提交修改

This commit is contained in:
quyixiao 2025-10-23 19:17:39 +08:00
parent 5f5f17761c
commit 68b96deeb6
15 changed files with 485 additions and 154 deletions

View File

@ -2,8 +2,7 @@
package com.heyu.api.data.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
@ -12,6 +11,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @author wutao
* @description mq配置
@ -63,6 +65,30 @@ public class RabbitConfig {
@Bean
public Queue delayQueue(@Value("${eb.config.rabbitQueue.delayQueue}") String queueName) {
return new Queue(queueName,true);
}
// ---------------------------- 定义exchange ---------------------------------
// 定义广播模式的延时交换机 无需绑定路由
@Bean
FanoutExchange delayExchange(@Value("${eb.config.rabbitQueue.delayExchangeName}") String delay_exchange_name){
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-delayed-type", "direct");
FanoutExchange topicExchange = new FanoutExchange(delay_exchange_name, true, false, args);
topicExchange.setDelayed(true);
return topicExchange;
}
// 绑定延时队列与交换机
@Bean
public Binding delayPayBind(@Value("${eb.config.rabbitQueue.delayQueue}") String delay_queue_name,
@Value("${eb.config.rabbitQueue.delayExchangeName}") String delay_exchange_name ) {
return BindingBuilder.bind(delayQueue(delay_queue_name)).to(delayExchange(delay_exchange_name));
}

View File

@ -13,6 +13,7 @@ import com.heyu.api.data.entity.vv.VvPackageEntity;
import com.lz.mybatis.plugin.annotations.IFNullReturnEmpty;
import com.lz.mybatis.plugin.annotations.IN;
import com.lz.mybatis.plugin.annotations.LIMIT;
import com.lz.mybatis.plugin.annotations.NotIn;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -49,4 +50,5 @@ public interface VvPackageDao extends BaseMapper<VvPackageEntity> {
@LIMIT
VvPackageEntity selectVvPackageByTrackNumber(String trackNumber);
List<VvPackageEntity> selectVvPackageByIsCheckNotIN(@NotIn List<String> ischeck);
}

View File

@ -0,0 +1,23 @@
package com.heyu.api.data.dto;
import lombok.Data;
@Data
public class DelayDTO {
private String sendTime;
/***
*
*/
private String delayTime;
/***
* 谁调用的
*/
private String role;
/***
* 当前类型
*/
private String type;
}

View File

@ -0,0 +1,11 @@
package com.heyu.api.data.dto;
import lombok.Data;
@Data
public class PackageDelivedDelayDTO extends DelayDTO{
private String packageId;
}

View File

@ -1,16 +1,16 @@
package com.heyu.api.data.entity.vv;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.lz.mybatis.plugin.annotations.AS;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Date;import java.util.Date;
/**
*购物车
* @author quyixiao
* @since 2025-10-22
* @since 2025-10-23
*/
@Data
@ -39,10 +39,6 @@ private static final long serialVersionUID = 1L;
public final static String sku_id = CLASS_NAME + "sku_id"; // skuid
public final static String sku_image_url = CLASS_NAME + "sku_image_url"; // sku图片
public final static String comment_id = CLASS_NAME + "comment_id"; // 评论 id
public final static String gmt_down_order = CLASS_NAME + "gmt_down_order"; // 下单时间
public final static String gmt_pay = CLASS_NAME + "gmt_pay"; // 支付时间
public final static String gmt_to_shipping = CLASS_NAME + "gmt_to_shipping"; // 打包时间
public final static String gmt_delivered = CLASS_NAME + "gmt_delivered"; // 妥投时间
public final static String delivered_type = CLASS_NAME + "delivered_type"; // 1 买家手动确认收货 2 系统自动确认收货
public final static String settle_status = CLASS_NAME + "settle_status"; // 0 未结算1 已经结算
public final static String gmt_settle = CLASS_NAME + "gmt_settle"; // 结算时间
@ -63,6 +59,13 @@ private static final long serialVersionUID = 1L;
public final static String batch_num = CLASS_NAME + "batch_num"; // 批次数量
public final static String shipping_amount = CLASS_NAME + "shipping_amount"; // 运费
public final static String promotion_price = CLASS_NAME + "promotion_price"; // 当时促销价
public final static String state_ = CLASS_NAME + "state"; // 快递单当前状态默认为0在途1揽收2疑难3签收4退签5派件8清关14拒签等10个基础物流状态如需要返回高级物流状态请参考 resultv2 传值
public final static String gmt_down_order = CLASS_NAME + "gmt_down_order"; // 下单时间
public final static String gmt_pay = CLASS_NAME + "gmt_pay"; // 支付时间
public final static String gmt_to_shipping = CLASS_NAME + "gmt_to_shipping"; // 打包时间
public final static String gmt_sign_receipt = CLASS_NAME + "gmt_sign_receipt"; // 签收日期
public final static String gmt_delivered = CLASS_NAME + "gmt_delivered"; // 妥投时间
public final static String delivered_by = CLASS_NAME + "delivered_by"; // system:系统user:用户 admin 后台确认
//
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ -100,14 +103,6 @@ private static final long serialVersionUID = 1L;
private String skuImageUrl;
//评论 id
private Long commentId;
//下单时间
private Date gmtDownOrder;
//支付时间
private Date gmtPay;
//打包时间
private Date gmtToShipping;
//妥投时间
private Date gmtDelivered;
//1 买家手动确认收货 2 系统自动确认收货
private Integer deliveredType;
//0 未结算1 已经结算
@ -148,6 +143,20 @@ private static final long serialVersionUID = 1L;
private BigDecimal shippingAmount;
//当时促销价
private BigDecimal promotionPrice;
//快递单当前状态默认为0在途1揽收2疑难3签收4退签5派件8清关14拒签等10个基础物流状态如需要返回高级物流状态请参考 resultv2 传值
private String state;
//下单时间
private Date gmtDownOrder;
//支付时间
private Date gmtPay;
//打包时间
private Date gmtToShipping;
//签收日期
private Date gmtSignReceipt;
//妥投时间
private Date gmtDelivered;
//system:系统user:用户 admin 后台确认
private String deliveredBy;
/**
*
* @return
@ -418,66 +427,6 @@ private static final long serialVersionUID = 1L;
this.commentId = commentId;
}
/**
* 下单时间
* @return
*/
public Date getGmtDownOrder() {
return gmtDownOrder;
}
/**
* 下单时间
* @param gmtDownOrder
*/
public void setGmtDownOrder(Date gmtDownOrder) {
this.gmtDownOrder = gmtDownOrder;
}
/**
* 支付时间
* @return
*/
public Date getGmtPay() {
return gmtPay;
}
/**
* 支付时间
* @param gmtPay
*/
public void setGmtPay(Date gmtPay) {
this.gmtPay = gmtPay;
}
/**
* 打包时间
* @return
*/
public Date getGmtToShipping() {
return gmtToShipping;
}
/**
* 打包时间
* @param gmtToShipping
*/
public void setGmtToShipping(Date gmtToShipping) {
this.gmtToShipping = gmtToShipping;
}
/**
* 妥投时间
* @return
*/
public Date getGmtDelivered() {
return gmtDelivered;
}
/**
* 妥投时间
* @param gmtDelivered
*/
public void setGmtDelivered(Date gmtDelivered) {
this.gmtDelivered = gmtDelivered;
}
/**
* 1 买家手动确认收货 2 系统自动确认收货
* @return
@ -778,6 +727,111 @@ private static final long serialVersionUID = 1L;
this.promotionPrice = promotionPrice;
}
/**
* 快递单当前状态默认为0在途1揽收2疑难3签收4退签5派件8清关14拒签等10个基础物流状态如需要返回高级物流状态请参考 resultv2 传值
* @return
*/
public String getState() {
return state;
}
/**
* 快递单当前状态默认为0在途1揽收2疑难3签收4退签5派件8清关14拒签等10个基础物流状态如需要返回高级物流状态请参考 resultv2 传值
* @param state
*/
public void setState(String state) {
this.state = state;
}
/**
* 下单时间
* @return
*/
public Date getGmtDownOrder() {
return gmtDownOrder;
}
/**
* 下单时间
* @param gmtDownOrder
*/
public void setGmtDownOrder(Date gmtDownOrder) {
this.gmtDownOrder = gmtDownOrder;
}
/**
* 支付时间
* @return
*/
public Date getGmtPay() {
return gmtPay;
}
/**
* 支付时间
* @param gmtPay
*/
public void setGmtPay(Date gmtPay) {
this.gmtPay = gmtPay;
}
/**
* 打包时间
* @return
*/
public Date getGmtToShipping() {
return gmtToShipping;
}
/**
* 打包时间
* @param gmtToShipping
*/
public void setGmtToShipping(Date gmtToShipping) {
this.gmtToShipping = gmtToShipping;
}
/**
* 签收日期
* @return
*/
public Date getGmtSignReceipt() {
return gmtSignReceipt;
}
/**
* 签收日期
* @param gmtSignReceipt
*/
public void setGmtSignReceipt(Date gmtSignReceipt) {
this.gmtSignReceipt = gmtSignReceipt;
}
/**
* 妥投时间
* @return
*/
public Date getGmtDelivered() {
return gmtDelivered;
}
/**
* 妥投时间
* @param gmtDelivered
*/
public void setGmtDelivered(Date gmtDelivered) {
this.gmtDelivered = gmtDelivered;
}
/**
* system:系统user:用户 admin 后台确认
* @return
*/
public String getDeliveredBy() {
return deliveredBy;
}
/**
* system:系统user:用户 admin 后台确认
* @param deliveredBy
*/
public void setDeliveredBy(String deliveredBy) {
this.deliveredBy = deliveredBy;
}
@Override
public String toString() {
return "VvTradeOrderLineEntity{" +
@ -799,10 +853,6 @@ private static final long serialVersionUID = 1L;
",skuId=" + skuId +
",skuImageUrl=" + skuImageUrl +
",commentId=" + commentId +
",gmtDownOrder=" + gmtDownOrder +
",gmtPay=" + gmtPay +
",gmtToShipping=" + gmtToShipping +
",gmtDelivered=" + gmtDelivered +
",deliveredType=" + deliveredType +
",settleStatus=" + settleStatus +
",gmtSettle=" + gmtSettle +
@ -823,6 +873,13 @@ private static final long serialVersionUID = 1L;
",batchNum=" + batchNum +
",shippingAmount=" + shippingAmount +
",promotionPrice=" + promotionPrice +
",state=" + state +
",gmtDownOrder=" + gmtDownOrder +
",gmtPay=" + gmtPay +
",gmtToShipping=" + gmtToShipping +
",gmtSignReceipt=" + gmtSignReceipt +
",gmtDelivered=" + gmtDelivered +
",deliveredBy=" + deliveredBy +
"}";
}
}

View File

@ -0,0 +1,36 @@
package com.heyu.api.data.enums;
public enum RoleEnums {
system("system","系统"),
user("user","用户"),
admin("admin","后台"),
job("job","定时任务"),
kuaidi100_callback("kuaidi100_callback","快递100回调"),
;
RoleEnums(String role, String desc) {
this.role = role;
this.desc = desc;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
private String role;
private String desc;
}

View File

@ -1,82 +1,106 @@
package com.heyu.api.data.service.impl.vv;
/**
* <p>
* 包裹表 服务类
* </p>
*
* @author quyixiao
* @since 2025-08-23
*/
* <p>
* 包裹表 服务类
* </p>
*
* @author quyixiao
* @since 2025-08-23
*/
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.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.KuaiDi100StateEnums;
import com.heyu.api.data.kuaidi100.KuaiDi100Utils;
import com.heyu.api.data.kuaidi100.LogisticsMapUtils;
import com.heyu.api.data.service.vv.VvPackageService;
import com.heyu.api.data.utils.DateUtils;
import com.heyu.api.data.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service
@Slf4j
public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEntity> implements VvPackageService {
@Autowired
private VvPackageDao vvPackageDao;
private VvPackageDao vvPackageDao;
@Override
public VvPackageEntity selectVvPackageById(Long id){
return vvPackageDao.selectVvPackageById(id);
}
@Value("${eb.config.rabbitQueue.delayQueue}")
private String delayQueue;
@Value("${eb.config.rabbitQueue.delayExchangeName}")
private String delayExchangeName;
@Override
public Long insertVvPackage(VvPackageEntity vvPackage){
return vvPackageDao.insertVvPackage(vvPackage);
}
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private VvTradeOrderLineDao tradeOrderLineDao;
@Override
public Long insertOrUpdateVvPackage(VvPackageEntity vvPackage){
return vvPackageDao.insertOrUpdateVvPackage(vvPackage);
}
@Override
public int updateVvPackageById(VvPackageEntity vvPackage){
return vvPackageDao.updateVvPackageById(vvPackage);
}
@Override
public int updateCoverVvPackageById(VvPackageEntity vvPackage){
return vvPackageDao.updateCoverVvPackageById(vvPackage);
}
@Override
public int deleteVvPackageById(Long id){
return vvPackageDao.deleteVvPackageById(id);
}
@Override
public KuaiDi100DTO selectVvKuaidiAndUpdateData(String trackNumber) {
public VvPackageEntity selectVvPackageById(Long id) {
return vvPackageDao.selectVvPackageById(id);
}
@Override
public Long insertVvPackage(VvPackageEntity vvPackage) {
return vvPackageDao.insertVvPackage(vvPackage);
}
@Override
public Long insertOrUpdateVvPackage(VvPackageEntity vvPackage) {
return vvPackageDao.insertOrUpdateVvPackage(vvPackage);
}
@Override
public int updateVvPackageById(VvPackageEntity vvPackage) {
return vvPackageDao.updateVvPackageById(vvPackage);
}
@Override
public int updateCoverVvPackageById(VvPackageEntity vvPackage) {
return vvPackageDao.updateCoverVvPackageById(vvPackage);
}
@Override
public int deleteVvPackageById(Long id) {
return vvPackageDao.deleteVvPackageById(id);
}
@Override
public KuaiDi100DTO selectVvKuaidiAndUpdateData(String trackNumber, String role) {
VvPackageEntity vvPackageEntity = vvPackageDao.selectVvPackageByTrackNumber(trackNumber);
KuaiDi100DTO kuaiDi100DTO = null;
// 如果是已经签收状态
if (KuaiDi100StateEnums.sign_receipt.getState().equals(vvPackageEntity.getState())) {
kuaiDi100DTO = JSONObject.parseObject(vvPackageEntity.getPackageLogisticsInfo(), KuaiDi100DTO.class);
} else {
} else { //如果当次查到的是已经签收状态
kuaiDi100DTO = KuaiDi100Utils.getLogisticsInfo(trackNumber);
vvPackageEntity.setIscheck(kuaiDi100DTO.getIscheck());
vvPackageEntity.setCom(kuaiDi100DTO.getCom());
@ -86,18 +110,60 @@ public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEnt
if (StringUtils.isBlank(vvPackageEntity.getLogisticsCompany())
&& StringUtils.isNotEmpty(kuaiDi100DTO.getCom())) {
vvPackageEntity.setLogisticsCompany(LogisticsMapUtils.getLogisticsCompanyName(kuaiDi100DTO.getCom()));
}
if (kuaiDi100DTO.getRouteInfo() != null
&& kuaiDi100DTO.getRouteInfo().getFrom() != null
) {
vvPackageEntity.setShippingFrom(kuaiDi100DTO.getRouteInfo().getFrom().getName());
}
// 如果查询出来包裹状态已经签收
if (KuaiDi100StateEnums.sign_receipt.getState().equals(kuaiDi100DTO.getState())) {
List<KuaiDi100DTO.DataDTO> dataDTOS = kuaiDi100DTO.getData();
if (dataDTOS != null && dataDTOS.size() > 0) {
for (KuaiDi100DTO.DataDTO dataDTO : dataDTOS) {
String status = dataDTO.getStatus();
if (KuaiDi100StateEnums.sign_receipt.getDesc().equals(status)) {
String fTime = dataDTO.getFtime();
Date time = DateUtils.parseDate(fTime);
Date timeAfter15 = DateUtils.addDays(time, 15);
// 设置签收时间
vvPackageEntity.setGmtSignReceipt(time);
PackageDelivedDelayDTO dto = new PackageDelivedDelayDTO();
dto.setPackageId(vvPackageEntity.getId() + "");
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));
int second = DateUtils.betweenSecond(time, timeAfter15);
log.info("VvPackageServiceImpl delay send :{}",JSON.toJSONString(dto));
// 通过广播模式发布延时消息 延时30分钟 持久化消息 消费后销毁 这里无需指定路由会广播至每个绑定此交换机的队列
rabbitTemplate.convertAndSend(delayExchangeName, "", JSON.toJSONString(dto), message -> {
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
message.getMessageProperties().setDelay((second) * 1000); // 毫秒为单位指定此消息的延时时长 ,+ 1 尽量保证机器人跑完了再发送消息
return message;
});
// 设置已经发送消息了
vvPackageEntity.setIscheck("2");
vvPackageEntity.setGmtSendMqDelivered(new Date());
List<VvTradeOrderLineEntity> tradeOrderLineEntities = tradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(trackNumber);
for (VvTradeOrderLineEntity tradeOrderLineEntity : tradeOrderLineEntities) {
tradeOrderLineEntity.setGmtSignReceipt(time);
tradeOrderLineEntity.setState(kuaiDi100DTO.getState());
tradeOrderLineDao.updateVvTradeOrderLineById(tradeOrderLineEntity);
}
}
}
}
}
vvPackageDao.updateVvPackageById(vvPackageEntity);
}
return kuaiDi100DTO;
}

View File

@ -32,5 +32,5 @@ public interface VvPackageService extends IService<VvPackageEntity> {
int deleteVvPackageById(Long id);
KuaiDi100DTO selectVvKuaidiAndUpdateData(String trackNumber);
KuaiDi100DTO selectVvKuaidiAndUpdateData(String trackNumber,String role);
}

View File

@ -49,7 +49,7 @@ public class MysqlMain_update {
List<TablesBean> list = new ArrayList<TablesBean>();
String a = "vv_package";
String a = "vv_trade_order_line";
for (String s : a.split(",")) {
list.add(new TablesBean(s));
}

View File

@ -2,8 +2,8 @@ package com.heyu.api.controller.vv;
import com.google.gson.Gson;
import com.heyu.api.common.annotation.Describe;
import com.heyu.api.data.dao.vv.VvPackageDao;
import com.heyu.api.data.entity.vv.VvPackageEntity;
import com.heyu.api.data.enums.RoleEnums;
import com.heyu.api.data.service.vv.VvPackageService;
import com.kuaidi100.sdk.response.SubscribePushParamResp;
import com.kuaidi100.sdk.response.SubscribePushResult;
import com.kuaidi100.sdk.response.SubscribeResp;
@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
public class AppKuaiDiCallBackController {
@Autowired
private VvPackageDao vvPackageDao;
private VvPackageService vvPackageService;
/***
* https://api.1024api.com/api-interface/app/kuaidi/callback
@ -30,7 +30,7 @@ public class AppKuaiDiCallBackController {
@RequestMapping("/callback")
public SubscribeResp callback(String param, String sign) {
log.info("kuaidi callback param:{},sign", param,sign);
log.info("kuaidi callback param:{},sign", param, sign);
//建议记录一下这个回调的内容方便出问题后双方排查问题
//log.debug("快递100订阅推送回调结果|{}|{}",param,sign);
@ -42,18 +42,13 @@ public class AppKuaiDiCallBackController {
subscribeResp.setReturnCode("200");
subscribeResp.setMessage("成功");
//加密如果相等属于快递100推送否则可以忽略掉当前请求
if (ourSign.equals(sign)){
if (ourSign.equals(sign)) {
//TODO 业务处理
SubscribePushParamResp subscribePushParamResp = new Gson().fromJson(param, SubscribePushParamResp.class);
SubscribePushResult subscribePushResult = subscribePushParamResp.getLastResult();
if(subscribePushResult !=null){
VvPackageEntity vvPackageEntity = vvPackageDao.selectVvPackageByTrackNumber(subscribePushResult.getNu());
vvPackageEntity.setIscheck(subscribePushResult.getIscheck());
vvPackageEntity.setCom(subscribePushResult.getCom());
vvPackageEntity.setStatus(subscribePushResult.getStatus());
vvPackageEntity.setState(subscribePushResult.getState());
vvPackageDao.updateVvPackageById(vvPackageEntity);
if (subscribePushResult != null) {
vvPackageService.selectVvKuaidiAndUpdateData(subscribePushResult.getNu(), RoleEnums.kuaidi100_callback.getRole());
}
return subscribeResp;
}

View File

@ -7,6 +7,7 @@ import com.heyu.api.data.dao.vv.VvPackageDao;
import com.heyu.api.data.dao.vv.VvTradeOrderLineDao;
import com.heyu.api.data.dto.vv.KuaiDi100DTO;
import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity;
import com.heyu.api.data.enums.RoleEnums;
import com.heyu.api.data.service.vv.VvPackageService;
import com.heyu.api.data.utils.R;
import lombok.extern.slf4j.Slf4j;
@ -38,17 +39,12 @@ public class AppLogisticsController {
@Describe("物流查询")
@RequestMapping("/query")
public R query(@RequestBody VvAppLogisticsRequest request) {
List<VvTradeOrderLineEntity> vvTradeOrderLineEntity = vvTradeOrderLineDao.selectVvTradeOrderLineByBuyerIdTrackNumber(request.getBuyerId(), request.getTrackNumber());
if (CollectionUtils.isEmpty(vvTradeOrderLineEntity)) {
return R.error("trackNumber不是你的");
}
KuaiDi100DTO kuaiDi100DTO = vvPackageService.selectVvKuaidiAndUpdateData(request.getTrackNumber());
KuaiDi100DTO kuaiDi100DTO = vvPackageService.selectVvKuaidiAndUpdateData(request.getTrackNumber(), RoleEnums.user.getRole());
return R.ok().setData(kuaiDi100DTO);

View File

@ -6,14 +6,17 @@ import com.heyu.api.common.annotation.Describe;
import com.heyu.api.data.dao.vv.VvAllDataDao;
import com.heyu.api.data.dao.vv.VvChartConfigDao;
import com.heyu.api.data.dao.vv.VvCreateDataConfigDao;
import com.heyu.api.data.dto.PackageDelivedDelayDTO;
import com.heyu.api.data.dto.VvCreateDataConfigDTO;
import com.heyu.api.data.entity.vv.VvChartConfigEntity;
import com.heyu.api.data.entity.vv.VvCreateDataConfigEntity;
import com.heyu.api.data.utils.ChartUtil;
import com.heyu.api.data.utils.DateUtils;
import com.heyu.api.data.utils.R;
import com.heyu.api.oss.OssFileUploadService;
import com.heyu.api.schedule.CronTriggerUtils;
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;
@ -50,8 +53,6 @@ public class AppTestController {
private VvChartConfigDao vvChartConfigDao;
@Value("${eb.config.rabbitQueue.createDataQueue}")
private String createDataQueue;
@ -63,6 +64,14 @@ public class AppTestController {
private RabbitTemplate rabbitTemplate;
@Value("${eb.config.rabbitQueue.delayQueue}")
private String delayQueue;
@Value("${eb.config.rabbitQueue.delayExchangeName}")
private String delayExchangeName;
// /app/test/insert
@Describe("测试数据插入")
@RequestMapping("/insert")
@ -94,9 +103,29 @@ public class AppTestController {
}
public static void main(String[] args) {
System.out.println(System.currentTimeMillis() );
// /app/test/delay
@Describe("测试延迟队列")
@RequestMapping("/delay")
public R delay(@RequestBody AppOrderRequest vvOrderRequest) throws Exception {
PackageDelivedDelayDTO dto = new PackageDelivedDelayDTO();
dto.setPackageId("10");
dto.setRole("test");
Date time = new Date();
Date timeAfter15 = DateUtils.addSeconds(time, 10);
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));
int second = DateUtils.betweenSecond(time, timeAfter15);
// 通过广播模式发布延时消息 延时30分钟 持久化消息 消费后销毁 这里无需指定路由会广播至每个绑定此交换机的队列
rabbitTemplate.convertAndSend(delayExchangeName, "", JSON.toJSONString(dto), message -> {
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
message.getMessageProperties().setDelay((second) * 1000); // 毫秒为单位指定此消息的延时时长 ,+ 1 尽量保证机器人跑完了再发送消息
return message;
});
return R.ok();
}
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());
}
}

View File

@ -0,0 +1,49 @@
package com.heyu.api.listener;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
@Slf4j
public class DelaySimpleRabbitListener {
@Value("${eb.config.rabbitQueue.delayQueue}")
private String delayQueue;
@RabbitHandler
@RabbitListener(queues = "#{delayQueue.name}", containerFactory = "accountAmountQueueSimpleRabbitListenerContainerFactory")
public void consumeMessage(@Payload String message, @Header(AmqpHeaders.DELIVERY_TAG) long delivertTag, Channel channel) {
try {
log.info("DeliveredDelaySimpleRabbitListener delayQueue :{} message:{}", delayQueue, message);
} catch (Exception e) {
log.error("DeliveredDelaySimpleRabbitListener handle", e);
} finally {
try {
log.info("DeliveredDelaySimpleRabbitListener 消息{},消息确认完成", message);
channel.basicAck(delivertTag, true);
} catch (IOException e) {
log.error("DeliveredDelaySimpleRabbitListener 消息确认异常", e);
}
}
}
}

View File

@ -0,0 +1,39 @@
package com.heyu.api.schedule.impl;
import com.heyu.api.data.dao.vv.VvPackageDao;
import com.heyu.api.data.entity.vv.VvPackageEntity;
import com.heyu.api.data.enums.RoleEnums;
import com.heyu.api.data.service.vv.VvPackageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component("packageUpdateJob")
@Slf4j
public class PackageUpdateJob {
@Autowired
private VvPackageDao vvPackageDao;
@Autowired
private VvPackageService vvPackageService;
public void run() {
List<VvPackageEntity> vvPackageEntityList = vvPackageDao.selectVvPackageByIsCheckNotIN(Arrays.asList("2", "3"));
for (VvPackageEntity vvPackageEntity : vvPackageEntityList) {
vvPackageService.selectVvKuaidiAndUpdateData(vvPackageEntity.getTrackNumber(), RoleEnums.job.getRole());
}
}
}

View File

@ -60,6 +60,8 @@ eb:
urlStatisticQueue: URL_STATISTIC_QUEUE
createDataQueue: CREATE_DATA_QUEUE_TEST
sendDingDingQueue: SEND_DING_DING_QUEUE_TEST
delayQueue: DELAY_QUEUE_NAME
delayExchangeName: DELAY_EXCHANGE_NAME
tencent: