From 19fd7785705f30d25c6c8e44b9356cc585af68cd Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期三, 19 三月 2025 14:26:41 +0800 Subject: [PATCH] 111 --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 147 +++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 131 insertions(+), 16 deletions(-) diff --git a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java index 0b3c4a2..f04ec9f 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java @@ -6,6 +6,7 @@ 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.core.annotation.excel.ExcelExporter; import com.doumee.core.constants.Constants; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; @@ -28,6 +29,8 @@ import com.doumee.dao.business.model.Goodsorder; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRides; +import com.doumee.dao.business.vo.BikeIncomeDetailReportVO; +import com.doumee.dao.business.vo.BikeIncomeReportVO; import com.doumee.dao.business.vo.GoodsorderExportVO; import com.doumee.dao.business.vo.GoodsorderTotalDataVO; import com.doumee.dao.business.web.request.*; @@ -58,10 +61,14 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.math.BigDecimal; import java.net.InetAddress; +import java.net.URLEncoder; import java.net.UnknownHostException; +import java.nio.charset.Charset; import java.sql.Ref; import java.time.LocalTime; import java.time.format.DateTimeFormatter; @@ -199,7 +206,9 @@ MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Goodsorder.class); queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid); + queryWrapper.selectAs(BaseParam::getType, Goodsorder::getBikeType); queryWrapper.leftJoin(Member.class, Member::getId ,Goodsorder::getMemberId); + queryWrapper.leftJoin(BaseParam.class, BaseParam::getId ,Goodsorder::getParamId); queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id and r.status=2 ) as refund_date"); queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status=2) as refund_money"); //鏃堕棿娈电瓫閫� @@ -213,6 +222,9 @@ queryWrapper.eq(Goodsorder::getPayStatus,Constants.ONE); queryWrapper.orderByAsc(Goodsorder::getPayDate); goodsorderExportVOIPage = goodsorderJoinMapper.selectJoinPage(page, GoodsorderExportVO.class, queryWrapper); + + + }else{ MPJLambdaWrapper<Refund> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAs(Refund::getMoney,GoodsorderExportVO::getRefundMoney); @@ -240,6 +252,7 @@ if (!CollectionUtils.isEmpty(goodsorderExportVOIPage.getRecords())){ goodsorderExportVOIPage.getRecords().forEach(s->{ + s.setBikeType(s.getType()!=Constants.ZERO?s.getBikeType():Constants.ONE); s.setMoney(Constants.translateMoney(s.getMoney())); s.setRefundMoney(Constants.translateMoney(s.getRefundMoney())); s.setCloseMoney(Constants.translateMoney(s.getCloseMoney()).compareTo(s.getMoney()) > 0 ? s.getMoney() : Constants.translateMoney(s.getCloseMoney())); @@ -296,11 +309,13 @@ queryWrapper.selectAll(Goodsorder.class); queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid); queryWrapper.selectAs(DiscountMember::getName, Goodsorder::getDiscountName); + queryWrapper.selectAs(BaseParam::getType, Goodsorder::getBikeType); queryWrapper.leftJoin(Member.class, Member::getId ,Goodsorder::getMemberId); queryWrapper.leftJoin(DiscountMember.class, DiscountMember::getGoodsorderId ,Goodsorder::getId); -// queryWrapper.select("(select r.name from discount_member r where r.isdeleted=0 and r.goodsorder_id=t.id limit 1) as discountName"); + queryWrapper.leftJoin(BaseParam.class, BaseParam::getId ,Goodsorder::getParamId); queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id and r.status in(0,2)) as refund_date"); queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status in(0,2)) as refund_money"); + queryWrapper.select("(select sum(d.ride_price) from discount_log d where d.goodsorder_id=t.id and d.type = 0) as discountMoney"); //鏃堕棿娈电瓫閫� if (Objects.nonNull(model.getStartDate())){ queryWrapper.ge(Goodsorder::getPayDate, Utils.Date.getStart(model.getStartDate())); @@ -333,6 +348,8 @@ queryWrapper.select("(select sum(er.discount_price) from member_rides er where er.ordre_id=t.id and er.isdeleted=0) as discountMoney," + "(select er.status from member_rides er where er.ordre_id=t.id order by er.create_date desc limit 1) as memberRidesStatus"); + + queryWrapper.select("( select s.realname from refund r left join system_user s on r.creator = s.id where r.obj_id = t.id order by r.id desc limit 1 ) ",Goodsorder::getRefundUserName); if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ZERO)){ queryWrapper.ne(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey()); @@ -627,6 +644,7 @@ freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); }catch (Exception e){ } + closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney(),goodsorder.getMemberId(),true).getAmount(); //瀹為檯缁撶畻浠锋牸锛岃褰曞湪鏈�楂樿溅鍨嬭褰曚笂 // memberRides.get(0).setActualPrice(closeMoney); @@ -674,6 +692,15 @@ memberRidesJoinMapper.updateById(up); } } + int durationSum = 0; + int freeTime = 0; + try { + freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); + }catch (Exception e){ + } + //鏈�楂樹环鏍艰溅鍨嬬殑楠戣璁板綍 + MemberRides topRides = this.getMaxRides(memberRides,durationSum,freeTime,true); + // BigDecimal closeMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refund.getMoney())); //閫�娆句箰琛� // int type =Constants.formatIntegerNum(refund.getType()); @@ -681,6 +708,7 @@ update.setId(goodsorder.getId()); update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey()); update.setCloseMoney(closeMoney); + update.setParamId(Objects.nonNull(topRides)?topRides.getParamId():null); update.setCloseStatus(Constants.ONE); update.setCloseDate(new Date()); update.setCloseInfo(Constants.REFUND_TYPE.get(type).getInfo()); @@ -717,6 +745,23 @@ transactionsMapper.insert(transactions); //淇敼璁㈠崟淇℃伅 goodsorderMapper.updateById(update); + } + + public MemberRides getMaxRides(List<MemberRides> memberRides,Integer durationSum,Integer freeTime,boolean isClose){ + MemberRides topRides =null; + for(MemberRides rides : memberRides){ + if ( isClose && Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻"); + } + durationSum += Constants.formatIntegerNum(rides.getDuration());//绱楠戣锛堣璐癸級鏃堕暱 + if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹� + if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum()) + && Constants.formatIntegerNum(rides.getDuration())>0)){ + topRides = rides; + } + } + } + return topRides; } /** * 閫�娆炬垚鍔熷洖璋� @@ -797,21 +842,8 @@ ridesDetailResponse.setHaveDisCount(Constants.ZERO); BigDecimal closeMoney = new BigDecimal(0.00); int durationSum = 0; - MemberRides topRides =null; - - //鍙栨渶楂樿溅鍨嬭绠楁柟妗堢粨绠楄鍗� - for(MemberRides rides : memberRides){ - if ( isClose && Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻"); - } - durationSum += Constants.formatIntegerNum(rides.getDuration());//绱楠戣锛堣璐癸級鏃堕暱 - if(durationSum-freeTime > 0 ){//鍙畻瓒呭嚭鍏嶈垂鏃堕暱鐨勬暟鎹� - if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum()) - && Constants.formatIntegerNum(rides.getDuration())>0)){ - topRides = rides; - } - } - } + //鏈�楂樹环鏍艰溅鍨嬬殑楠戣璁板綍 + MemberRides topRides = this.getMaxRides(memberRides,durationSum,freeTime,isClose); //璁$畻搴斾粯閲戦 if( topRides != null){ @@ -827,6 +859,8 @@ } } topRides.setActualPrice(closeMoney); + //2025骞�3鏈�18鏃�11:28:38 杩斿洖楠戣浠锋牸鏈�楂樼殑杞﹀瀷 + ridesDetailResponse.setParamId(topRides.getParamId()); } //鏌ヨ鏄惁瀛樺湪濂楅淇℃伅 DiscountMember discountMember = this.getUseDiscount(memberId,durationSum,Objects.nonNull(topRides)?topRides.getType():null); @@ -1641,4 +1675,85 @@ ); } + + + @Override + public List<List<String>> getBikeIncomeReportVOList(Date startDate ,Date endDate){ + if( (Objects.isNull(startDate)||Objects.isNull(endDate)) + || startDate.getTime()>endDate.getTime() + || DateUtil.daysBetweenDates(endDate,startDate) > 30 + ) + { + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + System.out.println( DateUtil.daysBetweenDates(endDate,startDate)); + //鑾峰彇鎵�鏈夎溅鍨嬩俊鎭� + List<BaseParam> baseParamList = baseParamMapper.selectList(new QueryWrapper<BaseParam>().lambda().eq(BaseParam::getIsdeleted,Constants.ZERO) + .in(BaseParam::getType,Constants.THREE,Constants.FOUR) + .orderByAsc(BaseParam::getType,BaseParam::getSortnum) + ); + //鑾峰彇2涓棩鏈熶笅鎵�鏈夊ぉ鏁� + List<Date> dateList = DateUtil.getDateList(startDate,endDate); + //鏌ヨ鏃ユ湡鍐呯殑鎵�鏈夋暟鎹� + List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getType,Constants.ZERO) + .eq(Goodsorder::getIsdeleted,Constants.ZERO) + .eq(Goodsorder::getStatus,Constants.FOUR) + .isNotNull(Goodsorder::getParamId) + .ge(Goodsorder::getPayDate, Utils.Date.getStart(startDate)) + .le( Goodsorder::getPayDate, Utils.Date.getEnd(endDate)) + ); + + List<List<String>> parentList = new ArrayList<>(); + + for (BaseParam baseParam:baseParamList) { + List<String> dataChildList = new ArrayList<>(); + dataChildList.add(baseParam.getName()+"(鍏�)"); + BigDecimal totalAmount = BigDecimal.ZERO; + for (Date date:dateList) { + BigDecimal amount = goodsorderList.stream() + .filter(i->StringUtils.isNotBlank(i.getParamId())&&DateUtil.getShortDateStr(date).equals(DateUtil.getShortDateStr(i.getCreateDate()))&&baseParam.getId().equals(i.getParamId())) + .map(i->i.getCloseMoney()).reduce(BigDecimal.ZERO,BigDecimal::add); + dataChildList.add(amount.toString()); + totalAmount = amount.add(totalAmount); + } + BikeIncomeDetailReportVO detail = new BikeIncomeDetailReportVO(); + dataChildList.add("锟�"+totalAmount); + parentList.add(dataChildList); + } + + List<String> dataStrList = new ArrayList<>(); + dataStrList.add("鏃ユ湡"); + for (Date date:dateList) { + dataStrList.add(DateUtil.getShortDateStr(date)); + } + dataStrList.add("鎬昏"); + parentList.add(0,dataStrList); + + return parentList; + + } + + @Override + public void excel(Date startDate , Date endDate, HttpServletResponse response){ + List<List<String>> data = this.getBikeIncomeReportVOList(startDate,endDate); + try { + String fileName = "杞﹀瀷鏀跺叆鍒嗘瀽_"+System.currentTimeMillis(); + String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx"; + response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName); + response.setContentType("application/octet-stream"); + response.setHeader("eva-opera-type", "download"); + response.setHeader("eva-download-filename", encodeFileName); + ExcelExporter.exportList(data, fileName, response.getOutputStream()); + } catch (IOException e) { + throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e); + } + } + + + + + + + + } -- Gitblit v1.9.3