This commit is contained in:
aikai 2024-04-08 14:04:14 +08:00
commit 558e46c51f
9 changed files with 131 additions and 7 deletions

View File

@ -74,9 +74,12 @@ public class StrUtils {
*/ */
public static IdCardDO IdCardAnalysis(String idCard) { public static IdCardDO IdCardAnalysis(String idCard) {
IdCardDO idCardDO = new IdCardDO(); IdCardDO idCardDO = new IdCardDO();
if (idCard == null || idCard.isEmpty()) {
return idCardDO;
}
//通过身份证号码 获得出生日期 //通过身份证号码 获得出生日期
LocalDate date = LocalDate.parse(idCard.substring(6,14), DateTimeFormatter.ofPattern("yyyyMMdd")); LocalDate date = LocalDate.parse(idCard.substring(6,14), DateTimeFormatter.ofPattern("yyyyMMdd"));
//通过身份证号码 获得性别 //通过身份证号码 获得性别

View File

@ -22,4 +22,8 @@ public interface SubscribeMessageSendApi {
@PostMapping(PREFIX + "/send-process-todo-reminder") @PostMapping(PREFIX + "/send-process-todo-reminder")
@Operation(summary = "发送OA流程待办提醒") @Operation(summary = "发送OA流程待办提醒")
CommonResult<Long> sendProcessToDoReminder(@RequestBody SubscribeMessageReqDTO reqDTO); CommonResult<Long> sendProcessToDoReminder(@RequestBody SubscribeMessageReqDTO reqDTO);
@PostMapping(PREFIX + "/send-company-notice")
@Operation(summary = "发送公司公告通知")
CommonResult<Long> sendCompanyNotice(@RequestBody SubscribeMessageReqDTO reqDTO);
} }

View File

@ -41,6 +41,13 @@ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi {
return success(1L); return success(1L);
} }
@SneakyThrows
@Override
public CommonResult<Long> sendCompanyNotice(SubscribeMessageReqDTO reqDTO) {
socialClientService.getWxMaService().getMsgService().sendSubscribeMsg(initWxMaSubscribeMessage(reqDTO));
return success(1L);
}
private WxMaSubscribeMessage initWxMaSubscribeMessage(SubscribeMessageReqDTO reqDTO) { private WxMaSubscribeMessage initWxMaSubscribeMessage(SubscribeMessageReqDTO reqDTO) {
WxMaSubscribeMessage message = WxMaSubscribeMessage.builder() WxMaSubscribeMessage message = WxMaSubscribeMessage.builder()
.toUser(reqDTO.getToUser()) .toUser(reqDTO.getToUser())

View File

@ -85,7 +85,10 @@ public class NoticeController {
NoticeDO notice = noticeService.getNotice(id); NoticeDO notice = noticeService.getNotice(id);
Assert.notNull(notice, "公告不能为空"); Assert.notNull(notice, "公告不能为空");
// 通过 websocket 推送给在线的用户 // 通过 websocket 推送给在线的用户
webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), "notice-push", notice); //webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), "notice-push", notice);
//小程序发送公告订阅消息
//获取改造方式 push 方法传入需要推送的用户ID集合 将ID集合查询出用户集合 只获取openId的用户进行推送
noticeService.sendNotice(notice);
return success(true); return success(true);
} }

View File

@ -183,7 +183,7 @@ public class UserController {
postDO.sort(Comparator.comparing(PostDO::getSort)); postDO.sort(Comparator.comparing(PostDO::getSort));
// 输出 // 输出
ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, null, getDeptNameFun(deptDO), getPostNameFun(postDO)); ExcelUtils.write(response, "用户导入模板.xlsx", "用户列表", UserImportExcelVO.class, null, getDeptNameFun(deptDO), getPostNameFun(postDO));
} }
@PostMapping("/import") @PostMapping("/import")

