This commit is contained in:
Vinjor 2025-02-24 14:20:14 +08:00
parent c11c140c5e
commit 03191fa2f1
27 changed files with 124 additions and 77 deletions

View File

@ -45,6 +45,7 @@ public class MessageSend {
new NotifySendSingleToUserReqDTO()
.setUserId(id)
.setTemplateCode(messageDTO.getTemplateCode())
.setSystemCode(messageDTO.getSystemCode())
.setTemplateParams(map));
});
}

View File

@ -18,6 +18,8 @@ public class MessageDTO {
/** 模板枚举 */
private String templateCode;
/** 系统标识 */
private String systemCode;
/** 参数列表 */
private List<Object> paramList;

View File

@ -11,4 +11,9 @@ import lombok.Data;
**/
@Data
public class DlBaseNoticeReqVO extends DlBaseNotice {
/**
* 公告类型1通知 2公告 3操作指南,多个以英文逗号隔开
*/
private String typeStr;
}

View File

@ -35,8 +35,11 @@
<if test="map.server != null and map.server != ''">
and dbn.server = #{map.server}
</if>
<if test="map.type != null and map.type != ''">
and dbn.type = #{map.type}
<if test="map.typeStr != null and map.typeStr != ''">
and dbn.type IN
<foreach collection="map.typeStr.split(',')" separator="," item="item" open="(" close=")">
#{item}
</foreach>
</if>
<if test="map.status != null">
and dbn.status = #{map.status}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.base.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.iocoder.yudao.module.base.service.DlDriveSchoolCoachService;
import cn.iocoder.yudao.module.base.service.DlDriveSchoolStaffService;
import cn.iocoder.yudao.module.base.service.DlDriveSchoolStudentService;
@ -10,6 +11,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Date;
/**
* 驾校人员管理通用接口实现类
@ -44,6 +46,13 @@ public class DlDriveSchoolStaffServiceImpl implements DlDriveSchoolStaffService
} else {
//教练和员工
staffVOIPage = coachService.pageStaffCoach(staffVO,page);
staffVOIPage.getRecords().forEach(item->{
if(null!=item.getCarRegisterDate()){
//计算车龄
Long carOld = DateUtil.betweenYear(item.getCarRegisterDate(),new Date(),true);
item.setCarOld(carOld);
}
});
}
return staffVOIPage;
}

View File

@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.base.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Schema(description = "驾校人员-手机APP查询专用接口")
@Data
public class DlDriveSchoolStaffVO {
@ -26,6 +28,11 @@ public class DlDriveSchoolStaffVO {
private String courseTypes;
/**用户ID*/
private Long userId;
/**车辆注册日期*/
private Date carRegisterDate;
/**车龄*/
private Long carOld;
/**时间查询类型all-全部|day-当日|month-当月|more-自定义)*/

View File

@ -32,10 +32,13 @@
main.car_id AS carId,
main.phone AS phone,
main.image AS avatar,
main.user_id AS userId,
dsc.car_register_date AS carRegisterDate,
GROUP_CONCAT(DISTINCT dscc.course_type SEPARATOR ',') AS courseTypes
FROM
drive_school_coach main
LEFT JOIN drive_school_coach_course dscc ON main.id = dscc.coach_id AND dscc.deleted = 0
LEFT JOIN drive_school_car dsc ON main.user_id = dsc.user_id AND dsc.deleted = 0
<where>
main.deleted = 0
<if test="entity.type != null and entity.type != ''">

View File

@ -17,7 +17,7 @@ import java.util.concurrent.ConcurrentHashMap;
* @author vinjor-M
* @date 10:22 2024/10/17
**/
@ServerEndpoint(value = "/websocket/message/{tenantId}/{userId}")
@ServerEndpoint(value = "/websocket/message/{systemCode}/{tenantId}/{userId}")
@Component
public class NotifyMessageSocket {
private final static Logger log = LoggerFactory.getLogger(NotifyMessageSocket.class);
@ -40,8 +40,8 @@ public class NotifyMessageSocket {
* @param userId
*/
@OnOpen
public void onOpen(Session session, @PathParam(value = "tenantId") String tenantId,@PathParam(value = "userId") String userId) {
this.sessionMap.put(tenantId+"_"+userId,session);
public void onOpen(Session session,@PathParam(value = "systemCode") String systemCode, @PathParam(value = "tenantId") String tenantId,@PathParam(value = "userId") String userId) {
this.sessionMap.put(systemCode+"_"+tenantId+"_"+userId,session);
log.info("{}租户下用户{}已创建连接", tenantId,userId);
}
@ -68,8 +68,8 @@ public class NotifyMessageSocket {
* @param userId
*/
@OnClose
public void onClose(Session session,@PathParam(value = "tenantId") String tenantId,@PathParam(value = "userId") String userId){
this.sessionMap.remove(tenantId+"_"+userId);
public void onClose(Session session,@PathParam(value = "systemCode") String systemCode,@PathParam(value = "tenantId") String tenantId,@PathParam(value = "userId") String userId){
this.sessionMap.remove(systemCode+"_"+tenantId+"_"+userId);
}
@ -81,17 +81,17 @@ public class NotifyMessageSocket {
* @param userId 用户id
*/
@OnError
public void onError(Throwable throwable,@PathParam(value = "tenantId") String tenantId,@PathParam(value = "userId") String userId){
log.error("{}租户下用户{}已创建连接", tenantId,userId);
public void onError(Throwable throwable,@PathParam(value = "systemCode") String systemCode,@PathParam(value = "tenantId") String tenantId,@PathParam(value = "userId") String userId){
log.error("{}系统{}租户下用户{}已创建连接", systemCode,tenantId,userId);
}
/**
* 发送给指定的用户
* @param message
*/
public void sendMessage(String message, String tenantId,String userId) throws IOException {
if (sessionMap.containsKey(tenantId+"_"+userId)){
Session session = sessionMap.get(tenantId+"_"+userId);
public void sendMessage(String systemCode,String message, String tenantId,String userId) throws IOException {
if (sessionMap.containsKey(systemCode+"_"+tenantId+"_"+userId)){
Session session = sessionMap.get(systemCode+"_"+tenantId+"_"+userId);
session.getAsyncRemote().sendText(message);
}
}

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.base.controller.admin;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.common.MessageSend;
import cn.iocoder.yudao.common.SystemEnum;
import cn.iocoder.yudao.common.dto.MessageDTO;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@ -150,7 +151,7 @@ public class RepairWorkerController {
/**
* 测试给维修工发送消息---测试
* 测试发送消息---测试
* @author vinjor-M
* @date 18:08 2024/10/16
* @return cn.iocoder.yudao.framework.common.pojo.CommonResult<?>
@ -167,9 +168,10 @@ public class RepairWorkerController {
List<Object> paramList = new ArrayList<>();
paramList.add("测试");
paramList.add("3");
messageDTO.setSystemCode(SystemEnum.SCHOOL.getCode());
messageDTO.setParamList(paramList);
messageSend.send(messageDTO);
notifyMessageSocket.sendMessage("11","180",userId.toString());
notifyMessageSocket.sendMessage(SystemEnum.SCHOOL.getCode(),"11","180",userId.toString());
} catch (IOException e) {
e.printStackTrace();
}

View File

@ -85,7 +85,7 @@ public interface RepairWorkerService extends IService<RepairWorker> {
* @param userId 用户id
* @param text 消息通知内容
**/
void sentMessage(Long userId,String text);
void sentMessage(String systemCode,Long userId,String text);
/**
* 向指定用户发送消息(用户非员工)
@ -96,7 +96,7 @@ public interface RepairWorkerService extends IService<RepairWorker> {
* @param text 消息通知内容
* @param isSMS 是否需要发短信
**/
void sentMessageToCus(String ticketId, String text, Boolean isSMS);
void sentMessageToCus(String systemCode,String ticketId, String text, Boolean isSMS);
/**
* 通过班组长的id查该班组的员工

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.base.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.common.RepairRoleEnum;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
@ -200,7 +199,7 @@ public class RepairWorkerServiceImpl extends ServiceImpl<RepairWorkerMapper, Rep
* @date 16:27 2024/10/18
**/
@Override
public void sentMessage(Long userId, String text) {
public void sentMessage(String systemCode,Long userId, String text) {
try {
//获取当前登录用户
// LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
@ -211,10 +210,11 @@ public class RepairWorkerServiceImpl extends ServiceImpl<RepairWorkerMapper, Rep
// 发送站内信
sendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
.setUserId(userId)
.setSystemCode(systemCode)
.setTemplateCode(TICKET_EMPLOY).setTemplateParams(templateParams));
//发送语音提醒---小李---通过租户上下文去取租户ID
// notifyMessageSocket.sendMessage(text, loginUser.getTenantId().toString(), userId.toString());
notifyMessageSocket.sendMessage(text, TenantContextHolder.getRequiredTenantId().toString(), userId.toString());
notifyMessageSocket.sendMessage(systemCode,text, TenantContextHolder.getRequiredTenantId().toString(), userId.toString());
} catch (IOException e) {
e.printStackTrace();
}
@ -230,7 +230,7 @@ public class RepairWorkerServiceImpl extends ServiceImpl<RepairWorkerMapper, Rep
* @param isSMS 是否需要发短信
**/
@Override
public void sentMessageToCus(String ticketId, String text, Boolean isSMS) {
public void sentMessageToCus(String systemCode,String ticketId, String text, Boolean isSMS) {
try {
// 获取工单
DlRepairTickets tickets = repairTicketsService.getById(ticketId);
@ -243,9 +243,10 @@ public class RepairWorkerServiceImpl extends ServiceImpl<RepairWorkerMapper, Rep
// 发送站内信
sendApi.sendSingleMessageToMember(new NotifySendSingleToUserReqDTO()
.setUserId(customerMain.getUserId())
.setSystemCode(systemCode)
.setTemplateCode(TICKET_EMPLOY).setTemplateParams(templateParams));
//发送语音提醒
notifyMessageSocket.sendMessage(text, TenantContextHolder.getRequiredTenantId().toString(), String.valueOf(customerMain.getUserId()));
notifyMessageSocket.sendMessage(systemCode,text, TenantContextHolder.getRequiredTenantId().toString(), String.valueOf(customerMain.getUserId()));
// 发送短信
if (isSMS) {

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.common.RepairRoleEnum;
import cn.iocoder.yudao.common.SystemEnum;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
@ -31,7 +32,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.catalina.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
@ -97,13 +97,13 @@ public class DlRepairBookingServiceImpl extends ServiceImpl<DlRepairBookingMappe
// 选择了服务顾问
if (ObjectUtil.isNotEmpty(repairBookingRespVO.getAdviserId())){
// 发送消息通知
repairWorkerService.sentMessage(Long.valueOf(repairBookingRespVO.getAdviserId()), message + ",预约的服务顾问为:" + repairBookingRespVO.getAdviserName());
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(repairBookingRespVO.getAdviserId()), message + ",预约的服务顾问为:" + repairBookingRespVO.getAdviserName());
}else {
// 没选服务顾问
// 获取所有的服务顾问
List<UserDTO> allServicer = getAllServicer(TenantContextHolder.getRequiredTenantId());
// 发送消息通知
allServicer.forEach(item -> repairWorkerService.sentMessage(item.getId(), message));
allServicer.forEach(item -> repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),item.getId(), message));
}
// 正常的新增修改

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.common.RepairDictConstants;
import cn.iocoder.yudao.common.RepairRoleEnum;
import cn.iocoder.yudao.common.SystemEnum;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.module.base.service.RepairWorkerService;
@ -260,8 +261,8 @@ public class RepairWaresServiceImpl extends ServiceImpl<RepairWaresMapper, Repai
List<String> names = repairWares.stream().map(RepairWares::getName).collect(Collectors.toList());
String result = String.join(",", names);
String message = "以下配件未使用天数超过设定的未使用天数提醒,请及时处理相关事项!" + result;
warehouse.forEach(item -> workerService.sentMessage(item.getId(), message));
admin.forEach(item -> workerService.sentMessage(item.getId(), message));
warehouse.forEach(item -> workerService.sentMessage(SystemEnum.REPAIR.getCode(),item.getId(), message));
admin.forEach(item -> workerService.sentMessage(SystemEnum.REPAIR.getCode(),item.getId(), message));
}
}
@ -292,8 +293,8 @@ public class RepairWaresServiceImpl extends ServiceImpl<RepairWaresMapper, Repai
List<String> names = repairWares.stream().map(RepairWares::getName).collect(Collectors.toList());
String result = String.join(",", names);
String message = "以下配件库存低于设定的库存不足提醒,请及时处理相关事项!\n" + result;
warehouse.forEach(item -> workerService.sentMessage(item.getId(), message));
admin.forEach(item -> workerService.sentMessage(item.getId(), message));
warehouse.forEach(item -> workerService.sentMessage(SystemEnum.REPAIR.getCode(),item.getId(), message));
admin.forEach(item -> workerService.sentMessage(SystemEnum.REPAIR.getCode(),item.getId(), message));
}
}
@ -310,10 +311,10 @@ public class RepairWaresServiceImpl extends ServiceImpl<RepairWaresMapper, Repai
String message = flag ? "检查配件入库是否超时出现故障,请联系开发人员解决" : "检查配件库存是否充足出现故障,请联系开发人员解决";
// 如果为空就通知相关人员出现了问题
if (CollUtil.isNotEmpty(warehouse)) {
warehouse.forEach(item -> workerService.sentMessage(item.getId(), message));
warehouse.forEach(item -> workerService.sentMessage(SystemEnum.REPAIR.getCode(),item.getId(), message));
}
if (CollUtil.isNotEmpty(admin)) {
admin.forEach(item -> workerService.sentMessage(item.getId(), message));
admin.forEach(item -> workerService.sentMessage(SystemEnum.REPAIR.getCode(),item.getId(), message));
}
}
}

View File

@ -217,7 +217,7 @@ public class DlRepairSoServiceImpl extends ServiceImpl<DlRepairSoMapper, DlRepai
// 如果主表记录的领退料人与操作人一致即是员工点击的作废即需要通知仓库
boolean flag = so.getUserId().equals(loginUserId);
if (flag) {
repairWorkerService.sentMessage(Long.valueOf(so.getCreator()), (so.getSoType().equals("02") ? "领料单:" : "退料单:") + so.getSoNo() + "已被" + so.getUserName() + "作废");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(so.getCreator()), (so.getSoType().equals("02") ? "领料单:" : "退料单:") + so.getSoNo() + "已被" + so.getUserName() + "作废");
// 需要更新库存和申请表数据
// 查单据子表
List<DlRepairSoi> sois = repairSoiService.list(new LambdaQueryWrapper<DlRepairSoi>().in(DlRepairSoi::getSoId, so.getId()));
@ -345,7 +345,7 @@ public class DlRepairSoServiceImpl extends ServiceImpl<DlRepairSoMapper, DlRepai
/* 这里添加新逻辑,员工确认领料时,把领的配件添加进工单子表---end */
// 通知仓库
repairWorkerService.sentMessage(Long.valueOf(so.getCreator()), so.getUserName() + "已确认领料单:" + so.getSoNo());
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(so.getCreator()), so.getUserName() + "已确认领料单:" + so.getSoNo());
// 记录日志
// 查配件申请表
@ -397,7 +397,7 @@ public class DlRepairSoServiceImpl extends ServiceImpl<DlRepairSoMapper, DlRepai
// 查主表
DlRepairSo newSo = baseMapper.selectById(id);
// 通知仓库
repairWorkerService.sentMessage(Long.valueOf(newSo.getCreator()), newSo.getUserName() + "已确认退料单:" + newSo.getSoNo());
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(newSo.getCreator()), newSo.getUserName() + "已确认退料单:" + newSo.getSoNo());
// 记录日志
// 查子表信息
List<DlRepairSoi> sois = repairSoiService.list(new LambdaQueryWrapper<DlRepairSoi>().eq(DlRepairSoi::getSoId, id));

View File

@ -339,7 +339,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// 通知客户
// 构建消息
String message = String.format("您的爱车%s已开始%s", ticketsRespVO.getCarNo(), repairOrderInfo.getGoodsTitle());
repairWorkerService.sentMessageToCus(ticketsRespVO.getId(), message, true);
repairWorkerService.sentMessageToCus(SystemEnum.REPAIR.getCode(),ticketsRespVO.getId(), message, true);
return ticketsRespVO;
}
@ -1160,7 +1160,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
List<DictDataRespDTO> dataList = dictDataApi.getDictDataList("repair_work_type");
DictDataRespDTO dictDataRespDTO = dataList.stream().filter(item -> item.getValue().equals(worker.getWorkType())).findFirst().orElse(null);
String message = String.format("您的爱车%s已由%s %s接单了", tickets.getCarNo(), (dictDataRespDTO != null ? dictDataRespDTO.getLabel() : "维修工"), worker.getUserName());
repairWorkerService.sentMessageToCus(id, message, false);
repairWorkerService.sentMessageToCus(SystemEnum.REPAIR.getCode(),id, message, false);
// 更新工单主表时间
refreshUpdateTime(id);
@ -1188,7 +1188,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
if (update != 1) {
throw exception0(500, "工单已开始");
}
repairWorkerService.sentMessage(reqVO.getNowRepairId(), "您有新的工单要处理");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),reqVO.getNowRepairId(), "您有新的工单要处理");
// 获取当前操作人的身份----小李新加的逻辑
String userRole = getUserRole();
@ -1318,7 +1318,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// 通知服务顾问
// 如果员工完成了订单
if (RecordTypeEnum.SGWCZJ.getCode().equals(respVO.getRecordType()) && "03".equals(respVO.getFinishType())) {
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验");
// 需要把工单的当前操作人移交服务顾问
baseMapper.update(new LambdaUpdateWrapper<DlRepairTickets>()
.setSql("now_repair_id = adviser_id")
@ -1331,7 +1331,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
throw exception0(500, "系统异常");
}
} else {
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), message);
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(tickets.getAdviserId()), message);
}
// 通知总检
// 总检查角色包含总检的员工
@ -1349,10 +1349,10 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
.set(DlRepairTickets::getNowRepairName, user.getNickname())
.set(DlRepairTickets::getTicketsWorkStatus, "05")
.eq(DlRepairTickets::getId, respVO.getId()));
repairWorkerService.sentMessage(user.getId(), "您有新的工单需要总检");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),user.getId(), "您有新的工单需要总检");
} else {
ids.forEach(id -> {
repairWorkerService.sentMessage(id, message);
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),id, message);
});
}
@ -1369,7 +1369,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
worker.getUserName(),
(respVO.getRecordType().equals(RecordTypeEnum.KSSG.getCode()) ? "开始施工" : "施工完成")
);
repairWorkerService.sentMessageToCus(tickets.getId(), newMessage, false);
repairWorkerService.sentMessageToCus(SystemEnum.REPAIR.getCode(),tickets.getId(), newMessage, false);
}
// 更新工单主表时间
@ -1492,13 +1492,13 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
// 通知服务顾问
DlRepairTickets tickets = baseMapper.selectById(respVO.getId());
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(tickets.getAdviserId()), "您有新的工单可以出厂检验");
// 通知客户
// 构建消息
DictDataRespDTO repairType = dictDataApi.getDictData("repair_type", tickets.getRepairType());
String message = String.format("您的爱车%s已%s完成", tickets.getCarNo(), (repairType != null ? repairType.getLabel() : "维修保养"));
repairWorkerService.sentMessageToCus(tickets.getId(), message, true);
repairWorkerService.sentMessageToCus(SystemEnum.REPAIR.getCode(),tickets.getId(), message, true);
// 更新工单主表状态
refreshUpdateTime(respVO.getId());
@ -1940,7 +1940,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
if (!flag) {
// 通知总检让其手动操作
ids.forEach(id -> {
repairWorkerService.sentMessage(id, "待总检车牌为:" + item.getCarNo() + "工单已经超时,但无法自动总检,请手动处理");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),id, "待总检车牌为:" + item.getCarNo() + "工单已经超时,但无法自动总检,请手动处理");
});
}
return flag;
@ -1960,9 +1960,9 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
baseMapper.updateById(updateTickets);
// 通知总检和服务顾问
result.forEach(item -> {
repairWorkerService.sentMessage(Long.valueOf(item.getAdviserId()), "您有新的工单可以出厂检验");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(item.getAdviserId()), "您有新的工单可以出厂检验");
ids.forEach(id -> {
repairWorkerService.sentMessage(id, "车牌为:" + item.getCarNo() + "工单已由系统自动总检并移交服务顾问");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),id, "车牌为:" + item.getCarNo() + "工单已由系统自动总检并移交服务顾问");
});
// 记录日志
repairRecordsService.saveRepairRecord(item.getId(), null, RecordTypeEnum.ZJ.getCode(), "该工单由系统自动总检完成", null);

