|
|
|
@ -4,12 +4,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import oracle.jdbc.internal.OracleTypes; |
|
|
|
import oracle.jdbc.internal.OracleTypes; |
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
import org.springblade.desk.oem.pojo.request.PriceSheetQuery; |
|
|
|
import org.springblade.desk.oem.pojo.request.PriceSheetQuery; |
|
|
|
import org.springblade.desk.oem.pojo.vo.PriceSheetVO; |
|
|
|
import org.springblade.desk.oem.pojo.vo.PriceSheetVO; |
|
|
|
import org.springblade.erpdata.mapper.ErpDataOemMapper; |
|
|
|
import org.springblade.erpdata.mapper.ErpDataOemMapper; |
|
|
|
import org.springblade.erpdata.mapper.ErpDataProduceMapper; |
|
|
|
import org.springblade.erpdata.mapper.ErpDataProduceMapper; |
|
|
|
import org.springblade.erpdata.service.IErpDataOemService; |
|
|
|
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 org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
|
|
import javax.sql.DataSource; |
|
|
|
import javax.sql.DataSource; |
|
|
|
@ -33,6 +38,8 @@ public class ErpDataOemServiceImpl implements IErpDataOemService { |
|
|
|
|
|
|
|
|
|
|
|
private final ErpDataOemMapper erpDataOemMapper; |
|
|
|
private final ErpDataOemMapper erpDataOemMapper; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final JdbcTemplate jdbcTemplate; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void closeErpOrder(String woCode, String memo) { |
|
|
|
public void closeErpOrder(String woCode, String memo) { |
|
|
|
log.info("关闭erp外协订单 - 单号:{},备注:{}", woCode, memo); |
|
|
|
log.info("关闭erp外协订单 - 单号:{},备注:{}", woCode, memo); |
|
|
|
@ -62,140 +69,111 @@ public class ErpDataOemServiceImpl implements IErpDataOemService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@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) { |
|
|
|
public String fullOrderOutsourcing(String v_prtno, String v_prtlotno, String v_splcode, String v_splycode, String v_seqcc, String v_sono, |
|
|
|
Map<String, Object> result = new HashMap<>(); |
|
|
|
String v_planner, Date v_pedate, Double v_woporqty, String v_pricetype) { |
|
|
|
String sql = "{call dba_mgr.pro_rbwxgensc(" + |
|
|
|
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) |
|
|
|
"v_prtno => ?, " + |
|
|
|
// 指定存储过程名(包含 DB Link)
|
|
|
|
"v_prtlotno => ?, " + |
|
|
|
.withProcedureName("dba_mgr.pro_rbwxgensc") |
|
|
|
"v_splcode => ?, " + |
|
|
|
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
|
|
|
|
"v_splycode => ?, " + |
|
|
|
.withoutProcedureColumnMetaDataAccess() |
|
|
|
"v_seqcc => ?, " + |
|
|
|
// 显式声明参数
|
|
|
|
"v_sono => ?, " + |
|
|
|
.declareParameters( |
|
|
|
"v_planner => ?, " + |
|
|
|
new SqlParameter("v_prtno", Types.VARCHAR), // IN
|
|
|
|
"v_pedate => ?, " + |
|
|
|
new SqlParameter("v_prtlotno", Types.VARCHAR), // IN
|
|
|
|
"v_woporqty => ?, " + |
|
|
|
new SqlParameter("v_splcode", Types.VARCHAR), // IN
|
|
|
|
"v_pricetype => ?, " + |
|
|
|
new SqlParameter("v_splycode", Types.VARCHAR), // IN
|
|
|
|
"v_excnote => ?, " + |
|
|
|
new SqlParameter("v_seqcc", Types.VARCHAR), // IN
|
|
|
|
"v_excflag => ?, " + |
|
|
|
new SqlParameter("v_sono", Types.VARCHAR), // IN
|
|
|
|
"v_old_wono => ?)}"; |
|
|
|
new SqlParameter("v_planner", Types.VARCHAR), // IN
|
|
|
|
try (Connection conn = dataSource.getConnection(); |
|
|
|
new SqlParameter("v_pedate", Types.DATE), // IN
|
|
|
|
CallableStatement cs = conn.prepareCall(sql)) { |
|
|
|
new SqlParameter("v_woporqty", Types.DOUBLE), // IN
|
|
|
|
|
|
|
|
new SqlParameter("v_pricetype", Types.VARCHAR), // IN
|
|
|
|
// 设置输入参数
|
|
|
|
new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT
|
|
|
|
cs.setString(1, v_prtno); |
|
|
|
new SqlOutParameter("v_excflag", Types.VARCHAR), // OUT
|
|
|
|
cs.setString(2, v_prtlotno); |
|
|
|
new SqlOutParameter("v_old_wono", Types.VARCHAR) // OUT
|
|
|
|
cs.setString(3, v_splcode); |
|
|
|
); |
|
|
|
cs.setString(4, v_splycode); |
|
|
|
// 2. 封装输入参数
|
|
|
|
cs.setString(5, v_seqcc); |
|
|
|
Map<String, Object> inParams = new HashMap<>(); |
|
|
|
cs.setString(6, v_sono); |
|
|
|
inParams.put("v_prtno", v_prtno); |
|
|
|
cs.setString(7, v_planner); |
|
|
|
inParams.put("v_prtlotno", v_prtlotno); |
|
|
|
cs.setDate(8, new java.sql.Date(v_pedate.getTime())); |
|
|
|
inParams.put("v_splcode", v_splcode); |
|
|
|
cs.setLong(9, v_woporqty); |
|
|
|
inParams.put("v_splycode", v_splycode); |
|
|
|
cs.setString(10, v_pricetype); |
|
|
|
inParams.put("v_seqcc", v_seqcc); |
|
|
|
|
|
|
|
inParams.put("v_sono", v_sono); |
|
|
|
// 注册游标OUT参数
|
|
|
|
inParams.put("v_planner", v_planner); |
|
|
|
cs.registerOutParameter(11, OracleTypes.CURSOR); |
|
|
|
inParams.put("v_pedate", v_pedate); |
|
|
|
cs.registerOutParameter(12, OracleTypes.CURSOR); |
|
|
|
inParams.put("v_woporqty", v_woporqty); |
|
|
|
cs.registerOutParameter(13, OracleTypes.CURSOR); |
|
|
|
inParams.put("v_pricetype", v_pricetype); |
|
|
|
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={}", |
|
|
|
// 3. 执行并获取结果 Map
|
|
|
|
v_prtno, v_prtlotno, v_splcode, v_splycode, v_seqcc, |
|
|
|
Map<String, Object> resultMap = jdbcCall.execute(inParams); |
|
|
|
v_sono, v_planner, v_pedate, v_woporqty, v_pricetype, |
|
|
|
|
|
|
|
v_excnote, v_excflag, v_old_wono); |
|
|
|
// 4. 提取输出参数
|
|
|
|
// 执行
|
|
|
|
String excflag = (String) resultMap.get("v_excflag"); |
|
|
|
cs.execute(); |
|
|
|
String excnote = (String) resultMap.get("v_excnote"); |
|
|
|
|
|
|
|
String oldWono = (String) resultMap.get("v_old_wono"); |
|
|
|
// 获取结果
|
|
|
|
return oldWono; |
|
|
|
List<Map<String, Object>> excnote = convertResultSetToList((ResultSet) cs.getObject(11)); |
|
|
|
|
|
|
|
List<Map<String, Object>> excflag = convertResultSetToList((ResultSet) cs.getObject(12)); |
|
|
|
|
|
|
|
List<Map<String, Object>> 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 |
|
|
|
@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) { |
|
|
|
public String collaborativeOutsourcing(String v_prtno, String v_prtlotno, Date v_woreqdat, Double v_woporqty, String v_usedeptcode, |
|
|
|
Map<String, Object> result = new HashMap<>(); |
|
|
|
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) { |
|
|
|
// SQL语句,注意nvl函数的处理
|
|
|
|
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) |
|
|
|
String sql = "{call dba_mgr.pro_rbwxgen(" + |
|
|
|
// 指定存储过程名(包含 DB Link)
|
|
|
|
"v_prtno => ?, " + |
|
|
|
.withProcedureName("dba_mgr.pro_rbwxgen") |
|
|
|
"v_prtlotno => ?, " + |
|
|
|
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
|
|
|
|
"v_woreqdat => ?, " + |
|
|
|
.withoutProcedureColumnMetaDataAccess() |
|
|
|
"v_woporqty => ?, " + |
|
|
|
// 显式声明参数
|
|
|
|
"nvl(v_usedeptcode, v_usedept) => ?, " + // 注意:Java端需要处理这个逻辑
|
|
|
|
.declareParameters( |
|
|
|
"v_splcode => ?, " + |
|
|
|
new SqlParameter("v_prtno", Types.VARCHAR), // IN
|
|
|
|
"v_splycode => ?, " + |
|
|
|
new SqlParameter("v_prtlotno", Types.VARCHAR), // IN
|
|
|
|
"v_kdofplat => ?, " + |
|
|
|
new SqlParameter("v_woreqdat", Types.DATE), // IN
|
|
|
|
"v_wono => ?, " + |
|
|
|
new SqlParameter("v_woporqty", Types.DOUBLE), // IN
|
|
|
|
"v_sono => ?, " + |
|
|
|
new SqlParameter("v_usedept", Types.VARCHAR), // IN
|
|
|
|
"v_mtnman => ?, " + |
|
|
|
new SqlParameter("v_splcode", Types.VARCHAR), // IN
|
|
|
|
"v_planner => ?, " + |
|
|
|
new SqlParameter("v_splycode", Types.VARCHAR), // IN
|
|
|
|
"v_yardman => ?, " + |
|
|
|
new SqlParameter("v_kdofplat", Types.VARCHAR), // IN
|
|
|
|
"v_roam_no => ?, " + |
|
|
|
new SqlParameter("v_wono", Types.VARCHAR), // IN
|
|
|
|
"v_craft_no => ?, " + |
|
|
|
new SqlParameter("v_sono", Types.VARCHAR), // IN
|
|
|
|
"v_craft_id => ?, " + |
|
|
|
new SqlParameter("v_mtnman", Types.VARCHAR), // IN
|
|
|
|
"v_old_wono => ?, " + |
|
|
|
new SqlParameter("v_planner", Types.VARCHAR), // IN
|
|
|
|
"v_excnote => ?, " + |
|
|
|
new SqlParameter("v_yardman", Types.VARCHAR), // IN
|
|
|
|
"v_excflag => ?) }"; // 返回游标3
|
|
|
|
new SqlParameter("v_roam_no", Types.VARCHAR), // IN
|
|
|
|
|
|
|
|
new SqlParameter("v_craft_no", Types.VARCHAR), // IN
|
|
|
|
try (Connection conn = dataSource.getConnection(); |
|
|
|
new SqlParameter("v_craft_id", Types.BIGINT), // IN
|
|
|
|
CallableStatement cs = conn.prepareCall(sql)) { |
|
|
|
new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT
|
|
|
|
|
|
|
|
new SqlOutParameter("v_excflag", Types.VARCHAR), // OUT
|
|
|
|
// 设置输入参数
|
|
|
|
new SqlOutParameter("v_old_wono", Types.VARCHAR) // OUT
|
|
|
|
cs.setString(1, v_prtno); |
|
|
|
); |
|
|
|
cs.setString(2, v_prtlotno); |
|
|
|
// 2. 封装输入参数
|
|
|
|
cs.setDate(3, v_woreqdat != null ? new java.sql.Date(v_woreqdat.getTime()) : null); |
|
|
|
Map<String, Object> inParams = new HashMap<>(); |
|
|
|
cs.setLong(4, v_woporqty); |
|
|
|
inParams.put("v_prtno", v_prtno); |
|
|
|
|
|
|
|
inParams.put("v_prtlotno", v_prtlotno); |
|
|
|
// 处理 nvl(v_usedeptcode, v_usedept)
|
|
|
|
inParams.put("v_woreqdat", v_woreqdat); |
|
|
|
String deptValue = v_usedeptcode != null ? v_usedeptcode : v_usedept; |
|
|
|
inParams.put("v_woporqty", v_woporqty); |
|
|
|
cs.setString(5, deptValue); |
|
|
|
inParams.put("v_usedept", v_usedeptcode != null ? v_usedeptcode : v_usedept); |
|
|
|
|
|
|
|
inParams.put("v_splcode", v_splcode); |
|
|
|
cs.setString(6, v_splcode); |
|
|
|
inParams.put("v_splycode", v_planner); |
|
|
|
cs.setString(7, v_splycode); |
|
|
|
inParams.put("v_kdofplat", v_kdofplat); |
|
|
|
cs.setString(8, v_kdofplat); |
|
|
|
inParams.put("v_wono", v_wono); |
|
|
|
cs.setString(9, v_wono); |
|
|
|
inParams.put("v_sono", v_sono); |
|
|
|
cs.setString(10, v_sono); |
|
|
|
inParams.put("v_mtnman", v_mtnman); |
|
|
|
cs.setString(11, v_mtnman); |
|
|
|
inParams.put("v_planner", v_planner); |
|
|
|
cs.setString(12, v_planner); |
|
|
|
inParams.put("v_yardman", v_yardman); |
|
|
|
cs.setString(13, v_yardman); |
|
|
|
inParams.put("v_roam_no", v_roam_no); |
|
|
|
cs.setString(14, v_roam_no); |
|
|
|
inParams.put("v_craft_no", v_craft_no); |
|
|
|
cs.setString(15, v_craft_no); |
|
|
|
inParams.put("v_craft_id", v_craft_id); |
|
|
|
cs.setLong(16, v_craft_id); |
|
|
|
|
|
|
|
|
|
|
|
// 3. 执行并获取结果 Map
|
|
|
|
// 注册游标OUT参数
|
|
|
|
Map<String, Object> resultMap = jdbcCall.execute(inParams); |
|
|
|
cs.registerOutParameter(17, OracleTypes.CURSOR); // cursor1
|
|
|
|
|
|
|
|
cs.registerOutParameter(18, OracleTypes.CURSOR); // cursor2
|
|
|
|
// 4. 提取输出参数
|
|
|
|
cs.registerOutParameter(19, OracleTypes.CURSOR); // cursor3
|
|
|
|
String excflag = (String) resultMap.get("v_excflag"); |
|
|
|
log.debug("外协工单生成存储过程输入参数: v_prtno={}, v_prtlotno={}, v_woreqdat={}, v_woporqty={}, " + |
|
|
|
String excnote = (String) resultMap.get("v_excnote"); |
|
|
|
"v_usedeptcode={}, v_usedept={}, v_splcode={}, v_splycode={}, v_kdofplat={}, " + |
|
|
|
String oldWono = (String) resultMap.get("v_old_wono"); |
|
|
|
"v_wono={}, v_sono={}, v_mtnman={}, v_planner={}, v_yardman={}, v_roam_no={}, " + |
|
|
|
return oldWono; |
|
|
|
"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<Map<String, Object>> oldWoNo = convertResultSetToList((ResultSet) cs.getObject(17)); |
|
|
|
|
|
|
|
List<Map<String, Object>> excnote = convertResultSetToList((ResultSet) cs.getObject(18)); |
|
|
|
|
|
|
|
List<Map<String, Object>> 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); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
|