消息发送完成

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

@ -39,7 +39,7 @@ public interface BgtProjectRecruitMapper extends BaseMapperPlus<BgtProjectRecrui
List<WgzAppCancelRegistrationProjectDetailsTwo> GetsTheMembersUnderTheCurrentProject (@Param("recruitId") Long recruitId);
TableDataInfo<WgzAppJobListingRes> userJobListing(@Param("page") Page<WgzAppJobListingReq> page);
Page<WgzAppJobListingRes> userJobListing(@Param("page") Page<WgzAppJobListingReq> page);
}

View File

@ -17,6 +17,7 @@ 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.SysDictData;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.RecruitApplyStatus;
@ -24,6 +25,7 @@ import com.ruoyi.common.exception.BaseException;
import com.ruoyi.common.service.IAnnexService;
import com.ruoyi.common.utils.PageUtils;
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.WgzAppUnderwayReq;
import com.ruoyi.wgz.bo.res.WgzAppUnderwayRes;
@ -66,6 +68,8 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
private IWgzMessageService iWgzMessageService;
@Autowired
private IBgtMessageService iBgtMessageService;
@Autowired
private ISysDictTypeService dictTypeService;
@Override
public BgtProjectRecruitApply queryById(Long id){
@ -176,12 +180,12 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
lqw.eq(BgtProjectRecruitApply::getUserId, id).
in(BgtProjectRecruitApply::getStatus, strings); //包工头+务工者同意 or 进场 才算进场ok
List<BgtProjectRecruitApply> bgtProjectRecruitApplies = baseMapper.selectList(lqw);
if (bgtProjectRecruitApplies.isEmpty()){
throw new RuntimeException("异常,还未查询到您进入了工地!");
}
if (bgtProjectRecruitApplies.size()>1){
throw new RuntimeException("异常,查询到用户同时在多个工地务工!");
}
if (bgtProjectRecruitApplies.isEmpty()){
return null;
}
return bgtProjectRecruitApplies.get(0);
}
@ -221,15 +225,18 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
int insert = baseMapper.insert(bgtProjectRecruitApply);
//4、发送消息
if (insert>0){
SysDictData typeOfWork = dictTypeService.selectDictDataByTypeAndData("type_of_work", byId.getTypeOfWork());
Map<String, String> mp = new HashMap<>();
mp.put("projectName",appById.getRecruitName());
mp.put("userName",byId.getUsername());
mp.put("post",typeOfWork.getDictLabel());
//4-1、系统发送消息给当前用户
WgzMessage wgzMessage = new WgzMessage().
setSenderType(USERTYPE_SYSTEM).
setRecipientType(USERTYPE_WGZ).
setRecipientId(appUserId).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"1")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"2")).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"101")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"102")).
setTableId(bgtProjectRecruitApply.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(LARGE_OTHER).
@ -243,11 +250,12 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
setSenderId(appUserId).
setRecipientType(USERTYPE_BGT).
setRecipientId(appById.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"3")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"4")).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"201")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"202")).
setTableId(bgtProjectRecruitApply.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(LARGE_APPLY);
setMessageLargeType(BGT_LARGE).
setMessageSmallType(BGT_TYPE_SIGN_UP);
if (!iBgtMessageService.sendAMessage(bgtMessage)){
throw new RuntimeException("发送消息失败!");
}
@ -304,8 +312,8 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
setSenderType(USERTYPE_SYSTEM).
setRecipientType(USERTYPE_WGZ).
setRecipientId(appUserId).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"1")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"2")).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"103")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"104")).
setTableId(bgtProjectRecruitApply.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(LARGE_OTHER).
@ -330,9 +338,85 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
@Override
public Boolean userConfirmRegistration(WgzAppConfirmRegistrationReq req) {
BgtProjectRecruitApply apply = new BgtProjectRecruitApply().setId(req.getRecruitApplyId()).setStatus(req.getStatus());
//发送取消或拒绝的消息给包工头、系统
return this.updateById(apply);
//1、获取当前用户
WgzUser byUserId = wgzUserService.findByUserId(SecurityUtils.getAppUserId());
//2、当前申请报名的工地信息
BgtProjectRecruitApply recruitApply = iBgtProjectRecruitApplyService.queryById(req.getRecruitApplyId());
BgtProjectRecruit recruit = iBgtProjectRecruitService.getAppById(recruitApply.getId());
//3、更新报名状态
BgtProjectRecruitApply apply = new BgtProjectRecruitApply();
apply.setId(req.getRecruitApplyId());
apply.setStatus(req.getStatus());
int insert = baseMapper.insert(apply);
if (insert == 0){
throw new RuntimeException("插入数据失败!");
}
//4系统拒绝消息
SysDictData typeOfWork = dictTypeService.selectDictDataByTypeAndData("type_of_work", recruit.getTypeOfWork());
Map<String, String> mp = new HashMap<>();
mp.put("projectName",recruit.getRecruitName());
mp.put("userName",byUserId.getUsername());
mp.put("post",typeOfWork.getDictLabel());
if (req.getStatus().equals("3")){
WgzMessage wgzMessage = new WgzMessage().
setSenderType(USERTYPE_SYSTEM).
setRecipientType(USERTYPE_WGZ).
setRecipientId(byUserId.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"105")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"106")).
setTableId(apply.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(LARGE_APPLY);
if (!iWgzMessageService.sendAMessage(wgzMessage)){
throw new RuntimeException("系统消息报名拒绝发送失败!");
}
BgtMessage bgtMessage = new BgtMessage().
setSenderType(USERTYPE_WGZ).
setSenderId(byUserId.getUserId()).
setRecipientType(USERTYPE_BGT).
setRecipientId(apply.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"203")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"204")).
setTableId(apply.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(BGT_LARGE).
setMessageSmallType(BGT_TYPE_SIGN_UP);
if (!iBgtMessageService.sendAMessage(bgtMessage)){
throw new RuntimeException("发送报名拒绝消息失败!");
}
return true;
}
//系统同意消息
if (req.getStatus().equals("4")){
WgzMessage wgzMessage = new WgzMessage().
setSenderType(USERTYPE_SYSTEM).
setRecipientType(USERTYPE_WGZ).
setRecipientId(byUserId.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"107")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"108")).
setTableId(apply.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(LARGE_APPLY);
if (!iWgzMessageService.sendAMessage(wgzMessage)){
throw new RuntimeException("系统消息报名同意发送失败!");
}
BgtMessage bgtMessage = new BgtMessage().
setSenderType(USERTYPE_WGZ).
setSenderId(byUserId.getUserId()).
setRecipientType(USERTYPE_BGT).
setRecipientId(apply.getUserId()).
setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"205")).
setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"206")).
setTableId(apply.getId()).
setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()).
setMessageLargeType(BGT_LARGE).
setMessageSmallType(BGT_TYPE_SIGN_UP);
if (!iBgtMessageService.sendAMessage(bgtMessage)){
throw new RuntimeException("发送报名同意消息失败!");
}
return true;
}
return false;
}
}

