bug
This commit is contained in:
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -34,6 +34,11 @@ public class QltQualityConstructionLog extends BaseEntity {
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 发生日期
|
||||
*/
|
||||
|
@ -48,4 +48,10 @@ public class QltQualityConstructionLogCreateReq implements Serializable {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
|
||||
}
|
||||
|
@ -28,4 +28,9 @@ public class QltQualityConstructionLogQueryReq implements Serializable {
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
|
||||
private Date happenDate;
|
||||
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
}
|
||||
|
@ -45,4 +45,10 @@ public class QltQualityConstructionLogUpdateReq implements Serializable {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
|
||||
}
|
||||
|
@ -82,4 +82,10 @@ public class QltQualityConstructionLogVo implements Serializable {
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user