feat(dms): 添加保养工单明细单条插入功能并优化批量插入逻辑

- 新增 insertDmsBillsMaintDetail 方法支持单条保养工单明细插入
- 重构批量插入实现,将原有 UNION ALL 方式改为子查询方式
- 添加 Oracle 11/19 兼容性处理,通过逐条插入确保序列值正确获取
- 修改服务层实现,将批量插入改为逐条插入以解决数据库兼容性问题
- 完善 Mapper 接口和 XML 映射文件的相关配置
master
zangch@mesnac.com 6 days ago
parent b22ed8f6af
commit e1502c59a1

@ -75,6 +75,14 @@ public interface DmsBillsMaintInstanceMapper {
*/
public int batchDmsBillsMaintDetail(List<DmsBillsMaintDetail> dmsBillsMaintDetailList);
/**
*
*
* @param dmsBillsMaintDetail
* @return
*/
int insertDmsBillsMaintDetail(DmsBillsMaintDetail dmsBillsMaintDetail);
/**
* Join
*
@ -100,3 +108,4 @@ public interface DmsBillsMaintInstanceMapper {
*/
Date selectDbNow();
}

@ -132,7 +132,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
});
if (!billsMaintDetails.isEmpty()) {
dmsBillsMaintInstanceMapper.batchDmsBillsMaintDetail(billsMaintDetails);
insertMaintDetailsOneByOne(billsMaintDetails);
}
ArrayList<DmsBillsMaintDetailProject> list1 = new ArrayList<>();
List<DmsBillsMaintDetail> list = dmsBillsMaintDetailMapper.selectDetailList(maintInstanceId);
@ -514,7 +514,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
billsMaintDetails.add(detail);
}
if (!billsMaintDetails.isEmpty()) {
dmsBillsMaintInstanceMapper.batchDmsBillsMaintDetail(billsMaintDetails);
insertMaintDetailsOneByOne(billsMaintDetails);
}
// 创建保养工单明细项目(所有项目均为已完成状态)
@ -544,6 +544,14 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
return i;
}
/**
* Oracle 11/19
*/
private void insertMaintDetailsOneByOne(List<DmsBillsMaintDetail> billsMaintDetails) {
for (DmsBillsMaintDetail detail : billsMaintDetails) {
dmsBillsMaintInstanceMapper.insertDmsBillsMaintDetail(detail);
}
}
private boolean isOracleUniqueViolation(Throwable e) {
Throwable cursor = e;
while (cursor != null) {
@ -557,3 +565,4 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
}
}

@ -169,22 +169,58 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bills_maint_detail_id, maint_instance_id, machine_id, maint_station_id, maint_standard_id,
operation_description, maint_status, remark, create_by, create_time, update_by, update_time
)
<foreach item="item" index="index" collection="list" separator="union all">
select
HAIWEI.SEQ_DMS_MAINT_DETAIL.NEXTVAL,
#{item.maintInstanceId,jdbcType=NUMERIC},
#{item.deviceId,jdbcType=NUMERIC},
#{item.stationId,jdbcType=NUMERIC},
#{item.maintStandardId,jdbcType=NUMERIC},
#{item.operationDescription,jdbcType=VARCHAR},
#{item.maintStatus,jdbcType=NUMERIC},
#{item.remark,jdbcType=VARCHAR},
#{item.createBy,jdbcType=NUMERIC},
#{item.createTime,jdbcType=TIMESTAMP},
#{item.updateBy,jdbcType=NUMERIC},
#{item.updateTime,jdbcType=TIMESTAMP}
from dual
</foreach>
select
HAIWEI.SEQ_DMS_MAINT_DETAIL.NEXTVAL,
t.maint_instance_id,
t.machine_id,
t.maint_station_id,
t.maint_standard_id,
t.operation_description,
t.maint_status,
t.remark,
t.create_by,
t.create_time,
t.update_by,
t.update_time
from (
<foreach item="item" index="index" collection="list" separator="union all">
select
#{item.maintInstanceId,jdbcType=NUMERIC} as maint_instance_id,
#{item.deviceId,jdbcType=NUMERIC} as machine_id,
#{item.stationId,jdbcType=NUMERIC} as maint_station_id,
#{item.maintStandardId,jdbcType=NUMERIC} as maint_standard_id,
#{item.operationDescription,jdbcType=VARCHAR} as operation_description,
#{item.maintStatus,jdbcType=NUMERIC} as maint_status,
#{item.remark,jdbcType=VARCHAR} as remark,
#{item.createBy,jdbcType=NUMERIC} as create_by,
#{item.createTime,jdbcType=TIMESTAMP} as create_time,
#{item.updateBy,jdbcType=NUMERIC} as update_by,
#{item.updateTime,jdbcType=TIMESTAMP} as update_time
from dual
</foreach>
) t
</insert>
<insert id="insertDmsBillsMaintDetail" parameterType="DmsBillsMaintDetail">
<selectKey keyProperty="billsMaintDetailId" resultType="long" order="BEFORE">
SELECT HAIWEI.SEQ_DMS_MAINT_DETAIL.NEXTVAL FROM DUAL
</selectKey>
insert into dms_bills_maint_detail(
bills_maint_detail_id, maint_instance_id, machine_id, maint_station_id, maint_standard_id,
operation_description, maint_status, remark, create_by, create_time, update_by, update_time
) values (
#{billsMaintDetailId,jdbcType=NUMERIC},
#{maintInstanceId,jdbcType=NUMERIC},
#{deviceId,jdbcType=NUMERIC},
#{stationId,jdbcType=NUMERIC},
#{maintStandardId,jdbcType=NUMERIC},
#{operationDescription,jdbcType=VARCHAR},
#{maintStatus,jdbcType=NUMERIC},
#{remark,jdbcType=VARCHAR},
#{createBy,jdbcType=NUMERIC},
#{createTime,jdbcType=TIMESTAMP},
#{updateBy,jdbcType=NUMERIC},
#{updateTime,jdbcType=TIMESTAMP}
)
</insert>
<insert id="batchDmsProject">
insert all
@ -264,3 +300,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT SYSDATE FROM DUAL
</select>
</mapper>

Loading…
Cancel
Save