jiangping
2025-06-06 a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -15,6 +16,9 @@
import com.doumee.dao.business.YwPatrolTaskMapper;
import com.doumee.dao.business.YwPatrolTaskRecordMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.Notices;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwPatrolSchemeService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -26,6 +30,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
@@ -48,9 +53,14 @@
    @Autowired
    private YwPatrolTaskRecordMapper ywPatrolTaskRecordMapper;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private NoticesJoinMapper noticesJoinMapper;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer create(YwPatrolScheme ywPatrolScheme) {
        if(Objects.isNull(ywPatrolScheme)
        || StringUtils.isBlank(ywPatrolScheme.getTitle())
@@ -59,11 +69,15 @@
                ||Objects.isNull(ywPatrolScheme.getStartDate())
                ||Objects.isNull(ywPatrolScheme.getEndDate())
                ||Objects.isNull(ywPatrolScheme.getCircleType())
                ||StringUtils.isBlank(ywPatrolScheme.getStartTime())
                ||StringUtils.isBlank(ywPatrolScheme.getEndTime())
                || (!Constants.equalsInteger(ywPatrolScheme.getCircleType(),Constants.ZERO) &&StringUtils.isBlank(ywPatrolScheme.getCircleDays()))
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(StringUtils.isBlank(ywPatrolScheme.getStartTime())){
            ywPatrolScheme.setStartTime("00:00:00");
        }
        if(StringUtils.isBlank(ywPatrolScheme.getEndTime())){
            ywPatrolScheme.setEndTime("23:59:59");
        }
        LoginUserInfo loginUserInfo = ywPatrolScheme.getLoginUserInfo();
        ywPatrolScheme.setCreateDate(new Date());
@@ -92,10 +106,29 @@
    public void createThreeDaysData(YwPatrolScheme ywPatrolScheme){
        //循环生成三天内的数据
        for (int i = 0; i < 3; i++) {
            Date schemeDate = DateUtil.getXDayAfterDate(new Date(),i);
            Date schemeDate = DateUtil.getXDayAfterDate(
                    DateUtil.StringToDate(
                    DateUtil.getDate(new Date(),"yyyy-MM-dd"),"yyyy-MM-dd"),i);
            this.createTask(schemeDate,ywPatrolScheme);
        }
    }
    @Override
    public void timerAuto(){
        List<YwPatrolScheme> ywPatrolSchemeList = ywPatrolSchemeMapper.selectList(new QueryWrapper<YwPatrolScheme>().lambda()
                .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO)
                .eq(YwPatrolScheme::getStatus,Constants.ZERO)
                .apply(" START_DATE <= now() and END_DATE>= now()   ")
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywPatrolSchemeList)){
            for (YwPatrolScheme ywPatrolScheme:ywPatrolSchemeList) {
                this.createTask(DateUtil.getXDayAfterDate(new Date(),2),ywPatrolScheme);
            }
        }
    }
    /**
     * 根据日期生成任务
@@ -103,8 +136,8 @@
     * @param ywPatrolScheme
     */
    public void createTask(Date schemeDate,YwPatrolScheme ywPatrolScheme){
        if(ywPatrolScheme.getStartDate().getTime() > schemeDate.getTime()
            || ywPatrolScheme.getEndDate().getTime() < schemeDate.getTime() ){
        if(!(ywPatrolScheme.getStartDate().getTime() <= schemeDate.getTime()
            && ywPatrolScheme.getEndDate().getTime() >= schemeDate.getTime()) ){
            return;
        }
        if(Constants.equalsInteger(ywPatrolScheme.getCircleType(),Constants.ONE)){
@@ -114,17 +147,17 @@
                return;
            }
            List<String> weeks = Arrays.asList(ywPatrolScheme.getCircleDays().split(","));
            String weekStr = weeks.stream().filter(i->Constants.equalsInteger(Integer.valueOf(i),week.getNumber())).findFirst().get();
            if(StringUtils.isBlank(weekStr)){
            if(weeks.stream().filter(i->Constants.equalsInteger(Integer.valueOf(i),week.getNumber())).collect(Collectors.toList()).size()<=Constants.ZERO){
                return;
            }
        }else{
        }else if(Constants.equalsInteger(ywPatrolScheme.getCircleType(),Constants.TWO)){
            //每月根据日期生成 根据日期获取是哪天
            List<String> days = Arrays.asList(ywPatrolScheme.getCircleDays().split(","));
            String dayStr = DateUtil.getFomartDate(schemeDate,"dd");
            if(Objects.isNull(days.stream().filter(i->StringUtils.equals(i,dayStr)).findFirst().get())){
            Integer dayStr = Integer.valueOf(DateUtil.getFomartDate(schemeDate,"dd"));
            if(days.stream().filter(i->i.equals(dayStr.toString())).collect(Collectors.toList()).size()<=Constants.ZERO){
                return;
            };
            }
        }
        String schemeDateStr = DateUtil.getDate(schemeDate,"yyyy-MM-dd");
        //查询当天是否生成过数据
@@ -178,12 +211,59 @@
            ywPatrolTaskRecordList.add(ywPatrolTaskRecord);
        }
        ywPatrolTaskRecordMapper.insert(ywPatrolTaskRecordList);
        if(StringUtils.isNotBlank(ywPatrolScheme.getUserIds())){
            String [] userIds = ywPatrolScheme.getUserIds().split(",");
            List<SystemUser> systemUserList = systemUserMapper.selectList(new QueryWrapper<SystemUser>().lambda().in(SystemUser::getId,userIds));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemUserList)){
                List<String> names = systemUserList.stream().filter(i->StringUtils.isNotBlank(i.getRealname())).map(i->i.getRealname()).collect(Collectors.toList());
                for (SystemUser systemUser:systemUserList) {
                    //添加待办信息
                    Notices notices = new Notices();
                    notices.setCreateDate(new Date());
                    notices.setCreator(ywPatrolScheme.getCreator());
                    notices.setIsdeleted(Constants.ZERO);
                    notices.setParam1(DateUtil.formatDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
                    notices.setTitle("巡检任务待办");
                    notices.setContent("["+ywPatrolTask.getCode()+"]将在["+notices.getParam1()+"]进行巡检,请按时执行");
                    notices.setObjId(ywPatrolTask.getId());
                    notices.setObjType(Constants.ONE);
                    notices.setType(notices.getObjType());
                    notices.setUserId(Integer.valueOf(systemUser.getId()));
                    notices.setStatus(Constants.ZERO);
                    //整理json数据
                    Map<String,Object> jsonMap = new HashMap<>();
                    jsonMap.put("key1", ywPatrolScheme.getTitle());
                    jsonMap.put("key2", DateUtil.getFomartDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
                    jsonMap.put("key3", DateUtil.getFomartDate(ywPatrolTask.getStartDate(),"HH:mm") + "-" + DateUtil.getFomartDate(ywPatrolTask.getEndDate(),"HH:mm"));
                    jsonMap.put("key4", StringUtils.join(names , "、"));
                    notices.setParam2(JSONObject.toJSONString(jsonMap));
                    notices.setParam3(Constants.ZERO+"");
                    noticesJoinMapper.insert(notices);
                }
            }
        }
    }
    @Override
    public void deleteById(Integer id, LoginUserInfo user) {
        //判断是否有进行中或已超期的任务
        if(ywPatrolTaskMapper.selectCount(new QueryWrapper<YwPatrolTask>().lambda()
                .eq(YwPatrolTask::getSchemeId,id)
                .in(YwPatrolTask::getStatus,Constants.ONE,Constants.THREE,Constants.TWO)
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在进行中/已完成的任务,无法进行删除");
        }
        if(ywPatrolTaskMapper.selectCount(new QueryWrapper<YwPatrolTask>().lambda()
                        .eq(YwPatrolTask::getSchemeId,id)
                        .eq(YwPatrolTask::getStatus,Constants.ZERO)
                        .le(YwPatrolTask::getEndDate,"now()")
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在已超期的任务,无法进行删除");
        }
        ywPatrolSchemeMapper.deleteById(id);
    }
@@ -221,6 +301,7 @@
        ywPatrolScheme.setEditDate(new Date());
        ywPatrolScheme.setEditor(loginUserInfo.getId());
        ywPatrolSchemeMapper.updateById(ywPatrolScheme);
        this.createThreeDaysData(ywPatrolScheme);
    }
    @Override
@@ -276,25 +357,35 @@
        YwPatrolScheme model = pageWrap.getModel();
        queryWrapper.selectAll(YwPatrolScheme.class)
                .select(" t2.realName as createUserName ")
                .select(" t1.realName as userName ")
                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolScheme::getUserIds)
                .leftJoin(" system_user t2 on t.creator =  t2.id  ")
                .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO)
                .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle())
                //查询有时段交集的数据
                .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()),
                        " t.START_DATE <= '"+Utils.Date.getStart(pageWrap.getModel().getEndDate())+"' and t.END_DATE >= '"+Utils.Date.getStart(pageWrap.getModel().getStartDate())+"' "
                )
