package com.ycl.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.common.enums.business.ReportEnum; import com.ycl.common.utils.DateUtils; import com.ycl.common.utils.SecurityUtils; import com.ycl.common.utils.StringUtils; import com.ycl.domain.entity.ProjectInfo; import com.ycl.domain.entity.Report; import com.ycl.domain.form.ReportReviewForm; import com.ycl.domain.vo.DailyStatVO; import com.ycl.domain.vo.WorkStationScheduleVO; import com.ycl.mapper.ReportMapper; import com.ycl.service.IndexHomeService; import com.ycl.service.ReportService; import com.ycl.common.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.domain.form.ReportForm; import com.ycl.domain.vo.ReportVO; import com.ycl.domain.query.ReportQuery; import net.sf.jsqlparser.expression.StringValue; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import com.ycl.framework.utils.PageUtil; import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 服务实现类 * * @author zxl * @since 2025-12-18 */ @Service @RequiredArgsConstructor public class ReportServiceImpl extends ServiceImpl implements ReportService { private final ReportMapper reportMapper; private final IndexHomeService indexHomeService; /** * 添加 * @param form * @return */ @Override public Result add(ReportForm form) { Report entity = ReportForm.getEntityByForm(form, null); entity.setUserId(SecurityUtils.getUserId()); entity.setStatus(ReportEnum.PendingReview.name()); // 转换fileUrl if (form.getFileUrl() != null && form.getFileUrl().length != 0) { entity.setFileUrl(Arrays.stream(form.getFileUrl()) .filter(str -> str != null && !str.isBlank()) // 剔除null和空白元素 .collect(Collectors.joining(","))); } baseMapper.insert(entity); return Result.ok("添加成功"); } @Override public Result getPage(ReportQuery query) { IPage page = PageUtil.getPage(query, ReportVO.class); baseMapper.getPage(page, query); for (ReportVO vo : page.getRecords()) { if (StringUtils.isNotBlank(vo.getFileUrl())) { String[] fileUrlArray = vo.getFileUrl().split(","); vo.setFileUrlArray(fileUrlArray); } } return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 修改 * @param form * @return */ @Override public Result update(ReportForm form) { Report entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result listByMonth(ReportQuery query) { Integer projectId = null; if (!"all".equals(query.getProjectId())) { projectId = Integer.valueOf(query.getProjectId()); } Long userId = SecurityUtils.getUserId(); List list = baseMapper.groupByProjectAndDate(userId,projectId, query.getStartTime(),query.getEndTime()); List dailyStatVOList = new ArrayList<>(); for (ReportVO vo : list) { if (vo == null) { continue; } DailyStatVO statVO = new DailyStatVO(); statVO.setId(vo.getId() == null ? -1 : vo.getId()); statVO.setTitle(StringUtils.isBlank(vo.getContent()) ? "无内容" : vo.getContent()); Map stringTimeMap = DateUtils.splitDateToDateAndTime(vo.getGmtCreate()); String date = StringUtils.defaultIfBlank(stringTimeMap.get("date"), ""); String time = StringUtils.defaultIfBlank(stringTimeMap.get("time"), ""); statVO.setDate(date); statVO.setTime(time); statVO.setProject(StringUtils.isBlank(vo.getProjectName()) ? "未关联项目" : vo.getProjectName()); statVO.setProjectId(Integer.parseInt(vo.getProjectId()+"")); statVO.setCompletedTime(vo.getGmtCreate()); statVO.setStatus(vo.getStatus()); if (StringUtils.isNotBlank(vo.getFileUrl())) { statVO.setFileUrl(vo.getFileUrl().split(",")); } dailyStatVOList.add(statVO); } return Result.ok().data(dailyStatVOList); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(Integer id) { ReportVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List entities = baseMapper.selectList(null); List vos = entities.stream() .map(entity -> ReportVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } @Override public Result review(ReportReviewForm form) { Report report = baseMapper.selectById(form.getId()); report.setStatus(form.getStatus()); report.setRemake(form.getRemake()); baseMapper.updateById(report); return Result.ok("操作成功"); } }