Browse Source

0605

master
zy_Java 5 years ago
parent
commit
18fbe556f5
  1. 2
      tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java
  2. 3
      tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java
  3. 5
      tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java
  4. 51
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  5. 162
      tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java
  6. 7
      tall/src/main/java/com/ccsens/tall/web/TaskController.java
  7. 4
      tall/src/main/resources/application.yml
  8. 6
      tall/src/main/resources/mapper_dao/SysProjectDao.xml
  9. 48
      tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml

2
tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java

@ -180,8 +180,10 @@ public class TaskDto {
@ApiModel("修改看板信息")
@Data
public static class ChangeKanbanTask {
@NotNull(message = "任务id不能为空")
@ApiModelProperty("任务id")
private Long id;
@NotNull(message = "状态不能为空")
@ApiModelProperty("任务状态 0未完成 1进行中 2已完成")
private Integer type;
}

3
tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java

@ -1,6 +1,7 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.bean.po.ProTaskSubTime;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.mapper.ProTaskSubTimeMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@ -12,4 +13,6 @@ public interface TaskSubTimeDao extends ProTaskSubTimeMapper{
List<ProTaskSubTime> getUnderwayTaskByRoleId(@Param("subTaskId") Long subTaskId, @Param("roleId") Long roleId);
void clearTaskRealTime(@Param("projectId")Long projectId);
List<TaskVo.KanBanTask> getKanbanTake(@Param("projectId")Long projectId, @Param("roleId")Long roleId,@Param("type") Integer type,@Param("memberId")Long memberId);
}

5
tall/src/main/java/com/ccsens/tall/service/ITaskSubTimeService.java

@ -3,6 +3,7 @@ package com.ccsens.tall.service;
import com.ccsens.tall.bean.dto.TaskDto;
import com.ccsens.tall.bean.po.ProTaskSubTime;
import com.ccsens.tall.bean.vo.TaskVo;
import com.github.pagehelper.PageInfo;
import java.util.List;
@ -17,7 +18,7 @@ public interface ITaskSubTimeService {
void clearTaskRealTime(Long projectId);
List<TaskVo.KanBanTask> getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize);
PageInfo<TaskVo.KanBanTask> getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize) throws Exception;
void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask);
void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask) throws Exception;
}

51
tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java

