From 4eac422e52a4d28fb651b75d0f054697c7a2c0fa Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 09 二月 2026 15:14:13 +0800
Subject: [PATCH] 优化
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/WorkbenchServiceImpl.java | 358 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 358 insertions(+), 0 deletions(-)
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/WorkbenchServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/WorkbenchServiceImpl.java
new file mode 100644
index 0000000..4f6291f
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/WorkbenchServiceImpl.java
@@ -0,0 +1,358 @@
+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.system.vo.NumberDataCountVO;
+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 MemberCouponMapper memberCouponMapper;
+ @Autowired
+ private InviteRecordMapper inviteRecordMapper;
+ @Autowired
+ private IntegralMapper integralMapper;
+ @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)
+ .apply(param.getYear()!=null,"YEAR ( t.CREATE_DATE )="+param.getYear() )
+ .apply(param.getYear()!=null && param.getMonth()!=null,"MONTH ( t.CREATE_DATE )="+param.getMonth() )
+ .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)
+ .apply(param.getYear()!=null,"YEAR ( t1.CREATE_DATE )="+param.getYear() )
+ .apply(param.getYear()!=null && param.getMonth()!=null,"MONTH ( t1.CREATE_DATE )="+param.getMonth() )
+ .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 NumberDataCountVO couponData(CountDataDTO param){
+ NumberDataCountVO data = new NumberDataCountVO();
+ //鍙戞斁绫诲瀷缁熻
+ List<MemberCoupon> r1 = memberCouponMapper.selectList(new MPJLambdaWrapper<MemberCoupon>()
+ .select("(select count(t.id) )",MemberCoupon::getNum)
+ .select( MemberCoupon::getCouponType)
+ .apply(param.getYear()!=null,"YEAR ( t.CREATE_DATE )="+param.getYear() )
+ .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
+ .groupBy(MemberCoupon::getCouponType));
+ if(r1!=null){
+ for(MemberCoupon c : r1){
+ if(Constants.equalsInteger(c.getCouponType(),Constants.ZERO)){
+ data.setNum(Constants.formatLongNum(c.getNum()));//婊″噺鍒�
+ }else{
+ data.setNum1(Constants.formatLongNum(c.getNum()));//婊″噺鍒�
+ }
+ }
+ }
+ //宸蹭娇鐢�
+ Long r2 = memberCouponMapper.selectCount(new MPJLambdaWrapper<MemberCoupon>()
+ .apply(param.getYear()!=null,"YEAR ( t.use_Date )="+param.getYear() )
+ .eq(MemberCoupon::getIsdeleted,Constants.ZERO));
+ data.setUseNum(Constants.formatLongNum(r2));
+ //浼樻儬閲戦鍜屼氦鏄撻噾棰�
+ Goodsorder r3 = goodsorderMapper.selectOne(new MPJLambdaWrapper<Goodsorder>()
+ .select("(select sum(t.total_price) )",Goodsorder::getTotalPrice)
+ .select("(select sum(t.coupon_price) )",Goodsorder::getCouponPrice)
+ .apply(param.getYear()!=null,"YEAR ( t.CREATE_DATE )="+param.getYear() )
+ .eq(Goodsorder::getIsdeleted,Constants.ZERO)
+ .in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey(),Constants.OrderStatus.REFUND.getKey()) );
+ if(r3!=null){
+ data.setPrice(Constants.formatBigdecimal(r3.getCouponPrice()));
+ data.setOrderPrice(Constants.formatBigdecimal(r3.getTotalPrice()));
+ }
+ return data;
+
+ }
+ @Override
+ public NumberDataCountVO integralData(CountDataDTO param){
+ NumberDataCountVO data = new NumberDataCountVO();
+ //鍙戞斁绉垎绫诲瀷缁熻
+ List<Integral> r1 = integralMapper.selectList(new MPJLambdaWrapper<Integral>()
+ .select("(select sum(t.num) )",Integral::getNum)
+ .select( Integral::getObjType)
+ .apply(param.getYear()!=null,"YEAR ( t.CREATE_DATE )="+param.getYear() )
+ .eq(Integral::getIsdeleted,Constants.ZERO)
+ .eq(Integral::getType,Constants.ZERO)
+ .in(Integral::getObjType,Constants.IntegralObjType.REGISTER.getKey(),
+ Constants.IntegralObjType.INVITENEWUSER.getKey(),
+ Constants.IntegralObjType.ORDER_DONATE.getKey(),
+ Constants.IntegralObjType.SYSTEM_RECHARGE.getKey())
+ .groupBy(Integral::getObjType));
+ if(r1!=null){
+ for(Integral c : r1){
+ if(Constants.equalsInteger(c.getObjType(),Constants.IntegralObjType.SYSTEM_RECHARGE.getKey())){
+ data.setNum(Constants.formatBigdecimal(c.getNum()).longValue());//骞冲彴娣诲姞
+ }else if(Constants.equalsInteger(c.getObjType(),Constants.IntegralObjType.INVITENEWUSER.getKey())){
+ data.setNum1(Constants.formatBigdecimal(c.getNum()).longValue());//閭�璇�
+ }else if(Constants.equalsInteger(c.getObjType(),Constants.IntegralObjType.ORDER_DONATE.getKey())){
+ data.setNum2(Constants.formatBigdecimal(c.getNum()).longValue());//娑堣垂杩斿埄
+ }else if(Constants.equalsInteger(c.getObjType(),Constants.IntegralObjType.REGISTER.getKey())){
+ data.setNum3(Constants.formatBigdecimal(c.getNum()).longValue());//娉ㄥ唽
+ }
+ }
+ }
+ //浼樻儬閲戦鍜屼氦鏄撻噾棰�
+ Goodsorder r3 = goodsorderMapper.selectOne(new MPJLambdaWrapper<Goodsorder>()
+ .select("(select sum(t.integral) )",Goodsorder::getIntegral)
+ .select("(select sum(t.use_integral) )",Goodsorder::getUseIntegral)
+ .apply(param.getYear()!=null,"YEAR ( t.CREATE_DATE )="+param.getYear() )
+ .eq(Goodsorder::getIsdeleted,Constants.ZERO)
+ .in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey(),Constants.OrderStatus.REFUND.getKey()) );
+ if(r3!=null){
+ data.setUseNum(Constants.formatBigdecimal(r3.getUseIntegral()).longValue());
+ data.setPrice(Constants.formatBigdecimal(r3.getIntegral()));
+ }
+ return data;
+
+ }
+ @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;
+ }
+
+}
--
Gitblit v1.9.3