Commit df86a934 by unknown

add the flashsale continue order

parent a4a70bc8
...@@ -6,6 +6,7 @@ import java.util.List; ...@@ -6,6 +6,7 @@ import java.util.List;
import org.hibernate.Criteria; import org.hibernate.Criteria;
import org.hibernate.Query; import org.hibernate.Query;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.Restrictions;
import com.ctrip.fun.common.vo.app.GameStatusEnum; import com.ctrip.fun.common.vo.app.GameStatusEnum;
...@@ -67,6 +68,14 @@ public class OrderItemDao extends GenericHibernateDao<OrderItem, Integer> { ...@@ -67,6 +68,14 @@ public class OrderItemDao extends GenericHibernateDao<OrderItem, Integer> {
criteria.add(Restrictions.eq("playDate", playDate)); criteria.add(Restrictions.eq("playDate", playDate));
return criteria.list(); return criteria.list();
} }
@SuppressWarnings("unchecked")
public List<OrderItem> queryOrderItemLastest(Integer resourceId,Date playDate){
Criteria criteria = this.getCriteria();
criteria.add(Restrictions.eq("resourceId", resourceId));
criteria.add(Restrictions.eq("playDate", playDate));
criteria.addOrder(Order.desc("orderItemId"));
return criteria.list();
}
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public List queryOrderIds(Date playDate){ public List queryOrderIds(Date playDate){
......
...@@ -6,6 +6,7 @@ import java.util.List; ...@@ -6,6 +6,7 @@ import java.util.List;
import org.hibernate.Query; import org.hibernate.Query;
import org.hibernate.Session; import org.hibernate.Session;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.golf.dao.GenericHibernateDao; import com.ctrip.fun.golf.dao.GenericHibernateDao;
import com.ctrip.fun.golf.domain.product.FlashSale; import com.ctrip.fun.golf.domain.product.FlashSale;
...@@ -25,14 +26,15 @@ public class FlashSaleDao extends GenericHibernateDao<FlashSale, Integer> { ...@@ -25,14 +26,15 @@ public class FlashSaleDao extends GenericHibernateDao<FlashSale, Integer> {
public List<FlashSale> getByUid(String uid, int resourceId, int status, int min, Date priceDate) { public List<FlashSale> getByUid(String uid, int resourceId, int status, int min, Date priceDate) {
Date date = new Date(); Date date = new Date();
Date createdTime = new Date(date.getTime() - min * 60 * 1000 + 2 * 1000); Date createdTime = new Date(date.getTime() - min * 60 * 1000 + 2 * 1000);
String hql = "from FlashSale where uid = :uid and resourceId = :resourceId and status = :status and createdTime<=:createdTime and priceDate = :priceDate"; // String hql = "from FlashSale where uid = :uid and resourceId = :resourceId and status = :status and createdTime<=:createdTime and priceDate = :priceDate";
String hql = "from FlashSale where uid = :uid and resourceId = :resourceId and status = :status and priceDate = :priceDate";
Session session = this.getSession(); Session session = this.getSession();
Query query = session.createQuery(hql); Query query = session.createQuery(hql);
query.setParameter("uid", uid); query.setParameter("uid", uid);
query.setParameter("resourceId", resourceId); query.setParameter("resourceId", resourceId);
query.setParameter("priceDate", priceDate); query.setParameter("priceDate", priceDate);
query.setParameter("status", status); query.setParameter("status", status);
query.setParameter("createdTime", createdTime); // query.setParameter("createdTime", createdTime);
return query.list(); return query.list();
} }
...@@ -65,14 +67,25 @@ public class FlashSaleDao extends GenericHibernateDao<FlashSale, Integer> { ...@@ -65,14 +67,25 @@ public class FlashSaleDao extends GenericHibernateDao<FlashSale, Integer> {
query.executeUpdate(); query.executeUpdate();
} }
public void updateOrderIdByUid(String uid, int resourceId, int orderId, int status) { public void updateOrderIdByUid(String uid, int resourceId, int orderId, int status, Date priceDate) {
String hql = "update FlashSale set orderId = :orderId " + " where uid = :uid and resourceId = :resourceId and status = :status"; String hql = "update FlashSale set orderId = :orderId " + " where uid = :uid and resourceId = :resourceId and status = :status and priceDate = :priceDate";
Session session = this.getSession(); Session session = this.getSession();
Query query = session.createQuery(hql); Query query = session.createQuery(hql);
query.setParameter("orderId", orderId); query.setParameter("orderId", orderId);
query.setParameter("uid", uid); query.setParameter("uid", uid);
query.setParameter("resourceId", resourceId); query.setParameter("resourceId", resourceId);
query.setParameter("status", status); query.setParameter("status", status);
query.setParameter("priceDate", priceDate);
query.executeUpdate(); query.executeUpdate();
} }
public void insertFlashSale(String uid, int resourceId, int orderId, int status, Date priceDate){
FlashSale flashSale = new FlashSale();
flashSale.setResourceId(resourceId);
flashSale.setUid(uid);
flashSale.setStatus(status);
flashSale.setPriceDate(priceDate);
this.saveOrUpdate(flashSale);
}
} }
...@@ -1036,6 +1036,21 @@ public class Order extends AbstractOrder implements java.io.Serializable { ...@@ -1036,6 +1036,21 @@ public class Order extends AbstractOrder implements java.io.Serializable {
return false; return false;
} }
} }
/**
* 用户在付款途中
*
* @return
*/
@Transient
public boolean isPayOnTheWay() {
OrderStatusEnum orderStatusEnum = OrderStatusEnum.getOrderStatus(this.orderType, this.payMode, this.confirmType, this.processStatus, false);
if (this.isNotPay() || orderStatusEnum == OrderStatusEnum.CHARGING) {
return true;
} else {
return false;
}
}
/** /**
* 用户是否待支付 * 用户是否待支付
......
...@@ -521,12 +521,23 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex ...@@ -521,12 +521,23 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
* @param orderId * @param orderId
*/ */
public void backgroundCanceOrder(Integer orderId) { public void backgroundCanceOrder(Integer orderId) {
backgroundCanceOrder(orderId, true);
}
/**
* 后台job取消订单
*
* @param orderId
*/
public void backgroundCanceOrder(Integer orderId, boolean returnInventory) {
Order order = this.getOrderDao().findById(orderId); Order order = this.getOrderDao().findById(orderId);
OrderStatusEnum orderStatusEnum = OrderStatusEnum.getOrderStatus(order.getOrderType(), order.getPayMode(), order.getConfirmType(), order.getProcessStatus(), false); OrderStatusEnum orderStatusEnum = OrderStatusEnum.getOrderStatus(order.getOrderType(), order.getPayMode(), order.getConfirmType(), order.getProcessStatus(), false);
if (order.isPaied() || orderStatusEnum == OrderStatusEnum.DEAL_FINISHED) { if (order.isPaied() || orderStatusEnum == OrderStatusEnum.DEAL_FINISHED) {
throw new OrderException(-1, "该订单不能取消"); throw new OrderException(-1, "该订单不能取消");
} else { } else {
this.returnInventory(order, false); if(returnInventory){
this.returnInventory(order, false);
}
int processStatus = order.getProcessStatus(); int processStatus = order.getProcessStatus();
processStatus |= OrderStatusBitEnum.CANCELING.getValue(); processStatus |= OrderStatusBitEnum.CANCELING.getValue();
processStatus |= OrderStatusBitEnum.CANCELED.getValue(); processStatus |= OrderStatusBitEnum.CANCELED.getValue();
......
...@@ -143,12 +143,14 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co ...@@ -143,12 +143,14 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
private OperationMessageService operationMessageService; private OperationMessageService operationMessageService;
public Order findByResourceId(String uid, int resourceId, Date playDate) { public Order findByResourceId(String uid, int resourceId, Date playDate) {
List<OrderItem> orderItemList = orderItemDao.queryOrderItem(resourceId, playDate); List<OrderItem> orderItemList = orderItemDao.queryOrderItemLastest(resourceId, playDate);
for (OrderItem orderItem : orderItemList) { for (OrderItem orderItem : orderItemList) {
int orderId = orderItem.getOrderID(); int orderId = orderItem.getOrderID();
Order order = this.getOrderDao().findById(orderId); Order order = this.getOrderDao().findById(orderId);
if (order != null) { if (order != null) {
if (uid.equals(order.getUid().trim()) && order.getOrderStatusEnum() == OrderStatusEnum.NOT_PAY) //remove by caosy
// if (uid.equals(order.getUid().trim()) && order.getOrderStatusEnum() == OrderStatusEnum.NOT_PAY)
if (uid.equals(order.getUid().trim()) && (order.isPayOnTheWay()))
return order; return order;
} }
} }
...@@ -385,7 +387,22 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co ...@@ -385,7 +387,22 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
CourseResource courseResource = this.courseResourceDao.findById(courseOrderBean.getResourceList().get(0).getResourceId()); CourseResource courseResource = this.courseResourceDao.findById(courseOrderBean.getResourceList().get(0).getResourceId());
if (this.isFlashSaleOrder(courseResource)) { if (this.isFlashSaleOrder(courseResource)) {
flashSaleDao.updateOrderIdByUid(courseOrderBean.getUid(), courseOrderBean.getResourceList().get(0).getResourceId(), orderId, 1); List<FlashSale> flashSaleList = this.flashSaleDao.getByOrderId(orderId);
FlashSale flashSale = null;
if (flashSaleList == null || flashSaleList.size() == 0) {
flashSale = new FlashSale();
}else{
flashSale = flashSaleList.get(0);
}
flashSale.setOrderId(orderId);
flashSale.setResourceId(courseOrderBean.getResourceList().get(0).getResourceId());
flashSale.setUid(courseOrderBean.getUid());
flashSale.setStatus(1);
flashSale.setPriceDate(courseOrderBean.getResourceList().get(0).getPlayDate());
// flashSaleDao.updateOrderIdByUid(courseOrderBean.getUid(), courseOrderBean.getResourceList().get(0).getResourceId(), orderId, 1, courseOrderBean.getResourceList().get(0).getPlayDate());
//add by caosy: add new record to prd_flashsale table for rebook
flashSaleDao.saveOrUpdate(flashSale);
} }
} }
...@@ -805,11 +822,11 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co ...@@ -805,11 +822,11 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
} else if (orderStatusEnum == OrderStatusEnum.WAITING_DEAL_CASH) { } else if (orderStatusEnum == OrderStatusEnum.WAITING_DEAL_CASH) {
return UserOperateModeEnum.CANCEl.getValue(); return UserOperateModeEnum.CANCEl.getValue();
} else if (orderStatusEnum == OrderStatusEnum.CHARGING) { } else if (orderStatusEnum == OrderStatusEnum.CHARGING) {
if (!isFlashSaleOrder(order)) { return UserOperateModeEnum.REBOOKORCANCEl.getValue();
return UserOperateModeEnum.REBOOKORCANCEl.getValue(); /*if (!isFlashSaleOrder(order)) {
} else { } else {
return UserOperateModeEnum.CANCEl.getValue(); return UserOperateModeEnum.CANCEl.getValue();
} }*/
} else { } else {
return UserOperateModeEnum.NONE.getValue(); return UserOperateModeEnum.NONE.getValue();
} }
......
...@@ -842,10 +842,12 @@ public class CourseResourceService extends ...@@ -842,10 +842,12 @@ public class CourseResourceService extends
} else { } else {
int orderId = fs.getOrderId(); int orderId = fs.getOrderId();
Order order = orderDao.findById(orderId); Order order = orderDao.findById(orderId);
if (order.isNotPay()) if (order.isPayOnTheWay()){
return FlashSaleStatusEnum.NOT_PAY.getValue();// 已抢购已下单未支付 return FlashSaleStatusEnum.NOT_PAY.getValue();// 已抢购已下单未支付
if (order.isPay()) }
return FlashSaleStatusEnum.ALREADY_GET.getValue();// 已成功抢购该资源 if(order.isPaied()){
return FlashSaleStatusEnum.ALREADY_GET_AND_PAID.getValue();
}
return FlashSaleStatusEnum.CANCELING.getValue();// 您的抢购单正在取消中 return FlashSaleStatusEnum.CANCELING.getValue();// 您的抢购单正在取消中
} }
} else { } else {
...@@ -939,7 +941,8 @@ public class CourseResourceService extends ...@@ -939,7 +941,8 @@ public class CourseResourceService extends
return true; return true;
else { else {
for (Order order : orderList) { for (Order order : orderList) {
if (order.isPay()) { // if (order.isPay()) {
if (order.isPaied()) {
logger.info("资源不存在, resourceId = " + resourceId + ", uid = " + uid); logger.info("资源不存在, resourceId = " + resourceId + ", uid = " + uid);
throw new OrderException(-25, "您已抢购,请勿重复下单"); throw new OrderException(-25, "您已抢购,请勿重复下单");
} }
...@@ -987,10 +990,10 @@ public class CourseResourceService extends ...@@ -987,10 +990,10 @@ public class CourseResourceService extends
for (Order order : orderList) { for (Order order : orderList) {
Date date = order.getOrderDate(); Date date = order.getOrderDate();
long time = DateUtil.getDistinceTime(checkDate, date); long time = DateUtil.getDistinceTime(checkDate, date);
if (time <= 15 * 60 && time > 0) { /* if (time <= 15 * 60 && time > 0) {
logger.info("资源不存在, resourceId = " + resourceId + ", uid = " + uid); logger.info("资源不存在, resourceId = " + resourceId + ", uid = " + uid);
throw new OrderException(-25, "您已下单,请勿重复下单"); throw new OrderException(-25, "您已下单,请勿重复下单");
} }*/
} }
return true; return true;
} }
......
...@@ -50,19 +50,42 @@ public class FlashSaleService { ...@@ -50,19 +50,42 @@ public class FlashSaleService {
if (flashSaleList == null || flashSaleList.size() == 0) if (flashSaleList == null || flashSaleList.size() == 0)
return; return;
flashSaleDao.updateByUid(uid, resourceId, 2, priceDate); flashSaleDao.updateByUid(uid, resourceId, 2, priceDate);
FlashSale fs = flashSaleList.get(0);
/* FlashSale fs = flashSaleList.get(0);
fs.setStatus(2); fs.setStatus(2);
flashSaleDao.update(fs); flashSaleDao.update(fs);*/
if (fs.getOrderId() == null) {
boolean isSuccessOrder = false;
for (FlashSale flashSale : flashSaleList) {
if(flashSale.getOrderId() != null){
Order order = orderDao.findById(flashSale.getOrderId());
if (order.isNotPay() || order.getOrderStatusEnum() == OrderStatusEnum.CHARGING) {
logger.info("backgroundCanceOrder, orderId = " + order.getOrderId());
orderService.backgroundCanceOrder(order.getOrderId(), false);
}
//记录一次下单成功的标记
if(order.isPaied()){
isSuccessOrder = true;
}
}
}
if(!isSuccessOrder){
//查找该资源的所有订单, 如果没有成功的,就返回库存一次,只会执行一次,返回一次库存,不会多返
logger.info("add inventory, resourceId = " + resourceId + ", uid = " + uid);
addInventory(uid, resourceId, priceDate);
}
/* if (fs.getOrderId() == null) {
logger.info("add inventory, resourceId = " + resourceId + ", uid = " + uid); logger.info("add inventory, resourceId = " + resourceId + ", uid = " + uid);
//只会执行一次,返回一次库存,不会多返
addInventory(uid, resourceId, priceDate); addInventory(uid, resourceId, priceDate);
} else { }else{
Order order = orderDao.findById(fs.getOrderId()); Order order = orderDao.findById(fs.getOrderId());
if (order.isNotPay() || order.getOrderStatusEnum() == OrderStatusEnum.CHARGING) { if (order.isNotPay() || order.getOrderStatusEnum() == OrderStatusEnum.CHARGING) {
logger.info("backgroundCanceOrder, orderId = " + order.getOrderId()); logger.info("backgroundCanceOrder, orderId = " + order.getOrderId());
orderService.backgroundCanceOrder(order.getOrderId()); orderService.backgroundCanceOrder(order.getOrderId());
} }
} }*/
} }
/* /*
......
...@@ -59,6 +59,7 @@ public class JobUtil implements ApplicationContextAware { ...@@ -59,6 +59,7 @@ public class JobUtil implements ApplicationContextAware {
} }
public static void startFlashSaleJob(FlashSaleCheckQuery query, int min) { public static void startFlashSaleJob(FlashSaleCheckQuery query, int min) {
min=5;
String prefix = "flashSale"; String prefix = "flashSale";
Scheduler sched = (Scheduler) context.getBean("schedulerFactoryBean"); Scheduler sched = (Scheduler) context.getBean("schedulerFactoryBean");
long nowTime = System.currentTimeMillis(); long nowTime = System.currentTimeMillis();
......
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 sign in to comment