package com.doumee.service.business.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.doumee.biz.system.SystemDictDataBiz;
|
import com.doumee.config.rocketmq5.NormalMsgProducer;
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
import com.doumee.core.model.LoginUserInfo;
|
import com.doumee.core.model.PageData;
|
import com.doumee.core.model.PageWrap;
|
import com.doumee.core.utils.Constants;
|
import com.doumee.core.utils.DateUtil;
|
import com.doumee.core.utils.Utils;
|
import com.doumee.dao.business.*;
|
import com.doumee.dao.business.model.*;
|
import com.doumee.dao.system.SystemUserMapper;
|
import com.doumee.dao.system.dto.CountDataDTO;
|
import com.doumee.dao.system.model.SystemUser;
|
import com.doumee.dao.system.vo.BusinessDataCountVO;
|
import com.doumee.dao.system.vo.CountDataVO;
|
import com.doumee.dao.web.dto.CollectDTO;
|
import com.doumee.dao.web.dto.MemberDTO;
|
import com.doumee.dao.web.dto.MultiFileDTO;
|
import com.doumee.dao.web.dto.OrgDTO;
|
import com.doumee.dao.web.dto.activity.*;
|
import com.doumee.dao.web.dto.shop.ShopSimpleDTO;
|
import com.doumee.dao.web.request.ActivityPageListRequest;
|
import com.doumee.service.business.*;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import org.apache.commons.collections4.MapUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.checkerframework.checker.units.qual.C;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.time.LocalDate;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 活动、资讯、探店信息表Service实现
|
*
|
* @author 江蹄蹄
|
* @date 2023/03/21 15:48
|
*/
|
@Service
|
public class WorkbenchServiceImpl implements WorkbenchService {
|
@Autowired
|
private GoodsorderMapper goodsorderMapper;
|
@Autowired
|
private GoodsorderDetailMapper goodsorderDetailMapper;
|
@Override
|
public List<BusinessDataCountVO> shopRankList10(CountDataDTO param) {
|
Date startDate = null,endDate = null;
|
if(param.getYear()!=null && param.getMonth()!=null){
|
List<Date> dList = DateUtil.getDatePeriodByYearAndMonth(param.getYear(),param.getMonth()-1);
|
startDate = dList.get(0);
|
endDate = dList.get(1);
|
}else if(param.getYear()!=null && param.getMonth()==null){
|
List<Date> dList = DateUtil.getDatePeriodByYear(param.getYear());
|
startDate = dList.get(0);
|
endDate = dList.get(1);
|
}
|
//统计订单销量和销售额集合
|
List<BusinessDataCountVO> list1 = goodsorderMapper.selectJoinList(BusinessDataCountVO.class,new MPJLambdaWrapper<Goodsorder>()
|
.selectAs(Shop::getName,BusinessDataCountVO::getName)
|
.select("(select count(distinct(t.member_id)) )",BusinessDataCountVO::getNum1)
|
.select("(select count(t.id) )",BusinessDataCountVO::getNum)
|
.select("(select sum(t.total_price) )",BusinessDataCountVO::getPrice)
|
.leftJoin(Shop.class,Shop::getId,Goodsorder::getDistributionShopId)
|
.ge(startDate!=null,Goodsorder::getCreateDate,startDate)
|
.ne(endDate!=null,Goodsorder::getCreateDate,endDate)
|
.eq(Goodsorder::getIsdeleted,Constants.ZERO)
|
.in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey(),Constants.OrderStatus.REFUND.getKey())
|
.groupBy(Goodsorder::getDistributionShopId)
|
.orderByDesc(Constants.equalsInteger(param.getType() ,0),"sum(t.total_price) ")
|
.orderByDesc(Constants.equalsInteger(param.getType() ,1),"count(t.id) ")
|
.orderByDesc(Constants.equalsInteger(param.getType() ,2),"count(distinct(t.member_id))")
|
.last("limit 10")) ;
|
return list1;
|
|
}
|
@Override
|
public List<BusinessDataCountVO> goodsRankList10(CountDataDTO param) {
|
Date startDate = null,endDate = null;
|
if(param.getYear()!=null && param.getMonth()!=null){
|
List<Date> dList = DateUtil.getDatePeriodByYearAndMonth(param.getYear(),param.getMonth()-1);
|
startDate = dList.get(0);
|
endDate = dList.get(1);
|
}else if(param.getYear()!=null && param.getMonth()==null){
|
List<Date> dList = DateUtil.getDatePeriodByYear(param.getYear());
|
startDate = dList.get(0);
|
endDate = dList.get(1);
|
}
|
//统计订单销量和销售额集合
|
List<BusinessDataCountVO> list1 = goodsorderDetailMapper.selectJoinList(BusinessDataCountVO.class,new MPJLambdaWrapper<GoodsorderDetail>()
|
.selectAs(Goods::getName,BusinessDataCountVO::getName)
|
.select("(select sum(t.goods_num) )",BusinessDataCountVO::getNum)
|
.select("(select sum(ifnull(t.price,0) * ifnull(t.goods_num,0)))",BusinessDataCountVO::getPrice)
|
.leftJoin(Goodsorder.class,Goodsorder::getId,GoodsorderDetail::getOrderId)
|
.leftJoin(Goods.class,Goods::getId,GoodsorderDetail::getGoodsId)
|
.ge(startDate!=null,Goodsorder::getCreateDate,startDate)
|
.ne(endDate!=null,Goodsorder::getCreateDate,endDate)
|
.eq(Goodsorder::getIsdeleted,Constants.ZERO)
|
.in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey(),Constants.OrderStatus.REFUND.getKey())
|
.groupBy(GoodsorderDetail::getGoodsId)
|
.orderByDesc(Constants.equalsInteger(param.getType() ,1),"sum(ifnull(t.price,0) * ifnull(t.goods_num,0)) ")
|
.orderByDesc(Constants.equalsInteger(param.getType() ,0),"sum(t.goods_num) ")
|
.last("limit 10")) ;
|
return list1;
|
}
|
@Override
|
public BusinessDataCountVO businessData(CountDataDTO param) {
|
BusinessDataCountVO data = new BusinessDataCountVO();
|
int dataType = param.getDateType();//0今日 1近七日 2近30日 3近1年
|
String name = "HOUR(t.CREATE_DATE)";
|
List<String> dateList = new ArrayList<>();
|
Date date = Utils.Date.getEnd(new Date());//今日 23:59:59
|
Date startDate = DateUtil.addDaysToDate(date,-1);
|
switch (dataType) {
|
case 1: {
|
name = "DATE_FORMAT(t.CREATE_DATE, '%Y-%m-%d')";
|
for(int i=1;i<=7;i++){
|
dateList.add(DateUtil.getShortTime(DateUtil.addDaysToDate(date,i-7)));
|
}
|
startDate = DateUtil.addDaysToDate(date,-7);
|
break;
|
} case 2: {
|
name = "DATE_FORMAT(t.CREATE_DATE, '%Y-%m-%d')";
|
for(int i=1;i<=30;i++){
|
dateList.add(DateUtil.getShortTime(DateUtil.addDaysToDate(date,i-30)));
|
}
|
startDate = DateUtil.addDaysToDate(date,-30);
|
break;
|
} case 3: {
|
LocalDate now = LocalDate.now();
|
startDate = DateUtil.increaseYear(date,-1);
|
name = "DATE_FORMAT(t.CREATE_DATE, '%Y-%m')";
|
for(int i=1;i<=12;i++){
|
dateList.add(DateUtil.minusMonthToDate(now,12-i));
|
}
|
break;
|
} default:{
|
for(int i=0;i<=23;i++){
|
dateList.add(i+"");
|
}
|
break;
|
}
|
}
|
|
data.setDateStrList(dateList);
|
//订单销量
|
CountDataVO r = goodsorderMapper.selectJoinOne(CountDataVO.class,new MPJLambdaWrapper<Goodsorder>()
|
.select("(select count(t.id) )",CountDataVO::getNum)
|
.select("(select sum(t.total_Price) )",CountDataVO::getPrice)
|
.ge(Goodsorder::getCreateDate,startDate)
|
.eq(Goodsorder::getIsdeleted,Constants.ZERO)
|
.in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey(),Constants.OrderStatus.REFUND.getKey()) );
|
if (r != null) {
|
data.setNum(Constants.formatLongNum(r.getNum()));//订单量
|
data.setPrice(Constants.formatBigdecimal(r.getPrice()));//订单金额
|
}
|
//退款统计
|
CountDataVO r1 = goodsorderMapper.selectJoinOne(CountDataVO.class,new MPJLambdaWrapper<Goodsorder>()
|
.select("(select count(t.id) )",CountDataVO::getNum)
|
.select("(select sum(t.refund_money) )",CountDataVO::getPrice)
|
.ge(Goodsorder::getRefundTime,startDate)
|
.eq(Goodsorder::getIsdeleted,Constants.ZERO)
|
.in(Goodsorder::getStatus,Constants.OrderStatus.REFUND.getKey()) );
|
|
|
if (r1 != null) {
|
data.setNum1(Constants.formatLongNum(r1.getNum()));//退款单量
|
data.setPrice1(Constants.formatBigdecimal(r1.getPrice()));//退款金额
|
}
|
|
//统计订单销量和销售额集合
|
List<CountDataVO> list1 = goodsorderMapper.selectJoinList(CountDataVO.class,new MPJLambdaWrapper<Goodsorder>()
|
.select("(select "+name+")",CountDataVO::getDateStr)
|
.select("(select count(t.id) )",CountDataVO::getNum)
|
.select("(select sum(t.total_price) )",CountDataVO::getPrice)
|
.ge(Goodsorder::getCreateDate,startDate)
|
.eq(Goodsorder::getIsdeleted,Constants.ZERO)
|
.in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey(),Constants.OrderStatus.REFUND.getKey())
|
.groupBy(name) );
|
|
List<Long> datalist1 = new ArrayList<>();
|
List<BigDecimal> datalistPrice = new ArrayList<>();
|
for(String str : dateList){
|
long tnum =0;
|
BigDecimal tprice = new BigDecimal(0);
|
if(list1!=null){
|
for(CountDataVO p : list1){
|
if(StringUtils.equals(p.getDateStr(),str)){
|
tnum =(Constants.formatLongNum(p.getNum()));
|
tprice = (Constants.formatBigdecimal(p.getPrice()));
|
break;
|
}
|
}
|
}
|
datalist1.add( tnum );
|
datalistPrice.add(tprice);
|
}
|
data.setDataList(datalist1 );
|
data.setDataList2(datalistPrice );
|
|
String name1 =name.replace("t.","t3.");
|
//统计各类商品数据集合
|
List<CountDataVO> list2 = goodsorderDetailMapper.selectJoinList(CountDataVO.class,new MPJLambdaWrapper<GoodsorderDetail>()
|
.select("(select "+name1+")",CountDataVO::getDateStr)
|
.selectAs(Labels::getName,CountDataVO::getName)
|
.select("(select sum(ifnull(t.price,0) * ifnull(t.goods_num,0)) )",CountDataVO::getPrice)
|
.leftJoin(Goods.class,Goods::getId,GoodsorderDetail::getGoodsId)
|
.leftJoin(Labels.class,Labels::getId,Goods::getCategoryId)
|
.leftJoin(Goodsorder.class,Goodsorder::getId,GoodsorderDetail::getOrderId)
|
.ge(Goodsorder::getCreateDate,startDate)
|
.eq(Goodsorder::getIsdeleted,Constants.ZERO)
|
.in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey(),Constants.OrderStatus.REFUND.getKey())
|
.groupBy(name1+",t1.category_id"));
|
|
List<CountDataVO> cateList = getCateListFromDataList(list2);
|
if(list2!=null &&list2.size()>0 && cateList!=null && cateList.size()>0){
|
BigDecimal[] temp = new BigDecimal[dateList.size()];
|
for(CountDataVO cate : cateList){
|
for(int i=0;i<dateList.size();i++){
|
temp[i] = new BigDecimal(0);
|
for(CountDataVO model : list2){
|
if(StringUtils.equals(model.getDateStr(),dateList.get(i)) && StringUtils.equals(model.getName(),cate.getName())){
|
temp[i] = Constants.formatBigdecimal(model.getPrice());
|
}
|
}
|
}
|
cate.setData(temp);
|
}
|
}
|
data.setCateList(cateList);
|
return data;
|
}
|
|
private List<CountDataVO> getCateListFromDataList(List<CountDataVO> list2) {
|
List<CountDataVO> list = new ArrayList<>();
|
for(CountDataVO model :list2){
|
boolean isnew = true;
|
for(CountDataVO str :list){
|
if(StringUtils.equals(str.getName(),model.getName())){
|
isnew = false;
|
}
|
|
}
|
if(isnew ){
|
list.add(model);
|
}
|
}
|
return list;
|
}
|
|
}
|