提交修改

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; package com.heyu.api.data.config;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AcknowledgeMode; import org.springframework.amqp.core.*;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate; 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.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/** /**
* @author wutao * @author wutao
* @description mq配置 * @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.IFNullReturnEmpty;
import com.lz.mybatis.plugin.annotations.IN; import com.lz.mybatis.plugin.annotations.IN;
import com.lz.mybatis.plugin.annotations.LIMIT; 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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -49,4 +50,5 @@ public interface VvPackageDao extends BaseMapper<VvPackageEntity> {
@LIMIT @LIMIT
VvPackageEntity selectVvPackageByTrackNumber(String trackNumber); 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; package com.heyu.api.data.entity.vv;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import com.lz.mybatis.plugin.annotations.AS;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;import java.util.Date;
/** /**
*购物车 *购物车
* @author quyixiao * @author quyixiao
* @since 2025-10-22 * @since 2025-10-23
*/ */
@Data @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_id = CLASS_NAME + "sku_id"; // skuid
public final static String sku_image_url = CLASS_NAME + "sku_image_url"; // sku图片 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 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 delivered_type = CLASS_NAME + "delivered_type"; // 1 买家手动确认收货 2 系统自动确认收货
public final static String settle_status = CLASS_NAME + "settle_status"; // 0 未结算1 已经结算 public final static String settle_status = CLASS_NAME + "settle_status"; // 0 未结算1 已经结算
public final static String gmt_settle = CLASS_NAME + "gmt_settle"; // 结算时间 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 batch_num = CLASS_NAME + "batch_num"; // 批次数量
public final static String shipping_amount = CLASS_NAME + "shipping_amount"; // 运费 public final static String shipping_amount = CLASS_NAME + "shipping_amount"; // 运费
public final static String promotion_price = CLASS_NAME + "promotion_price"; // 当时促销价 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) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ -100,14 +103,6 @@ private static final long serialVersionUID = 1L;
private String skuImageUrl; private String skuImageUrl;
//评论 id //评论 id
private Long commentId; private Long commentId;
//下单时间
private Date gmtDownOrder;
//支付时间
private Date gmtPay;
//打包时间
private Date gmtToShipping;
//妥投时间
private Date gmtDelivered;
//1 买家手动确认收货 2 系统自动确认收货 //1 买家手动确认收货 2 系统自动确认收货
private Integer deliveredType; private Integer deliveredType;
//0 未结算1 已经结算 //0 未结算1 已经结算
@ -148,6 +143,20 @@ private static final long serialVersionUID = 1L;
private BigDecimal shippingAmount; private BigDecimal shippingAmount;
//当时促销价 //当时促销价
private BigDecimal promotionPrice; 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 * @return
@ -418,66 +427,6 @@ private static final long serialVersionUID = 1L;
this.commentId = commentId; 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 系统自动确认收货 * 1 买家手动确认收货 2 系统自动确认收货
* @return * @return
@ -778,6 +727,111 @@ private static final long serialVersionUID = 1L;
this.promotionPrice = promotionPrice; 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 @Override
public String toString() { public String toString() {
return "VvTradeOrderLineEntity{" + return "VvTradeOrderLineEntity{" +
@ -799,10 +853,6 @@ private static final long serialVersionUID = 1L;
",skuId=" + skuId + ",skuId=" + skuId +
",skuImageUrl=" + skuImageUrl + ",skuImageUrl=" + skuImageUrl +
",commentId=" + commentId + ",commentId=" + commentId +
",gmtDownOrder=" + gmtDownOrder +
",gmtPay=" + gmtPay +
",gmtToShipping=" + gmtToShipping +
",gmtDelivered=" + gmtDelivered +
",deliveredType=" + deliveredType + ",deliveredType=" + deliveredType +
",settleStatus=" + settleStatus + ",settleStatus=" + settleStatus +
",gmtSettle=" + gmtSettle + ",gmtSettle=" + gmtSettle +
@ -823,6 +873,13 @@ private static final long serialVersionUID = 1L;
",batchNum=" + batchNum + ",batchNum=" + batchNum +
",shippingAmount=" + shippingAmount + ",shippingAmount=" + shippingAmount +
",promotionPrice=" + promotionPrice + ",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; package com.heyu.api.data.service.impl.vv;
/** /**
* <p> * <p>
* 包裹表 服务类 * 包裹表 服务类
* </p> * </p>
* *
* @author quyixiao * @author quyixiao
* @since 2025-08-23 * @since 2025-08-23
*/ */
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heyu.api.data.dao.vv.VvPackageDao; 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.dto.vv.KuaiDi100DTO;
import com.heyu.api.data.entity.vv.VvPackageEntity; 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.enums.KuaiDi100StateEnums;
import com.heyu.api.data.kuaidi100.KuaiDi100Utils; import com.heyu.api.data.kuaidi100.KuaiDi100Utils;
import com.heyu.api.data.kuaidi100.LogisticsMapUtils; import com.heyu.api.data.kuaidi100.LogisticsMapUtils;
import com.heyu.api.data.service.vv.VvPackageService; import com.heyu.api.data.service.vv.VvPackageService;
import com.heyu.api.data.utils.DateUtils;
import com.heyu.api.data.utils.StringUtils; 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.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service @Service
@Slf4j
public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEntity> implements VvPackageService { public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEntity> implements VvPackageService {
@Autowired @Autowired
private VvPackageDao vvPackageDao; private VvPackageDao vvPackageDao;
@Value("${eb.config.rabbitQueue.delayQueue}")
@Override private String delayQueue;
public VvPackageEntity selectVvPackageById(Long id){
return vvPackageDao.selectVvPackageById(id);
}
@Value("${eb.config.rabbitQueue.delayExchangeName}")
private String delayExchangeName;
@Override @Autowired
public Long insertVvPackage(VvPackageEntity vvPackage){ private RabbitTemplate rabbitTemplate;
return vvPackageDao.insertVvPackage(vvPackage);
}
@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 @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); VvPackageEntity vvPackageEntity = vvPackageDao.selectVvPackageByTrackNumber(trackNumber);
KuaiDi100DTO kuaiDi100DTO = null; KuaiDi100DTO kuaiDi100DTO = null;
// 如果是已经签收状态
if (KuaiDi100StateEnums.sign_receipt.getState().equals(vvPackageEntity.getState())) { if (KuaiDi100StateEnums.sign_receipt.getState().equals(vvPackageEntity.getState())) {
kuaiDi100DTO = JSONObject.parseObject(vvPackageEntity.getPackageLogisticsInfo(), KuaiDi100DTO.class); kuaiDi100DTO = JSONObject.parseObject(vvPackageEntity.getPackageLogisticsInfo(), KuaiDi100DTO.class);
} else { } else { //如果当次查到的是已经签收状态
kuaiDi100DTO = KuaiDi100Utils.getLogisticsInfo(trackNumber); kuaiDi100DTO = KuaiDi100Utils.getLogisticsInfo(trackNumber);
vvPackageEntity.setIscheck(kuaiDi100DTO.getIscheck()); vvPackageEntity.setIscheck(kuaiDi100DTO.getIscheck());
vvPackageEntity.setCom(kuaiDi100DTO.getCom()); vvPackageEntity.setCom(kuaiDi100DTO.getCom());
@ -86,18 +110,60 @@ public class VvPackageServiceImpl extends ServiceImpl<VvPackageDao, VvPackageEnt
if (StringUtils.isBlank(vvPackageEntity.getLogisticsCompany()) if (StringUtils.isBlank(vvPackageEntity.getLogisticsCompany())
&& StringUtils.isNotEmpty(kuaiDi100DTO.getCom())) { && StringUtils.isNotEmpty(kuaiDi100DTO.getCom())) {
vvPackageEntity.setLogisticsCompany(LogisticsMapUtils.getLogisticsCompanyName(kuaiDi100DTO.getCom())); vvPackageEntity.setLogisticsCompany(LogisticsMapUtils.getLogisticsCompanyName(kuaiDi100DTO.getCom()));
} }
if (kuaiDi100DTO.getRouteInfo() != null if (kuaiDi100DTO.getRouteInfo() != null
&& kuaiDi100DTO.getRouteInfo().getFrom() != null && kuaiDi100DTO.getRouteInfo().getFrom() != null
) { ) {
vvPackageEntity.setShippingFrom(kuaiDi100DTO.getRouteInfo().getFrom().getName()); 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); vvPackageDao.updateVvPackageById(vvPackageEntity);
} }
return kuaiDi100DTO; return kuaiDi100DTO;
} }

View File

@ -32,5 +32,5 @@ public interface VvPackageService extends IService<VvPackageEntity> {
int deleteVvPackageById(Long id); 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>(); List<TablesBean> list = new ArrayList<TablesBean>();
String a = "vv_package"; String a = "vv_trade_order_line";
for (String s : a.split(",")) { for (String s : a.split(",")) {
list.add(new TablesBean(s)); list.add(new TablesBean(s));
} }

View File

@ -2,8 +2,8 @@ package com.heyu.api.controller.vv;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.heyu.api.common.annotation.Describe; import com.heyu.api.common.annotation.Describe;
import com.heyu.api.data.dao.vv.VvPackageDao; import com.heyu.api.data.enums.RoleEnums;
import com.heyu.api.data.entity.vv.VvPackageEntity; import com.heyu.api.data.service.vv.VvPackageService;
import com.kuaidi100.sdk.response.SubscribePushParamResp; import com.kuaidi100.sdk.response.SubscribePushParamResp;
import com.kuaidi100.sdk.response.SubscribePushResult; import com.kuaidi100.sdk.response.SubscribePushResult;
import com.kuaidi100.sdk.response.SubscribeResp; import com.kuaidi100.sdk.response.SubscribeResp;
@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
public class AppKuaiDiCallBackController { public class AppKuaiDiCallBackController {
@Autowired @Autowired
private VvPackageDao vvPackageDao; private VvPackageService vvPackageService;
/*** /***
* https://api.1024api.com/api-interface/app/kuaidi/callback * https://api.1024api.com/api-interface/app/kuaidi/callback
@ -30,7 +30,7 @@ public class AppKuaiDiCallBackController {
@RequestMapping("/callback") @RequestMapping("/callback")
public SubscribeResp callback(String param, String sign) { 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); //log.debug("快递100订阅推送回调结果|{}|{}",param,sign);
@ -42,18 +42,13 @@ public class AppKuaiDiCallBackController {
subscribeResp.setReturnCode("200"); subscribeResp.setReturnCode("200");
subscribeResp.setMessage("成功"); subscribeResp.setMessage("成功");
//加密如果相等属于快递100推送否则可以忽略掉当前请求 //加密如果相等属于快递100推送否则可以忽略掉当前请求
if (ourSign.equals(sign)){ if (ourSign.equals(sign)) {
//TODO 业务处理 //TODO 业务处理
SubscribePushParamResp subscribePushParamResp = new Gson().fromJson(param, SubscribePushParamResp.class); SubscribePushParamResp subscribePushParamResp = new Gson().fromJson(param, SubscribePushParamResp.class);
SubscribePushResult subscribePushResult = subscribePushParamResp.getLastResult(); SubscribePushResult subscribePushResult = subscribePushParamResp.getLastResult();
if(subscribePushResult !=null){ if (subscribePushResult != null) {
VvPackageEntity vvPackageEntity = vvPackageDao.selectVvPackageByTrackNumber(subscribePushResult.getNu()); vvPackageService.selectVvKuaidiAndUpdateData(subscribePushResult.getNu(), RoleEnums.kuaidi100_callback.getRole());
vvPackageEntity.setIscheck(subscribePushResult.getIscheck());
vvPackageEntity.setCom(subscribePushResult.getCom());
vvPackageEntity.setStatus(subscribePushResult.getStatus());
vvPackageEntity.setState(subscribePushResult.getState());
vvPackageDao.updateVvPackageById(vvPackageEntity);
} }
return subscribeResp; 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.dao.vv.VvTradeOrderLineDao;
import com.heyu.api.data.dto.vv.KuaiDi100DTO; import com.heyu.api.data.dto.vv.KuaiDi100DTO;
import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity; 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.service.vv.VvPackageService;
import com.heyu.api.data.utils.R; import com.heyu.api.data.utils.R;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -38,17 +39,12 @@ public class AppLogisticsController {
@Describe("物流查询") @Describe("物流查询")
@RequestMapping("/query") @RequestMapping("/query")
public R query(@RequestBody VvAppLogisticsRequest request) { public R query(@RequestBody VvAppLogisticsRequest request) {
List<VvTradeOrderLineEntity> vvTradeOrderLineEntity = vvTradeOrderLineDao.selectVvTradeOrderLineByBuyerIdTrackNumber(request.getBuyerId(), request.getTrackNumber()); List<VvTradeOrderLineEntity> vvTradeOrderLineEntity = vvTradeOrderLineDao.selectVvTradeOrderLineByBuyerIdTrackNumber(request.getBuyerId(), request.getTrackNumber());
if (CollectionUtils.isEmpty(vvTradeOrderLineEntity)) { if (CollectionUtils.isEmpty(vvTradeOrderLineEntity)) {
return R.error("trackNumber不是你的"); return R.error("trackNumber不是你的");
} }
KuaiDi100DTO kuaiDi100DTO = vvPackageService.selectVvKuaidiAndUpdateData(request.getTrackNumber(), RoleEnums.user.getRole());
KuaiDi100DTO kuaiDi100DTO = vvPackageService.selectVvKuaidiAndUpdateData(request.getTrackNumber());
return R.ok().setData(kuaiDi100DTO); 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.VvAllDataDao;
import com.heyu.api.data.dao.vv.VvChartConfigDao; import com.heyu.api.data.dao.vv.VvChartConfigDao;
import com.heyu.api.data.dao.vv.VvCreateDataConfigDao; 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.dto.VvCreateDataConfigDTO;
import com.heyu.api.data.entity.vv.VvChartConfigEntity; import com.heyu.api.data.entity.vv.VvChartConfigEntity;
import com.heyu.api.data.entity.vv.VvCreateDataConfigEntity; import com.heyu.api.data.entity.vv.VvCreateDataConfigEntity;
import com.heyu.api.data.utils.ChartUtil; 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.data.utils.R;
import com.heyu.api.oss.OssFileUploadService; import com.heyu.api.oss.OssFileUploadService;
import com.heyu.api.schedule.CronTriggerUtils; import com.heyu.api.schedule.CronTriggerUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -50,8 +53,6 @@ public class AppTestController {
private VvChartConfigDao vvChartConfigDao; private VvChartConfigDao vvChartConfigDao;
@Value("${eb.config.rabbitQueue.createDataQueue}") @Value("${eb.config.rabbitQueue.createDataQueue}")
private String createDataQueue; private String createDataQueue;
@ -63,6 +64,14 @@ public class AppTestController {
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;
@Value("${eb.config.rabbitQueue.delayQueue}")
private String delayQueue;
@Value("${eb.config.rabbitQueue.delayExchangeName}")
private String delayExchangeName;
// /app/test/insert // /app/test/insert
@Describe("测试数据插入") @Describe("测试数据插入")
@RequestMapping("/insert") @RequestMapping("/insert")
@ -94,9 +103,29 @@ public class AppTestController {
} }
public static void main(String[] args) { // /app/test/delay
System.out.println(System.currentTimeMillis() ); @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 urlStatisticQueue: URL_STATISTIC_QUEUE
createDataQueue: CREATE_DATA_QUEUE_TEST createDataQueue: CREATE_DATA_QUEUE_TEST
sendDingDingQueue: SEND_DING_DING_QUEUE_TEST sendDingDingQueue: SEND_DING_DING_QUEUE_TEST
delayQueue: DELAY_QUEUE_NAME
delayExchangeName: DELAY_EXCHANGE_NAME
tencent: tencent: