From b7fe5542c0e1400b962a3f37851c75e836f6a850 Mon Sep 17 00:00:00 2001 From: "liang.chao" <1360241448@qq.com> Date: Sat, 16 Aug 2025 16:38:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A1=A5=E5=8D=A1=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E3=80=81=E5=AE=A1=E6=A0=B8=E3=80=81=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/RepairCardApplyController.java | 170 +++++++++++ .../bmw/domain/dto/CardStatisticsDto.java | 23 ++ .../bonus/bmw/domain/dto/CheckRecordDto.java | 33 ++ .../java/com/bonus/bmw/domain/dto/ProDto.java | 117 ++++++++ .../bmw/domain/dto/RepairCardApplyDto.java | 120 ++++++++ .../bmw/domain/dto/RepairCardRecordDto.java | 108 +++++++ .../bonus/bmw/domain/dto/WorkPersonDto.java | 35 +++ .../bmw/mapper/RepairCardApplyMapper.java | 44 +++ .../bmw/service/RepairCardApplyService.java | 31 ++ .../impl/RepairCardApplyServiceImpl.java | 187 ++++++++++++ .../mapper/bmw/RepairCardApplyMapper.xml | 283 ++++++++++++++++++ 11 files changed, 1151 insertions(+) create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/RepairCardApplyController.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CardStatisticsDto.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CheckRecordDto.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/ProDto.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardApplyDto.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardRecordDto.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WorkPersonDto.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/RepairCardApplyMapper.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/RepairCardApplyService.java create mode 100644 bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/RepairCardApplyServiceImpl.java create mode 100644 bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/RepairCardApplyMapper.xml diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/RepairCardApplyController.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/RepairCardApplyController.java new file mode 100644 index 0000000..a81c31e --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/controller/RepairCardApplyController.java @@ -0,0 +1,170 @@ +package com.bonus.bmw.controller; + +import com.bonus.bmw.domain.dto.*; +import com.bonus.bmw.service.RepairCardApplyService; +import com.bonus.common.core.utils.poi.ExcelUtil; +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.core.web.page.TableDataInfo; +import com.bonus.common.log.annotation.SysLog; +import com.bonus.common.log.enums.OperaType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 10:31 + */ +@RestController +@RequestMapping("/cardApply") +public class RepairCardApplyController extends BaseController { + @Autowired + private RepairCardApplyService repairCardApplyMapper; + + /** + * 工程下拉列表 + * + * @param + * @return + */ + @GetMapping("/proList") + public AjaxResult proList() { + try { + List list = repairCardApplyMapper.proList(); + return AjaxResult.success(list); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return AjaxResult.error("系统错误"); + } + + /** + * 人员下拉列表 + * + * @param + * @return + */ + @GetMapping("/workPersonList") + public AjaxResult workPersonList(RepairCardApplyDto cardApply) { + try { + List list = repairCardApplyMapper.workPersonList(cardApply); + return AjaxResult.success(list); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return AjaxResult.error("系统错误"); + } + + @GetMapping("/list") + @SysLog(title = "补卡申请列表", businessType = OperaType.QUERY, logType = 0, module = "考勤管理-补卡申请", details = "查询补卡申请列表") + public TableDataInfo list(RepairCardApplyDto cardApply) { + try { + startPage(); + List list = repairCardApplyMapper.list(cardApply); + return getDataTable(list); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return getDataTableError(new ArrayList<>()); + } + + @PostMapping("export") + @SysLog(title = "补卡申请导出", businessType = OperaType.QUERY, logType = 0, module = "考勤管理-补卡申请", details = "导出补卡申请列表") + public void export(HttpServletResponse response, RepairCardApplyDto cardApply) { + + List list = repairCardApplyMapper.list(cardApply); + ExcelUtil util = new ExcelUtil(RepairCardApplyDto.class); + util.exportExcel(response, list, "补卡申请数据"); + } + + /** + * 根据工程id 查询补卡申请清单 + * + * @param cardApply + * @return + */ + @GetMapping("/getRepairCardDetails") + public AjaxResult getRepairCardDetails(RepairCardApplyDto cardApply) { + try { + startPage(); + List list = repairCardApplyMapper.getRepairCardDetails(cardApply); + return AjaxResult.success(list); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return AjaxResult.error("获取数据失败"); + } + + + /** + * 根据工程id、考勤时间查询打卡记录 + * + * @param + * @return + */ + @GetMapping("/getCheckRecord") + public AjaxResult getCheckRecord(CheckRecordDto checkRecordDto) { + try { + startPage(); + Map map = repairCardApplyMapper.getCheckRecord(checkRecordDto); + return AjaxResult.success(map); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return AjaxResult.error("获取数据失败"); + } + + /** + * 新增补卡申请 + * + * @param cardApplyDto + * @return + */ + @PostMapping("/saverepairCardApply") + public AjaxResult saverepairCardApply(@RequestBody RepairCardApplyDto cardApplyDto) { + AjaxResult ajaxResult = repairCardApplyMapper.saverepairCardApply(cardApplyDto); + return ajaxResult; + } + + /** + * 删除补卡申请 + * + * @param cardApplyDto + * @return + */ + @PostMapping("/delRepairCardApply") + public AjaxResult delRepairCardApply(@RequestBody RepairCardApplyDto cardApplyDto) { + Integer num = repairCardApplyMapper.delRepairCardApply(cardApplyDto); + AjaxResult ajaxResult = num > 0 ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败"); + return ajaxResult; + } + + /** + * 审核 + * + * @param cardApplyDto + * @return + */ + @PostMapping("/audit") + public AjaxResult audit(@RequestBody RepairCardApplyDto cardApplyDto) { + return repairCardApplyMapper.audit(cardApplyDto); + } + + @GetMapping("/cardStatistics") + @SysLog(title = "补卡统计列表", businessType = OperaType.QUERY, logType = 0, module = "考勤管理-补卡申请", details = "查询补卡统计列表") + public TableDataInfo getCardStatistics(RepairCardApplyDto cardApply) { + try { + startPage(); + List list = repairCardApplyMapper.getCardStatistics(cardApply); + return getDataTable(list); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return getDataTableError(new ArrayList<>()); + } +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CardStatisticsDto.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CardStatisticsDto.java new file mode 100644 index 0000000..107cee1 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CardStatisticsDto.java @@ -0,0 +1,23 @@ +package com.bonus.bmw.domain.dto; + +import lombok.Data; + +/** + * @Author:liang.chao + * @Date:2025/8/14 - 12:00 + */ +@Data +public class CardStatisticsDto { + // 工程id + private String proId; + // 工程名称 + private String proName; + // 申请补卡次数 + private Integer num; + //累计补卡人数 + private Integer personNum; + // 累计补卡天数 + private Integer days; + // 最新申请时间 + private String createTime; +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CheckRecordDto.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CheckRecordDto.java new file mode 100644 index 0000000..c08d26a --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/CheckRecordDto.java @@ -0,0 +1,33 @@ +package com.bonus.bmw.domain.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 14:11 + */ +@Data +@NoArgsConstructor +public class CheckRecordDto { + private Integer proId; + private Integer workerId; + private String startTime; + private String endTime; + // 入场时间 + private LocalDateTime einTime; + // 出场时间 + private LocalDateTime exitTime; + // 班组名称 + private String teamName; + private Integer isActive; + private boolean isInRange; + + public CheckRecordDto(LocalDateTime einTime, LocalDateTime exitTime, String teamName) { + this.einTime = einTime; + this.exitTime = exitTime; + this.teamName = teamName; + } +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/ProDto.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/ProDto.java new file mode 100644 index 0000000..13ba420 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/ProDto.java @@ -0,0 +1,117 @@ +package com.bonus.bmw.domain.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 10:54 + */ +@Data +public class ProDto { + /** + * 编号 + */ + private Integer id; + + /** + * 工程名称 + */ + private String proName; + + /** + * 总包工程id + */ + private Integer mainProId; + + /** + * 总公司id + */ + private Integer comId; + + /** + * 分公司id + */ + private Integer subComId; + + /** + * 项目部id + */ + private Integer orgId; + + /** + * 工程简称 + */ + private String simpleName; + + /** + * 工程类型 字典表 + */ + private String proType; + + /** + * 电压等级 字典表选,但直接存值 + */ + private String volLevel; + + /** + * 是否上海项目 1 是 0 不是 + */ + private Integer isShanghai; + + /** + * 工程状态 字典表选,但直接存值 + */ + private String proStatus; + + /** + * 工程地址 + */ + private String proAddress; + + /** + * 计划开始时间 + */ + private Date startTime; + + /** + * 计划竣工时间 + */ + private Date endTime; + + /** + * 经度 + */ + private String lon; + + /** + * 纬度 + */ + private String lat; + + /** + * 创建人 + */ + private String createUser; + + /** + * 修改人 + */ + private String updateUser; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 是否有效 + */ + private Integer isActive; +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardApplyDto.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardApplyDto.java new file mode 100644 index 0000000..9b65e18 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardApplyDto.java @@ -0,0 +1,120 @@ +package com.bonus.bmw.domain.dto; + +import com.bonus.common.core.annotation.Excel; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 10:34 + */ +@Data +public class RepairCardApplyDto { + /** + * 编号 + */ + private Integer id; + + /** + * 工程id + */ + private Integer proId; + /** + * 工程名称 + */ + @Excel(name = "工程名称") + private Integer proName; + + /** + * 补卡人员数 + */ + @Excel(name = "补卡人数") + private Integer repairNum; + + /** + * 补卡天数 + */ + @Excel(name = "补卡天数") + private Integer repairDay; + /** + * 驳回意见 + */ + private Integer refuseRemark; + + /** + * 补卡备注 + */ + @Excel(name = "补卡说明") + private String repairRemark; + + /** + * 补卡文件,多个分号隔开 + */ + private String repairFile; + + /** + * 补卡月份 (默认上一个月)yyyy-MM + */ + private String repairMonth; + + /** + * 申请人 + */ + @Excel(name = "申请人") + private String applyUser; + + /** + * 申请时间 + */ + @Excel(name = "申请时间") + private Date applyTime; + + /** + * 0 待审核 1 审核通过 2 审核不通过 + */ + private Integer checkStatus; + + @Excel(name = "审核状态") + private String checkStatusName; + + /** + * 审核人 + */ + @Excel(name = "审核人") + private String checkUser; + + /** + * 审核时间 + */ + @Excel(name = "审核时间") + private Date checkTime; + + /** + * 创建人 + */ + private String createUser; + + /** + * 修改人 + */ + private String updateUser; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 是否有效 + */ + private Integer isActive; + + private List repairCardRecords; +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardRecordDto.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardRecordDto.java new file mode 100644 index 0000000..6755962 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/RepairCardRecordDto.java @@ -0,0 +1,108 @@ +package com.bonus.bmw.domain.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 11:16 + */ +@Data +public class RepairCardRecordDto { + /** + * 补卡申请id + */ + private Integer applyId; + + /** + * 施工人员id + */ + private Integer workerId; + + /** + * 身份证 + */ + private String idNumber; + /** + * 补卡备注 + */ + private String repairRemark; + /** + * 补卡文件 + */ + private String repairFile; + + /** + * 姓名 + */ + private String name; + + /** + * 电话 + */ + private String phone; + + /** + * 工程id + */ + private Integer proId; + /** + * 工程名称 + */ + private String proName; + + /** + * 班组id + */ + private Integer teamId; + /** + * 班组名称 + */ + private String teamName; + + /** + * 分包id + */ + private Integer subId; + /** + * 分包名称 + */ + private String subName; + + /** + * 天数 + */ + private Integer repairDay; + + /** + * 补卡日期 + */ + private String repairDate; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 是否有效 + */ + private Integer isActive; + + /** + * 考勤日期 + */ + private String attDay; + + /** + * 主键编码 + */ + private String idCode; + +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WorkPersonDto.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WorkPersonDto.java new file mode 100644 index 0000000..645fdf0 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/domain/dto/WorkPersonDto.java @@ -0,0 +1,35 @@ +package com.bonus.bmw.domain.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 10:54 + */ +@Data +public class WorkPersonDto { + /** + * 编号 + */ + private Integer id; + + /** + * 姓名 + */ + private String name; + /** + * 打卡日期 + */ + private String attDay; + /** + * 电话 + */ + private String phone; + /** + * 身份证 + */ + private String idNumber; + +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/RepairCardApplyMapper.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/RepairCardApplyMapper.java new file mode 100644 index 0000000..6b84c3b --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/mapper/RepairCardApplyMapper.java @@ -0,0 +1,44 @@ +package com.bonus.bmw.mapper; + +import com.bonus.bmw.domain.dto.*; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface RepairCardApplyMapper { + + List list(RepairCardApplyDto cardApply); + + List proList(); + + List getRepairCardDetails(RepairCardApplyDto cardApply); + + List getCheckRecord(CheckRecordDto checkRecordDto); + + List attPersonRecord(CheckRecordDto checkRecordDto); + + List workPersonList(RepairCardApplyDto cardApply); + + Integer saverepairCardApply(RepairCardApplyDto cardApplyDto); + + void saverepairCardDetails(@Param("applyId") Integer applyId, @Param("repairCardRecords") List repairCardRecords); + + Integer delRepairCardApply(RepairCardApplyDto cardApplyDto); + + Integer delRepairCardRecord(RepairCardApplyDto cardApplyDto); + + void updaterepairCardApply(RepairCardApplyDto cardApplyDto); + + Integer insertAttPerson(RepairCardRecordDto cardApplyDto); + + Integer insertAttRecord(RepairCardRecordDto cardApplyDto); + + Integer insertRepairCardDate(RepairCardRecordDto cardApplyDto); + + List getCardStatistics(RepairCardApplyDto cardApply); + + List getRepairCardRecordsList(RepairCardApplyDto cardApplyDto); + +} \ No newline at end of file diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/RepairCardApplyService.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/RepairCardApplyService.java new file mode 100644 index 0000000..9f3c896 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/RepairCardApplyService.java @@ -0,0 +1,31 @@ +package com.bonus.bmw.service; + +import com.bonus.bmw.domain.dto.*; +import com.bonus.common.core.web.domain.AjaxResult; + +import java.util.List; +import java.util.Map; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 10:32 + */ +public interface RepairCardApplyService { + List list(RepairCardApplyDto cardApply); + + List proList(); + + List getRepairCardDetails(RepairCardApplyDto cardApply); + + Map getCheckRecord(CheckRecordDto checkRecordDto); + + List workPersonList(RepairCardApplyDto cardApply); + + AjaxResult saverepairCardApply(RepairCardApplyDto cardApplyDto); + + Integer delRepairCardApply(RepairCardApplyDto cardApplyDto); + + AjaxResult audit(RepairCardApplyDto cardApplyDto); + + List getCardStatistics(RepairCardApplyDto cardApply); +} diff --git a/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/RepairCardApplyServiceImpl.java b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/RepairCardApplyServiceImpl.java new file mode 100644 index 0000000..83dd555 --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/java/com/bonus/bmw/service/impl/RepairCardApplyServiceImpl.java @@ -0,0 +1,187 @@ +package com.bonus.bmw.service.impl; + +import com.bonus.bmw.domain.dto.*; +import com.bonus.bmw.mapper.RepairCardApplyMapper; +import com.bonus.bmw.service.RepairCardApplyService; +import com.bonus.common.core.utils.uuid.UUID; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import org.apache.catalina.security.SecurityUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author:liang.chao + * @Date:2025/8/13 - 10:37 + */ +@Service +public class RepairCardApplyServiceImpl implements RepairCardApplyService { + + @Resource + private RepairCardApplyMapper repairCardApplyMapper; + + @Override + public List list(RepairCardApplyDto cardApply) { + return repairCardApplyMapper.list(cardApply); + } + + @Override + public List proList() { + return repairCardApplyMapper.proList(); + } + + @Override + public List getRepairCardDetails(RepairCardApplyDto cardApply) { + return repairCardApplyMapper.getRepairCardDetails(cardApply); + } + + @Override + public Map getCheckRecord(CheckRecordDto checkRecordDto) { + // 使用 DateTimeFormatter 解析字符串为 LocalDate + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate startDate = LocalDate.parse(checkRecordDto.getStartTime(), formatter); + LocalDate endDate = LocalDate.parse(checkRecordDto.getEndTime(), formatter); + + // 创建一个列表来存储日期字符串 + List dateList = new ArrayList<>(); + + // 从开始日期开始,逐日增加,直到结束日期(包含) + LocalDate currentDate = startDate; + while (!currentDate.isAfter(endDate)) { // isAfter 返回 true 表示 currentDate > endDate,所以用 ! 取反 + // 将当前日期格式化为字符串并添加到列表 + dateList.add(currentDate.format(formatter)); + // 日期加一天 + currentDate = currentDate.plusDays(1); + } + List list = repairCardApplyMapper.getCheckRecord(checkRecordDto); + // 构建时间段对列表 + List timeRanges = new ArrayList<>(); + LocalDateTime currentEnter = null; + String teamName = null; + + for (CheckRecordDto record : list) { + Integer isActive = record.getIsActive(); + LocalDateTime einTime = record.getEinTime(); + LocalDateTime exitTime = record.getExitTime(); + + if ((isActive == 0 && exitTime == null) || (isActive == 1 && exitTime == null)) { + // 入场事件 + currentEnter = einTime; + teamName = record.getTeamName(); + } else if (isActive == 1 && currentEnter != null && einTime != null && exitTime != null) { + // 出场事件,且前面有未匹配的入场 + // 使用出场记录中的 exit_time,或 fallback 到 ein_time(如果 exit_time 为空) + LocalDateTime actualExit = exitTime != null ? exitTime : einTime; + timeRanges.add(new CheckRecordDto(currentEnter, actualExit, record.getTeamName())); + currentEnter = null; // 匹配完成,清空 + } + // 注意:如果 is_active=0 但前面没有入场,可选择忽略或报错 + } + + // 如果最后还有未出场的,可根据业务决定是否闭合(比如用当前时间) + if (currentEnter != null) { + timeRanges.add(new CheckRecordDto(currentEnter, LocalDateTime.now(), teamName)); + } + HashMap result = new HashMap<>(); + // 判断每个 dateList 中的日期是否落在任意一个 timeRange 内 + for (String dateStr : dateList) { + LocalDate targetDate = LocalDate.parse(dateStr, formatter); + boolean isInRange = false; + for (CheckRecordDto range : timeRanges) { + LocalDate enterDate = range.getEinTime().toLocalDate(); + LocalDate exitDate = range.getExitTime().toLocalDate(); + teamName = range.getTeamName(); + // 判断目标日期是否在 [enterDate, exitDate] 范围内(包含首尾) + if (!targetDate.isBefore(enterDate) && !targetDate.isAfter(exitDate)) { + isInRange = true; + break; + } + } + CheckRecordDto recordDto = new CheckRecordDto(); + // 该时间是否入场 + recordDto.setInRange(isInRange); + recordDto.setTeamName(teamName); + result.put(dateStr, recordDto); + System.out.printf("日期 %s %s在入场时间段内%n", dateStr, isInRange ? "是" : "否"); + } + // 获取该人员在该工程下的打卡记录 + List attPersonRecord = repairCardApplyMapper.attPersonRecord(checkRecordDto); + // 使用 entrySet() 遍历 + for (Map.Entry entry : result.entrySet()) { + if (attPersonRecord.contains(entry.getKey())) { + CheckRecordDto value = entry.getValue(); + // 已打卡 + value.setIsActive(0); + } else { + // 未打卡 + CheckRecordDto value = entry.getValue(); + value.setIsActive(1); + } + } + return result; + } + + @Override + public List workPersonList(RepairCardApplyDto cardApply) { + return repairCardApplyMapper.workPersonList(cardApply); + } + + @Override + public AjaxResult saverepairCardApply(RepairCardApplyDto cardApplyDto) { + cardApplyDto.setApplyUser(SecurityUtils.getUsername()); + Integer num = repairCardApplyMapper.saverepairCardApply(cardApplyDto); + if (num > 0) { + repairCardApplyMapper.saverepairCardDetails(cardApplyDto.getId(), cardApplyDto.getRepairCardRecords()); + return AjaxResult.success("保存成功"); + } else { + return AjaxResult.error("保存失败"); + } + } + + @Override + public Integer delRepairCardApply(RepairCardApplyDto cardApplyDto) { + Integer i = repairCardApplyMapper.delRepairCardApply(cardApplyDto); + if (i > 0) { + return repairCardApplyMapper.delRepairCardRecord(cardApplyDto); + } + return i; + } + + @Override + public AjaxResult audit(RepairCardApplyDto cardApplyDto) { + try { + repairCardApplyMapper.updaterepairCardApply(cardApplyDto); + if (cardApplyDto.getCheckStatus() == 1) { + // 通过 + List repairCardRecords = repairCardApplyMapper.getRepairCardRecordsList(cardApplyDto); + for (RepairCardRecordDto repairCardRecord : repairCardRecords) { + for (String s : repairCardRecord.getRepairDate().split(",")) { + // 新增人员打卡记录(bm_att_person、bm_att_record、bm_repair_card_date) + repairCardRecord.setAttDay(s); + // 数据库设为了必填,所以这里生成一个随机字符串填充 + repairCardRecord.setIdCode(UUID.randomUUID().toString()); + repairCardApplyMapper.insertAttPerson(repairCardRecord); + repairCardApplyMapper.insertAttRecord(repairCardRecord); + repairCardApplyMapper.insertRepairCardDate(repairCardRecord); + } + } + } + return AjaxResult.success("审核成功"); + } catch (Exception e) { + return AjaxResult.error("审核失败"); + } + } + + @Override + public List getCardStatistics(RepairCardApplyDto cardApply) { + return repairCardApplyMapper.getCardStatistics(cardApply); + } +} diff --git a/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/RepairCardApplyMapper.xml b/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/RepairCardApplyMapper.xml new file mode 100644 index 0000000..4c290fb --- /dev/null +++ b/bonus-modules/bonus-bmw/src/main/resources/mapper/bmw/RepairCardApplyMapper.xml @@ -0,0 +1,283 @@ + + + + + INSERT INTO bm_repair_card_apply + + pro_id, + repair_num, + repair_day, + repair_remark, + repair_file, + repair_month, + apply_user, + check_status, + check_user, + check_time, + create_user, + update_user, + apply_time + + + #{proId,jdbcType=INTEGER}, + #{repairNum,jdbcType=INTEGER}, + #{repairDay,jdbcType=INTEGER}, + #{repairRemark,jdbcType=VARCHAR}, + #{repairFile,jdbcType=VARCHAR}, + #{repairMonth,jdbcType=VARCHAR}, + #{applyUser,jdbcType=VARCHAR}, + #{checkStatus,jdbcType=INTEGER}, + #{checkUser,jdbcType=VARCHAR}, + #{checkTime,jdbcType=TIMESTAMP}, + #{createUser,jdbcType=VARCHAR}, + #{updateUser,jdbcType=VARCHAR}, + sysdate() + + + + INSERT INTO bm_repair_card_record ( + apply_id, + worker_id, + id_number, + name, + phone, + pro_id, + team_id, + repair_day, + repair_date + ) + VALUES + + ( + #{applyId,jdbcType=INTEGER}, + #{record.workerId,jdbcType=INTEGER}, + #{record.idNumber,jdbcType=VARCHAR}, + #{record.name,jdbcType=VARCHAR}, + #{record.phone,jdbcType=VARCHAR}, + #{record.proId,jdbcType=INTEGER}, + #{record.teamId,jdbcType=INTEGER}, + #{record.repairDay,jdbcType=INTEGER}, + #{record.repairDate,jdbcType=VARCHAR} + ) + + + + INSERT INTO bm_att_person + + worker_id, + id_number, + name, + pro_id, + pro_name, + team_id, + team_name, + sub_id, + sub_name, + att_day, + is_repair, + device_code, + id, + create_time + + VALUES + + #{workerId}, + #{idNumber}, + #{name}, + #{proId}, + #{proName}, + #{teamId}, + #{teamName}, + #{subId}, + #{subName}, + #{attDay}, + 1, + '补卡', + #{idCode}, + sysdate() + + + + INSERT INTO bm_att_record + + worker_id, + id_number, + name, + pro_id, + pro_name, + team_id, + team_name, + sub_id, + sub_name, + att_day, + is_repair, + id, + device_code, + create_time + + VALUES + + #{workerId}, + #{idNumber}, + #{name}, + #{proId}, + #{proName}, + #{teamId}, + #{teamName}, + #{subId}, + #{subName}, + #{attDay}, + 1, + #{idCode}, + '补卡', + sysdate() + + + + + INSERT INTO bm_repair_card_date + + apply_id, + worker_id, + id_number, + current_day, + create_time + + VALUES + + #{applyId}, + #{workerId}, + #{idNumber}, + #{attDay}, + sysdate() + + + + update bm_repair_card_apply + + check_status = #{checkStatus,jdbcType=INTEGER}, + refuse_remark = #{refuseRemark,jdbcType=VARCHAR}, + check_time = sysdate() + + where id = #{id} + + + delete from bm_repair_card_apply where id = #{id} + + + delete from bm_repair_card_record where apply_id = #{id} + + + + + + + + + + + + \ No newline at end of file From 1c3747751a00d0de36a0a4a06c77e1a0a80acecd Mon Sep 17 00:00:00 2001 From: haozq <1611483981@qq.com> Date: Sat, 16 Aug 2025 16:47:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=80=83=E5=8B=A4=E5=87=BA=E5=85=A5?= =?UTF-8?q?=E5=9C=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/factory/RemoteUakUtilsFallbackFactory.java | 4 +++- .../java/com/bonus/bmw/service/impl/FileUploadUtils.java | 5 +++-- .../src/main/java/com/bonus/urk/servlet/DeviceServlet.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteUakUtilsFallbackFactory.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteUakUtilsFallbackFactory.java index 9021e2f..547a105 100644 --- a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteUakUtilsFallbackFactory.java +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteUakUtilsFallbackFactory.java @@ -38,10 +38,12 @@ public class RemoteUakUtilsFallbackFactory implements FallbackFactory re=service.uploadBast64(file,sourceTable,sourceId,sourceType,prefix,bucketName, SecurityConstants.INNER); + FileVo fileVo=new FileVo(file,sourceTable,sourceType,prefix,bucketName,sourceId); + R re=service.uploadBast64(fileVo, SecurityConstants.INNER); if(re.getCode()==R.SUCCESS){ - UploadFileVo vo=re.getData(); return re.getData(); } return null; diff --git a/bonus-modules/bonus-urk/src/main/java/com/bonus/urk/servlet/DeviceServlet.java b/bonus-modules/bonus-urk/src/main/java/com/bonus/urk/servlet/DeviceServlet.java index 2169a0a..b40da4b 100644 --- a/bonus-modules/bonus-urk/src/main/java/com/bonus/urk/servlet/DeviceServlet.java +++ b/bonus-modules/bonus-urk/src/main/java/com/bonus/urk/servlet/DeviceServlet.java @@ -72,7 +72,7 @@ public class DeviceServlet extends HttpServlet { resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.ERROR_NO_CMD); return; } - redisUtils.setCacheObject("att_dev:status",1,600L, TimeUnit.SECONDS); + redisUtils.setCacheObject("att_dev:status:"+deviceVo.getDevCode(),1,600L, TimeUnit.SECONDS); String asTransId = req.getHeader(Constant.DEVICE_HEADER_TRANS_ID); String requestCode = req.getHeader(Constant.DEVICE_HEADER_REQUEST_CODE); // zSetOperations.add(CacheConstant.DEVICE_ONLINE_SET_CACHE, deviceVo.getDevCode(), System.currentTimeMillis());