Merge branch 'prod' into guoshengxiong

This commit is contained in:
guoshengxiong 2025-07-01 10:02:03 +08:00
commit 8bfcbfa068
9 changed files with 228 additions and 134 deletions

View File

@ -5,6 +5,7 @@ import com.zhgd.annotation.OperLog;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.xmgl.modules.worker.entity.WorkerBlacklist;
import com.zhgd.xmgl.modules.worker.service.IWorkerBlacklistService;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
import com.zhgd.xmgl.util.MessageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@ -13,7 +14,11 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@ -22,7 +27,7 @@ import java.util.Map;
* @Title: Controller
* @Description: 人员黑名单
* @author pds
* @date 2020-11-23
* @date 2020-11-23
* @version V1.0
*/
@RestController
@ -30,14 +35,19 @@ import java.util.Map;
@Slf4j
@Api(tags = "人员黑名单")
public class WorkerBlacklistController {
@Autowired
private IWorkerBlacklistService workerBlacklistService;
@Lazy
@Autowired
WorkerInfoServiceImpl workerInfoService;
@Lazy
@Autowired
private IWorkerBlacklistService workerBlacklistService;
/**
* 分页列表查询
* @return
*/
@ApiOperation(value = "分页列表查询人员黑名单信息", notes = "分页列表查询人员黑名单信息", httpMethod = "POST")
/**
* 分页列表查询
*
* @return
*/
@ApiOperation(value = "分页列表查询人员黑名单信息", notes = "分页列表查询人员黑名单信息", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "workerName", value = "姓名", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "userEnterpriseId", value = "用户能查看的企业", paramType = "body", required = false, dataType = "String"),
@ -45,96 +55,88 @@ public class WorkerBlacklistController {
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"),
})
@PostMapping(value = "/list")
public Result<IPage<WorkerBlacklist>> queryPageList(@RequestBody Map<String,Object> map) {
Result<IPage<WorkerBlacklist>> result = new Result<IPage<WorkerBlacklist>>();
IPage<WorkerBlacklist> pageList = workerBlacklistService.selectWorkerBlacklistPage(map);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
@PostMapping(value = "/list")
public Result<IPage<WorkerBlacklist>> queryPageList(@RequestBody Map<String, Object> map) {
Result<IPage<WorkerBlacklist>> result = new Result<IPage<WorkerBlacklist>>();
IPage<WorkerBlacklist> pageList = workerBlacklistService.selectWorkerBlacklistPage(map);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* 添加
*
* @param workerBlacklist
* @return
*/
@OperLog(operModul = "劳务管理", operType = "添加人员黑名单信息", operDesc = "添加人员黑名单信息")
@ApiOperation(value = "添加人员黑名单信息", notes = "添加人员黑名单信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<WorkerBlacklist> add(@RequestBody WorkerBlacklist workerBlacklist) {
public Result<WorkerBlacklist> add(@RequestBody WorkerBlacklist workerBlacklist) {
workerBlacklistService.addWorkerBlacklist(workerBlacklist);
return Result.ok();
}
return Result.ok();
}
/**
* 编辑
* 编辑
*
* @param workerBlacklist
* @return
*/
@OperLog(operModul = "劳务管理",operType = "编辑人员黑名单信息",operDesc = "编辑人员黑名单信息")
@ApiOperation(value = "编辑人员黑名单信息", notes = "编辑人员黑名单信息" , httpMethod="POST")
@PostMapping(value = "/edit")
public Result<WorkerBlacklist> edit(@RequestBody WorkerBlacklist workerBlacklist) {
Result<WorkerBlacklist> result = new Result<WorkerBlacklist>();
WorkerBlacklist workerBlacklistEntity = workerBlacklistService.getById(workerBlacklist.getId());
if(workerBlacklistEntity==null) {
result.error500(MessageUtil.get("notFindErr"));
}else {
boolean ok = workerBlacklistService.updateById(workerBlacklist);
if(ok) {
result.successMsg(MessageUtil.get("editSucess"));
}
}
return result;
}
@OperLog(operModul = "劳务管理", operType = "编辑人员黑名单信息", operDesc = "编辑人员黑名单信息")
@ApiOperation(value = "编辑人员黑名单信息", notes = "编辑人员黑名单信息", httpMethod = "POST")
@PostMapping(value = "/edit")
public Result edit(@RequestBody WorkerBlacklist workerBlacklist) {
return Result.success(workerBlacklistService.edit(workerBlacklist));
}
/**
* 通过id删除
* 通过id删除
*
* @param
* @return
*/
@OperLog(operModul = "劳务管理",operType = "删除人员黑名单信息",operDesc = "删除人员黑名单信息")
@OperLog(operModul = "劳务管理", operType = "删除人员黑名单信息", operDesc = "删除人员黑名单信息")
@ApiOperation(value = "删除人员黑名单信息", notes = "删除人员黑名单信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "人员黑名单ID", paramType = "body", required = true, dataType = "Integer")
@PostMapping(value = "/delete")
public Result<WorkerBlacklist> delete(@RequestBody Map<String,Object> map) {
Result<WorkerBlacklist> result = new Result<WorkerBlacklist>();
WorkerBlacklist workerBlacklist = workerBlacklistService.getById(MapUtils.getString(map,"id"));
if(workerBlacklist==null) {
public Result<WorkerBlacklist> delete(@RequestBody Map<String, Object> map) {
Result<WorkerBlacklist> result = new Result<WorkerBlacklist>();
WorkerBlacklist workerBlacklist = workerBlacklistService.getById(MapUtils.getString(map, "id"));
if (workerBlacklist == null) {
result.error500(MessageUtil.get("notFindErr"));
}else {
boolean ok = workerBlacklistService.removeById(MapUtils.getString(map,"id"));
if(ok) {
} else {
boolean ok = workerBlacklistService.removeById(MapUtils.getString(map, "id"));
if (ok) {
result.successMsg(MessageUtil.get("deleteSucess"));
}
}
}
}
return result;
}
}
/**
* 通过id查询
* @param
* @return
*/
* 通过id查询
*
* @param
* @return
*/
@ApiOperation(value = "通过id查询人员黑名单信息", notes = "通过id查询人员黑名单信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "人员黑名单ID", paramType = "body", required = true, dataType = "Integer")
@PostMapping(value = "/queryById")
public Result<WorkerBlacklist> queryById(@RequestBody Map<String,Object> map) {
Result<WorkerBlacklist> result = new Result<WorkerBlacklist>();
WorkerBlacklist workerBlacklist = workerBlacklistService.getById(MapUtils.getString(map,"id"));
if(workerBlacklist==null) {
public Result<WorkerBlacklist> queryById(@RequestBody Map<String, Object> map) {
Result<WorkerBlacklist> result = new Result<WorkerBlacklist>();
WorkerBlacklist workerBlacklist = workerBlacklistService.getById(MapUtils.getString(map, "id"));
if (workerBlacklist == null) {
result.error500(MessageUtil.get("notFindErr"));
}else {
result.setResult(workerBlacklist);
result.setSuccess(true);
}
return result;
}
} else {
result.setResult(workerBlacklist);
result.setSuccess(true);
}
return result;
}
@ApiOperation(value = "黑名单人员统计", notes = "黑名单人员统计")
@ -142,7 +144,7 @@ public class WorkerBlacklistController {
@ApiImplicitParam(name = "sn", value = "项目SN", paramType = "body", required = true, dataType = "String"),
})
@PostMapping("/selectWorkerBlacklistStatistics")
public Result<Map<String,Object>> selectWorkerBlacklistStatistics(@RequestBody Map<String, Object> map) {
public Result<Map<String, Object>> selectWorkerBlacklistStatistics(@RequestBody Map<String, Object> map) {
return Result.success(workerBlacklistService.selectWorkerBlacklistStatistics(map));
}
}

View File

@ -3,9 +3,11 @@ package com.zhgd.xmgl.modules.worker.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
@ -107,11 +109,15 @@ public class WorkerAttendanceRuleV2 implements Serializable {
* 加班工时时间段开始
*/
@ApiModelProperty(value = "加班工时时间段开始")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private java.util.Date overtimeHourStart;
/**
* 加班工时时间段结束
*/
@ApiModelProperty(value = "加班工时时间段结束")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private java.util.Date overtimeHourEnd;
/**
* 加班工日计算方式1:工时段换算工日;2:比例换算工日;

View File

@ -42,7 +42,6 @@ public class WorkerBlacklist implements Serializable {
*/
@Excel(name = "人员ID", width = 15)
@ApiModelProperty(value = "人员ID")
private java.lang.Long workerId;
/**
* 姓名
@ -84,6 +83,11 @@ public class WorkerBlacklist implements Serializable {
private java.util.Date createTime;
@ApiModelProperty(value = "类型1证书过期2合同过期3保险过期")
private java.lang.Integer type;
/**
* 1是将人员退场0不将人员退场
*/
@ApiModelProperty(value = "1是将人员退场0不将人员退场")
private java.lang.Integer isExit;
@TableField(exist = false)
@ApiModelProperty(value = "考勤考号")

View File

@ -51,7 +51,10 @@
GROUP BY t1.id
</select>
<select id="selectWorkerBlacklistPage" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerBlacklist">
SELECT b.worker_name,b.attendance_number,a.*
SELECT
ifnull(b.worker_name,a.worker_name) as worker_name
,b.attendance_number
,a.*
from worker_blacklist a LEFT JOIN worker_info b ON a.worker_id=b.id
WHERE a.project_sn=#{param.projectSn}
<if test="param.workerName!=null and param.workerName!=''">

View File

@ -1397,6 +1397,9 @@
WHERE project_sn = #{projectSn}
GROUP BY worker_id) b ON a.id = b.worker_id
WHERE a.project_sn = #{projectSn}
<if test="inServiceType != null">
and a.inService_type = #{inServiceType}
</if>
<if test="userEnterpriseId != null and userEnterpriseId != ''">
and FIND_IN_SET(a.enterprise_id, #{userEnterpriseId})
</if>

View File

@ -28,8 +28,11 @@ public interface IWorkerBlacklistService extends IService<WorkerBlacklist> {
/**
* 分页列表查询人员黑名单信息
*
* @param map
* @return
*/
IPage<WorkerBlacklist> selectWorkerBlacklistPage(Map<String, Object> map);
WorkerBlacklist edit(WorkerBlacklist workerBlacklist);
}

View File

@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.worker.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -100,20 +101,25 @@ public class WorkerAttendanceRuleV2ServiceImpl extends ServiceImpl<WorkerAttenda
}
@Override
public void edit(WorkerAttendanceRuleV2Dto workerAttendanceRuleV2Dto) {
WorkerAttendanceRuleV2 oldWorkerAttendanceRuleV2 = baseMapper.selectById(workerAttendanceRuleV2Dto.getId());
public void edit(WorkerAttendanceRuleV2Dto dto) {
WorkerAttendanceRuleV2 oldWorkerAttendanceRuleV2 = baseMapper.selectById(dto.getId());
if (oldWorkerAttendanceRuleV2 == null) {
throw new OpenAlertException("未找到对应实体");
}
int count = this.count(new LambdaQueryWrapper<WorkerAttendanceRuleV2>()
.eq(WorkerAttendanceRuleV2::getGroupV2Id, workerAttendanceRuleV2Dto.getGroupV2Id())
.ne(WorkerAttendanceRuleV2::getId, workerAttendanceRuleV2Dto.getId())
.eq(WorkerAttendanceRuleV2::getGroupV2Id, dto.getGroupV2Id())
.ne(WorkerAttendanceRuleV2::getId, dto.getId())
);
if (count > 0) {
throw new OpenAlertException("该考勤组已被别的考勤规则绑定,请选择别的考勤组");
}
baseMapper.updateById(workerAttendanceRuleV2Dto);
saveRuleChangeLog(workerAttendanceRuleV2Dto);
baseMapper.updateById(dto);
this.update(null, new LambdaUpdateWrapper<WorkerAttendanceRuleV2>()
.set(WorkerAttendanceRuleV2::getOvertimeHourStart, dto.getOvertimeHourStart())
.set(WorkerAttendanceRuleV2::getOvertimeHourEnd, dto.getOvertimeHourEnd())
.eq(WorkerAttendanceRuleV2::getId, dto.getId())
);
saveRuleChangeLog(dto);
}
@Override

View File

@ -3,21 +3,21 @@ package com.zhgd.xmgl.modules.worker.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.enums.CompanyTypeEnum;
import com.zhgd.xmgl.modules.basicdata.mapper.CompanyMapper;
import com.zhgd.xmgl.modules.worker.entity.WorkerBlacklist;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.basicdata.mapper.CompanyMapper;
import com.zhgd.xmgl.modules.worker.mapper.WorkerBlacklistMapper;
import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
import com.zhgd.xmgl.modules.worker.service.IWorkerBlacklistService;
import com.zhgd.xmgl.util.MessageUtil;
import com.zhgd.xmgl.util.MapBuilder;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
@ -28,43 +28,53 @@ import java.util.Objects;
/**
* @Description: 人员黑名单
* @author pds
* @date 2020-11-23
* @date 2020-11-23
* @version V1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class WorkerBlacklistServiceImpl extends ServiceImpl<WorkerBlacklistMapper, WorkerBlacklist> implements IWorkerBlacklistService {
@Lazy
@Autowired
WorkerInfoServiceImpl workerInfoService;
@Lazy
@Autowired
private WorkerBlacklistMapper workerBlacklistMapper;
@Lazy
@Autowired
private CompanyMapper companyMapper;
@Lazy
@Autowired
private WorkerInfoMapper workerInfoMapper;
@Lazy
@Autowired
private IWorkerBlacklistService workerBlacklistService;
@Override
public void addWorkerBlacklist(WorkerBlacklist workerBlacklist) {
QueryWrapper<WorkerBlacklist> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(WorkerBlacklist::getProjectSn, workerBlacklist.getProjectSn())
.eq(WorkerBlacklist::getWorkerId, workerBlacklist.getWorkerId());
int count = workerBlacklistMapper.selectCount(queryWrapper);
if (count > 0) {
throw new OpenAlertException(MessageUtil.get("PersonAddErr"));
}
WorkerInfo workerInfo=workerInfoMapper.selectById(workerBlacklist.getWorkerId());
if(workerInfo!=null){
WorkerInfo workerInfo = workerInfoMapper.selectById(workerBlacklist.getWorkerId());
if (workerInfo != null) {
workerBlacklist.setIdCard(workerInfo.getIdCard());
workerBlacklist.setWorkerName(workerInfo.getWorkerName());
if (workerInfo.getInserviceType() == 2) {
throw new OpenAlertException("该人员已退场");
}
}
workerBlacklistMapper.insert(workerBlacklist);
if (Objects.equals(workerBlacklist.getIsExit(), 1)) {
workerInfoService.updateWorkerExit(new MapBuilder<String, Object>()
.put("workerIdStr", workerBlacklist.getWorkerId())
.build());
}
}
@Override
public Map<String, Object> selectWorkerBlacklistStatistics(Map<String, Object> map) {
Map<String, Object> data=new HashMap<>(16);
QueryWrapper<Company> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(Company::getCompanySn, MapUtils.getString(map,"sn"));
Company tempCompany=companyMapper.selectOne(queryWrapper);
if(tempCompany!=null) {
Map<String, Object> data = new HashMap<>(16);
QueryWrapper<Company> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(Company::getCompanySn, MapUtils.getString(map, "sn"));
Company tempCompany = companyMapper.selectOne(queryWrapper);
if (tempCompany != null) {
if (Objects.equals(tempCompany.getCompanyType(), CompanyTypeEnum.HEADQUARTERS.getValue())) {
map.put("headquartersSn", MapUtils.getString(map, "sn"));
map.put("companyType", "1");
@ -75,11 +85,11 @@ public class WorkerBlacklistServiceImpl extends ServiceImpl<WorkerBlacklistMappe
} else {
map.put("companyType", "5");
}
List<Map<String, Object>> list=workerBlacklistMapper.getComapnyWorkerBlacklistStatistics(map);
data.put("list",list);
}else{
List<Map<String, Object>> list=workerBlacklistMapper.getProjectWorkerBlacklistStatistics(map);
data.put("list",list);
List<Map<String, Object>> list = workerBlacklistMapper.getComapnyWorkerBlacklistStatistics(map);
data.put("list", list);
} else {
List<Map<String, Object>> list = workerBlacklistMapper.getProjectWorkerBlacklistStatistics(map);
data.put("list", list);
}
return data;
}
@ -89,7 +99,36 @@ public class WorkerBlacklistServiceImpl extends ServiceImpl<WorkerBlacklistMappe
int pageNo = Integer.parseInt(map.getOrDefault("pageNo", 1).toString());
int pageSize = Integer.parseInt(map.getOrDefault("pageSize", 10).toString());
Page<WorkerBlacklist> page = new Page<>(pageNo, pageSize);
List<WorkerBlacklist> list=workerBlacklistMapper.selectWorkerBlacklistPage(page, map);
List<WorkerBlacklist> list = workerBlacklistMapper.selectWorkerBlacklistPage(page, map);
return page.setRecords(list);
}
@Override
public WorkerBlacklist edit(WorkerBlacklist workerBlacklist) {
WorkerBlacklist old = this.getById(workerBlacklist.getId());
if (old == null) {
throw new OpenAlertException("数据不存在,请重新刷新");
}
WorkerInfo workerInfo = workerInfoService.getById(workerBlacklist.getWorkerId());
if (workerInfo != null) {
workerBlacklist.setIdCard(workerInfo.getIdCard());
workerBlacklist.setWorkerName(workerInfo.getWorkerName());
}
workerBlacklistService.updateById(workerBlacklist);
//修改人员进场退场
if (!Objects.equals(workerBlacklist.getIsExit(), old.getIsExit())) {
if (Objects.equals(workerBlacklist.getIsExit(), 1)) {
workerInfoService.updateWorkerExit(new MapBuilder<String, Object>()
.put("workerIdStr", workerBlacklist.getWorkerId())
.build());
} else {
if (workerInfo != null) {
workerInfo.setInserviceType(1);
workerInfo.setReEntry(1);
workerInfoService.editWorkerInfo(workerInfo);
}
}
}
return workerBlacklist;
}
}

View File

@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -199,15 +200,17 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
}
//1. 计算工时
BigDecimal hour = null;
if (ruleV2 != null && ruleV2.getHourType() != null) {
BigDecimal hour = getCalHour(personSn, date, ruleV2, attendances, allAttendances);
sta.setHourVal(hour);
hour = getCalHour(personSn, date, ruleV2, attendances, allAttendances, null, null);
}
sta.setHourVal(hour);
//2.计算工日
BigDecimal day = null;
if (ruleV2 != null && ruleV2.getDayType() != null) {
Integer dayType = ruleV2.getDayType();
BigDecimal day = BigDecimal.ZERO;
day = BigDecimal.ZERO;
if (dayType == 1) {
//1:一天一打卡;
List<CalAttendanceBo> attendanceBoList = allAttendances.stream().filter(o -> Objects.equals(o.getPersonSn(), personSn) && DateUtil.isSameDay(date, o.getDate())).collect(Collectors.toList());
@ -230,7 +233,7 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
// 3:工时段换算工日;
if (StrUtil.isNotBlank(ruleV2.getHour2dayJson())) {
//工时段换算工日;
day = getCalHour2day(ruleV2.getHour2dayJson(), sta.getHourVal().intValue());
day = getCalHour2day(ruleV2.getHour2dayJson(), sta.getHourVal());
}
} else if (dayType == 4) {
// 4:比例换算工日;
@ -243,36 +246,32 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
}
}
}
sta.setDayVal(day);
}
sta.setDayVal(day);
BigDecimal overtimeHour = null;
BigDecimal overtimeDay = null;
if (ruleV2 != null && ruleV2.getIsOpenOvertime() == 1) {
//3.计算加班工时
BigDecimal overtimeHour = BigDecimal.ZERO;
overtimeHour = BigDecimal.ZERO;
if (Objects.equals(ruleV2.getOvertimeHourType(), 1)) {
//1:超出规定工作时间的工时;
if (sta.getHourVal().compareTo(new BigDecimal(ruleV2.getDailyHour())) > 0) {
overtimeHour = sta.getHourVal().subtract(new BigDecimal(ruleV2.getDailyHour()));
}
} else if (Objects.equals(ruleV2.getOvertimeHourType(), 2)) {
} else if (Objects.equals(ruleV2.getOvertimeHourType(), 2) && ruleV2.getOvertimeHourStart() != null && ruleV2.getOvertimeHourEnd() != null && ruleV2.getHourType() != null) {
// 2:特定时间内的工时;
if (ruleV2.getHourType() != null) {
//跨域结束时间+1day
Date start = DateUtil.parseDateTime(DateUtil.formatDate(date) + " " + DateUtil.formatTime(ruleV2.getOvertimeHourStart()));
Date end = DateUtil.parseDateTime(DateUtil.formatDate(date) + " " + DateUtil.formatTime(ruleV2.getOvertimeHourEnd()));
Date hourEnd = DateUtil.compare(start, end) <= 0 ? end : DateUtil.offsetDay(end, 1);
List<CalAttendanceBo> list1 = attendances.stream().filter(bo -> DateUtil.compare(bo.getDate(), start) >= 0 &&
DateUtil.compare(bo.getDate(), hourEnd) <= 0).collect(Collectors.toList());
List<CalAttendanceBo> list2 = allAttendances.stream().filter(bo -> DateUtil.compare(bo.getDate(), start) >= 0 &&
DateUtil.compare(bo.getDate(), hourEnd) <= 0).collect(Collectors.toList());
overtimeHour = getCalHour(personSn, date, ruleV2, list1, list2);
}
//跨域结束时间+1day
Date overtimeStart = DateUtil.parseDateTime(DateUtil.formatDate(date) + " " + DateUtil.formatTime(ruleV2.getOvertimeHourStart()));
Date endTemp = DateUtil.parseDateTime(DateUtil.formatDate(date) + " " + DateUtil.formatTime(ruleV2.getOvertimeHourEnd()));
Date overtimeEnd = DateUtil.compare(overtimeStart, endTemp) <= 0 ? endTemp : DateUtil.offsetDay(endTemp, 1);
overtimeHour = getCalHour(personSn, date, ruleV2, attendances, allAttendances, overtimeStart, overtimeEnd);
}
sta.setOvertimeHourVal(overtimeHour);
//4.计算加班工日
BigDecimal overtimeDay = BigDecimal.ZERO;
overtimeDay = BigDecimal.ZERO;
if (Objects.equals(ruleV2.getOvertimeDayType(), 1) && StrUtil.isNotBlank(ruleV2.getOvertimeHour2dayJson())) {
//加班工时段换算工日;
overtimeDay = getCalHour2day(ruleV2.getOvertimeHour2dayJson(), sta.getHourVal().intValue());
overtimeDay = getCalHour2day(ruleV2.getOvertimeHour2dayJson(), sta.getHourVal());
} else {
// 加班比例换算工日;
if (ruleV2.getOvertimeRatio2dayDay() != null && ruleV2.getOvertimeRatio2dayHour() != null && sta.getHourVal() != null && ruleV2.getOvertimeRatio2dayHour() != 0) {
@ -284,8 +283,9 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
}
}
}
sta.setOvertimeDayVal(overtimeDay);
}
sta.setOvertimeHourVal(overtimeHour);
sta.setOvertimeDayVal(overtimeDay);
//5.计算考勤
sta.setProjectSn(projectSn);
@ -295,22 +295,32 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
if (sta.getId() == null) {
this.save(sta);
} else {
this.updateById(sta);
this.update(new LambdaUpdateWrapper<WorkerDailyAttendanceStatisticsV2>()
.set(WorkerDailyAttendanceStatisticsV2::getHourVal, sta.getHourVal())
.set(WorkerDailyAttendanceStatisticsV2::getDayVal, sta.getDayVal())
.set(WorkerDailyAttendanceStatisticsV2::getIsAttendance, sta.getIsAttendance())
.set(WorkerDailyAttendanceStatisticsV2::getOvertimeHourVal, sta.getOvertimeHourVal())
.set(WorkerDailyAttendanceStatisticsV2::getOvertimeDayVal, sta.getOvertimeDayVal())
.eq(WorkerDailyAttendanceStatisticsV2::getId, sta.getId())
);
}
}
/**
* 获取工时段换算工日
*
* @param ruleV2
* @param json
* @param hourVal
* @return
*/
private BigDecimal getCalHour2day(String ruleV2, int hourVal) {
private BigDecimal getCalHour2day(String json, BigDecimal hourVal) {
if (hourVal == null) {
return null;
}
BigDecimal overtimeDay = BigDecimal.ZERO;
List<Hour2dayJsonBo> list = JSON.parseArray(ruleV2, Hour2dayJsonBo.class);
List<Hour2dayJsonBo> list = JSON.parseArray(json, Hour2dayJsonBo.class);
if (CollUtil.isNotEmpty(list)) {
overtimeDay = list.stream().filter(bo -> hourVal >= bo.getHourMin() && hourVal <= bo.getHourMax()).findFirst().map(Hour2dayJsonBo::getDay).orElse(BigDecimal.ZERO);
overtimeDay = list.stream().filter(bo -> hourVal.compareTo(new BigDecimal(bo.getHourMin())) >= 0 && hourVal.compareTo(new BigDecimal(bo.getHourMax())) <= 0).findFirst().map(Hour2dayJsonBo::getDay).orElse(BigDecimal.ZERO);
}
return overtimeDay;
}
@ -323,16 +333,26 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
* @param ruleV2
* @param attendances
* @param allAttendances
* @param overtimeStart 加班开始时间
* @param overtimeEnd 加班结束时间
* @return
*/
private BigDecimal getCalHour(String personSn, DateTime date, WorkerAttendanceRuleV2 ruleV2, List<CalAttendanceBo> attendances, List<CalAttendanceBo> allAttendances) {
private BigDecimal getCalHour(String personSn, DateTime date, WorkerAttendanceRuleV2 ruleV2, List<CalAttendanceBo> attendances, List<CalAttendanceBo> allAttendances, Date overtimeStart, Date overtimeEnd) {
Integer hourType = ruleV2.getHourType();
BigDecimal hour = BigDecimal.ZERO;
if (Objects.equals(hourType, 1)) {
//1:末减初;
if (allAttendances.size() >= 2) {
long betweenMs = DateUtil.betweenMs(allAttendances.get(0).getDate(), allAttendances.get(allAttendances.size() - 1).getDate());
hour = new BigDecimal(betweenMs).divide(new BigDecimal(DateUnit.HOUR.getMillis()), 1, RoundingMode.HALF_UP);
Date beginDate = allAttendances.get(0).getDate();
Date endDate = allAttendances.get(allAttendances.size() - 1).getDate();
if (overtimeStart != null && overtimeEnd != null) {
beginDate = DateUtil.compare(beginDate, overtimeStart) >= 0 ? beginDate : overtimeStart;
endDate = DateUtil.compare(endDate, overtimeEnd) >= 0 ? overtimeEnd : endDate;
}
if (DateUtil.compare(beginDate, endDate) < 0) {
long betweenMs = DateUtil.betweenMs(beginDate, endDate);
hour = new BigDecimal(betweenMs).divide(new BigDecimal(DateUnit.HOUR.getMillis()), 1, RoundingMode.HALF_UP);
}
}
} else if (Objects.equals(hourType, 2)) {
//2:时间段累加;
@ -378,9 +398,17 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
if (attendanceBos.get(i).getPassType() != 2) {
continue;
}
long betweenMs = DateUtil.betweenMs(attendanceBos.get(i - 1).getDate(), attendanceBos.get(i).getDate());
BigDecimal hours = new BigDecimal(betweenMs).divide(new BigDecimal(DateUnit.HOUR.getMillis()), 1, RoundingMode.HALF_UP);
hour = hour.add(hours);
Date beginDate = attendanceBos.get(i - 1).getDate();
Date endDate = attendanceBos.get(i).getDate();
if (overtimeStart != null && overtimeEnd != null) {
beginDate = DateUtil.compare(beginDate, overtimeStart) >= 0 ? beginDate : overtimeStart;
endDate = DateUtil.compare(endDate, overtimeEnd) >= 0 ? overtimeEnd : endDate;
}
if (DateUtil.compare(beginDate, endDate) < 0) {
long betweenMs = DateUtil.betweenMs(beginDate, endDate);
BigDecimal hours = new BigDecimal(betweenMs).divide(new BigDecimal(DateUnit.HOUR.getMillis()), 1, RoundingMode.HALF_UP);
hour = hour.add(hours);
}
}
}
}
@ -404,7 +432,7 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
.le(WorkerAttendance::getCreateTime, DateUtil.offsetDay(endTime, 1))
.select(WorkerAttendance::getCreateTime, WorkerAttendance::getPassType, WorkerAttendance::getProjectSn, WorkerAttendance::getPersonSn)
.orderByAsc(WorkerAttendance::getCreateTime)
);
).stream().filter(workerAttendance -> StrUtil.isNotBlank(workerAttendance.getPersonSn())).collect(Collectors.toList());
List<CalAttendanceBo> allAttendances = attendanceDbs.stream().map(o -> {
CalAttendanceBo bo = new CalAttendanceBo();
bo.setPersonSn(o.getPersonSn());