项目周报工作流功能

dev
lh 2 weeks ago
parent 880c808569
commit 679444db93

@ -44,7 +44,6 @@ public class ErpProjectReportController extends BaseController {
@SaCheckPermission("oa/erp:projectReport:list")
@GetMapping("/list")
public TableDataInfo<ErpProjectReportVo> list(ErpProjectReportBo bo, PageQuery pageQuery) {
return erpProjectReportService.queryPageList(bo, pageQuery);
}

@ -6,6 +6,7 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.oa.erp.domain.ErpProjectReport;
import java.io.Serial;
@ -21,7 +22,7 @@ import java.io.Serializable;
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ErpProjectReport.class)
public class ErpProjectReportVo implements Serializable {
public class ErpProjectReportVo extends BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@ -29,13 +30,13 @@ public class ErpProjectReportVo implements Serializable {
/**
* ID
*/
@ExcelProperty(value = "项目周报ID")
// @ExcelProperty(value = "项目周报ID")
private Long reportId;
/**
* ID
*/
@ExcelProperty(value = "项目ID")
// @ExcelProperty(value = "项目ID")
private Long projectId;
/**
@ -43,6 +44,11 @@ public class ErpProjectReportVo implements Serializable {
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
*
*/
@ExcelProperty(value = "项目编码")
private String projectCode;
/**
*
@ -53,70 +59,27 @@ public class ErpProjectReportVo implements Serializable {
/**
*
*/
@ExcelProperty(value = "项目经理")
// @ExcelProperty(value = "项目经理")
private Long managerId;
/**
* ID
*/
@ExcelProperty(value = "部门ID")
// @ExcelProperty(value = "部门ID")
private Long deptId;
/**
*
*/
@ExcelProperty(value = "部门负责人")
// @ExcelProperty(value = "部门负责人")
private Long chargeId;
/**
*
*/
@ExcelProperty(value = "分管副总")
// @ExcelProperty(value = "分管副总")
private Long deputyId;
/**
*
*/
@ExcelProperty(value = "周报情况说明")
private String informationNote;
/**
*
*/
@ExcelProperty(value = "排序号")
private Long sortOrder;
/**
* ID
*/
@ExcelProperty(value = "附件ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "预=留")
private String ossId;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=是,0=否")
private String activeFlag;
/**
*
*/
@ExcelProperty(value = "项目编码")
private String projectCode;
/**
*
*/
@ExcelProperty(value = "项目类型名称")
private String typeName;
/**
*
*/
@ -140,5 +103,43 @@ public class ErpProjectReportVo implements Serializable {
*/
@ExcelProperty(value = "分管副总名称")
private String deputyName;
/**
*
*/
@ExcelProperty(value = "周报情况说明")
private String informationNote;
/**
*
*/
// @ExcelProperty(value = "排序号")
private Long sortOrder;
/**
* ID
*/
@ExcelProperty(value = "附件ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "预=留")
private String ossId;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=是,0=否")
private String activeFlag;
/**
*
*/
// @ExcelProperty(value = "项目类型名称")
private String typeName;
}

@ -45,4 +45,8 @@ public interface ErpProjectReportMapper extends BaseMapperPlus<ErpProjectReport,
})
public List<ErpProjectReportVo> selectCustomErpProjectReportVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectReport> queryWrapper);
public ErpProjectReportVo selectVoAndUserById(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectReport> queryWrapper);
public List<ErpProjectReportVo> selectVoAndUserList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectReport> queryWrapper);
}

