Commit 7802b244 by chongli

发票表增加了uid,成本(costamount),isSend(是否发送)等字段和逻辑

parent eaf716d4
......@@ -2,12 +2,20 @@
* Copyright 2014 CTRIP Co.,Ltd. All rights reserved.
*/
package com.ctrip.fun.golf.dao.order;
import java.util.ArrayList;
import java.math.BigDecimal;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.ctrip.fun.common.vo.SortDirectionEnum;
import com.ctrip.fun.common.vo.order.InvoiceinfoQuery;
import com.ctrip.fun.golf.dao.GenericHibernateDao;
import com.ctrip.fun.golf.domain.order.Invoiceinfo;
import com.ctrip.fun.golf.vo.PagedEntityBean;
/**
* @author zgsong
......@@ -19,9 +27,44 @@ public class InvoiceinfoDao extends GenericHibernateDao<Invoiceinfo, Integer> {
String hql=" from Invoiceinfo where orderId=:orderId";
return (Invoiceinfo) this.getSession().createQuery(hql).setParameter("orderId", orderId).uniqueResult();
}
public int updateCostAmount(Integer orderId,BigDecimal costAmount){
String hql="update ord_invoiceinfo set costAmount=:costAmount where orderId=:orderId";
Query query = this.getSession().createSQLQuery(hql);
query.setParameter("costAmount", costAmount);
query.setParameter("orderId", orderId);
int result = query.executeUpdate();
return result;
}
public List<Invoiceinfo> getInvoiceinfoByOrderIds( List<Integer> orderIdList){
String hql=" from Invoiceinfo where orderId in (:orderIds)";
return this.getSession().createQuery(hql).setParameterList("orderIds", orderIdList).list();
}
public PagedEntityBean<Invoiceinfo> queryList(Object queryCon) {
InvoiceinfoQuery queryBean = (InvoiceinfoQuery) queryCon;
Criteria criteria = this.getCriteria(Invoiceinfo.class);
if (null != queryBean.getUid() && !"".equals(queryBean.getUid())) {
criteria.add(Restrictions.eq("uid", queryBean.getUid()));
}
criteria.setFirstResult(queryBean.getPagerOffset());
criteria.setMaxResults(queryBean.getPagerPerPage());
if (queryBean.getSortDirection().equals(SortDirectionEnum.ASC)) {
criteria.addOrder(Order.asc(queryBean.getSortField()));
} else {
criteria.addOrder(Order.desc(queryBean.getSortField()));
}
List<Invoiceinfo> result = criteria.list();
criteria.setFirstResult(0);
Long count = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
PagedEntityBean<Invoiceinfo> pagedEntityBean = new PagedEntityBean<Invoiceinfo>();
pagedEntityBean.setCount(count);
pagedEntityBean.setResult(result);
return pagedEntityBean;
}
}
......@@ -298,7 +298,7 @@ public class OrderDao extends GenericHibernateDao<Order, Integer> {
public PagedEntityBean<OrderListBean> queryCanInvoiceOrder(OrderQuery orderQuery) throws Exception{
PagedEntityBean<OrderListBean> pagedEntityBean = new PagedEntityBean<OrderListBean>();
String sql = "SELECT SQL_CALC_FOUND_ROWS od.voucherAmount,od.prePayCardAmount,od.invoiceAmount,od.insuranceAmount,od.prePayAmount,od.orderId,od.orderId,od.OrderType,od.OrderNo,od.OrderName,od.Uid,od.OrderDate from ord_order od WHERE 1 = 1 AND od.uid=:uid AND od.orderDate >=:DecOfPreviousYear AND od.processStatus&16785491 = 19 AND od.OrderCategory not in (11,12) AND od.invoiceId is null AND od.canInvoiceDate<CURRENT_TIMESTAMP";
String sql = "SELECT SQL_CALC_FOUND_ROWS od.voucherAmount,od.prePayCardAmount,od.invoiceAmount,od.insuranceAmount,od.prePayAmount,od.orderId,od.orderId,od.OrderType,od.OrderNo,od.orderName,od.Uid,od.orderDate from ord_order od WHERE 1 = 1 AND od.uid=:uid AND od.orderDate >=:DecOfPreviousYear AND od.processStatus&16785491 = 19 AND od.OrderCategory not in (11,12) AND od.invoiceId is null AND od.canInvoiceDate<CURRENT_TIMESTAMP AND od.PrePayAmount+od.invoiceAmount+od.insuranceAmount-od.VoucherAmount>0";
Session session = this.getSession();
Query query = session.createSQLQuery(sql);
query.setParameter("uid", orderQuery.getUid());
......
......@@ -51,7 +51,7 @@ public class Invoiceinfo implements java.io.Serializable {
private Character isInvoiced;
private Character isMailed;
private Long cashInvInfoId;
private Long createTime;
private Date createTime;
private Date dataChangeLastTime;
/**
* 联系人
......@@ -92,6 +92,12 @@ public class Invoiceinfo implements java.io.Serializable {
*/
private String taxIdBankAccount;
private BigDecimal costAmount;
/**
* 开票人uid
*/
private String uid;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "InvoiceID", unique = true, nullable = false)
......@@ -148,13 +154,13 @@ public class Invoiceinfo implements java.io.Serializable {
this.remark = remark;
}
@Column(name = "Amount", precision = 10)
public BigDecimal getAmount() {
return this.amount;
@Column(name = "costAmount", precision = 10)
public BigDecimal getCostAmount() {
return this.costAmount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
public void setCostAmount(BigDecimal costAmount) {
this.costAmount = costAmount;
}
@Column(name = "ReInvReason", length = 50)
......@@ -305,12 +311,13 @@ public class Invoiceinfo implements java.io.Serializable {
this.cashInvInfoId = cashInvInfoId;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createTime")
public Long getCreateTime() {
public Date getCreateTime() {
return this.createTime;
}
public void setCreateTime(Long createTime) {
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
......@@ -409,4 +416,21 @@ public class Invoiceinfo implements java.io.Serializable {
this.taxIdBankAccount = taxIdBankAccount;
}
@Column(name = "Amount", precision = 10)
public BigDecimal getAmount() {
return this.amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
......@@ -1298,6 +1298,12 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
return Long.parseLong(str);
}
protected void updateOrderCost(Integer orderId,BigDecimal costAmount){
this.getInvoiceinfoDao().updateCostAmount(orderId, costAmount);
}
/**
* 保存订单
*
......@@ -1515,6 +1521,9 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
invoiceinfo.setTaxIdNum(invoiceBean.getTaxIdNum());
invoiceinfo.setTaxIdContactWay(invoiceBean.getTaxIdContactWay());
invoiceinfo.setTaxIdBankAccount(invoiceBean.getTaxIdBankAccount());
invoiceinfo.setCreateTime(new Date());
invoiceinfo.setUid(order.getUid());
invoiceinfo.setIsSend('0');
// 发票金额
BigDecimal invoiceAmount = order.getInvoiceAmount() == null ? new BigDecimal(0) : order.getInvoiceAmount();
......
......@@ -71,6 +71,7 @@ import com.ctrip.fun.golf.domain.assemble.AsmCourseresource;
import com.ctrip.fun.golf.domain.basic.Voucher;
import com.ctrip.fun.golf.domain.notification.Event;
import com.ctrip.fun.golf.domain.operation.Supplier;
import com.ctrip.fun.golf.domain.order.Invoiceinfo;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.order.OrderItem;
import com.ctrip.fun.golf.domain.product.Course;
......@@ -848,6 +849,8 @@ public class CourseOrderService extends AbstractOrderService<CourseOrderBean, Co
//更改可以开票时间
this.getOrderDao().updateOrdersCanInvoiceDate(orderId, DateUtil.addDays(orderItemBean.getPlayDate(), 1));
this.getOrderItemDao().save(orderItem);
//更新订单成本
this.updateOrderCost(orderId, BigDecimal.valueOf(asmCourseResource.getFloorPrice()));
try {
userService.saveOrderedCourse(asmCourseResource.getCourseId(), courseOrderBean.getUid());
} catch (Exception e) {
......
......@@ -11,8 +11,10 @@ import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ctrip.fun.common.core.util.BeanConverter;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.core.util.StringUtils;
......@@ -69,6 +71,7 @@ import com.ctrip.fun.golf.domain.notification.Event;
import com.ctrip.fun.golf.domain.operation.Supplier;
import com.ctrip.fun.golf.domain.order.EventActivityOrderItem;
import com.ctrip.fun.golf.domain.order.EventCustomerInfo;
import com.ctrip.fun.golf.domain.order.Invoiceinfo;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.product.Course;
import com.ctrip.fun.golf.domain.product.CourseProduct;
......@@ -984,6 +987,9 @@ public class EventActivityOrderService extends
//更改可以开票时间
this.getOrderDao().updateOrdersCanInvoiceDate(orderId, DateUtil.addDays(eventActivityOrderItem.getPlayDate(), 1));
//更新发票成本
this.updateOrderCost(orderId, BigDecimal.valueOf(asmCourseResource.getFloorPrice()));
this.getEventActivityOrderItemDao().save(eventActivityOrderItem);
try {
userService.saveOrderedCourse(asmCourseResource.getCourseId(),
......
......@@ -3,14 +3,32 @@
*/
package com.ctrip.fun.golf.service.order;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.ctrip.fun.common.core.util.BeanConverter;
import com.ctrip.fun.common.vo.PagedResponseBean;
import com.ctrip.fun.common.vo.order.InvoiceBean;
import com.ctrip.fun.common.vo.order.OrderCategoryEnum;
import com.ctrip.fun.common.vo.product.CourseProductBean;
import com.ctrip.fun.golf.dao.order.CommuneOrderItemDao;
import com.ctrip.fun.golf.dao.order.EventActivityOrderItemDao;
import com.ctrip.fun.golf.dao.order.InvoiceinfoDao;
import com.ctrip.fun.golf.dao.order.OrderDao;
import com.ctrip.fun.golf.dao.order.OrderItemDao;
import com.ctrip.fun.golf.dao.order.TourOrderItemDao;
import com.ctrip.fun.golf.domain.order.EventActivityOrderItem;
import com.ctrip.fun.golf.domain.order.Invoiceinfo;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.order.OrderItem;
import com.ctrip.fun.golf.domain.order.TourOrderItem;
import com.ctrip.fun.golf.domain.product.Course;
import com.ctrip.fun.golf.service.GenericService;
import com.sun.jdi.event.EventIterator;
/**
* @author zgsong
......@@ -23,15 +41,50 @@ public class InvoiceinfoService extends GenericService<InvoiceinfoDao, Invoicein
@Autowired
private OrderDao orderDao;
@Autowired
private OrderItemDao orderItemDao;
@Autowired
private EventActivityOrderItemDao eventActivityOrderItemDao;
@Autowired
private CommuneOrderItemDao communeOrderItemDao;
@Autowired
private TourOrderItemDao tourOrderItemDao;
public Integer save(InvoiceBean vo) {
Invoiceinfo invoiceinfo = new Invoiceinfo();
BeanConverter.copyProperties(invoiceinfo, vo);
invoiceinfoDao.save(invoiceinfo);
//通过后台保存单个发票
if(vo.getOrderId()!=null){
Order order = orderDao.findById(vo.getOrderId());
// 发票金额
BigDecimal invoiceAmount = order.getInvoiceAmount() == null ? new BigDecimal(0) : order.getInvoiceAmount();
BigDecimal insuranceAmount = order.getInsuranceAmount() == null ? new BigDecimal(0) : order.getInsuranceAmount();
invoiceinfo.setAmount(order.getAmount().subtract(order.getPrePayCardAmount()).subtract(order.getVoucherAmount()).subtract(invoiceAmount).subtract(insuranceAmount));
invoiceinfo.setUid(order.getUid());
invoiceinfo.setIsSend('0');
invoiceinfo.setCostAmount(this.computeInvoiceCost(order));
invoiceinfo.setCreateTime(new Date());
invoiceinfoDao.save(invoiceinfo);
orderDao.updateOrdersInvoiceId(invoiceinfo.getOrderId(), invoiceinfo.getInvoiceId());
return 1;
}else if(vo.getOrderIds()!=null&vo.getOrderIds().length>0){
BigDecimal totalCost = new BigDecimal(0);
Order order = null;
for(Integer orderId:vo.getOrderIds()){
order = orderDao.findById(orderId);
totalCost = totalCost.add(this.computeInvoiceCost(order));
}
invoiceinfo.setIsSend('0');
invoiceinfo.setUid(order.getUid());
invoiceinfo.setCostAmount(totalCost);
invoiceinfo.setCreateTime(new Date());
invoiceinfoDao.save(invoiceinfo);
for(Integer orderId:vo.getOrderIds()){
orderDao.updateOrdersInvoiceId(orderId, invoiceinfo.getInvoiceId());
}
......@@ -40,6 +93,37 @@ public class InvoiceinfoService extends GenericService<InvoiceinfoDao, Invoicein
return 0;
}
private BigDecimal computeInvoiceCost(Order order){
BigDecimal costAmount = new BigDecimal(0);
List itmeList = null;
switch (order.getOrderCategory()) {
case 1:
itmeList = orderItemDao.getOrderItemByOrderID(order.getOrderId());
if(itmeList!=null&&itmeList.size()>0){
OrderItem orderItem = (OrderItem) itmeList.get(0);
costAmount = orderItem.getFloorPrice();
}
break;
case 14:
itmeList = eventActivityOrderItemDao.getOrderItemByOrderId(order.getOrderId());
if(itmeList!=null&&itmeList.size()>0){
EventActivityOrderItem eventActivityOrderItem = (EventActivityOrderItem) itmeList.get(0);
costAmount = eventActivityOrderItem.getFloorPrice();
}
break;
case 3:
itmeList = tourOrderItemDao.getOrderItemByOrderId(order.getOrderId());
if(itmeList!=null&&itmeList.size()>0){
TourOrderItem tourOrderItem = (TourOrderItem) itmeList.get(0);
costAmount = tourOrderItem.getFloorPrice();
}
break;
default:
break;
}
return costAmount;
}
/**
* @return
* @see com.ctrip.fun.golf.service.GenericService#getEntityDao()
......
......@@ -235,7 +235,10 @@ public class TourOrderService extends AbstractOrderService<TourOrderBean, TourOr
tourOrderItem.setSalePrice(salePrice);
tourOrderItem.setExtraResourceFloorPrice(extraResourceFloorPrice);
tourOrderItem.setExtraResourceSalePrice(extraResourceSalePrice);
//更新可开票时间
this.getOrderDao().updateOrdersCanInvoiceDate(orderId, DateUtil.addDays(tourOrderItem.getDepartDate(), 1));
//更新发票成本
this.updateOrderCost(orderId, floorPrice);
this.tourOrderItemDao.save(tourOrderItem);
// 2、保存TourOrderSupItem表(兼容以前没用配置TourOrderSupItem表的数据)
Integer supplierIdBase = null;
......
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