Merge remote-tracking branch 'origin/dev' into dev

dev
huwei 2026-07-07 17:14:51 +08:00
commit 6b0655bc56
9 changed files with 121 additions and 6 deletions

View File

@ -9,6 +9,7 @@ import org.qinan.safetyeval.client.co.QualFilingChangeCO;
import org.qinan.safetyeval.client.co.QualFilingChangeComplianceCheckResultCO;
import org.qinan.safetyeval.client.co.QualFilingChangeOrgCO;
import org.qinan.safetyeval.client.dto.*;
import org.qinan.safetyeval.domain.constant.QualFilingStatusEnum;
import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter;
import org.qinan.safetyeval.infrastructure.dataobject.base.Req;
import org.springframework.validation.annotation.Validated;
@ -63,6 +64,7 @@ public class QualFilingChangeController {
@ApiOperation("聚合新增or编辑资质备案变更申请")
@PostMapping("/aggregationSaveOrEdit")
public SingleResponse<QualFilingChangeCO> aggregationSaveOrEdit(@RequestBody AggregationSaveOrEditQualFilingChangeCmd cmd) {
cmd.getQualFilingChangeAddCmd().setFilingStatusCode(QualFilingStatusEnum.CHANGE_REVIEWING.getCode());
return qualFilingChangeApi.aggregationSaveOrEdit(cmd);
}

View File

@ -23,6 +23,7 @@ import org.qinan.safetyeval.domain.service.QualFilingDomainService;
import org.qinan.safetyeval.domain.service.QualFilingReviewDomainService;
import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter;
import org.qinan.safetyeval.infrastructure.dataobject.QualFilingChangeCountDO;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingChangeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
@ -31,10 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -168,7 +166,6 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi {
domainQuery.setPageNum(query.getCurrent());
domainQuery.setPageSize(query.getSize());
domainQuery.setTenantId(AuthUserContextAdapter.getCurrentTenantId());
domainQuery.setOrgId(ThreadLocalUserInfoAdapter.getOrgId());
domainQuery.setFilingNo(query.getFilingNo());
domainQuery.setFilingStatusCode(query.getFilingStatusCode());
PageResult<QualFilingChangeEntity> pageResult = qualFilingChangeDomainService.page(domainQuery);
@ -189,7 +186,24 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi {
// 直连 infrastructure 层 Mapper跳过 domain由 XML 直接返回 CO无需转换
Page<QualFilingChangeOrgCO> page = new Page<>(domainQuery.getPageNum(), domainQuery.getPageSize());
IPage<QualFilingChangeOrgCO> result = qualFilingChangeMapper.orgPage(page, domainQuery);
return PageResponse.of(result.getRecords(), result.getTotal());
// 存在数据时,一次批量统计每个 filingId 在 qual_filing_change 表中的变更次数
List<QualFilingChangeOrgCO> records = result.getRecords();
if (!CollectionUtils.isEmpty(records)) {
List<Long> filingIds = records.stream()
.map(QualFilingChangeOrgCO::getFilingId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
List<QualFilingChangeCountDO> countList = qualFilingChangeMapper.countByFilingIds(filingIds);
Map<Long, Long> countMap = countList.stream()
.collect(Collectors.toMap(
QualFilingChangeCountDO::getFilingId,
QualFilingChangeCountDO::getChangeCount));
records.forEach(co -> co.setChangeCount(countMap.getOrDefault(co.getFilingId(), 1L) - 1));
}
return PageResponse.of(records, result.getTotal());
}
@Override

View File

@ -1,7 +1,10 @@
package org.qinan.safetyeval.client.change.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.qinan.safetyeval.client.common.jackson.DateToLocalDateTimeDeserializer;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ -69,11 +72,15 @@ public class QualFilingPersonnelChangeAddCmd implements Serializable {
*
*/
@ApiModelProperty(value = "出生日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@JsonDeserialize(using = DateToLocalDateTimeDeserializer.class)
private LocalDateTime birthDate;
/**
*
*/
@ApiModelProperty(value = "参加工作时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@JsonDeserialize(using = DateToLocalDateTimeDeserializer.class)
private LocalDateTime joinWorkDate;
/**
*

View File

@ -1,8 +1,10 @@
package org.qinan.safetyeval.client.change.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.qinan.safetyeval.client.common.jackson.DateToLocalDateTimeDeserializer;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ -71,11 +73,15 @@ public class QualFilingPersonnelChangeUpdateCmd implements Serializable {
*
*/
@ApiModelProperty(value = "出生日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@JsonDeserialize(using = DateToLocalDateTimeDeserializer.class)
private LocalDateTime birthDate;
/**
*
*/
@ApiModelProperty(value = "参加工作时间")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@JsonDeserialize(using = DateToLocalDateTimeDeserializer.class)
private LocalDateTime joinWorkDate;
/**
*

View File

@ -113,4 +113,7 @@ public class QualFilingChangeOrgCO {
@ApiModelProperty(value = "租户ID")
private Long tenantId;
@ApiModelProperty(value = "变更次数")
private Long changeCount;
}

View File

@ -0,0 +1,46 @@
package org.qinan.safetyeval.client.common.jackson;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* (yyyy-MM-dd) LocalDateTime
* <p>
* "yyyy-MM-dd" 00:00:00
* ( "yyyy-MM-dd HH:mm:ss" / "yyyy-MM-dd'T'HH:mm:ss")
*
* @Author: ltq
* @date 2026-07-07
*/
public class DateToLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String text = p.getText();
if (text == null || text.trim().isEmpty()) {
return null;
}
String value = text.trim();
try {
return LocalDateTime.parse(value);
} catch (Exception ignore) {
// 继续尝试其它格式
}
try {
return LocalDateTime.parse(value, DATE_TIME_FORMATTER);
} catch (Exception ignore) {
// 继续尝试日期格式
}
// 仅日期格式: 补全为当天 00:00:00
return LocalDate.parse(value, DATE_FORMATTER).atStartOfDay();
}
}

View File

@ -0,0 +1,16 @@
package org.qinan.safetyeval.infrastructure.dataobject;
import lombok.Data;
/**
*
*
* @author safety-eval
*/
@Data
public class QualFilingChangeCountDO {
private Long filingId;
private Long changeCount;
}

View File

@ -6,8 +6,12 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.qinan.safetyeval.client.co.QualFilingChangeOrgCO;
import org.qinan.safetyeval.domain.query.QualFilingChangeQuery;
import org.qinan.safetyeval.infrastructure.dataobject.QualFilingChangeCountDO;
import org.qinan.safetyeval.infrastructure.dataobject.QualFilingChangeDO;
import java.util.Collection;
import java.util.List;
@Mapper
public interface QualFilingChangeMapper extends BaseMapper<QualFilingChangeDO> {
@ -15,4 +19,9 @@ public interface QualFilingChangeMapper extends BaseMapper<QualFilingChangeDO> {
* filing_idCO
*/
IPage<QualFilingChangeOrgCO> orgPage(IPage<QualFilingChangeOrgCO> page, @Param("query") QualFilingChangeQuery query);
/**
* filing_id
*/
List<QualFilingChangeCountDO> countByFilingIds(@Param("filingIds") Collection<Long> filingIds);
}

View File

@ -108,4 +108,16 @@
WHERE temp.rn = 1
</select>
<!-- 按filing_id批量统计变更次数 -->
<select id="countByFilingIds" resultType="org.qinan.safetyeval.infrastructure.dataobject.QualFilingChangeCountDO">
SELECT filing_id AS filingId, COUNT(*) AS changeCount
FROM qual_filing_change
WHERE delete_enum = 'false'
AND filing_id IN
<foreach collection="filingIds" item="filingId" open="(" separator="," close=")">
#{filingId}
</foreach>
GROUP BY filing_id
</select>
</mapper>