View File

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.system.convert.notice;
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO;
import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData;
import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.util.Date;
import java.util.Map;
/**
* 功能描述
*
* @author: yj
* @date: 2024年04月07日 19:44
*/
@Mapper
public interface NoticeConvert {
NoticeConvert INSTANCE = Mappers.getMapper(NoticeConvert.class);
/**
* @param openId 微信小程序唯一id
* @param notice 公告对象
* @param nickname 发布人姓名
* @param miniProgramState 小程序的状态
* @return
*/
default SubscribeMessageReqDTO convertCompanyNotice(String openId, NoticeDO notice, String nickname, String miniProgramState) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setToUser(openId);
message.setTemplateId("OF4-948Vz9rtE_VA55rmDxo4azOwmrjjk33jDpOiPiY");
//通知类型
MsgData noticeType = new MsgData();
noticeType.setName("thing1");
noticeType.setValue(notice.getType()+""); //这里根据业务需求填写具体的公告类型 如全员公告 xxx公告
message.addData(noticeType);
//公告标题
MsgData title = new MsgData();
title.setName("thing6");
title.setValue(notice.getTitle());
message.addData(title);
//通知内容
MsgData content = new MsgData();
content.setName("thing2");
content.setValue("具体内容请进入小程序查看");
message.addData(content);
//发布人
MsgData publishMan = new MsgData();
publishMan.setName("thing9");
publishMan.setValue(nickname);
message.addData(publishMan);
//通知时间
MsgData createTime = new MsgData();
createTime.setName("time3");
createTime.setValue(DateUtils.dateFormat(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
message.addData(createTime);
message.setMiniprogramState(miniProgramState);
message.setPage("pages/index");
return message;
}
}

View File

@ -48,4 +48,9 @@ public interface NoticeService {
*/ */
NoticeDO getNotice(Long id); NoticeDO getNotice(Long id);
/**
* 小程序发送公告订阅消息
* @param notice
*/
void sendNotice(NoticeDO notice) ;
} }

View File

@ -1,16 +1,25 @@
package cn.iocoder.yudao.module.system.service.notice; package cn.iocoder.yudao.module.system.service.notice;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO;
import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND;
@ -70,4 +79,27 @@ public class NoticeServiceImpl implements NoticeService {
} }
} }
/** 添加小程序发送公告通知 add by yj 2024-04-07*/
@Resource
private AdminUserService userService;
@Resource
private SubscribeMessageSendApi subscribeMessageSendApi;
public void sendNotice(NoticeDO notice) {
//获取当前登陆用户的名称
LoginUser user = SecurityFrameworkUtils.getLoginUser() ;
AdminUserDO currentUser = userService.getUser(user.getId()) ;
//查询所有状态是开启的用户
List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus());
for(AdminUserDO adminUserDO : list) {
if( adminUserDO.getOpenId() != null && !adminUserDO.getOpenId().equals("") ) {
System.out.println("====" + adminUserDO.getNickname());
//获取openId有值的用户
subscribeMessageSendApi.sendCompanyNotice(NoticeConvert.INSTANCE.convertCompanyNotice(
adminUserDO.getOpenId(), notice , currentUser.getNickname(),
"formal"));
}
}
}
} }

View File

@ -13,7 +13,6 @@ import cn.iocoder.yudao.framework.common.util.string.DTO.IdCardDO;
import cn.iocoder.yudao.framework.common.util.string.StrUtils; import cn.iocoder.yudao.framework.common.util.string.StrUtils;
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.infra.api.file.FileApi;
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO;
@ -21,7 +20,6 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRe
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper; import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
@ -424,8 +422,9 @@ public class AdminUserServiceImpl implements AdminUserService {
importUsers.forEach(importUser -> { importUsers.forEach(importUser -> {
//校验判断是否有不符合的原因 //校验判断是否有不符合的原因
try { try {
validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), null, null); if (!isUpdateSupport) {
validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), null, null);
}
} catch (ServiceException ex) { } catch (ServiceException ex) {
respVO.getFailureUsernames().put(importUser.getNickname(), ex.getMessage()); respVO.getFailureUsernames().put(importUser.getNickname(), ex.getMessage());
return; return;