Kaynağa Gözat

新增教育计划时选择学习资料附件查询bug处理

jingyuanchao 2 yıl önce
ebeveyn
işleme
34c4102bf5

+ 15 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillTaskEvaluateDto.java

@@ -0,0 +1,15 @@
+package com.xunmei.common.core.domain.drill.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class CoreDrillTaskEvaluateDto {
+
+    @ApiModelProperty(value = "任务Id")
+    private Long taskId;
+
+    @ApiModelProperty(value = "评分")
+    private String score;
+}

+ 1 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillTaskReportDto.java

@@ -26,5 +26,6 @@ public class CoreDrillTaskReportDto {
 
     @ApiModelProperty(value = "统计月份结束日期")
     private Date endDate;
+    private String orgPath;
 
 }

+ 27 - 5
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillTaskDetailVo.java

@@ -1,5 +1,6 @@
 package com.xunmei.common.core.domain.drill.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -18,7 +19,7 @@ public class CoreDrillTaskDetailVo {
     @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
     private Long id;
     @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
-    @ApiModelProperty(value = "教育培训计划Id")
+    @ApiModelProperty(value = "演练计划Id")
     private Long planId;
 
     @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
@@ -28,17 +29,17 @@ public class CoreDrillTaskDetailVo {
     @ApiModelProperty(value = "机构名称")
     private String orgName;
 
-    @ApiModelProperty(value = "学习主题")
+    @ApiModelProperty(value = "演练主题")
     private String title;
 
     /**
-     * @see com.xunmei.common.core.enums.edu.DrillDoStatus
+     * @see com.xunmei.common.core.enums.drill.DrillDoStatus
      * 类型
      */
-    @ApiModelProperty(value = "类型")
+    @ApiModelProperty(value = "演练类型")
     private Integer type;
 
-    @ApiModelProperty(value = "类型名称")
+    @ApiModelProperty(value = "演练类型名称")
     private String typeText;
 
     @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
@@ -69,6 +70,27 @@ public class CoreDrillTaskDetailVo {
     @ApiModelProperty(value = "培训开始时间")
     private LocalDateTime drillTime;
 
+    @ApiModelProperty(value = "预设案由")
+    private String presetCase;
+
+    @ApiModelProperty(value = "演练情况")
+    private String drillSituation;
+
+    @ApiModelProperty(value = "演练地点")
+    private String drillSite;
+
+
+    @TableField("comment_score")
+    @ApiModelProperty(value = "评分")
+    private String commentScore;
+
+    @TableField("comment")
+    @ApiModelProperty(value = "评语")
+    private String comment;
+
+    @ApiModelProperty(value = "周期")
+    private Integer planCycle;
+
     @ApiModelProperty(value = "图片")
     private String imageList;
 

+ 6 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillTaskPageVo.java

@@ -34,10 +34,10 @@ public class CoreDrillTaskPageVo {
      * @see com.xunmei.common.core.enums.drill.DrillType
      * 类型
      */
-    @ApiModelProperty(value = "类型")
+    @ApiModelProperty(value = "演练类型")
     private Integer type;
 
-    @ApiModelProperty(value = "类型名称")
+    @ApiModelProperty(value = "演练类型名称")
     private String typeText;
 
     @ApiModelProperty(value = "指挥人")
@@ -58,6 +58,10 @@ public class CoreDrillTaskPageVo {
     @ApiModelProperty(value = "任务计划截止日期")
     private Date endDate;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "演练执行时间")
+    private Date drillTime;
+
     /**
      * @see com.xunmei.common.core.enums.drill.DrillDoStatus
      */

+ 15 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/StringUtils.java

@@ -4,6 +4,9 @@ import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.text.StrFormatter;
 import org.springframework.util.AntPathMatcher;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.NumberFormat;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -559,4 +562,16 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
         }
         return sb.toString();
     }
+
+    public static 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());
+    }
 }

+ 9 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/controller/CoreDrillTaskController.java

