Merge branch 'feature/REQ-1634' into 'dev'

Feature/req 1634

See merge request universal/infrastructure/backend/msg-center-plat!77
This commit is contained in:
邬宇 2023-11-25 05:49:08 +00:00
commit 7a6fe352d8
15 changed files with 282 additions and 69 deletions

View File

@ -0,0 +1,37 @@
package cn.axzo.msg.center.inside.notices.config;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description
* 待办日历模版配置
* @author cold_blade
* @date 2023/8/31
* @version 1.0
*/
@Setter
@Getter
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "calendar.template")
public class PendingCalendarCodeConfig {
private List<String> constructionCodes;
private List<String> clockInCodes;
private List<String> punchInCodes;
public List<String> getCalendarAllCodes() {
return Arrays.asList(constructionCodes, clockInCodes, punchInCodes)
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
}
}

View File

@ -8,13 +8,7 @@ import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
import cn.axzo.msg.center.message.service.PendingMessageNewService;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.client.PendingMessageClient;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest;
import cn.axzo.msg.center.service.pending.request.*;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.PendingMessageStatisticResponse;
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
@ -61,6 +55,11 @@ public class PendingMessageNewController implements PendingMessageClient {
return CommonResponse.success(pendingMessageNewService.pageQuery(request));
}
@Override
public CommonResponse<List<PendingMessageResponse>> getPendingMessageByAppWorker(PendingMessageFixedTemplatePageRequest request) {
return CommonResponse.success(pendingMessageNewService.getPendingMessageByAppWorker(request));
}
@Override
public CommonResponse<Page<MessageDetailRes>> compatiblePageQuery(PendingMessagePageRequest request) {
return CommonResponse.success(pendingMessageNewService.compatiblePageQuery(request));

View File

@ -194,6 +194,7 @@ public class PendingMessageDTO implements Serializable {
.subBizCode(this.subBizCode)
.bizDesc(this.bizDesc)
.bizFlag(this.bizFlag)
.state(this.getState())
.bizCategory(this.bizCategory)
.workspaceId(this.workspaceId)
.workspaceName(this.workspaceName)

View File

@ -6,10 +6,7 @@ import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO;
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
import cn.axzo.msg.center.service.pending.request.*;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
import cn.azxo.framework.common.model.Page;
@ -60,6 +57,14 @@ public interface PendingMessageNewService {
*/
Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request);
/**
* 代办列表分页查询
*
* @param request 分页查询相关参数
* @return 代办列表
*/
List<PendingMessageResponse> getPendingMessageByAppWorker(PendingMessageFixedTemplatePageRequest request);
/**
* 代办列表分页查询
*

View File

@ -15,12 +15,7 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

View File

@ -367,6 +367,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
.in(CollectionUtils.isNotEmpty(request.getCategories()), MessageBaseTemplate::getMsgCategory,
request.getCategories())
.eq(Objects.nonNull(request.getStatus()), MessageBaseTemplate::getStatus, request.getStatus())
.orderByDesc(MessageBaseTemplate::getCreateAt)
.page(pageRequest);
}

View File

@ -15,45 +15,24 @@ import cn.axzo.msg.center.common.exception.ServiceException;
import cn.axzo.msg.center.common.utils.PageHelperUtil;
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
import cn.axzo.msg.center.dal.PendingMessageRecordDao;
import cn.axzo.msg.center.dal.mapper.PendingMessageRecordMapper;
import cn.axzo.msg.center.domain.dto.PendingCalendarCodeDTO;
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
import cn.axzo.msg.center.domain.enums.NativeTypeEnum;
import cn.axzo.msg.center.message.domain.dto.GroupTreeNodePathDTO;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO;
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO;
import cn.axzo.msg.center.inside.notices.config.PendingCalendarCodeConfig;
import cn.axzo.msg.center.message.domain.dto.*;
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
import cn.axzo.msg.center.message.service.MessageGroupNodeService;
import cn.axzo.msg.center.message.service.MessageTemplateGroupService;
import cn.axzo.msg.center.message.service.MessageTemplateNewService;
import cn.axzo.msg.center.message.service.PendingMessageNewService;
import cn.axzo.msg.center.service.dto.ButtonRouterDTO;
import cn.axzo.msg.center.service.dto.DetailRouterDTO;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.PersonDTO;
import cn.axzo.msg.center.service.dto.QueryOrderByDTO;
import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
import cn.axzo.msg.center.service.dto.*;
import cn.axzo.msg.center.service.enums.*;
import cn.axzo.msg.center.service.pending.request.*;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
import cn.axzo.msg.center.utils.DateFormatUtil;
import cn.axzo.msg.center.utils.JSONObjectUtil;
import cn.axzo.msg.center.utils.MessageCardUtil;
import cn.axzo.msg.center.utils.MessageRouterUtil;
import cn.axzo.msg.center.utils.OrderFieldParseUtil;
import cn.axzo.msg.center.utils.UUIDUtil;
import cn.axzo.msg.center.utils.*;
import cn.azxo.framework.common.model.Page;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@ -68,14 +47,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -92,11 +64,13 @@ import java.util.stream.Collectors;
public class PendingMessageNewServiceImpl implements PendingMessageNewService {
private final PendingMessageRecordDao pendingMessageRecordDao;
private final PendingMessageRecordMapper pendingMessageRecordMapper;
private final MessageGroupNodeService messageGroupNodeService;
private final MessageTemplateNewService messageTemplateNewService;
private final MessageTemplateGroupService messageTemplateGroupService;
private final WorkspaceApi workspaceApi;
private final OrganizationalNodePractitionerWideApi organizationalNodePractitionerWideApi;
private final PendingCalendarCodeConfig calendarCodeConfig;
@Override
public List<PendingMessageStatisticDTO> groupStatistic(MessageGroupNodeStatisticParam param) {
@ -191,6 +165,23 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), responseRecords);
}
@Override
public List<PendingMessageResponse> getPendingMessageByAppWorker(PendingMessageFixedTemplatePageRequest request) {
List<PendingMessageResponse> result = new ArrayList<>();
PendingCalendarCodeDTO calendarCodeDTO = buildCalendarCodesDTO(calendarCodeConfig);
List<PendingMessageRecord> pendingMessageRecords = pendingMessageRecordMapper.queryByTemplateCodes(calendarCodeDTO,request.getWorkspaceId(),request.getSelectDate());
List<MessageTemplateDTO> messageTemplates = messageTemplateNewService.listByTemplateCodes(calendarCodeConfig.getCalendarAllCodes());
result = pendingMessageRecords.stream()
.map(e -> convert(e, messageTemplates).toResponse(request.getTerminalType()))
.collect(Collectors.toList());
// 构建分页结构返回
return result;
}
private PendingCalendarCodeDTO buildCalendarCodesDTO(PendingCalendarCodeConfig calendarCodeConfig) {
return new PendingCalendarCodeDTO(calendarCodeConfig.getConstructionCodes(),calendarCodeConfig.getClockInCodes(),calendarCodeConfig.getPunchInCodes(),calendarCodeConfig.getCalendarAllCodes());
}
@Deprecated
@Override
public Page<MessageDetailRes> compatiblePageQuery(PendingMessagePageRequest request) {
@ -328,8 +319,30 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
@Override
public Boolean completeById(CompletePendingMessageByIdRequest param) {
log.info("the [{}] record is updated complete by id.", param);
String bizExtParam = null;
if(StringUtils.isNotBlank(param.getBizExtParams())){
MessageTemplateDTO msgTemplate = messageTemplateNewService
.queryEnableTemplateByCode(param.getTemplateCode())
.orElseThrow(() -> new ServiceException("not found message template."));
// 获取模板卡片信息
List<MessageCardContentItemDTO> rawCardContentItems = msgTemplate.getMsgCardContentItems();
List<MessageCardContentItemDTO> cardContentItems = rawCardContentItems;
if (CollectionUtils.isNotEmpty(rawCardContentItems)) {
// 克隆避免修改入参
cardContentItems = cardContentItems.stream()
.map(MessageCardContentItemDTO::deepClone)
.collect(Collectors.toList());
cardContentItems.forEach(e -> {
String value = PlaceholderResolver.getDefaultResolver()
.resolveByMap(e.getValue(), JSON.parseObject(param.getBizExtParams()));
e.setValue(value);
});
bizExtParam = JSON.toJSONString(cardContentItems);
}
}
return pendingMessageRecordDao.lambdaUpdate()
.set(PendingMessageRecord::getState, PendingMessageStateEnum.COMPLETED)
.set(StringUtils.isNotBlank(bizExtParam),PendingMessageRecord::getBizExtParam,bizExtParam)
.eq(PendingMessageRecord::getId, param.getId())
.eq(PendingMessageRecord::getState, PendingMessageStateEnum.HAS_BEEN_SENT)
.eq(PendingMessageRecord::getIsDelete, TableIsDeleteEnum.NORMAL.value)
@ -625,7 +638,23 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
String title = PlaceholderResolver
.getDefaultResolver().resolveByMap(msgTemplate.getTitle(), bizExtParam);
String content = PlaceholderResolver
.getDefaultResolver().resolveByMap(msgTemplate.getContent(), bizExtParam);
.getDefaultResolver().resolveByMap(msgTemplate.getContent(), bizExtParam);;
// 获取模板卡片信息
List<MessageCardContentItemDTO> rawCardContentItems = msgTemplate.getMsgCardContentItems();
List<MessageCardContentItemDTO> cardContentItems = rawCardContentItems;
if (CollectionUtils.isNotEmpty(rawCardContentItems) && Objects.nonNull(record.getBizExtParam())
&& !record.getBizExtParam().isEmpty()) {
// 克隆避免修改入参
cardContentItems = cardContentItems.stream()
.map(MessageCardContentItemDTO::deepClone)
.collect(Collectors.toList());
cardContentItems.forEach(e -> {
String value = PlaceholderResolver.getDefaultResolver()
.resolveByMap(e.getValue(), JSON.parseObject(record.getBizExtParam()));
e.setValue(value);
});
record.setBizExtParam(JSON.toJSONString(cardContentItems));
}
record.setTitle(title);
record.setContent(content);
record.setTemplateCode(msgTemplate.getCode());

View File

@ -3,13 +3,7 @@ package cn.axzo.msg.center.service.pending.client;
import cn.axzo.msg.center.api.response.MessageDetailRes;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.client.fallback.PendingMessageClientFallback;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest;
import cn.axzo.msg.center.service.pending.request.*;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.PendingMessageStatisticResponse;
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
@ -66,6 +60,15 @@ public interface PendingMessageClient {
@PostMapping(value = "/pending-message/record/page", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<Page<PendingMessageResponse>> pageQuery(@RequestBody @Valid PendingMessagePageRequest request);
/**
* 指定几种代办模型列表分页查询
*
* @param request 分页查询相关参数
* @return 代办列表
*/
@PostMapping(value = "/pending-message/getPendingMessageByAppWorker", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<List<PendingMessageResponse>> getPendingMessageByAppWorker(@RequestBody @Valid PendingMessageFixedTemplatePageRequest request);
/**
* 代办列表分页查询
*

View File

@ -3,13 +3,7 @@ package cn.axzo.msg.center.service.pending.client.fallback;
import cn.axzo.msg.center.api.response.MessageDetailRes;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.client.PendingMessageClient;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest;
import cn.axzo.msg.center.service.pending.request.*;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.PendingMessageStatisticResponse;
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
@ -49,6 +43,12 @@ public class PendingMessageClientFallback implements PendingMessageClient {
return CommonResponse.error("fall back while page querying pending message");
}
@Override
public CommonResponse<List<PendingMessageResponse>> getPendingMessageByAppWorker(PendingMessageFixedTemplatePageRequest request) {
log.error("fall back while page queryByTemplateCodes pending message. req:{}", request);
return CommonResponse.error("fall back while page queryByTemplateCodes pending message");
}
@Override
public CommonResponse<Page<MessageDetailRes>> compatiblePageQuery(PendingMessagePageRequest request) {
log.error("fall back while page querying pending message. req:{}", request);

View File

@ -21,4 +21,15 @@ public class CompletePendingMessageByIdRequest {
*/
@NotNull(message = "消息ID不能为空")
private Long id;
/**
* 业务扩展参数,JSON字符串格式
*/
private String bizExtParams;
/**
* 模板编码
*/
private String templateCode;
}

View File

@ -0,0 +1,72 @@
package cn.axzo.msg.center.service.pending.request;
import cn.axzo.basics.common.page.PageRequest;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @description
* 代办记录分页查询参数的数模型
* @author cold_blade
* @date 2023/9/23
* @version 1.0
*/
@Setter
@Getter
public class PendingMessageFixedTemplatePageRequest implements Serializable {
private static final long serialVersionUID = 7172093131252325437L;
/**
* 当前登录账户的自然id(前端不care)
*/
@NotNull(message = "personId is required")
private Long personId;
/**
* 当前登录账户的身份id(前端不care)
*/
private Long identityId;
/**
* 当前登录账户的身份类型(前端不care)
*/
private IdentityTypeEnum identityType;
/**
* 应用终端
*/
private AppTerminalTypeEnum appTerminalType;
/**
* 单位id
*/
private Long ouId;
/**
* 筛选时间
*/
@NotNull(message = "date is required")
private Date selectDate;
/**
* 工作台id
*/
private Long workspaceId;
/**
* APP终端类型(前端不care)
* WEB: web端页面
* MINI_PROGRAM: 安心筑小程序端页面
* IOS: 原生IOS端页面
* ANDROID: 原生Android端页面
* WEB_VIEW: H5页面
* WECHAT_MINI_PROGRAM: 微信小程序页面
*/
private TerminalTypeEnum terminalType;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -5,6 +5,7 @@ import cn.axzo.msg.center.service.dto.DetailRouterDTO;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -103,6 +104,10 @@ public class PendingMessageResponse implements Serializable {
* 待办发起人的企业id
*/
private Long ouId;
/**
* 待办状态
*/
private PendingMessageStateEnum state;
/**
* 业务类型
*/

View File

@ -1,7 +1,12 @@
package cn.axzo.msg.center.dal.mapper;
import cn.axzo.msg.center.domain.dto.PendingCalendarCodeDTO;
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* @description
@ -11,4 +16,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @version 1.0
*/
public interface PendingMessageRecordMapper extends BaseMapper<PendingMessageRecord> {
List<PendingMessageRecord> queryByTemplateCodes(@Param("pendingCalendarCodeDTO") PendingCalendarCodeDTO pendingCalendarCodeDTO, @Param("workspaceId") Long workspaceId, @Param("selectDate") Date selectDate);
}

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.axzo.msg.center.dal.mapper.PendingMessageRecordMapper">
<sql id="templateCodesSql">
<foreach collection="templateCodes " item="item" open="(" separator="," close=")" index="index">
'${item}'
</foreach>
</sql>
<select id="queryByTemplateCodes" resultType="cn.axzo.msg.center.domain.entity.PendingMessageRecord">
select * from (
SELECT * FROM (SELECT * FROM pending_message_record WHERE DATE(create_at) <![CDATA[<]]> #{selectDate} AND state IN('HAS_BEEN_SENT')
AND template_code IN('d1d4793c84e14d20ae1cbc399338efa3','367ba552bb374049a73e737ac3b8b08c')
<if test="workspaceId != null"> AND org_id=#{workspaceId} </if>
ORDER BY create_at ASC) old_pending_message
UNION ALL
SELECT * FROM(SELECT * FROM pending_message_record WHERE DATE(create_at) = #{selectDate} AND state IN
<foreach collection="templateCodes " item="item" open="(" separator="," close=")" index="index">
'${item}'
</foreach>
AND template_code IN('d1d4793c84e14d20ae1cbc399338efa3','367ba552bb374049a73e737ac3b8b08c') <if test="workspaceId != null"> AND org_id=#{workspaceId} </if> ORDER BY create_at DESC) new_pending_message
UNION ALL
SELECT * FROM(SELECT * FROM pending_message_record WHERE DATE(create_at) = #{selectDate} AND state IN('HAS_BEEN_SENT','COMPLETED')
AND template_code IN('出厂打卡') <if test="workspaceId != null"> AND org_id=#{workspaceId} </if> ORDER BY create_at DESC) new_pending_message1
UNION ALL
SELECT * FROM(SELECT * FROM pending_message_record WHERE DATE(create_at) = #{selectDate} AND state IN('HAS_BEEN_SENT','COMPLETED')
AND template_code IN('进场打卡') <if test="workspaceId != null"> AND org_id=#{workspaceId} </if> ORDER BY create_at DESC) new_pending_message2
)cc
</select>
</mapper>

View File

@ -0,0 +1,15 @@
package cn.axzo.msg.center.domain.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
@Data
@AllArgsConstructor
public class PendingCalendarCodeDTO{
private List<String> constructionCodes;
private List<String> clockInCodes;
private List<String> punchInCodes;
private List<String> allCodes;
}