|
|
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
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.toolkit.CollectionUtils;
|
|
|
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.Ymd;
|
|
|
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.dto.resumptionRegister.ResumptionTaskDataDto;
|
|
|
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.service.AppPlanService;
|
|
|
import com.xunmei.core.resumption.service.ResumptionService;
|
|
|
import com.xunmei.core.resumption.vo.AppRulePointTaskVo;
|
|
|
import com.xunmei.core.resumption.vo.ResumptionAppVo;
|
|
|
import com.xunmei.core.resumption.vo.ResumptionTaskNewDto;
|
|
|
import com.xunmei.core.resumption.vo.WorkChangeResumptionVo;
|
|
|
+import com.xunmei.system.api.domain.SysWorkTime;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
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;
|
|
|
|
|
|
@Service
|
|
|
public class ResumptionServiceImpl extends ServiceImpl<ResumptionMapper, Resumption> implements ResumptionService {
|
|
|
@Autowired
|
|
|
private ResumptionMapper resumptionMapper;
|
|
|
+ @Autowired
|
|
|
+ private AppPlanToRoleMapper appPlanToRoleMapper;
|
|
|
+ @Autowired
|
|
|
+ private AppPlanMapper appPlanMapper;
|
|
|
@Override
|
|
|
public List<Map<String, Object>> findDayTaskList(int year, int quarter, String dateTime, Long roleId, Long orgid) {
|
|
|
return resumptionMapper.findDayTaskList(year,quarter,dateTime, roleId, orgid);
|
|
|
@@ -165,4 +172,106 @@ public class ResumptionServiceImpl extends ServiceImpl<ResumptionMapper, Resumpt
|
|
|
|
|
|
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;
|
|
|
+ }
|
|
|
}
|