From 433dadf8b639eea84ea2401c1a0433bae3cf9262 Mon Sep 17 00:00:00 2001 From: hyingbo <1363390067@qq.com> Date: 星期三, 11 六月 2025 10:40:00 +0800 Subject: [PATCH] 上下班打卡接口 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java | 70 +++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java | 234 ++++++++++++++++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java | 145 ++++++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java | 18 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml | 42 ++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java | 21 ++ 6 files changed, 530 insertions(+), 0 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java new file mode 100644 index 0000000..482612f --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java @@ -0,0 +1,70 @@ +package org.jeecg.modules.mdc.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Api(tags="涓婁笅鐝墦鍗¤褰曡〃") +@RestController +@RequestMapping("/mdcEquipmentPunch") +@Slf4j +public class MdcEquipmentPunchController extends JeecgController<MdcEquipmentPunch, IMdcEquipmentPunchService> { + @Autowired + private IMdcEquipmentPunchService mdcEquipmentPunchService; + + private static final String msg = "鎵撳崱鎴愬姛锛�"; + + /** + * 鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌 + * + * @return + */ + @ApiOperation(value="鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌", notes="鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌") + @GetMapping(value = "/list") + public Result<List<MdcEquipmentPunch>> queryList() { + return Result.OK(mdcEquipmentPunchService.queryList()); + } + + /** + * 涓婄彮鎵撳崱 + * + * @param mdcEquipmentPunch + * @return + */ + @AutoLog(value = "涓婄彮鎵撳崱") + @ApiOperation(value="涓婄彮鎵撳崱", notes="涓婄彮鎵撳崱") + @PostMapping(value = "/workUp") + public Result<String> workUp(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { + mdcEquipmentPunchService.workUp(mdcEquipmentPunch); + return Result.OK(msg); + } + + /** + * 涓嬬彮鎵撳崱 + * + * @param mdcEquipmentPunch + * @return + */ + @AutoLog(value = "涓嬬彮鎵撳崱") + @ApiOperation(value="涓嬬彮鎵撳崱", notes="涓嬬彮鎵撳崱") + @PostMapping(value = "/workDown") + public Result<String> workDown(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { + mdcEquipmentPunchService.workDown(mdcEquipmentPunch); + return Result.OK(msg); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java new file mode 100644 index 0000000..b64bcc4 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java @@ -0,0 +1,145 @@ +package org.jeecg.modules.mdc.entity; + +import java.io.Serializable; +import java.util.Date; + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.jeecg.common.aspect.annotation.Dict; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Data +@TableName("mdc_equipment_punch") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "mdc_equipment_punch瀵硅薄", description = "mdc_equipment_punch") +public class MdcEquipmentPunch implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private String id; + /** + * 璁惧缂栧彿 + */ + @Excel(name = "璁惧缂栧彿", width = 15) + @ApiModelProperty(value = "璁惧缂栧彿") + private String equipmentId; + /** + * 鎵撳崱鐢ㄦ埛 + */ + @Excel(name = "鎵撳崱鐢ㄦ埛", width = 15) + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛") + private String punchUser; + /** + * 鎵撳崱鐢ㄦ埛璐﹀彿 + */ + @Excel(name = "鎵撳崱鐢ㄦ埛璐﹀彿", width = 15) + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛璐﹀彿") + @TableField(exist = false) + private String punchUserRealName; + /** + * 鎵撳崱鐢ㄦ埛鍚嶇О + */ + @Excel(name = "鎵撳崱鐢ㄦ埛鍚嶇О", width = 15) + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛鍚嶇О") + @TableField(exist = false) + private String punchUserUserName; + /** + * 涓婄彮鏃堕棿 + */ + @Excel(name = "涓婄彮鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "涓婄彮鏃堕棿") + private Date checkInTime; + /** + * 涓嬬彮鏃堕棿 + */ + @Excel(name = "涓嬬彮鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "涓嬬彮鏃堕棿") + private Date checkOutTime; + /** + * 璁板綍鏃ユ湡 + */ + @Excel(name = "璁板綍鏃ユ湡", width = 15) + @ApiModelProperty(value = "璁板綍鏃ユ湡") + private String recordDate; + /** + * 鐝 + */ + @Excel(name = "鐝", width = 15) + @ApiModelProperty(value = "鐝") + @Dict(dicCode = "shift_schedule") + private Integer shiftSchedule; + /** + * 鐝鍚嶇О + */ + @Excel(name = "鐝鍚嶇О", width = 15) + @ApiModelProperty(value = "鐝鍚嶇О") + @TableField(exist = false) + private String shiftScheduleName; + /** + * 鏄惁缂哄崱 + */ + @Excel(name = "鏄惁缂哄崱", width = 15) + @ApiModelProperty(value = "鏄惁缂哄崱") + private Integer isAbsent; + /** + * 鏄惁杩熷埌 + */ + @Excel(name = "鏄惁杩熷埌", width = 15) + @ApiModelProperty(value = "鏄惁杩熷埌") + private Integer isLate; + /** + * 鏄惁鏃╅�� + */ + @Excel(name = "鏄惁鏃╅��", width = 15) + @ApiModelProperty(value = "鏄惁鏃╅��") + private Integer isEarly; + /** + * 鍒涘缓浜� + */ + @ApiModelProperty(value = "鍒涘缓浜�") + private String createBy; + /** + * 鍒涘缓鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + private Date createTime; + /** + * 鏇存柊浜� + */ + @ApiModelProperty(value = "鏇存柊浜�") + private String updateBy; + /** + * 鏇存柊鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鏇存柊鏃堕棿") + private Date updateTime; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java new file mode 100644 index 0000000..3b45151 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.mdc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface MdcEquipmentPunchMapper extends BaseMapper<MdcEquipmentPunch> { + + List<MdcEquipmentPunch> list(@Param("equipmentIds") List<String> equipmentIds, @Param("date") String date); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml new file mode 100644 index 0000000..48cc0e8 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.mdc.mapper.MdcEquipmentPunchMapper"> + + <select id="list" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentPunch"> + SELECT + p.id, + p.equipment_id, + p.punch_user, + p.check_in_time, + p.check_out_time, + p.record_date, + p.is_absent, + p.is_late, + p.is_early, + p.create_by, + p.create_time, + p.update_by, + p.update_time, + p.shift_schedule, + u.realname punchUserRealName, + u.username punchUserUserName, + d1.item_text shiftScheduleName + FROM + mdc_equipment_punch p + INNER JOIN sys_user u ON u.id = p.punch_user + INNER JOIN (SELECT i1.item_text, i1.item_value + FROM sys_dict_item i1 + LEFT JOIN sys_dict i2 ON i2.id = i1.dict_id + WHERE i2.dict_code = 'shift_schedule') d1 + ON d1.item_value = CAST (p.shift_schedule AS nvarchar) + where 1=1 + AND p.equipment_id IN + <foreach collection="equipmentIds" item="equipmentId" open="(" close=")" separator=","> + #{equipmentId} + </foreach> + <if test="date != null and date != ''"> + AND p.record_date = #{date} + </if> + order by p.equipment_id desc, p.shift_schedule asc + </select> +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java new file mode 100644 index 0000000..79be14a --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java @@ -0,0 +1,21 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface IMdcEquipmentPunchService extends IService<MdcEquipmentPunch> { + + List<MdcEquipmentPunch> queryList(); + + void workUp(MdcEquipmentPunch mdcEquipmentPunch); + + void workDown(MdcEquipmentPunch mdcEquipmentPunch); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java new file mode 100644 index 0000000..8b79829 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java @@ -0,0 +1,234 @@ +package org.jeecg.modules.mdc.service.impl; + + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.mapper.MdcEquipmentPunchMapper; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService; +import org.jeecg.modules.mdc.service.IMdcEquipmentService; +import org.jeecg.modules.mdc.util.DateUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Service +public class MdcEquipmentPunchServiceImpl extends ServiceImpl<MdcEquipmentPunchMapper, MdcEquipmentPunch> implements IMdcEquipmentPunchService { + + @Resource + private IMdcEquipmentService mdcEquipmentService; + + /** + * 鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌 + * @return + */ + @Override + public List<MdcEquipmentPunch> queryList() { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + List<String> equipmentIds = Lists.newArrayList(); + if (StringUtils.isNotBlank(user.getEquipmentIds())) { + equipmentIds = Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)); + }else { + equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); + } + + if (CollectionUtils.isEmpty(equipmentIds)) { + return Lists.newArrayList(); + } + + if (StringUtils.isBlank(userId)) { + return Lists.newArrayList(); + } + + //鏍规嵁璁惧銆佸綋鍓嶆棩鏈熸煡璇㈡墦鍗¤褰� + List<MdcEquipmentPunch> mdcEquipmentPunches = this.baseMapper.list(equipmentIds, DateUtils.format(new Date(), DatePattern.PURE_DATE_PATTERN)); + return mdcEquipmentPunches; + } + + /** + * 涓婄彮鎵撳崱 + * @param mdcEquipmentPunch + */ + @Override + public void workUp(MdcEquipmentPunch mdcEquipmentPunch) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + + if (StringUtils.isBlank(mdcEquipmentPunch.getEquipmentId())) { + throw new JeecgBootException("璇烽�夋嫨鎵撳崱璁惧锛�"); + } + + /** + * 鏍¢獙鏄惁鍦ㄦ湁鏁堟墦鍗¤寖鍥翠箣鍐� + * 鏃╃彮涓婄彮鍗℃湁鏁堣寖鍥翠负锛�00:00:00 ~ 17:30:00 + * 鏅氱彮涓婄彮鍗℃湁鏁堣寖鍥翠负锛�00:00:00 ~ 23:00:00 + */ + Date startDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 00:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + Date endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 17:30:00", + DatePattern.NORM_DATETIME_PATTERN + ); + if (mdcEquipmentPunch.getShiftSchedule() == 2) { + //鏅氱彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿 + endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 23:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + } + + if (startDate.compareTo(mdcEquipmentPunch.getCheckInTime()) == 1 || endDate.compareTo(mdcEquipmentPunch.getCheckInTime()) == -1) { + throw new JeecgBootException("鏈湪鏈夋晥涓婄彮鎵撳崱鏃堕棿鍐咃紝涓嶈兘鎵撳崱锛�"); + } + + //鏌ヨ鎵�閫夎澶囧綋澶╂槸鍚﹀凡鎵撲笂鐝崱 + List<String> equipmentIdList = Arrays.asList(mdcEquipmentPunch.getEquipmentId().split(StringPool.COMMA)); + String currentDate = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.PURE_DATE_PATTERN); + + //鏃╃彮涓婄彮姝e父鏈�鏅氭墦鍗℃椂闂� + String checkInTime = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 08:30:00"; + + //鏌ヨ褰撳墠璁惧銆佸綋鍓嶆墦鍗$被鍨嬫墦鍗¤褰� + List<MdcEquipmentPunch> equipmentPunchList = this.list(new LambdaQueryWrapper<MdcEquipmentPunch>() + .eq(MdcEquipmentPunch::getShiftSchedule, mdcEquipmentPunch.getShiftSchedule()) + .eq(MdcEquipmentPunch::getRecordDate, currentDate) + .in(MdcEquipmentPunch::getEquipmentId, equipmentIdList)); + List<MdcEquipmentPunch> mdcEquipmentPunchList = equipmentPunchList.stream().filter(equipmentPunch -> Objects.nonNull(equipmentPunch.getCheckInTime())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(mdcEquipmentPunchList)) { + List<String> equipmentIds = equipmentPunchList.stream() + .filter(mdcEquipmentPunchInfo -> Objects.nonNull(mdcEquipmentPunchInfo.getCheckInTime())) + .map(MdcEquipmentPunch::getEquipmentId) + .distinct() + .collect(Collectors.toList()); + throw new JeecgBootException("璁惧[" + StringUtils.join(equipmentIds, StringPool.COMMA) + "]宸叉墦鍗★紝鏃犻渶閲嶅鎵撳崱"); + } + + List<MdcEquipmentPunch> list = Lists.newArrayList(); + + //鐗规畩澶勭悊鏅氱彮涓婄彮鍗� + if (mdcEquipmentPunch.getShiftSchedule() == 2) { + //鏅氱彮姝e父涓婄彮鍗℃渶鏅氭墦鍗℃椂闂� + checkInTime = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 17:00:00"; + } + + + for (String equipment : equipmentIdList) { + Optional<MdcEquipmentPunch> first = equipmentPunchList.stream().filter(equipmentPunch -> Objects.isNull(equipmentPunch.getCheckInTime()) && equipment.equals(equipmentPunch.getEquipmentId())).findFirst(); + MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); + if (first.isPresent()) { + equipmentPunch = first.get(); + }else { + equipmentPunch.setEquipmentId(equipment); + equipmentPunch.setPunchUser(userId); + equipmentPunch.setRecordDate(currentDate); + equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule()); + equipmentPunch.setIsAbsent(0); + equipmentPunch.setIsEarly(0); + } + equipmentPunch.setCheckInTime(mdcEquipmentPunch.getCheckInTime()); + //鎵撳崱鏃堕棿澶т簬8锛�30/17:00鏃朵负杩熷埌鎵撳崱 + equipmentPunch.setIsLate(mdcEquipmentPunch.getCheckInTime().compareTo(DateUtils.getFormatDate(checkInTime, DatePattern.NORM_DATETIME_PATTERN)) == 1 ? 1 : 0); + + list.add(equipmentPunch); + } + this.saveOrUpdateBatch(list); + } + + @Override + public void workDown(MdcEquipmentPunch mdcEquipmentPunch) { + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + + if (StringUtils.isBlank(mdcEquipmentPunch.getEquipmentId())) { + throw new JeecgBootException("璇烽�夋嫨鎵撳崱璁惧锛�"); + } + + /** + * 鏍¢獙褰撳墠涓嬬彮鍗℃槸鍚﹀湪鏈夋晥涓嬬彮鎵撳崱鑼冨洿涔嬪唴 + * 鏃╃彮涓嬬彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿涓�00:00:00 ~ 08:30:00 + * 鏅氱彮涓嬬彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿涓�00:00:00 ~ 17:00:00 + */ + Date startDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 00:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + Date endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 08:30:00", + DatePattern.NORM_DATETIME_PATTERN + ); + Date checkOutTime = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 17:30:00", + DatePattern.NORM_DATETIME_PATTERN + ); + if (mdcEquipmentPunch.getShiftSchedule() == 2) { + //鏅氱彮鏃犳晥鎵撳崱鏃堕棿鑼冨洿 + endDate = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 17:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + //鏅氱彮姝e父涓嬬彮鏈�鏃╂墦鍗℃椂闂� + checkOutTime = DateUtils.getFormatDate( + DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 23:00:00", + DatePattern.NORM_DATETIME_PATTERN + ); + } + + if (startDate.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1 + || endDate.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1) { + throw new JeecgBootException("鏈湪鏈夋晥涓嬬彮鎵撳崱鏃堕棿鍐咃紝涓嶈兘鎵撳崱锛�"); + } + + //鏌ヨ褰撳墠鎵�閫夎澶囨槸鍚﹀瓨鍦ㄤ笂鐝墦鍗¤褰� + List<String> equipmentIdList = Arrays.asList(mdcEquipmentPunch.getEquipmentId().split(StringPool.COMMA)); + String currentDate = DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.PURE_DATE_PATTERN); + List<MdcEquipmentPunch> equipmentPunchList = this.list(new LambdaQueryWrapper<MdcEquipmentPunch>() + .eq(MdcEquipmentPunch::getShiftSchedule, mdcEquipmentPunch.getShiftSchedule()) + .eq(MdcEquipmentPunch::getRecordDate, currentDate) + .in(MdcEquipmentPunch::getEquipmentId, equipmentIdList)); + + List<MdcEquipmentPunch> list = Lists.newArrayList(); + + for (String equipmentId : equipmentIdList) { + Optional<MdcEquipmentPunch> mdcEquipmentPunchOptional = equipmentPunchList.stream() + .filter(mdcEquipmentPunch1 -> mdcEquipmentPunch1.getEquipmentId().equals(equipmentId)) + .findFirst(); + MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); + if (mdcEquipmentPunchOptional.isPresent()) { + equipmentPunch = mdcEquipmentPunchOptional.get(); + }else { + equipmentPunch.setIsAbsent(1); + equipmentPunch.setIsLate(0); + equipmentPunch.setEquipmentId(equipmentId); + equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule()); + equipmentPunch.setPunchUser(userId); + equipmentPunch.setRecordDate(currentDate); + } + equipmentPunch.setCheckOutTime(mdcEquipmentPunch.getCheckOutTime()); + + //涓嬬彮鎵撳崱鏃堕棿鏃╀簬17:30/23:00鍒欎负鏃╅�� + equipmentPunch.setIsEarly(checkOutTime.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1 ? 1 : 0); + list.add(equipmentPunch); + } + + this.saveOrUpdateBatch(list); + } +} -- Gitblit v1.9.3