Commit de0e0e3a authored by 周健威's avatar 周健威

修改旅游下单代码

parent d0451ca1
...@@ -75,14 +75,21 @@ public abstract class BaseBiz<M extends Mapper<T>, T> { ...@@ -75,14 +75,21 @@ public abstract class BaseBiz<M extends Mapper<T>, T> {
public void updateById(T entity) { public void updateById(T entity) {
EntityUtils.setUpdatedInfo(entity); updateByIdRe(entity);
mapper.updateByPrimaryKey(entity);
} }
public void updateSelectiveById(T entity) { public void updateSelectiveById(T entity) {
updateSelectiveByIdRe(entity);
}
public int updateByIdRe(T entity) {
EntityUtils.setUpdatedInfo(entity);
return mapper.updateByPrimaryKey(entity);
}
public int updateSelectiveByIdRe(T entity) {
EntityUtils.setUpdatedInfo(entity); EntityUtils.setUpdatedInfo(entity);
mapper.updateByPrimaryKeySelective(entity); return mapper.updateByPrimaryKeySelective(entity);
} }
public List<T> selectByExample(Object example) { public List<T> selectByExample(Object example) {
......
...@@ -4,8 +4,8 @@ package com.github.wxiaoqi.security.common.constant; ...@@ -4,8 +4,8 @@ package com.github.wxiaoqi.security.common.constant;
* Created by ace on 2017/8/29. * Created by ace on 2017/8/29.
*/ */
public class CommonConstants { public class CommonConstants {
public static final int SYS_TRUE = 1; public static final Integer SYS_TRUE = 1;
public static final int SYS_FALSE = 0; public static final Integer SYS_FALSE = 0;
public final static String RESOURCE_TYPE_MENU = "menu"; public final static String RESOURCE_TYPE_MENU = "menu";
public final static String RESOURCE_TYPE_BTN = "button"; public final static String RESOURCE_TYPE_BTN = "button";
// 用户token异常 // 用户token异常
......
...@@ -15,7 +15,7 @@ import javax.persistence.Table; ...@@ -15,7 +15,7 @@ import javax.persistence.Table;
public class AppUserDetail { public class AppUserDetail {
@Id @Id
@GeneratedValue(generator = "JDBC") @GeneratedValue(generator = "JDBC")
private int id; private Integer id;
private Integer userid; private Integer userid;
@Column(name = "is_member") @Column(name = "is_member")
private Integer isMember; private Integer isMember;
......
...@@ -15,7 +15,7 @@ import javax.persistence.Table; ...@@ -15,7 +15,7 @@ import javax.persistence.Table;
public class AppUserLogin { public class AppUserLogin {
@Id @Id
@GeneratedValue(generator = "JDBC") @GeneratedValue(generator = "JDBC")
private int id; private Integer id;
@Column(name = "im_userid") @Column(name = "im_userid")
private Integer imUserid; private Integer imUserid;
@Column(name = "im_password") @Column(name = "im_password")
......
...@@ -13,6 +13,12 @@ ...@@ -13,6 +13,12 @@
<artifactId>xx-order-api</artifactId> <artifactId>xx-order-api</artifactId>
<dependencies> <dependencies>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-activity-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>com.xxfc.platform</groupId> <groupId>com.xxfc.platform</groupId>
<artifactId>xx-vehicle-api</artifactId> <artifactId>xx-vehicle-api</artifactId>
......
...@@ -229,6 +229,13 @@ public class OrderTourDetail implements Serializable { ...@@ -229,6 +229,13 @@ public class OrderTourDetail implements Serializable {
@Column(name = "start_zone_id") @Column(name = "start_zone_id")
@ApiModelProperty(value = "出发公司区域id") @ApiModelProperty(value = "出发公司区域id")
private Integer startZoneId; private Integer startZoneId;
@Column(name = "has_insure")
@ApiModelProperty(value = "是否保险标记 1--要保险;0--不需要")
Integer hasInsure;
@Column(name = "site_id")
@ApiModelProperty(value = "出发的站点id")
private Integer siteId;
} }
...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.pojo.order; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.admin.entity.BaseUserMember; import com.github.wxiaoqi.security.admin.entity.BaseUserMember;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderMemberDetail; import com.xxfc.platform.order.entity.OrderMemberDetail;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.OrderTourDetail;
...@@ -17,4 +18,9 @@ import java.util.List; ...@@ -17,4 +18,9 @@ import java.util.List;
public class MemberBO extends OrderMemberDetail implements OrderDetail { public class MemberBO extends OrderMemberDetail implements OrderDetail {
private BaseOrder order; private BaseOrder order;
private BaseUserMemberLevel baseUserMemberLevel; private BaseUserMemberLevel baseUserMemberLevel;
/**
* 优惠券*
*/
private List<Coupon> coupons;
} }
package com.xxfc.platform.order.pojo.order; package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
...@@ -8,6 +9,8 @@ import com.xxfc.platform.vehicle.entity.VehicleModel; ...@@ -8,6 +9,8 @@ import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO; import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail { public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail {
private BaseOrder order; private BaseOrder order;
...@@ -19,4 +22,9 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail ...@@ -19,4 +22,9 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
*/ */
private Integer rentFreeDay; private Integer rentFreeDay;
private AppUserDTO appUserDTO; private AppUserDTO appUserDTO;
/**
* 优惠券*
*/
private List<Coupon> coupons;
} }
...@@ -2,6 +2,7 @@ package com.xxfc.platform.order.pojo.order; ...@@ -2,6 +2,7 @@ package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.admin.entity.User; import com.github.wxiaoqi.security.admin.entity.User;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.OrderTourDetail;
...@@ -19,5 +20,9 @@ public class TourBO extends OrderTourDetail implements OrderDetail { ...@@ -19,5 +20,9 @@ public class TourBO extends OrderTourDetail implements OrderDetail {
TourGood tourGood; TourGood tourGood;
List<TourUser> tourUsers; List<TourUser> tourUsers;
AppUserDTO appUserDTO; AppUserDTO appUserDTO;
private Integer siteId;
/**
* 优惠券*
*/
private List<Coupon> coupons;
} }
...@@ -37,4 +37,20 @@ public class TourPriceVO extends OrderPriceVO{ ...@@ -37,4 +37,20 @@ public class TourPriceVO extends OrderPriceVO{
//儿童真实总价(优惠后的价格) //儿童真实总价(优惠后的价格)
@ApiModelProperty(value = "儿童真实总价(优惠后的价格)") @ApiModelProperty(value = "儿童真实总价(优惠后的价格)")
private BigDecimal realChildPrice; private BigDecimal realChildPrice;
//保险费用
@ApiModelProperty(value = "保险费用")
private BigDecimal insureAmount;
//保险单价
@ApiModelProperty(value = "保险单价")
private BigDecimal insurePrice;
//天数
@ApiModelProperty(value = "天数")
private Integer dayNum;
//总人数
@ApiModelProperty(value = "总人数")
private Integer totalNumber;
} }
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
...@@ -93,12 +91,18 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -93,12 +91,18 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
*/ */
public void cancel(BaseOrder baseOrder) { public void cancel(BaseOrder baseOrder) {
if(cancelAble.get(baseOrder.getType()).contains(baseOrder.getStatus())) { if(cancelAble.get(baseOrder.getType()).contains(baseOrder.getStatus())) {
this.updateSelectiveById(new BaseOrder(){{ int updateResult = this.updateSelectiveByIdRe(new BaseOrder(){{
setId(baseOrder.getId()); setId(baseOrder.getId());
setStatus(OrderStatusEnum.ORDER_CANCEL.getCode()); setStatus(OrderStatusEnum.ORDER_CANCEL.getCode());
setCancelReason(baseOrder.getCancelReason()); setCancelReason(baseOrder.getCancelReason());
setVersion(baseOrder.getVersion());
}}); }});
//如果取消失败,则抛异常
if(updateResult <= 0) {
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
}
//触发退款流程 //触发退款流程
//判断是否已支付 //判断是否已支付
if(baseOrder.getHasPay().equals(SYS_TRUE)) { if(baseOrder.getHasPay().equals(SYS_TRUE)) {
...@@ -107,33 +111,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -107,33 +111,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{ OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
//计算退款金额
// 1、押金 + 租金(规则扣除) //退款流程
BigDecimal refundAmont = orvd.getDeposit().add(baseOrder.getGoodsAmount()); refundProcess(baseOrder, orvd);
String refundTradeNo = thirdFeign.refund(new OrderRefundVo(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setRefundAmount(refundAmont.multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo());
setRefundDesc("取消订单退款:"+ refundAmont.toString());
}}).getData();
//如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(refundTradeNo)) {
refundStatus = SYS_FALSE;
}
//创建订单退款记录
OrderRefund orderRefund = new OrderRefund(){{
setOrderId(baseOrder.getId());
setRefundAmount(refundAmont);
setRefundTime(System.currentTimeMillis());
setRefundDesc("取消订单退款:"+ refundAmont.toString());
setTradeNo(refundTradeNo);
setRefundType(RefundTypeEnum.RentVehicle.getCode());
}};
orderRefund.setRefundStatus(refundStatus);
orderRefundBiz.insertSelective(orderRefund);
}else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) { }else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
...@@ -168,6 +148,36 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -168,6 +148,36 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
} }
} }
private void refundProcess(BaseOrder baseOrder, OrderRentVehicleDetail orvd) {
//计算退款金额
// 1、押金 + 租金(规则扣除)
BigDecimal refundAmont = orvd.getDeposit().add(baseOrder.getGoodsAmount());
String refundTradeNo = thirdFeign.refund(new OrderRefundVo(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setRefundAmount(refundAmont.multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo());
setRefundDesc("取消订单退款:"+ refundAmont.toString());
}}).getData();
//如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(refundTradeNo)) {
refundStatus = SYS_FALSE;
}
//创建订单退款记录
OrderRefund orderRefund = new OrderRefund(){{
setOrderId(baseOrder.getId());
setRefundAmount(refundAmont);
setRefundTime(System.currentTimeMillis());
setRefundDesc("取消订单退款:"+ refundAmont.toString());
setTradeNo(refundTradeNo);
setRefundType(RefundTypeEnum.RentVehicle.getCode());
}};
orderRefund.setRefundStatus(refundStatus);
orderRefundBiz.insertSelective(orderRefund);
}
/** /**
* 支付回调处理 * 支付回调处理
* @param orderNo * @param orderNo
...@@ -216,7 +226,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -216,7 +226,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
}else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) { }else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode()); updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
//暂无处理 OrderTourDetail otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId());
}});
//站点总人数添加
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber());
} }
this.updateSelectiveById(updateOrder); this.updateSelectiveById(updateOrder);
} else { } else {
......
...@@ -19,6 +19,10 @@ import java.util.Map; ...@@ -19,6 +19,10 @@ import java.util.Map;
@Configuration @Configuration
public class RabbitUserConfig { public class RabbitUserConfig {
public static final String ORDER_CANCEL_EXC = "order_cancel_delay_exchange";
public static final String ORDER_CANCEL_QUE = "order_cancel_delay_queue";
public static final String ORDER_CANCEL_KEY = "order_cancel_delay_key";
/** /**
* 延时队列交换机 * 延时队列交换机
* 注意这里的交换机类型:CustomExchange * 注意这里的交换机类型:CustomExchange
...@@ -28,7 +32,7 @@ public class RabbitUserConfig { ...@@ -28,7 +32,7 @@ public class RabbitUserConfig {
public CustomExchange delayExchange(){ public CustomExchange delayExchange(){
Map<String, Object> args = new HashMap<>(); Map<String, Object> args = new HashMap<>();
args.put("x-delayed-type", "direct"); args.put("x-delayed-type", "direct");
return new CustomExchange("delay_exchange","x-delayed-message",true, false,args); return new CustomExchange(ORDER_CANCEL_EXC,"x-delayed-message",true, false, args);
} }
/** /**
...@@ -37,16 +41,16 @@ public class RabbitUserConfig { ...@@ -37,16 +41,16 @@ public class RabbitUserConfig {
*/ */
@Bean @Bean
public Queue delayQueue(){ public Queue delayQueue(){
return new Queue("delay_queue",true); return new Queue(ORDER_CANCEL_QUE,true);
} }
/** /**
* 给延时队列绑定交换机 * 给延时队列绑定交换机
* @return * @return
*/ */
@Bean @Bean
public Binding cfgDelayBinding(Queue cfgDelayQueue, CustomExchange cfgUserDelayExchange){ public Binding cfgDelayBinding(Queue cfgDelayQueue, CustomExchange cfgUserDelayExchange){
return BindingBuilder.bind(cfgDelayQueue).to(cfgUserDelayExchange).with("delay_key").noargs(); return BindingBuilder.bind(cfgDelayQueue).to(cfgUserDelayExchange).with(ORDER_CANCEL_KEY).noargs();
} }
} }
package com.xxfc.platform.order.mqhandler; package com.xxfc.platform.order.mqhandler;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.entity.BaseOrder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
...@@ -11,6 +15,8 @@ import java.io.IOException; ...@@ -11,6 +15,8 @@ import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import static com.xxfc.platform.order.config.RabbitUserConfig.ORDER_CANCEL_QUE;
/** /**
* activeMq消费者类 * activeMq消费者类
* @author zhanghang * @author zhanghang
...@@ -19,24 +25,30 @@ import java.util.List; ...@@ -19,24 +25,30 @@ import java.util.List;
@Slf4j @Slf4j
@Component @Component
public class RabbitConsumer { public class RabbitConsumer {
// @Autowired
// private CcqCustomerCfgService ccqCustomerCfgService; @Autowired
BaseOrderBiz baseOrderBiz;
/** /**
* 默认情况下,如果没有配置手动ACK, 那么Spring Data AMQP 会在消息消费完毕后自动帮我们去ACK * 默认情况下,如果没有配置手动ACK, 那么Spring Data AMQP 会在消息消费完毕后自动帮我们去ACK
* 存在问题:如果报错了,消息不会丢失,但是会无限循环消费,一直报错,如果开启了错误日志很容易就吧磁盘空间耗完 * 存在问题:如果报错了,消息不会丢失,但是会无限循环消费,一直报错,如果开启了错误日志很容易就吧磁盘空间耗完
* 解决方案:手动ACK,或者try-catch 然后在 catch 里面将错误的消息转移到其它的系列中去 * 解决方案:手动ACK,或者try-catch 然后在 catch 里面将错误的消息转移到其它的系列中去
* spring.rabbitmq.listener.simple.acknowledge-mode = manual * spring.rabbitmq.listener.simple.acknowledge-mode = manual
* @param list 监听的内容
*/ */
@RabbitListener(queues = "delay_queue") @RabbitListener(queues = ORDER_CANCEL_QUE)
public void cfgUserReceiveDealy(List<Integer> list, Message message, Channel channel) throws IOException { public void orderCancelReceiveDealy(BaseOrder baseOrder, Message message, Channel channel) throws IOException {
log.info("===============接收队列接收消息===================="); log.info("===============接收队列接收消息====================");
log.info("接收时间:{},接受内容:{}", LocalDateTime.now(), list.toString()); log.info("接收时间:{},接受内容:{}", LocalDateTime.now(), baseOrder.toString());
//通知 MQ 消息已被接收,可以ACK(从队列中删除)了 //通知 MQ 消息已被接收,可以ACK(从队列中删除)了
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
try { try {
} catch (Exception e) { baseOrderBiz.cancel(baseOrder);
}catch (BaseException e) {
if(ResultCode.DB_OPERATION_FAIL_CODE == e.getStatus()) {
log.info("取消操作被取消");
}
}catch (Exception e) {
log.error("============消费失败,尝试消息补发再次消费!=============="); log.error("============消费失败,尝试消息补发再次消费!==============");
log.error(e.getMessage()); log.error(e.getMessage());
/** /**
......
package com.xxfc.platform.order.mqhandler; package com.xxfc.platform.order.mqhandler;
import com.xxfc.platform.order.entity.BaseOrder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -8,6 +9,9 @@ import org.springframework.stereotype.Component; ...@@ -8,6 +9,9 @@ import org.springframework.stereotype.Component;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import static com.xxfc.platform.order.config.RabbitUserConfig.ORDER_CANCEL_EXC;
import static com.xxfc.platform.order.config.RabbitUserConfig.ORDER_CANCEL_KEY;
/** /**
* rabbitMq生产者类 * rabbitMq生产者类
* @author zhanghang * @author zhanghang
...@@ -20,21 +24,21 @@ public class RabbitProduct { ...@@ -20,21 +24,21 @@ public class RabbitProduct {
@Autowired @Autowired
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;
public void sendDelayMessage(List<Integer> list) { public void sendDelayMessage(BaseOrder baseOrder, Long delayTime) {
//这里的消息可以是任意对象,无需额外配置,直接传即可 //这里的消息可以是任意对象,无需额外配置,直接传即可
log.info("===============延时队列生产消息===================="); log.info("===============延时队列生产消息====================");
log.info("发送时间:{},发送内容:{}", LocalDateTime.now(), list.toString()); log.info("发送时间:{},发送内容:{}", LocalDateTime.now(), baseOrder.toString());
this.rabbitTemplate.convertAndSend( this.rabbitTemplate.convertAndSend(
"delay_exchange", ORDER_CANCEL_EXC,
"delay_key", ORDER_CANCEL_KEY,
list, baseOrder,
message -> { message -> {
//注意这里时间可以使long,而且是设置header //注意这里时间可以使long,而且是设置header
message.getMessageProperties().setHeader("x-delay", 60000); message.getMessageProperties().setHeader("x-delay", delayTime);
return message; return message;
} }
); );
log.info("{}ms后执行", 60000); log.info("{}ms后执行", delayTime);
} }
} }
...@@ -21,6 +21,7 @@ import com.xxfc.platform.order.biz.BaseOrderBiz; ...@@ -21,6 +21,7 @@ import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.mqhandler.RabbitProduct;
import com.xxfc.platform.order.pojo.order.CancelOrderDTO; import com.xxfc.platform.order.pojo.order.CancelOrderDTO;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.pay.RentVehicleOrderPayVO; import com.xxfc.platform.order.pojo.pay.RentVehicleOrderPayVO;
...@@ -43,6 +44,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -43,6 +44,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -62,6 +64,8 @@ public class BaseOrderController extends CommonBaseController { ...@@ -62,6 +64,8 @@ public class BaseOrderController extends CommonBaseController {
UserFeign userFeign; UserFeign userFeign;
@Resource @Resource
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
@Autowired
RabbitProduct rabbitProduct;
@Autowired @Autowired
OrderMemberDetailBiz orderMemberDetailBiz; OrderMemberDetailBiz orderMemberDetailBiz;
...@@ -277,6 +281,17 @@ public class BaseOrderController extends CommonBaseController { ...@@ -277,6 +281,17 @@ public class BaseOrderController extends CommonBaseController {
} }
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
@RequestMapping(value = "/app/unauth/send-msg", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "mq发送消息")
@IgnoreClientToken
@IgnoreUserToken
public ObjectRestResponse sendMsg() {
rabbitProduct.sendDelayMessage(baseOrderBiz.selectById(93), 1000L * 60);
return ObjectRestResponse.succ();
}
/** /**
* 订单查询类 * 订单查询类
*/ */
......
...@@ -17,6 +17,7 @@ import com.xxfc.platform.order.pojo.AddTourDTO; ...@@ -17,6 +17,7 @@ import com.xxfc.platform.order.pojo.AddTourDTO;
import com.xxfc.platform.order.pojo.order.TourBO; import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.TourPriceVO; import com.xxfc.platform.order.pojo.price.TourPriceVO;
import com.xxfc.platform.order.service.OrderTourService; import com.xxfc.platform.order.service.OrderTourService;
import com.xxfc.platform.tour.entity.TourGood;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -70,6 +71,8 @@ public class OrderTourController extends BaseController<OrderTourDetailBiz,Order ...@@ -70,6 +71,8 @@ public class OrderTourController extends BaseController<OrderTourDetailBiz,Order
bo.setAppUserDTO(getUserInfo()); bo.setAppUserDTO(getUserInfo());
bo.setAdultNum(vo.getNumber()); bo.setAdultNum(vo.getNumber());
bo.setChildNum(vo.getChildNumber()); bo.setChildNum(vo.getChildNumber());
TourGood tourGood = tourFeign.usableGet(bo.getGoodId()).getData();
bo.setTourGood(tourGood);
return ObjectRestResponse.succ(orderTourService.calculatePrice(bo)); return ObjectRestResponse.succ(orderTourService.calculatePrice(bo));
} }
...@@ -93,5 +96,8 @@ public class OrderTourController extends BaseController<OrderTourDetailBiz,Order ...@@ -93,5 +96,8 @@ public class OrderTourController extends BaseController<OrderTourDetailBiz,Order
@ApiModelProperty(value = "儿童个数") @ApiModelProperty(value = "儿童个数")
Integer childNumber; Integer childNumber;
@ApiModelProperty(value = "是否保险标记 1--要保险;0--不需要")
Integer hasInsure;
} }
} }
\ No newline at end of file
...@@ -11,6 +11,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; ...@@ -11,6 +11,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.mqhandler.RabbitProduct;
import com.xxfc.platform.order.pojo.price.OrderPriceVO; import com.xxfc.platform.order.pojo.price.OrderPriceVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -23,6 +24,9 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -23,6 +24,9 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
@Autowired @Autowired
protected Biz detailBiz; protected Biz detailBiz;
@Autowired
RabbitProduct rabbitProduct;
@Autowired @Autowired
protected BaseOrderBiz baseOrderBiz; protected BaseOrderBiz baseOrderBiz;
......
package com.xxfc.platform.order.service; package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
import com.xxfc.platform.order.biz.OrderTourDetailBiz;
import com.xxfc.platform.order.contant.enumerate.OrderCostEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.MemberBO; import com.xxfc.platform.order.pojo.order.MemberBO;
import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.OrderPriceVO; import com.xxfc.platform.order.pojo.price.OrderPriceVO;
import com.xxfc.platform.order.pojo.price.TourPriceVO;
import com.xxfc.platform.tour.dto.TourSpePriceDTO;
import com.xxfc.platform.tour.entity.TourGood;
import com.xxfc.platform.tour.entity.TourGoodVerification;
import com.xxfc.platform.tour.entity.TourUser;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.tour.vo.TourSpePriceVo;
import com.xxfc.platform.vehicle.entity.SysRegion;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -36,10 +21,6 @@ import org.springframework.stereotype.Service; ...@@ -36,10 +21,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@Service @Service
@Log4j @Log4j
...@@ -99,6 +80,9 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -99,6 +80,9 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
bo.getOrder().setName(bo.getBaseUserMemberLevel().getName()); bo.getOrder().setName(bo.getBaseUserMemberLevel().getName());
super.handleDetail(bo); super.handleDetail(bo);
//发送定时取消订单(30分钟)
rabbitProduct.sendDelayMessage(bo.getOrder(), 1000L * 60 * 30);
} }
@Override @Override
......
...@@ -43,7 +43,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -43,7 +43,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
private static Integer DISCOUNT_STATUS_NONE = 0; private static Integer DISCOUNT_STATUS_NONE = 0;
private static Integer DISCOUNT_STATUS_MEMBER = 1; private static Integer DISCOUNT_STATUS_MEMBER = 1;
private static Integer DISCOUNT_STATUS_FIXED = 2; private static Integer DISCOUNT_STATUS_FIXED = 2;
// private static BigDecimal DEPOSIT = new BigDecimal("20000.00");
@Autowired @Autowired
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
...@@ -90,6 +89,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -90,6 +89,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
} }
super.handleDetail(bo); super.handleDetail(bo);
//发送定时取消订单(30分钟)
rabbitProduct.sendDelayMessage(bo.getOrder(), 1000L * 60 * 30);
} }
@Override @Override
......
...@@ -3,26 +3,18 @@ package com.xxfc.platform.order.service; ...@@ -3,26 +3,18 @@ package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
import com.xxfc.platform.order.biz.OrderTourDetailBiz; import com.xxfc.platform.order.biz.OrderTourDetailBiz;
import com.xxfc.platform.order.contant.enumerate.OrderCostEnum; import com.xxfc.platform.order.contant.enumerate.OrderCostEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderCostDetail;
import com.xxfc.platform.order.entity.OrderTemplate; import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.order.TourBO; import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.order.pojo.price.TourPriceVO; import com.xxfc.platform.order.pojo.price.TourPriceVO;
import com.xxfc.platform.tour.dto.TourSpePriceDTO; import com.xxfc.platform.tour.dto.TourSpePriceDTO;
import com.xxfc.platform.tour.entity.TourGood; import com.xxfc.platform.tour.entity.TourGood;
...@@ -31,7 +23,6 @@ import com.xxfc.platform.tour.entity.TourUser; ...@@ -31,7 +23,6 @@ import com.xxfc.platform.tour.entity.TourUser;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.tour.vo.TourSpePriceVo; import com.xxfc.platform.tour.vo.TourSpePriceVo;
import com.xxfc.platform.vehicle.entity.SysRegion; import com.xxfc.platform.vehicle.entity.SysRegion;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail; import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
...@@ -46,6 +37,9 @@ import java.util.HashMap; ...@@ -46,6 +37,9 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
@Service @Service
@Log4j @Log4j
public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, TourBO> { public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, TourBO> {
...@@ -59,11 +53,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -59,11 +53,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
private static Integer IS_CHILD = 1; private static Integer IS_CHILD = 1;
// private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00");
// private static BigDecimal DAMAGE_SAFE = new BigDecimal("100.00"); //车损免赔
private static Integer LEVEL_DEFAULT = 0; private static Integer LEVEL_DEFAULT = 0;
private static Integer NUMBER_ZERO = 0; private static Integer NUMBER_ZERO = 0;
// private static BigDecimal DEPOSIT = new BigDecimal("20000.00");- private static BigDecimal INSURE_PRICE = new BigDecimal("5.00"); //保险
@Autowired @Autowired
OrderCostDetailBiz orderCostDetailBiz; OrderCostDetailBiz orderCostDetailBiz;
...@@ -123,6 +115,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -123,6 +115,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
tourFeign.stock(bo.getSpePriceId(), bo.getTotalNumber(), TourFeign.STOCK_SUBTRACT); tourFeign.stock(bo.getSpePriceId(), bo.getTotalNumber(), TourFeign.STOCK_SUBTRACT);
super.handleDetail(bo); super.handleDetail(bo);
//发送定时取消订单(30分钟)
rabbitProduct.sendDelayMessage(bo.getOrder(), 1000L * 60 * 30);
} }
@Override @Override
...@@ -138,6 +133,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -138,6 +133,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
BigDecimal goodsAmount = BigDecimal.ZERO; BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal tourAmount = BigDecimal.ZERO; BigDecimal tourAmount = BigDecimal.ZERO;
BigDecimal realAmount = BigDecimal.ZERO; BigDecimal realAmount = BigDecimal.ZERO;
BigDecimal insureAmount = BigDecimal.ZERO;
if(StrUtil.isNotBlank(detail.getTourUserIds())) { if(StrUtil.isNotBlank(detail.getTourUserIds())) {
List<TourUser> users = new ArrayList<TourUser>(); List<TourUser> users = new ArrayList<TourUser>();
...@@ -171,13 +167,17 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -171,13 +167,17 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
}}); }});
TourSpePriceVo tourSpePriceVo = objectRestResponse.getData(); TourSpePriceVo tourSpePriceVo = objectRestResponse.getData();
//需要保险
if(SYS_FALSE.equals(detail.getHasInsure())) {
//人数 * 天数 * 价格
insureAmount = insureAmount.add(INSURE_PRICE.multiply(new BigDecimal(String.valueOf(detail.getTotalNumber() * detail.getTourGood().getNumber()))));
}
//总价 //总价
tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getChildPrice()); tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getChildPrice());
//商品价格 //商品价格
goodsAmount = goodsAmount.add(tourAmount); goodsAmount = goodsAmount.add(tourAmount);
//总价格 //总价格
orderAmount = orderAmount.add(goodsAmount); orderAmount = orderAmount.add(goodsAmount).add(insureAmount);
//真实价格 //真实价格
realAmount = realAmount.add(tourSpePriceVo.getRealPrice()).add(tourSpePriceVo.getRealChildPrice()); realAmount = realAmount.add(tourSpePriceVo.getRealPrice()).add(tourSpePriceVo.getRealChildPrice());
...@@ -188,6 +188,10 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -188,6 +188,10 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
tpv.setRealAmount(realAmount); tpv.setRealAmount(realAmount);
tpv.setNumber(detail.getAdultNum()); tpv.setNumber(detail.getAdultNum());
tpv.setChildNumber(detail.getChildNum()); tpv.setChildNumber(detail.getChildNum());
tpv.setInsurePrice(INSURE_PRICE);
tpv.setDayNum(detail.getTourGood().getNumber());
tpv.setInsureAmount(insureAmount);
tpv.setTotalNumber(detail.getTotalNumber());
//设置收费明细 //设置收费明细
costDetail(tpv, handlechildren(detail)); costDetail(tpv, handlechildren(detail));
...@@ -202,6 +206,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -202,6 +206,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
if(NUMBER_ZERO < detail.getChildNum()) { if(NUMBER_ZERO < detail.getChildNum()) {
childrenStr.append(",${tem_0202}"); childrenStr.append(",${tem_0202}");
} }
if(SYS_TRUE.equals(detail.getHasInsure())) {
childrenStr.append(",${tem_0203}");
}
String str = childrenStr.toString(); String str = childrenStr.toString();
if(str.length() > 0) { if(str.length() > 0) {
......
...@@ -29,6 +29,8 @@ public interface TourFeign { ...@@ -29,6 +29,8 @@ public interface TourFeign {
public static final int STOCK_SUBTRACT = 1; public static final int STOCK_SUBTRACT = 1;
public static final int STOCK_PLUS = 2; public static final int STOCK_PLUS = 2;
public static final String TOTAL_PERSON = "total_person";
/** /**
* 计算价格 * 计算价格
* @param spePriceDto * @param spePriceDto
...@@ -54,7 +56,7 @@ public interface TourFeign { ...@@ -54,7 +56,7 @@ public interface TourFeign {
@GetMapping("/tourUser/app/unauth/getTourUsers") @GetMapping("/tourUser/app/unauth/getTourUsers")
public ObjectRestResponse<List<TourUser>> getTourUsers(@RequestParam String ids); public ObjectRestResponse<List<TourUser>> getTourUsers(@RequestParam String ids);
@GetMapping("/tourGoodVerification/entityList") @GetMapping("/tourGood/verfication/entityList")
public ObjectRestResponse<List<TourGoodVerification>> entityList(@RequestParam Map<String, Object> entity); public ObjectRestResponse<List<TourGoodVerification>> entityList(@RequestParam Map<String, Object> entity);
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment