|  | @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateField;
 | 
											
												
													
														|  |  import cn.hutool.core.date.DateTime;
 |  |  import cn.hutool.core.date.DateTime;
 | 
											
												
													
														|  |  import cn.hutool.core.date.DateUtil;
 |  |  import cn.hutool.core.date.DateUtil;
 | 
											
												
													
														|  |  import cn.hutool.core.util.ObjectUtil;
 |  |  import cn.hutool.core.util.ObjectUtil;
 | 
											
												
													
														|  | 
 |  | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 | 
											
												
													
														|  |  import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 |  |  import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 | 
											
												
													
														|  |  import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 |  |  import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 | 
											
												
													
														|  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 |  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
											
										
											
												
													
														|  | @@ -15,30 +16,36 @@ import com.xunmei.common.core.utils.DateHelper;
 | 
											
												
													
														|  |  import com.xunmei.common.core.utils.ResumptionType;
 |  |  import com.xunmei.common.core.utils.ResumptionType;
 | 
											
												
													
														|  |  import com.xunmei.common.core.utils.Ymd;
 |  |  import com.xunmei.common.core.utils.Ymd;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.domain.AppPlan;
 |  |  import com.xunmei.core.resumption.domain.AppPlan;
 | 
											
												
													
														|  | 
 |  | +import com.xunmei.core.resumption.domain.AppPlanToRole;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.domain.Resumption;
 |  |  import com.xunmei.core.resumption.domain.Resumption;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.dto.resumptionRegister.ResumptionTaskDataDto;
 |  |  import com.xunmei.core.resumption.dto.resumptionRegister.ResumptionTaskDataDto;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.dto.TaskDetailsDto;
 |  |  import com.xunmei.core.resumption.dto.TaskDetailsDto;
 | 
											
												
													
														|  | 
 |  | +import com.xunmei.core.resumption.mapper.AppPlanMapper;
 | 
											
												
													
														|  | 
 |  | +import com.xunmei.core.resumption.mapper.AppPlanToRoleMapper;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.mapper.ResumptionMapper;
 |  |  import com.xunmei.core.resumption.mapper.ResumptionMapper;
 | 
											
												
													
														|  | 
 |  | +import com.xunmei.core.resumption.service.AppPlanService;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.service.ResumptionService;
 |  |  import com.xunmei.core.resumption.service.ResumptionService;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.vo.AppRulePointTaskVo;
 |  |  import com.xunmei.core.resumption.vo.AppRulePointTaskVo;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.vo.ResumptionAppVo;
 |  |  import com.xunmei.core.resumption.vo.ResumptionAppVo;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.vo.ResumptionTaskNewDto;
 |  |  import com.xunmei.core.resumption.vo.ResumptionTaskNewDto;
 | 
											
												
													
														|  |  import com.xunmei.core.resumption.vo.WorkChangeResumptionVo;
 |  |  import com.xunmei.core.resumption.vo.WorkChangeResumptionVo;
 | 
											
												
													
														|  | 
 |  | +import com.xunmei.system.api.domain.SysWorkTime;
 | 
											
												
													
														|  |  import org.springframework.beans.factory.annotation.Autowired;
 |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
											
												
													
														|  |  import org.springframework.stereotype.Service;
 |  |  import org.springframework.stereotype.Service;
 | 
											
												
													
														|  |  import org.springframework.transaction.annotation.Propagation;
 |  |  import org.springframework.transaction.annotation.Propagation;
 | 
											
												
													
														|  |  import org.springframework.transaction.annotation.Transactional;
 |  |  import org.springframework.transaction.annotation.Transactional;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -import java.util.ArrayList;
 |  | 
 | 
											
												
													
														|  | -import java.util.Date;
 |  | 
 | 
											
												
													
														|  | -import java.util.List;
 |  | 
 | 
											
												
													
														|  | -import java.util.Map;
 |  | 
 | 
											
												
													
														|  | 
 |  | +import java.util.*;
 | 
											
												
													
														|  |  import java.util.stream.Collectors;
 |  |  import java.util.stream.Collectors;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  @Service
 |  |  @Service
 | 
											
												
													
														|  |  public class ResumptionServiceImpl extends ServiceImpl<ResumptionMapper, Resumption> implements ResumptionService {
 |  |  public class ResumptionServiceImpl extends ServiceImpl<ResumptionMapper, Resumption> implements ResumptionService {
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private ResumptionMapper resumptionMapper;
 |  |      private ResumptionMapper resumptionMapper;
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private AppPlanToRoleMapper appPlanToRoleMapper;
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private AppPlanMapper appPlanMapper;
 | 
											
												
													
														|  |      @Override
 |  |      @Override
 | 
											
												
													
														|  |      public List<Map<String, Object>> findDayTaskList(int year, int quarter, String dateTime, Long roleId, Long orgid) {
 |  |      public List<Map<String, Object>> findDayTaskList(int year, int quarter, String dateTime, Long roleId, Long orgid) {
 | 
											
												
													
														|  |          return resumptionMapper.findDayTaskList(year,quarter,dateTime, roleId, orgid);
 |  |          return resumptionMapper.findDayTaskList(year,quarter,dateTime, roleId, orgid);
 | 
											
										
											
												
													
														|  | @@ -165,4 +172,106 @@ public class ResumptionServiceImpl extends ServiceImpl<ResumptionMapper, Resumpt
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          return list;
 |  |          return list;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    @Override
 | 
											
												
													
														|  | 
 |  | +    public void dayTaskByWorkTime(Map<String, Object> params) {
 | 
											
												
													
														|  | 
 |  | +        SysWorkTime workTime = (SysWorkTime) params.get("sysWorkTime");
 | 
											
												
													
														|  | 
 |  | +        List<Long> orgIds = (List<Long>) params.get("orgIds");
 | 
											
												
													
														|  | 
 |  | +        //按机构删除当天的每日履职
 | 
											
												
													
														|  | 
 |  | +        QueryWrapper<Resumption> queryWrapper = new QueryWrapper<>();
 | 
											
												
													
														|  | 
 |  | +        queryWrapper.lambda().eq(Resumption::getYmdDate, workTime.getYmdDate());
 | 
											
												
													
														|  | 
 |  | +        queryWrapper.lambda().in(Resumption::getOrgId, orgIds);
 | 
											
												
													
														|  | 
 |  | +        //待履职,进行中
 | 
											
												
													
														|  | 
 |  | +        //queryWrapper.lambda().in(Resumption::getStatus,  1, 2);
 | 
											
												
													
														|  | 
 |  | +        //每日任务
 | 
											
												
													
														|  | 
 |  | +        queryWrapper.lambda().eq(Resumption::getType, 2);
 | 
											
												
													
														|  | 
 |  | +        List<Resumption> resumptionList = resumptionMapper.selectList(queryWrapper);
 | 
											
												
													
														|  | 
 |  | +        List<Resumption> resumptionListYlz =resumptionList.stream().filter(item -> item.getStatus()==3).collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +        if (CollectionUtils.isNotEmpty(resumptionList)) {
 | 
											
												
													
														|  | 
 |  | +            //取出未履职的数据(待履职,进行中)
 | 
											
												
													
														|  | 
 |  | +            List<Resumption> resumptionListWlz = resumptionList.stream().filter(item -> item.getStatus() == 1 || item.getStatus() == 2).collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +            //删除这些数据
 | 
											
												
													
														|  | 
 |  | +            resumptionMapper.deleteBatchIds(resumptionListWlz.stream().map(Resumption::getId).collect(Collectors.toList()));
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        //营业重新生成任务
 | 
											
												
													
														|  | 
 |  | +        if (workTime.getIsEnable() == 1) {
 | 
											
												
													
														|  | 
 |  | +            QueryWrapper<AppPlan> qw = new QueryWrapper<>();
 | 
											
												
													
														|  | 
 |  | +            qw.lambda().eq(AppPlan::getPlanStatus, 0);
 | 
											
												
													
														|  | 
 |  | +            qw.lambda().in(AppPlan::getPlanOfOrgId, orgIds);
 | 
											
												
													
														|  | 
 |  | +            List<AppPlan> listPlans = appPlanMapper.selectList(qw);
 | 
											
												
													
														|  | 
 |  | +            //通过resumptionListYlz中的planId过滤除已履职的计划
 | 
											
												
													
														|  | 
 |  | +            List<AppPlan> lists = listPlans.stream().filter(item -> !resumptionListYlz.stream().map(Resumption::getPlanId).collect(
 | 
											
												
													
														|  | 
 |  | +                    Collectors.toList()).contains(item.getId())).collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +            //通过计划id获取计划关系的角色
 | 
											
												
													
														|  | 
 |  | +            if (CollectionUtils.isNotEmpty(lists)) {
 | 
											
												
													
														|  | 
 |  | +                List<Long> planIds = lists.stream().map(AppPlan::getId).collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +                List<AppPlanToRole> appPlanToRoles = appPlanToRoleMapper.selectList(new QueryWrapper<AppPlanToRole>().lambda().in(AppPlanToRole::getPlanId, planIds));
 | 
											
												
													
														|  | 
 |  | +                List<Resumption> newResumptionList = new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +                for(AppPlan plan:lists){
 | 
											
												
													
														|  | 
 |  | +                    //根据计划获取角色
 | 
											
												
													
														|  | 
 |  | +                    List<AppPlanToRole> planToRoles = appPlanToRoles.stream().filter(item -> item.getPlanId().equals(plan.getId())).collect(Collectors.toList());
 | 
											
												
													
														|  | 
 |  | +                    List<Resumption> resumptionLista = this.buildResumptions(plan, planToRoles,workTime);
 | 
											
												
													
														|  | 
 |  | +                    if(CollectionUtils.isNotEmpty(resumptionLista)){
 | 
											
												
													
														|  | 
 |  | +                        newResumptionList.addAll(resumptionLista);
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                this.saveBatch(newResumptionList);
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    private List<Resumption> buildResumptions(AppPlan appPlan, List<AppPlanToRole> planToRoles, SysWorkTime workTime) {
 | 
											
												
													
														|  | 
 |  | +        List<Resumption> resumptionList = new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +        DateTime dateTime = new DateTime(workTime.getYmdDate());
 | 
											
												
													
														|  | 
 |  | +        String opentime = workTime.getOpenTime();//营业时间
 | 
											
												
													
														|  | 
 |  | +        String closetime = workTime.getCloseTime();//营业终了
 | 
											
												
													
														|  | 
 |  | +        DateTime planstartTime = null;
 | 
											
												
													
														|  | 
 |  | +        DateTime planendTime = null;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        DateTime time1 = new DateTime(dateTime);
 | 
											
												
													
														|  | 
 |  | +        time1.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
 | 
											
												
													
														|  | 
 |  | +        DateTime time2 = new DateTime(dateTime);
 | 
											
												
													
														|  | 
 |  | +        time2.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if (appPlan.getPlanExec() == 1) {//全天 上班时间-下班时间 00:00:00-23:59:59
 | 
											
												
													
														|  | 
 |  | +            planstartTime = time1.setField(DateField.HOUR_OF_DAY, 0).setField(DateField.MINUTE, 0).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +            planendTime = DateUtil.endOfDay(time2).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +        } else if (appPlan.getPlanExec() == 2) {//营业前 上班时间-营业时间
 | 
											
												
													
														|  | 
 |  | +            planstartTime = time1.setField(DateField.HOUR_OF_DAY, 0).setField(DateField.MINUTE, 0).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +            planendTime = time2.setField(DateField.HOUR_OF_DAY, Integer.parseInt(opentime.split(":")[0])).setField(DateField.MINUTE, Integer.parseInt(opentime.split(":")[1])).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +        } else if (appPlan.getPlanExec() == 3) {//营业期间 营业时间-营业终了
 | 
											
												
													
														|  | 
 |  | +            planstartTime = time1.setField(DateField.HOUR_OF_DAY, Integer.parseInt(opentime.split(":")[0])).setField(DateField.MINUTE, Integer.parseInt(opentime.split(":")[1])).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +            planendTime = time2.setField(DateField.HOUR_OF_DAY, Integer.parseInt(closetime.split(":")[0])).setField(DateField.MINUTE, Integer.parseInt(closetime.split(":")[1])).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +        } else if (appPlan.getPlanExec() == 4) {//营业终 营业终了-23.59.59
 | 
											
												
													
														|  | 
 |  | +            planstartTime = time1.setField(DateField.HOUR_OF_DAY, Integer.parseInt(closetime.split(":")[0])).setField(DateField.MINUTE, Integer.parseInt(closetime.split(":")[1])).setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +            planendTime = DateUtil.endOfDay(time2).setField(DateField.MILLISECOND, 0);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        for(AppPlanToRole role :planToRoles){
 | 
											
												
													
														|  | 
 |  | +            Resumption resumption = new Resumption();
 | 
											
												
													
														|  | 
 |  | +            Ymd ymd = Ymd.of(dateTime);
 | 
											
												
													
														|  | 
 |  | +            resumption.setStatus( 1);
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmd(ymd);
 | 
											
												
													
														|  | 
 |  | +            resumption.setName(appPlan.getPlanName());
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdDate(ymd.getDate());
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdDay(Long.valueOf(ymd.getDay()));
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdMonth(Long.valueOf(ymd.getMonth()));
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdWeek(Long.valueOf(ymd.getWeek()));
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdYear(Long.valueOf(ymd.getYear()));
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdHour(Long.valueOf(ymd.getHour()));
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdQuarter(Long.valueOf(ymd.getQuarter()));
 | 
											
												
													
														|  | 
 |  | +            resumption.setYmdHalfyear(Long.valueOf(ymd.getHalfyear()));
 | 
											
												
													
														|  | 
 |  | +            resumption.setPlanId((ObjectUtil.equal(appPlan.getParentId(), -1L) || ObjectUtil.isNull(appPlan.getParentId())) ? appPlan.getId() : appPlan.getParentId());
 | 
											
												
													
														|  | 
 |  | +            resumption.setOrgId(appPlan.getPlanOfOrgId());
 | 
											
												
													
														|  | 
 |  | +            resumption.setType(appPlan.getPlanType());
 | 
											
												
													
														|  | 
 |  | +            resumption.setRoleId(role.getRoleId());
 | 
											
												
													
														|  | 
 |  | +            resumption.setPlanStartTime(planstartTime);
 | 
											
												
													
														|  | 
 |  | +            resumption.setPlanEndTime(planendTime);
 | 
											
												
													
														|  | 
 |  | +            resumption.setCreateTime(new Date());
 | 
											
												
													
														|  | 
 |  | +            resumptionList.add(resumption);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        return resumptionList;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  }
 |  |  }
 |