@ -34,8 +34,10 @@ import org.dromara.oa.erp.service.IErpProjectReportService;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.event.ProcessEvent;
import org.redisson.api.RedissonClient;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
@ -55,12 +57,12 @@ public class ErpProjectReportDetailServiceImpl implements IErpProjectReportDetai
private final IErpProjectReportService erpProjectReportService;
private final ErpProjectReportDetailMapper baseMapper;
@DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService;
/**
*
*
@ -68,23 +70,23 @@ public class ErpProjectReportDetailServiceImpl implements IErpProjectReportDetai
* @return
*/
@Override
public ErpProjectReportDetailVo queryById(Long reportDetailId){
public ErpProjectReportDetailVo queryById(Long reportDetailId) {
return baseMapper.selectVoById(reportDetailId);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<ErpProjectReportDetailVo> queryPageList(ErpProjectReportDetailBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpProjectReportDetail> lqw = buildQueryWrapper(bo);
Page<ErpProjectReportDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<ErpProjectReportDetailVo> queryPageList(ErpProjectReportDetailBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpProjectReportDetail> lqw = buildQueryWrapper(bo);
Page<ErpProjectReportDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
@ -101,27 +103,26 @@ public class ErpProjectReportDetailServiceImpl implements IErpProjectReportDetai
private MPJLambdaWrapper<ErpProjectReportDetail> buildQueryWrapper(ErpProjectReportDetailBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpProjectReportDetail> lqw = JoinWrappers.lambda(ErpProjectReportDetail.class)
.selectAll(ErpProjectReportDetail.class)
.eq(bo.getReportId() != null, ErpProjectReportDetail::getReportId, bo.getReportId())
.eq(bo.getProjectId() != null, ErpProjectReportDetail::getProjectId, bo.getProjectId())
.eq(bo.getFillTime() != null, ErpProjectReportDetail::getFillTime, bo.getFillTime())
.eq(StringUtils.isNotBlank(bo.getCurrentWorkWeek()), ErpProjectReportDetail::getCurrentWorkWeek, bo.getCurrentWorkWeek())
.eq(StringUtils.isNotBlank(bo.getMilestonePlan()), ErpProjectReportDetail::getMilestonePlan, bo.getMilestonePlan())
.eq(StringUtils.isNotBlank(bo.getSecondaryPhase()), ErpProjectReportDetail::getSecondaryPhase, bo.getSecondaryPhase())
.eq(StringUtils.isNotBlank(bo.getTasksCompleted()), ErpProjectReportDetail::getTasksCompleted, bo.getTasksCompleted())
.eq(StringUtils.isNotBlank(bo.getNextPlan()), ErpProjectReportDetail::getNextPlan, bo.getNextPlan())
.eq(StringUtils.isNotBlank(bo.getRiskResolution()), ErpProjectReportDetail::getRiskResolution, bo.getRiskResolution())
.eq(bo.getPlannedCompletionRate() != null, ErpProjectReportDetail::getPlannedCompletionRate, bo.getPlannedCompletionRate())
.eq(StringUtils.isNotBlank(bo.getInformationNote()), ErpProjectReportDetail::getInformationNote, bo.getInformationNote())
.eq(StringUtils.isNotBlank(bo.getScheduleStatus()), ErpProjectReportDetail::getScheduleStatus, bo.getScheduleStatus())
.eq(StringUtils.isNotBlank(bo.getProjectReportStatus()), ErpProjectReportDetail::getProjectReportStatus, bo.getProjectReportStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpProjectReportDetail::getFlowStatus, bo.getFlowStatus())
.eq(bo.getSortOrder() != null, ErpProjectReportDetail::getSortOrder, bo.getSortOrder())
.eq(StringUtils.isNotBlank(bo.getProjectPhases()), ErpProjectReportDetail::getProjectPhases, bo.getProjectPhases())
.eq(bo.getContractId() != null, ErpProjectReportDetail::getContractId, bo.getContractId())
.eq(StringUtils.isNotBlank(bo.getOssId()), ErpProjectReportDetail::getOssId, bo.getOssId())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpProjectReportDetail::getActiveFlag, bo.getActiveFlag())
;
.selectAll(ErpProjectReportDetail.class)
.eq(bo.getReportId() != null, ErpProjectReportDetail::getReportId, bo.getReportId())
.eq(bo.getProjectId() != null, ErpProjectReportDetail::getProjectId, bo.getProjectId())
.eq(bo.getFillTime() != null, ErpProjectReportDetail::getFillTime, bo.getFillTime())
.eq(StringUtils.isNotBlank(bo.getCurrentWorkWeek()), ErpProjectReportDetail::getCurrentWorkWeek, bo.getCurrentWorkWeek())
.eq(StringUtils.isNotBlank(bo.getMilestonePlan()), ErpProjectReportDetail::getMilestonePlan, bo.getMilestonePlan())
.eq(StringUtils.isNotBlank(bo.getSecondaryPhase()), ErpProjectReportDetail::getSecondaryPhase, bo.getSecondaryPhase())
.eq(StringUtils.isNotBlank(bo.getTasksCompleted()), ErpProjectReportDetail::getTasksCompleted, bo.getTasksCompleted())
.eq(StringUtils.isNotBlank(bo.getNextPlan()), ErpProjectReportDetail::getNextPlan, bo.getNextPlan())
.eq(StringUtils.isNotBlank(bo.getRiskResolution()), ErpProjectReportDetail::getRiskResolution, bo.getRiskResolution())
.eq(bo.getPlannedCompletionRate() != null, ErpProjectReportDetail::getPlannedCompletionRate, bo.getPlannedCompletionRate())
.eq(StringUtils.isNotBlank(bo.getInformationNote()), ErpProjectReportDetail::getInformationNote, bo.getInformationNote())
.eq(StringUtils.isNotBlank(bo.getScheduleStatus()), ErpProjectReportDetail::getScheduleStatus, bo.getScheduleStatus())
.eq(StringUtils.isNotBlank(bo.getProjectReportStatus()), ErpProjectReportDetail::getProjectReportStatus, bo.getProjectReportStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpProjectReportDetail::getFlowStatus, bo.getFlowStatus())
.eq(bo.getSortOrder() != null, ErpProjectReportDetail::getSortOrder, bo.getSortOrder())
.eq(StringUtils.isNotBlank(bo.getProjectPhases()), ErpProjectReportDetail::getProjectPhases, bo.getProjectPhases())
.eq(bo.getContractId() != null, ErpProjectReportDetail::getContractId, bo.getContractId())
.eq(StringUtils.isNotBlank(bo.getOssId()), ErpProjectReportDetail::getOssId, bo.getOssId())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpProjectReportDetail::getActiveFlag, bo.getActiveFlag());
return lqw;
}
@ -158,7 +159,7 @@ public class ErpProjectReportDetailServiceImpl implements IErpProjectReportDetai
/**
*
*/
private void validEntityBeforeSave(ErpProjectReportDetail entity){
private void validEntityBeforeSave(ErpProjectReportDetail entity) {
//TODO 做一些数据校验,如唯一约束
}
@ -171,7 +172,7 @@ public class ErpProjectReportDetailServiceImpl implements IErpProjectReportDetai
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
@ -179,14 +180,15 @@ public class ErpProjectReportDetailServiceImpl implements IErpProjectReportDetai
/**
*
*
* @param projectReport
* @param projectDetailReport
* @return
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class)
public ErpProjectReportDetailVo projectReportSubmitAndFlowStart(ErpProjectReportBo projectReport, ErpProjectReportDetailBo projectDetailReport) {
if (projectReport.getReportId() != null) {
if (StringUtils.isNotNull(projectReport.getReportId())) {
ErpProjectReportVo existingReport = erpProjectReportService.queryById(projectReport.getReportId());
if (existingReport != null) {
erpProjectReportService.updateByBo(projectReport);

@ -8,6 +8,7 @@ import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.oa.erp.domain.ErpProjectContracts;
import org.dromara.oa.erp.domain.ErpProjectReport;
import org.dromara.oa.erp.domain.bo.ErpProjectReportBo;
import org.dromara.oa.erp.domain.vo.ErpProjectReportVo;
@ -39,7 +40,11 @@ public class ErpProjectReportServiceImpl implements IErpProjectReportService {
*/
@Override
public ErpProjectReportVo queryById(Long reportId) {
return baseMapper.selectVoById(reportId);
ErpProjectReportBo bo = new ErpProjectReportBo();
bo.setReportId(reportId);
MPJLambdaWrapper<ErpProjectReport> lqw = buildQueryWrapper(bo);
lqw.eq(reportId != null, ErpProjectReport::getReportId, bo.getReportId());
return baseMapper.selectVoAndUserById(lqw);
}
/**
@ -65,7 +70,7 @@ public class ErpProjectReportServiceImpl implements IErpProjectReportService {
@Override
public List<ErpProjectReportVo> queryList(ErpProjectReportBo bo) {
MPJLambdaWrapper<ErpProjectReport> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
return baseMapper.selectVoAndUserList(lqw);
}
private MPJLambdaWrapper<ErpProjectReport> buildQueryWrapper(ErpProjectReportBo bo) {
@ -82,14 +87,13 @@ public class ErpProjectReportServiceImpl implements IErpProjectReportService {
.eq(bo.getSortOrder() != null, ErpProjectReport::getSortOrder, bo.getSortOrder())
.eq(StringUtils.isNotBlank(bo.getOssId()), ErpProjectReport::getOssId, bo.getOssId())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpProjectReport::getActiveFlag, bo.getActiveFlag())
.eq("t.del_flag", "0")
.like(StringUtils.isNotBlank(bo.getProjectName()), ErpProjectReport::getProjectName, bo.getProjectName())
.like(StringUtils.isNotBlank(bo.getProjectCode()), ErpProjectReport::getProjectCode, bo.getProjectCode())
// 关联表条件 - 使用 apply 方法添加
.apply(StringUtils.isNotBlank(bo.getDeptName()), "d.dept_name LIKE CONCAT('%', {0}, '%')", bo.getDeptName())
.apply(StringUtils.isNotBlank(bo.getManagerName()), "u1.nick_name LIKE CONCAT('%', {0}, '%')", bo.getManagerName())
.apply(StringUtils.isNotBlank(bo.getChargeName()), "u2.nick_name LIKE CONCAT('%', {0}, '%')", bo.getChargeName())
.apply(StringUtils.isNotBlank(bo.getDeputyName()), "u3.nick_name LIKE CONCAT('%', {0}, '%')", bo.getDeputyName());
return lqw;
}

@ -6,39 +6,66 @@
<resultMap type="org.dromara.oa.erp.domain.vo.ErpProjectReportVo" id="ErpProjectReportResult">
</resultMap>
<select id="selectCustomErpProjectReportVoList" resultMap="ErpProjectReportResult">
select t.report_id,
t.tenant_id,
t.project_id,
t.project_name,
t.milestone_plan,
t.manager_id,
t.dept_id,
t.charge_id,
t.deputy_id,
t.information_note,
t.sort_order,
t.oss_id,
t.remark,
t.active_flag,
t.del_flag,
t.create_dept,
t.create_by,
t.create_time,
t.update_by,
t.update_time,
t.project_code,
d.dept_name deptName,
u1.nick_name managerName,
u2.nick_name chargeName,
u3.nick_name deputyName
from erp_project_report t
left join sys_dept d on d.dept_id = t.dept_id
left join sys_user u1 on u1.user_id = t.manager_id
left join sys_user u2 on u2.user_id = t.charge_id
left join sys_user u3 on u3.user_id = t.deputy_id
${ew.getCustomSqlSegment}
<!-- 抽取公共的SELECT字段 -->
<sql id="selectReportVoColumns">
t.report_id,
t.tenant_id,
t.project_id,
t.project_name,
t.milestone_plan,
t.manager_id,
t.dept_id,
t.charge_id,
t.deputy_id,
t.information_note,
t.sort_order,
t.oss_id,
t.remark,
t.active_flag,
t.del_flag,
t.create_dept,
t.create_by,
t.create_time,
t.update_by,
t.update_time,
t.project_code,
d.dept_name AS deptName,
u1.nick_name AS managerName,
u2.nick_name AS chargeName,
u3.nick_name AS deputyName
</sql>
<!-- 抽取公共的表连接 -->
<sql id="fromReportWithJoin">
FROM erp_project_report t
LEFT JOIN sys_dept d ON d.dept_id = t.dept_id
LEFT JOIN sys_user u1 ON u1.user_id = t.manager_id
LEFT JOIN sys_user u2 ON u2.user_id = t.charge_id
LEFT JOIN sys_user u3 ON u3.user_id = t.deputy_id
</sql>
<!-- 方法1使用resultMap -->
<select id="selectCustomErpProjectReportVoList" resultMap="ErpProjectReportResult">
SELECT
<include refid="selectReportVoColumns"/>
<include refid="fromReportWithJoin"/>
${ew.customSqlSegment}
</select>
<!-- 方法2使用resultType -->
<select id="selectVoAndUserById" resultType="org.dromara.oa.erp.domain.vo.ErpProjectReportVo">
SELECT
<include refid="selectReportVoColumns"/>
<include refid="fromReportWithJoin"/>
${ew.customSqlSegment}
</select>
<!-- 方法3使用resultType -->
<select id="selectVoAndUserList" resultType="org.dromara.oa.erp.domain.vo.ErpProjectReportVo">
SELECT
<include refid="selectReportVoColumns"/>
<include refid="fromReportWithJoin"/>
${ew.customSqlSegment}
</select>
</mapper>

Loading…
Cancel
Save