From f1ef1f2baf4e58733c4913ce5df0b3d2ea582308 Mon Sep 17 00:00:00 2001
From: feige <feige@qq.com>
Date: 星期三, 12 十一月 2025 16:49:08 +0800
Subject: [PATCH] 修改了一个bug
---
zhang-content/src/main/java/com/ruoyi/service/impl/ZTravelPriceServiceImpl.java | 374 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 373 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..2cda4f0 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,33 @@
package com.ruoyi.service.impl;
+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.uuid.IdUtils;
+import com.ruoyi.domain.ZTravelBase;
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 java.util.*;
+import java.util.stream.Collectors;
/**
* <p>
- * 鏈嶅姟瀹炵幇绫�
+ * 鏈嶅姟瀹炵幇绫�
* </p>
*
* @author ojq
@@ -18,4 +36,358 @@
@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())
+ .like(StringUtils.isNotEmpty(zTravelPrice.getTitle()),ZTravelPrice::getTitle,zTravelPrice.getTitle())
+ .eq(zTravelPrice.getTotalCost()!=null,ZTravelPrice::getTotalCost,zTravelPrice.getTotalCost())
+ .le(zTravelPrice.getEnd() != null, ZTravelPrice::getEndTime, zTravelPrice.getEnd())
+ .ge(zTravelPrice.getStart() != null, ZTravelPrice::getStartTime, zTravelPrice.getStart())
+ .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());
+
+ 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.setTableName(priceDto.getTableName());
+ zTravelPrice.setProperty(priceDto.getProperty());
+ zTravelPrice.setType(priceDto.getType());
+ zTravelPrice.setDestination(priceDto.getDestination());
+ 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
+ @Transactional
+ public AjaxResult myUpdate(PriceDto priceDto) {
+
+ SysUser user = SecurityUtils.getLoginUser().getUser();
+ Long userId = user.getUserId();
+
+ List<ZTravelPriceDetail> detailList = priceDto.getDetailList();
+
+ //鍏堟煡鏁版嵁搴撻噷闈㈣繖涓�娆¤垂鐢ㄦ墍鏈夌殑鏁版嵁
+ LambdaQueryWrapper<ZTravelPriceDetail> lqw = new LambdaQueryWrapper<>();
+ lqw.eq(ZTravelPriceDetail::getFeeId,priceDto.getId());
+ List<ZTravelPriceDetail> selectDetailList = zTravelPriceDetailService.list(lqw);
+
+ //鎶婁紶杩囨潵鐨勬暟鎹腑娌℃湁鐨刬d锛屽湪鏁版嵁搴撲腑鍒犳帀
+ List<Long> detailIdList = detailList.stream().filter(priceDetail -> priceDetail.getId() != null).map(ZTravelPriceDetail::getId).collect(Collectors.toList());
+ List<Long> deleteIdList = selectDetailList.stream().filter(priceDetail -> !detailIdList.contains(priceDetail.getId())).map(ZTravelPriceDetail::getId).collect(Collectors.toList());
+ zTravelPriceDetailService.removeBatchByIds(deleteIdList);
+
+
+ //濡傛灉浼犺繃鏉ョ殑鍒楄〃鐨勬暟鎹噷闈㈡病鏈塱d
+ List<ZTravelPriceDetail> addPriceDetail = detailList.stream().filter(priceDetail -> priceDetail.getId() == null || priceDetail.getId() == 0 ).collect(Collectors.toList());
+ addPriceDetail.forEach(priceDetail -> {
+ priceDetail.setFeeId(priceDto.getId());
+ });
+
+ //閭e氨鍏堝鍔犲埌鏁版嵁搴撲腑
+ zTravelPriceDetailService.saveBatch(addPriceDetail);
+
+ //寰楀埌鎬诲ぉ鏁�
+ 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.setTableName(priceDto.getTableName());
+ zTravelPrice.setProperty(priceDto.getProperty());
+ zTravelPrice.setType(priceDto.getType());
+ zTravelPrice.setDestination(priceDto.getDestination());
+ 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