feat:项目人员表
parent
8196485264
commit
caa8b4f1bc
|
@ -2,6 +2,7 @@ package tech.unissense.pms.web.controller.business.project;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import tech.unissense.pms.business.project.dto.ProjectQueryDto;
|
||||||
import tech.unissense.pms.business.projectteam.domain.ProjectTeam;
|
import tech.unissense.pms.business.projectteam.domain.ProjectTeam;
|
||||||
import tech.unissense.pms.business.projectteam.service.IProjectTeamService;
|
import tech.unissense.pms.business.projectteam.service.IProjectTeamService;
|
||||||
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
|
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
|
||||||
|
@ -111,4 +112,13 @@ public class ProjectController extends BaseController
|
||||||
{
|
{
|
||||||
return success(service.executionInfo(workLogger));
|
return success(service.executionInfo(workLogger));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 项目人员表
|
||||||
|
*/
|
||||||
|
// @PreAuthorize("@ss.hasPermi('system:dept:remove')")
|
||||||
|
@PostMapping("/workInfo")
|
||||||
|
public AjaxResult workInfo(@RequestBody ProjectQueryDto dto)
|
||||||
|
{
|
||||||
|
return success(service.workInfo(dto));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package tech.unissense.pms.business.project.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author : ch
|
||||||
|
* @version : 1.0
|
||||||
|
* @ClassName : ProjectQueryDto
|
||||||
|
* @Description : TODO(用一句话描述该类做什么)
|
||||||
|
* @DATE : Created in 14:51 2024/10/10
|
||||||
|
* <pre> Copyright: Copyright(c)2024 </pre>
|
||||||
|
* <pre> Company : 紫光汇智信息技术有限公司 </pre>
|
||||||
|
* Modification History:
|
||||||
|
* Date Author Version Discription
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* 2024/10/10 ch 1.0 Why & What is modified: <修改原因描述> *
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ProjectQueryDto {
|
||||||
|
private Integer projectId;
|
||||||
|
private Date startDate;
|
||||||
|
private Date endDate;
|
||||||
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package tech.unissense.pms.business.project.service;
|
package tech.unissense.pms.business.project.service;
|
||||||
|
|
||||||
import tech.unissense.pms.business.project.domain.Project;
|
import tech.unissense.pms.business.project.domain.Project;
|
||||||
|
import tech.unissense.pms.business.project.dto.ProjectQueryDto;
|
||||||
import tech.unissense.pms.business.project.vo.ProjectExecutionVo;
|
import tech.unissense.pms.business.project.vo.ProjectExecutionVo;
|
||||||
|
import tech.unissense.pms.business.project.vo.ProjectWorkInfoVo;
|
||||||
import tech.unissense.pms.business.projectteam.vo.TeamStaticsVo;
|
import tech.unissense.pms.business.projectteam.vo.TeamStaticsVo;
|
||||||
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
|
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (Project)表服务接口
|
* (Project)表服务接口
|
||||||
|
@ -65,4 +65,5 @@ public interface IProjectService {
|
||||||
List<ProjectExecutionVo> executionInfo(WorkLogger workLogger);
|
List<ProjectExecutionVo> executionInfo(WorkLogger workLogger);
|
||||||
|
|
||||||
|
|
||||||
|
ProjectWorkInfoVo workInfo(ProjectQueryDto project);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,11 @@ import cn.hutool.core.collection.CollUtil;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import tech.unissense.pms.business.project.domain.Project;
|
import tech.unissense.pms.business.project.domain.Project;
|
||||||
|
import tech.unissense.pms.business.project.dto.ProjectQueryDto;
|
||||||
import tech.unissense.pms.business.project.mapper.ProjectMapper;
|
import tech.unissense.pms.business.project.mapper.ProjectMapper;
|
||||||
import tech.unissense.pms.business.project.service.IProjectService;
|
import tech.unissense.pms.business.project.service.IProjectService;
|
||||||
import tech.unissense.pms.business.project.vo.ProjectExecutionVo;
|
import tech.unissense.pms.business.project.vo.ProjectExecutionVo;
|
||||||
|
import tech.unissense.pms.business.project.vo.ProjectWorkInfoVo;
|
||||||
import tech.unissense.pms.business.projectteam.domain.ProjectTeam;
|
import tech.unissense.pms.business.projectteam.domain.ProjectTeam;
|
||||||
import tech.unissense.pms.business.projectteam.service.IProjectTeamService;
|
import tech.unissense.pms.business.projectteam.service.IProjectTeamService;
|
||||||
import tech.unissense.pms.business.projectteam.vo.TeamStaticsVo;
|
import tech.unissense.pms.business.projectteam.vo.TeamStaticsVo;
|
||||||
|
@ -23,12 +25,12 @@ import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import java.time.temporal.ChronoUnit;
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -160,7 +162,12 @@ public class ProjectServiceImpl implements IProjectService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ProjectExecutionVo> executionInfo(WorkLogger workLogger) {
|
public List<ProjectExecutionVo> executionInfo(WorkLogger workLogger) {
|
||||||
List<Project> projects = this.permissisonList(new Project());
|
|
||||||
|
Project projectQueryDto = new Project();
|
||||||
|
if (workLogger.getUserId() != null) {
|
||||||
|
projectQueryDto.setQueryUserId(Long.valueOf(workLogger.getUserId()));
|
||||||
|
}
|
||||||
|
List<Project> projects = this.permissisonList(projectQueryDto);
|
||||||
workLogger.setProjectIdList(projects.stream()
|
workLogger.setProjectIdList(projects.stream()
|
||||||
.map(Project::getProjectId)
|
.map(Project::getProjectId)
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
@ -188,4 +195,43 @@ public class ProjectServiceImpl implements IProjectService {
|
||||||
return vo;
|
return vo;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProjectWorkInfoVo workInfo(ProjectQueryDto projectQueryDto) {
|
||||||
|
Project project = projectMapper.queryById(projectQueryDto.getProjectId());
|
||||||
|
|
||||||
|
WorkLogger workLogger = new WorkLogger();
|
||||||
|
workLogger.setProjectId(projectQueryDto.getProjectId());
|
||||||
|
workLogger.setStartDate(projectQueryDto.getStartDate());
|
||||||
|
workLogger.setEndDate(projectQueryDto.getEndDate());
|
||||||
|
List<WorkLogger> workLoggerList = workLoggerService.listUser(workLogger);
|
||||||
|
|
||||||
|
// 使用流按日期分组,并对每个日期的工人按用户ID去重,保留最后一次记录
|
||||||
|
Map<String, List<WorkLogger>> workersByDateMap = workLoggerList.stream()
|
||||||
|
.collect(Collectors.groupingBy(
|
||||||
|
logger -> DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, logger.getLoggerDate()),
|
||||||
|
Collectors.collectingAndThen(
|
||||||
|
Collectors.toMap(
|
||||||
|
WorkLogger::getUserId,
|
||||||
|
logger -> logger,
|
||||||
|
(existing, replacement) -> existing.getCreateTime().after(replacement.getCreateTime()) ? existing : replacement
|
||||||
|
),
|
||||||
|
map -> new ArrayList<>(map.values())
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
|
LocalDate startDate = workLogger.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
|
LocalDate endDate = workLogger.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
|
|
||||||
|
// 生成从开始日期到结束日期的工人列表
|
||||||
|
List<List<WorkLogger>> detailList = Stream.iterate(startDate, date -> date.plusDays(1))
|
||||||
|
.limit(ChronoUnit.DAYS.between(startDate, endDate) + 1)
|
||||||
|
.map(localDate -> workersByDateMap.getOrDefault(localDate.toString(), Collections.emptyList()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
ProjectWorkInfoVo vo = new ProjectWorkInfoVo();
|
||||||
|
BeanUtils.copyBeanProp(vo, project);
|
||||||
|
vo.setDetailList(detailList);
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package tech.unissense.pms.business.project.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author : ch
|
||||||
|
* @version : 1.0
|
||||||
|
* @ClassName : ProjectExecutionVo
|
||||||
|
* @Description : TODO(用一句话描述该类做什么)
|
||||||
|
* @DATE : Created in 11:20 2024/10/10
|
||||||
|
* <pre> Copyright: Copyright(c)2024 </pre>
|
||||||
|
* <pre> Company : 紫光汇智信息技术有限公司 </pre>
|
||||||
|
* Modification History:
|
||||||
|
* Date Author Version Discription
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* 2024/10/10 ch 1.0 Why & What is modified: <修改原因描述> *
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ProjectWorkInfoVo {
|
||||||
|
private Integer projectId;
|
||||||
|
private String projectName;
|
||||||
|
private Integer budgetDate;
|
||||||
|
private Date startDate;
|
||||||
|
private Date endDate;
|
||||||
|
private List<List<WorkLogger>> detailList;
|
||||||
|
}
|
|
@ -33,6 +33,7 @@ public class WorkLogger extends BaseEntity {
|
||||||
* 用户id
|
* 用户id
|
||||||
*/
|
*/
|
||||||
private Integer userId;
|
private Integer userId;
|
||||||
|
private String userName;
|
||||||
/**
|
/**
|
||||||
* 工作时长
|
* 工作时长
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -80,5 +80,7 @@ public interface WorkLoggerMapper {
|
||||||
int deleteById(Integer id);
|
int deleteById(Integer id);
|
||||||
|
|
||||||
List<WorkLogger> calendar(WorkLogger workLogger);
|
List<WorkLogger> calendar(WorkLogger workLogger);
|
||||||
|
|
||||||
|
List<WorkLogger> listUser(WorkLogger workLogger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,4 +62,6 @@ public interface IWorkLoggerService {
|
||||||
|
|
||||||
List<StaticsHourVo> projectStatics(List<Project> projects, String workHour);
|
List<StaticsHourVo> projectStatics(List<Project> projects, String workHour);
|
||||||
List<StaticsHourVo> personStatics(Integer projectId);
|
List<StaticsHourVo> personStatics(Integer projectId);
|
||||||
|
|
||||||
|
List<WorkLogger> listUser(WorkLogger workLogger);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
@ -167,6 +168,11 @@ public class WorkLoggerServiceImpl implements IWorkLoggerService {
|
||||||
return generateStaticsHourVoList(personWorkHourMap);
|
return generateStaticsHourVoList(personWorkHourMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WorkLogger> listUser(WorkLogger workLogger) {
|
||||||
|
return workLoggerMapper.listUser(workLogger);
|
||||||
|
}
|
||||||
|
|
||||||
// 泛型方法,用于生成统计工时的列表,适用于项目统计
|
// 泛型方法,用于生成统计工时的列表,适用于项目统计
|
||||||
private <T> List<StaticsHourVo> generateStaticsHourVoList(List<T> items, Map<Integer, BigDecimal> workDayMap,
|
private <T> List<StaticsHourVo> generateStaticsHourVoList(List<T> items, Map<Integer, BigDecimal> workDayMap,
|
||||||
Function<T, Integer> idExtractor, Function<T, String> nameExtractor) {
|
Function<T, Integer> idExtractor, Function<T, String> nameExtractor) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<result property="loggerDate" column="logger_date" jdbcType="TIMESTAMP"/>
|
<result property="loggerDate" column="logger_date" jdbcType="TIMESTAMP"/>
|
||||||
<result property="projectId" column="project_id" jdbcType="INTEGER"/>
|
<result property="projectId" column="project_id" jdbcType="INTEGER"/>
|
||||||
<result property="userId" column="user_id" jdbcType="INTEGER"/>
|
<result property="userId" column="user_id" jdbcType="INTEGER"/>
|
||||||
|
<result property="userName" column="user_name" jdbcType="VARCHAR"/>
|
||||||
<result property="workTime" column="work_time" jdbcType="INTEGER"/>
|
<result property="workTime" column="work_time" jdbcType="INTEGER"/>
|
||||||
<result property="workContent" column="work_content" jdbcType="VARCHAR"/>
|
<result property="workContent" column="work_content" jdbcType="VARCHAR"/>
|
||||||
<result property="state" column="state" jdbcType="VARCHAR"/>
|
<result property="state" column="state" jdbcType="VARCHAR"/>
|
||||||
|
@ -49,61 +50,61 @@
|
||||||
<!--查询指定行数据-->
|
<!--查询指定行数据-->
|
||||||
<select id="list" resultMap="WorkLoggerMap">
|
<select id="list" resultMap="WorkLoggerMap">
|
||||||
select
|
select
|
||||||
logger_id, logger_date, project_id, user_id, work_time, work_content, state, create_by, update_by, update_time,
|
t1.logger_id, t1.logger_date, t1.project_id, t1.user_id, t1.work_time, t1.work_content, t1.state, t1.create_by, t1.update_by, t1.update_time,
|
||||||
create_time
|
t1.create_time,t2.nick_name user_name
|
||||||
from pms_work_logger
|
from pms_work_logger t1 left join sys_user t2 on t1.user_id=t2.user_id
|
||||||
<where>
|
<where>
|
||||||
<if test="loggerId != null">
|
<if test="loggerId != null">
|
||||||
and logger_id = #{loggerId}
|
and t1.logger_id = #{loggerId}
|
||||||
</if>
|
</if>
|
||||||
<if test="loggerDate != null">
|
<if test="loggerDate != null">
|
||||||
and logger_date = #{loggerDate}
|
and t1.logger_date = #{loggerDate}
|
||||||
</if>
|
</if>
|
||||||
<if test="startDate != null or endDate!=null">
|
<if test="startDate != null or endDate!=null">
|
||||||
<choose>
|
<choose>
|
||||||
<when test="startDate != null ">
|
<when test="startDate != null ">
|
||||||
and logger_date <![CDATA[>=]]> #{startDate}
|
and t1.logger_date <![CDATA[>=]]> #{startDate}
|
||||||
</when>
|
</when>
|
||||||
<when test="endDate != null">
|
<when test="endDate != null">
|
||||||
and logger_date <![CDATA[<=]]> #{endDate}
|
and t1.logger_date <![CDATA[<=]]> #{endDate}
|
||||||
</when>
|
</when>
|
||||||
<otherwise>
|
<otherwise>
|
||||||
and logger_date between #{startDate} and #{endDate}
|
and t1.logger_date between #{startDate} and #{endDate}
|
||||||
</otherwise>
|
</otherwise>
|
||||||
</choose>
|
</choose>
|
||||||
</if>
|
</if>
|
||||||
<if test="projectId != null">
|
<if test="projectId != null">
|
||||||
and project_id = #{projectId}
|
and t1.project_id = #{projectId}
|
||||||
</if>
|
</if>
|
||||||
<if test="projectIdList != null and projectIdList.size>0">
|
<if test="projectIdList != null and projectIdList.size>0">
|
||||||
and project_id in
|
and t1.project_id in
|
||||||
<foreach collection="projectIdList" item="item" open="(" separator="," close=")">
|
<foreach collection="projectIdList" item="item" open="(" separator="," close=")">
|
||||||
#{item}
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
<if test="userId != null">
|
<if test="userId != null">
|
||||||
and user_id = #{userId}
|
and t1.user_id = #{userId}
|
||||||
</if>
|
</if>
|
||||||
<if test="workTime != null">
|
<if test="workTime != null">
|
||||||
and work_time = #{workTime}
|
and t1.work_time = #{workTime}
|
||||||
</if>
|
</if>
|
||||||
<if test="workContent != null and workContent != ''">
|
<if test="workContent != null and workContent != ''">
|
||||||
and work_content = #{workContent}
|
and t1.work_content = #{workContent}
|
||||||
</if>
|
</if>
|
||||||
<if test="state != null and state != ''">
|
<if test="state != null and state != ''">
|
||||||
and state = #{state}
|
and t1.state = #{state}
|
||||||
</if>
|
</if>
|
||||||
<if test="createBy != null and createBy != ''">
|
<if test="createBy != null and createBy != ''">
|
||||||
and create_by = #{createBy}
|
and t1.create_by = #{createBy}
|
||||||
</if>
|
</if>
|
||||||
<if test="updateBy != null and updateBy != ''">
|
<if test="updateBy != null and updateBy != ''">
|
||||||
and update_by = #{updateBy}
|
and t1.update_by = #{updateBy}
|
||||||
</if>
|
</if>
|
||||||
<if test="updateTime != null">
|
<if test="updateTime != null">
|
||||||
and update_time = #{updateTime}
|
and t1.update_time = #{updateTime}
|
||||||
</if>
|
</if>
|
||||||
<if test="createTime != null">
|
<if test="createTime != null">
|
||||||
and create_time = #{createTime}
|
and t1.create_time = #{createTime}
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
@ -193,6 +194,66 @@
|
||||||
and report_date between #{startDate} and #{endDate}
|
and report_date between #{startDate} and #{endDate}
|
||||||
and user_id=#{userId}
|
and user_id=#{userId}
|
||||||
</select>
|
</select>
|
||||||
|
<select id="listUser" resultMap="WorkLoggerMap">
|
||||||
|
select
|
||||||
|
t1.logger_date, t1.user_id, t1.work_time,
|
||||||
|
t1.create_time,t2.nick_name user_name
|
||||||
|
from pms_work_logger t1 left join sys_user t2 on t1.user_id=t2.user_id
|
||||||
|
<where>
|
||||||
|
<if test="loggerId != null">
|
||||||
|
and t1.logger_id = #{loggerId}
|
||||||
|
</if>
|
||||||
|
<if test="loggerDate != null">
|
||||||
|
and t1.logger_date = #{loggerDate}
|
||||||
|
</if>
|
||||||
|
<if test="startDate != null or endDate!=null">
|
||||||
|
<choose>
|
||||||
|
<when test="startDate != null ">
|
||||||
|
and t1.logger_date <![CDATA[>=]]> #{startDate}
|
||||||
|
</when>
|
||||||
|
<when test="endDate != null">
|
||||||
|
and t1.logger_date <![CDATA[<=]]> #{endDate}
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
and t1.logger_date between #{startDate} and #{endDate}
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
</if>
|
||||||
|
<if test="projectId != null">
|
||||||
|
and t1.project_id = #{projectId}
|
||||||
|
</if>
|
||||||
|
<if test="projectIdList != null and projectIdList.size>0">
|
||||||
|
and t1.project_id in
|
||||||
|
<foreach collection="projectIdList" item="item" open="(" separator="," close=")">
|
||||||
|
#{item}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="userId != null">
|
||||||
|
and t1.user_id = #{userId}
|
||||||
|
</if>
|
||||||
|
<if test="workTime != null">
|
||||||
|
and t1.work_time = #{workTime}
|
||||||
|
</if>
|
||||||
|
<if test="workContent != null and workContent != ''">
|
||||||
|
and t1.work_content = #{workContent}
|
||||||
|
</if>
|
||||||
|
<if test="state != null and state != ''">
|
||||||
|
and t1.state = #{state}
|
||||||
|
</if>
|
||||||
|
<if test="createBy != null and createBy != ''">
|
||||||
|
and t1.create_by = #{createBy}
|
||||||
|
</if>
|
||||||
|
<if test="updateBy != null and updateBy != ''">
|
||||||
|
and t1.update_by = #{updateBy}
|
||||||
|
</if>
|
||||||
|
<if test="updateTime != null">
|
||||||
|
and t1.update_time = #{updateTime}
|
||||||
|
</if>
|
||||||
|
<if test="createTime != null">
|
||||||
|
and t1.create_time = #{createTime}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
<!--通过主键修改数据-->
|
<!--通过主键修改数据-->
|
||||||
<update id="update">
|
<update id="update">
|
||||||
update pms_work_logger
|
update pms_work_logger
|
||||||
|
|
Loading…
Reference in New Issue