|
@@ -118,10 +118,21 @@ public class CwProjectReportNumberApplyService extends ServiceImpl<CwProjectRepo
|
|
|
review.setUpdateById(userDTO.getId());
|
|
review.setUpdateById(userDTO.getId());
|
|
|
review.setUpdateTime(new Date());
|
|
review.setUpdateTime(new Date());
|
|
|
review.setId(detail.getId());
|
|
review.setId(detail.getId());
|
|
|
|
|
+ // 设置跨年标识默认值,确保数据完整性
|
|
|
|
|
+ if (StringUtils.isBlank(review.getCrossYearFlag())) {
|
|
|
|
|
+ review.setCrossYearFlag("0");
|
|
|
|
|
+ }
|
|
|
String currentToken = TokenProvider.getCurrentToken();
|
|
String currentToken = TokenProvider.getCurrentToken();
|
|
|
|
|
|
|
|
|
|
|
|
|
if (reportData.getReviewStatus().equals("5")){
|
|
if (reportData.getReviewStatus().equals("5")){
|
|
|
|
|
+ // 如果是跨年申请(crossYearFlag=1),在此处预留报告号赋值点位
|
|
|
|
|
+ // TODO: 流程节点名称=所长审核 时,根据跨年标识生成相应年度的报告号
|
|
|
|
|
+ // if ("1".equals(review.getCrossYearFlag())) {
|
|
|
|
|
+ // // 跨年报告号生成逻辑:获取上一年度的报告号前缀
|
|
|
|
|
+ // // 例如:当前是2026年,则使用2025年的报告号序列
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
//设置报告文号、报告流水号
|
|
//设置报告文号、报告流水号
|
|
|
CwProjectInfoData infoData = new CwProjectInfoData();
|
|
CwProjectInfoData infoData = new CwProjectInfoData();
|
|
|
//报告文号生成
|
|
//报告文号生成
|
|
@@ -130,46 +141,97 @@ public class CwProjectReportNumberApplyService extends ServiceImpl<CwProjectRepo
|
|
|
infoData.setReportNo(reportData.getReportNo());
|
|
infoData.setReportNo(reportData.getReportNo());
|
|
|
}else{
|
|
}else{
|
|
|
if (!reportData.getTakeNumberType().equals("2")){
|
|
if (!reportData.getTakeNumberType().equals("2")){
|
|
|
- if(StringUtils.isNotBlank(reportData.getReportType())) {
|
|
|
|
|
- ReportNoDto projectReportByNumber = new ReportNoDto();
|
|
|
|
|
- switch (reportData.getReportType()) {
|
|
|
|
|
- case "1": //基字
|
|
|
|
|
- do{
|
|
|
|
|
- documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.BIZ_CODE,currentToken);
|
|
|
|
|
- //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
- projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
- }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
- break;
|
|
|
|
|
- case "2": //咨字
|
|
|
|
|
- do{
|
|
|
|
|
- documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.CONSULT_BIZ_CODE,currentToken);
|
|
|
|
|
- //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
- projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
- }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
- break;
|
|
|
|
|
- case "3": //审字
|
|
|
|
|
- do{
|
|
|
|
|
- documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.EXAMINE_BIZ_CODE,currentToken);
|
|
|
|
|
- //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
- projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
- }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
- break;
|
|
|
|
|
- case "4": //验字
|
|
|
|
|
- do{
|
|
|
|
|
- documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.CHECK_BIZ_CODE,currentToken);
|
|
|
|
|
- //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
- projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
- }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
- break;
|
|
|
|
|
- case "5": //特字
|
|
|
|
|
- do{
|
|
|
|
|
- documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.SPECIAL_BIZ_CODE,currentToken);
|
|
|
|
|
- //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
- projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
- }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ if (StringUtils.isBlank(review.getCrossYearFlag()) || "0".equals(review.getCrossYearFlag())) {
|
|
|
|
|
+ if(StringUtils.isNotBlank(reportData.getReportType())) {
|
|
|
|
|
+ ReportNoDto projectReportByNumber = new ReportNoDto();
|
|
|
|
|
+ switch (reportData.getReportType()) {
|
|
|
|
|
+ case "1": //基字
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.BIZ_CODE,currentToken);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "2": //咨字
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.CONSULT_BIZ_CODE,currentToken);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "3": //审字
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.EXAMINE_BIZ_CODE,currentToken);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "4": //验字
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.CHECK_BIZ_CODE,currentToken);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "5": //特字
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNumNoSort(userDTO.getCompanyDTO().getId(), CwProjectInfoData.SPECIAL_BIZ_CODE,currentToken);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if ("1".equals(review.getCrossYearFlag())){
|
|
|
|
|
+ // 跨年领号:生成上一年度的报告号
|
|
|
|
|
+ int lastYear = java.time.Year.now().getValue() - 1;
|
|
|
|
|
+ if(StringUtils.isNotBlank(reportData.getReportType())) {
|
|
|
|
|
+ ReportNoDto projectReportByNumber = new ReportNoDto();
|
|
|
|
|
+ switch (reportData.getReportType()) {
|
|
|
|
|
+ case "1": //基字 - 苏兴会基字
|
|
|
|
|
+ String bizPrefix = "苏兴会基字[" + lastYear + "]";
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = generateCrossYearReportNo(bizPrefix);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "2": //咨字 - 苏兴会咨字
|
|
|
|
|
+ String consultPrefix = "苏兴会咨字[" + lastYear + "]";
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = generateCrossYearReportNo(consultPrefix);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "3": //审字 - 苏兴会审字
|
|
|
|
|
+ String examinePrefix = "苏兴会审字[" + lastYear + "]";
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = generateCrossYearReportNo(examinePrefix);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "4": //验字 - 苏兴会验字
|
|
|
|
|
+ String checkPrefix = "苏兴会验字[" + lastYear + "]";
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = generateCrossYearReportNo(checkPrefix);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "5": //特字 - 苏兴会特字
|
|
|
|
|
+ String specialPrefix = "苏兴会特字[" + lastYear + "]";
|
|
|
|
|
+ do{
|
|
|
|
|
+ documentNo = generateCrossYearReportNo(specialPrefix);
|
|
|
|
|
+ //根据报告号查询诗剧苦中是否存在
|
|
|
|
|
+ projectReportByNumber = reviewMapper.getProjectReportByNumber(documentNo);
|
|
|
|
|
+ }while (null != projectReportByNumber && StringUtils.isNotBlank(projectReportByNumber.getReportNo()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
if(StringUtils.isNotBlank(reportData.getReportNumber())){
|
|
if(StringUtils.isNotBlank(reportData.getReportNumber())){
|
|
|
infoData.setReportNumber(reportData.getReportNumber());
|
|
infoData.setReportNumber(reportData.getReportNumber());
|
|
@@ -286,6 +348,10 @@ public class CwProjectReportNumberApplyService extends ServiceImpl<CwProjectRepo
|
|
|
info.setUpdateById(userDTO.getId());
|
|
info.setUpdateById(userDTO.getId());
|
|
|
info.setUpdateTime(new Date());
|
|
info.setUpdateTime(new Date());
|
|
|
info.setReportId(dto.getId());
|
|
info.setReportId(dto.getId());
|
|
|
|
|
+ // 设置跨年标识,默认为0(当年)
|
|
|
|
|
+ if (StringUtils.isBlank(info.getCrossYearFlag())) {
|
|
|
|
|
+ info.setCrossYearFlag("0");
|
|
|
|
|
+ }
|
|
|
mapper.insert(info);
|
|
mapper.insert(info);
|
|
|
//保存复核信息 只保存一个下一节点审核人信息
|
|
//保存复核信息 只保存一个下一节点审核人信息
|
|
|
CwProjectReview cwProjectReview = reviewMapper.selectByReportId(dto.getId());
|
|
CwProjectReview cwProjectReview = reviewMapper.selectByReportId(dto.getId());
|
|
@@ -482,4 +548,37 @@ public class CwProjectReportNumberApplyService extends ServiceImpl<CwProjectRepo
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 生成跨年报告号
|
|
|
|
|
+ * @param reportNoPrefix 报告号前缀,例如:苏兴会基字[2023]
|
|
|
|
|
+ * @return 生成的报告号,例如:苏兴会基字[2023]723号
|
|
|
|
|
+ */
|
|
|
|
|
+ private String generateCrossYearReportNo(String reportNoPrefix) {
|
|
|
|
|
+ // 查询数据库中该前缀下最大的报告号
|
|
|
|
|
+ ReportNoDto maxReportNo = reviewMapper.getMaxReportNoByPrefix(reportNoPrefix);
|
|
|
|
|
+
|
|
|
|
|
+ int nextSerialNumber = 1; // 默认从1开始
|
|
|
|
|
+
|
|
|
|
|
+ if (maxReportNo != null && StringUtils.isNotBlank(maxReportNo.getReportNo())) {
|
|
|
|
|
+ // 提取流水号部分:从最后一个']'后面到'号'前面
|
|
|
|
|
+ String reportNo = maxReportNo.getReportNo();
|
|
|
|
|
+ int bracketEndIndex = reportNo.lastIndexOf("]");
|
|
|
|
|
+ int haoIndex = reportNo.lastIndexOf("号");
|
|
|
|
|
+
|
|
|
|
|
+ if (bracketEndIndex != -1 && haoIndex != -1 && haoIndex > bracketEndIndex) {
|
|
|
|
|
+ String serialNumberStr = reportNo.substring(bracketEndIndex + 1, haoIndex);
|
|
|
|
|
+ try {
|
|
|
|
|
+ int currentSerialNumber = Integer.parseInt(serialNumberStr);
|
|
|
|
|
+ nextSerialNumber = currentSerialNumber + 1;
|
|
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
|
|
+ // 如果解析失败,使用默认值1
|
|
|
|
|
+ nextSerialNumber = 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 生成新的报告号:前缀 + 流水号 + "号"
|
|
|
|
|
+ return reportNoPrefix + nextSerialNumber + "号";
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|