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 shopRankList10(CountDataDTO param) { Date startDate = null,endDate = null; if(param.getYear()!=null && param.getMonth()!=null){ List 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 dList = DateUtil.getDatePeriodByYear(param.getYear()); startDate = dList.get(0); endDate = dList.get(1); } //统计订单销量和销售额集合 List list1 = goodsorderMapper.selectJoinList(BusinessDataCountVO.class,new MPJLambdaWrapper() .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 goodsRankList10(CountDataDTO param) { Date startDate = null,endDate = null; if(param.getYear()!=null && param.getMonth()!=null){ List 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 dList = DateUtil.getDatePeriodByYear(param.getYear()); startDate = dList.get(0); endDate = dList.get(1); } //统计订单销量和销售额集合 List list1 = goodsorderDetailMapper.selectJoinList(BusinessDataCountVO.class,new MPJLambdaWrapper() .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 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() .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() .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 list1 = goodsorderMapper.selectJoinList(CountDataVO.class,new MPJLambdaWrapper() .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 datalist1 = new ArrayList<>(); List 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 list2 = goodsorderDetailMapper.selectJoinList(CountDataVO.class,new MPJLambdaWrapper() .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 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 getCateListFromDataList(List list2) { List 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; } }