@@ -2,10 +2,7 @@ package com.xunmei.core.drill.controller;
 
 
 import com.xunmei.common.core.domain.drill.domain.CoreDrillTask;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskEditDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskPageDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskReportDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskSignDto;
+import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskPageVo;
 import com.xunmei.common.core.web.controller.BaseController;
 import com.xunmei.common.core.web.domain.AjaxResult;
@@ -107,4 +104,12 @@ public class CoreDrillTaskController extends BaseController {
     AjaxResult buildEduTask(@RequestParam(required = false, value = "cycle") Integer cycle, @RequestParam(required = false, value = "date") Date date) {
         return success(coreDrillTaskService.buildDrillTask(cycle, date));
     }
+
+
+    @ApiOperation(value = "预案演练任务评价")
+    @RequiresPermissions("core:drillTask:edit")
+    @PostMapping("evaluate")
+    public AjaxResult evaluate(@RequestBody @Validated CoreDrillTaskEvaluateDto request) {
+        return success(coreDrillTaskService.evaluate(request));
+    }
 }

+ 4 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillTaskService.java

@@ -4,10 +4,7 @@ package com.xunmei.core.drill.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.drill.domain.CoreDrillTask;
 import com.xunmei.common.core.domain.drill.domain.CoreDrillTaskToUser;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskEditDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskPageDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskReportDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskSignDto;
+import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskPageVo;
@@ -93,4 +90,7 @@ public interface ICoreDrillTaskService extends IService<CoreDrillTask> {
     String buildDrillTask(Integer cycle, Date date);
 
     List<CoreDrillTaskToUser> signUserList(Long taskId);
+
+    int evaluate(CoreDrillTaskEvaluateDto request);
+
 }

