|
|
@@ -90,112 +90,43 @@ public class LingYongProvider extends GenericProvider implements ILingYongServic
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- @ApiOperation(value = "保存", notes = "保存试剂耗材领用主表信息",
|
|
|
+ @ApiOperation(value = "有流程的保存", notes = "脚本保存好主子表数据,接口只负责改预扣量",
|
|
|
extensions = {
|
|
|
@Extension(properties = {
|
|
|
@ExtensionProperty(name = "submitCtrl", value = StringPool.Y)
|
|
|
})
|
|
|
})
|
|
|
@Override
|
|
|
- public APIResult<Void> save(
|
|
|
- @ApiParam(name = "lingYongPo", value = "试剂耗材领用主表对象", required = true)
|
|
|
- @RequestBody(required = true) LingYongPo lingYongPo,
|
|
|
+ public APIResult<Void> saveByFlow(
|
|
|
+ @RequestParam(required = true) String mainId,
|
|
|
@RequestParam(required = false) String operate) {
|
|
|
APIResult<Void> result = new APIResult<Void>();
|
|
|
// 默认操作类型,如果为空则视为正常领用开始
|
|
|
- if (operate == null) {
|
|
|
- operate = "not";
|
|
|
- }
|
|
|
try {
|
|
|
- logger.info(" com.lc.ibps.components.provider.LingYongProvider.save()--->lingYongPo: {}, operate: {}", lingYongPo.toString(), operate);
|
|
|
- String sids = "";
|
|
|
- // 判断是否为正常领用流程
|
|
|
- boolean isNormalFlow = !"back".equalsIgnoreCase(operate) && !"end".equalsIgnoreCase(operate);
|
|
|
- if (!lingYongPo.getLingYongDetailPoList().isEmpty()) {
|
|
|
- if (isNormalFlow) {
|
|
|
- // --- 原有逻辑开始 (正常领用) ---
|
|
|
- sids = lingYongPo.getWeiZhiLingYong();
|
|
|
- /** 把流水id转换为库存id */
|
|
|
- ReagentConsumabConvertAndPadId(lingYongPo);
|
|
|
- List<Map<String, Object>> records = new ArrayList<>(lingYongPo.getLingYongDetailPoList().size());
|
|
|
- for (LingYongDetailPo bean : lingYongPo.getLingYongDetailPoList()) {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- String id = UniqueIdUtil.getId();
|
|
|
- map.put("id_", id);
|
|
|
- bean.setTaiZhangId(id);
|
|
|
- map.put("ming_cheng_", StrUtil.str(bean.getShiJiMingCheng()));
|
|
|
- map.put("pi_hao_", StrUtil.str(bean.getPiHao()));
|
|
|
- map.put("bian_ma_", StrUtil.str(bean.getBianMa()));
|
|
|
- map.put("inventory_id", StrUtil.str(bean.getInventoryId()));
|
|
|
- map.put("shu_liang_", StrUtil.str(bean.getShuLiang()));
|
|
|
- map.put("you_xiao_qi_", StrUtil.str(bean.getYouXiaoQi()));
|
|
|
- records.add(map);
|
|
|
- }
|
|
|
- // 扣减库存 ("not", "领用")
|
|
|
- inventoryService.handleOperation(operate, "领用", records);
|
|
|
- // --- 原有逻辑结束 ---
|
|
|
- } else {
|
|
|
- // --- 新增逻辑: back 或 end (回退/归还) ---
|
|
|
- // 不再新创建主子表数据,主表无需额外操作
|
|
|
- // 子表获取库存id和数量,更新库存表
|
|
|
-
|
|
|
- for (LingYongDetailPo bean : lingYongPo.getLingYongDetailPoList()) {
|
|
|
- String kcId = bean.getInventoryId();
|
|
|
- if (kcId == null || kcId.trim().isEmpty()) {
|
|
|
- logger.warn("忽略一条没有库存ID的明细记录: {}", bean);
|
|
|
- continue;
|
|
|
- }
|
|
|
- // 获取数量
|
|
|
- String quantityStr = StrUtil.str(bean.getShuLiang());
|
|
|
- List<Map<String, Object>> records2 = new ArrayList<>(lingYongPo.getLingYongDetailPoList().size());
|
|
|
- for (LingYongDetailPo bean2 : lingYongPo.getLingYongDetailPoList()) {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("id_", StrUtil.str(bean.getId()));
|
|
|
- map.put("ming_cheng_", StrUtil.str(bean.getShiJiMingCheng()));
|
|
|
- map.put("pi_hao_", StrUtil.str(bean.getPiHao()));
|
|
|
- map.put("bian_ma_", StrUtil.str(bean.getBianMa()));
|
|
|
- map.put("inventory_id", StrUtil.str(bean.getInventoryId()));
|
|
|
- map.put("shu_liang_", StrUtil.str(bean.getShuLiang()));
|
|
|
- map.put("you_xiao_qi_", StrUtil.str(bean.getYouXiaoQi()));
|
|
|
- records2.add(map);
|
|
|
- }
|
|
|
- // 调用库存服务查询
|
|
|
- // 假设 queryInventoryById 返回 List<Inventory> 或类似对象
|
|
|
- inventoryService.handleOperation(operate, "领用",records2);
|
|
|
- }
|
|
|
- }
|
|
|
+ logger.info(" com.lc.ibps.components.provider.LingYongProvider.saveByFlow()--->mainId: {}, operate: {}", mainId.toString(), operate.toString());
|
|
|
+ String retVal = inventoryService.handleFlowOperation(mainId, operate);
|
|
|
+ // 防御性编程:防止返回 null
|
|
|
+ if (retVal == null || retVal.trim().isEmpty()) {
|
|
|
+ result.setMessage("更新失败!服务返回为空");
|
|
|
+ return result;
|
|
|
}
|
|
|
-
|
|
|
- // 只有在正常流程下才保存主表和级联子表数据
|
|
|
- if (isNormalFlow) {
|
|
|
- LingYong domain = lingYongRepository.newInstance(lingYongPo);
|
|
|
- domain.saveCascade();
|
|
|
-
|
|
|
- // 【新增逻辑】获取保存后回填的主表ID
|
|
|
- // 假设 LingYongPo 类中有 getId() 方法,且 saveCascade() 执行后该值已被填充
|
|
|
- String mainTableId = "";
|
|
|
- if (lingYongPo.getId() != null) {
|
|
|
- mainTableId = lingYongPo.getId().toString();
|
|
|
+ // 【优化点】使用 indexOf 查找分隔符,避免 split 的正则问题
|
|
|
+ int separatorIndex = retVal.indexOf('^');
|
|
|
+ if (separatorIndex > 0) {
|
|
|
+ String codePart = retVal.substring(0, separatorIndex).trim(); // 提取 ^ 前的部分并去空格
|
|
|
+ String msgPart = retVal.substring(separatorIndex + 1); // 提取 ^ 后的部分
|
|
|
+ if ("1".equals(codePart)) {
|
|
|
+ result.setMessage("更新成功!");
|
|
|
+ // 如果需要,可以在这里设置 result.setCode(StateEnum.SUCCESS.getCode());
|
|
|
} else {
|
|
|
- // 如果 ID 是字符串类型直接获取,或者需要其他处理方式,请根据实际情况调整
|
|
|
- // 某些框架可能需要 domain.getId(),这里假设 po 对象已被更新
|
|
|
- logger.warn("保存后未获取到主表ID,请检查实体类映射配置");
|
|
|
- }
|
|
|
-
|
|
|
- /** 新增 恒生医院试剂耗材出库hrp接入逻辑 */
|
|
|
- ReagentConsumabOutputForHSYY(sids);
|
|
|
-
|
|
|
- // 【修改】在成功消息中追加主表ID
|
|
|
- if (!mainTableId.isEmpty()) {
|
|
|
- result.setMessage("保存试剂耗材领用主表成功,主表ID:" + mainTableId);
|
|
|
- } else {
|
|
|
- result.setMessage("保存试剂耗材领用主表成功 (未获取到ID)");
|
|
|
+ // 拼接自定义错误消息
|
|
|
+ result.setMessage("更新失败!" + msgPart);
|
|
|
}
|
|
|
} else {
|
|
|
- // 回退模式下的成功消息
|
|
|
- result.setMessage("试剂耗材领用回退/结束处理成功");
|
|
|
+ // 如果没有找到 ^,说明返回格式不对,直接将整个返回值当作错误信息
|
|
|
+ logger.error("服务返回格式错误,未找到分隔符 '^': {}", retVal);
|
|
|
+ result.setMessage("更新失败!系统返回格式异常:" + retVal);
|
|
|
}
|
|
|
-
|
|
|
} catch (Exception e) {
|
|
|
result.setMessage("保存试剂耗材领用失败!" + StateEnum.ERROR.getText());
|
|
|
setExceptionResult(result, StateEnum.ERROR.getCode(), StateEnum.ERROR.getText(), e);
|
|
|
@@ -203,13 +134,20 @@ public class LingYongProvider extends GenericProvider implements ILingYongServic
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public APIResult<Void> saveold(
|
|
|
+ @ApiOperation(value = "保存", notes = "保存试剂耗材领用主表信息",
|
|
|
+ extensions = {
|
|
|
+ @Extension(properties = {
|
|
|
+ @ExtensionProperty(name = "submitCtrl", value = StringPool.Y)
|
|
|
+ })
|
|
|
+ })
|
|
|
+ @Override
|
|
|
+ public APIResult<Void> save(
|
|
|
@ApiParam(name = "lingYongPo", value = "试剂耗材领用主表对象", required = true)
|
|
|
- @RequestBody(required = true) LingYongPo lingYongPo,
|
|
|
- @RequestParam(required = false) String operate) {
|
|
|
+ @RequestBody(required = true) LingYongPo lingYongPo
|
|
|
+ ) {
|
|
|
APIResult<Void> result = new APIResult<Void>();
|
|
|
try {
|
|
|
- logger.info(" com.lc.ibps.components.provider.LingYongProvider.save()--->lingYongPo: {},operate: {}", lingYongPo.toString(), operate.toString());
|
|
|
+ logger.info(" com.lc.ibps.components.provider.LingYongProvider.save()--->lingYongPo: {}", lingYongPo.toString());
|
|
|
String sids = "";
|
|
|
if(!lingYongPo.getLingYongDetailPoList().isEmpty()){
|
|
|
sids = lingYongPo.getWeiZhiLingYong();
|