Merge branch 'main' of http://47.97.8.94:19527/yj/zn-cloud
This commit is contained in:
commit
558e46c51f
@ -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"));
|
||||||
//通过身份证号码 获得性别
|
//通过身份证号码 获得性别
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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())
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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")
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -48,4 +48,9 @@ public interface NoticeService {
|
|||||||
*/
|
*/
|
||||||
NoticeDO getNotice(Long id);
|
NoticeDO getNotice(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序发送公告订阅消息
|
||||||
|
* @param notice
|
||||||
|
*/
|
||||||
|
void sendNotice(NoticeDO notice) ;
|
||||||
}
|
}
|
||||||
|
@ -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"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user