This commit is contained in:
zt
2025-09-13 18:08:21 +08:00
parent 4d2a2186c9
commit f0f30ce841
12 changed files with 93 additions and 7 deletions

View File

@ -14,6 +14,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.SubUserSalaryDetail;
import org.dromara.contractor.domain.SubUserSalaryPeriod;
import org.dromara.contractor.domain.dto.usersalarydetail.SubUserSalaryDetailQueryReq;
import org.dromara.contractor.domain.vo.usersalarydetail.SubUserSalaryDetailVo;
import org.dromara.contractor.mapper.SubUserSalaryDetailMapper;
@ -22,6 +23,7 @@ import org.dromara.contractor.service.ISubUserSalaryDetailService;
import org.dromara.project.domain.BusWorkWage;
import org.dromara.project.service.IBusWorkWageService;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -93,8 +95,17 @@ public class SubUserSalaryDetailServiceImpl extends ServiceImpl<SubUserSalaryDet
* @param reportDate 日报日期
* @return 是否新增成功
*/
@Async
@Override
public Boolean insertByAttendance(Long userId, LocalDate reportDate) {
//查询当天工资,已存在则跳过
List<SubUserSalaryDetail> list = this.list(new LambdaQueryWrapper<SubUserSalaryDetail>()
.eq(SubUserSalaryDetail::getUserId, userId)
.eq(SubUserSalaryDetail::getReportDate, reportDate));
if (CollUtil.isNotEmpty(list)) {
return true;
}
SubConstructionUser constructionUser = constructionUserService.getBySysUserId(userId);
// 获取工资
BigDecimal salary = constructionUser.getSalary();

View File

@ -212,10 +212,9 @@ public class AttendanceJob {
//计算考勤日期
if (start.isAfter(end)) { // 跨天情况
if (!clockOutResultTime.isBefore(start)) { //前半段 23:55-00:00
if (!clockOutResultTime.isBefore(start)) { // 前半段23:55 - 00:00
date = date.minusDays(1);
}
if (clockOutResultTime.isBefore(end)) { //在后半段 00:00-05:00
} else if (clockOutResultTime.isBefore(end)) { // 后半段00:00 - 00:05
if (clockOutTime.isAfter(clockOutResultTime)) {
date = date.minusDays(1);
}

View File

@ -25,6 +25,7 @@ import org.dromara.common.utils.JSTUtil;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.contractor.service.ISubUserSalaryDetailService;
import org.dromara.project.domain.*;
import org.dromara.project.domain.bo.BusAttendanceBo;
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
@ -95,6 +96,10 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
private final ChatServerHandler chatServerHandler;
private final ISubUserSalaryDetailService userSalaryDetailService;
// 出勤状态(正常、迟到、早退)
private static final Set<String> ATTENDANCE_STATUS = new HashSet<>(Arrays.asList(BusAttendanceClockStatusEnum.NORMAL.getValue(),
BusAttendanceClockStatusEnum.LATE.getValue(), BusAttendanceClockStatusEnum.LEAVEEARLY.getValue()));
@ -308,9 +313,10 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
SysOssVo upload = ossService.upload(file);
attendance.setFacePic(upload.getOssId().toString());
chatServerHandler.sendSystemMessageToUser(userId, "打卡成功");
return this.save(attendance);
boolean save = this.save(attendance);
//插入工资
userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate());
return save;
}
}

View File

@ -21,6 +21,7 @@ import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.contractor.service.ISubUserSalaryDetailService;
import org.dromara.project.domain.*;
import org.dromara.project.domain.dto.reissuecard.BusReissueCardAddReq;
import org.dromara.project.domain.dto.reissuecard.BusReissueCardUpdateReq;
@ -37,6 +38,7 @@ import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.service.ISysUserService;
import org.dromara.websocket.ChatServerHandler;
import org.springframework.beans.BeanUtils;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
@ -75,6 +77,11 @@ public class BusReissueCardServiceImpl extends ServiceImpl<BusReissueCardMapper,
@Resource
private ISysOssService ossService;
@Resource
private ISubUserSalaryDetailService userSalaryDetailService;
@Resource
private ChatServerHandler chatServerHandler;
/**
* 查询施工人员补卡申请
*
@ -364,6 +371,8 @@ public class BusReissueCardServiceImpl extends ServiceImpl<BusReissueCardMapper,
attendanceService.update(Wrappers.<BusAttendance>lambdaUpdate()
.eq(BusAttendance::getId, bean.getAttendanceId())
.set(BusAttendance::getHandle, "1"));
//发送通知
chatServerHandler.sendSystemMessageToUser(bean.getGangerId(),"["+bean.getUserName()+ "]"+"提交了新的补卡申请");
return bean.getId();
}
@ -380,11 +389,18 @@ public class BusReissueCardServiceImpl extends ServiceImpl<BusReissueCardMapper,
boolean b = updateById(bean);
if("2".equals(bean.getGangerOpinion())){
BusAttendance byId = attendanceService.getById(attendanceId);
String clockStatus = byId.getClockStatus();
byId.setClockStatus(BusAttendanceClockStatusEnum.REISSUE.getValue());
attendanceService.updateById(byId);
//缺卡补充当天的工资表
if(BusAttendanceClockStatusEnum.UNCLOCK.getValue().equals(clockStatus)){
userSalaryDetailService.insertByAttendance(byId.getUserId(),byId.getClockDate());
}
}
if("3".equals(bean.getManagerOpinion())){
BusAttendance byId = attendanceService.getById(attendanceId);
byId.setHandle("0");
attendanceService.updateById(byId);
}
return b;
}

View File

@ -34,6 +34,11 @@ public class QltQualityConstructionLog extends BaseEntity {
*/
private Long projectId;
/**
* 标题
*/
private String title;
/**
* 发生日期
*/

View File

@ -48,4 +48,10 @@ public class QltQualityConstructionLogCreateReq implements Serializable {
*/
private String remark;
/**
* 标题
*/
private String title;
}

View File

@ -28,4 +28,9 @@ public class QltQualityConstructionLogQueryReq implements Serializable {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date happenDate;
/**
* 标题
*/
private String title;
}

View File

@ -45,4 +45,10 @@ public class QltQualityConstructionLogUpdateReq implements Serializable {
*/
private String remark;
/**
* 标题
*/
private String title;
}

View File

@ -82,4 +82,10 @@ public class QltQualityConstructionLogVo implements Serializable {
*/
private Date createTime;
/**
* 标题
*/
private String title;
}

View File

@ -243,6 +243,7 @@ public class QltQualityConstructionLogServiceImpl extends ServiceImpl<QltQuality
// 精准查询
lqw.eq(ObjectUtils.isNotEmpty(projectId), QltQualityConstructionLog::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(happenDate), QltQualityConstructionLog::getHappenDate, happenDate);
lqw.like(StringUtils.isNotBlank(req.getTitle()), QltQualityConstructionLog::getTitle, req.getTitle());
return lqw;
}

View File

@ -69,6 +69,7 @@ public class TransferDataController {
.eq(BusAttendance::getUserId, constructionUserCopy.getSysUserId())
.eq(BusAttendance::getProjectId, constructionUserCopy.getProjectId())
.eq(BusAttendance::getClockDate, clockDate)
.eq(BusAttendance::getClockType, oldAttendance.getCommuter())
);
if(CollectionUtil.isNotEmpty(list)){
continue;

View File

@ -20,7 +20,10 @@ import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.system.service.impl.SysUserServiceImpl;
import org.dromara.websocket.domain.ChatGroup;
import org.dromara.websocket.domain.ChatHistory;
@ -46,6 +49,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
private static ChatHistoryServiceImpl chatHistoryService;
private static ChatGroupServiceImpl chatGroupService;
private static SysUserServiceImpl sysUserService;
private static SysOssServiceImpl sysOssService;
@Autowired
public void setChatHistoryService(ChatHistoryServiceImpl service) {
chatHistoryService = service;
@ -58,6 +62,10 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
public void setSysUserService(SysUserServiceImpl service){
sysUserService = service;
}
@Autowired
public void setSysOssService(SysOssServiceImpl service){
sysOssService = service;
}
// 存储所有连接的客户端Channel
private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
@ -251,7 +259,16 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//来自哪个用户
jsonObject.put("from", sysUserVo.getUserId().toString());
jsonObject.put("nickName", sysUserVo.getNickName());
jsonObject.put("avatar", sysUserVo.getAvatar());
if(sysUserVo.getAvatar() != null){
SysOssVo byId = sysOssService.getById(sysUserVo.getAvatar());
if(byId != null){
jsonObject.put("avatar", byId.getUrl());
}else {
jsonObject.put("avatar", "http://xny.yj-3d.com:9000/xinnengyuan/2025/09/13/d10d60315d6e41718bfaaab4df53c84e.png");
}
}else {
jsonObject.put("avatar", "http://xny.yj-3d.com:9000/xinnengyuan/2025/09/13/d10d60315d6e41718bfaaab4df53c84e.png");
}
log.info("收到客户端消息:{}", jsonObject);
String RoomId = jsonObject.get("roomId").toString();
//根据ID拿到房间实例
@ -378,7 +395,13 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(2));
groupServiceOne.setMembers("[99, "+userId+"]");
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.save(groupServiceOne);
}else {
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.updateById(groupServiceOne);
}
ChatHistory chatHistory = new ChatHistory();
//发送方设置为99 表示系统消息
@ -389,6 +412,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
chatHistory.setIsRead("1");//未读
chatHistoryService.save(chatHistory);
//发送消息后 将该房间未读消息数加1
if (userRoomCountMap.containsKey(userId+"+"+groupServiceOne.getId())){
//该房间未读消息数加1