Ver Fonte

在补卡申请中增加显示当前补卡人员是否补卡成功,
如果由于调班导致补卡未成功,可以直接选择当天缺卡记录进行补卡。

tomatozq há 3 anos atrás
pai
commit
761447ee87

+ 4 - 0
common/src/main/java/com/jpsoft/shinestar/modules/business/dao/WorkScheduleAttendanceDAO.java

@@ -61,4 +61,8 @@ public interface WorkScheduleAttendanceDAO {
     List<Map> queryDuplicateRecord(Date startDate, int limit);
 
 	WorkScheduleAttendance findByScheduleAttendanceId(String personScheduleId, String workShiftId, String classify);
+
+    void updateScheduleByPersonIdAndAttendanceDate(Long personId, String dateStr, String personScheduleId, String shiftId);
+
+    List<WorkScheduleAttendance> findByPersonIdAttendanceDateResult(Long personId, String attendanceDate, String result);
 }

+ 3 - 1
common/src/main/java/com/jpsoft/shinestar/modules/business/entity/SupplementWork.java

@@ -4,6 +4,8 @@ import java.io.Serializable;
 import java.util.Date;
 import java.text.SimpleDateFormat;
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 import org.springframework.data.annotation.Transient;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -70,5 +72,5 @@ public class SupplementWork {
     private String supplementTime;
 
     @Transient
-    private String members;
+    private List<Map> members;
 }

+ 2 - 0
common/src/main/java/com/jpsoft/shinestar/modules/business/service/WorkScheduleAttendanceService.java

@@ -89,4 +89,6 @@ public interface WorkScheduleAttendanceService {
 	List<Map> queryDuplicateRecord(Date startDate, int limit);
 
 	WorkScheduleAttendance findByScheduleAttendanceId(String personScheduleId, String workShiftId, String classify);
+
+    List<WorkScheduleAttendance> findByPersonIdAttendanceDateResult(Long personId, String attendanceDate, String result);
 }

+ 14 - 0
common/src/main/java/com/jpsoft/shinestar/modules/business/service/impl/WorkScheduleAttendanceServiceImpl.java

@@ -885,6 +885,15 @@ public class WorkScheduleAttendanceServiceImpl implements WorkScheduleAttendance
                         else{
                             //删除非单天排班的班次考勤(排班变更)
                             workScheduleAttendanceDAO.deleteByPersonIdAndAttendanceDateAndExcludeSchedule(personInfo.getId(),dateStr,workPersonScheduling);
+
+//                            try {
+//                                //将补卡班次调整为新的排班班次
+//                                String[] shiftIds = workPersonScheduling.getShiftIds().split(",");
+//                                workScheduleAttendanceDAO.updateScheduleByPersonIdAndAttendanceDate(personInfo.getId(), dateStr, workPersonScheduling.getId(), shiftIds[0]);
+//                            }
+//                            catch (Exception ex){
+//                                log.error(ex.getMessage(),ex);
+//                            }
                         }
 
                         //查询班次
@@ -1306,4 +1315,9 @@ public class WorkScheduleAttendanceServiceImpl implements WorkScheduleAttendance
     public List<Map> queryDuplicateRecord(Date startDate, int limit) {
         return workScheduleAttendanceDAO.queryDuplicateRecord(startDate,limit);
     }
+
+    @Override
+    public List<WorkScheduleAttendance> findByPersonIdAttendanceDateResult(Long personId, String attendanceDate, String result) {
+        return workScheduleAttendanceDAO.findByPersonIdAttendanceDateResult(personId,attendanceDate,result);
+    }
 }

+ 10 - 0
common/src/main/resources/mapper/business/SupplementWork.xml

@@ -128,6 +128,16 @@
 		]]>
         <where>
             t1.del_flag=0
+            <if test="searchParams.swPersonName != null">
+                and exists (
+                    select swp.id_
+                    from business_supplement_work_person swp
+                    inner join base_person_popedom bpp on swp.person_popedom_id = bpp.id_
+                    inner join base_person_info bpi on bpi.id_ = bpp.person_id
+                    where swp.supplement_work_id = t1.id_
+                    and bpi.name_ like #{searchParams.swPersonName}
+                )
+            </if>
             <if test="searchParams.personName != null">
                 and t3.name_ like #{searchParams.personName}
             </if>

+ 24 - 0
common/src/main/resources/mapper/business/WorkScheduleAttendance.xml

@@ -349,6 +349,17 @@
         limit 1
     </select>
 
+    <select id="findByPersonIdAttendanceDateResult" resultMap="WorkScheduleAttendanceMap">
+        <![CDATA[
+        select * from business_work_schedule_attendance
+        ]]>
+        where del_flag = 0
+        and person_id = #{personId}
+        and attendance_date = #{attendanceDate}
+        and result_ = #{result}
+        order by record_time asc
+    </select>
+
     <select id="findPersonIdListRecordTimeResult" resultType="java.lang.Long">
         select DISTINCT(a.person_id) from business_work_schedule_attendance a
         where a.attendance_date = #{attendanceDate}
