Commit 7bc8634d by chongli

买券活动统计

parent b2ec705f
package com.ctrip.fun.golf.api.basic;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ctrip.fun.common.vo.Request;
import com.ctrip.fun.common.vo.Response;
import com.ctrip.fun.common.vo.ResponseStatusEnum;
import com.ctrip.fun.common.vo.basic.BuyVoucherActivityBean;
import com.ctrip.fun.common.vo.basic.BuyVoucherActivityQuery;
import com.ctrip.fun.common.vo.basic.BuyVoucherActivityStatisticsBean;
import com.ctrip.fun.common.vo.basic.VoucherRuleBean;
import com.ctrip.fun.common.vo.user.CommuneExtBean;
import com.ctrip.fun.golf.api.GenericController;
import com.ctrip.fun.golf.aspect.log.Log;
import com.ctrip.fun.golf.service.basic.BuyVoucherActivityService;
......@@ -22,6 +37,30 @@ public class BuyVoucherActivityController extends
return buyVoucherActivityService;
}
@ResponseBody
@RequestMapping(value = "/statistics", method = RequestMethod.POST)
@Log(parentLog=true,action="新增")
public Response<BuyVoucherActivityStatisticsBean> statistics(@RequestBody Request<BuyVoucherActivityQuery> request) {
BuyVoucherActivityStatisticsBean bean = buyVoucherActivityService.statistics(request.getBody());
Response<BuyVoucherActivityStatisticsBean> response = new Response<BuyVoucherActivityStatisticsBean>();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage(ResponseStatusEnum.SUCCESS.getMsg());
response.setBody(bean);
return response;
}
@ResponseBody
@RequestMapping(value = "/buyVoucherCommList", method = RequestMethod.POST)
@Log(parentLog=true,action="新增")
public Response<List<CommuneExtBean>> buyVoucherCommList(@RequestBody Request<BuyVoucherActivityQuery> request) {
List<CommuneExtBean> list = buyVoucherActivityService.buyVoucherCommList(request.getBody());
Response<List<CommuneExtBean>> response = new Response<List<CommuneExtBean>>();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage(ResponseStatusEnum.SUCCESS.getMsg());
response.setBody(list);
return response;
}
}
......@@ -946,4 +946,14 @@ public class VoucherDao extends GenericHibernateDao<Voucher, Integer> {
List<Voucher> result = query.list();
return result;
}
//获取某种券使用/未使用的数量
public long getUseCount(Integer ruleId,int used) {
Criteria criteria = getCriteria();
criteria.add(Restrictions.eq("ruleId", ruleId));
criteria.add(Restrictions.eq("used", used));
return (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
}
}
......@@ -2352,4 +2352,39 @@ public class OrderDao extends GenericHibernateDao<Order, Integer> {
query.setParameter("orderId", param.getOrderId());
query.executeUpdate();
}
public int voucherOrderTotal(int activityId){
int count = 0;
Query query = this.getSession().createSQLQuery("SELECT count(*) from ord_order a LEFT JOIN ord_communeitem b on a.OrderID=b.OrderID where a.OrderCategory=16 and b.activityId=:activityId and ProcessStatus&16=16 ");
query.setParameter("activityId", activityId);
List list = query.list();
if(list!=null && list.size()>0){
count = Integer.parseInt(String.valueOf(list.get(0)));
}
return count;
}
public int voucherOrderPersons(int activityId){
int count = 0;
Query query = this.getSession().createSQLQuery("SELECT count(DISTINCT a.uid) from ord_order a LEFT JOIN ord_communeitem b on a.OrderID=b.OrderID where a.OrderCategory=16 and b.activityId=:activityId and ProcessStatus&16=16 ");
query.setParameter("activityId", activityId);
List list = query.list();
if(list!=null && list.size()>0){
count = Integer.parseInt(String.valueOf(list.get(0)));
}
return count;
}
public int voucherOrderUsedPersons(int activityId,String[] voucherIds){
int count = 0;
Query query = this.getSession().createSQLQuery("SELECT count(DISTINCT a.Uid) from ord_order a LEFT JOIN ord_communeitem b on a.OrderID=b.OrderID where a.OrderCategory=16 and b.activityId=:activityId and ProcessStatus&16=16 and a.Uid in (SELECT DISTINCT uid from bsc_voucher where ruleId in (:voucherIds) and Used=1)");
query.setParameter("activityId", activityId);
query.setParameterList("voucherIds",voucherIds);
List list = query.list();
if(list!=null && list.size()>0){
count = Integer.parseInt(String.valueOf(list.get(0)));
}
return count;
}
}
......@@ -12,6 +12,7 @@ import org.springframework.util.StringUtils;
import com.ctrip.fun.common.core.util.BeanConverter;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.vo.SortDirectionEnum;
import com.ctrip.fun.common.vo.basic.BuyVoucherActivityQuery;
import com.ctrip.fun.common.vo.user.CommuneExtBean;
import com.ctrip.fun.common.vo.user.CommuneExtQuery;
import com.ctrip.fun.golf.dao.GenericHibernateDao;
......@@ -152,4 +153,44 @@ public class CommuneExtDao extends GenericHibernateDao<CommuneExt, Integer> {
return (CommuneExt) query.uniqueResult();
}
public PagedEntityBean<CommuneExtBean> queryBuyVoucherCommuneExt(Object obj, String[] ids) {
BuyVoucherActivityQuery query = (BuyVoucherActivityQuery) obj;
StringBuffer sb = new StringBuffer("");
sb.append("SELECT SQL_CALC_FOUND_ROWS e.uid,e.userName,e.mobilePhone from usr_commune_ext e where e.UID in ("+
"SELECT DISTINCT a.Uid from ord_order a LEFT JOIN ord_communeitem b on a.OrderID=b.OrderID "+
"where a.OrderCategory=16 and b.activityId=:activityId and ProcessStatus&16=16 and a.Uid inOrNotIn ("+
"SELECT DISTINCT uid from bsc_voucher where ruleId in (:voucherIds) and Used=1))");
String sql = sb.toString();
if(query.getBuyAndUsed()==1){
sql = sql.replace("inOrNotIn", "in");
}else{
sql = sql.replace("inOrNotIn", "not in");
}
Query q = this.getSession().createSQLQuery(sql);
q.setParameter("activityId", query.getId());
q.setParameterList("voucherIds", ids);
q.setFirstResult(query.getPagerOffset());
q.setMaxResults(query.getPagerPerPage());
q.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
List<Map<String,Object>> queryResult = q.list();
List<CommuneExtBean> result = new ArrayList<CommuneExtBean>();
for (Map<String, Object> map : queryResult) {
CommuneExtBean extBean = new CommuneExtBean();
BeanConverter.populate(extBean, map);
result.add(extBean);
}
Query queryCount = this.getSession().createSQLQuery(" SELECT FOUND_ROWS() ");
long count = ((BigInteger) queryCount.uniqueResult()).longValue();
PagedEntityBean<CommuneExtBean> pagedEntityBean = new PagedEntityBean<CommuneExtBean>();
pagedEntityBean.setCount(count);
pagedEntityBean.setResult(result);
return pagedEntityBean;
}
}
package com.ctrip.fun.golf.service.basic;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -8,13 +11,25 @@ import com.alibaba.fastjson.JSONObject;
import com.ctrip.fun.common.core.util.BeanConverter;
import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.vo.basic.BuyVoucherActivityBean;
import com.ctrip.fun.common.vo.basic.BuyVoucherActivityQuery;
import com.ctrip.fun.common.vo.basic.BuyVoucherActivityStatisticsBean;
import com.ctrip.fun.common.vo.basic.VoucherBean;
import com.ctrip.fun.common.vo.basic.VoucherRuleBean;
import com.ctrip.fun.common.vo.user.CommuneExtBean;
import com.ctrip.fun.golf.dao.basic.VoucherDao;
import com.ctrip.fun.golf.dao.basic.VoucherRuleDao;
import com.ctrip.fun.golf.dao.client.ClientConfigDao;
import com.ctrip.fun.golf.dao.order.OrderDao;
import com.ctrip.fun.golf.dao.product.BuyVoucherActivityDao;
import com.ctrip.fun.golf.dao.user.CommuneExtDao;
import com.ctrip.fun.golf.domain.basic.Voucher;
import com.ctrip.fun.golf.domain.basic.VoucherRule;
import com.ctrip.fun.golf.domain.client.ClientConfig;
import com.ctrip.fun.golf.domain.product.BuyVoucherActivity;
import com.ctrip.fun.golf.exceptions.DaoException;
import com.ctrip.fun.golf.service.GenericService;
import com.ctrip.fun.golf.utils.GenericManager;
import com.ctrip.fun.golf.vo.PagedEntityBean;
......@@ -27,7 +42,19 @@ public class BuyVoucherActivityService extends
@Autowired
private ClientConfigDao clientConfigDao = null;
@Autowired
private OrderDao orderDao = null;
@Autowired
private VoucherRuleDao voucherRuleDao = null;
@Autowired
private VoucherDao voucherDao = null;
@Autowired
private CommuneExtDao communeExtDao = null;
public Integer save(BuyVoucherActivityBean vo) {
vo.setActivityEnd(DateUtil.getEndTime4Day(vo.getActivityEnd()));
......@@ -113,9 +140,87 @@ public class BuyVoucherActivityService extends
public void setBuyVoucherActivityDao(BuyVoucherActivityDao buyVoucherActivityDao) {
this.buyVoucherActivityDao = buyVoucherActivityDao;
}
public BuyVoucherActivityStatisticsBean statistics(BuyVoucherActivityQuery query) {
BuyVoucherActivityStatisticsBean bean = new BuyVoucherActivityStatisticsBean();
List<VoucherRuleBean> voucherRuleBeans = new ArrayList<VoucherRuleBean>();
BuyVoucherActivity entiy = buyVoucherActivityDao.findById(query.getId());
if(entiy==null){
return bean;
}
JSONObject voucher_jsobj = JSONObject.parseObject(entiy.getVoucherConfig());
String voucherIds = voucher_jsobj.getString("id");
String[] ids = voucherIds.split(",");
PagedEntityBean<CommuneExtBean> pagedEntityBean = communeExtDao.queryBuyVoucherCommuneExt(query,ids);
int voucherOrderTotal = orderDao.voucherOrderTotal(query.getId());
int voucherOrderPersons = orderDao.voucherOrderPersons(query.getId());
int voucherOrderUsedPersons = orderDao.voucherOrderUsedPersons(query.getId(),ids);
int voucherOrderNotUsedPersons = voucherOrderPersons - voucherOrderUsedPersons;
for(String id:ids){
VoucherRuleBean voucherRuleBean = new VoucherRuleBean();
VoucherRule voucher = voucherRuleDao.findById(Integer.parseInt(id));
long totalCount = voucherDao.countQuantity(Integer.parseInt(id));
long usedCount = voucherDao.getUseCount(Integer.parseInt(id), 1);
long notUsedCount =totalCount-usedCount;
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String result = numberFormat.format((float)usedCount/(float)totalCount*100);
result = result + "%";
voucherRuleBean.setId(voucher.getId());
voucherRuleBean.setDescription(voucher.getDescription());
voucherRuleBean.setSendAmount(totalCount);
voucherRuleBean.setUsedAmount(usedCount);
voucherRuleBean.setNotUsedCount(notUsedCount);
voucherRuleBean.setPercent(result);
voucherRuleBeans.add(voucherRuleBean);
}
bean.setTotalSaleOnline(voucherOrderTotal);
bean.setBuyPersonsOnline(voucherOrderPersons);
bean.setBuyAndUsePersonsOnline(voucherOrderUsedPersons);
bean.setBuyAndNotUsePersonsOnline(voucherOrderNotUsedPersons);
bean.setCommuneExtCounts(pagedEntityBean.getCount());
bean.setVoucherRules(voucherRuleBeans);
bean.setCommuneExts((List<CommuneExtBean>)pagedEntityBean.getResult());
return bean;
}
public List<CommuneExtBean> buyVoucherCommList(BuyVoucherActivityQuery query) {
List<CommuneExtBean> list = new ArrayList<CommuneExtBean>();
BuyVoucherActivity entiy = buyVoucherActivityDao.findById(query.getId());
if(entiy==null){
return list;
}
query.setPagerPerPage(100000);
JSONObject voucher_jsobj = JSONObject.parseObject(entiy.getVoucherConfig());
String voucherIds = voucher_jsobj.getString("id");
String[] ids = voucherIds.split(",");
PagedEntityBean<CommuneExtBean> pagedEntityBean = communeExtDao.queryBuyVoucherCommuneExt(query,ids);
list= (List<CommuneExtBean>) pagedEntityBean.getResult();
return list;
}
public static void main(String[] args) {
long totalCount = 100;
long usedCount = 23;
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String result = numberFormat.format((float)usedCount/(float)totalCount*100);
System.out.println(result + "%");
}
}
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