Browse Source

2026-08-18

Lab:
筛选条件去掉“单据状态”,新增“申请人”和“申请日期”;
优化序列号获取;
master
fengyuan_yang 1 month ago
parent
commit
2cc94ee287
  1. 8
      src/main/java/com/spring/modules/base/dao/TransNoControlDao.java
  2. 43
      src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java
  3. 2
      src/main/java/com/spring/modules/lab/service/impl/LabServiceImpl.java
  4. 8
      src/main/resources/mapper/base/TransNoControlDao.xml
  5. 24
      src/main/resources/mapper/lab/LabMapper.xml

8
src/main/java/com/spring/modules/base/dao/TransNoControlDao.java

@ -48,4 +48,12 @@ public interface TransNoControlDao {
* 自增下一个流水号用于扩展生成方式
*/
void increaseNextNumber(@Param("site") String site, @Param("no") String no);
/**
* 更新日期流水号状态日期片段 + 下一个流水号
*/
void updateDateSerialState(@Param("site") String site,
@Param("no") String no,
@Param("datePart") String datePart,
@Param("nextNumber") Long nextNumber);
}

43
src/main/java/com/spring/modules/base/service/Impl/TransNoControlServiceImpl.java

@ -49,6 +49,10 @@ public class TransNoControlServiceImpl implements TransNoControlService {
return legacyTransNo(site, no);
}
if (METHOD_DATE_SERIAL.equals(generateMethod)) {
return generateDateSerialWithReset(rule);
}
String transNo = generateByRule(rule, generateMethod);
transNoControlDao.increaseNextNumber(site, no);
return transNo;
@ -67,17 +71,40 @@ public class TransNoControlServiceImpl implements TransNoControlService {
if (METHOD_SERIAL.equals(generateMethod)) {
return prefix + formatSeqNo(seqNo, length);
}
if (METHOD_DATE_SERIAL.equals(generateMethod)) {
String datePart = formatDatePart(rule.getDateFormat());
int seqLength = length - datePart.length();
if (seqLength <= 0) {
throw new RuntimeException("编码长度配置异常:Length 必须大于日期长度(TransNoControl.Length/date_format)");
}
return prefix + datePart + formatSeqNo(seqNo, seqLength);
}
throw new RuntimeException("编码生成方式配置异常:仅支持[常规/流水号/年月日+流水号]");
}
private String generateDateSerialWithReset(TransNoControlRuleData rule) {
String prefix = StringUtils.trimToEmpty(rule.getTransNo());
if (StringUtils.isBlank(prefix)) {
throw new RuntimeException("编码前缀未配置,请维护 TransNoControl.TransNo!site=" + rule.getSite() + ", transType=" + rule.getTransType());
}
Integer length = rule.getLength();
if (length == null || length <= 0) {
throw new RuntimeException("编码长度未配置,请维护 TransNoControl.Length!site=" + rule.getSite() + ", transType=" + rule.getTransType());
}
String currentDatePart = formatDatePart(rule.getDateFormat());
int seqLength = length - currentDatePart.length();
if (seqLength <= 0) {
throw new RuntimeException("编码长度配置异常:Length 必须大于日期长度(TransNoControl.Length/date_format)");
}
long seqNo = resolveDateSerialSeqNo(rule, currentDatePart);
String transNo = prefix + currentDatePart + formatSeqNo(seqNo, seqLength);
transNoControlDao.updateDateSerialState(rule.getSite(), rule.getTransType(), currentDatePart, seqNo + 1L);
return transNo;
}
private long resolveDateSerialSeqNo(TransNoControlRuleData rule, String currentDatePart) {
String storedDatePart = StringUtils.trimToEmpty(rule.getDatePart());
if (!StringUtils.equals(storedDatePart, currentDatePart)) {
// 日期变化时流水号从001重新开始
return 1L;
}
return getCurrentSeqNo(rule.getNextNumber());
}
private String normalizeMethod(String method) {
return StringUtils.replace(StringUtils.trimToEmpty(method), "+", "+");
}

2
src/main/java/com/spring/modules/lab/service/impl/LabServiceImpl.java

@ -103,6 +103,8 @@ public class LabServiceImpl extends ServiceImpl<LabMapper, LabEntity> implements
public PageUtils queryPage(Map<String, Object> params) {
params.put("referenceNo", trimToNull((String) params.get("referenceNo")));
params.put("applicant", trimToNull((String) params.get("applicant")));
params.put("applicationStartDate", trimToNull((String) params.get("applicationStartDate")));
params.put("applicationEndDate", trimToNull((String) params.get("applicationEndDate")));
params.put("currentApprover", trimToNull((String) params.get("currentApprover")));
params.put("tester", trimToNull((String) params.get("tester")));
params.put("testerLike", buildTesterLikeParam((String) params.get("tester")));

8
src/main/resources/mapper/base/TransNoControlDao.xml

@ -72,4 +72,12 @@
where Site = #{site}
and TransType = #{no}
</update>
<update id="updateDateSerialState">
update TransNoControl
set date_part = #{datePart},
NextNumber = #{nextNumber}
where Site = #{site}
and TransType = #{no}
</update>
</mapper>

24
src/main/resources/mapper/lab/LabMapper.xml

@ -148,6 +148,14 @@
<if test="params.applicant != null and params.applicant != ''">
and a.applicant like #{params.applicant}
</if>
<if test="params.applicationStartDate != null and params.applicationStartDate != ''">
and a.application_date is not null
and cast(a.application_date as date) <![CDATA[ >= ]]> cast(#{params.applicationStartDate} as date)
</if>
<if test="params.applicationEndDate != null and params.applicationEndDate != ''">
and a.application_date is not null
and cast(a.application_date as date) <![CDATA[ <= ]]> cast(#{params.applicationEndDate} as date)
</if>
<if test="params.testerLike != null and params.testerLike != ''">
and (';' + isnull(replace(a.tester, ',', ';'), '') + ';') like ('%;' + #{params.testerLike} + ';%')
</if>
@ -194,6 +202,14 @@
<if test="params.applicant != null and params.applicant != ''">
and a.applicant like #{params.applicant}
</if>
<if test="params.applicationStartDate != null and params.applicationStartDate != ''">
and a.application_date is not null
and cast(a.application_date as date) <![CDATA[ >= ]]> cast(#{params.applicationStartDate} as date)
</if>
<if test="params.applicationEndDate != null and params.applicationEndDate != ''">
and a.application_date is not null
and cast(a.application_date as date) <![CDATA[ <= ]]> cast(#{params.applicationEndDate} as date)
</if>
<if test="params.testerLike != null and params.testerLike != ''">
and (';' + isnull(replace(a.tester, ',', ';'), '') + ';') like ('%;' + #{params.testerLike} + ';%')
</if>
@ -282,6 +298,14 @@
<if test="params.applicant != null and params.applicant != ''">
and a.applicant like #{params.applicant}
</if>
<if test="params.applicationStartDate != null and params.applicationStartDate != ''">
and a.application_date is not null
and cast(a.application_date as date) <![CDATA[ >= ]]> cast(#{params.applicationStartDate} as date)
</if>
<if test="params.applicationEndDate != null and params.applicationEndDate != ''">
and a.application_date is not null
and cast(a.application_date as date) <![CDATA[ <= ]]> cast(#{params.applicationEndDate} as date)
</if>
<if test="params.testerLike != null and params.testerLike != ''">
and (';' + isnull(replace(a.tester, ',', ';'), '') + ';') like ('%;' + #{params.testerLike} + ';%')
</if>

Loading…
Cancel
Save