|  | @@ -1,5 +1,6 @@
 | 
	
		
			
				|  |  |  package com.xunmei.core.edu.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import cn.hutool.core.date.DateUtil;
 | 
	
		
			
				|  |  |  import cn.hutool.core.map.MapUtil;
 | 
	
		
			
				|  |  |  import cn.hutool.core.util.ObjectUtil;
 | 
	
		
			
				|  |  |  import com.alibaba.fastjson2.JSON;
 | 
	
	
		
			
				|  | @@ -12,27 +13,36 @@ import com.xunmei.common.core.constant.ErrorMsgConstants;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.constant.SecurityConstants;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.DateRange;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.edu.domain.*;
 | 
	
		
			
				|  |  | +import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskEditDto;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto;
 | 
	
		
			
				|  |  | +import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskReportDto;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDataVo;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskDetailVo;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskPageVo;
 | 
	
		
			
				|  |  | +import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.enums.edu.EduTrainingType;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.utils.DateUtils;
 | 
	
		
			
				|  |  |  import com.xunmei.common.core.web.page.TableDataInfo;
 | 
	
		
			
				|  |  | +import com.xunmei.common.security.utils.SecurityUtils;
 | 
	
		
			
				|  |  |  import com.xunmei.core.edu.mapper.CoreEduTrainingTaskMapper;
 | 
	
		
			
				|  |  |  import com.xunmei.core.edu.mapper.CoreEduTrainingTaskToRoleMapper;
 | 
	
		
			
				|  |  |  import com.xunmei.core.edu.mapper.CoreEduTrainingTaskToUserMapper;
 | 
	
		
			
				|  |  |  import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 | 
	
		
			
				|  |  |  import com.xunmei.core.edu.service.ICoreEduTrainingTaskToRoleService;
 | 
	
		
			
				|  |  | +import com.xunmei.core.edu.service.ICoreEduTrainingTaskToUserService;
 | 
	
		
			
				|  |  |  import com.xunmei.system.api.RemoteOrgService;
 | 
	
		
			
				|  |  |  import com.xunmei.system.api.domain.SysOrg;
 | 
	
		
			
				|  |  |  import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 | 
	
		
			
				|  |  | +import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  |  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.math.BigDecimal;
 | 
	
		
			
				|  |  | +import java.math.RoundingMode;
 | 
	
		
			
				|  |  | +import java.text.NumberFormat;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -55,6 +65,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 | 
	
		
			
				|  |  |      private CoreEduTrainingTaskToRoleMapper taskToRoleMapper;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private CoreEduTrainingTaskToUserMapper taskToUserMapper;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private ICoreEduTrainingTaskToUserService coreEduTrainingTaskToUserService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public TableDataInfo<CoreEduTrainingTaskPageVo> selectPage(CoreEduTrainingTaskPageDto request) {
 | 
	
	
		
			
				|  | @@ -79,10 +91,9 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 | 
	
		
			
				|  |  |                  record.setTaskRoleNameList(coreEduTrainingTaskToRoles.stream().map(CoreEduTrainingTaskToRole::getRoleName).collect(Collectors.joining(",")));
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //抓换为TableDataInfo适配前端
 | 
	
		
			
				|  |  |          return TableDataInfo.build(pageData);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -95,8 +106,10 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public CoreEduTrainingTaskDetailVo selectCoreEduTrainingTaskById(Long id) {
 | 
	
		
			
				|  |  |          CoreEduTrainingTaskDetailVo detailVo = coreEduTrainingTaskMapper.selectEduTrainingTaskDetail(id);
 | 
	
		
			
				|  |  | -        List<CoreEduTrainingTaskToUser> userList = taskToUserMapper.selectByMap(MapUtil.of("plan_id", id));
 | 
	
		
			
				|  |  | -        detailVo.setTaskUserList(userList);
 | 
	
		
			
				|  |  | +        List<CoreEduTrainingTaskToUser> userList = taskToUserMapper.selectByMap(MapUtil.of("edu_training_task_id", id));
 | 
	
		
			
				|  |  | +        if(ObjectUtil.isNotEmpty(userList)){
 | 
	
		
			
				|  |  | +            detailVo.setTaskUserList(userList);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          return detailVo;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -126,11 +139,23 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 修改教育任务
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  | -     * @param coreEduTrainingTask 教育任务
 | 
	
		
			
				|  |  | +     * @param request 教育任务
 | 
	
		
			
				|  |  |       * @return 结果
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public int updateCoreEduTrainingTask(CoreEduTrainingTask coreEduTrainingTask) {
 | 
	
		
			
				|  |  | +    public int updateCoreEduTrainingTask(CoreEduTrainingTaskEditDto request) {
 | 
	
		
			
				|  |  | +        CoreEduTrainingTask coreEduTrainingTask = coreEduTrainingTaskMapper.selectById(request.getId());
 | 
	
		
			
				|  |  | +        BeanUtils.copyProperties(request, coreEduTrainingTask);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<CoreEduTrainingTaskToUser> taskUserList = request.getTaskUserList();
 | 
	
		
			
				|  |  | +        if (taskUserList != null && taskUserList.size() > 0) {
 | 
	
		
			
				|  |  | +            coreEduTrainingTaskToUserService.saveBatch(taskUserList);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (ObjectUtil.equal(request.getSubmitType(), 2)) {
 | 
	
		
			
				|  |  | +            coreEduTrainingTask.setStatus(EduTrainingDoStatus.WAIT_SIGN.getCode());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        coreEduTrainingTask.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
 | 
	
		
			
				|  |  |          coreEduTrainingTask.setUpdateTime(DateUtils.getNowDate());
 | 
	
		
			
				|  |  |          return coreEduTrainingTaskMapper.updateById(coreEduTrainingTask);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -198,8 +223,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 | 
	
		
			
				|  |  |                  trainingTask.setContent(null);
 | 
	
		
			
				|  |  |                  trainingTask.setTitle(plan.getPlanName());
 | 
	
		
			
				|  |  |                  trainingTask.setNote(null);
 | 
	
		
			
				|  |  | -                trainingTask.setDateTime(null);
 | 
	
		
			
				|  |  | -                trainingTask.setHostId(null);
 | 
	
		
			
				|  |  | +                trainingTask.setTrainingStartDateTime(null);
 | 
	
		
			
				|  |  | +                trainingTask.setTrainingEndDateTime(null);
 | 
	
		
			
				|  |  |                  trainingTask.setFileList(ObjectUtil.isEmpty(plan.getFileList()) ? null : JSON.toJSONString(plan.getFileList()));
 | 
	
		
			
				|  |  |                  trainingTask.setImageList(null);
 | 
	
		
			
				|  |  |                  trainingTask.setOrgId(org.getId());
 | 
	
	
		
			
				|  | @@ -229,6 +254,39 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 | 
	
		
			
				|  |  |              coreEduTrainingTaskToRoleService.saveBatch(taskRoleList);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<CoreEduTrainingTaskReportVo> selectCoreEduTrainingTaskReport(CoreEduTrainingTaskReportDto request) {
 | 
	
		
			
				|  |  | +        request.setStartDate(DateUtil.beginOfMonth(request.getDate()));
 | 
	
		
			
				|  |  | +        request.setEndDate(DateUtil.endOfMonth(request.getDate()));
 | 
	
		
			
				|  |  | +        Long orgId = request.getOrgId();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<SysOrg> sysOrgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectSysOrgByParentId(orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
 | 
	
		
			
				|  |  | +        if (ObjectUtil.isEmpty(sysOrgList)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return new ArrayList<>();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        List<CoreEduTrainingTaskReportVo> list = coreEduTrainingTaskMapper.selectReport(request);
 | 
	
		
			
				|  |  | +        list.forEach(item -> {
 | 
	
		
			
				|  |  | +            item.setFinishRate(calculatePercent(item.getShouldFinish(), item.getFinish()));
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return list;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private String calculatePercent(Integer num1, Integer num2) {
 | 
	
		
			
				|  |  | +        if (num1 == 0 || num2 == 0) {
 | 
	
		
			
				|  |  | +            return "0%";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        BigDecimal a1 = new BigDecimal(num1);
 | 
	
		
			
				|  |  | +        BigDecimal a2 = new BigDecimal(num2);
 | 
	
		
			
				|  |  | +        BigDecimal r = a1.divide(a2, 4, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | +        NumberFormat percent = NumberFormat.getPercentInstance();
 | 
	
		
			
				|  |  | +        percent.setMaximumFractionDigits(4);
 | 
	
		
			
				|  |  | +        return percent.format(r.doubleValue());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |