package com.ruoyi.app.patrolplan.service.impl; 
 | 
  
 | 
import java.text.ParseException; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.time.LocalDateTime; 
 | 
import java.time.format.DateTimeFormatter; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
import com.alibaba.fastjson2.JSONArray; 
 | 
import com.alibaba.fastjson2.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; 
 | 
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper; 
 | 
import com.ruoyi.app.patrolplan.domain.ArdAppPatrolplan; 
 | 
import com.ruoyi.app.patrolplan.domain.ArdAppPatrolpointRecordImg; 
 | 
import com.ruoyi.app.patrolplan.domain.ArdAppPatroluser; 
 | 
import com.ruoyi.app.patrolplan.domain.param.*; 
 | 
import com.ruoyi.app.patrolplan.mapper.ArdAppPatrolplanMapper; 
 | 
import com.ruoyi.app.patrolplan.mapper.ArdAppPatrolpointRecordImgMapper; 
 | 
import com.ruoyi.app.patrolplan.mapper.ArdAppPatroluserMapper; 
 | 
import com.ruoyi.common.core.domain.entity.SysUser; 
 | 
import com.ruoyi.common.utils.SecurityUtils; 
 | 
import com.ruoyi.common.utils.uuid.IdUtils; 
 | 
import com.ruoyi.system.mapper.SysUserMapper; 
 | 
import com.ruoyi.utils.result.Results; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import com.ruoyi.app.patrolplan.mapper.ArdAppPatrolpointRecordMapper; 
 | 
import com.ruoyi.app.patrolplan.domain.ArdAppPatrolpointRecord; 
 | 
import com.ruoyi.app.patrolplan.service.IArdAppPatrolpointRecordService; 
 | 
  
 | 
import javax.annotation.Resource; 
 | 
import javax.xml.crypto.Data; 
 | 
  
 | 
/** 
 | 
 * app巡检计划记录Service业务层处理 
 | 
 * 
 | 
 * @author ard 
 | 
 * @date 2023-08-02 
 | 
 */ 
 | 
@Service 
 | 
public class ArdAppPatrolpointRecordServiceImpl implements IArdAppPatrolpointRecordService { 
 | 
    @Resource 
 | 
    private ArdAppPatrolpointRecordMapper ardAppPatrolpointRecordMapper; 
 | 
  
 | 
    @Resource 
 | 
    private ArdAppPatrolpointRecordImgMapper recordImgMapper; 
 | 
  
 | 
    @Resource 
 | 
    private ArdAppPatrolplanMapper patrolplanMapper; 
 | 
  
 | 
    @Resource 
 | 
    private ArdAppPatroluserMapper userMapper; 
 | 
  
 | 
    @Resource 
 | 
    private SysUserMapper sysUserMapper; 
 | 
  
 | 
    @Resource 
 | 
    private ArdAlarmpointsWellMapper wellMapper; 
 | 
  