View File

@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.common.RecordTypeEnum;
import cn.iocoder.yudao.common.RepairRoleEnum;
import cn.iocoder.yudao.common.SoStatusEnum;
import cn.iocoder.yudao.common.SystemEnum;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.base.entity.RepairWorker;
@ -237,7 +238,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
// 通知对应的维修服务顾问和总检
// 维修服务顾问即创建工单时选的是谁
repairWorkerService.sentMessage(Long.valueOf(tickets.getAdviserId()), "您有新的配件申请单需要审核");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),Long.valueOf(tickets.getAdviserId()), "您有新的配件申请单需要审核");
// 总检查角色包含总检的员工
// 取这个角色的角色信息
RoleReqDTO roleInfo = roleApi.getRoleInfo(RepairRoleEnum.INSPECTION.getCode());
@ -245,7 +246,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
List<Long> ids = permissionApi.getUserIdByRoleId(roleInfo.getId());
// 发通知
if (CollectionUtil.isNotEmpty(ids)) {
ids.forEach(id -> repairWorkerService.sentMessage(id, "您有新的配件申请单需要审核"));
ids.forEach(id -> repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),id, "您有新的配件申请单需要审核"));
}
// 更新工单主表时间
@ -376,7 +377,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
// }
// 通知维修工
DlTicketWares ticketWares = baseMapper.selectById(respVO.getId());
repairWorkerService.sentMessage(ticketWares.getRepairId(), "您有新的配件申请单" + (status.equals("01") ? "审批通过了" : "被驳回了"));
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),ticketWares.getRepairId(), "您有新的配件申请单" + (status.equals("01") ? "审批通过了" : "被驳回了"));
//插入记录
repairRecordsService.saveRepairRecord(respVO.getTicketId(), null, RecordTypeEnum.SPPJSQD.getCode(), "审批配件申请单", null);
@ -517,7 +518,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
("02".equals(type) ? "通知领料" : "通知退料") + ": " + remarkStr.toString(), respVO.getImages());
// 通知维修工
// 查维修工的userId
repairWorkerService.sentMessage(respVO.getRepairId(), type.equals("02") ? "您有新的领料单需要确认" : "您有新的退料单需要确认");
repairWorkerService.sentMessage(SystemEnum.REPAIR.getCode(),respVO.getRepairId(), type.equals("02") ? "您有新的领料单需要确认" : "您有新的退料单需要确认");
// 刷新工单主表时间
if (ObjectUtil.isNotEmpty(respVO.getTicketId())){

View File

@ -30,4 +30,8 @@ public class NotifySendSingleToUserReqDTO {
* 站内信模板参数
*/
private Map<String, Object> templateParams;
/**
* 业务系统标识
*/
private String systemCode;
}

View File

@ -20,13 +20,13 @@ public class NotifyMessageSendApiImpl implements NotifyMessageSendApi {
@Override
public Long sendSingleMessageToAdmin(NotifySendSingleToUserReqDTO reqDTO) {
return notifySendService.sendSingleNotifyToAdmin(reqDTO.getUserId(),
reqDTO.getTemplateCode(), reqDTO.getTemplateParams());
reqDTO.getTemplateCode(), reqDTO.getTemplateParams(),reqDTO.getSystemCode());
}
@Override
public Long sendSingleMessageToMember(NotifySendSingleToUserReqDTO reqDTO) {
return notifySendService.sendSingleNotifyToMember(reqDTO.getUserId(),
reqDTO.getTemplateCode(), reqDTO.getTemplateParams());
reqDTO.getTemplateCode(), reqDTO.getTemplateParams(),reqDTO.getSystemCode());
}
}

View File

@ -90,9 +90,9 @@ public class NotifyMessageController {
@GetMapping("/get-unread-count")
@Operation(summary = "获得当前用户的未读站内信数量")
@ApiAccessLog(enable = false) // 由于前端会不断轮询该接口记录日志没有意义
public CommonResult<Long> getUnreadNotifyMessageCount() {
public CommonResult<Long> getUnreadNotifyMessageCount(@RequestParam(value = "systemCode",required = false) String systemCode) {
return success(notifyMessageService.getUnreadNotifyMessageCount(
getLoginUserId(), UserTypeEnum.ADMIN.getValue()));
getLoginUserId(), UserTypeEnum.ADMIN.getValue(),systemCode));
}
}

View File

@ -79,10 +79,10 @@ public class NotifyTemplateController {
public CommonResult<Long> sendNotify(@Valid @RequestBody NotifyTemplateSendReqVO sendReqVO) {
if (UserTypeEnum.MEMBER.getValue().equals(sendReqVO.getUserType())) {
return success(notifySendService.sendSingleNotifyToMember(sendReqVO.getUserId(),
sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams()));
sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams(),sendReqVO.getSystemCode()));
} else {
return success(notifySendService.sendSingleNotifyToAdmin(sendReqVO.getUserId(),
sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams()));
sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams(),sendReqVO.getSystemCode()));
}
}
}

