From db9e568e346c07b574c5fbe59041889309f0642c Mon Sep 17 00:00:00 2001 From: whywhyo <1511349576@qq.com> Date: 星期一, 29 五月 2023 22:09:30 +0800 Subject: [PATCH] 123 --- zhang-content/src/main/java/com/ruoyi/service/impl/ZTravelPriceServiceImpl.java | 343 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 342 insertions(+), 1 deletions(-) diff --git a/zhang-content/src/main/java/com/ruoyi/service/impl/ZTravelPriceServiceImpl.java b/zhang-content/src/main/java/com/ruoyi/service/impl/ZTravelPriceServiceImpl.java index 58c7334..64f1393 100644 --- a/zhang-content/src/main/java/com/ruoyi/service/impl/ZTravelPriceServiceImpl.java +++ b/zhang-content/src/main/java/com/ruoyi/service/impl/ZTravelPriceServiceImpl.java @@ -1,15 +1,37 @@ package com.ruoyi.service.impl; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.MapUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.domain.ZTravelBase; import com.ruoyi.domain.ZTravelPrice; +import com.ruoyi.domain.ZTravelPrice; +import com.ruoyi.domain.ZTravelPriceDetail; +import com.ruoyi.domain.dto.PriceDto; import com.ruoyi.mapper.ZTravelPriceMapper; +import com.ruoyi.service.ZTravelBaseService; +import com.ruoyi.service.ZTravelPriceDetailService; import com.ruoyi.service.ZTravelPriceService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.util.*; +import java.util.stream.Collectors; /** * <p> - * 鏈嶅姟瀹炵幇绫� + * 鏈嶅姟瀹炵幇绫� * </p> * * @author ojq @@ -18,4 +40,323 @@ @Service public class ZTravelPriceServiceImpl extends ServiceImpl<ZTravelPriceMapper, ZTravelPrice> implements ZTravelPriceService { + @Autowired + ZTravelPriceServiceImpl zTravelPriceService; + + @Autowired + ZTravelPriceDetailService zTravelPriceDetailService; + + @Autowired + ZTravelBaseService zTravelBaseService; + +// private LambdaQueryWrapper<ZTravelPrice> uniqueCondition(ZTravelPrice zTravelPrice){ +// LambdaQueryWrapper<ZTravelPrice> lqw = new LambdaQueryWrapper<>(); +// lqw.eq(zTravelPrice.getMyId()!=null,ZTravelPrice::getMyId,zTravelPrice.getMyId()) +// .eq(zTravelPrice.getStartTime()!=null,ZTravelPrice::getStartTime,zTravelPrice.getStartTime()) +// .eq(zTravelPrice.getEndTime()!=null,ZTravelPrice::getEndTime,zTravelPrice.getEndTime()) +// .eq(zTravelPrice.getTotalDay()!=null,ZTravelPrice::getTotalDay,zTravelPrice.getTotalDay()) +// .eq(StringUtils.isNotEmpty(zTravelPrice.getTitle()),ZTravelPrice::getTitle,zTravelPrice.getTitle()); +//// .eq(zTravelPrice.getEat()!=null,ZTravelPrice::getEat,zTravelPrice.getEat()) +//// .eq(zTravelPrice.getStay()!=null,ZTravelPrice::getStay,zTravelPrice.getStay()) +//// .eq(zTravelPrice.getTraffic()!=null,ZTravelPrice::getTraffic,zTravelPrice.getTraffic()) +//// .eq(zTravelPrice.getShopping()!=null,ZTravelPrice::getShopping,zTravelPrice.getShopping()); +// return lqw; +// } + + private LambdaQueryWrapper<ZTravelPrice> buildCondition(ZTravelPrice zTravelPrice, Long userId) { + LambdaQueryWrapper<ZTravelPrice> lqw = new LambdaQueryWrapper<>(); + lqw.eq(ZTravelPrice::getMyId, userId) + .eq(zTravelPrice.getTotalDay() != null, ZTravelPrice::getTotalDay, zTravelPrice.getTotalDay()) + .le(zTravelPrice.getEnd() != null, ZTravelPrice::getEndTime, zTravelPrice.getEnd()) + .ge(zTravelPrice.getStart() != null, ZTravelPrice::getStartTime, zTravelPrice.getStart()); + + lqw.orderBy(true, true, ZTravelPrice::getStartTime); + return lqw; + } + + /** + * 鍒嗛〉鏌ユ壘 + */ + @Override + public AjaxResult selectDataList(ZTravelPrice zTravelPrice, Integer pageNum, Integer pageSize) { + SysUser user = SecurityUtils.getLoginUser().getUser(); + Long userId = user.getUserId(); + LambdaQueryWrapper<ZTravelPrice> lqw = buildCondition(zTravelPrice, userId); + + Page<ZTravelPrice> pageBean = new Page<>(pageNum, pageSize); + Page<ZTravelPrice> pageResult = page(pageBean, lqw); + + List<ZTravelPrice> priceList = pageResult.getRecords();//寰楀埌鏌ヨ鍑烘潵鐨勬暟鎹� + + //鏌ヨ璐圭敤璇︽儏 + for (ZTravelPrice price : priceList) { + LambdaQueryWrapper<ZTravelPriceDetail> detailLqw = new LambdaQueryWrapper<>(); + detailLqw.eq(ZTravelPriceDetail::getFeeId,price.getId()); + List<ZTravelPriceDetail> detailList = zTravelPriceDetailService.list(detailLqw); + price.setDetailList(detailList); + } + + HashMap<String, Object> data = MapUtils.getResult(pageResult, priceList); + return AjaxResult.success(data); + + } + + @Override + public List<ZTravelPrice> selectCondition(ZTravelPrice zTravelPrice) { + SysUser user = SecurityUtils.getLoginUser().getUser(); + Long userId = user.getUserId(); + LambdaQueryWrapper<ZTravelPrice> lqw = buildCondition(zTravelPrice, userId); + return list(lqw); + } + + @Override + public List<ZTravelPrice> selectByIds(Long[] ids) { + List<ZTravelPrice> list = new ArrayList<>(); + if (ids.length != 0) + list = listByIds(Arrays.asList(ids)); + else + list = list(); + return list; + } + + + @Override + @Transactional + public AjaxResult mySave(PriceDto priceDto) { + SysUser user = SecurityUtils.getLoginUser().getUser(); + Long userId = user.getUserId(); + + List<ZTravelPriceDetail> detailList = priceDto.getDetailList(); + + //鐢熸垚璐圭敤琛╥d + String priceId = IdUtils.fastSimpleUUID(); + + //寰楀埌鎬诲ぉ鏁� + long count = detailList.stream().map(ZTravelPriceDetail::getHappenTime).distinct().count(); + Integer totalDay = Math.toIntExact(count); + + + //鍏堟彃鍏ユ槑缁嗚〃 + + //collectList杩樻病鏈夋坊鍔犳瘡鏃ラ噾棰濆瓧娈� + List<ZTravelPriceDetail> collectList = detailList.stream().peek((priceDetail) -> + { + priceDetail.setFeeId(priceId); + if (priceDetail.getEat() == null || priceDetail.getStay() == null || priceDetail.getTraffic() == null || priceDetail.getEntrance() == null || priceDetail.getShopping() == null) { + throw new RuntimeException("濡傛灉娌℃湁瀵瑰簲鐨勮垂鐢紝鍓嶇瑕佷紶涓�0杩囨潵"); + } + Double totalCost = priceDetail.getEat() + priceDetail.getStay() + priceDetail.getTraffic() + priceDetail.getEntrance() + priceDetail.getShopping(); + priceDetail.setTotalCost(totalCost); + }).collect(Collectors.toList()); + + + //鎸夋棩鏈熷垎缁� + Map<String, List<ZTravelPriceDetail>> groupByTimeMap = collectList.stream().collect(Collectors.groupingBy(ZTravelPriceDetail::getHappenTime)); + + //灏嗘瘡鏃ラ噾棰濆瓧娈电殑鍊间篃娣诲姞涓� + for (String key : groupByTimeMap.keySet()) { + List<ZTravelPriceDetail> groupByTimeList = groupByTimeMap.get(key); + Double dayTotalCost = 0d; + for (ZTravelPriceDetail detail : groupByTimeList) { + dayTotalCost += detail.getTotalCost(); + } + + for (ZTravelPriceDetail detail : groupByTimeList){ + detail.setDayCost(dayTotalCost); + } + } + + //寮�濮嬫彃鍏ヨ垂鐢ㄨ鎯呮暟鎹� + for (String key : groupByTimeMap.keySet()) { + List<ZTravelPriceDetail> dataList = groupByTimeMap.get(key); + for (ZTravelPriceDetail detail : dataList) { + zTravelPriceDetailService.save(detail); + } + } + + + //鍐嶆彃鍏ヨ垂鐢ㄨ褰曠粺璁¤〃 + + //鍏堝緱鍒板悇涓鎯呰垂鐢ㄧ殑鎬诲拰 + Double eatTotal = 0d; + Double stayTotal = 0d; + Double trafficTotal = 0d; + Double entranceTotal = 0d; + Double shoppingTotal = 0d; + Double totalFee = 0d; + + for (String key : groupByTimeMap.keySet()) { + List<ZTravelPriceDetail> dataList = groupByTimeMap.get(key); + for (ZTravelPriceDetail priceDetail : dataList) { + if (priceDetail.getEat() == null || priceDetail.getStay() == null || priceDetail.getTraffic() == null || priceDetail.getEntrance() == null || priceDetail.getShopping() == null) { + throw new RuntimeException("濡傛灉娌℃湁瀵瑰簲鐨勮垂鐢紝鍓嶇瑕佷紶涓�0杩囨潵"); + } + eatTotal+=priceDetail.getEat(); + stayTotal+=priceDetail.getStay(); + trafficTotal+=priceDetail.getTraffic(); + entranceTotal+=priceDetail.getEntrance(); + shoppingTotal+=priceDetail.getShopping(); + totalFee+=priceDetail.getTotalCost(); + } + } + + ZTravelPrice zTravelPrice = new ZTravelPrice(); + zTravelPrice.setId(priceId); + zTravelPrice.setStartTime(priceDto.getStartTime()); + zTravelPrice.setEndTime(priceDto.getEndTime()); + zTravelPrice.setTotalDay(totalDay); + zTravelPrice.setTitle(priceDto.getTitle()); + zTravelPrice.setEat(eatTotal); + zTravelPrice.setStay(stayTotal); + zTravelPrice.setTraffic(trafficTotal); + zTravelPrice.setEntrance(entranceTotal); + zTravelPrice.setShopping(shoppingTotal); + zTravelPrice.setTotalCost(totalFee); + zTravelPrice.setMyId(userId); + + //鎻掑叆璐圭敤璁板綍缁熻 + zTravelPriceService.save(zTravelPrice); + + return AjaxResult.success(); + + } + + @Override + public AjaxResult myUpdate(PriceDto priceDto) { + + SysUser user = SecurityUtils.getLoginUser().getUser(); + Long userId = user.getUserId(); + + List<ZTravelPriceDetail> detailList = priceDto.getDetailList(); + + //寰楀埌鎬诲ぉ鏁� + long count = detailList.stream().map(ZTravelPriceDetail::getHappenTime).distinct().count(); + Integer totalDay = Math.toIntExact(count); + + List<ZTravelPriceDetail> collectList = detailList.stream().peek((priceDetail) -> + { + if (priceDetail.getEat() == null || priceDetail.getStay() == null || priceDetail.getTraffic() == null || priceDetail.getEntrance() == null || priceDetail.getShopping() == null) { + throw new RuntimeException("濡傛灉娌℃湁瀵瑰簲鐨勮垂鐢紝鍓嶇瑕佷紶涓�0杩囨潵"); + } + Double totalCost = priceDetail.getEat() + priceDetail.getStay() + priceDetail.getTraffic() + priceDetail.getEntrance() + priceDetail.getShopping(); + priceDetail.setTotalCost(totalCost); + }).collect(Collectors.toList()); + + //鎸夋棩鏈熷垎缁� + Map<String, List<ZTravelPriceDetail>> groupByTimeMap = collectList.stream().collect(Collectors.groupingBy(ZTravelPriceDetail::getHappenTime)); + + //灏嗘瘡鏃ラ噾棰濆瓧娈电殑鍊间篃娣诲姞涓� + for (String key : groupByTimeMap.keySet()) { + List<ZTravelPriceDetail> groupByTimeList = groupByTimeMap.get(key); + Double dayTotalCost = 0d; + for (ZTravelPriceDetail detail : groupByTimeList) { + dayTotalCost += detail.getTotalCost(); + } + + for (ZTravelPriceDetail detail : groupByTimeList){ + detail.setDayCost(dayTotalCost); + } + } + + //寮�濮嬩慨鏀硅垂鐢ㄨ鎯呮暟鎹� + for (String key : groupByTimeMap.keySet()) { + List<ZTravelPriceDetail> dataList = groupByTimeMap.get(key); + for (ZTravelPriceDetail detail : dataList) { + zTravelPriceDetailService.updateById(detail); + } + } + + //鍐嶄慨鏀硅垂鐢ㄨ褰曠粺璁¤〃 + + //鍏堝緱鍒板悇涓鎯呰垂鐢ㄧ殑鎬诲拰 + Double eatTotal = 0d; + Double stayTotal = 0d; + Double trafficTotal = 0d; + Double entranceTotal = 0d; + Double shoppingTotal = 0d; + Double totalFee = 0d; + + for (String key : groupByTimeMap.keySet()) { + List<ZTravelPriceDetail> dataList = groupByTimeMap.get(key); + for (ZTravelPriceDetail priceDetail : dataList) { + if (priceDetail.getEat() == null || priceDetail.getStay() == null || priceDetail.getTraffic() == null || priceDetail.getEntrance() == null || priceDetail.getShopping() == null) { + throw new RuntimeException("濡傛灉娌℃湁瀵瑰簲鐨勮垂鐢紝鍓嶇瑕佷紶涓�0杩囨潵"); + } + eatTotal+=priceDetail.getEat(); + stayTotal+=priceDetail.getStay(); + trafficTotal+=priceDetail.getTraffic(); + entranceTotal+=priceDetail.getEntrance(); + shoppingTotal+=priceDetail.getShopping(); + totalFee+=priceDetail.getTotalCost(); + } + } + + ZTravelPrice zTravelPrice = new ZTravelPrice(); + zTravelPrice.setId(priceDto.getId()); + zTravelPrice.setStartTime(priceDto.getStartTime()); + zTravelPrice.setEndTime(priceDto.getEndTime()); + zTravelPrice.setTotalDay(totalDay); + zTravelPrice.setTitle(priceDto.getTitle()); + zTravelPrice.setEat(eatTotal); + zTravelPrice.setStay(stayTotal); + zTravelPrice.setTraffic(trafficTotal); + zTravelPrice.setEntrance(entranceTotal); + zTravelPrice.setShopping(shoppingTotal); + zTravelPrice.setTotalCost(totalFee); + zTravelPrice.setMyId(userId); + + //淇敼缁熻琛� + zTravelPriceService.updateById(zTravelPrice); + + return AjaxResult.success(); + + + } + + @Override + @Transactional + public AjaxResult myRemove(String[] ids) { + + for (String feeId : ids) { + //鍒犻櫎鏃呮父缁忓巻 + zTravelBaseService.remove(new LambdaQueryWrapper<ZTravelBase>().eq(ZTravelBase::getFeeId,feeId)); + + //鍒犻櫎璐圭敤璇︽儏 + zTravelPriceDetailService.remove(new LambdaQueryWrapper<ZTravelPriceDetail>().eq(ZTravelPriceDetail::getFeeId,feeId)); + + //鍒犻櫎璐圭敤璁板綍 + zTravelPriceService.remove(new LambdaQueryWrapper<ZTravelPrice>().eq(ZTravelPrice::getId,feeId)); + } + + return AjaxResult.success(); + + } + +// @Override +// public AjaxResult importExcel(MultipartFile file) { +// +// } + + +// @Override +// @Transactional +// public AjaxResult importExcel(MultipartFile file) { +// +// ExcelUtil<ZTravelPrice> util = new ExcelUtil<>(ZTravelPrice.class); +// List<ZTravelPrice> dataList = null; +// try { +// dataList = util.importExcel(file.getInputStream()); +// } catch (Exception e) { +// throw new RuntimeException("娌℃湁鎸夌収瑙勫垯瀵煎叆鏁版嵁"); +// } +// +// assert dataList != null; +// +// for (ZTravelPrice zTravelPrice : dataList) { +// zTravelPriceService.mySave(zTravelPrice); +// } +// +// return AjaxResult.success(); +// +// } } -- Gitblit v1.9.1