@ -188,7 +188,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
//处理插件
managePlugin(currentUserId,roleId,task);
//二级任务完成状态
if(task.getProcess() == 0) {
if(task.getProcess() != 2) {
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, task.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
task.setRealEndTime(subTimeMember.getRealFinishTime());
@ -258,7 +258,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
//处理插件
managePlugin(currentUserId,roleId,normalTask);
//任务完成状态
if(normalTask.getProcess() == 0) {
if(normalTask.getProcess() != 2) {
ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId());
if (ObjectUtil.isNotNull(subTimeMember)) {
normalTask.setProcess(subTimeMember.getComplatedStatus());
@ -757,7 +757,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
if (CollectionUtil.isNotEmpty(taskList)) {
for (TaskVo.NormalTask normalTask : taskList) {
//任务的完成状态
if(normalTask.getProcess() == 0) {
if(normalTask.getProcess() != 2) {
ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(userId, normalTask.getId());
if (ObjectUtil.isNotNull(proSubTimeMember)) {
normalTask.setProcess(proSubTimeMember.getComplatedStatus());
@ -963,51 +963,6 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
}
}
// if (taskDetail.getFinishNeedAll() == 0) {
//// ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
//// subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId).andComplatedStatusEqualTo((byte) 2);
//// subTimeMemberExample.setOrderByClause("real_finish_time DESC");
//// List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
//// if (CollectionUtil.isNotEmpty(subTimeMemberList)) {
//// subTimeMember = subTimeMemberList.get(0);
//// }
// } else {
//// //查找此用户在任务下的成员
//// ProMember porMember = proMemberService.selectByUserId(userId, taskDetail.getProjectId());
//// //该用户是否是任务的负责人
//// ProRole role = proRoleDao.selectByPrimaryKey(taskDetail.getExecutorRole());
//// Boolean isBelongRole = proMemberService.userIsBelongRole(userId, role.getId());
//// if (role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase) || isBelongRole) {
//// ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
//// subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId)
//// .andMemberIdEqualTo(porMember.getId()).andComplatedStatusEqualTo((byte) 2);
//// List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
//// if (CollectionUtil.isNotEmpty(subTimeMemberList)) {
//// subTimeMember = subTimeMemberList.get(0);
//// }
// } else {
// //查找任务负责人下的所有成员
// List<ProMember> memberList = proMemberService.selectByRole(taskDetail.getExecutorRole());
//
// if (CollectionUtil.isNotEmpty(memberList)) {
// boolean flag = false;
// for (ProMember member : memberList) {
// ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
// subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId)
// .andMemberIdEqualTo(member.getId()).andComplatedStatusEqualTo((byte) 2);
// subTimeMemberExample.setOrderByClause("real_finish_time");
// List<ProSubTimeMember> subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample);
// if (CollectionUtil.isEmpty(subTimeMemberList)) {
// flag = true;
// break;
// }
// subTimeMember = subTimeMemberList.get(0);
// }
// if(flag){
// subTimeMember = null;
// }
// }
// }
return subTimeMember;
}

162
tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java

@ -17,6 +17,8 @@ import com.ccsens.util.WebConstant;
import com.ccsens.util.cron.CronConstant;
import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -42,8 +44,6 @@ public class TaskSubTimeService implements ITaskSubTimeService {
@Autowired
private ProSubTimeMemberDao proSubTimeMemberDao;
@Autowired
private IUserService userService;
@Autowired
private ProTaskDeliverPostLogDao proTaskDeliverPostLogDao;
@Autowired
private TaskDetailDao taskDetailDao;
@ -54,8 +54,6 @@ public class TaskSubTimeService implements ITaskSubTimeService {
@Autowired
private IProMemberService proMemberService;
@Autowired
private IProRoleService proRoleService;
@Autowired
private IProTaskDetailService taskDetailService;
@Autowired
private IMessageService messageService;
@ -74,13 +72,15 @@ public class TaskSubTimeService implements ITaskSubTimeService {
/**
* 完成任务
*
* @param currentUserId
* @param subTimeId
* @throws Exception
* @param currentUserId userId
* @param subTimeId 任务日期id
* @throws Exception 任务详情
*/
@Override
public TaskVo.NormalTask finishTask(Long currentUserId, TaskDto.TaskSubTimeId subTimeId) throws Exception {
int completedStatus = subTimeId.getCompletedStatus() == null ? 2 : subTimeId.getCompletedStatus();
//获取当前时间
Long now = System.currentTimeMillis();
//查找taskSubTime
ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(subTimeId.getId());
if (ObjectUtil.isNull(taskSubTime)) {
@ -146,96 +146,36 @@ public class TaskSubTimeService implements ITaskSubTimeService {
subTimeMember.setComplatedStatus((byte) completedStatus);
subTimeMember.setMemberId(member.getId());
subTimeMember.setTaskSubTimeId(subTimeId.getId());
subTimeMember.setRealFinishTime(System.currentTimeMillis());
subTimeMember.setRealFinishTime(now);
proSubTimeMemberDao.insertSelective(subTimeMember);
} else {
subTimeMember.setComplatedStatus((byte) completedStatus);
subTimeMember.setRealFinishTime(System.currentTimeMillis());
subTimeMember.setRealFinishTime(now);
proSubTimeMemberDao.updateByPrimaryKeySelective(subTimeMember);
}
}else {
//不需要全部成员点完成,直接修改任务状态
if(taskDetail.getFinishNeedAll() == 0){
taskSubTime.setRealEndTime(now);
taskSubTime.setComplatedStatus(subTimeId.getCompletedStatus());
taskSubTimeDao.updateByPrimaryKeySelective(taskSubTime);
}
} else {
ProSubTimeMember proSubTimeMember = new ProSubTimeMember();
proSubTimeMember.setRecStatus((byte) 2);
ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample();
if(taskDetail.getFinishNeedAll()==0){
if (taskDetail.getFinishNeedAll() == 0) {
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId.getId());
}else {
} else {
subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId.getId()).andMemberIdEqualTo(member.getId());
}
proSubTimeMemberDao.updateByExampleSelective(proSubTimeMember,subTimeMemberExample);
}
//修改任务状态
// ProSubTimeMember sTimeMember = taskDetailService.getProcessByUserIdAndTask(currentUserId, taskSubTime.getId());
// if (ObjectUtil.isNotNull(sTimeMember)) {
proSubTimeMemberDao.updateByExampleSelective(proSubTimeMember, subTimeMemberExample);
//修改任务状态,删除完成时间
taskSubTime.setRealEndTime((long) 0);
taskSubTime.setComplatedStatus(subTimeId.getCompletedStatus());
taskSubTimeDao.updateByPrimaryKeySelective(taskSubTime);
// }
}
// //查找此用户在任务下的成员
// ProMember member = proMemberService.selectByUserId(currentUserId,taskDetail.getProjectId());
// //是否需要全部打卡完成
// if(taskDetail.getFinishNeedAll()==0) {
//// //是否有分组
//// if (taskDetail.getHasGroup() == 1) {
//// //检查分组下的任务的完成状态
//// List<ProTaskSubTime> subTimeList = taskDetailDao.selectSubTaskByGroupId(taskDetail.getId(), taskSubTime.getBeginTime(), taskSubTime.getEndTime());
//// if(CollectionUtil.isNotEmpty(subTimeList)){
//// for (ProTaskSubTime subTime : subTimeList) {
//// ProSubTimeMember subTimeMember = taskDetailService.getProcessByUserIdAndTask(currentUserId, subTime.getId());
//// if(ObjectUtil.isNull(subTimeMember) || subTimeMember.getComplatedStatus() != 2){
//// log.info("分组下任务未全部完成:{}",subTime.getId());
//// throw new BaseException(CodeEnum.SUB_TASK_IS_NOT_FINISH);
//// }
//// }
//// }
//// }
//// //查询任务下的交付物
//// ProTaskDeliverExample deliverExample = new ProTaskDeliverExample();
//// deliverExample.createCriteria().andTaskDetailIdEqualTo(taskSubTime.getTaskDetailId())
//// .andIsInputEqualTo(0);
//// List<ProTaskDeliver> deliverList = taskDeliverDao.selectByExample(deliverExample);
//// if (CollectionUtil.isNotEmpty(deliverList)) {
//// for (ProTaskDeliver taskDeliver : deliverList) {
//// ProTaskDeliverPostLogExample postLogExample = new ProTaskDeliverPostLogExample();
//// postLogExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId.getId())
//// .andDeliverIdEqualTo(taskDeliver.getId());
//// List<ProTaskDeliverPostLog> postLogList = proTaskDeliverPostLogDao.selectByExample(postLogExample);
//// if (CollectionUtil.isEmpty(postLogList)) {
//// throw new BaseException(CodeEnum.TASK_NOT_UPLOAD_DELIVER);
//// }
//// }
//// }
//
// ProSubTimeMember subTimeMember = isFinishTask(member.getId(),subTimeId.getId());
// if(ObjectUtil.isNull(subTimeMember)){
// subTimeMember = new ProSubTimeMember();
// subTimeMember.setId(snowflake.nextId());
// subTimeMember.setComplatedStatus((byte) completedStatus);
// subTimeMember.setMemberId(member.getId());
// subTimeMember.setTaskSubTimeId(subTimeId.getId());
// subTimeMember.setRealFinishTime(System.currentTimeMillis());
// proSubTimeMemberDao.insertSelective(subTimeMember);
// }else {
// subTimeMember.setComplatedStatus((byte) completedStatus);
// subTimeMember.setRealFinishTime(System.currentTimeMillis());
// proSubTimeMemberDao.updateByPrimaryKeySelective(subTimeMember);
// }
// }else {
// ProSubTimeMember subTimeMember = isFinishTask(member.getId(),subTimeId.getId());
// if(ObjectUtil.isNotNull(subTimeMember)){
// subTimeMember.setComplatedStatus((byte) completedStatus);
// subTimeMember.setRealFinishTime(System.currentTimeMillis());
// proSubTimeMemberDao.updateByPrimaryKeySelective(subTimeMember);
// }else {
// subTimeMember = new ProSubTimeMember();
// subTimeMember.setId(snowflake.nextId());
// subTimeMember.setComplatedStatus((byte) completedStatus);
// subTimeMember.setTaskSubTimeId(subTimeId.getId());
// subTimeMember.setMemberId(member.getId());
// subTimeMember.setRealFinishTime(System.currentTimeMillis());
// proSubTimeMemberDao.insertSelective(subTimeMember);
// }
// }
//返回的任务详细信息
TaskVo.NormalTask normalTask = taskDetailService.getTaskInfoByTaskId(currentUserId, taskDetail.getProjectId(), subTimeId.getId());
//用智能助手发送消息
@ -262,9 +202,9 @@ public class TaskSubTimeService implements ITaskSubTimeService {
/**
* 开始任务
*
* @param currentUserId
* @param startTaskDto
* @throws Exception
* @param currentUserId userid
* @param startTaskDto 开始任务
* @throws Exception void
*/
@Override
public void startTask(Long currentUserId, TaskDto.StartTask startTaskDto) throws Exception {
@ -327,13 +267,6 @@ public class TaskSubTimeService implements ITaskSubTimeService {
syncMessage.setReceivers(messageUserList);
messageService.sendStartTaskMessage(syncMessage);
// //发送同步消息
// SysProject project = sysProjectDao.selectByPrimaryKey(startTaskDto.getProjectId());
// //已发布的项目才同步
// if (ObjectUtil.isNotNull(project.getPublished()) && project.getPublished() == 1) {
// messageService.sendSyncMessageWithStart(currentUserId, startTaskDto.getProjectId(), startTaskDto.getRoleId(), taskSubTime.getTaskDetailId(), now,
// taskSubTime.getEndTime() - taskSubTime.getBeginTime(),player);
// }
//3.添加记录
proLogService.addNewProLog(now, taskSubTime.getId(),
WebConstant.TASK_Execute_Type.Start.value,
@ -346,8 +279,8 @@ public class TaskSubTimeService implements ITaskSubTimeService {
/**
* 结束其他进行中的任务
*
* @param roleId
* @param time
* @param roleId 角色id
* @param time 时间
*/
private void completeTask(Long subTaskId, Long roleId, Long time) {
List<ProTaskSubTime> proTaskSubTimeList = taskSubTimeDao.getUnderwayTaskByRoleId(subTaskId, roleId);
@ -388,8 +321,6 @@ public class TaskSubTimeService implements ITaskSubTimeService {
throw new BaseException(CodeEnum.PARAM_ERROR);
}
if (ObjectUtil.isNotNull(addTask.getParentTaskId())) {
// ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(addTask.getParentTaskId());
// if(ObjectUtil.isNotNull(subTime)) {
ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(addTask.getParentTaskId());
if (ObjectUtil.isNotNull(taskDetail)) {
detail.setProjectId(taskDetail.getProjectId());
@ -508,19 +439,25 @@ public class TaskSubTimeService implements ITaskSubTimeService {
/**
* 看板上查找任务信息
*
* @param currentUserId
* @param projectId
* @param roleId
* @param type
* @param page
* @param pageSize
* @return
* @param currentUserId userId
* @param projectId 项目id
* @param roleId 角色id
* @param type 任务状态 0未开始 1进行中 2已完成
* @param page 页数
* @param pageSize 每页数量
* @return 任务列表
*/
@Override
public List<TaskVo.KanBanTask> getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize) {
//
return null;
public PageInfo<TaskVo.KanBanTask> getKanbanTake(Long currentUserId, Long projectId, Long roleId, Integer type, Integer page, Integer pageSize) throws Exception {
//查找此用户在任务下的成员
ProMember member = proMemberService.selectByUserId(currentUserId, projectId);
if (ObjectUtil.isNull(member)) {
throw new BaseException(CodeEnum.NOT_MEMBER);
}
PageHelper.startPage(page, pageSize);
List<TaskVo.KanBanTask> kanBanTaskList = taskSubTimeDao.getKanbanTake(projectId,roleId,type,member.getId());
// return new PageInfo<>(vos);
return new PageInfo<>(kanBanTaskList);
}
/**
@ -530,14 +467,15 @@ public class TaskSubTimeService implements ITaskSubTimeService {
* @param changeKanbanTask
*/
@Override
public void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask) {
public void changeKanbanTake(Long currentUserId, TaskDto.ChangeKanbanTask changeKanbanTask) throws Exception {
//查找任务
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(changeKanbanTask.getId());
if (ObjectUtil.isNull(proTaskSubTime)) {
throw new BaseException(CodeEnum.NOT_TASK);
}
if (changeKanbanTask.getType() == 2) {
}
TaskDto.TaskSubTimeId subTimeId = new TaskDto.TaskSubTimeId();
subTimeId.setId(changeKanbanTask.getId());
subTimeId.setCompletedStatus(changeKanbanTask.getType());
finishTask(currentUserId,subTimeId);
}
}

7
tall/src/main/java/com/ccsens/tall/web/TaskController.java

@ -8,6 +8,7 @@ import com.ccsens.tall.service.ITaskSubTimeService;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.WebConstant;
import com.ccsens.util.annotation.OperateType;
import com.github.pagehelper.PageInfo;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
@ -128,14 +129,16 @@ public class TaskController {
@ApiImplicitParam(name = "roleId", value = "角色id 不传则查找全部", required = true, paramType = "query")
})
@RequestMapping(value = "kanban", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.KanBanTask>> getKanbanTake(HttpServletRequest request,
public JsonResponse<PageInfo<TaskVo.KanBanTask>> getKanbanTake(HttpServletRequest request,
@RequestParam(required = true)Long projectId,
@RequestParam(required = false)Long roleId,
@RequestParam(required = true)Integer type,
@RequestParam(required = false)Integer page,
@RequestParam(required = false)Integer pageSize) throws Exception {
page = page == null ? 1 : page;
pageSize = pageSize == null ? 10 : pageSize;
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
List<TaskVo.KanBanTask> kanbanTaskList = subTimeService.getKanbanTake(currentUserId,projectId,roleId,type,page,pageSize);
PageInfo<TaskVo.KanBanTask> kanbanTaskList = subTimeService.getKanbanTake(currentUserId,projectId,roleId,type,page,pageSize);
return JsonResponse.newInstance().ok(kanbanTaskList);
}

4
tall/src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: dev
include: util-dev,common
active: test
include: util-test,common

6
tall/src/main/resources/mapper_dao/SysProjectDao.xml

@ -142,7 +142,8 @@
t_sys_user_attention a
left JOIN t_sys_project p ON a.project_id = p.id
left join t_sys_project_label pl on pl.project_id = p.id
left join t_sys_label l on pl.label_id = l.id
left join t_sys_label l on pl.label_id = l.id and
l.user_id = #{userId}
WHERE
a.user_id = #{userId}
AND
@ -198,7 +199,8 @@
t_sys_user_attention a
left JOIN t_sys_project p ON a.project_id = p.id
left join t_sys_project_label pl on pl.project_id = p.id
left join t_sys_label l on pl.label_id = l.id
left join t_sys_label l on pl.label_id = l.id and
l.user_id = #{userId}
WHERE
a.user_id = #{userId}
AND

48
tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml

@ -28,4 +28,52 @@
p.id = #{projectId}
</update>
<select id="getKanbanTake" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.vo.TaskVo$KanBanTask">
SELECT
d.id as taskDetailId,
s.id as id,
d.name as taskName,
d.executor_role as roleId,
r.name as roleName,
s.begin_time as taskBegintime,
s.end_time as taskEndTime
FROM
t_pro_task_detail d LEFT JOIN t_pro_task_sub_time s on d.id = s.task_detail_id
LEFT JOIN t_pro_role r on r.id = d.executor_role
LEFT JOIN
(
SELECT
count(m.id) as mid,
s.id as sId
FROM
t_pro_sub_time_member m LEFT JOIN t_pro_task_sub_time s on m.task_sub_time_id = s.id
WHERE
m.member_id = #{memberId}
and
m.rec_status = 0
)t on t.sId = s.id
WHERE
d.project_id = #{projectId}
and
d.level != 0
<if test="roleId != null">
and
r.id = #{roleId}
</if>
and
s.complated_status = #{type}
and
(
(
d.finish_need_all = 0
)
or
(
d.finish_need_all = 1
and
t.mid > 0
)
)
</select>
</mapper>
Loading…
Cancel
Save