View File

@ -24,5 +24,9 @@ public class NotifyTemplateSendReqVO {
@Schema(description = "模板参数")
private Map<String, Object> templateParams;
/**
* 业务系统标识
*/
private String systemCode;
}

View File

@ -77,7 +77,7 @@ public class ApiNotifyMessageController {
@GetMapping("/get-unread-count")
@Operation(summary = "获得当前用户的未读站内信数量")
@ApiAccessLog(enable = false) // 由于前端会不断轮询该接口记录日志没有意义
public CommonResult<Long> getUnreadNotifyMessageCount() {
return success(notifyMessageService.getWXUnreadNotifyMessageCount(getLoginUserId()));
public CommonResult<Long> getUnreadNotifyMessageCount(@RequestParam(value = "systemCode",required = false) String systemCode) {
return success(notifyMessageService.getWXUnreadNotifyMessageCount(getLoginUserId(),systemCode));
}
}

View File

@ -71,10 +71,11 @@ public interface NotifyMessageMapper extends BaseMapperX<NotifyMessageDO> {
.orderByDesc("id").limitN(size));
}
default Long selectUnreadCountByUserIdAndUserType(Long userId, Integer userType) {
default Long selectUnreadCountByUserIdAndUserType(Long userId, Integer userType,String systemCode) {
return selectCount(new LambdaQueryWrapperX<NotifyMessageDO>()
.eq(NotifyMessageDO::getReadStatus, false)
.eq(NotifyMessageDO::getUserId, userId)
.eqIfPresent(NotifyMessageDO::getSystemCode,systemCode)
.eqIfPresent(NotifyMessageDO::getUserType, userType));
}

View File

@ -28,7 +28,7 @@ public interface NotifyMessageService {
* @return 站内信编号
*/
Long createNotifyMessage(Long userId, Integer userType,
NotifyTemplateDO template, String templateContent, Map<String, Object> templateParams);
NotifyTemplateDO template, String templateContent, Map<String, Object> templateParams,String systemCode);
/**
* 获得站内信分页
@ -80,16 +80,17 @@ public interface NotifyMessageService {
*
* @param userId 用户编号
* @param userType 用户类型
* @param systemCode 系统标识 systemCode
* @return 返回未读站内信条数
*/
Long getUnreadNotifyMessageCount(Long userId, Integer userType);
Long getUnreadNotifyMessageCount(Long userId, Integer userType,String systemCode);
/**
* 统计用户未读站内信条数--微信小程序
*
* @param userId 用户编号
* @return 返回未读站内信条数
*/
Long getWXUnreadNotifyMessageCount(Long userId);
Long getWXUnreadNotifyMessageCount(Long userId,String systemCode);
/**
* 标记站内信为已读

View File

@ -29,9 +29,10 @@ public class NotifyMessageServiceImpl implements NotifyMessageService {
@Override
public Long createNotifyMessage(Long userId, Integer userType,
NotifyTemplateDO template, String templateContent, Map<String, Object> templateParams) {
NotifyTemplateDO template, String templateContent, Map<String, Object> templateParams,String systemCode) {
NotifyMessageDO message = new NotifyMessageDO().setUserId(userId).setUserType(userType)
.setTemplateId(template.getId()).setTemplateCode(template.getCode())
.setSystemCode(systemCode)
.setTemplateType(template.getType()).setTemplateNickname(template.getNickname())
.setTemplateContent(templateContent).setTemplateParams(templateParams).setReadStatus(false);
notifyMessageMapper.insert(message);
@ -64,13 +65,13 @@ public class NotifyMessageServiceImpl implements NotifyMessageService {
}
@Override
public Long getUnreadNotifyMessageCount(Long userId, Integer userType) {
return notifyMessageMapper.selectUnreadCountByUserIdAndUserType(userId, userType);
public Long getUnreadNotifyMessageCount(Long userId, Integer userType,String systemCode) {
return notifyMessageMapper.selectUnreadCountByUserIdAndUserType(userId, userType,systemCode);
}
@Override
@TenantIgnore
public Long getWXUnreadNotifyMessageCount(Long userId) {
return notifyMessageMapper.selectUnreadCountByUserIdAndUserType(userId, 1);
public Long getWXUnreadNotifyMessageCount(Long userId,String systemCode) {
return notifyMessageMapper.selectUnreadCountByUserIdAndUserType(userId, 1, systemCode);
}
@Override

View File

@ -21,7 +21,7 @@ public interface NotifySendService {
* @return 发送日志编号
*/
Long sendSingleNotifyToAdmin(Long userId,
String templateCode, Map<String, Object> templateParams);
String templateCode, Map<String, Object> templateParams,String systemCode);
/**
* 发送单条站内信给用户 APP 的用户
*
@ -33,7 +33,7 @@ public interface NotifySendService {
* @return 发送日志编号
*/
Long sendSingleNotifyToMember(Long userId,
String templateCode, Map<String, Object> templateParams);
String templateCode, Map<String, Object> templateParams,String systemCode);
/**
* 发送单条站内信给用户
@ -45,7 +45,7 @@ public interface NotifySendService {
* @return 发送日志编号
*/
Long sendSingleNotify( Long userId, Integer userType,
String templateCode, Map<String, Object> templateParams);
String templateCode, Map<String, Object> templateParams,String systemCode);
default void sendBatchNotify(List<String> mobiles, List<Long> userIds, Integer userType,
String templateCode, Map<String, Object> templateParams) {

View File

@ -13,7 +13,8 @@ import java.util.Map;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTIFY_SEND_TEMPLATE_PARAM_MISS;
/**
* 站内信发送 Service 实现类
@ -32,17 +33,17 @@ public class NotifySendServiceImpl implements NotifySendService {
private NotifyMessageService notifyMessageService;
@Override
public Long sendSingleNotifyToAdmin(Long userId, String templateCode, Map<String, Object> templateParams) {
return sendSingleNotify(userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams);
public Long sendSingleNotifyToAdmin(Long userId, String templateCode, Map<String, Object> templateParams,String systemCode) {
return sendSingleNotify(userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams,systemCode);
}
@Override
public Long sendSingleNotifyToMember(Long userId, String templateCode, Map<String, Object> templateParams) {
return sendSingleNotify(userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams);
public Long sendSingleNotifyToMember(Long userId, String templateCode, Map<String, Object> templateParams,String systemCode) {
return sendSingleNotify(userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams,systemCode);
}
@Override
public Long sendSingleNotify(Long userId, Integer userType, String templateCode, Map<String, Object> templateParams) {
public Long sendSingleNotify(Long userId, Integer userType, String templateCode, Map<String, Object> templateParams,String systemCode) {
// 校验模版
NotifyTemplateDO template = validateNotifyTemplate(templateCode);
if (Objects.equals(template.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
@ -54,7 +55,7 @@ public class NotifySendServiceImpl implements NotifySendService {
// 发送站内信
String content = notifyTemplateService.formatNotifyTemplateContent(template.getContent(), templateParams);
return notifyMessageService.createNotifyMessage(userId, userType, template, content, templateParams);
return notifyMessageService.createNotifyMessage(userId, userType, template, content, templateParams,systemCode);
}
@VisibleForTesting