Browse Source

Merge branch 'master' of http://git.homecommunity.cn/supervip/MicroCommunity

java110 3 years ago
parent
commit
11c8f88cc8
24 changed files with 657 additions and 100 deletions
  1. 11 0
      java110-bean/src/main/java/com/java110/dto/attendanceClasses/AttendanceClassesDto.java
  2. 10 0
      java110-bean/src/main/java/com/java110/dto/attendanceClasses/AttendanceClassesTaskDetailDto.java
  3. 20 0
      java110-bean/src/main/java/com/java110/dto/attendanceClasses/AttendanceClassesTaskDto.java
  4. 20 0
      java110-bean/src/main/java/com/java110/dto/report/ReportCarDto.java
  5. 10 0
      java110-bean/src/main/java/com/java110/po/attendanceClasses/AttendanceClassesPo.java
  6. 12 3
      java110-db/src/main/resources/mapper/common/AttendanceClassesServiceDaoImplMapper.xml
  7. 1 1
      java110-db/src/main/resources/mapper/common/AttendanceClassesTaskDetailServiceDaoImplMapper.xml
  8. 1 1
      java110-db/src/main/resources/mapper/common/AttendanceClassesTaskServiceDaoImplMapper.xml
  9. 17 7
      java110-db/src/main/resources/mapper/common/AttendanceClassesV1ServiceDaoImplMapper.xml
  10. 134 25
      java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml
  11. 12 0
      java110-db/src/main/resources/mapper/report/ReportCommunityServiceDaoImplMapper.xml
  12. 12 0
      java110-interface/src/main/java/com/java110/intf/report/IReportAttendanceInnerServiceSMO.java
  13. 8 5
      java110-interface/src/main/resources/logback.xml
  14. 0 36
      service-common/src/main/java/com/java110/common/api/AttendanceClassApi.java
  15. 4 2
      service-common/src/main/java/com/java110/common/cmd/attendanceClasses/AttendanceReplenishCheckInCmd.java
  16. 24 1
      service-common/src/main/java/com/java110/common/cmd/attendanceClasses/CheckInCmd.java
  17. 106 0
      service-common/src/main/java/com/java110/common/cmd/attendanceClasses/GetMonthAttendanceCmd.java
  18. 192 0
      service-job/src/main/java/com/java110/job/export/adapt/MonthAttendanceAdapt.java
  19. 16 6
      service-job/src/main/java/com/java110/job/task/attendance/GeneratorAttendanceTaskTemplate.java
  20. 7 0
      service-report/src/main/java/com/java110/report/dao/IReportAttendanceServiceDao.java
  21. 9 0
      service-report/src/main/java/com/java110/report/dao/impl/ReportAttendanceServiceDaoImpl.java
  22. 11 6
      service-report/src/main/java/com/java110/report/smo/impl/GeneratorFeeMonthStatisticsInnerServiceSMOImpl.java
  23. 13 0
      service-report/src/main/java/com/java110/report/smo/impl/ReportAttendanceInnerServiceSMOImpl.java
  24. 7 7
      service-store/src/main/java/com/java110/store/smo/impl/SmallWechatAttrInnerServiceSMOImpl.java

+ 11 - 0
java110-bean/src/main/java/com/java110/dto/attendanceClasses/AttendanceClassesDto.java

@@ -30,6 +30,9 @@ public class AttendanceClassesDto extends PageDto implements Serializable {
     private String classesId;
     private String leaveOffset;
     private String lateOffset;
+
+    private String maxLastOffset;
+
     private String clockTypeValue;
     private String classesObjName;
     private List<AttendanceClassesAttrDto> attrs;
@@ -173,4 +176,12 @@ public class AttendanceClassesDto extends PageDto implements Serializable {
     public void setClassesObjIds(String[] classesObjIds) {
         this.classesObjIds = classesObjIds;
     }
+
+    public String getMaxLastOffset() {
+        return maxLastOffset;
+    }
+
+    public void setMaxLastOffset(String maxLastOffset) {
+        this.maxLastOffset = maxLastOffset;
+    }
 }

+ 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;
+    }
 }

+ 20 - 0
java110-bean/src/main/java/com/java110/dto/report/ReportCarDto.java