View File

@ -194,7 +194,7 @@ public class BgtProjectRecruitServiceImpl extends ServicePlusImpl<BgtProjectRecr
Page<WgzAppJobListingReq> pe = new Page<>();
pe.setCurrent(req.getPageNum());
pe.setSize(req.getPageSize());
return baseMapper.userJobListing(pe);
return PageUtils.buildDataInfo(baseMapper.userJobListing(pe));
}
}

View File

@ -22,38 +22,111 @@ public class WgzAndBgtMessageConstant {
* =====================================================务工者=====================================================
*/
//【报名】系统给务工者提示
/**
* 系统给务工者提示
*/
//【报名申请】1-2
public static final String WGZ_SYSTEM_HEADLINE_APPLY = "您已申请【%s】项目";
public static final String WGZ_SYSTEM_SUBHEADING_APPLY = "您已成功申请到【%s】项目,请耐心等待回复!";
//【取消报名】3-4
public static final String WGZ_SYSTEM_HEADLINE_APPLY_CANCEL = "您已申请取消【%s】项目";
public static final String WGZ_SYSTEM_SUBHEADING_APPLY_CANCEL = "您已成功取消【%s】项目,祝您早日找到心仪的工作!";
//【报名】务工者给包工头提示
//【拒绝报名】5-6
public static final String WGZ_SYSTEM_HEADLINE_APPLY_REFUSE = "您已回拒【%s】项目";
public static final String WGZ_SYSTEM_SUBHEADING_APPLY_REFUSE = "您已成功拒绝【%s】项目,祝您早日找到心仪的工作!";
//【确认报名】7-8
public static final String WGZ_SYSTEM_HEADLINE_APPLY_AFFIRM = "您已成功进入【%s】项目";
public static final String WGZ_SYSTEM_SUBHEADING_APPLY_AFFIRM = "您已成功进入【%s】项目,祝你平平安安赚大钱!";
//【补卡申请】9-10
public static final String WGZ_SYSTEM_HEADLINE_REISSUEACARD = "您已申请了【%s】项目【%s】的补卡操作";
public static final String WGZ_SYSTEM_SUBHEADING_REISSUEACARD = "您已成功发起了【%s】的补卡申请请耐心等待回复";
//【工资结算】11-12
public static final String WGZ_SYSTEM_HEADLINE_PAYCALCULATION = "您正在申请【%s】项目,为期【%s】天的工资结算操作";
public static final String WGZ_SYSTEM_SUBHEADING_PAYCALCULATION = "您已成功发起为期【%s】天金额为【%s】的工资结算操作请耐心等待回复";
/**
* 务工者给包工头提示
*/
//【报名】1-2
public static final String WGZ_HEADLINE_APPLY = "务工者【%s】正在向你申请【%s】的岗位";
public static final String WGZ__SUBHEADING_APPLY = "务工者【%s】正在向你申请【%s】岗位您可点击查看更多信息";
//【拒绝报名】3-4
public static final String WGZ_HEADLINE_APPLY_REFUSE = "务工者【%s】已委婉的回拒了您提供的【%s】岗位";
public static final String WGZ__SUBHEADING_APPLY_REFUSE = "务工者【%s】已委婉的回拒了您提供的【%s】岗位并祝你做大做强";
//【确认报名】5-6
public static final String WGZ_HEADLINE_APPLY_AFFIRM = "务工者【%s】已成功加入了您团队";
public static final String WGZ__SUBHEADING_APPLY_AFFIRM = "务工者【%s】已同意进入了您提供的【%s】岗位";
//【补卡申请】7-8
public static final String WGZ_HEADLINE_REISSUEACARD = "务工者【%s】正在向你发起补卡申请";
public static final String WGZ__SUBHEADING_REISSUEACARD = "务工者【%s】向你发起【%s】的补卡申请操作";
//【工资结算】9-10
public static final String WGZ_HEADLINE_PAYCALCULATION = "务工者【%s】正在向你发起工资结算";
public static final String WGZ__SUBHEADING_PAYCALCULATION = "务工者【%s】向你发起为期【%s】天金额为【%s】圆整的工资结算操作";
//务工者消息返回
public static String wgzMessage(Map<String, String> mp, String type) {
switch (type){
//系统申请报名提示
case "1":
case "101":
return String.format(WGZ_SYSTEM_HEADLINE_APPLY, mp.get("projectName"));
case "2":
case "102":
return String.format(WGZ_SYSTEM_SUBHEADING_APPLY, mp.get("projectName"));
//务工者向包工头申请报名提示
case "3":
return String.format(WGZ_HEADLINE_APPLY, mp.get("userName"), mp.get("post"));
case "4":
return String.format(WGZ__SUBHEADING_APPLY, mp.get("userName"),mp.get("post"));
//系统取消报名提示
case "5":
case "103":
return String.format(WGZ_SYSTEM_HEADLINE_APPLY_CANCEL, mp.get("projectName"));
case "6":
case "104":
return String.format(WGZ_SYSTEM_SUBHEADING_APPLY_CANCEL, mp.get("projectName"));
//系统拒绝报名提示
case "105":
return String.format(WGZ_SYSTEM_HEADLINE_APPLY_REFUSE, mp.get("projectName"));
case "106":
return String.format(WGZ_SYSTEM_SUBHEADING_APPLY_REFUSE, mp.get("projectName"));
//系统确认报名提示
case "107":
return String.format(WGZ_SYSTEM_HEADLINE_APPLY_AFFIRM, mp.get("projectName"));
case "108":
return String.format(WGZ_SYSTEM_SUBHEADING_APPLY_AFFIRM, mp.get("projectName"));
//系统补卡申请提示
case "109":
return String.format(WGZ_SYSTEM_HEADLINE_REISSUEACARD, mp.get("projectName"),mp.get("data"));
case "110":
return String.format(WGZ_SYSTEM_SUBHEADING_REISSUEACARD, mp.get("projectName"));
//系统工资结算申请提示
case "111":
return String.format(WGZ_SYSTEM_HEADLINE_PAYCALCULATION,mp.get("projectName"), mp.get("num"));
case "112":
return String.format(WGZ_SYSTEM_SUBHEADING_PAYCALCULATION, mp.get("num"),mp.get("money"));
//务工者向包工头申请报名
case "201":
return String.format(WGZ_HEADLINE_APPLY, mp.get("userName"), mp.get("post"));
case "202":
return String.format(WGZ__SUBHEADING_APPLY, mp.get("userName"),mp.get("post"));
//务工者向包工头拒绝报名
case "203":
return String.format(WGZ_HEADLINE_APPLY_REFUSE, mp.get("userName"), mp.get("post"));
case "204":
return String.format(WGZ__SUBHEADING_APPLY_REFUSE, mp.get("userName"),mp.get("post"));
//务工者向包工头确认报名
case "205":
return String.format(WGZ_HEADLINE_APPLY_AFFIRM, mp.get("userName"));
case "206":
return String.format(WGZ__SUBHEADING_APPLY_AFFIRM, mp.get("userName"),mp.get("post"));
//务工者向包工头发起补卡申请
case "207":
return String.format(WGZ_HEADLINE_REISSUEACARD, mp.get("userName"));
case "208":
return String.format(WGZ__SUBHEADING_REISSUEACARD, mp.get("userName"),mp.get("data"));
//务工者向包工头发起工资结算
case "209":
return String.format(WGZ_HEADLINE_PAYCALCULATION, mp.get("userName"));
case "210":
return String.format(WGZ__SUBHEADING_PAYCALCULATION, mp.get("userName"),mp.get("num"),mp.get("money"));
default:
return "未知类型";
}
}
/**
* =====================================================包工头=====================================================
* =====================================================包工头=====================================================
@ -78,6 +151,7 @@ public class WgzAndBgtMessageConstant {
public static final String SUBHEADING = "subheading"; //副标题
//消息类型
public static final String BGT_LARGE = "3"; //大类型固定为3
public static final String BGT_TYPE_SIGN_UP = "1"; //务工者报名
public static final String BGT_TYPE_PAY = "2"; //付款
public static final String BGT_TYPE_LEAVE = "3"; //请假

View File

@ -102,4 +102,13 @@ public interface ISysDictTypeService extends IServicePlus<SysDictType> {
* @return 结果
*/
public String checkDictTypeUnique(SysDictType dictType);
/**
* 根据字典类型+字典数据 = 指定字典
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
public SysDictData selectDictDataByTypeAndData(String dictType,String dictData);
}

View File

@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -235,4 +236,25 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl<SysDictTypeMapper, S
}
return UserConstants.UNIQUE;
}
@Override
public SysDictData selectDictDataByTypeAndData(String dictType, String dictData) {
List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
if (CollUtil.isNotEmpty(dictDatas)) {
for (SysDictData data : dictDatas) {
if (data.getDictValue().equals(dictData)){
return data;
}
}
}
dictDatas = dictDataMapper.selectDictDataByType(dictType);
if (CollUtil.isNotEmpty(dictDatas)) {
for (SysDictData data : dictDatas) {
if (data.getDictValue().equals(dictData)){
return data;
}
}
}
return null;
}
}

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;
}