优化代码:/** * 新增仪器实例 * * @param count 生成实例仪器数量 * @param apparatusExampleId 仪器id * @return */ @Override @Transactional public boolean saveApparatusExample(Integer count, String apparatusExampleId, String remark, String capacity) { GsApparatus apparatus = gsApparatusMapper.selectGsApparatusById(Long.valueOf(apparatusExampleId)); String apparatusName = apparatus.getName(); String id = apparatus.getId().toString(); Integer type = apparatus.getType(); List<GsApparatusExample> apparatusExamples = new ArrayList<>(); if (count >= 1) { for (Integer i = 0; i < count; i++) { GsApparatusExample apparatusExample = new GsApparatusExample(); apparatusExample.setLicence(id + "_" + UUID.fastUUID().toString()); apparatusExample.setCreatedTime(new Date()); apparatusExample.setCreatedBy(SecurityUtils.getUsername()); apparatusExample.setName(apparatusName); apparatusExample.setType(type); apparatusExample.setStatus("0"); if (StringUtils.equals("admin", SecurityUtils.getUsername())) { apparatusExample.setAdminRemark(remark); } else if (UserUtils.getBrandId(SecurityUtils.getUserId()) != null) { apparatusExample.setBrandRemark(remark); } else { apparatusExample.setShopRemark(remark); } apparatusExample.setApparatusId(apparatus.getId()); apparatusExample.setCapacity(capacity); apparatusExample.setUsecapacity("0"); apparatusExample.setUserId(SecurityUtils.getUserId()); apparatusExamples.add(apparatusExample); } for (GsApparatusExample apparatusExample : apparatusExamples) { int i = this.insertGsApparatusExample(apparatusExample); if (i != 1) { return false; } } return true; } return false; }
时间: 2024-02-14 11:29:09 浏览: 146
以下是对代码进行优化的建议:
1. 减少数据库查询次数:在循环开始前,可以将仪器信息查询放在循环外部,避免重复查询。例如,在 `gsApparatusMapper.selectGsApparatusById` 方法外部获取仪器信息,并将其传递给循环内部使用。
2. 使用 StringBuilder 进行字符串拼接:在循环内部拼接字符串时,可以使用 StringBuilder 类来提高性能和效率。例如,将 `apparatusExample.setLicence(id + "_" + UUID.fastUUID().toString())` 改为使用 StringBuilder 进行拼接。
3. 批量插入数据:可以考虑将插入操作改为批量插入,减少与数据库的交互次数。可以使用 MyBatis 提供的 `insertList` 方法来实现批量插入。
4. 简化条件判断:在判断用户角色时,可以先获取用户角色,然后根据角色来设置对应的备注字段。这样可以避免重复调用 `SecurityUtils.getUsername()` 和 `SecurityUtils.getUserId()` 方法。例如,可以将 `String username = SecurityUtils.getUsername()` 和 `Long userId = SecurityUtils.getUserId()` 放在循环外部,并根据角色设置备注字段。
下面是优化后的代码示例:
```java
@Override
@Transactional
public boolean saveApparatusExample(Integer count, String apparatusExampleId, String remark, String capacity) {
GsApparatus apparatus = gsApparatusMapper.selectGsApparatusById(Long.valueOf(apparatusExampleId));
String apparatusName = apparatus.getName();
String id = apparatus.getId().toString();
Integer type = apparatus.getType();
List<GsApparatusExample> apparatusExamples = new ArrayList<>();
// 获取用户角色和ID
String username = SecurityUtils.getUsername();
Long userId = SecurityUtils.getUserId();
if (count >= 1) {
// 构建仪器实例列表
for (Integer i = 0; i < count; i++) {
GsApparatusExample apparatusExample = new GsApparatusExample();
StringBuilder licenceBuilder = new StringBuilder(id);
licenceBuilder.append("_");
licenceBuilder.append(UUID.fastUUID().toString());
apparatusExample.setLicence(licenceBuilder.toString());
apparatusExample.setCreatedTime(new Date());
apparatusExample.setCreatedBy(username);
apparatusExample.setName(apparatusName);
apparatusExample.setType(type);
apparatusExample.setStatus("0");
// 根据角色设置对应备注字段
if (StringUtils.equals("admin", username)) {
apparatusExample.setAdminRemark(remark);
} else if (UserUtils.getBrandId(userId) != null) {
apparatusExample.setBrandRemark(remark);
} else {
apparatusExample.setShopRemark(remark);
}
apparatusExample.setApparatusId(apparatus.getId());
apparatusExample.setCapacity(capacity);
apparatusExample.setUsecapacity("0");
apparatusExample.setUserId(userId);
apparatusExamples.add(apparatusExample);
}
// 批量插入仪器实例
int insertCount = this.insertGsApparatusExampleList(apparatusExamples);
return insertCount == count;
}
return false;
}
private int insertGsApparatusExampleList(List<GsApparatusExample> apparatusExamples) {
return gsApparatusExampleMapper.insertList(apparatusExamples);
}
```
请注意,这只是一个示例,具体的优化方式可能还需要根据具体情况进行调整。
阅读全文