diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java index 7fe7606cc..ddc96503b 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java @@ -62,16 +62,12 @@ public interface IErpDataOemClient { * @param v_pedate 计划完成时间 yyyy-MM-dd HH:mm:ss * @param v_woporqty 下达数量 * @param v_pricetype 加工类型 - * @param v_excnote 返回结果 OUT游标参数,非必填 - * @param v_excflag 返回状态 OUT游标参数,非必填 - * @param v_old_wono 老系统生成的外协订单号 OUT游标参数,非必填 */ @GetMapping(FULL_ORDER_OUTSOURCING) - R fullOrderOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_splcode") String v_splcode, + R fullOrderOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_splcode") String v_splcode, @RequestParam("v_splycode") String v_splycode, @RequestParam("v_seqcc") String v_seqcc, @RequestParam("v_sono") String v_sono, - @RequestParam("v_planner") String v_planner, @RequestParam("v_pedate") String v_pedate, @RequestParam("v_woporqty") Long v_woporqty, - @RequestParam("v_pricetype") String v_pricetype, @RequestParam(value = "v_excnote", defaultValue = "", required = false) String v_excnote, @RequestParam(value = "v_excflag", defaultValue = "", required = false) String v_excflag, - @RequestParam(value = "v_old_wono", defaultValue = "", required = false) String v_old_wono); + @RequestParam("v_planner") String v_planner, @RequestParam("v_pedate") String v_pedate, @RequestParam("v_woporqty") Double v_woporqty, + @RequestParam(value = "v_pricetype", required = false) String v_pricetype); /** @@ -94,16 +90,12 @@ public interface IErpDataOemClient { * @param v_roam_no B号 * @param v_craft_no C号 * @param v_craft_id 零件工艺ID - * @param v_old_wono 老系统生成的外协订单号 OUT游标参数,非必填 - * @param v_excnote 返回结果 OUT游标参数,非必填 - * @param v_excflag 返回状态 OUT游标参数,非必填 */ @GetMapping(COLLABORATIVE_OUTSOURCING) - R collaborativeOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_woreqdat") String v_woreqdat, - @RequestParam("v_woporqty") Long v_woporqty, @RequestParam(value = "v_usedeptcode", required = false) String v_usedeptcode, @RequestParam(value = "v_usedept", required = false) String v_usedept, + R collaborativeOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_woreqdat") String v_woreqdat, + @RequestParam("v_woporqty") Double v_woporqty, @RequestParam(value = "v_usedeptcode", required = false) String v_usedeptcode, @RequestParam(value = "v_usedept", required = false) String v_usedept, @RequestParam("v_splcode") String v_splcode, @RequestParam("v_splycode") String v_splycode, @RequestParam("v_kdofplat") String v_kdofplat, @RequestParam("v_wono") String v_wono, @RequestParam("v_sono") String v_sono, @RequestParam("v_mtnman") String v_mtnman, @RequestParam("v_planner") String v_planner, @RequestParam("v_yardman") String v_yardman, @RequestParam("v_roam_no") String v_roam_no, @RequestParam("v_craft_no") String v_craft_no, - @RequestParam("v_craft_id") Long v_craft_id, @RequestParam(value = "v_old_wono", defaultValue = "", required = false) String v_old_wono, @RequestParam(value = "v_excnote", defaultValue = "", required = false) String v_excnote, - @RequestParam(value = "v_excflag", defaultValue = "", required = false) String v_excflag); + @RequestParam("v_craft_id") Long v_craft_id); } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java index da5723554..3b92cf4fe 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java @@ -27,12 +27,12 @@ public class IErpDataOemClientFallback implements IErpDataOemClient { } @Override - public R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, String v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono) { + public R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, String v_pedate, Double v_woporqty, String v_pricetype) { return R.fail("协作外协订单接收 失败"); } @Override - public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag) { + public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Double v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id) { return R.fail("整单外协订单接收 失败"); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java index 83fc35307..54cdb36b9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java @@ -12,6 +12,7 @@ import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; import java.util.List; +import java.util.Map; /** * 车间订单运行记录表 Mapper 接口 @@ -47,4 +48,7 @@ public interface WorkOrderRunMapper extends BaseMapper { */ List selectOemApproval(IPage page, @Param("query") OemApprovalQuery query); + Map selectRoamAndCraftNoByCraftId(Long craftId); + + Map selectRoamAndCraftNoByPartCode(String partCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml index f5ba6c869..0bdab46ca 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml @@ -389,4 +389,10 @@ + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java index a8ec495b7..cd3b42ce8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.service.impl; +import com.alibaba.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.annotation.Resource; @@ -337,8 +338,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl() - .eq(WorkPlan::getId, wp.getNextWpId())); + WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper().eq(WorkPlan::getId, wp.getNextWpId())); workOrderRun.setInCustomer(nextWp.getOcId()); } else { workOrderRun.setInCustomer(wp.getOcId()); @@ -346,6 +346,52 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl processSets = processSetMapper.selectByIds(wpList.stream().filter(workPlan -> oem.getId().equals(workPlan.getOcId())).map(WorkPlan::getPpsId).collect(Collectors.toList())); + String ppsName = processSets.stream().map(BsProcessSetEntity::getName).collect(Collectors.joining(",")); + // 获取wpList最大的计划结束时间 + LocalDateTime maxPlanEndTime = wpList.stream().map(WorkPlan::getPlanEndTime).max(LocalDateTime::compareTo).orElse(null); + if (maxPlanEndTime == null) { + maxPlanEndTime = LocalDateTime.now(); + } + wxWoCode = erpDataOemClient.fullOrderOutsourcing(yo.getPartCode(), yo.getProductIdent(), wo.getBatchNo(), oem != null ? oem.getCode() : "", ppsName, yo.getYoCode(), + planner != null ? planner.getName() : "", maxPlanEndTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), wo.getMakeQty(), "").getData(); + } else { + User user = UserCache.getUser(workOrderRun.getCreateUser()); + User dispatcher = UserCache.getUser(wo.getDispatcher()); + String roamNo = null; + String craftNo = null; + Long craftId = yo.getCraftId(); + // 返工单号 + if (craftId != null && wo.getReworkCode() == null) { + Map craftInfo = baseMapper.selectRoamAndCraftNoByCraftId(craftId); + roamNo = craftInfo.get("roamNo"); + craftNo = craftInfo.get("craftNo"); + if (roamNo == null) { + craftInfo = baseMapper.selectRoamAndCraftNoByPartCode(yo.getPartCode()); + roamNo = craftInfo.get("roamNo"); + craftNo = craftInfo.get("craftNo"); + } + } else if (StringUtils.isNotBlank(wo.getReworkCode())) { + roamNo = wo.getReworkCode(); + craftNo = "返修"; + craftId = Long.valueOf(wo.getReworkNo()); + } + String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(yo.getDemandDate().toInstant()); + wxWoCode = erpDataOemClient.collaborativeOutsourcing(yo.getPartCode(), yo.getProductIdent(), format, wo.getMakeQty(), yo.getUseDeptCode(), yo.getUseDept(), + wo.getBatchNo(), oem != null ? oem.getCode() : "", yo.getPlate(), yo.getYpCode(), yo.getYoCode(), user != null ? user.getName() : "", + planner != null ? planner.getName() : "", dispatcher != null ? dispatcher.getName() : "", roamNo, craftNo, craftId).getData(); + } + // 赋值wx号,erp返回 + workOrderRun.setWoCode(wxWoCode); + if (StringUtils.isNotBlank(wxWoCode)) { + updateWorkPlanAndOrderStatus(wo, wxWoCode); + } } else { //转厂内业务 WorkPlan nextWorkPlan; @@ -477,6 +523,44 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, String v_pedate, Double v_woporqty, String v_pricetype) { Date pedate = DateUtil.parse(v_pedate, "yyyy-MM-dd HH:mm:ss"); - return erpDataOemService.fullOrderOutsourcing(v_prtno, v_prtlotno, v_splcode, v_splycode, v_seqcc, v_sono, v_planner, pedate, v_woporqty, v_pricetype, v_excnote, v_excflag, v_old_wono); + return R.data(erpDataOemService.fullOrderOutsourcing(v_prtno, v_prtlotno, v_splcode, v_splycode, v_seqcc, v_sono, v_planner, pedate, v_woporqty, v_pricetype)); } @Override - public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag) { + public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, String v_woreqdat, Double v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id) { Date woreqdat = DateUtil.parse(v_woreqdat, "yyyy-MM-dd HH:mm:ss"); - return erpDataOemService.collaborativeOutsourcing(v_prtno, v_prtlotno, woreqdat, v_woporqty, v_usedeptcode, v_usedept, v_splcode, v_splycode, v_kdofplat, v_wono, v_sono, v_mtnman, v_planner, v_yardman, v_roam_no, v_craft_no, v_craft_id, v_old_wono, v_excnote, v_excflag); + return R.data(erpDataOemService.collaborativeOutsourcing(v_prtno, v_prtlotno, woreqdat, v_woporqty, v_usedeptcode, v_usedept, v_splcode, v_splycode, v_kdofplat, v_wono, v_sono, v_mtnman, v_planner, v_yardman, v_roam_no, v_craft_no, v_craft_id)); } } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java index 8539933a5..1e05a2ef8 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java @@ -45,11 +45,8 @@ public interface IErpDataOemService { * @param v_pedate 计划完成时间 * @param v_woporqty 下达数量 * @param v_pricetype 加工类型 - * @param v_excnote 返回结果 - * @param v_excflag 返回状态 - * @param v_old_wono 老系统生成的外协订单号 */ - R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, Date v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono); + String fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, Date v_pedate, Double v_woporqty, String v_pricetype); /** * 整单外协订单接收 @@ -71,9 +68,6 @@ public interface IErpDataOemService { * @param v_roam_no B号 * @param v_craft_no C号 * @param v_craft_id 零件工艺ID - * @param v_old_wono 老系统生成的外协订单号 - * @param v_excnote 返回结果 - * @param v_excflag 返回状态 */ - R collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag); + String collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Double v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java index ca134f144..b5c96266a 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java @@ -4,12 +4,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import oracle.jdbc.internal.OracleTypes; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.tool.api.R; import org.springblade.desk.oem.pojo.request.PriceSheetQuery; import org.springblade.desk.oem.pojo.vo.PriceSheetVO; import org.springblade.erpdata.mapper.ErpDataOemMapper; import org.springblade.erpdata.mapper.ErpDataProduceMapper; import org.springblade.erpdata.service.IErpDataOemService; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.SqlOutParameter; +import org.springframework.jdbc.core.SqlParameter; +import org.springframework.jdbc.core.simple.SimpleJdbcCall; import org.springframework.stereotype.Service; import javax.sql.DataSource; @@ -33,6 +38,8 @@ public class ErpDataOemServiceImpl implements IErpDataOemService { private final ErpDataOemMapper erpDataOemMapper; + private final JdbcTemplate jdbcTemplate; + @Override public void closeErpOrder(String woCode, String memo) { log.info("关闭erp外协订单 - 单号:{},备注:{}", woCode, memo); @@ -62,140 +69,111 @@ public class ErpDataOemServiceImpl implements IErpDataOemService { } @Override - public R fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, String v_planner, Date v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono) { - Map result = new HashMap<>(); - String sql = "{call dba_mgr.pro_rbwxgensc(" + - "v_prtno => ?, " + - "v_prtlotno => ?, " + - "v_splcode => ?, " + - "v_splycode => ?, " + - "v_seqcc => ?, " + - "v_sono => ?, " + - "v_planner => ?, " + - "v_pedate => ?, " + - "v_woporqty => ?, " + - "v_pricetype => ?, " + - "v_excnote => ?, " + - "v_excflag => ?, " + - "v_old_wono => ?)}"; - try (Connection conn = dataSource.getConnection(); - CallableStatement cs = conn.prepareCall(sql)) { - - // 设置输入参数 - cs.setString(1, v_prtno); - cs.setString(2, v_prtlotno); - cs.setString(3, v_splcode); - cs.setString(4, v_splycode); - cs.setString(5, v_seqcc); - cs.setString(6, v_sono); - cs.setString(7, v_planner); - cs.setDate(8, new java.sql.Date(v_pedate.getTime())); - cs.setLong(9, v_woporqty); - cs.setString(10, v_pricetype); - - // 注册游标OUT参数 - cs.registerOutParameter(11, OracleTypes.CURSOR); - cs.registerOutParameter(12, OracleTypes.CURSOR); - cs.registerOutParameter(13, OracleTypes.CURSOR); - log.debug("协作外协订单接收存储过程输入参数: v_prtno={}, v_prtlotno={}, v_splcode={}, v_splycode={}, v_seqcc={}, " + - "v_sono={}, v_planner={}, v_pedate={}, v_woporqty={}, v_pricetype={}, " + - "v_excnote={}, v_excflag={}, v_old_wono={}", - v_prtno, v_prtlotno, v_splcode, v_splycode, v_seqcc, - v_sono, v_planner, v_pedate, v_woporqty, v_pricetype, - v_excnote, v_excflag, v_old_wono); - // 执行 - cs.execute(); - - // 获取结果 - List> excnote = convertResultSetToList((ResultSet) cs.getObject(11)); - List> excflag = convertResultSetToList((ResultSet) cs.getObject(12)); - List> oldWoNo = convertResultSetToList((ResultSet) cs.getObject(13)); - result.put("result", oldWoNo); - log.info("协作外协订单接收成功 - {}", result); - } catch (Exception e) { - log.error("协作外协订单接收失败", e); - return R.fail("协作外协订单接收失败"); - } - return R.data(result); + public String fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, + String v_planner, Date v_pedate, Double v_woporqty, String v_pricetype) { + SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) + // 指定存储过程名(包含 DB Link) + .withProcedureName("dba_mgr.pro_rbwxgensc") + // 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题) + .withoutProcedureColumnMetaDataAccess() + // 显式声明参数 + .declareParameters( + new SqlParameter("v_prtno", Types.VARCHAR), // IN + new SqlParameter("v_prtlotno", Types.VARCHAR), // IN + new SqlParameter("v_splcode", Types.VARCHAR), // IN + new SqlParameter("v_splycode", Types.VARCHAR), // IN + new SqlParameter("v_seqcc", Types.VARCHAR), // IN + new SqlParameter("v_sono", Types.VARCHAR), // IN + new SqlParameter("v_planner", Types.VARCHAR), // IN + new SqlParameter("v_pedate", Types.DATE), // IN + new SqlParameter("v_woporqty", Types.DOUBLE), // IN + new SqlParameter("v_pricetype", Types.VARCHAR), // IN + new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT + new SqlOutParameter("v_excflag", Types.VARCHAR), // OUT + new SqlOutParameter("v_old_wono", Types.VARCHAR) // OUT + ); + // 2. 封装输入参数 + Map inParams = new HashMap<>(); + inParams.put("v_prtno", v_prtno); + inParams.put("v_prtlotno", v_prtlotno); + inParams.put("v_splcode", v_splcode); + inParams.put("v_splycode", v_splycode); + inParams.put("v_seqcc", v_seqcc); + inParams.put("v_sono", v_sono); + inParams.put("v_planner", v_planner); + inParams.put("v_pedate", v_pedate); + inParams.put("v_woporqty", v_woporqty); + inParams.put("v_pricetype", v_pricetype); + + + // 3. 执行并获取结果 Map + Map resultMap = jdbcCall.execute(inParams); + + // 4. 提取输出参数 + String excflag = (String) resultMap.get("v_excflag"); + String excnote = (String) resultMap.get("v_excnote"); + String oldWono = (String) resultMap.get("v_old_wono"); + return oldWono; } @Override - public R collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Long v_woporqty, String v_usedeptcode, String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id, String v_old_wono, String v_excnote, String v_excflag) { - Map result = new HashMap<>(); - - // SQL语句,注意nvl函数的处理 - String sql = "{call dba_mgr.pro_rbwxgen(" + - "v_prtno => ?, " + - "v_prtlotno => ?, " + - "v_woreqdat => ?, " + - "v_woporqty => ?, " + - "nvl(v_usedeptcode, v_usedept) => ?, " + // 注意:Java端需要处理这个逻辑 - "v_splcode => ?, " + - "v_splycode => ?, " + - "v_kdofplat => ?, " + - "v_wono => ?, " + - "v_sono => ?, " + - "v_mtnman => ?, " + - "v_planner => ?, " + - "v_yardman => ?, " + - "v_roam_no => ?, " + - "v_craft_no => ?, " + - "v_craft_id => ?, " + - "v_old_wono => ?, " + - "v_excnote => ?, " + - "v_excflag => ?) }"; // 返回游标3 - - try (Connection conn = dataSource.getConnection(); - CallableStatement cs = conn.prepareCall(sql)) { - - // 设置输入参数 - cs.setString(1, v_prtno); - cs.setString(2, v_prtlotno); - cs.setDate(3, v_woreqdat != null ? new java.sql.Date(v_woreqdat.getTime()) : null); - cs.setLong(4, v_woporqty); - - // 处理 nvl(v_usedeptcode, v_usedept) - String deptValue = v_usedeptcode != null ? v_usedeptcode : v_usedept; - cs.setString(5, deptValue); - - cs.setString(6, v_splcode); - cs.setString(7, v_splycode); - cs.setString(8, v_kdofplat); - cs.setString(9, v_wono); - cs.setString(10, v_sono); - cs.setString(11, v_mtnman); - cs.setString(12, v_planner); - cs.setString(13, v_yardman); - cs.setString(14, v_roam_no); - cs.setString(15, v_craft_no); - cs.setLong(16, v_craft_id); - - // 注册游标OUT参数 - cs.registerOutParameter(17, OracleTypes.CURSOR); // cursor1 - cs.registerOutParameter(18, OracleTypes.CURSOR); // cursor2 - cs.registerOutParameter(19, OracleTypes.CURSOR); // cursor3 - log.debug("外协工单生成存储过程输入参数: v_prtno={}, v_prtlotno={}, v_woreqdat={}, v_woporqty={}, " + - "v_usedeptcode={}, v_usedept={}, v_splcode={}, v_splycode={}, v_kdofplat={}, " + - "v_wono={}, v_sono={}, v_mtnman={}, v_planner={}, v_yardman={}, v_roam_no={}, " + - "v_craft_no={}, v_craft_id={}, v_old_wono={}, v_excnote={}, v_excflag={}, deptValue={}", - v_prtno, v_prtlotno, v_woreqdat, v_woporqty, - v_usedeptcode, v_usedept, v_splcode, v_splycode, v_kdofplat, - v_wono, v_sono, v_mtnman, v_planner, v_yardman, v_roam_no, - v_craft_no, v_craft_id, v_old_wono, v_excnote, v_excflag, deptValue); - // 执行存储过程 - cs.execute(); - - // 获取游标结果 - List> oldWoNo = convertResultSetToList((ResultSet) cs.getObject(17)); - List> excnote = convertResultSetToList((ResultSet) cs.getObject(18)); - List> excflag = convertResultSetToList((ResultSet) cs.getObject(19)); - result.put("result", oldWoNo); - log.info("整单外协订单接收成功 - {}", result); - } catch (Exception e) { - log.error("整单外协订单接收失败", e); - return R.fail("整单外协订单接收失败"); - } - return R.data(result); + public String collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Double v_woporqty, String v_usedeptcode, + String v_usedept, String v_splcode, String v_splycode, String v_kdofplat, String v_wono, + String v_sono, String v_mtnman, String v_planner, String v_yardman, String v_roam_no, String v_craft_no, Long v_craft_id) { + SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) + // 指定存储过程名(包含 DB Link) + .withProcedureName("dba_mgr.pro_rbwxgen") + // 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题) + .withoutProcedureColumnMetaDataAccess() + // 显式声明参数 + .declareParameters( + new SqlParameter("v_prtno", Types.VARCHAR), // IN + new SqlParameter("v_prtlotno", Types.VARCHAR), // IN + new SqlParameter("v_woreqdat", Types.DATE), // IN + new SqlParameter("v_woporqty", Types.DOUBLE), // IN + new SqlParameter("v_usedept", Types.VARCHAR), // IN + new SqlParameter("v_splcode", Types.VARCHAR), // IN + new SqlParameter("v_splycode", Types.VARCHAR), // IN + new SqlParameter("v_kdofplat", Types.VARCHAR), // IN + new SqlParameter("v_wono", Types.VARCHAR), // IN + new SqlParameter("v_sono", Types.VARCHAR), // IN + new SqlParameter("v_mtnman", Types.VARCHAR), // IN + new SqlParameter("v_planner", Types.VARCHAR), // IN + new SqlParameter("v_yardman", Types.VARCHAR), // IN + new SqlParameter("v_roam_no", Types.VARCHAR), // IN + new SqlParameter("v_craft_no", Types.VARCHAR), // IN + new SqlParameter("v_craft_id", Types.BIGINT), // IN + new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT + new SqlOutParameter("v_excflag", Types.VARCHAR), // OUT + new SqlOutParameter("v_old_wono", Types.VARCHAR) // OUT + ); + // 2. 封装输入参数 + Map inParams = new HashMap<>(); + inParams.put("v_prtno", v_prtno); + inParams.put("v_prtlotno", v_prtlotno); + inParams.put("v_woreqdat", v_woreqdat); + inParams.put("v_woporqty", v_woporqty); + inParams.put("v_usedept", v_usedeptcode != null ? v_usedeptcode : v_usedept); + inParams.put("v_splcode", v_splcode); + inParams.put("v_splycode", v_planner); + inParams.put("v_kdofplat", v_kdofplat); + inParams.put("v_wono", v_wono); + inParams.put("v_sono", v_sono); + inParams.put("v_mtnman", v_mtnman); + inParams.put("v_planner", v_planner); + inParams.put("v_yardman", v_yardman); + inParams.put("v_roam_no", v_roam_no); + inParams.put("v_craft_no", v_craft_no); + inParams.put("v_craft_id", v_craft_id); + + // 3. 执行并获取结果 Map + Map resultMap = jdbcCall.execute(inParams); + + // 4. 提取输出参数 + String excflag = (String) resultMap.get("v_excflag"); + String excnote = (String) resultMap.get("v_excnote"); + String oldWono = (String) resultMap.get("v_old_wono"); + return oldWono; } /**