This commit is contained in:
zt
2025-03-14 18:22:17 +08:00
parent 6e4036b2e9
commit c93ad97c38
24 changed files with 417 additions and 48 deletions

View File

@ -129,6 +129,9 @@ public class WgzPayCalculation implements Serializable {
@ApiModelProperty("同意|拒绝时间")
private LocalDateTime auditorTime;
@ApiModelProperty("申请人类型")
private String operatorType;
/** 删除标志0代表存在 2代表删除 */
@Excel(name = "删除标志" , readConverterExp = "0=代表存在,2=代表删除")
@ApiModelProperty("删除标志0代表存在 2代表删除")

View File

@ -1,9 +1,12 @@
package com.ruoyi.wgz.service;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailBaseVO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailListVO;
import com.ruoyi.bgt.domain.dto.BgtApplyForWgzPayAddDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationListDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationRecordDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
import com.ruoyi.bgt.domain.vo.BgtApplyForWgzPayAddInfoVO;
import com.ruoyi.bgt.domain.vo.BgtPayCalculationDetailBaseVO;
import com.ruoyi.bgt.domain.vo.BgtPayCalculationDetailListVO;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.wgz.bo.WgzPayCalculationQueryBo;
@ -113,6 +116,9 @@ public interface IWgzPayCalculationService extends IServicePlus<WgzPayCalculatio
/**
* 总体考勤情况-工资结算-结算记录
*/
List<BgtPayCalculationDetailListVO> record(Long userId, Long recruitId);
TableDataInfo<BgtPayCalculationDetailListVO> record(BgtPayCalculationRecordDTO dto);
Boolean bgtAdd(BgtApplyForWgzPayAddDTO dto);
BgtApplyForWgzPayAddInfoVO payInfo(Long userId, Long recruitId);
}

View File

