diff --git a/api-mapper/src/main/java/com/heyu/api/data/dto/WeiXinPayDelayDTO.java b/api-mapper/src/main/java/com/heyu/api/data/dto/WeiXinPayDelayDTO.java new file mode 100644 index 0000000..e17d2a8 --- /dev/null +++ b/api-mapper/src/main/java/com/heyu/api/data/dto/WeiXinPayDelayDTO.java @@ -0,0 +1,10 @@ +package com.heyu.api.data.dto; + + +import lombok.Data; + +@Data +public class WeiXinPayDelayDTO extends DelayDTO{ + + private Long tradeOrderId; +} diff --git a/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java index c93de9c..215f967 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java +++ b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java @@ -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 + "}"; } } \ No newline at end of file diff --git a/api-mapper/src/main/java/com/heyu/api/data/enums/DelayTypeEnums.java b/api-mapper/src/main/java/com/heyu/api/data/enums/DelayTypeEnums.java new file mode 100644 index 0000000..812938d --- /dev/null +++ b/api-mapper/src/main/java/com/heyu/api/data/enums/DelayTypeEnums.java @@ -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; + } +} diff --git a/api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvPackageServiceImpl.java b/api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvPackageServiceImpl.java index 88956df..7c4ee36 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvPackageServiceImpl.java +++ b/api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvPackageServiceImpl.java @@ -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 dataDTOS = kuaiDi100DTO.getData(); @@ -135,7 +138,7 @@ public class VvPackageServiceImpl extends ServiceImpl tradeOrderLineEntities = tradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(trackNumber); for (VvTradeOrderLineEntity tradeOrderLineEntity : tradeOrderLineEntities) { tradeOrderLineEntity.setGmtSignReceipt(time); diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/enums/DelayTypeEnums.java b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/enums/DelayTypeEnums.java deleted file mode 100644 index 7b0b22c..0000000 --- a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/enums/DelayTypeEnums.java +++ /dev/null @@ -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; - } -} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java index e08571d..e41bc7b 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java @@ -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("订单创建成功"); } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/listener/BaseDelayedHandler.java b/api-web/api-interface/src/main/java/com/heyu/api/listener/BaseDelayedHandler.java new file mode 100644 index 0000000..abbc18e --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/listener/BaseDelayedHandler.java @@ -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); + + +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/listener/DelaySimpleRabbitListener.java b/api-web/api-interface/src/main/java/com/heyu/api/listener/DelaySimpleRabbitListener.java index 785011f..7ad9526 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/listener/DelaySimpleRabbitListener.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/listener/DelaySimpleRabbitListener.java @@ -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 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 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 { diff --git a/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/DeliveredHandler.java b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/DeliveredHandler.java new file mode 100644 index 0000000..8116138 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/DeliveredHandler.java @@ -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 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(); + } +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java new file mode 100644 index 0000000..e67d87c --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java @@ -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 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(); + } +}