 | 
    @Override 
 | 
    public Results record(ArdAppPatrolpointRecord ardAppPatrolpointRecord) { 
 | 
        String id = IdUtils.simpleUUID(); 
 | 
        ardAppPatrolpointRecord.setId(id); 
 | 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
        //查询该用户今天的打卡数据 
 | 
        QueryWrapper<ArdAppPatrolpointRecord> recordQueryWrapper = new QueryWrapper<>(); 
 | 
        recordQueryWrapper.eq("plan_id", ardAppPatrolpointRecord.getPlanId()) 
 | 
                .like("record_time", dateFormat.format(new Date())) 
 | 
                .eq("user_id",ardAppPatrolpointRecord.getUserId()); 
 | 
        List<ArdAppPatrolpointRecord> recordList = ardAppPatrolpointRecordMapper.selectList(recordQueryWrapper); 
 | 
        ardAppPatrolpointRecord.setPointsNum(recordList.size()+1); 
 | 
//        int num = ardAppPatrolpointRecordMapper.insert(ardAppPatrolpointRecord); 
 | 
        int num = ardAppPatrolpointRecordMapper.insertArdAppPatrolpointRecord(ardAppPatrolpointRecord); 
 | 
        List<String> list = ardAppPatrolpointRecord.getImg(); 
 | 
        for (int i = 0; i < list.size(); i++) { 
 | 
            ArdAppPatrolpointRecordImg recordImg = new ArdAppPatrolpointRecordImg(); 
 | 
            String imgId = IdUtils.simpleUUID(); 
 | 
            recordImg.setId(imgId); 
 | 
            recordImg.setAppPatrolponitRecordId(id); 
 | 
            recordImg.setImg(list.get(i)); 
 | 
            recordImgMapper.insertArdAppPatrolpointRecordImg(recordImg); 
 | 
        } 
 | 
        if(num>0){ 
 | 
            return Results.succeed("打卡成功!"); 
 | 
        }else { 
 | 
            return Results.error("打开失败!"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results recordMonth(RecordMonthParam recordMonthParam) throws ParseException { 
 | 
        //获取前端参数 
 | 
        String begin = recordMonthParam.getBegin(); 
 | 
        String end = recordMonthParam.getEnd(); 
 | 
        String planId = recordMonthParam.getPlanId(); 
 | 
        //查询计划表 
 | 
        ArdAppPatrolplan ardAppPatrolplan = patrolplanMapper.selectById(planId); 
 | 
        //查询出有效打卡数据 
 | 
        QueryWrapper<ArdAppPatrolpointRecord> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.between("record_time",begin,end).eq("plan_id",planId); 
 | 
        List<ArdAppPatrolpointRecord> list = ardAppPatrolpointRecordMapper.selectList(queryWrapper); 
 | 
        //时间拆分 
 | 
        String[] parts = end.split("[-\\s:]"); 
 | 
        int year = Integer.parseInt(parts[0]); 
 | 
        int month = Integer.parseInt(parts[1]); 
 | 
        int day = Integer.parseInt(parts[2]); 
 | 
        String monthZero; 
 | 
        if(month<10){ 
 | 
            monthZero = String.format("%02d", month); 
 | 
        }else { 
 | 
            monthZero = String.valueOf(month); 
 | 
        } 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        for (int i = 1; i <= day; i++) { 
 | 
            String di; 
 | 
            if(i<10){ 
 | 
                di = String.format("%02d", i); 
 | 
            }else { 
 | 
                di = String.valueOf(i); 
 | 
            } 
 | 
            JSONObject jsonObject = new JSONObject(); 
 | 
            Boolean planBoolean = false; 
 | 
            //循环每一天 
 | 
            String ymd = year+"-"+monthZero+"-"+di; 
 | 
            //匹配计划时间 
 | 
            String cycle = ardAppPatrolplan.getCycle(); 
 | 
            if(cycle.equals("day")){ 
 | 
                String createTime = ardAppPatrolplan.getCreateTime(); 
 | 
                String st = createTime.substring(0,10); 
 | 
                int d = ymd.compareTo(st); 
 | 
                if(d>=0){ 
 | 
                    planBoolean = true; 
 | 
                } 
 | 
            }else if(cycle.equals("once")){ 
 | 
                String onceBegin = ardAppPatrolplan.getPatroBeginTime(); 
 | 
                String onceT = onceBegin.substring(0,10); 
 | 
                int num = ymd.compareTo(onceT); 
 | 
                if(num==0){ 
 | 
                    planBoolean = true; 
 | 
                } 
 | 
            } 
 | 
            //匹配打卡时间 
 | 
            Boolean or = false; 
 | 
            if(planBoolean){ 
 | 
                for (int j = 0; j < list.size(); j++) { 
 | 
                    //获取打卡时间 
 | 
                    String toDayRecord = list.get(j).getRecordTime(); 
 | 
                    String dr = toDayRecord.substring(0,10); 
 | 
                    //如果打开日期和这天相同 
 | 
                    if(ymd.equals(dr)){ 
 | 
                        //查询该计划的所有兴趣点 
 | 
                        List<ArdAlarmpointsWell> wellList = wellMapper.wellByPlanId(planId); 
 | 
                        //查询该计划的所有执行人 
 | 
                        List<SysUser> userList = sysUserMapper.userByPlanId(planId); 
 | 
                        //满勤多少条打卡记录 
 | 
                        int maxNum = wellList.size()*userList.size(); 
 | 
                        //对比应打卡记录相等则true 
 | 
                        if(list.size()==maxNum){ 
 | 
                            or = true; 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
//                for (int j = 0; j < list.size(); j++) { 
 | 
//                    //打卡时间拆分 
 | 
//                    String recordTime = list.get(j).getRecordTime(); 
 | 
//                    String[] part = recordTime.split("[-\\s:]"); 
 | 
//                    int recordYear = Integer.parseInt(part[0]); 
 | 
//                    int recordMonth = Integer.parseInt(part[1]); 
 | 
//                    String recordMonthZero; 
 | 
//                    if(recordMonth<10){ 
 | 
//                        recordMonthZero = String.format("%02d", recordMonth); 
 | 
//                    }else { 
 | 
//                        recordMonthZero = String.valueOf(recordMonth); 
 | 
//                    } 
 | 
//                    int recordDay = Integer.parseInt(part[2]); 
 | 
//                    String recordDayZero; 
 | 
//                    if(recordDay<10){ 
 | 
//                        recordDayZero = String.format("%02d", recordDay); 
 | 
//                    }else { 
 | 
//                        recordDayZero = String.valueOf(recordDay); 
 | 
//                    } 
 | 
//                    String recordDate = recordYear+"-"+recordMonthZero+"-"+recordDayZero; 
 | 
//                    //如果相等说明这天有打卡记录记录 
 | 
//                    if(ymd.equals(recordDate)){ 
 | 
//                        or = true; 
 | 
//                        break; 
 | 
//                    } 
 | 
//                } 
 | 
            } 
 | 
            jsonObject.put("toDay",ymd ); 
 | 
            jsonObject.put("plan",planBoolean); 
 | 
            jsonObject.put("record",or); 
 | 
            jsonArray.add(jsonObject); 
 | 
        } 
 | 
        return Results.succeed(jsonArray); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results recordDetails(RecordDetailsParam recordDetailsParam) throws ParseException { 
 | 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
        SimpleDateFormat dateFormatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        //获取参数 
 | 
        String planId = recordDetailsParam.getPlanId(); 
 | 
        String toDay = recordDetailsParam.getToDay(); 
 | 
        //查询计划表 
 | 
        ArdAppPatrolplan ardAppPatrolplan = patrolplanMapper.selectById(planId); 
 | 
        String cycle = ardAppPatrolplan.getCycle(); 
 | 
        String begin = ardAppPatrolplan.getPatroBeginTime(); 
 | 
        String end = ardAppPatrolplan.getPatroEndTime(); 
 | 
        String create = ardAppPatrolplan.getCreateTime(); 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        int c = 0; 
 | 
        if(cycle.equals("day")){ 
 | 
            //每天计划取创建时间 
 | 
            c = toDay.compareTo(create.substring(0,10)); 
 | 
        }else if(cycle.equals("once")){ 
 | 
            //单次计划取开始时间 
 | 
            c = toDay.compareTo(begin.substring(0,10)); 
 | 
        } 
 | 
        if(cycle.equals("once") && c>0){ 
 | 
            //单次计划大于开始时间==跨天,在计划时间外 
 | 
            return Results.succeed("[]"); 
 | 
        } 
 | 
        if(c<0){ 
 | 
            //每日计划小于创建时间或单次计划小于开始时间,在计划时间外 
 | 
            return Results.succeed("[]"); 
 | 
        }else{ 
 | 
            //在每日计划的时间范围内 
 | 
            String date = dateFormat.format(new Date()); 
 | 
            //比较选中的日期和今天日期 
 | 
            int d = toDay.compareTo(date); 
 | 
            //查询该计划的所有人员 
 | 
            List<SysUser> users = sysUserMapper.userByPlanId(planId); 
 | 
            //大于0代表查询以后的记录 
 | 
            if(d>0){ 
 | 
                //查询计划内的每日未来数据 
 | 
                for (int i = 0; i < users.size(); i++) { 
 | 
                    JSONObject jsonObject = new JSONObject(); 
 | 
                    jsonObject.put("userId",users.get(i).getUserId()); 
 | 
                    jsonObject.put("userName",users.get(i).getNickName()); 
 | 
                    jsonObject.put("type",false); 
 | 
                    jsonArray.add(jsonObject); 
 | 
                } 
 | 
                return Results.succeed(jsonArray); 
 | 
            }else{ 
 | 
                //查询计划内的实际历史打卡数据 
 | 
                QueryWrapper<ArdAppPatrolpointRecord> recordQueryWrapper = new QueryWrapper<>(); 
 | 
                if(d<0){ 
 | 
                    //小于0是历史 
 | 
                    recordQueryWrapper.select("max(points_num) pointsNum","user_id","user_name").eq("plan_id", planId).like("record_time", toDay).groupBy("user_id","user_name"); 
 | 
                }else{ 
 | 
                    String u = dateFormatTime.format(new Date()); 
 | 
                    //等于0选中的日期就是今天,需要进一步判断小于当前时分秒的记录 
 | 
                    recordQueryWrapper.select("max(points_num) pointsNum","user_id","user_name").eq("plan_id", planId).le("record_time", u).groupBy("user_id","user_name"); 
 | 
                } 
 | 
                List<ArdAppPatrolpointRecord> list = ardAppPatrolpointRecordMapper.selectList(recordQueryWrapper); 
 | 
                //选中这天该计划下没有任何打卡记录 
 | 
                if(list.size()==0){ 
 | 
                    for (int i = 0; i < users.size(); i++) { 
 | 
                        JSONObject jsonObject = new JSONObject(); 
 | 
                        jsonObject.put("userId",users.get(i).getUserId()); 
 | 
                        jsonObject.put("userName",users.get(i).getNickName()); 
 | 
                        jsonObject.put("type",false); 
 | 
                        jsonArray.add(jsonObject); 
 | 
                    } 
 | 
                    return Results.succeed(jsonArray); 
 | 
                } 
 | 
                //查询该计划的所有兴趣点 
 | 
                List<ArdAlarmpointsWell> wellList = wellMapper.wellByPlanId(planId); 
 | 
                Integer wellNum = wellList.size(); 
 | 
                //取出所有打了卡的userId 
 | 
                List<String> userIdList = new ArrayList<>(); 
 | 
                for (int i = 0; i < list.size(); i++) { 
 | 
                    userIdList.add(list.get(i).getUserId()); 
 | 
                } 
 | 
                //有打卡记录时的打卡情况查出一次都没打卡的人员 
 | 
                for (int i = 0; i < users.size(); i++) { 
 | 
                    String userId = users.get(i).getUserId(); 
 | 
                    String userName = users.get(i).getNickName(); 
 | 
                    //如果该计划的所有人员userId不在所有打了卡的userId中 
 | 
                    if (!userIdList.contains(userId)) { 
 | 
                        //记录该人员未完成打卡 
 | 
                        JSONObject jsonObject = new JSONObject(); 
 | 
                        jsonObject.put("userId", userId); 
 | 
                        jsonObject.put("userName", userName); 
 | 
                        jsonObject.put("type", false); 
 | 
                        jsonArray.add(jsonObject); 
 | 
                        continue; 
 | 
                    } 
 | 
                } 
 | 
                //全部打完卡或打了部分卡的人员 
 | 
                for (ArdAppPatrolpointRecord ardAppPatrolpointRecord : list) { 
 | 
                    JSONObject jsonObject = new JSONObject(); 
 | 
                    jsonObject.put("userId", ardAppPatrolpointRecord.getUserId()); 
 | 
                    jsonObject.put("userName", ardAppPatrolpointRecord.getUserName()); 
 | 
                    if (ardAppPatrolpointRecord.getPointsNum().equals(wellNum)) { 
 | 
                        jsonObject.put("type", true); 
 | 
                    } else { 
 | 
                        jsonObject.put("type", false); 
 | 
                    } 
 | 
                    jsonArray.add(jsonObject); 
 | 
                } 
 | 
                return Results.succeed(jsonArray); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results recordSolo(RecordSoloParam recordSoloParam) { 
 | 
        String toDay = recordSoloParam.getToDay(); 
 | 
        String planId = recordSoloParam.getPlanId(); 
 | 
        String userId = recordSoloParam.getUserId(); 
 | 
        String planName = recordSoloParam.getPlanName(); 
 | 
        String userName = recordSoloParam.getUserName(); 
 | 
        //根据计划ID获取制定人ID 
 | 
        ArdAppPatrolplan ardAppPatrolplan = patrolplanMapper.selectById(planId); 
 | 
        //根据姓名ID查询计划制定人的姓名 
 | 
        String planUserId = ardAppPatrolplan.getUserId(); 
 | 
        SysUser sysUser = sysUserMapper.selectById(planUserId); 
 | 
        String nikeName = sysUser.getNickName(); 
 | 
        QueryWrapper<ArdAppPatrolpointRecord> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.eq("plan_id", planId).eq("user_id",userId).like("record_time", toDay); 
 | 
        //当前计划选中时间里此用户的打卡记录 
 | 
        List<ArdAppPatrolpointRecord> list = ardAppPatrolpointRecordMapper.selectList(queryWrapper); 
 | 
        for (int i = 0; i < list.size(); i++) { 
 | 
            ArdAppPatrolpointRecord ardAppPatrolpointRecord = list.get(i); 
 | 
            ardAppPatrolpointRecord.setPlanUserName(nikeName); 
 | 
        } 
 | 
        //查询该计划的所有兴趣点 
 | 
        List<ArdAlarmpointsWell> wellList = wellMapper.wellByPlanId(planId); 
 | 
        if(list.size()==0){ 
 | 
            for (ArdAlarmpointsWell ardAlarmpointsWell : wellList) { 
 | 
                ArdAppPatrolpointRecord ardAppPatrolpointRecord = new ArdAppPatrolpointRecord(); 
 | 
                ardAppPatrolpointRecord.setAppPatrolpointsId(ardAlarmpointsWell.getId()); 
 | 
                ardAppPatrolpointRecord.setAppPatrolpointsName(ardAlarmpointsWell.getWellId()); 
 | 
                ardAppPatrolpointRecord.setPlanId(planId); 
 | 
                ardAppPatrolpointRecord.setPlanName(planName); 
 | 
                ardAppPatrolpointRecord.setUserId(userId); 
 | 
                ardAppPatrolpointRecord.setUserName(userName); 
 | 
                ardAppPatrolpointRecord.setLatitude(String.valueOf(ardAlarmpointsWell.getLatitude())); 
 | 
                ardAppPatrolpointRecord.setLongitude(String.valueOf(ardAlarmpointsWell.getLongitude().toString())); 
 | 
                ardAppPatrolpointRecord.setPlanUserName(nikeName); 
 | 
                list.add(ardAppPatrolpointRecord); 
 | 
            } 
 | 
            return Results.succeed(list); 
 | 
        } 
 | 
        for (ArdAppPatrolpointRecord appPatrolpointRecord : list) { 
 | 
            QueryWrapper<ArdAppPatrolpointRecordImg> queryWrapper1 = new QueryWrapper<>(); 
 | 
            queryWrapper1.eq("app_patrolponit_record_id", appPatrolpointRecord.getId()); 
 | 
            List<ArdAppPatrolpointRecordImg> list1 = recordImgMapper.selectList(queryWrapper1); 
 | 
            List<String> strings = new ArrayList<>(); 
 | 
            for (ArdAppPatrolpointRecordImg ardAppPatrolpointRecordImg : list1) { 
 | 
                strings.add(ardAppPatrolpointRecordImg.getImg()); 
 | 
            } 
 | 
            appPatrolpointRecord.setImg(strings); 
 | 
        } 
 | 
        //打过卡的地点 
 | 
        List<String> pointList = new ArrayList<>(); 
 | 
        for (ArdAppPatrolpointRecord appPatrolpointRecord : list) { 
 | 
            pointList.add(appPatrolpointRecord.getAppPatrolpointsId()); 
 | 
        } 
 | 
        for (ArdAlarmpointsWell ardAlarmpointsWell : wellList) { 
 | 
            //所有应该打卡的地点ID 
 | 
            String well = ardAlarmpointsWell.getId(); 
 | 
            //如果打卡地点不包含应打卡地点,那说名这块儿没打卡 
 | 
            if (!pointList.contains(well)) { 
 | 
                ArdAppPatrolpointRecord ardAppPatrolpointRecord = new ArdAppPatrolpointRecord(); 
 | 
                ardAppPatrolpointRecord.setAppPatrolpointsId(well); 
 | 
                ardAppPatrolpointRecord.setAppPatrolpointsName(ardAlarmpointsWell.getWellId()); 
 | 
                ardAppPatrolpointRecord.setPlanId(planId); 
 | 
                ardAppPatrolpointRecord.setPlanName(planName); 
 | 
                ardAppPatrolpointRecord.setUserId(userId); 
 | 
                ardAppPatrolpointRecord.setUserName(userName); 
 | 
                ardAppPatrolpointRecord.setLatitude(String.valueOf(ardAlarmpointsWell.getLatitude())); 
 | 
                ardAppPatrolpointRecord.setLongitude(String.valueOf(ardAlarmpointsWell.getLongitude().toString())); 
 | 
                ardAppPatrolpointRecord.setPlanUserName(nikeName); 
 | 
                list.add(ardAppPatrolpointRecord); 
 | 
            } 
 | 
        } 
 | 
        return Results.succeed(list); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results executeMonthOld(RecordMonthParam RecordMonthParam) throws ParseException { 
 | 
        //获取前端参数 
 | 
        String begin = RecordMonthParam.getBegin(); 
 | 
        String end = RecordMonthParam.getEnd(); 
 | 
        String planId = RecordMonthParam.getPlanId(); 
 | 
        //查询计划表 
 | 
        ArdAppPatrolplan ardAppPatrolplan = patrolplanMapper.selectById(planId); 
 | 
        //查询出有效打卡数据 
 | 
        String userId = SecurityUtils.getUserId(); 
 | 
        QueryWrapper<ArdAppPatrolpointRecord> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.between("record_time",begin,end).eq("plan_id",planId).eq("user_id",userId); 
 | 
        List<ArdAppPatrolpointRecord> list = ardAppPatrolpointRecordMapper.selectList(queryWrapper); 
 | 
        //时间拆分 
 | 
        String[] parts = end.split("[-\\s:]"); 
 | 
        int year = Integer.parseInt(parts[0]); 
 | 
        int month = Integer.parseInt(parts[1]); 
 | 
        int day = Integer.parseInt(parts[2]); 
 | 
        String monthZero; 
 | 
        if(month<10){ 
 | 
            monthZero = String.format("%02d", month); 
 | 
        }else { 
 | 
            monthZero = String.valueOf(month); 
 | 
        } 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
        for (int i = 1; i <= day; i++) { 
 | 
            String di; 
 | 
            if(i<10){ 
 | 
                di = String.format("%02d", i); 
 | 
            }else { 
 | 
                di = String.valueOf(i); 
 | 
            } 
 | 
            JSONObject jsonObject = new JSONObject(); 
 | 
            Boolean planBoolean = false; 
 | 
            //循环每一天 
 | 
            String ymd = year+"-"+monthZero+"-"+di; 
 | 
            //匹配计划时间 
 | 
            String cycle = ardAppPatrolplan.getCycle(); 
 | 
            if(cycle.equals("day")){ 
 | 
                String createTime = ardAppPatrolplan.getCreateTime(); 
 | 
                int d = ymd.compareTo(createTime); 
 | 
                if(d>=0){ 
 | 
                    planBoolean = true; 
 | 
                } 
 | 
            }else if(cycle.equals("once")){ 
 | 
                String onceBegin = ardAppPatrolplan.getPatroBeginTime(); 
 | 
                String onceEnd = ardAppPatrolplan.getPatroEndTime(); 
 | 
                int bd = ymd.compareTo(onceBegin); 
 | 
                int ed = ymd.compareTo(onceEnd); 
 | 
                if(bd>=0 && ed<=0){ 
 | 
                    planBoolean = true; 
 | 
                } 
 | 
            } 
 | 
            //匹配打卡时间 
 | 
            Boolean or = false; 
 | 
            if(planBoolean){ 
 | 
                for (int j = 0; j < list.size(); j++) { 
 | 
                    //打卡时间拆分 
 | 
                    String recordTime = list.get(j).getRecordTime(); 
 | 
                    String[] part = recordTime.split("[-\\s:]"); 
 | 
                    int recordYear = Integer.parseInt(part[0]); 
 | 
                    int recordMonth = Integer.parseInt(part[1]); 
 | 
                    String recordMonthZero; 
 | 
                    if(recordMonth<10){ 
 | 
                        recordMonthZero = String.format("%02d", recordMonth); 
 | 
                    }else { 
 | 
                        recordMonthZero = String.valueOf(recordMonth); 
 | 
                    } 
 | 
                    int recordDay = Integer.parseInt(part[2]); 
 | 
                    String recordDayZero; 
 | 
                    if(recordDay<10){ 
 | 
                        recordDayZero = String.format("%02d", recordDay); 
 | 
                    }else { 
 | 
                        recordDayZero = String.valueOf(recordDay); 
 | 
                    } 
 | 
                    String recordDate = recordYear+"-"+recordMonthZero+"-"+recordDayZero; 
 | 
                    //如果相等说明这天有打卡记录记录 
 | 
                    if(ymd.equals(recordDate)){ 
 | 
                        or = true; 
 | 
                        break; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            jsonObject.put("toDay",ymd ); 
 | 
            jsonObject.put("plan",planBoolean); 
 | 
            jsonObject.put("record",or); 
 | 
            jsonArray.add(jsonObject); 
 | 
        } 
 | 
        return Results.succeed(jsonArray); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results executeDetailsOld(RecordDetailsParam recordDetailsParam) throws ParseException { 
 | 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
        SimpleDateFormat dateFormatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        String userId = SecurityUtils.getUserId(); 
 | 
        //获取参数 
 | 
        String planId = recordDetailsParam.getPlanId(); 
 | 
        String toDay = recordDetailsParam.getToDay(); 
 | 
        //查询计划表 
 | 
        ArdAppPatrolplan ardAppPatrolplan = patrolplanMapper.selectById(planId); 
 | 
        String cycle = ardAppPatrolplan.getCycle(); 
 | 
        String begin = ardAppPatrolplan.getPatroBeginTime(); 
 | 
        String end = ardAppPatrolplan.getPatroEndTime(); 
 | 
        String create = ardAppPatrolplan.getCreateTime(); 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        int c = 0; 
 | 
        if(cycle.equals("day")){ 
 | 
            //每天计划取创建时间 
 | 
            c = toDay.compareTo(create.substring(0,10)); 
 | 
        }else if(cycle.equals("once")){ 
 | 
            //单次计划取开始时间 
 | 
            c = toDay.compareTo(begin.substring(0,10)); 
 | 
        } 
 | 
        if(cycle.equals("once") && c>0){ 
 | 
            //单次计划大于开始时间==跨天,在计划时间外 
 | 
            return Results.succeed("[]"); 
 | 
        } 
 | 
        if(c<0){ 
 | 
            //每日计划小于创建时间或单次计划小于开始时间,在计划时间外 
 | 
            return Results.succeed("[]"); 
 | 
        }else{ 
 | 
            //在每日计划的时间范围内 
 | 
            String date = dateFormat.format(new Date()); 
 | 
            //比较选中的日期和今天日期 
 | 
            int d = toDay.compareTo(date); 
 | 
            //查询该计划的所有人员 
 | 
            List<SysUser> users = sysUserMapper.userByPlanId(planId); 
 | 
            //查询该计划的所有兴趣点 
 | 
            List<ArdAlarmpointsWell> wellList = wellMapper.wellByPlanId(planId); 
 | 
            //大于0代表查询以后的记录 
 | 
            if(d>0){ 
 | 
                //查询计划内的每日未来数据 
 | 
                for (int i = 0; i < users.size(); i++) { 
 | 
                    JSONObject jsonObject = new JSONObject(); 
 | 
                    jsonObject.put("wellId",wellList.get(i).getId()); 
 | 
                    jsonObject.put("wellName",wellList.get(i).getWellId()); 
 | 
                    jsonObject.put("type",false); 
 | 
                    jsonArray.add(jsonObject); 
 | 
                } 
 | 
                return Results.succeed(jsonArray); 
 | 
            }else{ 
 | 
                //查询计划内的实际历史打卡数据 
 | 
                QueryWrapper<ArdAppPatrolpointRecord> recordQueryWrapper = new QueryWrapper<>(); 
 | 
                if(d<0){ 
 | 
                    //小于0是历史 
 | 
                    recordQueryWrapper.select("app_patrolpoints_id","app_patrolpoints_name").eq("plan_id", planId).eq("user_id",userId).like("record_time", toDay); 
 | 
                }else{ 
 | 
                    //等于0选中的日期就是今天,需要进一步判断小于当前时分秒的记录 
 | 
                    recordQueryWrapper.select("app_patrolpoints_id","app_patrolpoints_name").eq("plan_id", planId).eq("user_id",userId).le("record_time", dateFormatTime.format(new Date())); 
 | 
                } 
 | 
                List<ArdAppPatrolpointRecord> list = ardAppPatrolpointRecordMapper.selectList(recordQueryWrapper); 
 | 
                //循环打卡地点 
 | 
                for (int i = 0; i < wellList.size(); i++) { 
 | 
                    String id = wellList.get(i).getId(); 
 | 
                    JSONObject jsonObject = new JSONObject(); 
 | 
                    jsonObject.put("wellId",wellList.get(i).getId()); 
 | 
                    jsonObject.put("wellName",wellList.get(i).getWellId()); 
 | 
                    if(list.size()>0){ 
 | 
                        for (int j = 0; j < list.size(); j++) { 
 | 
                            if(id.equals(list.get(j).getAppPatrolpointsId())){ 
 | 
                                jsonObject.put("type",true); 
 | 
                                break; 
 | 
                            } 
 | 
                            if(j==list.size()-1){ 
 | 
                                jsonObject.put("type",false); 
 | 
                            } 
 | 
                        } 
 | 
                    }else { 
 | 
                        jsonObject.put("type",false); 
 | 
                    } 
 | 
                    jsonArray.add(jsonObject); 
 | 
                } 
 | 
                return Results.succeed(jsonArray); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results executeSolo(RecordSoloExParam recordSoloExParam) { 
 | 
        QueryWrapper<ArdAppPatrolpointRecord> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.eq("plan_id",recordSoloExParam.getPlanId()) 
 | 
                .eq("app_patrolpoints_id",recordSoloExParam.getWellId()) 
 | 
                .eq("user_id",recordSoloExParam.getUserId()) 
 | 
                .like("record_time",recordSoloExParam.getToDay()); 
 | 
        List<ArdAppPatrolpointRecord> list = ardAppPatrolpointRecordMapper.selectList(queryWrapper); 
 | 
        for (ArdAppPatrolpointRecord appPatrolpointRecord : list) { 
 | 
            QueryWrapper<ArdAppPatrolpointRecordImg> queryWrapper1 = new QueryWrapper<>(); 
 | 
            queryWrapper1.eq("app_patrolponit_record_id", appPatrolpointRecord.getId()); 
 | 
            List<ArdAppPatrolpointRecordImg> list1 = recordImgMapper.selectList(queryWrapper1); 
 | 
            List<String> strings = new ArrayList<>(); 
 | 
            for (ArdAppPatrolpointRecordImg ardAppPatrolpointRecordImg : list1) { 
 | 
                strings.add(ardAppPatrolpointRecordImg.getImg()); 
 | 
            } 
 | 
            appPatrolpointRecord.setImg(strings); 
 | 
        } 
 | 
        return Results.succeed(list); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results executeMonth(RecordMonthExParam recordMonthExParam) throws ParseException { 
 | 
        //获取前端参数 
 | 
        String begin = recordMonthExParam.getBegin(); 
 | 
        String end = recordMonthExParam.getEnd(); 
 | 
        //返回这个 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        //时间拆分 
 | 
        String[] parts = end.split("[-\\s:]"); 
 | 
        int year = Integer.parseInt(parts[0]); 
 | 
        int month = Integer.parseInt(parts[1]); 
 | 
        int day = Integer.parseInt(parts[2]); 
 | 
        String monthZero; 
 | 
        if(month<10){ 
 | 
            monthZero = String.format("%02d", month); 
 | 
        }else { 
 | 
            monthZero = String.valueOf(month); 
 | 
        } 
 | 
        String userId = SecurityUtils.getUserId(); 
 | 
        recordMonthExParam.setUserId(userId); 
 | 
        //查询该用户下需要执行的单次计划 
 | 
        List<ArdAppPatrolplan> onceList = patrolplanMapper.oncePlan(recordMonthExParam); 
 | 
        //查询该用户下需要执行的每日计划 
 | 
        List<ArdAppPatrolplan> dayList = patrolplanMapper.dayPlan(recordMonthExParam); 
 | 
        //循环一个月中的每一天 
 | 
        for (int i = 1; i <= day; i++) { 
 | 
            String di; 
 | 
            Boolean planBoolean = false; 
 | 
            Boolean recordBoolean = false; 
 | 
            //记录这天计划条数 
 | 
            int dayNum = 0; 
 | 
            int onceNum = 0; 
 | 
            //记录这天的打开地点数 
 | 
            int dayWell = 0; 
 | 
            int onceWell = 0; 
 | 
            if (i < 10) { 
 | 
                di = String.format("%02d", i); 
 | 
            } else { 
 | 
                di = String.valueOf(i); 
 | 
            } 
 | 
            //每一天 
 | 
            String ymd = year + "-" + monthZero + "-" + di; 
 | 
            JSONObject jsonObject = new JSONObject(); 
 | 
            jsonObject.put("toDay",ymd ); 
 | 
            //如果每日计划有数据 
 | 
            if (dayList.size() > 0) { 
 | 
                for (int j = 0; j < dayList.size(); j++) { 
 | 
                    String dayTime = dayList.get(j).getCreateTime(); 
 | 
                    String dt = dayTime.substring(0,10); 
 | 
                    //如果每日计划日期等于这一天,那从这一天之后的每一天都是有计划的 
 | 
                    if(dt.compareTo(ymd)<=0){ 
 | 
                        planBoolean =true; 
 | 
                        dayNum+=1; 
 | 
                        String id = dayList.get(j).getId(); 
 | 
                        List<ArdAlarmpointsWell> dayWells = wellMapper.wellByPlanId(id); 
 | 
                        dayWell = dayWells.size(); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            //如果单次计划有数据 
 | 
            if(onceList.size()>0){ 
 | 
                for (int j = 0; j < onceList.size(); j++) { 
 | 
                    String beginTime = onceList.get(j).getPatroBeginTime(); 
 | 
                    String bt = beginTime.substring(0,10); 
 | 
                    if(bt.equals(ymd)){ 
 | 
                        planBoolean = true; 
 | 
                        onceNum+=1; 
 | 
                        List<ArdAlarmpointsWell> onceWells = wellMapper.wellByPlanId(onceList.get(j).getId()); 
 | 
                        onceWell = onceWells.size(); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if(planBoolean){ 
 | 
                //这天总任务条数 
 | 
                int planNum = dayNum+onceNum; 
 | 
                //这天总兴趣点数 
 | 
                int wellNum = dayWell+onceWell; 
 | 
                //已打卡总条数 
 | 
                QueryWrapper<ArdAppPatrolpointRecord> queryWrapper = new QueryWrapper<>(); 
 | 
                queryWrapper.eq("user_id",userId).like("record_time",ymd).isNull("del"); 
 | 
                List<ArdAppPatrolpointRecord> list = ardAppPatrolpointRecordMapper.selectList(queryWrapper); 
 | 
                int num = list.size(); 
 | 
                //应打卡总条数 
 | 
                int record = planNum*wellNum; 
 | 
                if(num>=record){ 
 | 
                    recordBoolean = true; 
 | 
                } 
 | 
            } 
 | 
            jsonObject.put("toDay",ymd ); 
 | 
            jsonObject.put("plan",planBoolean); 
 | 
            jsonObject.put("record",recordBoolean); 
 | 
            jsonArray.add(jsonObject); 
 | 
        } 
 | 
        return Results.succeed(jsonArray); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results executeDetails(RecordDetailsExParam recordDetailsExParam) throws ParseException { 
 | 
        String userId = SecurityUtils.getUserId(); 
 | 
        //获取参数 
 | 
        Boolean plan = recordDetailsExParam.getPlan(); 
 | 
        String toDay = recordDetailsExParam.getToDay(); 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        if(plan){ 
 | 
            //查询这个用户下为执行人的所有巡检计划 
 | 
            ArdAppPatrolplan ardAppPatrolplan = new ArdAppPatrolplan(); 
 | 
            ardAppPatrolplan.setUserId(SecurityUtils.getUserId()); 
 | 
            List<ArdAppPatrolplan> list = patrolplanMapper.executeList(ardAppPatrolplan); 
 | 
            //找出今天的单次和每日计划 
 | 
            List<ArdAppPatrolplan> patrolplanList = new ArrayList<>(); 
 | 
            for (int i = 0; i < list.size(); i++) { 
 | 
                String cycle = list.get(i).getCycle(); 
 | 
                //如果是单次任务 
 | 
                if(cycle.equals("once")){ 
 | 
                    String begin = list.get(i).getPatroBeginTime(); 
 | 
                    String b = begin.substring(0,10); 
 | 
                    if(b.equals(toDay)){ 
 | 
                        //是今天的计划 
 | 
                        patrolplanList.add(list.get(i)); 
 | 
                    } 
 | 
                } 
 | 
                //如果是每日任务 
 | 
                else if(cycle.equals("day")){ 
 | 
                    String create = list.get(i).getCreateTime(); 
 | 
                    String c = create.substring(0,10); 
 | 
                    if(c.compareTo(toDay)<=0){ 
 | 
                        //有今天的计划 
 | 
                        patrolplanList.add(list.get(i)); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if(patrolplanList.size()>0){ 
 | 
                //遍历今天的计划 
 | 
                for (int i = 0; i < patrolplanList.size(); i++) { 
 | 
                    String planId = patrolplanList.get(i).getId(); 
 | 
                    String planName = patrolplanList.get(i).getPlanName(); 
 | 
                    JSONObject jsonObject = new JSONObject(); 
 | 
                    jsonObject.put("planId",planId); 
 | 
                    jsonObject.put("planName",planName); 
 | 
                    //查询这天有多少点 
 | 
                    List<ArdAlarmpointsWell> dayWells = wellMapper.wellByPlanId(planId); 
 | 
                    int dayWellNum = dayWells.size(); 
 | 
                    //查询这个用户的这个计划在今天打卡的条数 
 | 
                    QueryWrapper<ArdAppPatrolpointRecord> queryWrapper = new QueryWrapper<>(); 
 | 
                    queryWrapper.eq("user_id",userId).eq("plan_id",planId).like("record_time",toDay); 
 | 
                    List<ArdAppPatrolpointRecord> recordList = ardAppPatrolpointRecordMapper.selectList(queryWrapper); 
 | 
                    int recordNum = recordList.size(); 
 | 
                    //如果相等那这条今天的计划就是全部完成了 
 | 
                    if(recordNum==dayWellNum){ 
 | 
                        jsonObject.put("type",true); 
 | 
                    }else { 
 | 
                        jsonObject.put("type",false); 
 | 
                    } 
 | 
                    jsonArray.add(jsonObject); 
 | 
                } 
 | 
            } 
 | 
        }else { 
 | 
            //没有计划 
 | 
            return Results.succeed("[]"); 
 | 
        } 
 | 
        return Results.succeed(jsonArray); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results recordBefore(RecordBeforeParam recordBeforeParam) { 
 | 
        String planId = recordBeforeParam.getPlanId(); 
 | 
        String wellId = recordBeforeParam.getWellId(); 
 | 
        String toDay = recordBeforeParam.getToDay(); 
 | 
        String userId = SecurityUtils.getUserId(); 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        ArdAppPatrolplan plan = patrolplanMapper.selectById(planId); 
 | 
        jsonArray.add(plan); 
 | 
        QueryWrapper<ArdAppPatrolpointRecord> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.eq("plan_id",planId).eq("app_patrolpoints_id",wellId).eq("user_id",userId).like("record_time",toDay); 
 | 
        ArdAppPatrolpointRecord record = ardAppPatrolpointRecordMapper.selectOne(queryWrapper); 
 | 
        //根据姓名ID查询计划制定人的姓名 
 | 
        String planUserId = plan.getUserId(); 
 | 
        SysUser sysUser = sysUserMapper.selectById(planUserId); 
 | 
        String nikeName = sysUser.getNickName(); 
 | 
        if(record==null){ 
 | 
            //根据姓名ID查询执行人姓名 
 | 
            SysUser user = sysUserMapper.selectById(userId); 
 | 
            String userName = user.getNickName(); 
 | 
            //查询该计划的所有兴趣点 
 | 
            ArdAlarmpointsWell ardAlarmpointsWell = wellMapper.selectById(wellId); 
 | 
            //没打卡的数据 
 | 
            ArdAppPatrolpointRecord record1 = new ArdAppPatrolpointRecord(); 
 | 
            record1.setAppPatrolpointsId(ardAlarmpointsWell.getId()); 
 | 
            record1.setAppPatrolpointsName(ardAlarmpointsWell.getWellId()); 
 | 
            record1.setPlanId(planId); 
 | 
            record1.setPlanName(plan.getPlanName()); 
 | 
            record1.setUserId(userId); 
 | 
            record1.setUserName(userName); 
 | 
            record1.setLatitude(String.valueOf(ardAlarmpointsWell.getLatitude())); 
 | 
            record1.setLongitude(String.valueOf(ardAlarmpointsWell.getLongitude().toString())); 
 | 
            record1.setPlanUserName(nikeName); 
 | 
            jsonArray.add(record1); 
 | 
        }else { 
 | 
            jsonArray.add(record); 
 | 
        } 
 | 
        return Results.succeed(jsonArray); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Results son() { 
 | 
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
 | 
        //获取用户执行人 
 | 
        String userId = SecurityUtils.getUserId(); 
 | 
        // 减少 10 秒 
 | 
        LocalDateTime now = LocalDateTime.now(); // 获取当前日期时间 
 | 
        LocalDateTime earlier = now.minusSeconds(10); // 减少30秒 
 | 
        RecordSonParam recordSonParam = new RecordSonParam(); 
 | 
        recordSonParam.setUserId(userId); 
 | 
        String n = fmt.format(now); 
 | 
        recordSonParam.setTime(n); 
 | 
        String e = fmt.format(earlier); 
 | 
        recordSonParam.setBeforeTime(e); 
 | 
        //根据姓名ID为执行人获取所有对应的计划名称 
 | 
        List<ArdAppPatrolplan> list = patrolplanMapper.planUser(recordSonParam); 
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        JSONObject jsonObject = new JSONObject(); 
 | 
        if(list.size()>0){ 
 | 
            jsonObject.put("plan",true); 
 | 
            jsonObject.put("user",list.get(0).getNickName()); 
 | 
            jsonObject.put("name",list.get(0).getPlanName()); 
 | 
//            list.get(0).setSon("已通知"); 
 | 
//            patrolplanMapper.updateById(list.get(0)); 
 | 
        }else { 
 | 
            jsonObject.put("plan",false); 
 | 
            jsonObject.put("user",null); 
 | 
            jsonObject.put("name",null); 
 | 
        } 
 | 
        jsonArray.add(jsonObject); 
 | 
        return Results.succeed(jsonArray); 
 | 
    } 
 | 
} 
 |