Procházet zdrojové kódy

优化考勤代码

Your Name před 3 roky
rodič
revize
5856898dfa

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/attendanceClasses/AttendanceClassesTaskDetailDto.java

@@ -64,6 +64,8 @@ public class AttendanceClassesTaskDetailDto extends PageDto implements Serializa
 
     private String endTime;
 
+    private String taskDay;
+
 
     public String getCheckTime() {
         return checkTime;
@@ -250,4 +252,12 @@ public class AttendanceClassesTaskDetailDto extends PageDto implements Serializa
     public void setStaffName(String staffName) {
         this.staffName = staffName;
     }
+
+    public String getTaskDay() {
+        return taskDay;
+    }
+
+    public void setTaskDay(String taskDay) {
+        this.taskDay = taskDay;
+    }
 }

+ 20 - 0
java110-bean/src/main/java/com/java110/dto/attendanceClasses/AttendanceClassesTaskDto.java

@@ -1,5 +1,6 @@
 package com.java110.dto.attendanceClasses;
 
+import com.alibaba.fastjson.JSONObject;
 import com.java110.dto.PageDto;
 
 import java.io.Serializable;
@@ -30,6 +31,7 @@ public class AttendanceClassesTaskDto extends PageDto implements Serializable {
     private String taskYear;
     private String taskId;
     private String staffId;
+    private String[] staffIds;
     private String staffName;
     private String classesName;
     private String classObjName;
@@ -48,6 +50,8 @@ public class AttendanceClassesTaskDto extends PageDto implements Serializable {
 
     List<AttendanceClassesTaskDetailDto> attendanceClassesTaskDetails;
 
+    JSONObject days;
+
 
     public String getClassId() {
         return classId;
@@ -217,4 +221,20 @@ public class AttendanceClassesTaskDto extends PageDto implements Serializable {
     public void setFree(String free) {
         this.free = free;
     }
+
+    public JSONObject getDays() {
+        return days;
+    }
+
+    public void setDays(JSONObject days) {
+        this.days = days;
+    }
+
+    public String[] getStaffIds() {
+        return staffIds;
+    }
+
+    public void setStaffIds(String[] staffIds) {
+        this.staffIds = staffIds;
+    }
 }

+ 131 - 25
java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml

@@ -40,44 +40,150 @@
 
     <!-- 查询房屋个数 add by wuxw 2018-07-03 -->
     <select id="getMonthAttendance" parameterType="Map" resultType="Map">
-        select distinct t.class_id classId,t.staff_id staffId,
-        s.name staffName,uo.org_name departmentName,
-        (select count(1) from attendance_classes_task_detail b where t.task_id = b.task_id and b.state = '10000')
-        noClockIn,
-        (select count(1) from attendance_classes_task_detail b where t.task_id = b.task_id and b.state = '30000')
-        clockIn,
-        (select count(1) from attendance_classes_task_detail b where t.task_id = b.task_id and b.state = '40000') late,
-        (select count(1) from attendance_classes_task_detail b where t.task_id = b.task_id and b.state = '50000') early,
-        (select count(1) from attendance_classes_task_detail b where t.task_id = b.task_id and b.state = '60000') free
-        from attendance_classes_task t
-        left join u_user s on t.staff_id = s.user_id and s.status_cd = '0'
-        left join u_org_staff_rel uosr on uosr.staff_id = s.user_id and uosr.status_cd = '0'
-        left join u_org uo on uosr.org_id = uo.org_id and uo.status_cd = '0'
-        where 1 =1
-        and t.status_cd = '0'
+        SELECT
+        t.staff_name staffName,
+        t.staff_id staffId,
+        uo.org_name departmentName,
+        t.classes_id classesId,
+        ac.classes_name classesName,
+        (
+        SELECT
+        count(1)
+        FROM
+        attendance_classes_task_detail b,
+        attendance_classes_task act
+        WHERE
+        ac.classes_id = act.class_id
+        AND act.status_cd = '0'
+        AND act.task_id = b.task_id
+        AND b.state = '10000'
+        <if test="taskYear !=null and taskYear != ''">
+            and act.task_year= #{taskYear}
+        </if>
+        <if test="taskMonth !=null and taskMonth != ''">
+            and act.task_month= #{taskMonth}
+        </if>
+        ) noClockIn,
+        (
+        SELECT
+        count(1)
+        FROM
+        attendance_classes_task_detail b,
+        attendance_classes_task act
+        WHERE
+        ac.classes_id = act.class_id
+        AND act.status_cd = '0'
+        AND act.task_id = b.task_id
+        AND b.state = '30000'
+        <if test="taskYear !=null and taskYear != ''">
+            and act.task_year= #{taskYear}
+        </if>
+        <if test="taskMonth !=null and taskMonth != ''">
+            and act.task_month= #{taskMonth}
+        </if>
+        ) clockIn,
+        (
+        SELECT
+        count(1)
+        FROM
+        attendance_classes_task_detail b,
+        attendance_classes_task act
+        WHERE
+        ac.classes_id = act.class_id
+        AND act.status_cd = '0'
+        AND act.task_id = b.task_id
+        AND b.state = '40000'
+        <if test="taskYear !=null and taskYear != ''">
+            and act.task_year= #{taskYear}
+        </if>
+        <if test="taskMonth !=null and taskMonth != ''">
+            and act.task_month= #{taskMonth}
+        </if>
+        ) late,
+        (
+        SELECT
+        count(1)
+        FROM
+        attendance_classes_task_detail b,
+        attendance_classes_task act
+        WHERE
+        ac.classes_id = act.class_id
+        AND act.status_cd = '0'
+        AND act.task_id = b.task_id
+        AND b.state = '50000'
+        <if test="taskYear !=null and taskYear != ''">
+            and act.task_year= #{taskYear}
+        </if>
+        <if test="taskMonth !=null and taskMonth != ''">
+            and act.task_month= #{taskMonth}
+        </if>
+        ) early,
+        (
+        SELECT
+        count(1)
+        FROM
+        attendance_classes_task_detail b,
+        attendance_classes_task act
+        WHERE
+        ac.classes_id = act.class_id
+        AND act.status_cd = '0'
+        AND act.task_id = b.task_id
+        AND b.state = '60000'
+        <if test="taskYear !=null and taskYear != ''">
+            and act.task_year= #{taskYear}
+        </if>
+        <if test="taskMonth !=null and taskMonth != ''">
+            and act.task_month= #{taskMonth}
+        </if>
+        ) free
+        FROM
+        attendance_classes_staff t
+        INNER JOIN attendance_classes ac ON t.classes_id = ac.classes_id
+        AND ac.status_cd = '0'
+        LEFT JOIN u_user s ON t.staff_id = s.user_id
+        AND s.status_cd = '0'
+        LEFT JOIN u_org_staff_rel uosr ON uosr.staff_id = s.user_id
+        AND uosr.status_cd = '0'
+        LEFT JOIN u_org uo ON uosr.org_id = uo.org_id
+        AND uo.status_cd = '0'
+        WHERE
+        t.status_cd = '0'
         <if test="staffName !=null and staffName != ''">
-            and s.staff_name like concat('%',#{staffName},'%')
+            and t.staff_name like concat('%',#{staffName},'%')
         </if>
         <if test="departmentId !=null and departmentId != ''">
             and uo.org_id = #{departmentId}
         </if>
-        <if test="taskId !=null and taskId != ''">
-            and t.task_id= #{taskId}
-        </if>
         <if test="classId !=null and classId != ''">
-            and t.class_id= #{classId}
+            and t.classes_id= #{classId}
         </if>
         <if test="staffId !=null and staffId != ''">
             and t.staff_id= #{staffId}
         </if>
-        <if test="taskYear !=null and taskYear != ''">
-            and t.task_year= #{taskYear}
-        </if>
-        <if test="taskMonth !=null and taskMonth != ''">
-            and t.task_month= #{taskMonth}
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id = #{storeId}
         </if>
         <if test="page != -1 and page != null ">
             limit #{page}, #{row}
         </if>
     </select>
+
+    <select id="getMonthAttendanceDetail" parameterType="Map" resultType="Map">
+        select t.detail_id detailId,t.spec_cd specCd,t.`value`,t.check_time checkTime,t.state,t.face_path facePath,t.create_time createTime,act.task_day  taskDay
+        from attendance_classes_task_detail t
+        left join attendance_classes_task act on t.task_id = act.task_id and act.status_cd = '0'
+        where
+        t.status_cd = '0'
+        and act.class_id = #{classId}
+        and act.staff_id in
+        <foreach collection="staffIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        <if test="taskYear !=null and taskYear != ''">
+            and act.task_year= #{taskYear}
+        </if>
+        <if test="taskMonth !=null and taskMonth != ''">
+            and act.task_month= #{taskMonth}
+        </if>
+    </select>
 </mapper>

+ 12 - 0
java110-interface/src/main/java/com/java110/intf/report/IReportAttendanceInnerServiceSMO.java

@@ -1,6 +1,7 @@
 package com.java110.intf.report;
 
 import com.java110.config.feign.FeignConfiguration;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
 import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -43,4 +44,15 @@ public interface IReportAttendanceInnerServiceSMO {
     @RequestMapping(value = "/getMonthAttendance", method = RequestMethod.POST)
     List<AttendanceClassesTaskDto> getMonthAttendance(@RequestBody AttendanceClassesTaskDto attendanceClassesTaskDto);
 
+    /**
+     * <p>查询月考勤数量</p>
+     *
+     *
+     * @param attendanceClassesTaskDto 数据对象分享
+     * @return FeeConfigDto 对象数据
+     */
+    @RequestMapping(value = "/getMonthAttendanceDetail", method = RequestMethod.POST)
+    List<AttendanceClassesTaskDetailDto> getMonthAttendanceDetail(@RequestBody AttendanceClassesTaskDto attendanceClassesTaskDto);
+
+
 }

+ 106 - 0
service-common/src/main/java/com/java110/common/cmd/attendanceClasses/GetMonthAttendanceCmd.java

@@ -0,0 +1,106 @@
+package com.java110.common.cmd.attendanceClasses;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
+import com.java110.intf.report.IReportAttendanceInnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 查询月考勤
+ */
+@Java110Cmd(serviceCode = "/attendanceClass/getMonthAttendance")
+public class GetMonthAttendanceCmd extends Cmd {
+
+    @Autowired
+    private IReportAttendanceInnerServiceSMO reportAttendanceInnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        super.validatePageInfo(reqJson);
+        Assert.hasKeyAndValue(reqJson, "classesId", "未包含考勤班次");
+        Assert.hasKeyAndValue(reqJson, "taskYear", "未包含年");
+        Assert.hasKeyAndValue(reqJson, "taskMonth", "未包含月");
+        String storeId = context.getReqHeaders().get("store-id");
+        Assert.hasLength(storeId, "未包含商户信息");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        String storeId = context.getReqHeaders().get("store-id");
+
+        AttendanceClassesTaskDto attendanceClassesTaskDto = BeanConvertUtil.covertBean(reqJson, AttendanceClassesTaskDto.class);
+        attendanceClassesTaskDto.setStoreId(storeId);
+        attendanceClassesTaskDto.setClassId(reqJson.getString("classesId"));
+        int count = reportAttendanceInnerServiceSMOImpl.getMonthAttendanceCount(attendanceClassesTaskDto);
+
+        List<AttendanceClassesTaskDto> attendanceClassesTaskDtos = null;
+        if (count > 0) {
+            attendanceClassesTaskDtos = reportAttendanceInnerServiceSMOImpl.getMonthAttendance(attendanceClassesTaskDto);
+            //输入考勤明细
+            refreshDetail(attendanceClassesTaskDtos, reqJson);
+        } else {
+            attendanceClassesTaskDtos = new ArrayList<>();
+        }
+
+        ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) attendanceClassesTaskDto.getRow()), count, attendanceClassesTaskDtos);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK);
+
+        context.setResponseEntity(responseEntity);
+    }
+
+    private void refreshDetail(List<AttendanceClassesTaskDto> attendanceClassesTaskDtos, JSONObject reqJson) {
+
+        if (attendanceClassesTaskDtos == null || attendanceClassesTaskDtos.size() < 1) {
+            return;
+        }
+
+        List<String> staffIds = new ArrayList<>();
+        for (AttendanceClassesTaskDto attendanceClassesTaskDto : attendanceClassesTaskDtos) {
+            staffIds.add(attendanceClassesTaskDto.getStaffId());
+        }
+
+        AttendanceClassesTaskDto tmpAttendanceClassesTaskDto = new AttendanceClassesTaskDto();
+        tmpAttendanceClassesTaskDto.setClassId(reqJson.getString("classesId"));
+        tmpAttendanceClassesTaskDto.setTaskYear(reqJson.getString("taskYear"));
+        tmpAttendanceClassesTaskDto.setTaskDay(reqJson.getString("taskDay"));
+        tmpAttendanceClassesTaskDto.setStaffIds(staffIds.toArray(new String[staffIds.size()]));
+        List<AttendanceClassesTaskDetailDto> attendanceClassesTaskDetailDtos = reportAttendanceInnerServiceSMOImpl.getMonthAttendanceDetail(tmpAttendanceClassesTaskDto);
+
+        JSONObject days = null;
+        List<AttendanceClassesTaskDetailDto> tAttendanceClassesTaskDetailDto = null;
+        for (AttendanceClassesTaskDto attendanceClassesTaskDto : attendanceClassesTaskDtos) {
+            days = attendanceClassesTaskDto.getDays();
+            if (days == null) {
+                days = new JSONObject();
+                attendanceClassesTaskDto.setDays(days);
+            }
+            for (AttendanceClassesTaskDetailDto tmpAttendanceClassesTaskDetailDto : attendanceClassesTaskDetailDtos) {
+                if (days.containsKey(tmpAttendanceClassesTaskDetailDto.getTaskDay())) {
+                    tAttendanceClassesTaskDetailDto = (List<AttendanceClassesTaskDetailDto>) days.get(tmpAttendanceClassesTaskDetailDto.getTaskDay());
+                    tAttendanceClassesTaskDetailDto.add(tmpAttendanceClassesTaskDetailDto);
+                } else {
+                    tAttendanceClassesTaskDetailDto = new ArrayList<>();
+                    tAttendanceClassesTaskDetailDto.add(tmpAttendanceClassesTaskDetailDto);
+                    days.put(tmpAttendanceClassesTaskDetailDto.getTaskDay(), tAttendanceClassesTaskDetailDto);
+                }
+            }
+        }
+
+    }
+}