//                .ge(Objects.nonNull(model.getStartDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
//                .le(Objects.nonNull(model.getEndDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
                .ge( model.getStartDate()!=null,YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
                .le(Objects.nonNull(model.getEndDate()),YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
                .ge(Objects.nonNull(model.getStartDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getStartDateSec()))
                .le(Objects.nonNull(model.getEndDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDateSec()))
                .orderByDesc(YwPatrolScheme::getCreateDate)
        ;
        IPage<YwPatrolScheme> iPage = ywPatrolSchemeMapper.selectJoinPage(page,YwPatrolScheme.class,queryWrapper);
        for (YwPatrolScheme ywPatrolScheme:iPage.getRecords()) {
            this.getSchemeStatus(ywPatrolScheme);
            //巡检人员
            this.getUserNames(ywPatrolScheme);
        }
        return PageData.from(iPage);
    }
    public void getUserNames(YwPatrolScheme ywPatrolScheme){
        if(Objects.nonNull(ywPatrolScheme)&&StringUtils.isNotBlank(ywPatrolScheme.getUserIds())){
            List<SystemUser>  systemUserList = systemUserMapper.selectList(new QueryWrapper<SystemUser>().lambda()
                    .apply(" find_in_set(id,'"+ywPatrolScheme.getUserIds()+"') ")
            );
            String userName = String.join(",",systemUserList.stream().map(i->i.getRealname()).collect(Collectors.toList()));
            ywPatrolScheme.setUserName(userName);
        }
    }
    //获取状态
    public void getSchemeStatus(YwPatrolScheme ywPatrolScheme){
@@ -309,21 +400,24 @@
            ywPatrolScheme.setTimeOutTaskNum(Constants.ZERO);
            return;
        }
        //过滤数据是不是全部未开始
        if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO))
                .collect(Collectors.toList()).size(),ywPatrolTaskList.size())){
            ywPatrolScheme.setSchemeStatus(Constants.ZERO);
            ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
                    .collect(Collectors.toList()).size());
            return;
        }
        //过滤数据是否存在进行中的
        if(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size()>Constants.ZERO){
        if(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)||Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size()>Constants.ZERO){
            ywPatrolScheme.setSchemeStatus(Constants.ONE);
            ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
                    .collect(Collectors.toList()).size());
            return;
        }
        //过滤数据是不是全部未开始
        if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size(),ywPatrolTaskList.size())){
            ywPatrolScheme.setSchemeStatus(Constants.ZERO);
            ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
                    .collect(Collectors.toList()).size());
            return;
        }
        //过滤数据是不是全部已完成
        if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size()
                ,ywPatrolTaskList.size())){