Kaynağa Gözat

教育培训任务代码提交

jingyuanchao 2 yıl önce
ebeveyn
işleme
22d9b88c6d

+ 6 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskEditDto.java

@@ -48,8 +48,12 @@ public class CoreEduTrainingTaskEditDto {
     private Date endDate;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @ApiModelProperty(value = "培训时间")
-    private Date dateTime;
+    @ApiModelProperty(value = "培训开始时间")
+    private Date trainingStartDateTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "培训截止时间")
+    private Date trainingEndDateTime;
 
 
     @ApiModelProperty(value = "内容")

+ 10 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskReportDto.java

@@ -4,19 +4,29 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotNull;
 import java.util.Date;
 
 @Data
 public class CoreEduTrainingTaskReportDto {
 
+    @NotNull(message = "请选择计划进行查看!")
     @ApiModelProperty(value = "教育培训计划Id")
     private Long planId;
 
+    @NotNull(message = "请选择机构进行查看!")
     @ApiModelProperty(value = "机构")
     private Long orgId;
 
+    @NotNull(message = "请选择具体月份进行查看!")
     @DateTimeFormat(pattern = "yyyy-MM")
     @ApiModelProperty(value = "统计月份")
     private Date date;
 
+    @ApiModelProperty(value = "统计月份开始日期")
+    private Date startDate;
+
+    @ApiModelProperty(value = "统计月份结束日期")
+    private Date endDate;
+
 }

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingTaskController.java

@@ -16,6 +16,7 @@ import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -105,7 +106,7 @@ public class CoreEduTrainingTaskController extends BaseController {
     @RequiresPermissions("core:eduTask:report")
     @Log(title = "教育任务", businessType = BusinessType.DELETE)
     @DeleteMapping("report")
-    public AjaxResult report(@RequestBody CoreEduTrainingTaskReportDto request) {
+    public AjaxResult report(@RequestBody @Validated CoreEduTrainingTaskReportDto request) {
         return success(coreEduTrainingTaskService.selectCoreEduTrainingTaskReport(request));
     }
 }

+ 4 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingTaskMapper.java

@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTask;
 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.CoreEduTrainingTaskDetailVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskPageVo;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -24,4 +26,6 @@ public interface CoreEduTrainingTaskMapper extends BaseMapper<CoreEduTrainingTas
     Page<CoreEduTrainingTaskPageVo> selectPageData(Page<CoreEduTrainingTaskPageVo> page, @Param("request") CoreEduTrainingTaskPageDto request);
 
     CoreEduTrainingTaskDetailVo selectEduTrainingTaskDetail(@Param("id") Long id);
+
+    List<CoreEduTrainingTaskReportVo> selectReport(@Param("request") CoreEduTrainingTaskReportDto request);
 }

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

@@ -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;
@@ -39,6 +40,9 @@ 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;
 
@@ -252,7 +256,34 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 
     @Override
     public List<CoreEduTrainingTaskReportVo> selectCoreEduTrainingTaskReport(CoreEduTrainingTaskReportDto request) {
-        return null;
+        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());
     }
 }
 

+ 40 - 17
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml

@@ -64,23 +64,24 @@
         limit 1
     </select>
 
-    <select id="selectPageData" resultType="com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskPageVo" parameterType="com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto">
-<!--        <include refid="selectCoreEduTrainingTaskVo"/>-->
-<!--        <where>-->
-<!--            <if test="request.title != null  and request.title != ''">-->
-<!--                and title like concat('%', #{request.title}, '%')-->
-<!--            </if>-->
-<!--            <if test="request.type != null ">-->
-<!--                and type = #{request.type}-->
-<!--            </if>-->
-<!--            <if test="request.status != null ">-->
-<!--                and status = #{request.status}-->
-<!--            </if>-->
-<!--            <if test="request.range != null ">-->
-<!--                and start_date >= #{request.range[0]}-->
-<!--                and end_date <![CDATA[ <= ]]> #{request.range[1]}-->
-<!--            </if>-->
-<!--        </where>-->
+    <select id="selectPageData" resultType="com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskPageVo"
+            parameterType="com.xunmei.common.core.domain.edu.dto.CoreEduTrainingTaskPageDto">
+        <!--        <include refid="selectCoreEduTrainingTaskVo"/>-->
+        <!--        <where>-->
+        <!--            <if test="request.title != null  and request.title != ''">-->
+        <!--                and title like concat('%', #{request.title}, '%')-->
+        <!--            </if>-->
+        <!--            <if test="request.type != null ">-->
+        <!--                and type = #{request.type}-->
+        <!--            </if>-->
+        <!--            <if test="request.status != null ">-->
+        <!--                and status = #{request.status}-->
+        <!--            </if>-->
+        <!--            <if test="request.range != null ">-->
+        <!--                and start_date >= #{request.range[0]}-->
+        <!--                and end_date <![CDATA[ <= ]]> #{request.range[1]}-->
+        <!--            </if>-->
+        <!--        </where>-->
         select t.id, plan_id, t.org_id, t.org_name, title, type, status, host_id,u.name as hostName,
         start_date, end_date, training_start_date_time,training_end_date_time
         from core_edu_training_task t left join sys_user u on t.host_id=u.id
@@ -133,4 +134,26 @@
 
         where t.id = #{id}
     </select>
+
+    <select id="selectReport" resultType="com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo">
+        SELECT t.org_id AS orgId,
+        t.org_name AS orgName,
+        ifnull(count(0),0) AS shouldFinish,
+        ifnull(SUM(t.status != 3),0) AS finish
+        from core_edu_training_task t inner join sys_org o on t.org_id = o.id
+        <where>
+            <if test="request.orgId != null">
+                and o.parent_id=#{request.orgId}
+            </if>
+            <if test="request.planId != null">
+                and t.plan_id=#{request.planId}
+            </if>
+            <if test="request.startDate != null">
+                and t.start_date>=#{request.startDate}
+            </if>
+            <if test="request.endDate != null">
+                and t.start_date <![CDATA[<=]]> #{request.endDate}
+            </if>
+        </where>
+    </select>
 </mapper>