✨ 新增导入结算单,并修复运单超管组织过滤与计量单位软删恢复

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-16 00:56:54 +08:00
parent 0518bf94bf
commit d7bf82b159
23 changed files with 2639 additions and 17 deletions
@@ -34,6 +34,26 @@ import java.util.List;
*/
public interface MeasurementUnitMapper extends BaseMapper<MeasurementUnit> {
/**
* 按编码查询计量单位(包含逻辑删除记录,用于新增恢复)。
*/
MeasurementUnit selectByUnitCodeIncludingDeleted(@Param("unitCode") String unitCode);
/**
* 按名称查询计量单位(包含逻辑删除记录,用于新增恢复)。
*/
MeasurementUnit selectByUnitNameIncludingDeleted(@Param("unitName") String unitName);
/**
* 恢复逻辑删除计量单位。
*/
int restoreById(@Param("id") Long id);
/**
* 释放已软删除记录占用的单位名称,避免唯一索引冲突。
*/
int releaseUnitName(@Param("id") Long id, @Param("unitName") String unitName);
/**
* 自定义分页
*
@@ -19,6 +19,34 @@
<result column="remark" property="remark"/>
</resultMap>
<select id="selectByUnitCodeIncludingDeleted" resultType="org.springblade.system.pojo.entity.MeasurementUnit">
SELECT *
FROM blade_measurement_unit
WHERE unit_code = #{unitCode}
LIMIT 1
</select>
<select id="selectByUnitNameIncludingDeleted" resultType="org.springblade.system.pojo.entity.MeasurementUnit">
SELECT *
FROM blade_measurement_unit
WHERE unit_name = #{unitName}
LIMIT 1
</select>
<update id="restoreById">
UPDATE blade_measurement_unit
SET is_deleted = 0
WHERE id = #{id}
AND is_deleted = 1
</update>
<update id="releaseUnitName">
UPDATE blade_measurement_unit
SET unit_name = #{unitName}
WHERE id = #{id}
AND is_deleted = 1
</update>
<select id="selectMeasurementUnitPage" resultMap="measurementUnitResultMap">
SELECT
mmu.id,
@@ -62,10 +62,42 @@ public class MeasurementUnitServiceImpl extends BaseServiceImpl<MeasurementUnitM
@Transactional(rollbackFor = Exception.class)
public boolean submit(MeasurementUnit measurementUnit) {
prepare(measurementUnit);
prepareSubmitTarget(measurementUnit);
validate(measurementUnit);
return saveOrUpdate(measurementUnit);
}
/**
* 编码或名称已存在且为软删除时:取消软删除并复用原主键,后续按更新落库;
* 存在且未删除时仍由唯一校验提示「已存在」。
*/
private void prepareSubmitTarget(MeasurementUnit measurementUnit) {
if (Func.isNotEmpty(measurementUnit.getId())) {
return;
}
MeasurementUnit existingByCode = baseMapper.selectByUnitCodeIncludingDeleted(measurementUnit.getUnitCode());
MeasurementUnit existingByName = baseMapper.selectByUnitNameIncludingDeleted(measurementUnit.getUnitName());
MeasurementUnit toRestore = null;
if (existingByCode != null && Objects.equals(existingByCode.getIsDeleted(), 1)) {
toRestore = existingByCode;
} else if (existingByName != null && Objects.equals(existingByName.getIsDeleted(), 1)
&& (existingByCode == null || Objects.equals(existingByCode.getId(), existingByName.getId()))) {
toRestore = existingByName;
}
if (toRestore == null) {
return;
}
// 复用编码恢复时,若另一条软删除记录占用了目标名称,先释放名称唯一索引
if (existingByName != null && Objects.equals(existingByName.getIsDeleted(), 1)
&& !Objects.equals(existingByName.getId(), toRestore.getId())) {
String releasedName = existingByName.getUnitName() + "_DEL_" + existingByName.getId();
baseMapper.releaseUnitName(existingByName.getId(), releasedName);
}
baseMapper.restoreById(toRestore.getId());
measurementUnit.setId(toRestore.getId());
measurementUnit.setIsDeleted(0);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean changeStatus(Long id, Integer status) {