优化,修改人员管理模块相关代码逻辑
This commit is contained in:
@ -13,7 +13,6 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.web.core.BaseController;
|
import org.dromara.common.web.core.BaseController;
|
||||||
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
|
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
|
||||||
import org.dromara.project.domain.resp.workerdailyreport.WorkerDailyReportReissueResp;
|
|
||||||
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
|
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
|
||||||
import org.dromara.project.service.IBusWorkerDailyReportService;
|
import org.dromara.project.service.IBusWorkerDailyReportService;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -44,15 +43,6 @@ public class BusWorkerDailyReportController extends BaseController {
|
|||||||
return busWorkerDailyReportService.queryPageList(req, pageQuery);
|
return busWorkerDailyReportService.queryPageList(req, pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询施工人员补交日报列表
|
|
||||||
*/
|
|
||||||
@SaCheckPermission("project:workerDailyReport:list")
|
|
||||||
@GetMapping("/list/reissue")
|
|
||||||
public TableDataInfo<WorkerDailyReportReissueResp> listReissue(WorkerDailyReportQueryReq req, PageQuery pageQuery) {
|
|
||||||
return busWorkerDailyReportService.queryReissuePageList(req, pageQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出施工人员日报列表
|
* 导出施工人员日报列表
|
||||||
*/
|
*/
|
||||||
@ -76,18 +66,6 @@ public class BusWorkerDailyReportController extends BaseController {
|
|||||||
return R.ok(busWorkerDailyReportService.queryById(id));
|
return R.ok(busWorkerDailyReportService.queryById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取施工人员补交日报详细信息
|
|
||||||
*
|
|
||||||
* @param id 主键
|
|
||||||
*/
|
|
||||||
@SaCheckPermission("project:workerDailyReport:query")
|
|
||||||
@GetMapping("/reissue/{id}")
|
|
||||||
public R<WorkerDailyReportReissueResp> getReissueInfo(@NotNull(message = "主键不能为空")
|
|
||||||
@PathVariable Long id) {
|
|
||||||
return R.ok(busWorkerDailyReportService.queryReissueById(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除施工人员日报
|
* 删除施工人员日报
|
||||||
*
|
*
|
||||||
|
@ -55,6 +55,11 @@ public class BusConstructionUser extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private Long teamId;
|
private Long teamId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班组名称
|
||||||
|
*/
|
||||||
|
private String teamName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态(0在职 1离职)
|
* 状态(0在职 1离职)
|
||||||
*/
|
*/
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
package org.dromara.project.domain.bo;
|
|
||||||
|
|
||||||
import org.dromara.project.domain.BusWorkerDailyReport;
|
|
||||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
|
||||||
import org.dromara.common.core.validate.EditGroup;
|
|
||||||
import io.github.linpeilie.annotations.AutoMapper;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import jakarta.validation.constraints.*;
|
|
||||||
import java.util.Date;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 施工人员日报业务对象 bus_worker_daily_report
|
|
||||||
*
|
|
||||||
* @author lcj
|
|
||||||
* @date 2025-04-09
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@AutoMapper(target = BusWorkerDailyReport.class, reverseConvertGenerate = false)
|
|
||||||
public class BusWorkerDailyReportBo extends BaseEntity {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 主键id
|
|
||||||
*/
|
|
||||||
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 项目id
|
|
||||||
*/
|
|
||||||
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private Long projectId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 班组id
|
|
||||||
*/
|
|
||||||
private Long teamId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 申请人id
|
|
||||||
*/
|
|
||||||
@NotNull(message = "申请人id不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private Long userId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 申请人名字
|
|
||||||
*/
|
|
||||||
private String userName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 今日完成工作
|
|
||||||
*/
|
|
||||||
private String todayCompletedWork;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 未完成工作
|
|
||||||
*/
|
|
||||||
private String unfinishedWork;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 明日工作
|
|
||||||
*/
|
|
||||||
private String tomorrowWork;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 需协调与帮助
|
|
||||||
*/
|
|
||||||
private String coordinationHelp;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 附件
|
|
||||||
*/
|
|
||||||
private String file;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,24 @@
|
|||||||
|
package org.dromara.project.domain.enums;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author lcj
|
||||||
|
* @date 2025/4/10 11:16
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum WageMeasureUnitEnum {
|
||||||
|
|
||||||
|
TIME("计时:元/每天", "1"),
|
||||||
|
PIECE("计件:元/每个", "2");
|
||||||
|
|
||||||
|
private final String text;
|
||||||
|
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
WageMeasureUnitEnum(String text, String value) {
|
||||||
|
this.text = text;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,24 +0,0 @@
|
|||||||
package org.dromara.project.domain.enums;
|
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author lcj
|
|
||||||
* @date 2025/4/9 17:23
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
public enum WorkerDailyReportReissueEnum {
|
|
||||||
|
|
||||||
UNREISSUE("不是补卡", 1),
|
|
||||||
REISSUE("是补卡", 2);
|
|
||||||
|
|
||||||
private final String text;
|
|
||||||
|
|
||||||
private final int value;
|
|
||||||
|
|
||||||
WorkerDailyReportReissueEnum(String text, int value) {
|
|
||||||
this.text = text;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -2,9 +2,11 @@ package org.dromara.project.domain.req.attendance;
|
|||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author lcj
|
* @author lcj
|
||||||
@ -16,10 +18,31 @@ public class AttendanceQueryTwoWeekReq implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 3193787736889938829L;
|
private static final long serialVersionUID = 3193787736889938829L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 人员姓名
|
||||||
|
*/
|
||||||
|
private String userName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目id
|
* 项目id
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "项目id不能为空")
|
@NotNull(message = "项目id不能为空")
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班组id
|
||||||
|
*/
|
||||||
|
private Long teamId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工种
|
||||||
|
*/
|
||||||
|
private String typeOfWork;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打卡日期
|
||||||
|
*/
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private Date clockDate;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,6 @@ public class ConstructionUserAttendanceQueryReq implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 打卡月份
|
* 打卡月份
|
||||||
*/
|
*/
|
||||||
private String clockMonth;
|
private String clockDate;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,11 @@ public class ConstructionUserQueryReq implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Long notTeamId;
|
private Long notTeamId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班组名称
|
||||||
|
*/
|
||||||
|
private String teamName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态(0在职 1离职)
|
* 状态(0在职 1离职)
|
||||||
*/
|
*/
|
||||||
|
@ -48,4 +48,9 @@ public class WorkerDailyReportQueryReq implements Serializable {
|
|||||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
private Date reportDate;
|
private Date reportDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为补卡(1不是 2是)
|
||||||
|
*/
|
||||||
|
private Long isResubmit;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.dromara.project.domain.req.workwage;
|
package org.dromara.project.domain.req.workwage;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
@ -18,11 +19,13 @@ public class WorkWageCreateReq implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 项目id
|
* 项目id
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "项目id不能为空")
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工种
|
* 工种
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "工种不能为空")
|
||||||
private String workType;
|
private String workType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,18 +36,15 @@ public class WorkWageCreateReq implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 工资计算方式(1计时 2计件)
|
* 工资计算方式(1计时 2计件)
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "工资计算方式不能为空")
|
||||||
private String wageCalculationType;
|
private String wageCalculationType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工资标准
|
* 工资标准
|
||||||
*/
|
*/
|
||||||
|
@NotNull(message = "工资标准不能为空")
|
||||||
private Long wage;
|
private Long wage;
|
||||||
|
|
||||||
/**
|
|
||||||
* 工资计量单位
|
|
||||||
*/
|
|
||||||
private String wageMeasureUnit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
|
@ -25,31 +25,16 @@ public class WorkWageUpdateReq implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
|
||||||
/**
|
|
||||||
* 工种
|
|
||||||
*/
|
|
||||||
private String workType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否是特种兵(1是 2否)
|
* 是否是特种兵(1是 2否)
|
||||||
*/
|
*/
|
||||||
private String isSpecialType;
|
private String isSpecialType;
|
||||||
|
|
||||||
/**
|
|
||||||
* 工资计算方式(1计时 2计件)
|
|
||||||
*/
|
|
||||||
private String wageCalculationType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工资标准
|
* 工资标准
|
||||||
*/
|
*/
|
||||||
private Long wage;
|
private Long wage;
|
||||||
|
|
||||||
/**
|
|
||||||
* 工资计量单位
|
|
||||||
*/
|
|
||||||
private String wageMeasureUnit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
|
@ -75,9 +75,10 @@ public class BusConstructionUserVo implements Serializable {
|
|||||||
private Long teamId;
|
private Long teamId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 班组
|
* 班组名称
|
||||||
*/
|
*/
|
||||||
private BusProjectTeamVo teamVo;
|
@ExcelProperty(value = "班组名称")
|
||||||
|
private String teamName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态(0在职 1离职)
|
* 状态(0在职 1离职)
|
||||||
|
@ -52,6 +52,11 @@ public class BusProjectTeamVo implements Serializable {
|
|||||||
@ExcelDictFormat(readConverterExp = "0=范围内打卡,1=任何地点打卡")
|
@ExcelDictFormat(readConverterExp = "0=范围内打卡,1=任何地点打卡")
|
||||||
private String isClockIn;
|
private String isClockIn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班组人数
|
||||||
|
*/
|
||||||
|
private Long peopleNumber;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
|
@ -77,6 +77,11 @@ public class BusWorkerDailyReportVo implements Serializable {
|
|||||||
@ExcelProperty(value = "需协调与帮助")
|
@ExcelProperty(value = "需协调与帮助")
|
||||||
private String coordinationHelp;
|
private String coordinationHelp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为补卡(1不是 2是)
|
||||||
|
*/
|
||||||
|
private Long isResubmit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 补交理由
|
* 补交理由
|
||||||
*/
|
*/
|
||||||
@ -95,6 +100,11 @@ public class BusWorkerDailyReportVo implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 附件
|
* 附件
|
||||||
*/
|
*/
|
||||||
|
private List<String> fileList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件id
|
||||||
|
*/
|
||||||
private String file;
|
private String file;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,6 +45,14 @@ public interface IBusConstructionBlacklistService extends IService<BusConstructi
|
|||||||
*/
|
*/
|
||||||
List<BusConstructionBlacklistVo> queryList(ConstructionBlacklistQueryReq req);
|
List<BusConstructionBlacklistVo> queryList(ConstructionBlacklistQueryReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据项目id查询黑名单用户id列表
|
||||||
|
*
|
||||||
|
* @param projectId 项目id
|
||||||
|
* @return 黑名单用户id列表
|
||||||
|
*/
|
||||||
|
List<Long> queryIdListByProjectId(Long projectId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增黑名单
|
* 新增黑名单
|
||||||
*
|
*
|
||||||
|
@ -7,7 +7,6 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.project.domain.BusWorkerDailyReport;
|
import org.dromara.project.domain.BusWorkerDailyReport;
|
||||||
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
|
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
|
||||||
import org.dromara.project.domain.resp.workerdailyreport.WorkerDailyReportReissueResp;
|
|
||||||
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
|
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -29,14 +28,6 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
|
|||||||
*/
|
*/
|
||||||
BusWorkerDailyReportVo queryById(Long id);
|
BusWorkerDailyReportVo queryById(Long id);
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询施工人员日报补报
|
|
||||||
*
|
|
||||||
* @param id 主键
|
|
||||||
* @return 施工人员日报补报
|
|
||||||
*/
|
|
||||||
WorkerDailyReportReissueResp queryReissueById(Long id);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询施工人员日报列表
|
* 分页查询施工人员日报列表
|
||||||
*
|
*
|
||||||
@ -46,15 +37,6 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
|
|||||||
*/
|
*/
|
||||||
TableDataInfo<BusWorkerDailyReportVo> queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery);
|
TableDataInfo<BusWorkerDailyReportVo> queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery);
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询施工人员日报补报列表
|
|
||||||
*
|
|
||||||
* @param req 查询条件
|
|
||||||
* @param pageQuery 分页参数
|
|
||||||
* @return 施工人员日报补报分页列表
|
|
||||||
*/
|
|
||||||
TableDataInfo<WorkerDailyReportReissueResp> queryReissuePageList(WorkerDailyReportQueryReq req, PageQuery pageQuery);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询符合条件的施工人员日报列表
|
* 查询符合条件的施工人员日报列表
|
||||||
*
|
*
|
||||||
@ -80,14 +62,6 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
|
|||||||
*/
|
*/
|
||||||
BusWorkerDailyReportVo getVo(BusWorkerDailyReport workerDailyReport);
|
BusWorkerDailyReportVo getVo(BusWorkerDailyReport workerDailyReport);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取施工人员日报补报视图对象
|
|
||||||
*
|
|
||||||
* @param workerDailyReport 施工人员日报对象
|
|
||||||
* @return 施工人员日报补报视图对象
|
|
||||||
*/
|
|
||||||
WorkerDailyReportReissueResp getReissueVo(BusWorkerDailyReport workerDailyReport);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取施工人员日报列表查询条件封装
|
* 获取施工人员日报列表查询条件封装
|
||||||
*
|
*
|
||||||
@ -104,12 +78,4 @@ public interface IBusWorkerDailyReportService extends IService<BusWorkerDailyRep
|
|||||||
*/
|
*/
|
||||||
Page<BusWorkerDailyReportVo> getVoPage(Page<BusWorkerDailyReport> workerDailyReportPage);
|
Page<BusWorkerDailyReportVo> getVoPage(Page<BusWorkerDailyReport> workerDailyReportPage);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取施工人员日报补报分页对象视图
|
|
||||||
*
|
|
||||||
* @param workerDailyReportPage 施工人员日报列表分页对象
|
|
||||||
* @return 施工人员日报列表分页对象视图
|
|
||||||
*/
|
|
||||||
Page<WorkerDailyReportReissueResp> getReissueVoPage(Page<BusWorkerDailyReport> workerDailyReportPage);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package org.dromara.project.service.impl;
|
package org.dromara.project.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -14,7 +15,7 @@ import org.dromara.common.core.utils.StringUtils;
|
|||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.project.domain.BusAttendance;
|
import org.dromara.project.domain.BusAttendance;
|
||||||
import org.dromara.project.domain.BusLeave;
|
import org.dromara.project.domain.BusConstructionUser;
|
||||||
import org.dromara.project.domain.BusProjectTeamMember;
|
import org.dromara.project.domain.BusProjectTeamMember;
|
||||||
import org.dromara.project.domain.enums.AttendanceClockStatusEnum;
|
import org.dromara.project.domain.enums.AttendanceClockStatusEnum;
|
||||||
import org.dromara.project.domain.enums.AttendanceCommuterEnum;
|
import org.dromara.project.domain.enums.AttendanceCommuterEnum;
|
||||||
@ -54,10 +55,10 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
private IBusProjectTeamMemberService projectTeamMemberService;
|
private IBusProjectTeamMemberService projectTeamMemberService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IBusLeaveService leaveService;
|
private IBusConstructionUserService constructionUserService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IBusConstructionUserService constructionUserService;
|
private IBusConstructionBlacklistService constructionBlacklistService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询考勤
|
* 查询考勤
|
||||||
@ -99,42 +100,46 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
if (projectService.getById(projectId) == null) {
|
if (projectService.getById(projectId) == null) {
|
||||||
throw new ServiceException("项目信息不存在", HttpStatus.NOT_FOUND);
|
throw new ServiceException("项目信息不存在", HttpStatus.NOT_FOUND);
|
||||||
}
|
}
|
||||||
// 获取两周前的日期
|
// 1. 处理日期区间
|
||||||
LocalDate twoWeeksAgoLocal = LocalDate.now().minusWeeks(2);
|
Date clockDate = req.getClockDate();
|
||||||
// 2. 转成Date(时分秒会被置为 00:00:00)
|
LocalDate startLocal;
|
||||||
Date twoWeeksDate = Date.from(twoWeeksAgoLocal.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
LocalDate endLocal;
|
||||||
// 获取两周内的考勤记录
|
if (clockDate != null) {
|
||||||
|
// 检查 clockDate 不能大于当前日期
|
||||||
|
if (DateUtil.compare(clockDate, new Date()) > 0) {
|
||||||
|
throw new ServiceException("日期不能大于当前日期", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
// 以传入的 clockDate 为结束日期
|
||||||
|
endLocal = clockDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
|
} else {
|
||||||
|
// 如果未传入,则以当前日期为结束日期
|
||||||
|
endLocal = LocalDate.now();
|
||||||
|
}
|
||||||
|
// 计算开始日期为结束日期减两周
|
||||||
|
startLocal = endLocal.minusWeeks(2);
|
||||||
|
// 如果数据库中的 clockDate 只存储日期(时分秒置为 00:00:00),直接转换即可
|
||||||
|
Date startDate = Date.from(startLocal.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||||
|
Date endDate = Date.from(endLocal.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||||
|
// 构造查询条件 clockDate 在 [startDate, endDate] 区间内
|
||||||
LambdaQueryWrapper<BusAttendance> lqw = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<BusAttendance> lqw = new LambdaQueryWrapper<>();
|
||||||
lqw.eq(BusAttendance::getProjectId, projectId)
|
lqw.eq(BusAttendance::getProjectId, projectId)
|
||||||
.ge(BusAttendance::getClockDate, twoWeeksDate)
|
.eq(StringUtils.isNotEmpty(req.getUserName()), BusAttendance::getUserName, req.getUserName())
|
||||||
|
.between(BusAttendance::getClockDate, startDate, endDate)
|
||||||
.orderByDesc(BusAttendance::getClockDate);
|
.orderByDesc(BusAttendance::getClockDate);
|
||||||
|
// 构建查询用户相关信息查询条件
|
||||||
|
List<Long> userIdList = constructionUserService.lambdaQuery()
|
||||||
|
.eq(BusConstructionUser::getProjectId, projectId)
|
||||||
|
.eq(req.getTeamId() != null, BusConstructionUser::getTeamId, req.getTeamId())
|
||||||
|
.eq(req.getTypeOfWork() != null, BusConstructionUser::getTypeOfWork, req.getTypeOfWork())
|
||||||
|
.notIn(BusConstructionUser::getId, constructionBlacklistService.queryIdListByProjectId(projectId))
|
||||||
|
.list().stream().map(BusConstructionUser::getId).toList();
|
||||||
|
lqw.in(CollUtil.isNotEmpty(userIdList), BusAttendance::getUserId, userIdList);
|
||||||
Map<Date, List<BusAttendance>> dateListMap = this.list(lqw)
|
Map<Date, List<BusAttendance>> dateListMap = this.list(lqw)
|
||||||
.stream().collect(Collectors.groupingBy(BusAttendance::getClockDate));
|
.stream().collect(Collectors.groupingBy(BusAttendance::getClockDate));
|
||||||
// 查询两周内的请假记录
|
|
||||||
List<BusLeave> leaveList = leaveService.lambdaQuery()
|
|
||||||
.eq(BusLeave::getProjectId, projectId)
|
|
||||||
.ge(BusLeave::getEndTime, twoWeeksDate) // 请假结束时间在两周前之后的
|
|
||||||
.le(BusLeave::getStartTime, new Date()) // 请假开始时间在当前时间之前的
|
|
||||||
.list();
|
|
||||||
// 构造一个 Map:Key -> LocalDate(请假生效的日期),Value -> 当天请假的用户ID集合(Set 用于去重)
|
|
||||||
Map<LocalDate, Set<Long>> leaveMap = new HashMap<>();
|
|
||||||
LocalDate todayLocal = LocalDate.now();
|
|
||||||
for (BusLeave leave : leaveList) {
|
|
||||||
// 将请假记录的开始和结束时间转换为 LocalDate
|
|
||||||
LocalDate leaveStart = leave.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
||||||
LocalDate leaveEnd = leave.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
||||||
// 计算在两周范围内的有效区间
|
|
||||||
LocalDate effectiveStart = leaveStart.isBefore(twoWeeksAgoLocal) ? twoWeeksAgoLocal : leaveStart;
|
|
||||||
LocalDate effectiveEnd = leaveEnd.isAfter(todayLocal) ? todayLocal : leaveEnd;
|
|
||||||
// 对有效区间内的每一天加入该请假用户
|
|
||||||
for (LocalDate date = effectiveStart; !date.isAfter(effectiveEnd); date = date.plusDays(1)) {
|
|
||||||
leaveMap.computeIfAbsent(date, k -> new HashSet<>()).add(leave.getUserId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 遍历每个日期,计算考勤状态
|
// 遍历每个日期,计算考勤状态
|
||||||
List<AttendanceClockDateForTwoWeekResp> respList = new ArrayList<>();
|
List<AttendanceClockDateForTwoWeekResp> respList = new ArrayList<>();
|
||||||
// 遍历从两周前到今天的所有日期
|
// 遍历从两周前到今天的所有日期
|
||||||
for (LocalDate localDate = twoWeeksAgoLocal; !localDate.isAfter(todayLocal); localDate = localDate.plusDays(1)) {
|
for (LocalDate localDate = startLocal; !localDate.isAfter(endLocal); localDate = localDate.plusDays(1)) {
|
||||||
AttendanceClockDateForTwoWeekResp resp = new AttendanceClockDateForTwoWeekResp();
|
AttendanceClockDateForTwoWeekResp resp = new AttendanceClockDateForTwoWeekResp();
|
||||||
// 转换为 Date 类型(时分秒为 00:00:00)
|
// 转换为 Date 类型(时分秒为 00:00:00)
|
||||||
Date currentDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
Date currentDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||||
@ -152,16 +157,21 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
for (List<BusAttendance> userAttendanceList : userAttendanceMap.values()) {
|
for (List<BusAttendance> userAttendanceList : userAttendanceMap.values()) {
|
||||||
String clockInStatus = null;
|
String clockInStatus = null;
|
||||||
String clockOutStatus = null;
|
String clockOutStatus = null;
|
||||||
|
String clockAllDayStatus = null;
|
||||||
// 遍历同一用户的考勤记录,分别获取上下班状态
|
// 遍历同一用户的考勤记录,分别获取上下班状态
|
||||||
for (BusAttendance a : userAttendanceList) {
|
for (BusAttendance a : userAttendanceList) {
|
||||||
if (AttendanceCommuterEnum.CLOCKIN.getValue().equals(a.getCommuter())) {
|
if (AttendanceCommuterEnum.CLOCKIN.getValue().equals(a.getCommuter())) {
|
||||||
clockInStatus = a.getClockStatus();
|
clockInStatus = a.getClockStatus();
|
||||||
} else if (AttendanceCommuterEnum.CLOCKOUT.getValue().equals(a.getCommuter())) {
|
} else if (AttendanceCommuterEnum.CLOCKOUT.getValue().equals(a.getCommuter())) {
|
||||||
clockOutStatus = a.getClockStatus();
|
clockOutStatus = a.getClockStatus();
|
||||||
|
} else if (AttendanceCommuterEnum.ALLDAY.getValue().equals(a.getCommuter())) {
|
||||||
|
clockAllDayStatus = a.getClockStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 统计考勤状态
|
// 统计考勤状态
|
||||||
if ((AttendanceClockStatusEnum.NORMAL.getValue().equals(clockInStatus)
|
if (AttendanceClockStatusEnum.LEAVE.getValue().equals(clockAllDayStatus)) {
|
||||||
|
leave++;
|
||||||
|
} else if ((AttendanceClockStatusEnum.NORMAL.getValue().equals(clockInStatus)
|
||||||
|| AttendanceClockStatusEnum.REISSUE.getValue().equals(clockInStatus))
|
|| AttendanceClockStatusEnum.REISSUE.getValue().equals(clockInStatus))
|
||||||
&& (AttendanceClockStatusEnum.NORMAL.getValue().equals(clockOutStatus)
|
&& (AttendanceClockStatusEnum.NORMAL.getValue().equals(clockOutStatus)
|
||||||
|| AttendanceClockStatusEnum.REISSUE.getValue().equals(clockOutStatus))) {
|
|| AttendanceClockStatusEnum.REISSUE.getValue().equals(clockOutStatus))) {
|
||||||
@ -169,15 +179,12 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
} else if (AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockInStatus)
|
} else if (AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockInStatus)
|
||||||
&& AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockOutStatus)) {
|
&& AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockOutStatus)) {
|
||||||
absenteeism++;
|
absenteeism++;
|
||||||
} else {
|
} else if (AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockInStatus)
|
||||||
|
|| AttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockOutStatus)) {
|
||||||
halfAttendance++;
|
halfAttendance++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Set<Long> leaveUserSet = leaveMap.get(localDate);
|
|
||||||
if (leaveUserSet != null) {
|
|
||||||
leave = leaveUserSet.size();
|
|
||||||
}
|
|
||||||
resp.setAttendance(attendance);
|
resp.setAttendance(attendance);
|
||||||
resp.setHalfAttendance(halfAttendance);
|
resp.setHalfAttendance(halfAttendance);
|
||||||
resp.setAbsenteeism(absenteeism);
|
resp.setAbsenteeism(absenteeism);
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package org.dromara.project.service.impl;
|
package org.dromara.project.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -30,7 +29,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,6 +88,20 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
|
|||||||
return baseMapper.selectVoList(lqw);
|
return baseMapper.selectVoList(lqw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据项目id查询黑名单用户id列表
|
||||||
|
*
|
||||||
|
* @param projectId 项目id
|
||||||
|
* @return 黑名单用户id列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<Long> queryIdListByProjectId(Long projectId) {
|
||||||
|
LambdaQueryWrapper<BusConstructionBlacklist> lqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class)
|
||||||
|
.select(BusConstructionBlacklist::getUserId)
|
||||||
|
.eq(projectId != null, BusConstructionBlacklist::getProjectId, projectId);
|
||||||
|
return this.listObjs(lqw, obj -> (Long) obj);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增黑名单
|
* 新增黑名单
|
||||||
*
|
*
|
||||||
@ -120,28 +132,6 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
|
|||||||
if (!result) {
|
if (!result) {
|
||||||
throw new ServiceException("新增黑名单失败,数据库异常", HttpStatus.ERROR);
|
throw new ServiceException("新增黑名单失败,数据库异常", HttpStatus.ERROR);
|
||||||
}
|
}
|
||||||
// 如果加入黑名单用户已在班组,则移除
|
|
||||||
Long teamId = constructionUser.getTeamId();
|
|
||||||
if (teamId != null) {
|
|
||||||
// 修改用户team_id字段
|
|
||||||
LambdaUpdateWrapper<BusConstructionUser> constructionUserLqw = Wrappers.lambdaUpdate(BusConstructionUser.class)
|
|
||||||
.eq(BusConstructionUser::getId, userId)
|
|
||||||
.set(BusConstructionUser::getTeamId, null)
|
|
||||||
.set(BusConstructionUser::getLeaveDate, new Date());
|
|
||||||
boolean update = constructionUserService.update(constructionUserLqw);
|
|
||||||
if (!update) {
|
|
||||||
throw new ServiceException("用户退场失败,数据库异常", HttpStatus.ERROR);
|
|
||||||
}
|
|
||||||
// 移除用户与班组关联
|
|
||||||
LambdaQueryWrapper<BusProjectTeamMember> projectTeamMemberLqw = Wrappers.lambdaQuery(BusProjectTeamMember.class)
|
|
||||||
.eq(BusProjectTeamMember::getProjectId, req.getProjectId())
|
|
||||||
.eq(BusProjectTeamMember::getTeamId, teamId)
|
|
||||||
.eq(BusProjectTeamMember::getMemberId, userId);
|
|
||||||
boolean remove = projectTeamMemberService.remove(projectTeamMemberLqw);
|
|
||||||
if (!remove) {
|
|
||||||
throw new ServiceException("用户退场失败,数据库异常", HttpStatus.ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return constructionBlacklist.getId();
|
return constructionBlacklist.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,13 +148,16 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
|
|||||||
if (projectService.getById(projectId) == null) {
|
if (projectService.getById(projectId) == null) {
|
||||||
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
|
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
|
||||||
}
|
}
|
||||||
// 判断是否已经存在该用户
|
// 判断用户是否退场
|
||||||
LambdaQueryWrapper<BusConstructionBlacklist> lqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class)
|
Long count = projectTeamMemberService.lambdaQuery()
|
||||||
.eq(BusConstructionBlacklist::getProjectId, projectId)
|
.eq(BusProjectTeamMember::getProjectId, projectId)
|
||||||
.eq(BusConstructionBlacklist::getUserId, userId);
|
.eq(BusProjectTeamMember::getMemberId, userId)
|
||||||
if (this.count(lqw) > 0) {
|
.count();
|
||||||
throw new ServiceException("该用户已经存在", HttpStatus.BAD_REQUEST);
|
if (count > 0) {
|
||||||
|
throw new ServiceException("请将施工人员退场后,再加入黑名单", HttpStatus.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
|
// 判断是否已经存在该用户
|
||||||
|
this.validUserInBlacklist(userId, projectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -214,6 +207,7 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
|
|||||||
LambdaQueryWrapper<BusConstructionBlacklist> lqw = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<BusConstructionBlacklist> lqw = new LambdaQueryWrapper<>();
|
||||||
Long id = req.getId();
|
Long id = req.getId();
|
||||||
Long userId = req.getUserId();
|
Long userId = req.getUserId();
|
||||||
|
Long projectId = req.getProjectId();
|
||||||
String userName = req.getUserName();
|
String userName = req.getUserName();
|
||||||
String sfzNumber = req.getSfzNumber();
|
String sfzNumber = req.getSfzNumber();
|
||||||
// 模糊查询
|
// 模糊查询
|
||||||
@ -222,6 +216,7 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
|
|||||||
// 精确查询
|
// 精确查询
|
||||||
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionBlacklist::getId, id);
|
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionBlacklist::getId, id);
|
||||||
lqw.eq(ObjectUtils.isNotEmpty(userId), BusConstructionBlacklist::getUserId, userId);
|
lqw.eq(ObjectUtils.isNotEmpty(userId), BusConstructionBlacklist::getUserId, userId);
|
||||||
|
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusConstructionBlacklist::getProjectId, projectId);
|
||||||
return lqw;
|
return lqw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,6 @@ import org.dromara.project.domain.resp.constructionuser.ConstructionUserAttendan
|
|||||||
import org.dromara.project.domain.resp.constructionuser.ConstructionUserAttendanceTotalResp;
|
import org.dromara.project.domain.resp.constructionuser.ConstructionUserAttendanceTotalResp;
|
||||||
import org.dromara.project.domain.vo.BusConstructionUserVo;
|
import org.dromara.project.domain.vo.BusConstructionUserVo;
|
||||||
import org.dromara.project.domain.vo.BusContractorVo;
|
import org.dromara.project.domain.vo.BusContractorVo;
|
||||||
import org.dromara.project.domain.vo.BusProjectTeamVo;
|
|
||||||
import org.dromara.project.mapper.BusConstructionUserMapper;
|
import org.dromara.project.mapper.BusConstructionUserMapper;
|
||||||
import org.dromara.project.service.*;
|
import org.dromara.project.service.*;
|
||||||
import org.dromara.system.domain.vo.SysOssVo;
|
import org.dromara.system.domain.vo.SysOssVo;
|
||||||
@ -65,9 +64,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
@Resource
|
@Resource
|
||||||
private IBusProjectTeamMemberService projectTeamMemberService;
|
private IBusProjectTeamMemberService projectTeamMemberService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IBusProjectTeamService projectTeamService;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ISysOssService ossService;
|
private ISysOssService ossService;
|
||||||
|
|
||||||
@ -244,8 +240,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
BeanUtils.copyProperties(constructionUserVo, constructionUserExportVo);
|
BeanUtils.copyProperties(constructionUserVo, constructionUserExportVo);
|
||||||
// 关联分包公司信息
|
// 关联分包公司信息
|
||||||
constructionUserExportVo.setContractorName(constructionUserVo.getContractorVo().getName());
|
constructionUserExportVo.setContractorName(constructionUserVo.getContractorVo().getName());
|
||||||
// 关联班组信息
|
|
||||||
constructionUserExportVo.setTeamName(constructionUserVo.getTeamVo().getTeamName());
|
|
||||||
// 关联项目信息
|
// 关联项目信息
|
||||||
Long projectId = constructionUserVo.getProjectId();
|
Long projectId = constructionUserVo.getProjectId();
|
||||||
String projectName = null;
|
String projectName = null;
|
||||||
@ -594,11 +588,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
if (StringUtils.isNotBlank(facePic)) {
|
if (StringUtils.isNotBlank(facePic)) {
|
||||||
constructionUserVo.setFacePicUrl(ossService.getById(Long.parseLong(facePic)).getUrl());
|
constructionUserVo.setFacePicUrl(ossService.getById(Long.parseLong(facePic)).getUrl());
|
||||||
}
|
}
|
||||||
// 关联查询班组信息
|
|
||||||
Long teamId = constructionUser.getTeamId();
|
|
||||||
if (teamId != null) {
|
|
||||||
constructionUserVo.setTeamVo(projectTeamService.queryById(teamId));
|
|
||||||
}
|
|
||||||
// 关联查询薪水标准
|
// 关联查询薪水标准
|
||||||
Long projectId = constructionUser.getProjectId();
|
Long projectId = constructionUser.getProjectId();
|
||||||
String typeOfWork = constructionUser.getTypeOfWork();
|
String typeOfWork = constructionUser.getTypeOfWork();
|
||||||
@ -635,6 +624,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
Long contractorId = req.getContractorId();
|
Long contractorId = req.getContractorId();
|
||||||
Long teamId = req.getTeamId();
|
Long teamId = req.getTeamId();
|
||||||
Long notTeamId = req.getNotTeamId();
|
Long notTeamId = req.getNotTeamId();
|
||||||
|
String teamName = req.getTeamName();
|
||||||
String status = req.getStatus();
|
String status = req.getStatus();
|
||||||
String isPinch = req.getIsPinch();
|
String isPinch = req.getIsPinch();
|
||||||
String phone = req.getPhone();
|
String phone = req.getPhone();
|
||||||
@ -660,6 +650,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
lqw.like(StringUtils.isNotBlank(yhkNumber), BusConstructionUser::getYhkNumber, yhkNumber);
|
lqw.like(StringUtils.isNotBlank(yhkNumber), BusConstructionUser::getYhkNumber, yhkNumber);
|
||||||
lqw.like(StringUtils.isNotBlank(yhkOpeningBank), BusConstructionUser::getYhkOpeningBank, yhkOpeningBank);
|
lqw.like(StringUtils.isNotBlank(yhkOpeningBank), BusConstructionUser::getYhkOpeningBank, yhkOpeningBank);
|
||||||
lqw.like(StringUtils.isNotBlank(yhkCardholder), BusConstructionUser::getYhkCardholder, yhkCardholder);
|
lqw.like(StringUtils.isNotBlank(yhkCardholder), BusConstructionUser::getYhkCardholder, yhkCardholder);
|
||||||
|
lqw.like(StringUtils.isNotBlank(teamName), BusConstructionUser::getTeamName, teamName);
|
||||||
// 精确查询
|
// 精确查询
|
||||||
lqw.eq(StringUtils.isNotBlank(status), BusConstructionUser::getStatus, status);
|
lqw.eq(StringUtils.isNotBlank(status), BusConstructionUser::getStatus, status);
|
||||||
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionUser::getId, id);
|
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionUser::getId, id);
|
||||||
@ -679,16 +670,13 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
.or().isNull(BusConstructionUser::getTeamId));
|
.or().isNull(BusConstructionUser::getTeamId));
|
||||||
}
|
}
|
||||||
// 查询当前项目下的黑名单人员
|
// 查询当前项目下的黑名单人员
|
||||||
LambdaQueryWrapper<BusConstructionBlacklist> blacklistLqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class)
|
|
||||||
.select(BusConstructionBlacklist::getUserId);
|
|
||||||
if (projectId != null) {
|
if (projectId != null) {
|
||||||
blacklistLqw.eq(BusConstructionBlacklist::getProjectId, projectId);
|
List<Long> blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId);
|
||||||
}
|
|
||||||
List<Long> blackUserIdList = constructionBlacklistService.listObjs(blacklistLqw, obj -> (Long) obj);
|
|
||||||
// 查询结果移除黑名单人员
|
// 查询结果移除黑名单人员
|
||||||
if (CollUtil.isNotEmpty(blackUserIdList)) {
|
if (CollUtil.isNotEmpty(blackUserIdList)) {
|
||||||
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
|
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return lqw;
|
return lqw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -713,11 +701,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
Map<Long, List<BusContractor>> contractorIdContractorMap = contractorService.listByIds(contractorIdSet).stream()
|
Map<Long, List<BusContractor>> contractorIdContractorMap = contractorService.listByIds(contractorIdSet).stream()
|
||||||
.collect(Collectors.groupingBy(BusContractor::getId));
|
.collect(Collectors.groupingBy(BusContractor::getId));
|
||||||
// 关联查询班组信息
|
|
||||||
Set<Long> teamIdSet = constructionUserList.stream().map(BusConstructionUser::getTeamId)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
Map<Long, List<BusProjectTeam>> teamIdTeamMap = projectTeamService.listByIds(teamIdSet).stream()
|
|
||||||
.collect(Collectors.groupingBy(BusProjectTeam::getId));
|
|
||||||
// 关联查询工资标准
|
// 关联查询工资标准
|
||||||
LambdaQueryWrapper<BusWorkWage> workWageLqw = Wrappers.lambdaQuery(BusWorkWage.class)
|
LambdaQueryWrapper<BusWorkWage> workWageLqw = Wrappers.lambdaQuery(BusWorkWage.class)
|
||||||
.in(BusWorkWage::getProjectId, constructionUserList.stream().map(BusConstructionUser::getProjectId).toList())
|
.in(BusWorkWage::getProjectId, constructionUserList.stream().map(BusConstructionUser::getProjectId).toList())
|
||||||
@ -740,13 +723,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
contractor = contractorService.getVo(contractorIdContractorMap.get(contractorId).get(0));
|
contractor = contractorService.getVo(contractorIdContractorMap.get(contractorId).get(0));
|
||||||
}
|
}
|
||||||
constructionUserVo.setContractorVo(contractor);
|
constructionUserVo.setContractorVo(contractor);
|
||||||
// 关联班组信息
|
|
||||||
Long teamId = constructionUser.getTeamId();
|
|
||||||
BusProjectTeamVo team = null;
|
|
||||||
if (teamIdTeamMap.containsKey(teamId)) {
|
|
||||||
team = projectTeamService.getVo(teamIdTeamMap.get(teamId).get(0));
|
|
||||||
}
|
|
||||||
constructionUserVo.setTeamVo(team);
|
|
||||||
// 关联工资标准
|
// 关联工资标准
|
||||||
// 构造相应的 key
|
// 构造相应的 key
|
||||||
String key = constructionUser.getTypeOfWork() + "_" + constructionUser.getWageMeasureUnit();
|
String key = constructionUser.getTypeOfWork() + "_" + constructionUser.getWageMeasureUnit();
|
||||||
@ -786,17 +762,22 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
Long projectId = req.getProjectId();
|
Long projectId = req.getProjectId();
|
||||||
Long teamId = req.getTeamId();
|
Long teamId = req.getTeamId();
|
||||||
String typeOfWork = req.getTypeOfWork();
|
String typeOfWork = req.getTypeOfWork();
|
||||||
String clockMonth = req.getClockMonth();
|
String clockDate = req.getClockDate();
|
||||||
// 联表查询
|
// 联表查询
|
||||||
LambdaQueryWrapper<BusAttendance> attendanceLqw = Wrappers.lambdaQuery(BusAttendance.class)
|
LambdaQueryWrapper<BusAttendance> attendanceLqw = Wrappers.lambdaQuery(BusAttendance.class)
|
||||||
.eq(BusAttendance::getProjectId, projectId);
|
.eq(BusAttendance::getProjectId, projectId);
|
||||||
if (ObjectUtils.isNotEmpty(clockMonth)) {
|
if (ObjectUtils.isNotEmpty(clockDate)) {
|
||||||
|
String clockMonth = clockDate.substring(0, 7);
|
||||||
// 校验月份格式
|
// 校验月份格式
|
||||||
if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) {
|
if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) {
|
||||||
throw new ServiceException("月份格式不正确", HttpStatus.BAD_REQUEST);
|
throw new ServiceException("月份格式不正确", HttpStatus.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
// 解析月份
|
// 解析月份
|
||||||
YearMonth yearMonth = YearMonth.parse(clockMonth);
|
YearMonth yearMonth = YearMonth.parse(clockMonth);
|
||||||
|
// 判断是否大于当前月份
|
||||||
|
if (yearMonth.isAfter(YearMonth.now())) {
|
||||||
|
throw new ServiceException("不能查看大于当前月份的记录", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
// 计算当月第一天 / 最后一天
|
// 计算当月第一天 / 最后一天
|
||||||
Date start = DateUtils.toDate(yearMonth.atDay(1));
|
Date start = DateUtils.toDate(yearMonth.atDay(1));
|
||||||
Date end = DateUtils.toDate(yearMonth.atEndOfMonth());
|
Date end = DateUtils.toDate(yearMonth.atEndOfMonth());
|
||||||
@ -814,9 +795,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusConstructionUser::getTeamId, teamId);
|
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusConstructionUser::getTeamId, teamId);
|
||||||
lqw.eq(StringUtils.isNotBlank(typeOfWork), BusConstructionUser::getTypeOfWork, typeOfWork);
|
lqw.eq(StringUtils.isNotBlank(typeOfWork), BusConstructionUser::getTypeOfWork, typeOfWork);
|
||||||
// 查询当前项目下的黑名单人员
|
// 查询当前项目下的黑名单人员
|
||||||
List<Long> blackUserIdList = constructionBlacklistService.lambdaQuery()
|
List<Long> blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId);
|
||||||
.eq(BusConstructionBlacklist::getProjectId, projectId).list()
|
|
||||||
.stream().map(BusConstructionBlacklist::getUserId).toList();
|
|
||||||
// 查询结果移除黑名单人员
|
// 查询结果移除黑名单人员
|
||||||
if (CollUtil.isNotEmpty(blackUserIdList)) {
|
if (CollUtil.isNotEmpty(blackUserIdList)) {
|
||||||
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
|
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
|
||||||
@ -837,18 +816,11 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
attendanceLqw.in(BusAttendance::getUserId, userIdList);
|
attendanceLqw.in(BusAttendance::getUserId, userIdList);
|
||||||
Map<Long, List<BusAttendance>> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw)
|
Map<Long, List<BusAttendance>> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw)
|
||||||
.stream().collect(Collectors.groupingBy(BusAttendance::getUserId));
|
.stream().collect(Collectors.groupingBy(BusAttendance::getUserId));
|
||||||
// 关联查询班组列表
|
|
||||||
List<Long> teamIdList = constructionUserList.stream().map(BusConstructionUser::getTeamId).toList();
|
|
||||||
Map<Long, List<BusProjectTeam>> teamIdProjectTeamListMap = projectTeamService.lambdaQuery()
|
|
||||||
.in(BusProjectTeam::getId, teamIdList).list()
|
|
||||||
.stream().collect(Collectors.groupingBy(BusProjectTeam::getId));
|
|
||||||
// 填充信息
|
// 填充信息
|
||||||
List<ConstructionUserAttendanceTotalResp> userAttendanceTotalList = constructionUserList.stream().map(constructionUser -> {
|
List<ConstructionUserAttendanceTotalResp> userAttendanceTotalList = constructionUserList.stream().map(constructionUser -> {
|
||||||
ConstructionUserAttendanceTotalResp constructionUserAttendanceTotalResp = new ConstructionUserAttendanceTotalResp();
|
ConstructionUserAttendanceTotalResp constructionUserAttendanceTotalResp = new ConstructionUserAttendanceTotalResp();
|
||||||
Long id = constructionUser.getId();
|
Long id = constructionUser.getId();
|
||||||
constructionUserAttendanceTotalResp.setId(id);
|
BeanUtils.copyProperties(constructionUser, constructionUserAttendanceTotalResp);
|
||||||
constructionUserAttendanceTotalResp.setUserName(constructionUser.getUserName());
|
|
||||||
constructionUserAttendanceTotalResp.setTypeOfWork(constructionUser.getTypeOfWork());
|
|
||||||
// 关联施工人员考勤信息
|
// 关联施工人员考勤信息
|
||||||
int attendanceDays = 0;
|
int attendanceDays = 0;
|
||||||
int lateDays = 0;
|
int lateDays = 0;
|
||||||
@ -902,14 +874,6 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
|
|||||||
constructionUserAttendanceTotalResp.setLeaveEarlyDays(leaveEarlyDays);
|
constructionUserAttendanceTotalResp.setLeaveEarlyDays(leaveEarlyDays);
|
||||||
constructionUserAttendanceTotalResp.setUnClockDays(unClockDays);
|
constructionUserAttendanceTotalResp.setUnClockDays(unClockDays);
|
||||||
constructionUserAttendanceTotalResp.setLeaveDays(leaveDays);
|
constructionUserAttendanceTotalResp.setLeaveDays(leaveDays);
|
||||||
// 关联班组信息
|
|
||||||
Long userTeamId = constructionUser.getTeamId();
|
|
||||||
String teamName = null;
|
|
||||||
if (teamIdProjectTeamListMap.containsKey(userTeamId)) {
|
|
||||||
teamName = teamIdProjectTeamListMap.get(userTeamId).get(0).getTeamName();
|
|
||||||
}
|
|
||||||
constructionUserAttendanceTotalResp.setTeamId(userTeamId);
|
|
||||||
constructionUserAttendanceTotalResp.setTeamName(teamName);
|
|
||||||
return constructionUserAttendanceTotalResp;
|
return constructionUserAttendanceTotalResp;
|
||||||
}).toList();
|
}).toList();
|
||||||
constructionUserAttendanceTotalPage.setRecords(userAttendanceTotalList);
|
constructionUserAttendanceTotalPage.setRecords(userAttendanceTotalList);
|
||||||
|
@ -17,6 +17,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.project.domain.BusConstructionUser;
|
import org.dromara.project.domain.BusConstructionUser;
|
||||||
import org.dromara.project.domain.BusConstructionUserExit;
|
import org.dromara.project.domain.BusConstructionUserExit;
|
||||||
|
import org.dromara.project.domain.BusProjectTeam;
|
||||||
import org.dromara.project.domain.BusProjectTeamMember;
|
import org.dromara.project.domain.BusProjectTeamMember;
|
||||||
import org.dromara.project.domain.enums.ProjectTeamMemberPostEnum;
|
import org.dromara.project.domain.enums.ProjectTeamMemberPostEnum;
|
||||||
import org.dromara.project.domain.req.projectteammember.ProjectTeamMemberCreateReq;
|
import org.dromara.project.domain.req.projectteammember.ProjectTeamMemberCreateReq;
|
||||||
@ -117,6 +118,12 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
|
|||||||
BeanUtils.copyProperties(req, projectTeamMember);
|
BeanUtils.copyProperties(req, projectTeamMember);
|
||||||
// 数据校验
|
// 数据校验
|
||||||
validEntityBeforeSave(projectTeamMember, true);
|
validEntityBeforeSave(projectTeamMember, true);
|
||||||
|
// 判断班组信息是否存在
|
||||||
|
Long teamId = req.getTeamId();
|
||||||
|
BusProjectTeam projectTeam = projectTeamService.getById(teamId);
|
||||||
|
if (projectTeam == null) {
|
||||||
|
throw new ServiceException("对应班组不存在", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
// 判断用户是否已经被拉黑
|
// 判断用户是否已经被拉黑
|
||||||
constructionBlacklistService.validUserInBlacklist(projectTeamMember.getMemberId(), projectTeamMember.getProjectId());
|
constructionBlacklistService.validUserInBlacklist(projectTeamMember.getMemberId(), projectTeamMember.getProjectId());
|
||||||
// 判断对应的用户与项目关联是否存在
|
// 判断对应的用户与项目关联是否存在
|
||||||
@ -135,6 +142,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
|
|||||||
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
|
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
|
||||||
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
|
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
|
||||||
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId())
|
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId())
|
||||||
|
.set(BusConstructionUser::getTeamName, projectTeam.getTeamName())
|
||||||
.set(BusConstructionUser::getEntryDate, new Date())
|
.set(BusConstructionUser::getEntryDate, new Date())
|
||||||
.set(BusConstructionUser::getLeaveDate, null);
|
.set(BusConstructionUser::getLeaveDate, null);
|
||||||
constructionUserService.update(constructionUserLuw);
|
constructionUserService.update(constructionUserLuw);
|
||||||
@ -155,16 +163,25 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
|
|||||||
BeanUtils.copyProperties(req, projectTeamMember);
|
BeanUtils.copyProperties(req, projectTeamMember);
|
||||||
// 数据校验
|
// 数据校验
|
||||||
validEntityBeforeSave(projectTeamMember, false);
|
validEntityBeforeSave(projectTeamMember, false);
|
||||||
|
// 判断班组信息是否存在
|
||||||
|
Long teamId = req.getTeamId();
|
||||||
|
BusProjectTeam projectTeam = projectTeamService.getById(teamId);
|
||||||
|
if (projectTeam == null) {
|
||||||
|
throw new ServiceException("对应班组不存在", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
// 判断是否存在
|
// 判断是否存在
|
||||||
BusProjectTeamMember oldProjectTeamMember = this.getById(projectTeamMember.getId());
|
BusProjectTeamMember oldProjectTeamMember = this.getById(projectTeamMember.getId());
|
||||||
if (oldProjectTeamMember == null) {
|
if (oldProjectTeamMember == null) {
|
||||||
throw new ServiceException("修改项目班组下的成员,数据不存在", HttpStatus.NOT_FOUND);
|
throw new ServiceException("修改项目班组下的成员,数据不存在", HttpStatus.NOT_FOUND);
|
||||||
}
|
}
|
||||||
// 同步修改用户表的team_id字段
|
// 如果修改了班组信息,同步修改用户表的字段
|
||||||
|
if (!oldProjectTeamMember.getTeamId().equals(teamId)) {
|
||||||
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
|
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
|
||||||
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
|
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
|
||||||
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId());
|
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId())
|
||||||
|
.set(BusConstructionUser::getTeamName, projectTeam.getTeamName());
|
||||||
constructionUserService.update(constructionUserLuw);
|
constructionUserService.update(constructionUserLuw);
|
||||||
|
}
|
||||||
// 操作数据库
|
// 操作数据库
|
||||||
return this.updateById(projectTeamMember);
|
return this.updateById(projectTeamMember);
|
||||||
}
|
}
|
||||||
@ -176,7 +193,6 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
|
|||||||
// TODO 做一些数据校验,如唯一约束
|
// TODO 做一些数据校验,如唯一约束
|
||||||
Long projectId = entity.getProjectId();
|
Long projectId = entity.getProjectId();
|
||||||
Long memberId = entity.getMemberId();
|
Long memberId = entity.getMemberId();
|
||||||
Long teamId = entity.getTeamId();
|
|
||||||
String postId = entity.getPostId();
|
String postId = entity.getPostId();
|
||||||
ProjectTeamMemberPostEnum postEnum = ProjectTeamMemberPostEnum.getEnumByValue(postId);
|
ProjectTeamMemberPostEnum postEnum = ProjectTeamMemberPostEnum.getEnumByValue(postId);
|
||||||
if (create) {
|
if (create) {
|
||||||
@ -186,9 +202,6 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
|
|||||||
if (memberId == null) {
|
if (memberId == null) {
|
||||||
throw new ServiceException("人员 id 不能为空", HttpStatus.BAD_REQUEST);
|
throw new ServiceException("人员 id 不能为空", HttpStatus.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
if (teamId == null) {
|
|
||||||
throw new ServiceException("班组 id 不能为空", HttpStatus.BAD_REQUEST);
|
|
||||||
}
|
|
||||||
if (postEnum == null) {
|
if (postEnum == null) {
|
||||||
throw new ServiceException("请选择正确的岗位", HttpStatus.BAD_REQUEST);
|
throw new ServiceException("请选择正确的岗位", HttpStatus.BAD_REQUEST);
|
||||||
}
|
}
|
||||||
@ -199,9 +212,6 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
|
|||||||
if (constructionUserService.getById(memberId) == null) {
|
if (constructionUserService.getById(memberId) == null) {
|
||||||
throw new ServiceException("对应人员不存在", HttpStatus.NOT_FOUND);
|
throw new ServiceException("对应人员不存在", HttpStatus.NOT_FOUND);
|
||||||
}
|
}
|
||||||
if (projectTeamService.getById(teamId) == null) {
|
|
||||||
throw new ServiceException("对应班组不存在", HttpStatus.NOT_FOUND);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,6 +2,7 @@ package org.dromara.project.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -252,6 +253,11 @@ public class BusProjectTeamServiceImpl extends ServiceImpl<BusProjectTeamMapper,
|
|||||||
return projectTeamVo;
|
return projectTeamVo;
|
||||||
}
|
}
|
||||||
BeanUtils.copyProperties(projectTeam, projectTeamVo);
|
BeanUtils.copyProperties(projectTeam, projectTeamVo);
|
||||||
|
// 获取班组人数
|
||||||
|
Long peopleNumber = projectTeamMemberService.lambdaQuery()
|
||||||
|
.eq(BusProjectTeamMember::getTeamId, projectTeam.getId())
|
||||||
|
.count();
|
||||||
|
projectTeamVo.setPeopleNumber(peopleNumber);
|
||||||
return projectTeamVo;
|
return projectTeamVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,7 +305,27 @@ public class BusProjectTeamServiceImpl extends ServiceImpl<BusProjectTeamMapper,
|
|||||||
if (CollUtil.isEmpty(projectTeamList)) {
|
if (CollUtil.isEmpty(projectTeamList)) {
|
||||||
return projectTeamVoPage;
|
return projectTeamVoPage;
|
||||||
}
|
}
|
||||||
List<BusProjectTeamVo> projectTeamVoList = projectTeamList.stream().map(this::getVo).toList();
|
// 1. 获取各班组人数
|
||||||
|
List<Long> teamIdList = projectTeamList.stream().map(BusProjectTeam::getId).toList();
|
||||||
|
List<Map<String, Object>> mapList = projectTeamMemberService.listMaps(
|
||||||
|
new QueryWrapper<BusProjectTeamMember>()
|
||||||
|
.select("team_id", "COUNT(*) as count")
|
||||||
|
.in("team_id", teamIdList)
|
||||||
|
.groupBy("team_id")
|
||||||
|
);
|
||||||
|
// 2. 将查询结果转换成 Map<Long, Long>
|
||||||
|
Map<Long, Long> teamCountMap = mapList.stream()
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
m -> ((Number) m.get("team_id")).longValue(),
|
||||||
|
m -> ((Number) m.get("count")).longValue()
|
||||||
|
));
|
||||||
|
// 对象列表 => 封装对象列表
|
||||||
|
List<BusProjectTeamVo> projectTeamVoList = projectTeamList.stream().map(projectTeam -> {
|
||||||
|
BusProjectTeamVo projectTeamVo = new BusProjectTeamVo();
|
||||||
|
BeanUtils.copyProperties(projectTeam, projectTeamVo);
|
||||||
|
projectTeamVo.setPeopleNumber(teamCountMap.getOrDefault(projectTeam.getId(), 0L));
|
||||||
|
return projectTeamVo;
|
||||||
|
}).toList();
|
||||||
projectTeamVoPage.setRecords(projectTeamVoList);
|
projectTeamVoPage.setRecords(projectTeamVoList);
|
||||||
return projectTeamVoPage;
|
return projectTeamVoPage;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.project.domain.BusWorkWage;
|
import org.dromara.project.domain.BusWorkWage;
|
||||||
|
import org.dromara.project.domain.enums.WageMeasureUnitEnum;
|
||||||
import org.dromara.project.domain.req.workwage.WorkWageCreateReq;
|
import org.dromara.project.domain.req.workwage.WorkWageCreateReq;
|
||||||
import org.dromara.project.domain.req.workwage.WorkWageQueryReq;
|
import org.dromara.project.domain.req.workwage.WorkWageQueryReq;
|
||||||
import org.dromara.project.domain.req.workwage.WorkWageUpdateReq;
|
import org.dromara.project.domain.req.workwage.WorkWageUpdateReq;
|
||||||
@ -93,6 +94,27 @@ public class BusWorkWageServiceImpl extends ServiceImpl<BusWorkWageMapper, BusWo
|
|||||||
BeanUtils.copyProperties(req, workWage);
|
BeanUtils.copyProperties(req, workWage);
|
||||||
// 数据校验
|
// 数据校验
|
||||||
validEntityBeforeSave(workWage, true);
|
validEntityBeforeSave(workWage, true);
|
||||||
|
// 判断是否存在
|
||||||
|
Long count = this.lambdaQuery()
|
||||||
|
.eq(BusWorkWage::getProjectId, workWage.getProjectId())
|
||||||
|
.eq(BusWorkWage::getWorkType, workWage.getWorkType())
|
||||||
|
.eq(BusWorkWage::getWageCalculationType, workWage.getWageCalculationType())
|
||||||
|
.count();
|
||||||
|
if (count > 0) {
|
||||||
|
throw new ServiceException("该项目已存在该工种薪水信息", HttpStatus.CONFLICT);
|
||||||
|
}
|
||||||
|
// 填充默认值
|
||||||
|
String wageCalculationType = req.getWageCalculationType();
|
||||||
|
switch (wageCalculationType) {
|
||||||
|
case "1":
|
||||||
|
workWage.setWageMeasureUnit(WageMeasureUnitEnum.TIME.getValue());
|
||||||
|
break;
|
||||||
|
case "2":
|
||||||
|
workWage.setWageMeasureUnit(WageMeasureUnitEnum.PIECE.getValue());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ServiceException("工资计算方式错误", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
// 操作数据库
|
// 操作数据库
|
||||||
boolean save = this.save(workWage);
|
boolean save = this.save(workWage);
|
||||||
if (!save) {
|
if (!save) {
|
||||||
|
@ -14,15 +14,15 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|||||||
import org.dromara.project.domain.BusDailyPieceItem;
|
import org.dromara.project.domain.BusDailyPieceItem;
|
||||||
import org.dromara.project.domain.BusProjectTeam;
|
import org.dromara.project.domain.BusProjectTeam;
|
||||||
import org.dromara.project.domain.BusWorkerDailyReport;
|
import org.dromara.project.domain.BusWorkerDailyReport;
|
||||||
import org.dromara.project.domain.enums.WorkerDailyReportReissueEnum;
|
|
||||||
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
|
import org.dromara.project.domain.req.workerdailyreport.WorkerDailyReportQueryReq;
|
||||||
import org.dromara.project.domain.resp.workerdailyreport.WorkerDailyReportReissueResp;
|
|
||||||
import org.dromara.project.domain.vo.BusDailyPieceItemVo;
|
import org.dromara.project.domain.vo.BusDailyPieceItemVo;
|
||||||
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
|
import org.dromara.project.domain.vo.BusWorkerDailyReportVo;
|
||||||
import org.dromara.project.mapper.BusWorkerDailyReportMapper;
|
import org.dromara.project.mapper.BusWorkerDailyReportMapper;
|
||||||
import org.dromara.project.service.IBusDailyPieceItemService;
|
import org.dromara.project.service.IBusDailyPieceItemService;
|
||||||
import org.dromara.project.service.IBusProjectTeamService;
|
import org.dromara.project.service.IBusProjectTeamService;
|
||||||
import org.dromara.project.service.IBusWorkerDailyReportService;
|
import org.dromara.project.service.IBusWorkerDailyReportService;
|
||||||
|
import org.dromara.system.domain.vo.SysOssVo;
|
||||||
|
import org.dromara.system.service.ISysOssService;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -45,6 +45,9 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
|
|||||||
@Resource
|
@Resource
|
||||||
private IBusProjectTeamService projectTeamService;
|
private IBusProjectTeamService projectTeamService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ISysOssService ossService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询施工人员日报
|
* 查询施工人员日报
|
||||||
*
|
*
|
||||||
@ -60,22 +63,6 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
|
|||||||
return this.getVo(workerDailyReport);
|
return this.getVo(workerDailyReport);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询施工人员日报补报
|
|
||||||
*
|
|
||||||
* @param id 主键
|
|
||||||
* @return 施工人员日报补报
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public WorkerDailyReportReissueResp queryReissueById(Long id) {
|
|
||||||
BusWorkerDailyReport workerDailyReport = this.getById(id);
|
|
||||||
if (workerDailyReport == null) {
|
|
||||||
throw new ServiceException("施工人员日报信息不存在", HttpStatus.NOT_FOUND);
|
|
||||||
}
|
|
||||||
return this.getReissueVo(workerDailyReport);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询施工人员日报列表
|
* 分页查询施工人员日报列表
|
||||||
*
|
*
|
||||||
@ -86,26 +73,10 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
|
|||||||
@Override
|
@Override
|
||||||
public TableDataInfo<BusWorkerDailyReportVo> queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery) {
|
public TableDataInfo<BusWorkerDailyReportVo> queryPageList(WorkerDailyReportQueryReq req, PageQuery pageQuery) {
|
||||||
LambdaQueryWrapper<BusWorkerDailyReport> lqw = this.buildQueryWrapper(req);
|
LambdaQueryWrapper<BusWorkerDailyReport> lqw = this.buildQueryWrapper(req);
|
||||||
lqw.eq(BusWorkerDailyReport::getIsResubmit, WorkerDailyReportReissueEnum.UNREISSUE.getValue());
|
|
||||||
Page<BusWorkerDailyReport> result = this.page(pageQuery.build(), lqw);
|
Page<BusWorkerDailyReport> result = this.page(pageQuery.build(), lqw);
|
||||||
return TableDataInfo.build(this.getVoPage(result));
|
return TableDataInfo.build(this.getVoPage(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询施工人员日报补报列表
|
|
||||||
*
|
|
||||||
* @param req 查询条件
|
|
||||||
* @param pageQuery 分页参数
|
|
||||||
* @return 施工人员日报补报分页列表
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public TableDataInfo<WorkerDailyReportReissueResp> queryReissuePageList(WorkerDailyReportQueryReq req, PageQuery pageQuery) {
|
|
||||||
LambdaQueryWrapper<BusWorkerDailyReport> lqw = this.buildQueryWrapper(req);
|
|
||||||
lqw.eq(BusWorkerDailyReport::getIsResubmit, WorkerDailyReportReissueEnum.REISSUE.getValue());
|
|
||||||
Page<BusWorkerDailyReport> result = this.page(pageQuery.build(), lqw);
|
|
||||||
return TableDataInfo.build(this.getReissueVoPage(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询符合条件的施工人员日报列表
|
* 查询符合条件的施工人员日报列表
|
||||||
*
|
*
|
||||||
@ -153,32 +124,18 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
|
|||||||
workerDailyReportVo.setDailyPieceItemVoList(dailyPieceItemService.getListVo(dailyPieceItemList));
|
workerDailyReportVo.setDailyPieceItemVoList(dailyPieceItemService.getListVo(dailyPieceItemList));
|
||||||
// 获取班组详情信息
|
// 获取班组详情信息
|
||||||
workerDailyReportVo.setTeamName(projectTeamService.getById(workerDailyReport.getTeamId()).getTeamName());
|
workerDailyReportVo.setTeamName(projectTeamService.getById(workerDailyReport.getTeamId()).getTeamName());
|
||||||
|
// 获取图片信息
|
||||||
|
String file = workerDailyReport.getFile();
|
||||||
|
if (StringUtils.isNotEmpty(file)) {
|
||||||
|
List<Long> picList = Arrays.stream(file.split(","))
|
||||||
|
.map(Long::parseLong)
|
||||||
|
.toList();
|
||||||
|
List<SysOssVo> pictureList = ossService.listByIds(picList);
|
||||||
|
workerDailyReportVo.setFileList(pictureList.stream().map(SysOssVo::getUrl).toList());
|
||||||
|
}
|
||||||
return workerDailyReportVo;
|
return workerDailyReportVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取施工人员日报补报视图对象
|
|
||||||
*
|
|
||||||
* @param workerDailyReport 施工人员日报对象
|
|
||||||
* @return 施工人员日报补报视图对象
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public WorkerDailyReportReissueResp getReissueVo(BusWorkerDailyReport workerDailyReport) {
|
|
||||||
// 对象转封装类
|
|
||||||
WorkerDailyReportReissueResp workerDailyReportReissueResp = new WorkerDailyReportReissueResp();
|
|
||||||
if (workerDailyReport == null) {
|
|
||||||
return workerDailyReportReissueResp;
|
|
||||||
}
|
|
||||||
BeanUtils.copyProperties(workerDailyReport, workerDailyReportReissueResp);
|
|
||||||
// 获取日报计件详情信息
|
|
||||||
List<BusDailyPieceItem> dailyPieceItemList = dailyPieceItemService.lambdaQuery()
|
|
||||||
.eq(BusDailyPieceItem::getReportId, workerDailyReport.getId()).list();
|
|
||||||
workerDailyReportReissueResp.setDailyPieceItemVoList(dailyPieceItemService.getListVo(dailyPieceItemList));
|
|
||||||
// 获取班组详情信息
|
|
||||||
workerDailyReportReissueResp.setTeamName(projectTeamService.getById(workerDailyReport.getTeamId()).getTeamName());
|
|
||||||
return workerDailyReportReissueResp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取施工人员日报列表查询条件封装
|
* 获取施工人员日报列表查询条件封装
|
||||||
*
|
*
|
||||||
@ -197,6 +154,7 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
|
|||||||
Long userId = req.getUserId();
|
Long userId = req.getUserId();
|
||||||
String userName = req.getUserName();
|
String userName = req.getUserName();
|
||||||
Date reportDate = req.getReportDate();
|
Date reportDate = req.getReportDate();
|
||||||
|
Long isResubmit = req.getIsResubmit();
|
||||||
// 模糊查询
|
// 模糊查询
|
||||||
lqw.like(StringUtils.isNotBlank(userName), BusWorkerDailyReport::getUserName, userName);
|
lqw.like(StringUtils.isNotBlank(userName), BusWorkerDailyReport::getUserName, userName);
|
||||||
// 精确查询
|
// 精确查询
|
||||||
@ -205,6 +163,7 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
|
|||||||
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusWorkerDailyReport::getTeamId, teamId);
|
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusWorkerDailyReport::getTeamId, teamId);
|
||||||
lqw.eq(ObjectUtils.isNotEmpty(userId), BusWorkerDailyReport::getUserId, userId);
|
lqw.eq(ObjectUtils.isNotEmpty(userId), BusWorkerDailyReport::getUserId, userId);
|
||||||
lqw.eq(ObjectUtils.isNotEmpty(reportDate), BusWorkerDailyReport::getReportDate, reportDate);
|
lqw.eq(ObjectUtils.isNotEmpty(reportDate), BusWorkerDailyReport::getReportDate, reportDate);
|
||||||
|
lqw.eq(ObjectUtils.isNotEmpty(isResubmit), BusWorkerDailyReport::getIsResubmit, isResubmit);
|
||||||
return lqw;
|
return lqw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,56 +219,4 @@ public class BusWorkerDailyReportServiceImpl extends ServiceImpl<BusWorkerDailyR
|
|||||||
return workerDailyReportVoPage;
|
return workerDailyReportVoPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取施工人员日报补报分页对象视图
|
|
||||||
*
|
|
||||||
* @param workerDailyReportPage 施工人员日报列表分页对象
|
|
||||||
* @return 施工人员日报列表分页对象视图
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Page<WorkerDailyReportReissueResp> getReissueVoPage(Page<BusWorkerDailyReport> workerDailyReportPage) {
|
|
||||||
// 对象列表 => 封装对象列表
|
|
||||||
List<BusWorkerDailyReport> workerDailyReportList = workerDailyReportPage.getRecords();
|
|
||||||
Page<WorkerDailyReportReissueResp> respPage = new Page<>(
|
|
||||||
workerDailyReportPage.getCurrent(),
|
|
||||||
workerDailyReportPage.getSize(),
|
|
||||||
workerDailyReportPage.getTotal());
|
|
||||||
if (CollUtil.isEmpty(workerDailyReportList)) {
|
|
||||||
return respPage;
|
|
||||||
}
|
|
||||||
// 获取日报计件详情信息
|
|
||||||
List<Long> idList = workerDailyReportList.stream().map(BusWorkerDailyReport::getId).toList();
|
|
||||||
Map<Long, List<BusDailyPieceItem>> reportIdDailyPieceItemMap = dailyPieceItemService.lambdaQuery()
|
|
||||||
.in(BusDailyPieceItem::getReportId, idList).list()
|
|
||||||
.stream().collect(Collectors.groupingBy(BusDailyPieceItem::getReportId));
|
|
||||||
// 获取班组详情信息
|
|
||||||
List<Long> teamIdList = workerDailyReportList.stream().map(BusWorkerDailyReport::getTeamId).toList();
|
|
||||||
Map<Long, List<BusProjectTeam>> teamIdProjectTeamMap = projectTeamService.lambdaQuery()
|
|
||||||
.in(BusProjectTeam::getId, teamIdList).list()
|
|
||||||
.stream().collect(Collectors.groupingBy(BusProjectTeam::getId));
|
|
||||||
// 封装对象
|
|
||||||
List<WorkerDailyReportReissueResp> workerDailyReportVoList = workerDailyReportList.stream().map(workerDailyReport -> {
|
|
||||||
WorkerDailyReportReissueResp workerDailyReportVo = new WorkerDailyReportReissueResp();
|
|
||||||
BeanUtils.copyProperties(workerDailyReport, workerDailyReportVo);
|
|
||||||
Long id = workerDailyReport.getId();
|
|
||||||
// 获取日报计件详情信息
|
|
||||||
List<BusDailyPieceItemVo> dailyPieceItemVoList = new ArrayList<>();
|
|
||||||
if (reportIdDailyPieceItemMap.containsKey(id)) {
|
|
||||||
List<BusDailyPieceItem> dailyPieceItemList = reportIdDailyPieceItemMap.get(id);
|
|
||||||
dailyPieceItemVoList = dailyPieceItemService.getListVo(dailyPieceItemList);
|
|
||||||
}
|
|
||||||
workerDailyReportVo.setDailyPieceItemVoList(dailyPieceItemVoList);
|
|
||||||
// 获取班组详情信息
|
|
||||||
String teamName = null;
|
|
||||||
if (teamIdProjectTeamMap.containsKey(workerDailyReport.getTeamId())) {
|
|
||||||
BusProjectTeam projectTeam = teamIdProjectTeamMap.get(workerDailyReport.getTeamId()).get(0);
|
|
||||||
teamName = projectTeam.getTeamName();
|
|
||||||
}
|
|
||||||
workerDailyReportVo.setTeamName(teamName);
|
|
||||||
return workerDailyReportVo;
|
|
||||||
}).toList();
|
|
||||||
respPage.setRecords(workerDailyReportVoList);
|
|
||||||
return respPage;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user