package com.ruoyi.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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.utils.MapUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.domain.*; import com.ruoyi.domain.dto.zfEventdto; import com.ruoyi.mapper.TravelCountMapper; import com.ruoyi.service.ModuleSearchable; import com.ruoyi.service.TravelCountService; import com.ruoyi.service.TravelDetailService; import com.ruoyi.service.ZInfoUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author ojq * @since 2023-10-06 */ @Service public class TravelCountServiceImpl extends ServiceImpl implements TravelCountService, ModuleSearchable { @Autowired private TravelDetailService travelDetailService; @Autowired private TravelCountService travelCountService; @Autowired ZInfoUserService zInfoUserService; @Override public AjaxResult selectDataList(Long userId, Integer pageNum, Integer pageSize, TravelCount travelCount, String happenStartTime, String happenEndTime) { //设置查询条件 LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); // lqw.eq(TravelCount::getUid,userId); if(travelCount!=null){ lqw.like(travelCount.getName()!=null,TravelCount::getName,travelCount.getName()); lqw.like(travelCount.getDestination()!=null,TravelCount::getDestination,travelCount.getDestination()); lqw.like(travelCount.getProperty()!=null,TravelCount::getProperty,travelCount.getProperty()); lqw.like(travelCount.getManner()!=null,TravelCount::getManner,travelCount.getManner()); lqw.like(travelCount.getName()!=null,TravelCount::getName,travelCount.getName()); lqw.like(travelCount.getName()!=null,TravelCount::getName,travelCount.getName()); lqw.like(travelCount.getName()!=null,TravelCount::getName,travelCount.getName()); } if(happenStartTime!=null){ lqw.gt(TravelCount::getStartTime,happenStartTime); } if(happenEndTime!=null){ lqw.lt(TravelCount::getEndTime,happenEndTime); } lqw.orderByDesc(TravelCount::getCreateTime); System.out.println("--sdfdsf000sfssssssssssssssssss"); //根据userId查询到infouser的uaid ZInfoUser zInfoUser = zInfoUserService.getInfoBysysId(userId); //拿到所有的sysid List fms = zInfoUserService.findByUaidToFaid(zInfoUser.getUaid()).stream().map(ZInfoUser::getSysId).collect(Collectors.toList()); // LambdaQueryWrapper lqw; if(!fms.isEmpty()) lqw = lqw.in(TravelCount::getUid, fms); else lqw.eq(TravelCount::getUid,userId); // else // lqw = buildCondition(zProperty, userId); Page resultPage = page(new Page<>(pageNum, pageSize), lqw); resultPage.getRecords().forEach(this::inputTotalData); return AjaxResult.success(MapUtils.getResult(resultPage)); } /** * 批量删除统计表数据 */ @Override @Transactional public void removeData(List list) { //在删除统计表数据之前,要先删除明细表的数据 travelDetailService.removeBatchByCid(list); //再删除自己表的数据 travelCountService.removeBatchByIds(list); } @Override public TravelCount getDataById(Long id) { TravelCount travelCount = getById(id); inputTotalData(travelCount); return travelCount; } private void inputTotalData(TravelCount travelCount){ //先找到对应一条统计数据的所有详细数据 List travelDetailList = travelDetailService.getDataByCid(travelCount.getId(),null); double entranceTotal = 0; double eatTotal = 0; double stayTotal = 0; double travelTotal = 0; double shopTotal = 0; //把所有详细数据的费用值累加起来 for (TravelDetail detail : travelDetailList) { entranceTotal+=detail.getEntrance(); eatTotal+=detail.getEat(); stayTotal+=detail.getStay(); travelTotal+=detail.getTravel(); shopTotal += detail.getShop(); } travelCount.setEntranceTotal(entranceTotal); travelCount.setEatTotal(eatTotal); travelCount.setStayTotal(stayTotal); travelCount.setTravelTotal(travelTotal); travelCount.setShopTotal(shopTotal); DecimalFormat df = new DecimalFormat("0.00"); travelCount.setTotalPrice(Double.parseDouble(df.format(entranceTotal+eatTotal+travelCount.getGroupTotal()+stayTotal+travelTotal))); } private LambdaQueryWrapper buildCondition(TravelCount travelCount, List familyIdList) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.orderByDesc(TravelCount::getCreateTime); if (StringUtils.isNotEmpty(travelCount.getIsHide())) { lqw.and(wrapper -> wrapper .ne(TravelCount::getIsHide, "是") .or() .isNull(TravelCount::getIsHide) ); } if (travelCount.getHasAttachment() != null && travelCount.getHasAttachment().equals("是")) { lqw.apply("url IS NOT NULL AND url != ''"); } // lqw.in(StringUtils.isNotEmpty(travelCount.getCompanionList()),travelCount::getCompanion,travelCount.getCompanionList()); // if (travelCount.getYear() != 0) { // System.out.println("pppppppppppppppppppppppppppppppppppppppppppppppppppp"+travelCount.getYear()); // lqw.apply("YEAR(happen_time) = {0}", travelCount.getYear()); // } if (CollectionUtils.isNotEmpty(travelCount.getCompanionList())) { List companionList = travelCount.getCompanionList(); // 清理和去重 companionList = companionList.stream() .map(String::trim) .filter(s -> !s.isEmpty()) .distinct() .collect(Collectors.toList()); if (!companionList.isEmpty()) { // 确保所有参与人都在companion字段中 for (String companion : companionList) { lqw.apply("FIND_IN_SET({0}, REPLACE(REPLACE(companion, ' ', ''), ',', ',')) > 0", companion); } } } System.out.println("查询条件: " + lqw.getCustomSqlSegment()); return lqw; } @Override public String getModuleCode() { return "旅游"; } @Override // @Cacheable(value = "economy_search", key = "T(String).format('2045_%s_%s_%s_%s',#companion != null ? #companion : 'null',#happenStartTime != null ? #happenStartTime.getTime() : 0,#happenEndTime != null ? #happenEndTime.getTime() : 0,#hasAttachment != null ? #hasAttachment : 'null')") public List search(String companion, Date happenStartTime, Date happenEndTime, String hasAttachment) { TravelCount travelCount = new TravelCount(); travelCount.setCompanion(companion); String[] split = companion.split(","); List list = Arrays.asList(split); travelCount.setCompanionList(list); travelCount.setHasAttachment(hasAttachment); travelCount.setIsHide("否"); System.out.println("[[[[[[[["+travelCount); return dataList(travelCount); } public List dataList(TravelCount travelCount) { LambdaQueryWrapper lqw = buildCondition(travelCount, null); List beanRecords = list(lqw); return encapData(beanRecords); } public List encapData(List lis) { List daoRes = new ArrayList<>() ; for(TravelCount obj : lis) { zfEventdto atd = new zfEventdto(); atd.setId(Math.toIntExact(obj.getId())); atd.setModule("旅游"); atd.setName(obj.getCompanion()); atd.setCreateTime(obj.getCreateTime()); daoRes.add(atd); } return daoRes; } }