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