yxk-20260731
改善提案 新增提案时,提案部门默认选中当前登录部门,用户可改选本人所属的有效业务部门。候选范围严格限定为用户关联部门中 org_type='2' 且 org_category='2' 的记录,排除岗位、科室及其他组织节点。
This commit is contained in:
+21
-7
@@ -30,6 +30,7 @@ import org.jeecg.modules.improvementproposal.entity.ImprovementProposal;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementDeptScoreBpmDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandidateDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalDepartmentDTO;
|
||||
import org.jeecg.modules.improvementproposal.vo.ImprovementProposalPage;
|
||||
import org.jeecg.modules.improvementproposal.service.IImprovementProposalService;
|
||||
import org.jeecg.modules.improvementproposal.service.IImprovementDeptScoreService;
|
||||
@@ -105,13 +106,26 @@ public class ImprovementProposalController {
|
||||
ImprovementProposal improvementProposal = new ImprovementProposal();
|
||||
BeanUtils.copyProperties(improvementProposalPage, improvementProposal);
|
||||
improvementProposal.setBpmStatus("1");
|
||||
// 新增申请在保存事务内分配年度流水号,避免前端预取号产生并发重复。
|
||||
improvementProposalService.createNewProposal(improvementProposal);
|
||||
// 附件必须使用已落库的主表 ID 关联,不能使用响应成功文案。
|
||||
Map<String, String> result = new HashMap<>(2);
|
||||
result.put("id", improvementProposal.getId());
|
||||
result.put("proposalNo", improvementProposal.getProposalNo());
|
||||
return Result.OK("添加成功!", result);
|
||||
try {
|
||||
// 新增申请在保存事务内分配年度流水号,避免前端预取号产生并发重复。
|
||||
improvementProposalService.createNewProposal(improvementProposal, currentUser());
|
||||
// 附件必须使用已落库的主表 ID 关联,不能使用响应成功文案。
|
||||
Map<String, String> result = new HashMap<>(2);
|
||||
result.put("id", improvementProposal.getId());
|
||||
result.put("proposalNo", improvementProposal.getProposalNo());
|
||||
return Result.OK("添加成功!", result);
|
||||
} catch (IllegalStateException e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前登录用户可作为改善提案归属的业务部门。
|
||||
*/
|
||||
@GetMapping(value = "/myProposalDepartments")
|
||||
@RequiresPermissions("improvementproposal:improvement_proposal:add")
|
||||
public Result<List<ImprovementProposalDepartmentDTO>> getMyProposalDepartments() {
|
||||
return Result.OK(improvementProposalService.getMyProposalDepartments(currentUser()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package org.jeecg.modules.improvementproposal.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 当前登录用户可作为改善提案归属的业务部门。
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "改善提案可选业务部门")
|
||||
public class ImprovementProposalDepartmentDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "部门ID")
|
||||
private String id;
|
||||
|
||||
@Schema(description = "部门名称")
|
||||
private String departName;
|
||||
|
||||
@Schema(description = "部门编码")
|
||||
private String orgCode;
|
||||
}
|
||||
+11
-1
@@ -6,6 +6,7 @@ import org.jeecg.modules.improvementproposal.entity.ImprovementProposal;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementDeptScoreBpmDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandidateDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalDepartmentDTO;
|
||||
import org.jeecg.common.system.vo.LoginUser;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -43,8 +44,17 @@ public interface IImprovementProposalService extends IService<ImprovementProposa
|
||||
* 创建新的改善提案,并在保存事务内生成不可重复的年度提案编号。
|
||||
*
|
||||
* @param improvementProposal 提案主表数据
|
||||
* @param loginUser 当前登录用户
|
||||
*/
|
||||
void createNewProposal(ImprovementProposal improvementProposal);
|
||||
void createNewProposal(ImprovementProposal improvementProposal, LoginUser loginUser);
|
||||
|
||||
/**
|
||||
* 查询当前登录人可选择的改善提案归属部门。
|
||||
*
|
||||
* @param loginUser 当前登录用户
|
||||
* @return 有效业务部门列表
|
||||
*/
|
||||
List<ImprovementProposalDepartmentDTO> getMyProposalDepartments(LoginUser loginUser);
|
||||
|
||||
/**
|
||||
* 修改一对多
|
||||
|
||||
+53
-4
@@ -6,6 +6,7 @@ import org.jeecg.modules.improvementproposal.entity.ImprovementInstituteVote;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementDeptScoreBpmDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandidateDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO;
|
||||
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalDepartmentDTO;
|
||||
import org.jeecg.modules.improvementproposal.mapper.ImprovementDeptScoreMapper;
|
||||
import org.jeecg.modules.improvementproposal.mapper.ImprovementInstituteVoteMapper;
|
||||
import org.jeecg.modules.improvementproposal.mapper.ImprovementProposalMapper;
|
||||
@@ -25,6 +26,7 @@ import java.math.RoundingMode;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Collection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
@@ -33,7 +35,9 @@ import org.flowable.engine.HistoryService;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.jeecg.modules.system.entity.SysRole;
|
||||
import org.jeecg.modules.system.entity.SysDepart;
|
||||
import org.jeecg.modules.system.service.ISysRoleService;
|
||||
import org.jeecg.modules.system.service.ISysUserDepartService;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -86,6 +90,8 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
|
||||
@Autowired
|
||||
private ISysRoleService sysRoleService;
|
||||
@Autowired
|
||||
private ISysUserDepartService sysUserDepartService;
|
||||
@Autowired
|
||||
private IExtActTaskCcService extActTaskCcService;
|
||||
|
||||
@Override
|
||||
@@ -126,10 +132,8 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createNewProposal(ImprovementProposal improvementProposal) {
|
||||
if (oConvertUtils.isEmpty(improvementProposal.getProposalDeptName())) {
|
||||
throw new IllegalStateException("提案部门不能为空,无法生成提案编号");
|
||||
}
|
||||
public void createNewProposal(ImprovementProposal improvementProposal, LoginUser loginUser) {
|
||||
fillAndValidateProposalDepartment(improvementProposal, loginUser);
|
||||
|
||||
int proposalYear = getProposalYear(improvementProposal.getProposalDate());
|
||||
// 年度控制表通过主键锁串行递增,整个创建事务回滚时流水号也会随之回滚。
|
||||
@@ -143,6 +147,51 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
|
||||
saveMain(improvementProposal, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ImprovementProposalDepartmentDTO> getMyProposalDepartments(LoginUser loginUser) {
|
||||
if (loginUser == null || oConvertUtils.isEmpty(loginUser.getId())) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return getAvailableProposalDepartments(loginUser.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 只允许用户所属的有效业务部门作为提案归属,岗位、科室及逻辑删除部门均不可选择。
|
||||
*/
|
||||
private List<ImprovementProposalDepartmentDTO> getAvailableProposalDepartments(String userId) {
|
||||
List<ImprovementProposalDepartmentDTO> departments = new ArrayList<>();
|
||||
for (SysDepart depart : sysUserDepartService.getOrderedDepartListById(userId)) {
|
||||
if (!"2".equals(depart.getOrgType()) || !"2".equals(depart.getOrgCategory()) || !NORMAL_DEL_FLAG.equals(depart.getDelFlag())) {
|
||||
continue;
|
||||
}
|
||||
ImprovementProposalDepartmentDTO department = new ImprovementProposalDepartmentDTO();
|
||||
department.setId(depart.getId());
|
||||
department.setDepartName(depart.getDepartName());
|
||||
department.setOrgCode(depart.getOrgCode());
|
||||
departments.add(department);
|
||||
}
|
||||
return departments;
|
||||
}
|
||||
|
||||
/**
|
||||
* 前端只能提交部门 ID;部门名称必须由服务端依据当前用户的有效部门重新回填。
|
||||
*/
|
||||
private void fillAndValidateProposalDepartment(ImprovementProposal improvementProposal, LoginUser loginUser) {
|
||||
if (loginUser == null || oConvertUtils.isEmpty(loginUser.getId())) {
|
||||
throw new IllegalStateException("未获取到当前登录用户,无法保存提案");
|
||||
}
|
||||
if (oConvertUtils.isEmpty(improvementProposal.getProposalDeptId())) {
|
||||
throw new IllegalStateException("请选择提案部门");
|
||||
}
|
||||
for (ImprovementProposalDepartmentDTO department : getAvailableProposalDepartments(loginUser.getId())) {
|
||||
if (improvementProposal.getProposalDeptId().equals(department.getId())) {
|
||||
improvementProposal.setProposalDeptName(department.getDepartName());
|
||||
return;
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException("所选提案部门无权限或不是有效业务部门");
|
||||
}
|
||||
|
||||
private int getProposalYear(Date proposalDate) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(proposalDate == null ? new Date() : proposalDate);
|
||||
|
||||
Reference in New Issue
Block a user