Browse Source

2026-09-08

项目信息增加oa流程
master
fengyuan_yang 2 weeks ago
parent
commit
5509c2484f
  1. 56
      src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java
  2. 4
      src/main/java/com/spring/modules/project/dao/ProjectDao.java
  3. 25
      src/main/java/com/spring/modules/project/service/impl/ProjectServiceImpl.java
  4. 13
      src/main/resources/mapper/project/ProjectDao.xml

56
src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java

@ -53,6 +53,7 @@ import com.spring.modules.part.service.PartInformationService;
import com.spring.modules.part.util.UtilsClass;
import com.spring.modules.part.vo.*;
import com.spring.modules.project.data.PlmProjectPartData;
import com.spring.modules.project.dao.ProjectDao;
import com.spring.modules.proofing.mapper.ProofingInformationMapper;
import com.spring.modules.proofing.service.ProofingInformationService;
import com.spring.modules.proofing.vo.ProofingInformationVo;
@ -171,6 +172,9 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe
@Autowired
private TechnicalClassBean technicalClassBean;
@Autowired
private ProjectDao projectDao;
@Autowired
private PartCatalogDao partCatalogDao;
@ -741,6 +745,7 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe
partInformationMapper.saveProjectPart(data);
// 新增客户料号信息
partInformationMapper.saveCustomerPartInfo(data);
resetCompletedProjectIfTemporaryPartAdded(data.getSite(), data.getProjectId(), data.getCreateBy(), isTemporaryPart(data.getSite(), data));
}
/**
@ -2888,6 +2893,7 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe
* @return
*/
@Override
@Transactional
public Map<String, Object> addProjectPart(PlmProjectPartData data) {
List<PartInformationVo> partList = data.getPartList().stream().map(a -> {
a.setProjectId(data.getProjectId());
@ -2895,6 +2901,8 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe
return a;
}).collect(Collectors.toList());
partInformationMapper.addProjectPart(partList);
String site = resolveProjectPartSite(data, partList);
resetCompletedProjectIfTemporaryPartAdded(site, data.getProjectId(), data.getCreateBy(), containsTemporaryPart(site, partList));
//List<PartInformationVo> row1 = partInformationMapper.getProjectPartList1(data);
List<PartInformationVo> row2 = partInformationMapper.getProjectPartList2(data);
HashMap<String, Object> map = new HashMap<>();
@ -2919,6 +2927,8 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe
return a;
}).collect(Collectors.toList());
partInformationMapper.addProjectPart(partList);
String site = resolveProjectPartSite(data, partList);
resetCompletedProjectIfTemporaryPartAdded(site, data.getProjectId(), data.getCreateBy(), containsTemporaryPart(site, partList));
// 校验是否已经有了客户物料 没有则新增
List<PartInformationVo> customerPartToAdd = partList.stream()
@ -5657,6 +5667,52 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe
}
}
private String resolveProjectPartSite(PlmProjectPartData data, List<PartInformationVo> partList) {
if (data != null && StringUtils.hasText(data.getSite())) {
return data.getSite();
}
if (partList != null) {
for (PartInformationVo part : partList) {
if (part != null && StringUtils.hasText(part.getSite())) {
return part.getSite();
}
}
}
return null;
}
private boolean containsTemporaryPart(String site, List<PartInformationVo> partList) {
if (partList == null || partList.isEmpty()) {
return false;
}
for (PartInformationVo part : partList) {
if (isTemporaryPart(site, part)) {
return true;
}
}
return false;
}
private boolean isTemporaryPart(String site, PartInformationVo part) {
if (part == null) {
return false;
}
String status = part.getStatus();
if (!StringUtils.hasText(status) && StringUtils.hasText(site) && StringUtils.hasText(part.getPartNo())) {
PartInformationEntity dbPart = partInformationMapper.selectOne(
new QueryWrapper<PartInformationEntity>().eq("site", site).eq("part_no", part.getPartNo()));
status = dbPart == null ? null : dbPart.getStatus();
}
return "N".equals(status);
}
private void resetCompletedProjectIfTemporaryPartAdded(String site, String projectId, String updateBy, boolean hasTemporaryPart) {
if (!hasTemporaryPart || !StringUtils.hasText(site) || !StringUtils.hasText(projectId)) {
return;
}
projectDao.resetCompletedProjectToDraft(site, projectId, updateBy);
}
}

4
src/main/java/com/spring/modules/project/dao/ProjectDao.java

@ -285,4 +285,8 @@ public interface ProjectDao extends BaseMapper<PlmProjectInfo> {
@Param("projectId") String projectId,
@Param("status") String status,
@Param("updateBy") String updateBy);
int resetCompletedProjectToDraft(@Param("site") String site,
@Param("projectId") String projectId,
@Param("updateBy") String updateBy);
}

25
src/main/java/com/spring/modules/project/service/impl/ProjectServiceImpl.java

@ -742,6 +742,7 @@ public class ProjectServiceImpl implements ProjectService {
if (!StringUtils.hasText(menuId)) {
throw new RuntimeException("菜单ID不能为空");
}
validateManagerRequiredFields(site, projectId, project);
int issueLocked = projectDao.lockIssue(site, projectId);
if (issueLocked <= 0) {
@ -812,6 +813,8 @@ public class ProjectServiceImpl implements ProjectService {
projectDao.deletePlmProjectTeam(data);
projectDao.deleteUserRoleList(data);
saveProjectTeamAndRole(data);
PlmProjectInfo afterSave = projectDao.getProjectData(site, projectId);
validateManagerRequiredFields(site, projectId, afterSave == null ? current : afterSave);
if (!Boolean.TRUE.equals(dataUrlOa)) {
projectDao.updateProjectStatus(site, projectId, "已完成", userName);
@ -1042,6 +1045,28 @@ public class ProjectServiceImpl implements ProjectService {
return oaIdList.length() > 0 ? oaIdList.substring(0, oaIdList.length() - 1) : "";
}
private void validateManagerRequiredFields(String site, String projectId, PlmProjectInfo project) {
List<PlmProjectTeam> operatorList = projectDao.selectProjectTeam(site, projectId);
boolean hasManager = operatorList != null && operatorList.stream()
.anyMatch(item -> "manager".equals(item.getType()) && StringUtils.hasText(item.getOperatorId()));
if (!hasManager) {
return;
}
List<String> missing = new ArrayList<>();
if (project == null || project.getProjectAmount() == null) {
missing.add("项目年销售额");
}
if (project == null || !StringUtils.hasText(project.getFinalCustomerId())) {
missing.add("直接客户");
}
if (project == null || !StringUtils.hasText(project.getCustomerRemark())) {
missing.add("客户应用/要求");
}
if (!missing.isEmpty()) {
throw new RuntimeException("项目经理不为空时," + String.join("、", missing) + "不能为空值");
}
}
private void handleSubmitRollback(ParamData paramData, Exception e) {
DoForceDrawBackParam doForceDrawBackParam = new DoForceDrawBackParam();
doForceDrawBackParam.setUserId(paramData.getUserId());

13
src/main/resources/mapper/project/ProjectDao.xml

@ -1013,4 +1013,17 @@ customer_project_no,productSet,project_amount,step_id,reject_flag,reject_step_id
where site = #{site}
and project_id = #{projectId}
</update>
<update id="resetCompletedProjectToDraft">
update plm_project_info
set status = '草稿',
step_id = 10,
reject_flag = 'N',
reject_step_id = null,
update_by = #{updateBy},
update_date = GetDate()
where site = #{site}
and project_id = #{projectId}
and status = '已完成'
</update>
</mapper>
Loading…
Cancel
Save