@@ -37,6 +37,10 @@ public class ReportCarDto extends PageDto implements Serializable {
 
     private Date endTime;
 
+    private String leaseType;
+
+    private String[] leaseTypes;
+
 
     public String getCarId() {
         return carId;
@@ -189,4 +193,20 @@ public class ReportCarDto extends PageDto implements Serializable {
     public void setEndTime(Date endTime) {
         this.endTime = endTime;
     }
+
+    public String getLeaseType() {
+        return leaseType;
+    }
+
+    public void setLeaseType(String leaseType) {
+        this.leaseType = leaseType;
+    }
+
+    public String[] getLeaseTypes() {
+        return leaseTypes;
+    }
+
+    public void setLeaseTypes(String[] leaseTypes) {
+        this.leaseTypes = leaseTypes;
+    }
 }

+ 10 - 0
java110-bean/src/main/java/com/java110/po/attendanceClasses/AttendanceClassesPo.java

@@ -17,6 +17,8 @@ public class AttendanceClassesPo implements Serializable {
     private String clockTypeValue;
     private String classesObjName;
 
+    private String maxLastOffset;
+
     private String statusCd = "0";
 
     public String getTimeOffset() {
@@ -122,4 +124,12 @@ public class AttendanceClassesPo implements Serializable {
     public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
+
+    public String getMaxLastOffset() {
+        return maxLastOffset;
+    }
+
+    public void setMaxLastOffset(String maxLastOffset) {
+        this.maxLastOffset = maxLastOffset;
+    }
 }

+ 12 - 3
java110-db/src/main/resources/mapper/common/AttendanceClassesServiceDaoImplMapper.xml

@@ -7,10 +7,10 @@
     <insert id="saveBusinessAttendanceClassesInfo" parameterType="Map">
         insert into business_attendance_classes(time_offset, clock_count, classes_obj_type, store_id, clock_type,
                                                 classes_obj_id, classes_name, classes_id, operate,
-                                                leave_offset, late_offset, b_id, clock_type_value)
+                                                leave_offset, late_offset, b_id, clock_type_value,max_last_offset)
         values (#{timeOffset}, #{clockCount}, #{classesObjType}, #{storeId}, #{clockType}},
                 #{classesName}, #{classesId}, #{operate},
-                #{leaveOffset}, #{lateOffset}, #{bId}, #{clockTypeValue})
+                #{leaveOffset}, #{lateOffset}, #{bId}, #{clockTypeValue},#{maxLastOffset})
     </insert>
 
     <!-- 查询考勤班次信息(Business) add by wuxw 2018-07-03 -->
@@ -119,7 +119,7 @@
         clockCount,t.store_id,t.store_id
         storeId,t.clock_type,t.clock_type clockType,t.classes_name,t.classes_name classesName,t.classes_id,t.classes_id
         classesId,t.leave_offset,t.leave_offset leaveOffset,t.late_offset,t.late_offset lateOffset,t.b_id,t.b_id
-        bId,t.clock_type_value,t.clock_type_value clockTypeValue,
+        bId,t.clock_type_value,t.clock_type_value clockTypeValue,t.max_last_offset maxLastOffset,
         td.name clockTypeName
         from attendance_classes t
         left join t_dict td on t.clock_type = td.status_cd and td.table_name = 'attendance_classes'
@@ -154,6 +154,9 @@
         <if test="lateOffset !=null and lateOffset != ''">
             and t.late_offset= #{lateOffset}
         </if>
+        <if test="maxLastOffset !=null and maxLastOffset != ''">
+            and t.max_last_offset= #{maxLastOffset}
+        </if>
         <if test="bId !=null and bId != ''">
             and t.b_id= #{bId}
         </if>
@@ -195,6 +198,9 @@
         <if test="lateOffset !=null and lateOffset != ''">
             , t.late_offset= #{lateOffset}
         </if>
+        <if test="maxLastOffset !=null and maxLastOffset != ''">
+            , t.max_last_offset= #{maxLastOffset}
+        </if>
         <if test="clockTypeValue !=null and clockTypeValue != ''">
             , t.clock_type_value= #{clockTypeValue}
         </if>
@@ -241,6 +247,9 @@
         <if test="lateOffset !=null and lateOffset != ''">
             and t.late_offset= #{lateOffset}
         </if>
+        <if test="maxLastOffset !=null and maxLastOffset != ''">
+            and t.max_last_offset= #{maxLastOffset}
+        </if>
         <if test="bId !=null and bId != ''">
             and t.b_id= #{bId}
         </if>

+ 1 - 1
java110-db/src/main/resources/mapper/common/AttendanceClassesTaskDetailServiceDaoImplMapper.xml

@@ -71,7 +71,7 @@
                 #{item}
             </foreach>
         </if>
-        order by t.create_time desc
+        order by t.value
         <if test="page != -1 and page != null ">
             limit #{page}, #{row}
         </if>

+ 1 - 1
java110-db/src/main/resources/mapper/common/AttendanceClassesTaskServiceDaoImplMapper.xml

@@ -19,7 +19,7 @@
     <select id="getAttendanceClassesTaskInfo" parameterType="Map" resultType="Map">
         select t.class_id,t.class_id classId,t.task_month,t.task_month taskMonth,t.task_day,t.task_day
         taskDay,t.status_cd,t.status_cd statusCd,t.state,t.store_id,t.store_id storeId,t.task_year,t.task_year
-        taskYear,t.task_id,t.task_id taskId,t.staff_id,t.staff_id staffId,t.staff_name,t.staff_name staffName,ac.classes_name classesName,ac.classes_obj_name classObjName,
+        taskYear,t.task_id,t.task_id taskId,t.staff_id,t.staff_id staffId,t.staff_name,t.staff_name staffName,ac.classes_name classesName,
         td.name stateName
         from attendance_classes_task t
         LEFT JOIN attendance_classes ac on t.class_id = ac.classes_id and ac.status_cd = '0'

+ 17 - 7
java110-db/src/main/resources/mapper/common/AttendanceClassesV1ServiceDaoImplMapper.xml

@@ -8,9 +8,9 @@
     <!-- 保存申请钥匙信息 add by wuxw 2018-07-03 -->
     <insert id="saveAttendanceClassesInfo" parameterType="Map">
         insert into attendance_classes(
-        time_offset,clock_count,store_id,clock_type,classes_name,classes_id,leave_offset,late_offset,clock_type_value
+        time_offset,clock_count,store_id,clock_type,classes_name,classes_id,leave_offset,late_offset,clock_type_value,max_last_offset
         ) values (
-        #{timeOffset},#{clockCount},#{storeId},#{clockType},#{classesName},#{classesId},#{leaveOffset},#{lateOffset},#{clockTypeValue}
+        #{timeOffset},#{clockCount},#{storeId},#{clockType},#{classesName},#{classesId},#{leaveOffset},#{lateOffset},#{clockTypeValue},#{maxLastOffset}
         )
     </insert>
 
@@ -21,7 +21,8 @@
         timeOffset,t.clock_count,t.clock_count clockCount,t.status_cd,t.status_cd statusCd,t.store_id,t.store_id storeId,t.clock_type,t.clock_type
         clockType,t.classes_name,t.classes_name
         classesName,t.classes_id,t.classes_id classesId,t.leave_offset,t.leave_offset
-        leaveOffset,t.late_offset,t.late_offset lateOffset,t.clock_type_value,t.clock_type_value clockTypeValue
+        leaveOffset,t.late_offset,t.late_offset lateOffset,t.clock_type_value,t.clock_type_value clockTypeValue,
+        t.max_last_offset maxLastOffset
         from attendance_classes t
         where 1 =1
 
@@ -31,7 +32,9 @@
         <if test="clockCount !=null and clockCount != ''">
             and t.clock_count= #{clockCount}
         </if>
-
+        <if test="maxLastOffset !=null and maxLastOffset != ''">
+            and t.max_last_offset= #{maxLastOffset}
+        </if>
         <if test="statusCd !=null and statusCd != ''">
             and t.status_cd= #{statusCd}
         </if>
@@ -79,9 +82,7 @@
             , t.clock_count= #{clockCount}
         </if>
 
-        <if test="storeId !=null and storeId != ''">
-            , t.store_id= #{storeId}
-        </if>
+
         <if test="clockType !=null and clockType != ''">
             , t.clock_type= #{clockType}
         </if>
@@ -95,6 +96,9 @@
         <if test="lateOffset !=null and lateOffset != ''">
             , t.late_offset= #{lateOffset}
         </if>
+        <if test="maxLastOffset !=null and maxLastOffset != ''">
+            , t.max_last_offset= #{maxLastOffset}
+        </if>
         <if test="clockTypeValue !=null and clockTypeValue != ''">
             , t.clock_type_value= #{clockTypeValue}
         </if>
@@ -102,6 +106,9 @@
         <if test="classesId !=null and classesId != ''">
             and t.classes_id= #{classesId}
         </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
 
     </update>
 
@@ -137,6 +144,9 @@
         <if test="leaveOffset !=null and leaveOffset != ''">
             and t.leave_offset= #{leaveOffset}
         </if>
+        <if test="maxLastOffset !=null and maxLastOffset != ''">
+            and t.max_last_offset= #{maxLastOffset}
+        </if>
         <if test="lateOffset !=null and lateOffset != ''">
             and t.late_offset= #{lateOffset}
         </if>

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

@@ -40,44 +40,153 @@
 
     <!-- 查询房屋个数 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'
+        and b.value &lt; now()
+        <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 in ('30000','70000')
+        <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,td.`name` stateName
+        from attendance_classes_task_detail t
+        left join attendance_classes_task act on t.task_id = act.task_id and act.status_cd = '0'
+        left join t_dict td on t.state = td.status_cd and td.table_name = 'attendance_classes_task_detail' and td.table_columns = 'state'
+        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>
+        order by t.`value`
+    </select>
 </mapper>

+ 12 - 0
java110-db/src/main/resources/mapper/report/ReportCommunityServiceDaoImplMapper.xml

@@ -96,6 +96,12 @@
         <if test="state !=null and state != ''">
             and t.state= #{state}
         </if>
+        <if test="leaseTypes !=null ">
+            and t.lease_type in
+            <foreach collection="leaseTypes" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="communityId !=null and communityId != ''">
             and t.community_id= #{communityId}
         </if>
@@ -116,6 +122,12 @@
         <if test="state !=null and state != ''">
             and t.state= #{state}
         </if>
+        <if test="leaseTypes !=null ">
+            and t.lease_type in
+            <foreach collection="leaseTypes" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="communityId !=null and communityId != ''">
             and t.community_id= #{communityId}
         </if>

+ 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);
+
+
 }

+ 8 - 5
java110-interface/src/main/resources/logback.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="60 seconds">
 
-    <!--    <include resource="org/springframework/boot/logging/logback/base.xml"/>-->
+    <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
 
     <!-- 控制台输出 -->
     <appender name="STDOUT_FILE" class="ch.qos.logback.core.ConsoleAppender">
@@ -64,19 +64,22 @@
     <logger name="org.springframework" level="ERROR">
         <appender-ref ref="STDOUT_FILE"/>
     </logger>
+    <logger name="com.java110.order" level="ERROR">
+        <appender-ref ref="STDOUT_FILE"/>
+    </logger>
 
     <!--myibatis log configure-->
-    <logger name="com.apache.ibatis" level="ERROR">
+    <logger name="com.apache.ibatis" level="DEBUG">
         <appender-ref ref="STDOUT_FILE"/>
     </logger>
 
-    <logger name="org.mybatis" level="ERROR">
+    <logger name="org.mybatis" level="DEBUG">
         <appender-ref ref="STDOUT_FILE"/>
     </logger>
-    <logger name="druid.sql.Statement" level="ERROR">
+    <logger name="druid.sql.Statement" level="DEBUG">
         <appender-ref ref="STDOUT_FILE"/>
     </logger>
-    <logger name="druid.sql.ResultSet" level="ERROR">
+    <logger name="druid.sql.ResultSet" level="DEBUG">
         <appender-ref ref="STDOUT_FILE"/>
     </logger>
 

+ 0 - 36
service-common/src/main/java/com/java110/common/api/AttendanceClassApi.java

@@ -269,43 +269,7 @@ public class AttendanceClassApi {
         return getAttendanceClassesTaskDetailBMOImpl.get(attendanceClassesTaskDetailDto);
     }
 
-    /**
-     * 添加设备接口类
-     *
-     * @return 成功或者失败
-     * @throws Exception
-     * @serviceCode /attendanceClass/getMonthAttendance
-     * @path /app/attendanceClass/getMonthAttendance
-     */
-    @RequestMapping(path = "/getMonthAttendance", method = RequestMethod.GET)
-    public ResponseEntity<String> getMonthAttendance(
-            @RequestHeader(value = "store-id") String storeId,
-            @RequestParam int page,
-            @RequestParam int row,
-            @RequestParam(name = "classesId", required = false) String classesId,
-            @RequestParam(name = "staffName", required = false) String staffName,
-            @RequestParam(name = "staffId", required = false) String staffId,
-            @RequestParam(name = "date", required = false) String date,
-            @RequestParam(name = "departmentId", required = false) String departmentId
-    ) throws Exception {
 
-        AttendanceClassesTaskDto attendanceClassesTaskDto = new AttendanceClassesTaskDto();
-        attendanceClassesTaskDto.setPage(page);
-        attendanceClassesTaskDto.setRow(row);
-        attendanceClassesTaskDto.setClassId(classesId);
-        attendanceClassesTaskDto.setStaffName(staffName);
-        attendanceClassesTaskDto.setStaffId(staffId);
-        attendanceClassesTaskDto.setStoreId(storeId);
-
-        if (!StringUtil.isEmpty(date)) {
-            Date reqDate = DateUtil.getDateFromString(date, DateUtil.DATE_FORMATE_STRING_B);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(reqDate);
-            attendanceClassesTaskDto.setTaskYear(calendar.get(Calendar.YEAR) + "");
-            attendanceClassesTaskDto.setTaskMonth((calendar.get(Calendar.MONTH) + 1) + "");
-        }
-        return getAttendanceClassesTaskDetailBMOImpl.getMonthAttendance(attendanceClassesTaskDto);
-    }
 
 
     /**

+ 4 - 2
service-common/src/main/java/com/java110/common/cmd/attendanceClasses/AttendanceReplenishCheckInCmd.java

@@ -30,6 +30,7 @@ import com.java110.po.attendanceClassesTask.AttendanceClassesTaskPo;
 import com.java110.po.attendanceClassesTaskDetail.AttendanceClassesTaskDetailPo;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
 import com.java110.vo.ResultVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -86,6 +87,7 @@ public class AttendanceReplenishCheckInCmd extends Cmd {
         attendanceClassesTaskDetailPo.setDetailId(attendanceClassesTaskDetailDtos.get(0).getDetailId());
         attendanceClassesTaskDetailPo.setState(AttendanceClassesTaskDetailDto.STATE_REPLENISH);
         attendanceClassesTaskDetailPo.setRemark(reqJson.getString("remark"));
+        attendanceClassesTaskDetailPo.setCheckTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
         int flag = attendanceClassesTaskDetailInnerServiceSMOImpl.updateAttendanceClassesTaskDetail(attendanceClassesTaskDetailPo);
 
         if (flag < 1) {
@@ -100,9 +102,9 @@ public class AttendanceReplenishCheckInCmd extends Cmd {
         int count = attendanceClassesTaskDetailInnerServiceSMOImpl.queryAttendanceClassesTaskDetailsCount(attendanceClassesTaskDetailDto);
         AttendanceClassesTaskPo attendanceClassesTaskPo = new AttendanceClassesTaskPo();
         attendanceClassesTaskPo.setTaskId(attendanceClassesTaskDetailDtos.get(0).getTaskId());
-        if(count >0){
+        if (count > 0) {
             attendanceClassesTaskPo.setState(AttendanceClassesTaskDto.STATE_DOING);
-        }else{
+        } else {
             attendanceClassesTaskPo.setState(AttendanceClassesTaskDto.STATE_FINISH);
         }
 

+ 24 - 1
service-common/src/main/java/com/java110/common/cmd/attendanceClasses/CheckInCmd.java

@@ -182,10 +182,21 @@ public class CheckInCmd extends Cmd {
         attendanceClassesTaskDetailDto.setNowCheckTime(reqJson.getString("checkTime"));
         attendanceClassesTaskDetailDto.setClassId(attendanceClassesDto.getClassesId());
         attendanceClassesTaskDetailDto.setStaffId(reqJson.getString("staffId"));
+        attendanceClassesTaskDetailDto.setState(AttendanceClassesTaskDetailDto.STATE_WAIT);
         List<AttendanceClassesTaskDetailDto> attendanceClassesTaskDetailDtos = attendanceClassesTaskDetailInnerServiceSMOImpl.queryAttendanceClassesTaskDetails(attendanceClassesTaskDetailDto);
 
         if (attendanceClassesTaskDetailDtos == null || attendanceClassesTaskDetailDtos.size() < 1) {
-            context.setResponseEntity(ResultVo.error("不是考勤范围内"));
+            attendanceClassesTaskDetailDto = new AttendanceClassesTaskDetailDto();
+            attendanceClassesTaskDetailDto.setNowCheckTime(reqJson.getString("checkTime"));
+            attendanceClassesTaskDetailDto.setClassId(attendanceClassesDto.getClassesId());
+            attendanceClassesTaskDetailDto.setStaffId(reqJson.getString("staffId"));
+            attendanceClassesTaskDetailDtos = attendanceClassesTaskDetailInnerServiceSMOImpl.queryAttendanceClassesTaskDetails(attendanceClassesTaskDetailDto);
+
+            if (attendanceClassesTaskDetailDtos != null || attendanceClassesTaskDetailDtos.size() > 0) {
+                context.setResponseEntity(ResultVo.error("重复打卡"));
+                return;
+            }
+            context.setResponseEntity(ResultVo.error("未到时间"));
             return;
         }
 
@@ -222,6 +233,18 @@ public class CheckInCmd extends Cmd {
         if (flag < 1) {
             throw new CmdException("考勤失败");
         }
+
+        String msg = "打卡成功";
+        if (AttendanceClassesTaskDetailDto.STATE_LATE.equals(attendanceClassesTaskDetailPo.getState())) {
+            msg = "打开迟到";
+        }
+
+        if (AttendanceClassesTaskDetailDto.STATE_LEAVE.equals(attendanceClassesTaskDetailPo.getState())) {
+            msg = "打开早退";
+        }
+
+        context.setResponseEntity(ResultVo.createResponseEntity(ResultVo.CODE_OK, msg));
+
     }
 
     /**

+ 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);
+                }
+            }
+        }
+
+    }
+}

+ 192 - 0
service-job/src/main/java/com/java110/job/export/adapt/MonthAttendanceAdapt.java

@@ -0,0 +1,192 @@
+package com.java110.job.export.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
+import com.java110.dto.data.ExportDataDto;
+import com.java110.dto.reportFeeMonthStatistics.ReportFeeMonthStatisticsDto;
+import com.java110.intf.report.IReportAttendanceInnerServiceSMO;
+import com.java110.job.export.IExportDataAdapt;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+@Service("monthAttendance")
+public class MonthAttendanceAdapt implements IExportDataAdapt {
+    private static final int MAX_ROW = 50;
+
+    @Autowired
+    private IReportAttendanceInnerServiceSMO reportAttendanceInnerServiceSMOImpl;
+
+    @Override
+    public SXSSFWorkbook exportData(ExportDataDto exportDataDto) {
+        JSONObject reqJson = exportDataDto.getReqJson();
+        SXSSFWorkbook workbook = null;  //工作簿
+        String userId = "";
+        //工作表
+        workbook = new SXSSFWorkbook();
+        workbook.setCompressTempFiles(false);
+
+        Sheet sheet = workbook.createSheet(reqJson.getIntValue("taskYear") + "年" + reqJson.getIntValue("taskMonth") + "月考勤表");
+        Row row = sheet.createRow(0);
+        row.createCell(0).setCellValue("部门");
+        row.createCell(1).setCellValue("员工");
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.YEAR, reqJson.getIntValue("taskYear"));
+        calendar.set(Calendar.MONTH, reqJson.getIntValue("taskMonth") - 1);
+        int maxDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        for (int day = 1; day <= maxDayOfMonth; day++) {
+            row.createCell(day + 1).setCellValue(day + "日");
+        }
+
+        row.createCell(1 + maxDayOfMonth + 1).setCellValue("正常考勤");
+        row.createCell(1 + maxDayOfMonth + 2).setCellValue("迟到");
+        row.createCell(1 + maxDayOfMonth + 3).setCellValue("早退");
+        row.createCell(1 + maxDayOfMonth + 4).setCellValue("旷工");
+        row.createCell(1 + maxDayOfMonth + 5).setCellValue("免考勤");
+
+
+        AttendanceClassesTaskDto attendanceClassesTaskDto = BeanConvertUtil.covertBean(reqJson, AttendanceClassesTaskDto.class);
+        attendanceClassesTaskDto.setStoreId(reqJson.getString("storeId"));
+        attendanceClassesTaskDto.setClassId(reqJson.getString("classesId"));
+        //查询数据
+        getAttendanceClassesTask(sheet, attendanceClassesTaskDto, reqJson, maxDayOfMonth);
+
+        return workbook;
+
+    }
+
+    private void getAttendanceClassesTask(Sheet sheet, AttendanceClassesTaskDto attendanceClassesTaskDto, JSONObject reqJson, int maxDayOfMonth) {
+
+        int count = reportAttendanceInnerServiceSMOImpl.getMonthAttendanceCount(attendanceClassesTaskDto);
+        count = (int) Math.ceil((double) count / (double) MAX_ROW);
+        if (count < 1) {
+            return;
+        }
+
+        for (int page = 1; page <= count; page++) {
+            attendanceClassesTaskDto.setPage(page);
+            attendanceClassesTaskDto.setRow(MAX_ROW);
+            List<AttendanceClassesTaskDto> attendanceClassesTaskDtos = reportAttendanceInnerServiceSMOImpl.getMonthAttendance(attendanceClassesTaskDto);
+            //输入考勤明细
+            refreshDetail(attendanceClassesTaskDtos, reqJson);
+            appendData(attendanceClassesTaskDtos, sheet, (page - 1) * MAX_ROW, maxDayOfMonth, reqJson);
+        }
+    }
+
+    private void appendData(List<AttendanceClassesTaskDto> attendanceClassesTaskDtos, Sheet sheet, int step, int maxDayOfMonth, JSONObject reqJson) {
+
+        Row row = null;
+        JSONObject dayObj = null;
+        AttendanceClassesTaskDto attendanceClassesTaskDto = null;
+        List<AttendanceClassesTaskDetailDto> detailDtos = null;
+        String value = "";
+
+        Calendar calendar = Calendar.getInstance();
+        int today = calendar.get(Calendar.DAY_OF_MONTH);
+        int taskYear = reqJson.getIntValue("taskYear");
+        int taskMonth = reqJson.getIntValue("taskMonth");
+        for (int roomIndex = 0; roomIndex < attendanceClassesTaskDtos.size(); roomIndex++) {
+            row = sheet.createRow(roomIndex + step + 1);
+            attendanceClassesTaskDto = attendanceClassesTaskDtos.get(roomIndex);
+            row.createCell(0).setCellValue(attendanceClassesTaskDto.getDepartmentName());
+            row.createCell(1).setCellValue(attendanceClassesTaskDto.getStaffName());
+            dayObj = attendanceClassesTaskDto.getDays();
+            for (int day = 1; day <= maxDayOfMonth; day++) {
+
+                if(taskYear == calendar.get(Calendar.YEAR) && taskMonth == (calendar.get(Calendar.MONTH)+1) && day > today){
+                    row.createCell(day + 1).setCellValue("未到时间");
+                    continue;
+                }
+
+                if (!dayObj.containsKey(day)) {
+                    row.createCell(day + 1).setCellValue("无需考勤");
+                    continue;
+                }
+                if (dayObj.get(day) == null) {
+                    row.createCell(day + 1).setCellValue("无需考勤");
+                    continue;
+                }
+                detailDtos = (List<AttendanceClassesTaskDetailDto>) dayObj.get(day);
+                if (detailDtos == null || detailDtos.size() < 1) {
+                    row.createCell(day + 1).setCellValue("无需考勤");
+                    continue;
+                }
+
+                value = "";
+                for (AttendanceClassesTaskDetailDto detailDto : detailDtos) {
+                    if (AttendanceClassesTaskDetailDto.SPEC_CD_START.equals(detailDto.getSpecCd())) {
+                        value += "上班:";
+                    } else {
+                        value += "下班:";
+                    }
+
+                    if (!AttendanceClassesTaskDetailDto.STATE_WAIT.equals(detailDto.getState())) {
+                        value += (detailDto.getCheckTime() + "(" + detailDto.getStateName() + ");" + String.valueOf((char) 10));
+                    } else {
+                        value += (" - (" + detailDto.getStateName() + ");" + String.valueOf((char) 10));
+                    }
+                }
+                row.createCell(day + 1).setCellValue(value);
+            }
+
+            row.createCell(1 + maxDayOfMonth + 1).setCellValue(attendanceClassesTaskDto.getClockIn());
+            row.createCell(1 + maxDayOfMonth + 2).setCellValue(attendanceClassesTaskDto.getLate());
+            row.createCell(1 + maxDayOfMonth + 3).setCellValue(attendanceClassesTaskDto.getEarly());
+            row.createCell(1 + maxDayOfMonth + 4).setCellValue(attendanceClassesTaskDto.getNoClockIn());
+            row.createCell(1 + maxDayOfMonth + 5).setCellValue(attendanceClassesTaskDto.getFree());
+        }
+    }
+
+    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);
+                }
+            }
+        }
+
+    }
+
+}

+ 16 - 6
service-job/src/main/java/com/java110/job/task/attendance/GeneratorAttendanceTaskTemplate.java

@@ -175,7 +175,7 @@ public class GeneratorAttendanceTaskTemplate extends TaskSystemQuartz {
         UserDto userDto = new UserDto();
         userDto.setUserId(tmpAttendanceClassesStaffDto.getStaffId());
         List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
-        Assert.listOnlyOne(userDtos,"员工不存在");
+        Assert.listOnlyOne(userDtos, "员工不存在");
 
 
         AttendanceClassesTaskPo attendanceClassesTaskPo = new AttendanceClassesTaskPo();
@@ -194,9 +194,14 @@ public class GeneratorAttendanceTaskTemplate extends TaskSystemQuartz {
         if (flag < 1) {
             throw new IllegalArgumentException("保存考勤任务失败");
         }
-
-        for (ScheduleClassesTimeDto tmpScheduleClassesTimeDto : times) {
-            doGeneratorStaffAttendanceTime(tmpStoreDto, tmpAttendanceClassesDto, tmpAttendanceClassesStaffDto, tmpScheduleClassesTimeDto, attendanceClassesTaskPo);
+        ScheduleClassesTimeDto tmpScheduleClassesTimeDto = null;
+        boolean isLast = false;
+        for (int timeIndex = 0; timeIndex < times.size(); timeIndex++) {
+            tmpScheduleClassesTimeDto = times.get(timeIndex);
+            if (timeIndex == (times.size() - 1)) {
+                isLast = true;
+            }
+            doGeneratorStaffAttendanceTime(tmpStoreDto, tmpAttendanceClassesDto, tmpAttendanceClassesStaffDto, tmpScheduleClassesTimeDto, attendanceClassesTaskPo, isLast);
         }
 
     }
@@ -210,7 +215,7 @@ public class GeneratorAttendanceTaskTemplate extends TaskSystemQuartz {
      * @param tmpScheduleClassesTimeDto
      */
     private void doGeneratorStaffAttendanceTime(StoreDto tmpStoreDto, AttendanceClassesDto tmpAttendanceClassesDto, AttendanceClassesStaffDto tmpAttendanceClassesStaffDto,
-                                                ScheduleClassesTimeDto tmpScheduleClassesTimeDto, AttendanceClassesTaskPo attendanceClassesTaskPo) {
+                                                ScheduleClassesTimeDto tmpScheduleClassesTimeDto, AttendanceClassesTaskPo attendanceClassesTaskPo, boolean islast) {
 
         String curDate = DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B);
 
@@ -227,6 +232,7 @@ public class GeneratorAttendanceTaskTemplate extends TaskSystemQuartz {
         Date valueDate = DateUtil.getDateFromStringA(value);
 
         int timeOffset = Integer.parseInt(tmpAttendanceClassesDto.getTimeOffset());
+        int maxLastOffset = Integer.parseInt(tmpAttendanceClassesDto.getMaxLastOffset());
 
         AttendanceClassesTaskDetailPo attendanceClassesTaskDetailPo = new AttendanceClassesTaskDetailPo();
         attendanceClassesTaskDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId("12"));
@@ -269,7 +275,11 @@ public class GeneratorAttendanceTaskTemplate extends TaskSystemQuartz {
         attendanceClassesTaskDetailPo.setLeaveValue(DateUtil.getFormatTimeString(calendar.getTime(), DateUtil.DATE_FORMATE_STRING_A));
         calendar = Calendar.getInstance();
         calendar.setTime(valueDate);
-        calendar.add(Calendar.MINUTE, timeOffset);
+        if (!islast) {
+            calendar.add(Calendar.MINUTE, timeOffset);
+        } else {
+            calendar.add(Calendar.MINUTE, maxLastOffset);
+        }
         attendanceClassesTaskDetailPo.setLateValue(DateUtil.getFormatTimeString(calendar.getTime(), DateUtil.DATE_FORMATE_STRING_A));
         attendanceClassesTaskDetailPo.setState(AttendanceClassesTaskDetailDto.STATE_WAIT);
         attendanceClassesTaskDetailPo.setStoreId(tmpStoreDto.getStoreId());

+ 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;
+    }
+
 }

+ 11 - 6
service-report/src/main/java/com/java110/report/smo/impl/GeneratorFeeMonthStatisticsInnerServiceSMOImpl.java

@@ -167,6 +167,7 @@ public class GeneratorFeeMonthStatisticsInnerServiceSMOImpl implements IGenerato
 
         ReportCarDto reportCarDto = new ReportCarDto();
         reportCarDto.setCommunityId(reportFeeMonthStatisticsPo.getCommunityId());
+        reportCarDto.setLeaseTypes(new String[]{OwnerCarDto.LEASE_TYPE_MONTH,OwnerCarDto.LEASE_TYPE_INNER,OwnerCarDto.LEASE_TYPE_SALE,OwnerCarDto.LEASE_TYPE_NO_MONEY});
         int count = reportCommunityServiceDaoImpl.getCarCount(reportCarDto);
 
 
@@ -806,14 +807,18 @@ public class GeneratorFeeMonthStatisticsInnerServiceSMOImpl implements IGenerato
         if (FeeDto.FEE_FLAG_ONCE.equals(tmpReportFeeDto.getFeeFlag())) {
             return computeOnceFee(tmpReportFeeDto);
         }
-        OwnerCarDto ownerCarDto = new OwnerCarDto();
-        ownerCarDto.setCommunityId(tmpReportFeeDto.getCommunityId());
-        ownerCarDto.setCarId(tmpReportFeeDto.getCarId());
-        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-        if (ownerCarDtos == null || ownerCarDtos.size() < 1) {
+//        OwnerCarDto ownerCarDto = new OwnerCarDto();
+//        ownerCarDto.setCommunityId(tmpReportFeeDto.getCommunityId());
+//        ownerCarDto.setCarId(tmpReportFeeDto.getCarId());
+//        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+//        if (ownerCarDtos == null || ownerCarDtos.size() < 1) {
+//            return 0.0;
+//        }
+        Date endTime = reportCarDto.getEndTime();
+
+        if(endTime == null){
             return 0.0;
         }
-        Date endTime = ownerCarDtos.get(0).getEndTime();
 
         Date maxEndDate = tmpReportFeeDto.getDeadlineTime();
         if (FeeDto.FEE_FLAG_CYCLE.equals(tmpReportFeeDto.getFeeFlag())) {

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

@@ -2,6 +2,8 @@ package com.java110.report.smo.impl;
 
 
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.dto.PageDto;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
 import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
 import com.java110.intf.report.IReportAttendanceInnerServiceSMO;
 import com.java110.report.dao.IReportAttendanceServiceDao;
@@ -34,6 +36,17 @@ public class ReportAttendanceInnerServiceSMOImpl extends BaseServiceSMO implemen
 
     @Override
     public List<AttendanceClassesTaskDto> getMonthAttendance(@RequestBody AttendanceClassesTaskDto attendanceClassesTaskDto) {
+        int page = attendanceClassesTaskDto.getPage();
+
+        if (page != PageDto.DEFAULT_PAGE) {
+            attendanceClassesTaskDto.setPage((page - 1) * attendanceClassesTaskDto.getRow());
+        }
+
         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);
+    }
 }

+ 7 - 7
service-store/src/main/java/com/java110/store/smo/impl/SmallWechatAttrInnerServiceSMOImpl.java

@@ -50,13 +50,13 @@ public class SmallWechatAttrInnerServiceSMOImpl extends BaseServiceSMO implement
             return smallWechatAttrs;
         }
 
-        String[] userIds = getUserIds(smallWechatAttrs);
-        //根据 userId 查询用户信息
-        List<UserDto> users = userInnerServiceSMOImpl.getUserInfo(userIds);
-
-        for (SmallWechatAttrDto smallWechatAttr : smallWechatAttrs) {
-            refreshSmallWechatAttr(smallWechatAttr, users);
-        }
+//        String[] userIds = getUserIds(smallWechatAttrs);
+//        //根据 userId 查询用户信息
+//        List<UserDto> users = userInnerServiceSMOImpl.getUserInfo(userIds);
+//
+//        for (SmallWechatAttrDto smallWechatAttr : smallWechatAttrs) {
+//            refreshSmallWechatAttr(smallWechatAttr, users);
+//        }
         return smallWechatAttrs;
     }