@@ -552,6 +563,19 @@
             and del_flag=0
         ]]>
     </update>
+    <update id="updateScheduleByPersonIdAndAttendanceDate">
+        <![CDATA[
+            update business_work_schedule_attendance
+            set
+            person_schedule_id=#{personScheduleId},
+            work_shift_id=#{workShiftId},
+            update_time=now()
+            where person_id=#{personId}
+            and attendance_date=#{attendanceDate}
+            and supplement_work_person_id is not null
+            and del_flag=0
+        ]]>
+    </update>
     <update id="updateWorkMinute" parameterType="com.jpsoft.shinestar.modules.business.entity.WorkScheduleAttendance">
         update business_work_schedule_attendance
         set work_minute=#{workMinute},update_time=#{updateTime}

+ 104 - 7
web/src/main/java/com/jpsoft/shinestar/modules/business/controller/SupplementWorkController.java

@@ -3,8 +3,10 @@ package com.jpsoft.shinestar.modules.business.controller;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.util.StringUtil;
 import com.jpsoft.shinestar.config.OSSConfig;
+import com.jpsoft.shinestar.exception.CustomException;
 import com.jpsoft.shinestar.modules.base.entity.*;
 import com.jpsoft.shinestar.modules.base.service.CompanyInfoService;
+import com.jpsoft.shinestar.modules.base.service.PersonInfoService;
 import com.jpsoft.shinestar.modules.base.service.PersonPopedomService;
 import com.jpsoft.shinestar.modules.base.service.WorkShiftInfoService;
 import com.jpsoft.shinestar.modules.business.dto.UpdatePersonAttendanceDTO;
@@ -67,6 +69,9 @@ public class SupplementWorkController {
     @Autowired
     private PersonPopedomService personPopedomService;
 
+    @Autowired
+    private PersonInfoService personInfoService;
+
     @Autowired
     private WorkScheduleAttendanceService workScheduleAttendanceService;
 
@@ -211,6 +216,7 @@ public class SupplementWorkController {
             @RequestParam(value="hqCompanyId",defaultValue="") String hqCompanyId,
             @RequestParam(value="hqSubordinate",defaultValue="false") Boolean hqSubordinate,
             @RequestParam(value = "personName", defaultValue = "") String personName,
+            @RequestParam(value = "swPersonName", defaultValue = "") String swPersonName,
             @RequestParam(value = "status", defaultValue = "") String status,
             @RequestParam(value = "type", defaultValue = "") String type,
             @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
@@ -273,6 +279,10 @@ public class SupplementWorkController {
                 searchParams.put("personName", "%" + personName + "%");
             }
 
+            if (StringUtils.isNotEmpty(swPersonName)) {
+                searchParams.put("swPersonName", "%" + swPersonName + "%");
+            }
+
             if (StringUtil.isNotEmpty(status)) {
                 searchParams.put("status", status);
             }
@@ -305,13 +315,27 @@ public class SupplementWorkController {
                     }
                 }
 
-//                List<SupplementWorkPerson> personList = supplementWorkPersonService.findBySupplementWorkId(supplementWork.getId());
-//
-//                String personNames = personList.stream()
-//                        .map((item) -> item.getPersonName())
-//                        .collect(Collectors.joining(","));
-//
-//                supplementWork.setMembers(personNames);
+                List<SupplementWorkPerson> personList = supplementWorkPersonService.findBySupplementWorkId(supplementWork.getId());
+
+                List<Map> members = new ArrayList<>();
+
+                for (SupplementWorkPerson supplementWorkPerson : personList) {
+                    Map<String,Object> member = new HashMap<>();
+
+                    member.put("id", supplementWorkPerson.getId());
+
+                    //补卡人
+                    member.put("name", supplementWorkPerson.getPersonName());
+
+                    //当前补卡对应考勤记录
+                    WorkScheduleAttendance wsa = workScheduleAttendanceService.findOneBySupplementWorkPersonId(supplementWorkPerson.getId());
+
+                    member.put("wsa", wsa);
+
+                    members.add(member);
+                }
+
+                supplementWork.setMembers(members);
             }
 
             if(exportFlag) {
@@ -336,4 +360,77 @@ public class SupplementWorkController {
 
         return msgResult;
     }
+
+    @ApiOperation(value="查看补卡当天缺卡记录列表")
+    @RequestMapping(value = "missAttendanceList",method = RequestMethod.GET)
+    public MessageResult<List> missAttendanceList(String supplementWorkPersonId){
+        MessageResult<List> messageResult = new MessageResult<>();
+
+        try {
+            SupplementWorkPerson supplementWorkPerson = supplementWorkPersonService.get(supplementWorkPersonId);
+            PersonPopedom personPopedom = personPopedomService.get(supplementWorkPerson.getPersonPopedomId());
+            PersonInfo personInfo = personInfoService.get(personPopedom.getPersonId());
+
+            SupplementWork supplementWork = supplementWorkService.get(supplementWorkPerson.getSupplementWorkId());
+
+            String attendanceDate = supplementWork.getAttendanceDate().substring(0, 10);
+
+            List<WorkScheduleAttendance> attendanceList = workScheduleAttendanceService.findByPersonIdAttendanceDateResult(personInfo.getId(), attendanceDate, "0");
+
+            messageResult.setResult(true);
+            messageResult.setData(attendanceList);
+        }
+        catch (Exception ex){
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+
+            log.error(ex.getMessage(),ex);
+        }
+
+        return messageResult;
+    }
+
+    @ApiOperation(value="补卡")
+    @RequestMapping(value = "patchAttendance",method = RequestMethod.POST)
+    public MessageResult<String> patchAttendance(String supplementWorkPersonId,String workAttendanceId){
+        MessageResult<String> messageResult = new MessageResult<>();
+
+        try {
+            WorkScheduleAttendance workScheduleAttendance = workScheduleAttendanceService.findOneBySupplementWorkPersonId(supplementWorkPersonId);
+
+            if(workScheduleAttendance!=null){
+                throw new CustomException("当前补卡申请已生效!不能重复补卡!");
+            }
+
+//          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+            workScheduleAttendance = workScheduleAttendanceService.get(workAttendanceId);
+
+            SupplementWorkPerson supplementWorkPerson = supplementWorkPersonService.get(supplementWorkPersonId);
+//            PersonPopedom personPopedom = personPopedomService.get(supplementWorkPerson.getPersonPopedomId());
+//            PersonInfo personInfo = personInfoService.get(personPopedom.getPersonId());
+
+            //更新补卡记录
+            supplementWorkPerson.setScheduleAttendanceId(workScheduleAttendance.getId());
+            supplementWorkPerson.setUpdateTime(new Date());
+            supplementWorkPersonService.update(supplementWorkPerson);
+
+            //更新考勤记录
+            workScheduleAttendance.setResult("1");
+            workScheduleAttendance.setRemark("补卡");
+            workScheduleAttendance.setSupplementWorkPersonId(supplementWorkPerson.getId());
+            workScheduleAttendance.setUpdateTime(new Date());
+
+            workScheduleAttendanceService.update(workScheduleAttendance);
+
+            messageResult.setResult(true);
+        }
+        catch (Exception ex){
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+
+            log.error(ex.getMessage(),ex);
+        }
+
+        return messageResult;
+    }
 }

