|
@@ -20,6 +20,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.module.museums.dal.mysql.specimenoutbound.SpecimenOutboundMapper;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -57,7 +58,12 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
// // 返回
|
|
|
// return specimenOutbound.getId();
|
|
|
// }
|
|
|
+
|
|
|
// @Override
|
|
|
+// @Transactional(rollbackFor = Exception.class)
|
|
|
+// @LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = MUSEUMS_SPECIMEN_OUTBOUND_SUB_TYPE,
|
|
|
+// bizNo = "{{#specimenOutbound.id}}", // 使用新增的出库单 ID
|
|
|
+// success = MUSEUMS_SPECIMEN_CREATE_OUTBOUND_SUCCESS, extra = "{{#createReqVO.infoId}}")
|
|
|
// public Long createSpecimenOutbound(SpecimenOutboundSaveReqVO createReqVO) {
|
|
|
// // 将逗号分隔的字符串拆分为List<String>
|
|
|
// List<String> infoIds = Arrays.asList(createReqVO.getInfoId().split(","));
|
|
@@ -65,13 +71,12 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
// // 校验标本状态,收集有效的ID
|
|
|
// List<Long> validInfoIds = infoIds.stream()
|
|
|
// .map(infoId -> {
|
|
|
-// SpecimenInfoDO specimenInfo = specimenInfoMapper.selectById(infoId.trim()); // 去除可能的空格
|
|
|
+// SpecimenInfoDO specimenInfo = specimenInfoMapper.selectById(infoId.trim());
|
|
|
// if (specimenInfo == null) {
|
|
|
// throw exception(SPECIMEN_OUTBOUND_NOT_EXISTS);
|
|
|
// }
|
|
|
-// // 判断标本是否在馆或展陈
|
|
|
// if (specimenInfo.getCollectionStatus() == 0 || specimenInfo.getCollectionStatus() == 2) {
|
|
|
-// return Long.valueOf(infoId); // 收集符合条件的ID
|
|
|
+// return Long.valueOf(infoId);
|
|
|
// } else {
|
|
|
// throw exception(SPECIMEN_IS_LENDING_OUT);
|
|
|
// }
|
|
@@ -83,8 +88,13 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
//
|
|
|
// // 创建出库记录
|
|
|
// SpecimenOutboundDO specimenOutbound = BeanUtils.toBean(createReqVO, SpecimenOutboundDO.class);
|
|
|
-// specimenOutbound.setInfoId(infoIdString); // 存储逗号分隔的标本ID
|
|
|
+// specimenOutbound.setInfoId(infoIdString);
|
|
|
// specimenOutboundMapper.insert(specimenOutbound);
|
|
|
+//
|
|
|
+// // 记录日志上下文
|
|
|
+// LogRecordContext.putVariable("specimenOutbound", specimenOutbound); // 添加出库单对象
|
|
|
+// LogRecordContext.putVariable("createReqVO", createReqVO); // 添加请求对象
|
|
|
+//
|
|
|
// // 返回出库记录ID
|
|
|
// return specimenOutbound.getId();
|
|
|
// }
|
|
@@ -92,29 +102,25 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = MUSEUMS_SPECIMEN_OUTBOUND_SUB_TYPE,
|
|
|
- bizNo = "{{#specimenOutbound.id}}", // 使用新增的出库单 ID
|
|
|
+ bizNo = "{{#specimenOutbound.id}}",
|
|
|
success = MUSEUMS_SPECIMEN_CREATE_OUTBOUND_SUCCESS, extra = "{{#createReqVO.infoId}}")
|
|
|
public Long createSpecimenOutbound(SpecimenOutboundSaveReqVO createReqVO) {
|
|
|
- // 将逗号分隔的字符串拆分为List<String>
|
|
|
- List<String> infoIds = Arrays.asList(createReqVO.getInfoId().split(","));
|
|
|
-
|
|
|
// 校验标本状态,收集有效的ID
|
|
|
- List<Long> validInfoIds = infoIds.stream()
|
|
|
- .map(infoId -> {
|
|
|
- SpecimenInfoDO specimenInfo = specimenInfoMapper.selectById(infoId.trim());
|
|
|
- if (specimenInfo == null) {
|
|
|
- throw exception(SPECIMEN_OUTBOUND_NOT_EXISTS);
|
|
|
- }
|
|
|
- if (specimenInfo.getCollectionStatus() == 0 || specimenInfo.getCollectionStatus() == 2) {
|
|
|
- return Long.valueOf(infoId);
|
|
|
- } else {
|
|
|
- throw exception(SPECIMEN_IS_LENDING_OUT);
|
|
|
- }
|
|
|
- })
|
|
|
- .collect(Collectors.toList());
|
|
|
+ List<String> validInfoIds = new ArrayList<>();
|
|
|
+ for (String id : createReqVO.getInfoId()) {
|
|
|
+ SpecimenInfoDO specimenInfo = specimenInfoMapper.selectById(id);
|
|
|
+ if (specimenInfo == null) {
|
|
|
+ throw exception(SPECIMEN_OUTBOUND_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ if (specimenInfo.getCollectionStatus() == 0 || specimenInfo.getCollectionStatus() == 2) {
|
|
|
+ validInfoIds.add(id);
|
|
|
+ } else {
|
|
|
+ throw exception(SPECIMEN_IS_LENDING_OUT);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // 拼接info_id字符串
|
|
|
- String infoIdString = String.join(",", validInfoIds.stream().map(String::valueOf).toArray(String[]::new));
|
|
|
+ // 将有效ID转换为字符串
|
|
|
+ String infoIdString = validInfoIds.toString();
|
|
|
|
|
|
// 创建出库记录
|
|
|
SpecimenOutboundDO specimenOutbound = BeanUtils.toBean(createReqVO, SpecimenOutboundDO.class);
|
|
@@ -122,84 +128,20 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
specimenOutboundMapper.insert(specimenOutbound);
|
|
|
|
|
|
// 记录日志上下文
|
|
|
- LogRecordContext.putVariable("specimenOutbound", specimenOutbound); // 添加出库单对象
|
|
|
- LogRecordContext.putVariable("createReqVO", createReqVO); // 添加请求对象
|
|
|
+ LogRecordContext.putVariable("specimenOutbound", specimenOutbound);
|
|
|
+ LogRecordContext.putVariable("createReqVO", createReqVO);
|
|
|
|
|
|
// 返回出库记录ID
|
|
|
return specimenOutbound.getId();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- //用来填写回库表单,为方便添加数据,现在先用上面这段
|
|
|
-// @Override
|
|
|
-// public void updateSpecimenOutbound(SpecimenOutboundSaveReqVO updateReqVO) {
|
|
|
-// // 校验存在
|
|
|
-// validateSpecimenOutboundExists(updateReqVO.getId());
|
|
|
-// // 更新
|
|
|
-// SpecimenOutboundDO updateObj = BeanUtils.toBean(updateReqVO, SpecimenOutboundDO.class);
|
|
|
-// specimenOutboundMapper.updateById(updateObj);
|
|
|
-// }
|
|
|
- //填写回库表单
|
|
|
+ //出库审批
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- @LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = MUSEUMS_SPECIMEN_RETURN_SUB_TYPE,
|
|
|
- bizNo = "{{#existingSpecimen.id}}", // 使用更新的出库单 ID
|
|
|
- success = MUSEUMS_SPECIMEN_UPDATE_RETURN_SUCCESS , extra = "{{#createReqVO.infoId}}") // 定义更新成功的日志消息
|
|
|
- public void updateSpecimenOutbound(SpecimenOutboundReturnReqVO updateReqVO) {
|
|
|
- // 校验存在
|
|
|
- validateSpecimenOutboundExists(updateReqVO.getId());
|
|
|
-
|
|
|
- // 获取当前标本的状态
|
|
|
- SpecimenOutboundDO existingSpecimen = specimenOutboundMapper.selectById(updateReqVO.getId());
|
|
|
-
|
|
|
- // 判断状态是否为已出库(3)
|
|
|
- if (existingSpecimen == null || existingSpecimen.getStatus() != 3) {
|
|
|
- throw new IllegalStateException("只能更新状态为已出库的标本回库单");
|
|
|
- }
|
|
|
-
|
|
|
- // 使用链式调用合并设置
|
|
|
- existingSpecimen.setStatus(4) // 修改状态为已回库
|
|
|
- .setReturnDate(LocalDateTime.now()) // 设置回库时间为当前时间
|
|
|
- .setSpecimenCondition(updateReqVO.getSpecimenCondition()) // 设置标本状态
|
|
|
- .setReturner(updateReqVO.getReturner()) // 设置归还人
|
|
|
- .setReceiver(updateReqVO.getReceiver()) // 设置接收人
|
|
|
- .setRemarks(updateReqVO.getRemarks()); // 设置备注
|
|
|
-
|
|
|
- // 更新数据库
|
|
|
- specimenOutboundMapper.updateById(existingSpecimen);
|
|
|
-
|
|
|
- // 更新 info_id 字符串为列表,假设 info_id 是一个用逗号分隔的字符串
|
|
|
- String[] infoIds = existingSpecimen.getInfoId().split(",");
|
|
|
-
|
|
|
- // 更新所有标本信息的馆藏状态为0(在馆)
|
|
|
- for (String infoId : infoIds) {
|
|
|
- specimenInfoMapper.updateCollectionStatus(Long.valueOf(infoId.trim()), 0);
|
|
|
- }
|
|
|
-
|
|
|
- // 记录日志上下文
|
|
|
- LogRecordContext.putVariable("existingSpecimen", existingSpecimen); // 添加更新的出库单对象
|
|
|
- LogRecordContext.putVariable("updateReqVO", updateReqVO); // 添加请求对象
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
@LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = MUSEUMS_SPECIMEN_OUTBOUND_SUB_TYPE,
|
|
|
- bizNo = "{{#updateReqVO.id}}", // 使用更新的出库单 ID
|
|
|
- success = MUSEUMS_SPECIMEN_UPDATE_RECOMPILE_SUCCESS, extra = "{{#updateReqVO.infoId}}")
|
|
|
- public void recompileSpecimenOutbound(@Valid SpecimenOutboundSaveReqVO updateReqVO) {
|
|
|
- // 校验存在
|
|
|
- validateSpecimenOutboundExists(updateReqVO.getId());
|
|
|
-
|
|
|
- // 更新
|
|
|
- SpecimenOutboundDO updateObj = BeanUtils.toBean(updateReqVO, SpecimenOutboundDO.class);
|
|
|
- specimenOutboundMapper.updateById(updateObj);
|
|
|
-
|
|
|
- // 记录日志上下文
|
|
|
- LogRecordContext.putVariable("specimenOutbound", updateObj); // 添加更新后的出库单对象
|
|
|
- LogRecordContext.putVariable("updateReqVO", updateReqVO); // 添加请求对象
|
|
|
- }
|
|
|
-
|
|
|
- //出库审批
|
|
|
- @Override
|
|
|
+ bizNo = "{{#req.id}}",
|
|
|
+ success = MUSEUMS_SPECIMEN_APPROVE_OUTBOUND_SUCCESS,
|
|
|
+ extra = "{{#specimenOutbound.infoId}}")
|
|
|
public void updateStatus(SpecimenOutboundApprovalReqVO req) {
|
|
|
// 从数据库获取标本出库记录
|
|
|
SpecimenOutboundDO specimenOutbound = specimenOutboundMapper.selectById(req.getId());
|
|
@@ -210,6 +152,14 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
throw new IllegalStateException("标本记录不存在");
|
|
|
}
|
|
|
|
|
|
+ String approvalMessage = getApprovalMessage(req.getStatus());
|
|
|
+ Long userId = getLoginUserId();
|
|
|
+
|
|
|
+ // 将对象添加到日志上下文中
|
|
|
+ LogRecordContext.putVariable("specimenOutbound", specimenOutbound);
|
|
|
+ LogRecordContext.putVariable("userId", userId);
|
|
|
+ LogRecordContext.putVariable("approvalMessage", approvalMessage);
|
|
|
+
|
|
|
// 一审逻辑
|
|
|
if (req.getStatus() == 1 || req.getStatus() == 2) {
|
|
|
if (specimenOutbound.getStatus() != 0) {
|
|
@@ -237,10 +187,39 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
specimenOutbound.setTwoApprovalTime(req.getTwoApprovalTime()); // 设置当前审批时间
|
|
|
specimenOutbound.setTwoApproveUsers(getLoginUserId()); // 设置二审操作员 ID
|
|
|
}
|
|
|
+ LogRecordContext.putVariable("rejectionReasons", req.getRejectionReasons());
|
|
|
+ LogRecordContext.putVariable("processInstanceId", req.getProcessInstanceId());
|
|
|
|
|
|
// 更新数据库
|
|
|
specimenOutboundMapper.updateById(specimenOutbound);
|
|
|
}
|
|
|
+ private String getApprovalMessage(int status) {
|
|
|
+ switch (status) {
|
|
|
+ case 1: return "一审通过";
|
|
|
+ case 2: return "一审驳回";
|
|
|
+ case 5: return "二审通过";
|
|
|
+ case 6: return "二审驳回";
|
|
|
+ default: return "未知状态";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //审批前或审批驳回修改出库单
|
|
|
+ @Override
|
|
|
+ @LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = MUSEUMS_SPECIMEN_OUTBOUND_SUB_TYPE,
|
|
|
+ bizNo = "{{#updateReqVO.id}}", // 使用更新的出库单 ID
|
|
|
+ success = MUSEUMS_SPECIMEN_UPDATE_RECOMPILE_SUCCESS, extra = "{{#updateReqVO.infoId}}")
|
|
|
+ public void recompileSpecimenOutbound(@Valid SpecimenOutboundSaveReqVO updateReqVO) {
|
|
|
+ // 校验存在
|
|
|
+ validateSpecimenOutboundExists(updateReqVO.getId());
|
|
|
+
|
|
|
+ // 更新
|
|
|
+ SpecimenOutboundDO updateObj = BeanUtils.toBean(updateReqVO, SpecimenOutboundDO.class);
|
|
|
+ specimenOutboundMapper.updateById(updateObj);
|
|
|
+
|
|
|
+ // 记录日志上下文
|
|
|
+ LogRecordContext.putVariable("specimenOutbound", updateObj); // 添加更新后的出库单对象
|
|
|
+ LogRecordContext.putVariable("updateReqVO", updateReqVO); // 添加请求对象
|
|
|
+ }
|
|
|
|
|
|
//确认出库,已经简化
|
|
|
@Override
|
|
@@ -266,7 +245,9 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
// 更新数据库
|
|
|
specimenOutboundMapper.updateById(existingSpecimen);
|
|
|
// 更新标本信息的馆藏状态为1(借出)
|
|
|
- String[] infoIds = existingSpecimen.getInfoId().split(",");
|
|
|
+ String infoIdString = existingSpecimen.getInfoId();
|
|
|
+ infoIdString = infoIdString.replaceAll("[\\[\\] ]", ""); // 移除方括号和空格
|
|
|
+ String[] infoIds = infoIdString.split(","); // 按逗号分割
|
|
|
|
|
|
for (String infoId : infoIds) {
|
|
|
specimenInfoMapper.updateCollectionStatus(Long.valueOf(infoId.trim()), 1);
|
|
@@ -274,9 +255,59 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
// 记录日志上下文
|
|
|
LogRecordContext.putVariable("existingSpecimen", existingSpecimen); // 添加更新后的出库单对象
|
|
|
|
|
|
- return "标本ID"+existingSpecimen.getId()+"出库成功";
|
|
|
+ return "标本ID"+existingSpecimen.getInfoId()+"出库成功";
|
|
|
}
|
|
|
|
|
|
+ //用来填写回库表单,为方便添加数据,现在先用上面这段
|
|
|
+// @Override
|
|
|
+// public void updateSpecimenOutbound(SpecimenOutboundSaveReqVO updateReqVO) {
|
|
|
+// // 校验存在
|
|
|
+// validateSpecimenOutboundExists(updateReqVO.getId());
|
|
|
+// // 更新
|
|
|
+// SpecimenOutboundDO updateObj = BeanUtils.toBean(updateReqVO, SpecimenOutboundDO.class);
|
|
|
+// specimenOutboundMapper.updateById(updateObj);
|
|
|
+// }
|
|
|
+ //填写回库表单
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @LogRecord(type = MUSEUMS_SPECIMEN_TYPE, subType = MUSEUMS_SPECIMEN_RETURN_SUB_TYPE,
|
|
|
+ bizNo = "{{#existingSpecimen.id}}", // 使用更新的出库单 ID
|
|
|
+ success = MUSEUMS_SPECIMEN_UPDATE_RETURN_SUCCESS , extra = "{{#existingSpecimen.infoId}}") // 定义更新成功的日志消息
|
|
|
+ public void updateSpecimenOutbound(SpecimenOutboundReturnReqVO updateReqVO) {
|
|
|
+ // 校验存在
|
|
|
+ validateSpecimenOutboundExists(updateReqVO.getId());
|
|
|
+
|
|
|
+ // 获取当前标本的状态
|
|
|
+ SpecimenOutboundDO existingSpecimen = specimenOutboundMapper.selectById(updateReqVO.getId());
|
|
|
+
|
|
|
+ // 判断状态是否为已出库(3)
|
|
|
+ if (existingSpecimen == null || existingSpecimen.getStatus() != 3) {
|
|
|
+ throw new IllegalStateException("只能更新状态为已出库的标本回库单");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 使用链式调用合并设置
|
|
|
+ existingSpecimen.setStatus(4) // 修改状态为已回库
|
|
|
+ .setReturnDate(LocalDateTime.now()) // 设置回库时间为当前时间
|
|
|
+ .setSpecimenCondition(updateReqVO.getSpecimenCondition()) // 设置标本状态
|
|
|
+ .setReturner(updateReqVO.getReturner()) // 设置归还人
|
|
|
+ .setReceiver(updateReqVO.getReceiver()) // 设置接收人
|
|
|
+ .setRemarks(updateReqVO.getRemarks()); // 设置备注
|
|
|
+
|
|
|
+ // 更新数据库
|
|
|
+ specimenOutboundMapper.updateById(existingSpecimen);
|
|
|
+
|
|
|
+ String infoIdString = existingSpecimen.getInfoId();
|
|
|
+ infoIdString = infoIdString.replaceAll("[\\[\\] ]", ""); // 移除方括号和空格
|
|
|
+ String[] infoIds = infoIdString.split(","); // 按逗号分割
|
|
|
+
|
|
|
+ // 更新所有标本信息的馆藏状态为0(在馆)
|
|
|
+ for (String infoId : infoIds) {
|
|
|
+ specimenInfoMapper.updateCollectionStatus(Long.valueOf(infoId.trim()), 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 记录日志上下文
|
|
|
+ LogRecordContext.putVariable("existingSpecimen", existingSpecimen); // 添加更新的出库单对象
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public void deleteSpecimenOutbound(Long id) {
|
|
@@ -302,7 +333,6 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
public SpecimenOutboundDO getSpecimenReturnInformation(Long id) {
|
|
|
// 获取标本出库回库信息
|
|
|
SpecimenOutboundDO specimenOutbound = specimenOutboundMapper.selectById(id);
|
|
|
-
|
|
|
// 检查审批状态是否为4(已回库)
|
|
|
if (specimenOutbound != null && specimenOutbound.getStatus() == 4) {
|
|
|
return specimenOutbound;
|
|
@@ -340,13 +370,18 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
if (specimenOutbound == null) {
|
|
|
return null; // 或抛出自定义异常
|
|
|
}
|
|
|
+
|
|
|
// 查询关联的标本信息
|
|
|
String infoIds = specimenOutbound.getInfoId(); // 获取 info_id,假设是字符串
|
|
|
+ // 处理 infoId 字段
|
|
|
+ infoIds = infoIds.replaceAll("[\\[\\] ]", ""); // 移除方括号和空格
|
|
|
List<Long> idList = Arrays.stream(infoIds.split(","))
|
|
|
.map(Long::parseLong)
|
|
|
.collect(Collectors.toList());
|
|
|
+
|
|
|
// 查询所有关联的标本信息
|
|
|
List<SpecimenOutboundFormRespVO> specimenInfoList = specimenInfoMapper.selectByIds(idList); // 假设你有这个 Mapper
|
|
|
+
|
|
|
// 创建返回对象
|
|
|
SpecimenOutboundWithInfoRespVO response = new SpecimenOutboundWithInfoRespVO();
|
|
|
// 手动复制出库信息属性
|
|
@@ -360,4 +395,5 @@ public class SpecimenOutboundServiceImpl implements SpecimenOutboundService {
|
|
|
response.setSpecimenInfoList(specimenInfoList);
|
|
|
return response;
|
|
|
}
|
|
|
+
|
|
|
}
|