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;
}
}