+ 16 - 10
web/src/main/java/com/jpsoft/shinestar/modules/mobile/controller/WorkAttendanceApiController.java

@@ -142,17 +142,23 @@ public class WorkAttendanceApiController {
                      //   if (fillAttendance != null) {
                         if (StringUtils.isNotBlank(workDTO.getSupplementWorkPersonId())){
                             SupplementWorkPerson supplementWorkPerson = supplementWorkPersonService.get(workDTO.getSupplementWorkPersonId());
-                            SupplementWork supplementWork = supplementWorkService.get(supplementWorkPerson.getSupplementWorkId());
 
-                            workDTO.setSupplementWorkId(supplementWork.getId());
-                         //   workDTO.setFillAttendanceId(fillAttendance.getId());
-                            workDTO.setStatus(supplementWork.getStatus());
-                            if (supplementWork.getStatus().equals("0")) {
-                                workDTO.setStatusN("审核中");
-                            } else if (supplementWork.getStatus().equals("1")) {
-                                workDTO.setStatusN("通过");
-                            } else if (supplementWork.getStatus().equals("3")) {
-                                workDTO.setStatusN("拒绝");
+                            if(supplementWorkPerson!=null) {
+                                SupplementWork supplementWork = supplementWorkService.get(supplementWorkPerson.getSupplementWorkId());
+
+                                workDTO.setSupplementWorkId(supplementWork.getId());
+                                //   workDTO.setFillAttendanceId(fillAttendance.getId());
+                                workDTO.setStatus(supplementWork.getStatus());
+                                if (supplementWork.getStatus().equals("0")) {
+                                    workDTO.setStatusN("审核中");
+                                } else if (supplementWork.getStatus().equals("1")) {
+                                    workDTO.setStatusN("通过");
+                                } else if (supplementWork.getStatus().equals("3")) {
+                                    workDTO.setStatusN("拒绝");
+                                }
+                            }
+                            else{
+                                workDTO.setStatusN("未处理");
                             }
                         } else {
                             workDTO.setStatusN("未处理");