@ -327,9 +327,9 @@ public class WgzDailyClockServiceImpl extends ServicePlusImpl<WgzDailyClockMappe
public BgtDailyClockDetailVO appQueryById(Long id) {
WgzDailyClock dailyClock = getById(id);
BgtDailyClockDetailVO detailVO = BeanUtil.copyProperties(dailyClock, BgtDailyClockDetailVO.class);
BgtUser bgtUser = userService.getById(dailyClock.getUserId());
detailVO.setUsername(bgtUser.getUsername());
detailVO.setAvatarName(bgtUser.getAvatarName());
WgzUser wgzUser = wgzUserService.findByUserId(dailyClock.getUserId());
detailVO.setUsername(wgzUser.getUsername());
detailVO.setAvatarName(wgzUser.getAvatarName());
BgtProjectRecruit recruit = recruitService.getById(dailyClock.getRecruitId());
detailVO.setRecruitName(recruit.getRecruitName());
return detailVO;

View File

@ -15,6 +15,7 @@ import com.ruoyi.bgt.service.IBgtProjectRecruitService;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.AuditStatus;
import com.ruoyi.common.exception.BaseException;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.wgz.bo.WgzLeaveQueryBo;
@ -213,6 +214,9 @@ public class WgzLeaveServiceImpl extends ServicePlusImpl<WgzLeaveMapper, WgzLeav
@Transactional(rollbackFor = Exception.class)
public Boolean bgtAudit(BgtLeaveUpdateDTO dto) {
WgzLeave wgzLeave = getById(dto.getId());
if(!AuditStatus.UNREAD.getCode().equals(wgzLeave.getAuditorType())){
throw new BaseException("该条请假申请状态已改变,请刷新页面");
}
BeanUtil.copyProperties(dto, wgzLeave);
wgzLeave.setAuditorTime(LocalDateTime.now());
BgtProjectRecruit recruit = iBgtProjectRecruitService.getById(wgzLeave.getRecruitId());

View File

@ -1,22 +1,24 @@
package com.ruoyi.wgz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.ruoyi.bgt.domain.BgtMessage;
import com.ruoyi.bgt.domain.BgtProjectRecruit;
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailBaseVO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationDetailListVO;
import com.ruoyi.bgt.domain.dto.BgtApplyForWgzPayAddDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationListDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationRecordDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
import com.ruoyi.bgt.service.IBgtMessageService;
import com.ruoyi.bgt.domain.vo.BgtApplyForWgzPayAddInfoVO;
import com.ruoyi.bgt.domain.vo.BgtPayCalculationDetailBaseVO;
import com.ruoyi.bgt.domain.vo.BgtPayCalculationDetailListVO;
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
import com.ruoyi.bgt.service.IBgtProjectRecruitService;
import com.ruoyi.common.constants.WgzAndBgtMessageConstant;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
@ -32,15 +34,16 @@ import com.ruoyi.wgz.bo.res.WgzAppApplyForPayrollSettlementListRes;
import com.ruoyi.wgz.domain.*;
import com.ruoyi.wgz.mapper.WgzPayCalculationMapper;
import com.ruoyi.wgz.service.*;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.ruoyi.common.constants.BgtMessageConstant.*;
import static com.ruoyi.common.constants.WgzAndBgtMessageConstant.*;
@ -75,12 +78,6 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
@Autowired
private IWgzMessageService wgzMessageService;
@Autowired
private IWgzMessageService iWgzMessageService;
@Autowired
private IBgtMessageService iBgtMessageService;
@Autowired
private IWgzAttendanceService iWgzAttendanceService;
@ -341,16 +338,28 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean appUpdate(BgtPayCalculationUpdateDTO dto) {
WgzPayCalculation payCalculation = getById(dto.getId());
BeanUtil.copyProperties(dto, payCalculation);
boolean isPass = AuditStatus.PASS.getCode().equals(dto.getAuditorType());
payCalculation.setAuditorTime(LocalDateTime.now());
if(!isPass){
List<WgzPayCalculationMiddle> list = iWgzPayCalculationMiddleService.list(Wrappers.<WgzPayCalculationMiddle>lambdaQuery()
.eq(WgzPayCalculationMiddle::getCalculationId, dto.getId()));
if(CollectionUtils.isNotEmpty(list)){
List<Long> collect = list.stream().map(WgzPayCalculationMiddle::getAttendanceId).collect(Collectors.toList());
attendanceService.lambdaUpdate().in(WgzAttendance::getId,collect)
.set(WgzAttendance::getSettlement, 0).update();
iWgzPayCalculationMiddleService.removeByIds(list.stream().map(WgzPayCalculationMiddle::getId).collect(Collectors.toList()));
}
}
//发消息
HashMap<String, String> mp = new HashMap<>();
mp.put("projectName",iBgtProjectRecruitService.getById(payCalculation.getRecruitId()).getRecruitName());
mp.put("auditor",SecurityUtils.getUsername());
Map<String, String> map = bgtMessage(mp, BGT_TYPE_PAY, AuditStatus.PASS.getCode().equals(dto.getAuditorType()));
Map<String, String> map = bgtMessage(mp, BGT_TYPE_PAY, isPass);
WgzMessage wgzMessage = new WgzMessage()
.setSenderType(USERTYPE_BGT)
.setSenderId(SecurityUtils.getAppUserId())
@ -380,6 +389,7 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
vo.setScore(wgzUser.getScore());
vo.setUsername(wgzUser.getUsername());
vo.setAvatarName(wgzUser.getAvatarName());
vo.setIdentityCard(wgzUser.getIdentityCard());
BgtProjectRecruit recruit = iBgtProjectRecruitService.getById(recruitId);
vo.setRecruitName(recruit.getRecruitName());
@ -387,6 +397,10 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
FbsProjectTask task = taskService.getById(recruit.getTaskId());
vo.setTaskName(task.getTaskName());
vo.setUserId(userId);
vo.setRecruitId(recruitId);
vo.setTaskId(recruit.getTaskId());
BgtProjectRecruitApply apply = iBgtProjectRecruitApplyService.getOne(Wrappers.<BgtProjectRecruitApply>lambdaQuery()
.eq(BgtProjectRecruitApply::getRecruitId, recruitId).eq(BgtProjectRecruitApply::getUserId, userId)
.last("limit 1"));
@ -410,10 +424,99 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
}
@Override
public List<BgtPayCalculationDetailListVO> record(Long userId, Long recruitId) {
List<WgzPayCalculation> wgzPayCalculations = baseMapper.selectList(Wrappers.<WgzPayCalculation>lambdaQuery()
public TableDataInfo<BgtPayCalculationDetailListVO> record(BgtPayCalculationRecordDTO dto) {
LambdaQueryWrapper<WgzPayCalculation> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(WgzPayCalculation::getUserId, dto.getUserId())
.eq(WgzPayCalculation::getRecruitId, dto.getRecruitId())
.eq(WgzPayCalculation::getAuditorUserId, SecurityUtils.getAppUserId())
.in(WgzPayCalculation::getAuditorType,AuditStatus.getAudit())
.orderByDesc(WgzPayCalculation::getCreateTime);
Page<WgzPayCalculation> result = page(PageUtils.buildPage(), wrapper);
Page<BgtPayCalculationDetailListVO> res = new Page<>();
res.setRecords(BeanUtil.copyToList(result.getRecords(), BgtPayCalculationDetailListVO.class));
res.setTotal(result.getTotal());
return PageUtils.buildDataInfo(res);
}
@Override
@Transactional
public Boolean bgtAdd(BgtApplyForWgzPayAddDTO dto) {
//添加申请
WgzPayCalculation payCalculation = BeanUtil.copyProperties(dto, WgzPayCalculation.class);
payCalculation.setAuditorType(AuditStatus.PASS.getCode());
payCalculation.setAuditorTime(LocalDateTime.now());
payCalculation.setAuditorUserId(SecurityUtils.getAppUserId());
payCalculation.setAuditorUserName(SecurityUtils.getUsername());
payCalculation.setOperatorType(Constants.BGT);
boolean save = save(payCalculation);
//修改标记,添加中间表
List<WgzPayCalculationMiddle> middleList = new ArrayList<>();
List<WgzAttendance> list = iWgzAttendanceService.list(Wrappers.<WgzAttendance>lambdaQuery()
.eq(WgzAttendance::getRecruitId, dto.getRecruitId())
.eq(WgzAttendance::getSettlement, 0));
for(WgzAttendance data : list) {
data.setSettlement(1);
WgzPayCalculationMiddle wgzPayCalculationMiddle = new WgzPayCalculationMiddle();
wgzPayCalculationMiddle.setCalculationId(payCalculation.getId());
wgzPayCalculationMiddle.setAttendanceId(data.getId());
middleList.add(wgzPayCalculationMiddle);
}
iWgzAttendanceService.updateBatchById(list);
iWgzPayCalculationMiddleService.saveBatch(middleList);
//修改其余未审批申请的状态
List<WgzPayCalculation> payList = list(Wrappers.<WgzPayCalculation>lambdaQuery().eq(WgzPayCalculation::getAuditorType, AuditStatus.UNREAD.getCode())
.eq(WgzPayCalculation::getUserId, dto.getUserId()));
if(CollectionUtil.isNotEmpty(payList)) {
payList.forEach(pay -> {
pay.setAuditorType(AuditStatus.REFUSE.getCode());
});
}
updateBatchById(payList);
return save;
}
@Override
public BgtApplyForWgzPayAddInfoVO payInfo(Long userId, Long recruitId) {
BgtApplyForWgzPayAddInfoVO vo = new BgtApplyForWgzPayAddInfoVO();
//招工信息
BgtProjectRecruit recruit = iBgtProjectRecruitService.getById(recruitId);
vo.setRecruitId(recruitId);
vo.setRecruitAmount(recruit.getRecruitAmount());
vo.setRecruitName(recruit.getRecruitName());
//任务信息
FbsProjectTask task = taskService.getById(recruit.getTaskId());
vo.setTaskId(task.getId());
vo.setTaskName(task.getTaskName());
vo.setTaskAddress(task.getTaskAddress());
//申请信息
BgtProjectRecruitApply recruitApply = iBgtProjectRecruitApplyService.getOneByUserIdAndRecruitId(userId, recruitId);
vo.setEntryTime(recruitApply.getEntryTime());
vo.setLeaveTime(recruitApply.getLeaveTime());
vo.setWorkingState(recruitApply.getStatus());
//出勤天数
//总天数
Integer i = attendanceService.attendanceDetail(userId, recruitId, null);
//已结算天数
List<WgzPayCalculation> list = list(Wrappers.<WgzPayCalculation>lambdaQuery()
.eq(WgzPayCalculation::getUserId, userId)
.eq(WgzPayCalculation::getRecruitId, recruitId));
return BeanUtil.copyToList(wgzPayCalculations, BgtPayCalculationDetailListVO.class);
.eq(WgzPayCalculation::getRecruitId, recruitId)
.eq(WgzPayCalculation::getAuditorType, AuditStatus.PASS.getCode()));
if(CollectionUtil.isNotEmpty(list)) {
int sum = list.stream().mapToInt(WgzPayCalculation::getNum).sum();
i = i - sum;
}
vo.setNum(i);
//个人信息
return vo;
}
}