外协审批添加提交erp

liweidong
李涛 1 day ago
parent 61fcfa25c4
commit f3c7a46b7d
  1. 20
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java
  2. 4
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java
  3. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java
  4. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml
  5. 88
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  6. 8
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataOemClientImpl.java
  7. 10
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java
  8. 240
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java

@ -62,16 +62,12 @@ public interface IErpDataOemClient {
* @param v_pedate 计划完成时间 yyyy-MM-dd HH:mm:ss * @param v_pedate 计划完成时间 yyyy-MM-dd HH:mm:ss
* @param v_woporqty 下达数量 * @param v_woporqty 下达数量
* @param v_pricetype 加工类型 * @param v_pricetype 加工类型
* @param v_excnote 返回结果 OUT游标参数非必填
* @param v_excflag 返回状态 OUT游标参数非必填
* @param v_old_wono 老系统生成的外协订单号 OUT游标参数非必填
*/ */
@GetMapping(FULL_ORDER_OUTSOURCING) @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<String> 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_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_planner") String v_planner, @RequestParam("v_pedate") String v_pedate, @RequestParam("v_woporqty") Double 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_pricetype", required = false) String v_pricetype);
@RequestParam(value = "v_old_wono", defaultValue = "", required = false) String v_old_wono);
/** /**
@ -94,16 +90,12 @@ public interface IErpDataOemClient {
* @param v_roam_no B号 * @param v_roam_no B号
* @param v_craft_no C号 * @param v_craft_no C号
* @param v_craft_id 零件工艺ID * @param v_craft_id 零件工艺ID
* @param v_old_wono 老系统生成的外协订单号 OUT游标参数非必填
* @param v_excnote 返回结果 OUT游标参数非必填
* @param v_excflag 返回状态 OUT游标参数非必填
*/ */
@GetMapping(COLLABORATIVE_OUTSOURCING) @GetMapping(COLLABORATIVE_OUTSOURCING)
R collaborativeOutsourcing(@RequestParam("v_prtno") String v_prtno, @RequestParam("v_prtlotno") String v_prtlotno, @RequestParam("v_woreqdat") String v_woreqdat, R<String> 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_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_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_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_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("v_craft_id") Long v_craft_id);
@RequestParam(value = "v_excflag", defaultValue = "", required = false) String v_excflag);
} }

@ -27,12 +27,12 @@ public class IErpDataOemClientFallback implements IErpDataOemClient {
} }
@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, 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("协作外协订单接收 失败"); return R.fail("协作外协订单接收 失败");
} }
@Override @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("整单外协订单接收 失败"); return R.fail("整单外协订单接收 失败");
} }

@ -12,6 +12,7 @@ import org.springblade.desk.oem.pojo.vo.OemOrderVO;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun; import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 车间订单运行记录表 Mapper 接口 * 车间订单运行记录表 Mapper 接口
@ -47,4 +48,7 @@ public interface WorkOrderRunMapper extends BaseMapper<WorkOrderRun> {
*/ */
List<OemApprovalVO> selectOemApproval(IPage page, @Param("query") OemApprovalQuery query); List<OemApprovalVO> selectOemApproval(IPage page, @Param("query") OemApprovalQuery query);
Map<String, String> selectRoamAndCraftNoByCraftId(Long craftId);
Map<String, String> selectRoamAndCraftNoByPartCode(String partCode);
} }

@ -389,4 +389,10 @@
</foreach> </foreach>
</if> </if>
</select> </select>
<select id="selectRoamAndCraftNoByCraftId" resultType="java.util.Map">
SELECT MAX(a.roam_no) AS roamNo, MAX(a.craft_no) AS craftNo FROM ds_craft a WHERE a.id = #{craftId}
</select>
<select id="selectRoamAndCraftNoByPartCode" resultType="java.util.Map">
SELECT MAX(a.roam_no) AS roamNo, MAX(a.craft_no) AS craftNo FROM ds_craft a, ds_part b WHERE a.part_id = b.id AND b.part_code = #{partCode}
</select>
</mapper> </mapper>

@ -1,5 +1,6 @@
package org.springblade.desk.produce.service.impl; 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.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -337,8 +338,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前 //如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) { if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>().eq(WorkPlan::getId, wp.getNextWpId()));
.eq(WorkPlan::getId, wp.getNextWpId()));
workOrderRun.setInCustomer(nextWp.getOcId()); workOrderRun.setInCustomer(nextWp.getOcId());
} else { } else {
workOrderRun.setInCustomer(wp.getOcId()); workOrderRun.setInCustomer(wp.getOcId());
@ -346,6 +346,52 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
//更新车间订单主责任单位 //更新车间订单主责任单位
workOrderService.updateHostWorkUnit(wo); workOrderService.updateHostWorkUnit(wo);
workPlanMapper.updateById(wpList); workPlanMapper.updateById(wpList);
// 调用外协接收
String wxWoCode = null;
Oem oem = oemMapper.selectById(workOrderRun.getInCustomer());
User planner = UserCache.getUser(wo.getPlanner());
if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) {
List<BsProcessSetEntity> 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<String, String> 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 { } else {
//转厂内业务 //转厂内业务
WorkPlan nextWorkPlan; WorkPlan nextWorkPlan;
@ -477,6 +523,44 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return R.success("操作完成"); return R.success("操作完成");
} }
private void updateWorkPlanAndOrderStatus(WorkOrder workOrder, String wxCode) {
WorkPlan workPlan = workPlanMapper.selectById(workOrder.getWpId());
Date date = new Date();
if (workPlan.getStatus() == 3) {
// 更新下一道工序
if (workPlan.getNextWpId() != null) {
WorkPlan nextPlan = new WorkPlan();
nextPlan.setId(workPlan.getNextWpId());
nextPlan.setFactStartTime(date);
nextPlan.setStatus(WorkPlan.STATUS_START);
nextPlan.setWxNo(wxCode);
workPlanMapper.updateById(nextPlan);
}
// 更新当前工序为完成
WorkPlan currentPlan = new WorkPlan();
currentPlan.setId(workPlan.getId());
currentPlan.setFactEndTime(date);
currentPlan.setStatus(5);
currentPlan.setWxNo(wxCode);
workPlanMapper.updateById(currentPlan);
// 更新订单当前工序
workOrder.setWpId(workPlan.getNextWpId());
} else {
// 更新当前工序为进行中
WorkPlan currentPlan = new WorkPlan();
currentPlan.setId(workPlan.getId());
currentPlan.setFactStartTime(date);
currentPlan.setStatus(2);
currentPlan.setWxNo(wxCode);
workPlanMapper.updateById(currentPlan);
}
workOrder.setOemOut(String.valueOf(1));
workOrder.setPickingStatus(1);
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public R changeOemManufacturer(Long worId, Long ocId) { public R changeOemManufacturer(Long worId, Long ocId) {

@ -61,14 +61,14 @@ public class ErpDataOemClientImpl implements IErpDataOemClient {
} }
@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, String v_pedate, Long v_woporqty, String v_pricetype, String v_excnote, String v_excflag, String v_old_wono) { public R<String> 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"); 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 @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<String> 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"); 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));
} }
} }

@ -45,11 +45,8 @@ public interface IErpDataOemService {
* @param v_pedate 计划完成时间 * @param v_pedate 计划完成时间
* @param v_woporqty 下达数量 * @param v_woporqty 下达数量
* @param v_pricetype 加工类型 * @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_roam_no B号
* @param v_craft_no C号 * @param v_craft_no C号
* @param v_craft_id 零件工艺ID * @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);
} }

@ -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);
} }
/** /**

Loading…
Cancel
Save