重点作业重点工程相关
parent
4da61baba6
commit
765fd6b108
|
|
@ -26,5 +26,9 @@
|
||||||
<groupId>com.zcloud.key.project</groupId>
|
<groupId>com.zcloud.key.project</groupId>
|
||||||
<artifactId>web-client</artifactId>
|
<artifactId>web-client</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jjb.saas</groupId>
|
||||||
|
<artifactId>jjb-saas-framework-job</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.zcloud.key.project.job;
|
||||||
|
|
||||||
|
import com.jjb.saas.framework.job.Job;
|
||||||
|
import com.jjb.saas.framework.job.annotation.JobRegister;
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT;
|
||||||
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||||
|
import com.zcloud.key.project.api.project.KeyProjectServiceI;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class KeyProjectStatusJob implements Job {
|
||||||
|
|
||||||
|
private final KeyProjectServiceI projectTaskServiceI;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@JobRegister(cron = "0 1 0 * * ?", jobDesc = "重点作业过期消息提醒",triggerStatus = 1)
|
||||||
|
@XxlJob("com.zcloud.key.project.job.KeyProjectStatusJob")
|
||||||
|
public ReturnT<String> execute(String param) {
|
||||||
|
|
||||||
|
projectTaskServiceI.updatExecuteStatusJob();
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -54,13 +54,7 @@ public interface KeyProjectCoConvertor {
|
||||||
|
|
||||||
@Named("stringToList")
|
@Named("stringToList")
|
||||||
default List<String> stringToList(String str) {
|
default List<String> stringToList(String str) {
|
||||||
if (StringUtils.isEmpty(str)) {
|
return null;
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return Arrays.stream(str.split(","))
|
|
||||||
.map(String::trim)
|
|
||||||
.filter(s -> !s.isEmpty())
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<XgfCorpCO> converXgfCorpDOsToCOs(List<XgfCorpDO> xgfCorpDOList);
|
List<XgfCorpCO> converXgfCorpDOsToCOs(List<XgfCorpDO> xgfCorpDOList);
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,9 @@ import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -30,7 +32,7 @@ public class KeyProjectAddExe {
|
||||||
private final KeyProjectGateway keyProjectGateway;
|
private final KeyProjectGateway keyProjectGateway;
|
||||||
private final KeyProjectCameraRepository keyProjectCameraRepository;
|
private final KeyProjectCameraRepository keyProjectCameraRepository;
|
||||||
private final KeyProjectCameraCoConvertor keyProjectCameraCoConvertor;
|
private final KeyProjectCameraCoConvertor keyProjectCameraCoConvertor;
|
||||||
|
private final MessageNoticeExe messageNoticeExe;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public KeyProjectCO execute(KeyProjectAddCmd cmd) {
|
public KeyProjectCO execute(KeyProjectAddCmd cmd) {
|
||||||
|
|
@ -57,6 +59,13 @@ public class KeyProjectAddExe {
|
||||||
}
|
}
|
||||||
KeyProjectCO keyProjectCO = new KeyProjectCO();
|
KeyProjectCO keyProjectCO = new KeyProjectCO();
|
||||||
BeanUtils.copyProperties(keyProjectE, keyProjectCO);
|
BeanUtils.copyProperties(keyProjectE, keyProjectCO);
|
||||||
|
|
||||||
|
//发送消息及待办处理
|
||||||
|
Map<String, Object> sendParams = new HashMap<>();
|
||||||
|
sendParams.put("keyProject", cmd.getProjectName());
|
||||||
|
messageNoticeExe.messageNotice(cmd.getXgfMasterUserId(), "MS000109", sendParams);
|
||||||
|
//待办
|
||||||
|
messageNoticeExe.sendMessageAddEvent(cmd.getXgfMasterUserId(), "您有一条【重点作业】待处理","未开工", keyProjectE.getId());
|
||||||
return keyProjectCO;
|
return keyProjectCO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.zcloud.key.project.command.project;
|
package com.zcloud.key.project.command.project;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.alibaba.cola.exception.BizException;
|
import com.alibaba.cola.exception.BizException;
|
||||||
import com.zcloud.gbscommon.utils.Tools;
|
import com.zcloud.gbscommon.utils.Tools;
|
||||||
import com.zcloud.key.project.command.convertor.project.KeyProjectCameraCoConvertor;
|
import com.zcloud.key.project.command.convertor.project.KeyProjectCameraCoConvertor;
|
||||||
|
|
@ -20,7 +21,9 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -36,6 +39,7 @@ public class KeyProjectUpdateExe {
|
||||||
private final KeyProjectRepository keyProjectRepository;
|
private final KeyProjectRepository keyProjectRepository;
|
||||||
private final KeyProjectCameraCoConvertor keyProjectCameraCoConvertor;
|
private final KeyProjectCameraCoConvertor keyProjectCameraCoConvertor;
|
||||||
private final KeyProjectCameraRepository keyProjectCameraRepository;
|
private final KeyProjectCameraRepository keyProjectCameraRepository;
|
||||||
|
private final MessageNoticeExe messageNoticeExe;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void execute(KeyProjectUpdateCmd keyProjectUpdateCmd) {
|
public void execute(KeyProjectUpdateCmd keyProjectUpdateCmd) {
|
||||||
|
|
@ -65,6 +69,19 @@ public class KeyProjectUpdateExe {
|
||||||
});
|
});
|
||||||
keyProjectCameraRepository.saveBatch(keyProjectCameraDOList);
|
keyProjectCameraRepository.saveBatch(keyProjectCameraDOList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//如果是"未开工,发送消息"
|
||||||
|
if(KeyProjectApplyStatusEnum.NOT_STARTED.getCode().equals(keyProjectUpdateCmd.getApplyStatus())){
|
||||||
|
//发送消息及待办处理
|
||||||
|
Map<String, Object> sendParams = new HashMap<>();
|
||||||
|
sendParams.put("keyProject", keyProjectUpdateCmd.getProjectName());
|
||||||
|
messageNoticeExe.messageNotice(keyProjectUpdateCmd.getXgfMasterUserId(), "MS000109", sendParams);
|
||||||
|
//待办
|
||||||
|
messageNoticeExe.sendMessageAddEvent(keyProjectUpdateCmd.getXgfMasterUserId(), "您有一条【重点作业】待处理","未开工", keyProjectE.getId());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editStatus(KeyProjectUpdateStatusCmd keyProjectUpdateStatusCmd) {
|
public void editStatus(KeyProjectUpdateStatusCmd keyProjectUpdateStatusCmd) {
|
||||||
|
|
@ -76,15 +93,33 @@ public class KeyProjectUpdateExe {
|
||||||
BeanUtils.copyProperties(keyProjectUpdateStatusCmd, keyProjectE);
|
BeanUtils.copyProperties(keyProjectUpdateStatusCmd, keyProjectE);
|
||||||
if(KeyProjectApplyStatusEnum.START_APPLY.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
if(KeyProjectApplyStatusEnum.START_APPLY.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
||||||
keyProjectE.setApplyDateTime(LocalDateTime.now());
|
keyProjectE.setApplyDateTime(LocalDateTime.now());
|
||||||
|
//发送开工申请号消息
|
||||||
|
//发送消息及待办处理
|
||||||
|
Map<String, Object> sendParams = new HashMap<>();
|
||||||
|
sendParams.put("keyProject", byId.getProjectName());
|
||||||
|
messageNoticeExe.messageNotice(byId.getXgfMasterUserId(), "MS000110", sendParams);
|
||||||
|
//待办
|
||||||
|
messageNoticeExe.sendMessageCompleteEvent(byId.getId());
|
||||||
|
messageNoticeExe.sendMessageAddEvent(byId.getJurisdictionUserId(), "您有一条【重点作业】待处理","开工申请中", byId.getId());
|
||||||
|
|
||||||
}
|
}
|
||||||
if(KeyProjectApplyStatusEnum.IN_PROGRESS.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
if(KeyProjectApplyStatusEnum.IN_PROGRESS.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
||||||
keyProjectE.setApplyConfirmDateTime(LocalDateTime.now());
|
keyProjectE.setApplyConfirmDateTime(LocalDateTime.now());
|
||||||
}
|
}
|
||||||
if(KeyProjectApplyStatusEnum.FINISH_APPLY.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
if(KeyProjectApplyStatusEnum.FINISH_APPLY.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
||||||
keyProjectE.setCompletedDateTime(LocalDateTime.now());
|
keyProjectE.setCompletedDateTime(LocalDateTime.now());
|
||||||
|
//完工申请发小消息
|
||||||
|
Map<String, Object> sendParams = new HashMap<>();
|
||||||
|
sendParams.put("keyProject", byId.getProjectName());
|
||||||
|
messageNoticeExe.messageNotice(byId.getXgfMasterUserId(), "MS000112", sendParams);
|
||||||
|
//待办
|
||||||
|
messageNoticeExe.sendMessageCompleteEvent(byId.getId());
|
||||||
|
messageNoticeExe.sendMessageAddEvent(byId.getJurisdictionUserId(), "您有一条【重点作业】待处理","完工申请中", byId.getId());
|
||||||
|
|
||||||
}
|
}
|
||||||
if(KeyProjectApplyStatusEnum.FINISHED.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
if(KeyProjectApplyStatusEnum.FINISHED.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
|
||||||
keyProjectE.setCompletedConfirmDateTime(LocalDateTime.now());
|
keyProjectE.setCompletedConfirmDateTime(LocalDateTime.now());
|
||||||
|
messageNoticeExe.sendMessageCompleteEvent(byId.getId());
|
||||||
}
|
}
|
||||||
boolean res = keyProjectGateway.update(keyProjectE);
|
boolean res = keyProjectGateway.update(keyProjectE);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
|
|
@ -102,5 +137,19 @@ public class KeyProjectUpdateExe {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updatExecuteStatusJob() {
|
||||||
|
//查找昨日过期的数据,进行消息提醒
|
||||||
|
List<KeyProjectDO> list = keyProjectRepository.getLastStatus();
|
||||||
|
if(CollUtil.isEmpty( list)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
list.forEach(keyProjectDO -> {
|
||||||
|
Map<String, Object> sendParams = new HashMap<>();
|
||||||
|
sendParams.put("keyProject", keyProjectDO.getProjectName());
|
||||||
|
messageNoticeExe.messageNotice(keyProjectDO.getXgfMasterUserId(), "MS000111", sendParams);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
package com.zcloud.key.project.command.project;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.alibaba.cola.dto.SingleResponse;
|
||||||
|
import com.alibaba.cola.exception.BizException;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.jjb.saas.message.client.message.facede.MessageFacade;
|
||||||
|
import com.jjb.saas.message.client.message.request.MessageSendCmd;
|
||||||
|
import com.jjb.saas.message.client.message.request.MessageTargetCmd;
|
||||||
|
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
|
||||||
|
import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
|
||||||
|
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
|
||||||
|
import com.zcloud.gbscommon.utils.Tools;
|
||||||
|
import com.zcloud.gbscommon.utils.UuidUtil;
|
||||||
|
import com.zcloud.key.project.command.convertor.project.KeyProjectCameraCoConvertor;
|
||||||
|
import com.zcloud.key.project.domain.gateway.project.KeyProjectGateway;
|
||||||
|
import com.zcloud.key.project.domain.model.project.KeyProjectE;
|
||||||
|
import com.zcloud.key.project.dto.clientobject.project.KeyProjectCO;
|
||||||
|
import com.zcloud.key.project.dto.project.KeyProjectAddCmd;
|
||||||
|
import com.zcloud.key.project.dto.project.KeyProjectCameraAddCmd;
|
||||||
|
import com.zcloud.key.project.persistence.dataobject.project.KeyProjectCameraDO;
|
||||||
|
import com.zcloud.key.project.persistence.repository.CorpInfoRepository;
|
||||||
|
import com.zcloud.key.project.persistence.repository.project.KeyProjectCameraRepository;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* web-app
|
||||||
|
*
|
||||||
|
* @Author zhaokai
|
||||||
|
* @Date 2026-03-16 10:00:38
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class MessageNoticeExe {
|
||||||
|
private final TodoListEventPusherUtil todoListEventPusherUtil;
|
||||||
|
@DubboReference
|
||||||
|
private MessageFacade messageFacade;
|
||||||
|
|
||||||
|
public void messageNotice(Long userId, String sourceCode,Map<String, Object> sendParams) {
|
||||||
|
//消息通知
|
||||||
|
try{
|
||||||
|
|
||||||
|
MessageSendCmd messageSendCmd = new MessageSendCmd();
|
||||||
|
messageSendCmd.setBusinessId(Tools.get32UUID());
|
||||||
|
MessageTargetCmd messageTargetCmd = new MessageTargetCmd();
|
||||||
|
messageTargetCmd.setUserId(userId);
|
||||||
|
messageSendCmd.setTargetCmd(messageTargetCmd);
|
||||||
|
messageSendCmd.setSourceCode(sourceCode);
|
||||||
|
messageSendCmd.setNeedTokenEnum(false);
|
||||||
|
messageSendCmd.setParams(sendParams);
|
||||||
|
|
||||||
|
log.info("{},消息提醒发送消息参数:messageSendCmd: {}",sourceCode, JSONUtil.toJsonStr(messageSendCmd));
|
||||||
|
SingleResponse<Boolean> d = messageFacade.send(messageSendCmd);
|
||||||
|
log.info("{},消息提醒发送消息结果:d: {}", sourceCode,JSONUtil.toJsonStr(d));
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.error("{},消息提醒发送消息异常:", sourceCode,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void sendMessageAddEvent(Long userId, String title,String content, Long foreignKey) {
|
||||||
|
//消息通知
|
||||||
|
try{
|
||||||
|
// 发送待办
|
||||||
|
TodoListAddEvent event = new TodoListAddEvent();
|
||||||
|
event.setTitle(title);
|
||||||
|
event.setContent(content);
|
||||||
|
event.setForeignKey(foreignKey); // 业务表ID -申请
|
||||||
|
event.setForeignSubsidiaryKey(foreignKey); // 业务附表ID 没有附表时为foreignKey的值
|
||||||
|
event.setReceiveUser(userId);// user表ID
|
||||||
|
event.setPcFlag(1); // 是否PC端待办 1是 0否
|
||||||
|
event.setAppFlag(1); // 是否APP端待办 1是 0否
|
||||||
|
event.setOtherParams(new JSONObject());
|
||||||
|
todoListEventPusherUtil.sendMessageAddEvent( event);
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.error("消息待办,{},发送消息异常:", title,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Async("archivesAsyncExecutor")
|
||||||
|
public void sendMessageCompleteEvent(Long foreignKey) {
|
||||||
|
//消息通知
|
||||||
|
try{
|
||||||
|
// 发送待办
|
||||||
|
TodoListCompleteEvent event = new TodoListCompleteEvent();
|
||||||
|
event.setForeignSubsidiaryKey(foreignKey);// 业务附表ID 没有附表时为foreignKey的值
|
||||||
|
log.info("完成待办,请求:{}",foreignKey);
|
||||||
|
boolean b = todoListEventPusherUtil.sendMessageCompleteEvent(event);
|
||||||
|
log.info("完成待办,结果:{}",b);
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.error("完成待办失败",e);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -98,5 +98,10 @@ public class KeyProjectServiceImpl implements KeyProjectServiceI {
|
||||||
return keyProjectQueryExe.getXgfCorp(qry);
|
return keyProjectQueryExe.getXgfCorp(qry);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatExecuteStatusJob() {
|
||||||
|
keyProjectUpdateExe.updatExecuteStatusJob();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,5 +41,7 @@ public interface KeyProjectServiceI {
|
||||||
List<KeyProjectCO> listAll(KeyProjectQry qry);
|
List<KeyProjectCO> listAll(KeyProjectQry qry);
|
||||||
|
|
||||||
List<XgfCorpCO> getXgfCorp(GetXgfCorpQry qry);
|
List<XgfCorpCO> getXgfCorp(GetXgfCorpQry qry);
|
||||||
|
|
||||||
|
void updatExecuteStatusJob();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,5 +38,7 @@ public interface KeyProjectMapper extends BaseMapper<KeyProjectDO> {
|
||||||
List<KeyProjectDO> listAll(Map<String, Object> params);
|
List<KeyProjectDO> listAll(Map<String, Object> params);
|
||||||
|
|
||||||
List<XgfCorpDO> getXgfCorp(Map<String, Object> params);
|
List<XgfCorpDO> getXgfCorp(Map<String, Object> params);
|
||||||
|
|
||||||
|
List<KeyProjectDO> getLastStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -86,5 +86,11 @@ public class KeyProjectRepositoryImpl extends BaseRepositoryImpl<KeyProjectMappe
|
||||||
public List<XgfCorpDO> getXgfCorp(Map<String, Object> params) {
|
public List<XgfCorpDO> getXgfCorp(Map<String, Object> params) {
|
||||||
return keyProjectMapper.getXgfCorp( params);
|
return keyProjectMapper.getXgfCorp( params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<KeyProjectDO> getLastStatus() {
|
||||||
|
//查找日期plan_work_end_date 是昨日的数据,并且 apply_status = 4
|
||||||
|
return keyProjectMapper.getLastStatus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,5 +29,7 @@ public interface KeyProjectRepository extends BaseRepository<KeyProjectDO> {
|
||||||
List<KeyProjectDO> listAll(Map<String, Object> params);
|
List<KeyProjectDO> listAll(Map<String, Object> params);
|
||||||
|
|
||||||
List<XgfCorpDO> getXgfCorp(Map<String, Object> params);
|
List<XgfCorpDO> getXgfCorp(Map<String, Object> params);
|
||||||
|
|
||||||
|
List<KeyProjectDO> getLastStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -440,6 +440,15 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getLastStatus" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectDO">
|
||||||
|
SELECT kp.*
|
||||||
|
FROM key_project kp
|
||||||
|
WHERE kp.delete_enum = 'FALSE'
|
||||||
|
AND kp.apply_status = 4
|
||||||
|
AND kp.plan_work_end_date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
|
||||||
|
ORDER BY kp.create_time DESC
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue