Commit df86a934 by unknown

add the flashsale continue order

parent a4a70bc8
......@@ -6,6 +6,7 @@ import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import com.ctrip.fun.common.vo.app.GameStatusEnum;
......@@ -67,6 +68,14 @@ public class OrderItemDao extends GenericHibernateDao<OrderItem, Integer> {
criteria.add(Restrictions.eq("playDate", playDate));
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")
public List queryOrderIds(Date playDate){
......
......@@ -6,6 +6,7 @@ import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.golf.dao.GenericHibernateDao;
import com.ctrip.fun.golf.domain.product.FlashSale;
......@@ -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) {
Date date = new Date();
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();
Query query = session.createQuery(hql);
query.setParameter("uid", uid);
query.setParameter("resourceId", resourceId);
query.setParameter("priceDate", priceDate);
query.setParameter("status", status);
query.setParameter("createdTime", createdTime);
// query.setParameter("createdTime", createdTime);
return query.list();
}
......@@ -65,14 +67,25 @@ public class FlashSaleDao extends GenericHibernateDao<FlashSale, Integer> {
query.executeUpdate();
}
public void updateOrderIdByUid(String uid, int resourceId, int orderId, int status) {
String hql = "update FlashSale set orderId = :orderId " + " where uid = :uid and resourceId = :resourceId and status = :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 and priceDate = :priceDate";
Session session = this.getSession();
Query query = session.createQuery(hql);
query.setParameter("orderId", orderId);
query.setParameter("uid", uid);
query.setParameter("resourceId", resourceId);
query.setParameter("status", status);
query.setParameter("priceDate", priceDate);
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 {
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
* @param 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);
OrderStatusEnum orderStatusEnum = OrderStatusEnum.getOrderStatus(order.getOrderType(), order.getPayMode(), order.getConfirmType(), order.getProcessStatus(), false);
if (order.isPaied() || orderStatusEnum == OrderStatusEnum.DEAL_FINISHED) {
throw new OrderException(-1, "该订单不能取消");
} else {
this.returnInventory(order, false);
if(returnInventory){
this.returnInventory(order, false);
}
int processStatus = order.getProcessStatus();
processStatus |= OrderStatusBitEnum.CANCELING.getValue();
processStatus |= OrderStatusBitEnum.CANCELED.getValue();
......
......@@ -143,12 +143,14 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
private OperationMessageService operationMessageService;
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) {
int orderId = orderItem.getOrderID();
Order order = this.getOrderDao().findById(orderId);
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;
}
}
......@@ -385,7 +387,22 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
CourseResource courseResource = this.courseResourceDao.findById(courseOrderBean.getResourceList().get(0).getResourceId());
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
} else if (orderStatusEnum == OrderStatusEnum.WAITING_DEAL_CASH) {
return UserOperateModeEnum.CANCEl.getValue();
} else if (orderStatusEnum == OrderStatusEnum.CHARGING) {
if (!isFlashSaleOrder(order)) {
return UserOperateModeEnum.REBOOKORCANCEl.getValue();
return UserOperateModeEnum.REBOOKORCANCEl.getValue();
/*if (!isFlashSaleOrder(order)) {
} else {
return UserOperateModeEnum.CANCEl.getValue();
}
}*/
} else {
return UserOperateModeEnum.NONE.getValue();
}
......
......@@ -842,10 +842,12 @@ public class CourseResourceService extends
} else {
int orderId = fs.getOrderId();
Order order = orderDao.findById(orderId);
if (order.isNotPay())
return FlashSaleStatusEnum.NOT_PAY.getValue();// 已抢购已下单未支付
if (order.isPay())
return FlashSaleStatusEnum.ALREADY_GET.getValue();// 已成功抢购该资源
if (order.isPayOnTheWay()){
return FlashSaleStatusEnum.NOT_PAY.getValue();// 已抢购已下单未支付
}
if(order.isPaied()){
return FlashSaleStatusEnum.ALREADY_GET_AND_PAID.getValue();
}
return FlashSaleStatusEnum.CANCELING.getValue();// 您的抢购单正在取消中
}
} else {
......@@ -939,7 +941,8 @@ public class CourseResourceService extends
return true;
else {
for (Order order : orderList) {
if (order.isPay()) {
// if (order.isPay()) {
if (order.isPaied()) {
logger.info("资源不存在, resourceId = " + resourceId + ", uid = " + uid);
throw new OrderException(-25, "您已抢购,请勿重复下单");
}
......@@ -987,10 +990,10 @@ public class CourseResourceService extends
for (Order order : orderList) {
Date date = order.getOrderDate();
long time = DateUtil.getDistinceTime(checkDate, date);
if (time <= 15 * 60 && time > 0) {
/* if (time <= 15 * 60 && time > 0) {
logger.info("资源不存在, resourceId = " + resourceId + ", uid = " + uid);
throw new OrderException(-25, "您已下单,请勿重复下单");
}
}*/
}
return true;
}
......
......@@ -50,19 +50,42 @@ public class FlashSaleService {
if (flashSaleList == null || flashSaleList.size() == 0)
return;
flashSaleDao.updateByUid(uid, resourceId, 2, priceDate);
FlashSale fs = flashSaleList.get(0);
/* FlashSale fs = flashSaleList.get(0);
fs.setStatus(2);
flashSaleDao.update(fs);
if (fs.getOrderId() == null) {
flashSaleDao.update(fs);*/
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);
//只会执行一次,返回一次库存,不会多返
addInventory(uid, resourceId, priceDate);
} else {
Order order = orderDao.findById(fs.getOrderId());
if (order.isNotPay() || order.getOrderStatusEnum() == OrderStatusEnum.CHARGING) {
logger.info("backgroundCanceOrder, orderId = " + order.getOrderId());
orderService.backgroundCanceOrder(order.getOrderId());
}
}
}else{
Order order = orderDao.findById(fs.getOrderId());
if (order.isNotPay() || order.getOrderStatusEnum() == OrderStatusEnum.CHARGING) {
logger.info("backgroundCanceOrder, orderId = " + order.getOrderId());
orderService.backgroundCanceOrder(order.getOrderId());
}
}*/
}
/*
......
......@@ -59,6 +59,7 @@ public class JobUtil implements ApplicationContextAware {
}
public static void startFlashSaleJob(FlashSaleCheckQuery query, int min) {
min=5;
String prefix = "flashSale";
Scheduler sched = (Scheduler) context.getBean("schedulerFactoryBean");
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