消息发送完成

This commit is contained in:
2025-02-26 15:34:14 +08:00
parent 43932d7555
commit 6ef339849e
17 changed files with 412 additions and 61 deletions

View File

@ -0,0 +1,18 @@
package com.ruoyi.wgz.bo.req;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("修改已读未读状态请求对象")
public class WgzAppReadUnreadReq implements Serializable {
@ApiModelProperty("消息主键自增ID")
private Long messageId;
}

View File

@ -24,7 +24,7 @@ public class WgzAppPersonalBasicInformationRes implements Serializable {
@ApiModelProperty("姓名")
private String username;
@ApiModelProperty("性别")
@ApiModelProperty("性别字典sys_user_sex")
private String gender;
@ApiModelProperty("民族")

View File

@ -13,6 +13,6 @@ import java.io.Serializable;
@Accessors(chain = true)
@ApiModel("考勤打卡·APP用户今日打卡状态")
public class WgzAppUserClockingConditionRes implements Serializable {
@ApiModelProperty("务工者今日打卡状态0上班 1下班 2请假")
@ApiModelProperty("务工者今日打卡状态0上班 1下班 2请假 3已完成")
private Integer clockingCondition;
}

View File

@ -84,7 +84,7 @@ public class WgzPayCalculation implements Serializable {
/** 出勤天数 */
@Excel(name = "出勤天数")
@ApiModelProperty("出勤天数")
private Long num;
private Integer num;
/** 务工状态 */
@Excel(name = "务工状态")

View File

@ -1,6 +1,8 @@
package com.ruoyi.wgz.service;
import com.ruoyi.wgz.bo.req.WgzAppConfirmRegistrationReq;
import com.ruoyi.wgz.bo.req.WgzAppGetMessageListReq;
import com.ruoyi.wgz.bo.req.WgzAppReadUnreadReq;
import com.ruoyi.wgz.bo.res.WgzAppGetMessageListRes;
import com.ruoyi.wgz.bo.res.WgzAppMessageTypeStatisticsRes;
import com.ruoyi.wgz.bo.res.WgzAppRegistrationInformationRes;
@ -84,4 +86,9 @@ public interface IWgzMessageService extends IServicePlus<WgzMessage> {
* 根据消息招工申请信息的主键ID去获取招工信息
*/
WgzAppRegistrationInformationRes userRegistrationInformation(Long messageId);
/**
* 修改已读未读状态
*/
Boolean userReadUnread(@Validated WgzAppReadUnreadReq req);
}

View File

@ -188,7 +188,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
setPnchOsition(req.getPnchOsition());
LocalDateTime now = LocalDateTime.now(); //当前完整年月日时分秒
LocalTime localTime = now.toLocalTime(); //获取时分秒
if (Objects.isNull(we)) { //表示当天第一次打卡---上班
if (Objects.isNull(we)) { //表示当天第一次打卡---上班 否则 表示当天不是第一次打卡---下班
wgzAttendance.setClockInTime(now);
LocalTime beginWorkTime = appById.getBeginWorkTime(); //上班
if (!localTime.isBefore(beginWorkTime)) {
@ -196,7 +196,12 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
wgzAttendance.setLateTime(now);
wgzAttendance.setExceptionType("1,");
}
}else{ //表示当天不是第一次打卡---下班
}else{
//7、获取上次打卡时间与这次打卡时间的间隔是否超过3分钟
boolean flag = isMinutesDifferenceGreaterThanThree(we.getClockInTime(), now);
if (!flag){
throw new RuntimeException("打卡时间间隔不能少于3分钟");
}
wgzAttendance.setClockOutTime(now);
LocalTime endWorkTime = appById.getEndWorkTime(); //下班
if (!localTime.isAfter(endWorkTime)) {
@ -208,6 +213,21 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
return baseMapper.insert(wgzAttendance) > 0;
}
/**
* 判断两个 LocalDateTime 之间的差值分钟数是否超过 3
* @param startTime 开始时间
* @param endTime 结束时间
* @return 如果差值分钟数超过 3 返回 true否则返回 false
*/
public static boolean isMinutesDifferenceGreaterThanThree(LocalDateTime startTime, LocalDateTime endTime) {
// 计算两个时间之间的持续时间
Duration duration = Duration.between(startTime, endTime);
// 获取持续时间的分钟数
long minutes = duration.toMinutes();
// 判断分钟数是否超过 3
return Math.abs(minutes) > 3;
}
@Override
public WgzAppUserClockingConditionRes userClockingCondition() {
WgzAppUserClockingConditionRes res = new WgzAppUserClockingConditionRes();
@ -217,10 +237,14 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
String formattedDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
WgzAttendance wgzAttendance = publicFindByUserIdWait(appUserId, by.getId(), formattedDate);
//2、获取今日用户打卡状态
if (Objects.isNull(wgzAttendance)) {
if (wgzAttendance == null) {
res.setClockingCondition(0); //上班
}else{
res.setClockingCondition(1); //下班
//上下班都打卡了就是已完成
if (wgzAttendance.getClockInTime()!=null && wgzAttendance.getClockOutTime()!=null){
res.setClockingCondition(3); //已完成
}
if (wgzAttendance.getLeaveMarkId()!= null && wgzAttendance.getLeaveMarkId()!= 0) {
res.setClockingCondition(2); //请假
}

View File

@ -13,8 +13,10 @@ import com.ruoyi.common.core.page.PagePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISysDictTypeService;
import com.ruoyi.wgz.bo.req.WgzAppConfirmRegistrationReq;
import com.ruoyi.wgz.bo.req.WgzAppGetMessageListReq;
import com.ruoyi.wgz.bo.req.WgzAppLeaveHistoryListPageReq;
import com.ruoyi.wgz.bo.req.WgzAppReadUnreadReq;
import com.ruoyi.wgz.bo.res.WgzAppGetMessageListRes;
import com.ruoyi.wgz.bo.res.WgzAppMessageTypeStatisticsRes;
import com.ruoyi.wgz.bo.res.WgzAppRegistrationInformationRes;
@ -170,4 +172,10 @@ public class WgzMessageServiceImpl extends ServicePlusImpl<WgzMessageMapper, Wgz
// byRecruitIdData.setAnnex(null);
return byRecruitIdData;
}
@Override
public Boolean userReadUnread(WgzAppReadUnreadReq req) {
WgzMessage wgzMessage = new WgzMessage().setId(req.getMessageId()).setReadStatus("1");
return baseMapper.updateById(wgzMessage) > 0;
}
}

View File

@ -5,14 +5,18 @@ 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.BgtPayCalculationListDTO;
import com.ruoyi.bgt.domain.dto.BgtPayCalculationUpdateDTO;
import com.ruoyi.bgt.service.IBgtMessageService;
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
import com.ruoyi.bgt.service.IBgtProjectRecruitService;
import com.ruoyi.common.constants.WgzAndBgtMessageConstant;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
@ -24,14 +28,9 @@ import com.ruoyi.wgz.bo.WgzPayCalculationQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppApplyForPayrollSettlementListReq;
import com.ruoyi.wgz.bo.req.WgzApplyForPayrollSettlementAddReq;
import com.ruoyi.wgz.bo.res.WgzAppApplyForPayrollSettlementListRes;
import com.ruoyi.wgz.domain.WgzPayCalculation;
import com.ruoyi.wgz.domain.WgzPayCalculationFiles;
import com.ruoyi.wgz.domain.WgzUser;
import com.ruoyi.wgz.domain.*;
import com.ruoyi.wgz.mapper.WgzPayCalculationMapper;
import com.ruoyi.wgz.service.IWgzAttendanceService;
import com.ruoyi.wgz.service.IWgzPayCalculationFilesService;
import com.ruoyi.wgz.service.IWgzPayCalculationService;
import com.ruoyi.wgz.service.IWgzUserService;
import com.ruoyi.wgz.service.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -40,9 +39,12 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.ruoyi.common.constants.WgzAndBgtMessageConstant.*;
/**
* 工资结算Service业务层处理
*
@ -70,6 +72,12 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
@Autowired
private IWgzAttendanceService attendanceService;
@Autowired
private IWgzMessageService iWgzMessageService;
@Autowired
private IBgtMessageService iBgtMessageService;
@Override
public WgzPayCalculation queryById(Long id){
return getById(id);
@ -153,17 +161,54 @@ public class WgzPayCalculationServiceImpl extends ServicePlusImpl<WgzPayCalculat
public Boolean userApplyForPayrollSettlementAdd(WgzApplyForPayrollSettlementAddReq req) {
//1、获取当前人
SysUser user = SecurityUtils.getLoginUser().getUser();
BgtProjectRecruitApply by = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(user.getUserId());
BgtProjectRecruit appById = iBgtProjectRecruitService.getAppById(by.getId());
BgtProjectRecruitApply recruitApply = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(user.getUserId());
BgtProjectRecruit recruit = iBgtProjectRecruitService.getAppById(recruitApply.getId());
//2、组装数据
WgzPayCalculation wgzPayCalculation = new WgzPayCalculation();
BeanUtils.copyProperties(req,wgzPayCalculation);
wgzPayCalculation.
setUserId(user.getUserId()).
setUserName(user.getUserName()).
setAuditorUserId(appById.getUserId());
setAuditorUserId(recruit.getUserId());
//3、获取附件信息并插入
iWgzPayCalculationFilesService.saveBatch(req.getPayCalculation());
//4、插入工资结算信息
boolean save = save(wgzPayCalculation);
if (save) {
WgzUser byId = wgzUserService.findByUserId(user.getUserId());
Map<String, String> mp = new HashMap<>();
mp.put("projectName", recruit.getRecruitName());
mp.put("userName", byId.getUsername());
mp.put("num", String.valueOf(wgzPayCalculation.getNum()));
mp.put("money", String.valueOf(new BigDecimal(wgzPayCalculation.getNum()).multiply(wgzPayCalculation.getRecruitAmount())));
WgzMessage wgzMessage = new WgzMessage().
setSenderType(USERTYPE_SYSTEM).
setRecipientType(USERTYPE_WGZ).
setRecipientId(user.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"111")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"112")).
setTableId(wgzPayCalculation.getId()).
setTableName(SqlHelper.table(WgzPayCalculation.class).getTableName()).
setMessageLargeType(LARGE_SALARY);
if (!iWgzMessageService.sendAMessage(wgzMessage)){
throw new RuntimeException("系统工资结算消息发送失败!");
}
BgtMessage bgtMessage = new BgtMessage().
setSenderType(USERTYPE_WGZ).
setSenderId(user.getUserId()).
setRecipientType(USERTYPE_BGT).
setRecipientId(recruit.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"209")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"210")).
setTableId(wgzPayCalculation.getId()).
setTableName(SqlHelper.table(WgzPayCalculation.class).getTableName()).
setMessageLargeType(BGT_LARGE).
setMessageSmallType(BGT_TYPE_PAY);
if (!iBgtMessageService.sendAMessage(bgtMessage)){
throw new RuntimeException("发送补卡消息失败!");
}
return true;
}
return save(wgzPayCalculation);
}

View File

@ -5,12 +5,16 @@ 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.BgtReissueacardListDTO;
import com.ruoyi.bgt.domain.dto.BgtReissueacardUpdateDTO;
import com.ruoyi.bgt.service.IBgtMessageService;
import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService;
import com.ruoyi.bgt.service.IBgtProjectRecruitService;
import com.ruoyi.common.constants.WgzAndBgtMessageConstant;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.PageUtils;
@ -20,19 +24,23 @@ import com.ruoyi.wgz.bo.req.WgzAppCardReplacementApplicationReq;
import com.ruoyi.wgz.bo.req.WgzAppReplacementCardRecordReq;
import com.ruoyi.wgz.bo.res.WgzReplacementCardRecordRes;
import com.ruoyi.wgz.domain.WgzAttendance;
import com.ruoyi.wgz.domain.WgzMessage;
import com.ruoyi.wgz.domain.WgzReissueacard;
import com.ruoyi.wgz.domain.WgzUser;
import com.ruoyi.wgz.mapper.WgzReissueacardMapper;
import com.ruoyi.wgz.service.IWgzAttendanceService;
import com.ruoyi.wgz.service.IWgzMessageService;
import com.ruoyi.wgz.service.IWgzReissueacardService;
import com.ruoyi.wgz.service.IWgzUserService;
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.format.DateTimeFormatter;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import static com.ruoyi.common.constants.WgzAndBgtMessageConstant.*;
/**
* 补卡申请Service业务层处理
@ -52,6 +60,15 @@ public class WgzReissueacardServiceImpl extends ServicePlusImpl<WgzReissueacardM
@Autowired
private IWgzAttendanceService iWgzAttendanceService;
@Autowired
private IWgzMessageService iWgzMessageService;
@Autowired
private IBgtMessageService iBgtMessageService;
@Autowired
private IWgzUserService wgzUserService;
@Override
public WgzReissueacard queryById(Long id){
return getById(id);
@ -132,10 +149,8 @@ public class WgzReissueacardServiceImpl extends ServicePlusImpl<WgzReissueacardM
public Boolean userCardReplacementApplication(WgzAppCardReplacementApplicationReq req) {
//1、获取当前用户信息
Long appUserId = SecurityUtils.getAppUserId();
//2、获取当前用户所在的工地id
BgtProjectRecruitApply by = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(appUserId);
//3、根据招工id获取到具体招工信息
BgtProjectRecruit appById = iBgtProjectRecruitService.getAppById(by.getId());
BgtProjectRecruitApply recruitApply = iBgtProjectRecruitApplyService.selectByUserIdProjectRecruitApplyId(appUserId);
BgtProjectRecruit recruit = iBgtProjectRecruitService.getAppById(recruitApply.getId());
//4、获取到原打卡的信息
WgzAttendance attendanceInfo = iWgzAttendanceService.findById(req.getAttendanceId());
if (Objects.isNull(attendanceInfo)) {
@ -149,16 +164,53 @@ public class WgzReissueacardServiceImpl extends ServicePlusImpl<WgzReissueacardM
}
//5、组装补卡申请数据
WgzReissueacard wgzReissueacard = new WgzReissueacard().
setRecruitId(by.getRecruitId()).
setRecruitId(recruitApply.getRecruitId()).
setUserId(appUserId).
setAttendanceId(req.getAttendanceId()).
setType(req.getType()).
setRecruitName(appById.getRecruitName()).
setRecruitName(recruit.getRecruitName()).
setRawTime(rawTime).
setNowTime(req.getNowTime()).
setReason(req.getReason()).
setAttendanceId(appById.getUserId());
return baseMapper.insert(wgzReissueacard) > 0;
setAttendanceId(recruit.getUserId());
int insert = baseMapper.insert(wgzReissueacard);
//6、发送消息
WgzUser byId = wgzUserService.findByUserId(appUserId);
Map<String, String> mp = new HashMap<>();
mp.put("projectName", recruit.getRecruitName());
mp.put("userName", byId.getUsername());
mp.put("data",String.valueOf(req.getNowTime()));
if (insert > 0) {
WgzMessage wgzMessage = new WgzMessage().
setSenderType(USERTYPE_SYSTEM).
setRecipientType(USERTYPE_WGZ).
setRecipientId(appUserId).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"109")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"110")).
setTableId(wgzReissueacard.getId()).
setTableName(SqlHelper.table(WgzReissueacard.class).getTableName()).
setMessageLargeType(LARGE_OTHER).
setMessageSmallType(SMALL_CARD);
if (!iWgzMessageService.sendAMessage(wgzMessage)){
throw new RuntimeException("系统补卡消息发送失败!");
}
BgtMessage bgtMessage = new BgtMessage().
setSenderType(USERTYPE_WGZ).
setSenderId(appUserId).
setRecipientType(USERTYPE_BGT).
setRecipientId(recruit.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"207")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"208")).
setTableId(wgzReissueacard.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(BGT_LARGE).
setMessageSmallType(BGT_TYPE_MAKE_UP);
if (!iBgtMessageService.sendAMessage(bgtMessage)){
throw new RuntimeException("发送补卡消息失败!");
}
return true;
}
return false;
}