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 84dca26e..0c48a5ad 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 @@ -12,6 +12,8 @@ import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; +import java.util.Date; + /** * 外协相关erp操作Feign接口类 * @@ -27,6 +29,8 @@ public interface IErpDataOemClient { String API_PREFIX = "/feign/erpdata/oem"; String CLOSE_ERP_ORDER = API_PREFIX + "/closeErpOrder"; String PRICE_SHEET_DATA = API_PREFIX + "/priceSheetData"; + String FULL_ORDER_OUTSOURCING = API_PREFIX + "/fullOrderOutsourcing"; + String COLLABORATIVE_OUTSOURCING = API_PREFIX + "/collaborativeOutsourcing"; /** * 关闭erp外协订单 @@ -45,4 +49,61 @@ public interface IErpDataOemClient { @GetMapping(PRICE_SHEET_DATA) R> priceSheetData(@SpringQueryMap PriceSheetQuery priceSheetQuery, @SpringQueryMap Query query); + /** + * 协作外协订单接收 + * + * @param v_prtno 物料号 + * @param v_prtlotno 质量等级 + * @param v_splcode 批次号 + * @param v_splycode 外协厂家 + * @param v_seqcc 工序代码 + * @param v_sono 车间订单号 + * @param v_planner 计划员 + * @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, + @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); + + + /** + * 整单外协订单接收 + * + * @param v_prtno 物料号 + * @param v_prtlotno 质量等级 + * @param v_woreqdat 需求日期 yyyy-MM-dd HH:mm:ss + * @param v_woporqty 下达数量 + * @param v_usedeptcode 使用部门代码 非必填 + * @param v_usedept 使用部门 非必填 + * @param v_splcode 批次号 + * @param v_splycode 外协厂家 + * @param v_kdofplat 镀钟 + * @param v_wono 工作订单号 + * @param v_sono 车间订单号 + * @param v_mtnman 外协订单下达人 + * @param v_planner 计划员 + * @param v_yardman 调度员 + * @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, + @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); } 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 658424e4..5613325b 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 @@ -26,4 +26,14 @@ public class IErpDataOemClientFallback implements IErpDataOemClient { return R.fail("查询报价单 失败"); } + @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) { + 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) { + return R.fail("整单外协订单接收 失败"); + } + } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataOemClientImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataOemClientImpl.java index efa49dbc..b720c4d5 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataOemClientImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataOemClientImpl.java @@ -10,6 +10,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.desk.oem.pojo.request.PriceSheetQuery; import org.springblade.desk.oem.pojo.vo.PriceSheetVO; import org.springblade.erpdata.service.IErpDataOemService; @@ -17,6 +18,8 @@ import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Date; + /** * 外协相关erp操作Feign实现类 @@ -53,4 +56,16 @@ public class ErpDataOemClientImpl implements IErpDataOemClient { return R.data(pages); } + + @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) { + 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); + } + + @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) { + 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); + } } 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 035b8542..8539933a 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 @@ -1,9 +1,12 @@ package org.springblade.erpdata.service; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.tool.api.R; import org.springblade.desk.oem.pojo.request.PriceSheetQuery; import org.springblade.desk.oem.pojo.vo.PriceSheetVO; +import java.util.Date; + /** * 外协相关erp操作service * @@ -29,4 +32,48 @@ public interface IErpDataOemService { */ IPage priceSheetData(IPage page, PriceSheetQuery priceSheetQuery); + /** + * 协作外协订单接收 + * + * @param v_prtno 物料号 + * @param v_prtlotno 质量等级 + * @param v_splcode 批次号 + * @param v_splycode 外协厂家 + * @param v_seqcc 工序代码 + * @param v_sono 车间订单号 + * @param v_planner 计划员 + * @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); + + /** + * 整单外协订单接收 + * + * @param v_prtno 物料号 + * @param v_prtlotno 质量等级 + * @param v_woreqdat 需求日期 + * @param v_woporqty 下达数量 + * @param v_usedeptcode 使用部门代码 + * @param v_usedept 使用部门 + * @param v_splcode 批次号 + * @param v_splycode 外协厂家 + * @param v_kdofplat 镀钟 + * @param v_wono 工作订单号 + * @param v_sono 车间订单号 + * @param v_mtnman 外协订单下达人 + * @param v_planner 计划员 + * @param v_yardman 调度员 + * @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); } 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 8d347204..ca134f14 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 @@ -3,6 +3,8 @@ package org.springblade.erpdata.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import oracle.jdbc.internal.OracleTypes; +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; @@ -11,9 +13,9 @@ import org.springblade.erpdata.service.IErpDataOemService; import org.springframework.stereotype.Service; import javax.sql.DataSource; -import java.sql.CallableStatement; -import java.sql.Connection; -import java.sql.Timestamp; +import java.sql.*; +import java.util.*; +import java.util.Date; /** @@ -58,4 +60,167 @@ public class ErpDataOemServiceImpl implements IErpDataOemService { public IPage priceSheetData(IPage page, PriceSheetQuery priceSheetQuery) { return page.setRecords(erpDataOemMapper.priceSheetData(page, priceSheetQuery)); } + + @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); + } + + @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); + } + + /** + * 将ResultSet转换为List的通用方法 + */ + private List> convertResultSetToList(ResultSet rs) throws Exception { + List> resultList = new ArrayList<>(); + if (rs == null) { + return resultList; + } + + ResultSetMetaData metaData = rs.getMetaData(); + int columnCount = metaData.getColumnCount(); + + while (rs.next()) { + Map row = new LinkedHashMap<>(); + for (int i = 1; i <= columnCount; i++) { + String columnName = metaData.getColumnLabel(i); // 使用别名或列名 + Object value = rs.getObject(i); + row.put(columnName, value); + } + resultList.add(row); + } + + return resultList; + } + }