+ 7 - 0
service-report/src/main/java/com/java110/report/dao/IReportAttendanceServiceDao.java

@@ -19,4 +19,11 @@ public interface IReportAttendanceServiceDao {
 
 
      List<Map> getMonthAttendance(Map info);
+
+     /**
+      * 考勤明细
+      * @param info
+      * @return
+      */
+     List<Map> getMonthAttendanceDetail(Map info);
 }

+ 9 - 0
service-report/src/main/java/com/java110/report/dao/impl/ReportAttendanceServiceDaoImpl.java

@@ -47,4 +47,13 @@ public class ReportAttendanceServiceDaoImpl extends BaseServiceDao implements IR
         return roomDtos;
     }
 
+    @Override
+    public List<Map> getMonthAttendanceDetail(Map info) {
+        logger.debug("查询费用信息 入参 info : {}", JSONObject.toJSONString(info));
+
+        List<Map> roomDtos = sqlSessionTemplate.selectList("reportAttendanceServiceDaoImpl.getMonthAttendanceDetail", info);
+
+        return roomDtos;
+    }
+
 }

+ 6 - 0
service-report/src/main/java/com/java110/report/smo/impl/ReportAttendanceInnerServiceSMOImpl.java

@@ -2,6 +2,7 @@ package com.java110.report.smo.impl;
 
 
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
 import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
 import com.java110.intf.report.IReportAttendanceInnerServiceSMO;
 import com.java110.report.dao.IReportAttendanceServiceDao;
@@ -36,4 +37,9 @@ public class ReportAttendanceInnerServiceSMOImpl extends BaseServiceSMO implemen
     public List<AttendanceClassesTaskDto> getMonthAttendance(@RequestBody AttendanceClassesTaskDto attendanceClassesTaskDto) {
         return BeanConvertUtil.covertBeanList(reportAttendanceServiceDaoImpl.getMonthAttendance(BeanConvertUtil.beanCovertMap(attendanceClassesTaskDto)),AttendanceClassesTaskDto.class);
     }
+
+    @Override
+    public List<AttendanceClassesTaskDetailDto> getMonthAttendanceDetail(@RequestBody AttendanceClassesTaskDto attendanceClassesTaskDto) {
+        return BeanConvertUtil.covertBeanList(reportAttendanceServiceDaoImpl.getMonthAttendanceDetail(BeanConvertUtil.beanCovertMap(attendanceClassesTaskDto)),AttendanceClassesTaskDetailDto.class);
+    }
 }