+ 6 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -19,6 +19,7 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
+import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
@@ -181,14 +182,16 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         SysOrg r = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
         SysOrg org = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.getSysOrgByUserId(SecurityUtils.getUserId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
         plan.setCreateOrgId(orgId);
-        plan.setCreateOrgName(r.getName());
+        plan.setCreateOrgName(r.getShortName());
         plan.setCreateOrgPath(r.getPath());
         plan.setBelongOrgId(orgId);
-        plan.setBelongOrgName(r.getName());
+        plan.setBelongOrgName(r.getShortName());
         plan.setBelongOrgPath(r.getPath());
         plan.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
         batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
         batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
+        plan.setStandard(0);
+        plan.setIssue(0);
         //省联社或者办事处创建的计划才存在下发
         if (checkOrgType(org.getType())) {
             plan.setStandard(1);
@@ -211,7 +214,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             throw new RuntimeException("当前用户所在机构类型无法确认!");
         }
         //如果是省联社或者办事处则返回1,其他机构类型返回0
-        return ObjectUtil.equal(orgType, 1) || ObjectUtil.equal(orgType, 2);
+        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode()) || ObjectUtil.equal(orgType,  OrgTypeEnum.BAN_SHI_CHU.getCode());
     }
 
     /**
@@ -237,7 +240,6 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         coreDrillPlanToRoleMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
         coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
         List<CoreDrillPlanToRole> coreDrillPlanToRoleList = batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
-        List<CoreDrillPlanToExecOrg> drillPlanToExecOrgList = batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         final int i = coreDrillPlanMapper.updateById(plan);
         if (plan.getStandard() == 1) {
             //如果标准计划可以修改,那么需要删除所有计划与任务,重新创建计划任务

+ 97 - 63
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xunmei.core.drill.service.impl;
 
+import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -10,15 +11,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.constant.DictConstants;
 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.R;
 import com.xunmei.common.core.domain.drill.domain.*;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskEditDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskPageDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskReportDto;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillTaskSignDto;
+import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskPageVo;
@@ -31,6 +30,7 @@ import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.drill.mapper.CoreDrillPlanMapper;
 import com.xunmei.core.drill.mapper.CoreDrillTaskMapper;
@@ -41,6 +41,8 @@ import com.xunmei.core.drill.service.ICoreDrillTaskToRoleService;
 import com.xunmei.core.drill.service.ICoreDrillTaskToUserService;
 import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.RemoteRoleService;
+import com.xunmei.system.api.domain.SysDictData;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
@@ -59,6 +61,8 @@ import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
+import static com.xunmei.common.core.utils.StringUtils.calculatePercent;
+
 
 /**
  * 教育任务Service业务层处理
@@ -75,6 +79,8 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     @Autowired
     private RemoteFileService fileService;
     @Autowired
+    private RemoteRoleService roleService;
+    @Autowired
     private ICoreDrillTaskToRoleService coreDrillTaskToRoleService;
     @Autowired
     private CoreDrillTaskToRoleMapper taskToRoleMapper;
@@ -88,26 +94,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
 
     @Override
     public TableDataInfo<CoreDrillTaskPageVo> selectPage(CoreDrillTaskPageDto request) {
-        //如果是web段的查询
-        if (ObjectUtil.isNotEmpty(request.getRange())) {
-            request.setStartTime(DateUtil.beginOfDay(request.getRange()[0]));
-            request.setEndTime(DateUtil.endOfDay(request.getRange()[1]));
-        }
-        //如果是App段的查询
-        if (ObjectUtil.isNotNull(request.getDate())) {
-            // Date date = java.sql.Date.valueOf(request.getDate());
-            request.setStartTime(DateUtil.beginOfMonth(request.getDate()));
-            request.setEndTime(DateUtil.endOfMonth(request.getDate()));
-
-        }
-        if (ObjectUtil.equal(1, request.getIsAppSelect())) {
-            request.setCheckSub(true);
-        }
-        //App 默认下穿
-        if (Boolean.TRUE.equals(request.getCheckSub())) {
-            SysOrg org = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-            request.setOrgPath(org.getPath());
-        }
+        dealParam(request);
         IPage<CoreDrillTaskPageVo> pageData = coreDrillTaskMapper.selectPageData(request.getPageRequest(), request);
         if (ObjectUtil.isNotEmpty(pageData.getRecords())) {
             List<Long> idList = pageData.getRecords().stream().map(CoreDrillTaskPageVo::getId).collect(Collectors.toList());
@@ -123,10 +110,29 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         return TableDataInfo.build(pageData);
     }
 
-    private String getStaticPathPrefix() {
-        return RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_STATICS_SAVE_PATH_ERROR);
+    private void dealParam(CoreDrillTaskPageDto request) {
+        if (ObjectUtil.isNotNull(request.getIsAppSelect()) && 1 == request.getIsAppSelect()) {
+            //App的查询, App 默认下穿
+            request.setCheckSub(true);
+            //App端的时间按季度查询
+            DateRange dateRange = DateUtils.getStartAndEnd(request.getDate(), 4);
+            request.setStartTime(dateRange.getStartTime());
+            request.setEndTime(dateRange.getEndTime());
+        } else {
+            if (ObjectUtil.isNotEmpty(request.getRange())) {
+                //web的查询
+                request.setStartTime(DateUtil.beginOfDay(request.getRange()[0]));
+                request.setEndTime(DateUtil.endOfDay(request.getRange()[1]));
+            }
+
+        }
+        if (Boolean.TRUE.equals(request.getCheckSub())) {
+            SysOrg org = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+            request.setOrgPath(org.getPath());
+        }
     }
 
+
     private void dealData(CoreDrillTaskPageVo record, List<CoreDrillTaskPageVo> records, Map<Long, List<CoreDrillTaskToRole>> listMap) {
         record.setNo(records.indexOf(record) + 1);
         record.setTypeText(DrillType.getName(record.getType()));
@@ -138,13 +144,20 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         }
         record.setTaskRoleList(coreDrillTaskToRoles);
         record.setTaskRoleNameList(coreDrillTaskToRoles.stream().map(CoreDrillTaskToRole::getRoleName).collect(Collectors.joining(",")));
-        List<CoreDrillTaskToUser> userList = taskToUserMapper.selectList(new LambdaQueryWrapper<CoreDrillTaskToUser>()
-                .eq(CoreDrillTaskToUser::getDrillTaskId, record.getId()));
-        int signNums = (int) userList.stream().filter(user -> user.getSign() == 1 && ObjectUtil.equal(user.getType(), 1)).count();
-        int totalNums = (int) userList.stream().filter(user -> ObjectUtil.equal(user.getType(), 1)).count();
-        record.setSignNums(signNums + "/" + totalNums);
-        record.setUserList(userList);
+        //状态 != 待执行才存在相关用户信息
+        if (!record.getStatus().equals(DrillDoStatus.WAIT_RECORDED.getCode())) {
+            List<CoreDrillTaskToUser> userList = taskToUserMapper.selectList(new LambdaQueryWrapper<CoreDrillTaskToUser>()
+                    .eq(CoreDrillTaskToUser::getDrillTaskId, record.getId()));
+            int signNums = (int) userList.stream().filter(user -> user.getSign() == 1 && ObjectUtil.equal(user.getType(), 1)).count();
+            int totalNums = (int) userList.stream().filter(user -> ObjectUtil.equal(user.getType(), 1)).count();
+            record.setSignNums(signNums + "/" + totalNums);
+            record.setUserList(userList);
 
+        }
+        final List<SysDictData> drillTypeDictList = DictUtils.getDictCache(DictConstants.CORE_DRILL_TYPE);
+        if (ObjectUtil.isNotEmpty(drillTypeDictList) && ObjectUtil.isNotEmpty(record.getType())) {
+            drillTypeDictList.stream().filter(dict -> ObjectUtil.equal(dict.getDictValue(), record.getType().toString())).findFirst().ifPresent(dict -> record.setTypeText(dict.getDictLabel()));
+        }
     }
 
     @Override
@@ -171,6 +184,10 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         if (ObjectUtil.isNotEmpty(userList)) {
             detailVo.setTaskUserList(userList);
         }
+        final List<SysDictData> drillTypeDictList = DictUtils.getDictCache(DictConstants.CORE_DRILL_TYPE);
+        if (ObjectUtil.isNotEmpty(drillTypeDictList) && ObjectUtil.isNotEmpty(detailVo.getType())) {
+            drillTypeDictList.stream().filter(dict -> ObjectUtil.equal(dict.getDictValue(), detailVo.getType().toString())).findFirst().ifPresent(dict -> detailVo.setTypeText(dict.getDictLabel()));
+        }
         return detailVo;
     }
 
@@ -215,7 +232,13 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         coreDrillTask.setRecorderId(SecurityUtils.getUserId());
         coreDrillTask.setImageList(request.getImageList());
         //主持人默认取网点负责人,具体还没落实,暂时处理成这样   TODO
-        coreDrillTask.setHostId(SecurityUtils.getUserId());
+        List<SysUser> userList = RemoteCallHandlerExecutor.executeRemoteCall(() ->
+                roleService.selectUserByRoleNameAndOrgId("网点负责人", coreDrillTask.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_USER_DATA_ERROR);
+        if (ObjectUtil.isNotEmpty(userList)) {
+            coreDrillTask.setHostId(userList.get(0).getId());
+        } else {
+            coreDrillTask.setHostId(SecurityUtils.getUserId());
+        }
         List<CoreDrillTaskToUser> taskUserList = request.getTaskUserList();
         if (ObjectUtil.isNotEmpty(taskUserList)) {
             checkTheSameUser(taskUserList);
@@ -279,6 +302,9 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             DateRange dateRange = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
             start = dateRange.getStartTime();
             end = dateRange.getEndTime();
+        } else {
+            start = DateUtil.beginOfDay(start).setField(DateField.MILLISECOND, 0);
+            end = DateUtil.endOfDay(end).setField(DateField.MILLISECOND, 0);
         }
         List<CoreDrillPlanToExecOrg> planExecOrgList = plan.getPlanExecOrgList();
         List<SysOrg> orgList;
@@ -355,9 +381,13 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             planIdList = coreDrillPlanMapper.selectIdByParentId(plan.getId());
             planId = null;
         }
+
         request.setStartDate(DateUtil.beginOfMonth(request.getDate()));
         request.setEndDate(DateUtil.endOfMonth(request.getDate()));
+
         Long orgId = request.getOrgId();
+        SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+        request.setOrgPath(sysOrg.getPath());
 
         List<SysOrg> sysOrgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectSysOrgByParentId(orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
         if (ObjectUtil.isEmpty(sysOrgList)) {
@@ -365,39 +395,40 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         }
         List<CoreDrillTaskReportVo> result = new ArrayList<>();
         List<CoreDrillTaskReportVo> list = coreDrillTaskMapper.selectReport(request, planId, planIdList);
-        for (SysOrg org : sysOrgList) {
-            List<CoreDrillTaskReportVo> childrenOrgData = list.stream().filter(vo -> vo.getOrgPath().startsWith(org.getPath())).collect(Collectors.toList());
-            CoreDrillTaskReportVo reportVo=new CoreDrillTaskReportVo();
-            reportVo.setOrgId(org.getId());
-            reportVo.setOrgName(org.getName());
-            if (ObjectUtil.isEmpty(childrenOrgData)) {;
+
+        if (list.size() == 1 && list.get(0).getOrgId() == null) {
+            //走到这 说明mapper没有查到数据 构建空数据返回
+            for (SysOrg org : sysOrgList) {
+
+                CoreDrillTaskReportVo reportVo = new CoreDrillTaskReportVo();
+                reportVo.setOrgId(org.getId());
+                reportVo.setOrgName(org.getName());
                 reportVo.setShouldFinish(0);
                 reportVo.setFinish(0);
                 reportVo.setFinishRate("0%");
-            } else {
-                childrenOrgData.stream().map(CoreDrillTaskReportVo::getShouldFinish).reduce(Integer::sum).ifPresent(reportVo::setShouldFinish);
-                childrenOrgData.stream().map(CoreDrillTaskReportVo::getFinish).reduce(Integer::sum).ifPresent(reportVo::setFinish);
-
-                reportVo.setFinishRate(calculatePercent(reportVo.getFinish(), reportVo.getShouldFinish()));
+                result.add(reportVo);
+            }
+        } else {
+            for (SysOrg org : sysOrgList) {
+                List<CoreDrillTaskReportVo> childrenOrgData = list.stream().filter(vo -> vo.getOrgPath().startsWith(org.getPath())).collect(Collectors.toList());
+                CoreDrillTaskReportVo reportVo = new CoreDrillTaskReportVo();
+                reportVo.setOrgId(org.getId());
+                reportVo.setOrgName(org.getName());
+                if (ObjectUtil.isEmpty(childrenOrgData)) {
+                    ;
+                    reportVo.setShouldFinish(0);
+                    reportVo.setFinish(0);
+                    reportVo.setFinishRate("0%");
+                } else {
+                    childrenOrgData.stream().map(CoreDrillTaskReportVo::getShouldFinish).reduce(Integer::sum).ifPresent(reportVo::setShouldFinish);
+                    childrenOrgData.stream().map(CoreDrillTaskReportVo::getFinish).reduce(Integer::sum).ifPresent(reportVo::setFinish);
+                    reportVo.setFinishRate(calculatePercent(reportVo.getFinish(), reportVo.getShouldFinish()));
+                }
             }
-            result.add(reportVo);
         }
-
-
         return result;
     }
 
-    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());
-    }
 
     @Override
     public Integer sign(CoreDrillTaskSignDto request) {
@@ -411,7 +442,6 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             throw new SystemException("未获取到当前用户于该教育培训的详细信息");
         }
         taskToUser.setSign(1);
-        dealImageUrl(request.getSignImage());
         taskToUser.setSignImage(request.getSignImage());
         final int sign = taskToUserMapper.updateSign(taskToUser);
         //判断是否已全部完成签名,如果是将任务修改成已完成
@@ -433,10 +463,6 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         return sign;
     }
 
-    private void dealImageUrl(String signImage) {
-
-
-    }
 
     @Override
     public AjaxResult buildEduPdf(Long id) {
@@ -571,6 +597,14 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     }
 
 
+    @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
+    public int evaluate(CoreDrillTaskEvaluateDto request) {
+        CoreDrillTask drillTask = getById(request.getTaskId());
+        drillTask.setCommentScore(request.getScore());
+        drillTask.setStatus(DrillDoStatus.DONE.getCode());
+        return baseMapper.updateById(drillTask);
+    }
 }
 
 

+ 2 - 10
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -22,6 +22,7 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDataVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDetailVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanPageVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanRoleVo;
+import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
@@ -217,7 +218,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             throw new RuntimeException("当前用户所在机构类型无法确认!");
         }
         //如果是省联社或者办事处则返回1,其他机构类型返回0
-        return ObjectUtil.equal(orgType, 1) || ObjectUtil.equal(orgType, 2);
+        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode()) || ObjectUtil.equal(orgType,  OrgTypeEnum.BAN_SHI_CHU.getCode());
     }
 
     /**
@@ -243,7 +244,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         coreEduTrainingPlanToRoleMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
         coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
         List<CoreEduTrainingPlanToRole> trainingPlanToRoleList = batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
-        List<CoreEduTrainingPlanToExecOrg> trainingPlanToExecOrgList = batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         final int i = coreEduTrainingPlanMapper.updateById(plan);
         if (plan.getStandard() == 1) {
             //如果标准计划可以修改,那么需要删除所有计划与任务,重新创建计划任务
@@ -479,10 +479,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     }
 
     public List<CoreEduTrainingPlanToRole> batchSavePlanToRole(List<Long> roleIdList, Long planId) {
-        roleIdList.removeIf(Objects::isNull);
-        if (ObjectUtil.isEmpty(roleIdList)) {
-            return new ArrayList<>();
-        }
         List<CoreEduTrainingPlanToRole> planRoleList = new ArrayList<>();
         for (Long roleId : roleIdList) {
             CoreEduTrainingPlanToRole role = new CoreEduTrainingPlanToRole();
@@ -497,10 +493,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     }
 
     public List<CoreEduTrainingPlanToExecOrg> batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
-//        orgIdList.removeIf(Objects::isNull);
-        if (ObjectUtil.isEmpty(orgIdList)) {
-            return new ArrayList<>();
-        }
         List<CoreEduTrainingPlanToExecOrg> planOrgList = new ArrayList<CoreEduTrainingPlanToExecOrg>();
         for (Long orgId : orgIdList) {
             CoreEduTrainingPlanToExecOrg org = new CoreEduTrainingPlanToExecOrg();

+ 1 - 7
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -396,7 +396,6 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 reportVo.setFinishRate("0%");
                 result.add(reportVo);
             }
-            return result;
         } else {
             for (SysOrg org : sysOrgList) {
                 List<CoreEduTrainingTaskReportVo> childrenOrgData = list.stream()
@@ -414,8 +413,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 reportVo.setFinishRate(calculatePercent(totalFinish, totalShouldFinish));
                 result.add(reportVo);
             }
-            return result;
         }
+        return result;
     }
 
     public static String calculatePercent(Integer num1, Integer num2) {
@@ -443,7 +442,6 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
             throw new SystemException("未获取到当前用户于该教育培训的详细信息");
         }
         taskToUser.setSign(1);
-        dealImageUrl(request.getSignImage());
         taskToUser.setSignImage(request.getSignImage());
         final int sign = taskToUserMapper.updateSign(taskToUser);
         //判断是否已全部完成签名,如果是将任务修改成已完成
@@ -465,10 +463,6 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         return sign;
     }
 
-    private void dealImageUrl(String signImage) {
-
-
-    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)

+ 46 - 24
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml

@@ -63,7 +63,7 @@
 
     <select id="selectPageData" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillTaskPageVo"
             parameterType="com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto">
-        select t.id, plan_id, t.org_id, t.org_name, title, type, status, host_id,u.name as hostName,
+        select t.id, plan_id, t.org_id, t.org_name, title, type as type, status, host_id,u.name as hostName,
         start_date, end_date, t.drill_time, t.pdf_url as pdfUrl
         from core_drill_task t left join sys_user u on t.host_id=u.id
         <where>
@@ -84,11 +84,22 @@
             <if test="request.status != null">
                 and t.status=#{request.status}
             </if>
-            <if test="request.startTime != null">
-                and t.start_date >=#{request.startTime}
-            </if>
-            <if test="request.endTime != null">
-                and t.end_date <![CDATA[<=]]> #{request.endTime}
+            <if test="request.startTime != null and request.endTime != null">
+                and (
+                (
+                #{request.startTime}   <![CDATA[<=]]> t.start_date
+                and #{request.endTime} >= t.start_date
+                )
+                or
+                (
+                #{request.startTime}    <![CDATA[<=]]> t.end_date
+                and #{request.endTime} >= t.end_date
+                )
+                or (
+                #{request.startTime} >= t.start_date
+                and #{request.endTime}  <![CDATA[<=]]>  t.end_date
+                )
+                )
             </if>
         </where>
         order by t.update_time desc
@@ -149,7 +160,10 @@
     </select>
 
     <select id="checkHasTask" resultType="java.lang.Integer">
-        select 1 from core_drill_task where plan_id = #{planId} limit 1
+        select 1
+        from core_drill_task
+        where plan_id = #{planId}
+        limit 1
     </select>
 
     <select id="checkHasTaskIsDoneByPlanParentId" resultType="java.lang.Integer">
@@ -157,26 +171,34 @@
         from core_drill_task
         where status != 0
           and plan_id in
-              (select id from core_drill_plan where plan_status = 0 and deleted = 0 and parent_id = #{planId}) limit 1
+              (select id from core_drill_plan where plan_status = 0 and deleted = 0 and parent_id = #{planId})
+        limit 1
     </select>
 
     <select id="selectDrillTaskDetail" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillTaskDetailVo">
-        select t.id,
-               plan_id,
-               t.org_id,
-               t.org_name,
-               title,
-               type,
-               start_date,
-               end_date,
-               drill_time,
-               image_list,
-               t.host_id,
-               t.recorder_id,
-               u.name      as hostName,
-               u2.name     as recorderName,
-               t.pdf_url   as pdfUrl,
-               t.file_list as file
+        select t.id              as id,
+               t.plan_id         as planId,
+               t.org_id          as orgId,
+               t.org_name        as orgName,
+               t.title           as title,
+               t.type            as type,
+               t.start_date      as startDate,
+               t.end_date        as endDate,
+               t.drill_time      as drillTime,
+               t.preset_case     as presetCase,
+               t.drill_situation as drillSituation,
+               t.drill_site      as drillSite,
+               t.comment_score   as commentScore,
+               t.comment         as comment,
+               t.plan_cycle      as planCycle,
+               t.image_list      as imageList,
+               t.host_id         as hostId,
+               t.recorder_id     as recorderId,
+               u.name            as hostName,
+               u2.name           as recorderName,
+               t.pdf_url         as pdfUrl,
+               t.file_list       as file
+
         from core_drill_task t
                  left join sys_user u on u.id = t.host_id
                  left join sys_user u2 on u2.id = t.recorder_id