Browse Source

2025-09-19 生产订单接口调试

master
fengyuan_yang 6 months ago
parent
commit
b538c47687
  1. 6
      src/main/java/com/gaotao/modules/oa/controller/ProductionBomController.java
  2. 2
      src/main/java/com/gaotao/modules/oa/controller/ProductionOrderController.java
  3. 112
      src/main/java/com/gaotao/modules/oa/service/impl/ProductionBomServiceImpl.java
  4. 138
      src/main/java/com/gaotao/modules/oa/service/impl/ProductionOrderServiceImpl.java
  5. 132
      src/main/java/com/gaotao/modules/oa/service/impl/ProductionRoutingServiceImpl.java

6
src/main/java/com/gaotao/modules/oa/controller/ProductionBomController.java

@ -46,15 +46,13 @@ public class ProductionBomController {
bindingResult.getFieldErrors().forEach(error ->
errorMsg.append(error.getField()).append(": ").append(error.getDefaultMessage()).append("; ")
);
log.warn("生产订单BOM推送请求参数验证失败: {}", errorMsg.toString());
return OaResponseDto.failure("参数验证失败: " + errorMsg.toString());
log.warn("生产订单BOM推送请求参数验证失败: {}", errorMsg);
return OaResponseDto.failure("参数验证失败: " + errorMsg);
}
// 处理生产订单BOM推送
OaResponseDto response = productionBomService.processProductionBom(request);
log.info("生产订单BOM推送处理完成,结果: {}", response.getCode());
return response;
} catch (RuntimeException e) {

2
src/main/java/com/gaotao/modules/oa/controller/ProductionOrderController.java

@ -52,9 +52,7 @@ public class ProductionOrderController {
// 处理生产订单推送
OaResponseDto response = productionOrderService.processProductionOrder(request);
log.info("生产订单推送处理完成,结果: {}", response.getCode());
return response;
} catch (RuntimeException e) {

112
src/main/java/com/gaotao/modules/oa/service/impl/ProductionBomServiceImpl.java

@ -1,17 +1,18 @@
package com.gaotao.modules.oa.service.impl;
import com.gaotao.modules.oa.dao.SoBomMapper;
import com.gaotao.modules.oa.dto.OaResponseDto;
import com.gaotao.modules.oa.dto.ProductionBomItemDto;
import com.gaotao.modules.oa.dto.ProductionBomRequestDto;
import com.gaotao.modules.oa.service.ProductionBomService;
import com.gaotao.modules.orderIssure.entity.SoBomData;
import com.gaotao.modules.report.dao.ProcedureDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.*;
/**
* 生产订单BOM服务实现类
*/
@ -20,7 +21,7 @@ import org.springframework.util.StringUtils;
public class ProductionBomServiceImpl implements ProductionBomService {
@Autowired
private SoBomMapper soBomMapper;
private ProcedureDao procedureDao;
@Override
@Transactional
@ -41,25 +42,8 @@ public class ProductionBomServiceImpl implements ProductionBomService {
continue;
}
// 2. 根据method执行不同操作
switch (item.getMethod()) {
case "0": // 新增
processNewBom(item);
break;
case "1": // 修改
processUpdateBom(item);
break;
case "2": // 关闭标记删除
processUpdateBom(item);
break;
case "3": // 删除
processDeleteBom(item);
break;
default:
failCount++;
errorMessages.append("BOM项").append(item.getOrderNo()).append("-").append(item.getItemNo()).append("操作方法无效; ");
continue;
}
// 2. 调用存储过程UspInsertShopOrder
callUspInsertShopOrder(item);
successCount++;
log.info("处理生产订单BOM成功,订单号: {}, 行号: {}, 操作: {}",
@ -90,55 +74,49 @@ public class ProductionBomServiceImpl implements ProductionBomService {
}
/**
* 处理新增BOM
* 调用存储过程UspInsertShopOrder
* 注意BOM数据需要映射到生产订单存储过程参数
*/
private void processNewBom(ProductionBomItemDto item) {
SoBomData soBomData = new SoBomData();
mapItemToSoBom(item, soBomData);
private void callUspInsertShopOrder(ProductionBomItemDto item) {
List<Object> params = new ArrayList<>();
soBomMapper.saveSoBom(soBomData);
log.debug("新增生产订单BOM: {}-{}", item.getOrderNo(), item.getItemNo());
}
/**
* 处理修改BOM
*/
private void processUpdateBom(ProductionBomItemDto item) {
SoBomData soBomData = new SoBomData();
mapItemToSoBom(item, soBomData);
// 按照存储过程参数顺序添加参数BOM数据映射到生产订单参数
params.add(item.getSite()); // @site
params.add(item.getBuNo()); // @buNo
params.add(item.getOrderNo()); // @orderNo
params.add(""); // @status - BOM默认状态
params.add(""); // @statusTmp - BOM默认状态
params.add(""); // @enterDate - 当前时间
params.add(""); // @needDate - 当前时间
params.add(""); // @planStartDate
params.add(""); // @originalNeedDate
params.add(""); // @closeDate
params.add(""); // @orderType - BOM默认订单类型
params.add(item.getComponentPartNo()); // @partNo - 使用组件物料编号
params.add(item.getQtyRequired() != null ? item.getQtyRequired().doubleValue() : 0.0); // @lotSize - 使用需求数量
params.add("BOM"); // @bomRevNo - BOM标识
params.add("ROUTING"); // @routingRevNo - 默认工艺路线
params.add(""); // @projectID
params.add(""); // @customerId
params.add(""); // @batchNo
params.add(item.getRemark()); // @orderref1 - 使用备注
params.add(item.getIssueMethod()); // @orderref2 - 使用领料方式
params.add(item.getMethod()); // @method
soBomMapper.updateSoBom(soBomData);
log.debug("修改生产订单BOM: {}-{}", item.getOrderNo(), item.getItemNo());
}
/**
* 处理删除BOM
*/
private void processDeleteBom(ProductionBomItemDto item) {
soBomMapper.deleteSoBom(item.getSite(), item.getOrderNo(), item.getItemNo());
log.debug("删除生产订单BOM: {}-{}", item.getOrderNo(), item.getItemNo());
}
/**
* 将DTO映射到SoBomData
*/
private void mapItemToSoBom(ProductionBomItemDto item, SoBomData soBomData) {
soBomData.setSite(item.getSite());
soBomData.setOrderNo(item.getOrderNo());
soBomData.setItemNo(item.getItemNo());
soBomData.setComponentPartno(item.getComponentPartNo());
soBomData.setQtyAssembly(item.getQtyAssembly());
soBomData.setQtyFixedscrapt(item.getQtyFixedScrapt());
soBomData.setScraptFactor(item.getScraptFactor());
soBomData.setRemark(item.getRemark());
soBomData.setQtyRequired(item.getQtyRequired());
soBomData.setQtyReserved(item.getQtyReserved());
soBomData.setQtyNotified(item.getQtyNotified());
soBomData.setIssueMethod(item.getIssueMethod());
soBomData.setOutboundWarehouseId(item.getOutBoundWareHouseId());
// 执行存储过程
List<Map<String, Object>> resultList = procedureDao.getProcedureData("UspInsertShopOrder", params);
// 判断执行结果
if (resultList != null && !resultList.isEmpty()) {
String code = String.valueOf(resultList.get(0).get("resultCode"));
if ("400".equalsIgnoreCase(code)) {
String msg = String.valueOf(resultList.get(0).get("resultMsg"));
throw new RuntimeException(msg);
}
}
// 注意数据库表有operation_no和RMType_DB字段但SoBom实体类中没有对应的属性
// 这些字段将通过XML映射直接处理实体类不需要对应的setter方法
log.debug("调用存储过程UspInsertShopOrder成功,BOM订单号: {}, 行号: {}, 操作: {}",
item.getOrderNo(), item.getItemNo(), getMethodDesc(item.getMethod()));
}
/**

138
src/main/java/com/gaotao/modules/oa/service/impl/ProductionOrderServiceImpl.java

@ -1,19 +1,18 @@
package com.gaotao.modules.oa.service.impl;
import com.gaotao.common.utils.DateUtils;
import com.gaotao.modules.oa.dto.OaResponseDto;
import com.gaotao.modules.oa.dto.ProductionOrderItemDto;
import com.gaotao.modules.oa.dto.ProductionOrderRequestDto;
import com.gaotao.modules.oa.service.ProductionOrderService;
import com.gaotao.modules.shopOrder.dao.ShopOrderMapper;
import com.gaotao.modules.shopOrder.entity.ShopOrderData;
import com.gaotao.modules.report.dao.ProcedureDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.*;
/**
* 生产订单服务实现类
@ -23,7 +22,7 @@ import java.util.Date;
public class ProductionOrderServiceImpl implements ProductionOrderService {
@Autowired
private ShopOrderMapper shopOrderMapper;
private ProcedureDao procedureDao;
@Override
@Transactional
@ -44,25 +43,8 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
continue;
}
// 2. 根据method执行不同操作
switch (item.getMethod()) {
case "0": // 新增
processNewOrder(item);
break;
case "1": // 修改
processUpdateOrder(item);
break;
case "2": // 关闭
processCloseOrder(item);
break;
case "3": // 删除
processDeleteOrder(item);
break;
default:
failCount++;
errorMessages.append("订单").append(item.getOrderNo()).append("操作方法无效; ");
continue;
}
// 2. 调用存储过程UspInsertShopOrder
callUspInsertShopOrder(item);
successCount++;
log.info("处理生产订单成功,订单号: {}, 操作: {}", item.getOrderNo(), getMethodDesc(item.getMethod()));
@ -91,83 +73,47 @@ public class ProductionOrderServiceImpl implements ProductionOrderService {
}
/**
* 处理新增订单
* 调用存储过程UspInsertShopOrder
*/
private void processNewOrder(ProductionOrderItemDto item) {
ShopOrderData shopOrder = new ShopOrderData();
mapItemToShopOrder(item, shopOrder);
shopOrder.setEnterDate(item.getEnterDate() != null ? item.getEnterDate() : new Date());
shopOrder.setUserName("OA_SYSTEM");
private void callUspInsertShopOrder(ProductionOrderItemDto item) {
List<Object> params = new ArrayList<>();
shopOrderMapper.saveShopOrderData2(shopOrder);
log.debug("新增生产订单: {}", item.getOrderNo());
}
/**
* 处理修改订单
*/
private void processUpdateOrder(ProductionOrderItemDto item) {
ShopOrderData shopOrder = new ShopOrderData();
mapItemToShopOrder(item, shopOrder);
shopOrder.setUserName("OA_SYSTEM");
// 按照存储过程参数顺序添加参数
params.add(item.getSite()); // @site
params.add(item.getBuNo()); // @buNo
params.add(item.getOrderNo()); // @orderNo
params.add(item.getStatus()); // @status
params.add(item.getStatusTmp()); // @statusTmp
params.add(DateUtils.format(item.getEnterDate() != null ? item.getEnterDate() : new Date())); // @enterDate
params.add(DateUtils.format(item.getNeedDate())); // @needDate
params.add(DateUtils.format(item.getPlanStartDate())); // @planStartDate
params.add(item.getOriginalNeedDate() != null ? DateUtils.format(item.getOriginalNeedDate()) : ""); // @originalNeedDate
params.add(item.getCloseDate() != null ? DateUtils.format(item.getCloseDate()) : ""); // @closeDate
params.add(item.getOrderType()); // @orderType
params.add(item.getPartNo()); // @partNo
params.add(item.getLotSize()); // @lotSize
params.add(item.getBomRevNo()); // @bomRevNo
params.add(item.getRoutingRevNo()); // @routingRevNo
params.add(item.getProjectID()); // @projectID
params.add(item.getCustomerId()); // @customerId
params.add(item.getBatchNo()); // @batchNo
params.add(item.getOrderref1()); // @orderref1
params.add(item.getOrderref2()); // @orderref2
params.add(item.getMethod()); // @method
shopOrderMapper.saveShopOrderData(shopOrder);
log.debug("修改生产订单: {}", item.getOrderNo());
}
/**
* 处理关闭订单
*/
private void processCloseOrder(ProductionOrderItemDto item) {
ShopOrderData shopOrder = new ShopOrderData();
shopOrder.setSite(item.getSite());
shopOrder.setOrderNo(item.getOrderNo());
shopOrder.setStatus("已关闭");
shopOrder.setStatusTmp("已关闭");
shopOrder.setCloseDate(item.getCloseDate() != null ? item.getCloseDate() : new Date());
shopOrder.setUserName("OA_SYSTEM");
// 执行存储过程
List<Map<String, Object>> resultList = procedureDao.getProcedureData("UspInsertShopOrder", params);
shopOrderMapper.saveShopOrderData(shopOrder);
log.debug("关闭生产订单: {}", item.getOrderNo());
}
/**
* 处理删除订单
*/
private void processDeleteOrder(ProductionOrderItemDto item) {
ShopOrderData shopOrder = new ShopOrderData();
shopOrder.setSite(item.getSite());
shopOrder.setOrderNo(item.getOrderNo());
shopOrder.setUserName("OA_SYSTEM");
// 判断执行结果
if (resultList != null && !resultList.isEmpty()) {
String code = String.valueOf(resultList.get(0).get("resultCode"));
if ("400".equalsIgnoreCase(code)) {
String msg = String.valueOf(resultList.get(0).get("resultMsg"));
throw new RuntimeException(msg);
}
}
shopOrderMapper.deleteShopOrderData(shopOrder);
log.debug("删除生产订单: {}", item.getOrderNo());
}
/**
* 将DTO映射到ShopOrderData
*/
private void mapItemToShopOrder(ProductionOrderItemDto item, ShopOrderData shopOrder) {
shopOrder.setSite(item.getSite());
shopOrder.setOrderNo(item.getOrderNo());
shopOrder.setStatus(item.getStatus());
shopOrder.setStatusTmp(item.getStatusTmp());
shopOrder.setEnterDate(item.getEnterDate());
shopOrder.setNeedDate(item.getNeedDate());
shopOrder.setPlanStartDate(item.getPlanStartDate());
shopOrder.setOriginalNeedDate(item.getOriginalNeedDate());
shopOrder.setCloseDate(item.getCloseDate());
shopOrder.setOrderType(item.getOrderType());
shopOrder.setPartNo(item.getPartNo());
shopOrder.setLotSize(item.getLotSize());
shopOrder.setbOMRevNo(item.getBomRevNo());
shopOrder.setRoutingRevNo(item.getRoutingRevNo());
shopOrder.setProjectID(item.getProjectID());
shopOrder.setCustomerID(item.getCustomerId());
shopOrder.setBatchNo(item.getBatchNo());
shopOrder.setOrderRef1(item.getOrderref1());
shopOrder.setOrderRef2(item.getOrderref2());
shopOrder.setBuNo(item.getBuNo());
log.debug("调用存储过程UspInsertShopOrder成功,订单号: {}, 操作: {}", item.getOrderNo(), getMethodDesc(item.getMethod()));
}
/**

132
src/main/java/com/gaotao/modules/oa/service/impl/ProductionRoutingServiceImpl.java

@ -1,17 +1,18 @@
package com.gaotao.modules.oa.service.impl;
import com.gaotao.modules.base.entity.SORoutingData;
import com.gaotao.modules.oa.dao.SoRoutingMapper;
import com.gaotao.modules.oa.dto.OaResponseDto;
import com.gaotao.modules.oa.dto.ProductionRoutingItemDto;
import com.gaotao.modules.oa.dto.ProductionRoutingRequestDto;
import com.gaotao.modules.oa.service.ProductionRoutingService;
import com.gaotao.modules.report.dao.ProcedureDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.*;
/**
* 生产订单工艺路线服务实现类
*/
@ -20,7 +21,7 @@ import org.springframework.util.StringUtils;
public class ProductionRoutingServiceImpl implements ProductionRoutingService {
@Autowired
private SoRoutingMapper soRoutingMapper;
private ProcedureDao procedureDao;
@Override
@Transactional
@ -41,25 +42,8 @@ public class ProductionRoutingServiceImpl implements ProductionRoutingService {
continue;
}
// 2. 根据method执行不同操作
switch (item.getMethod()) {
case "0": // 新增
processNewRouting(item);
break;
case "1": // 修改
processUpdateRouting(item);
break;
case "2": // 关闭标记删除
processUpdateRouting(item);
break;
case "3": // 删除
processDeleteRouting(item);
break;
default:
failCount++;
errorMessages.append("工艺路线项").append(item.getOrderNo()).append("-").append(item.getItemNo()).append("操作方法无效; ");
continue;
}
// 2. 调用存储过程UspInsertShopOrder
callUspInsertShopOrder(item);
successCount++;
log.info("处理生产订单工艺路线成功,订单号: {}, 工序号: {}, 操作: {}",
@ -90,77 +74,49 @@ public class ProductionRoutingServiceImpl implements ProductionRoutingService {
}
/**
* 处理新增工艺路线
* 调用存储过程UspInsertShopOrder
* 注意工艺路线数据需要映射到生产订单存储过程参数
*/
private void processNewRouting(ProductionRoutingItemDto item) {
SORoutingData routingData = new SORoutingData();
mapItemToRouting(item, routingData);
private void callUspInsertShopOrder(ProductionRoutingItemDto item) {
List<Object> params = new ArrayList<>();
soRoutingMapper.saveSoRouting(routingData);
log.debug("新增生产订单工艺路线: {}-{}", item.getOrderNo(), item.getItemNo());
}
/**
* 处理修改工艺路线
*/
private void processUpdateRouting(ProductionRoutingItemDto item) {
SORoutingData routingData = new SORoutingData();
mapItemToRouting(item, routingData);
// 按照存储过程参数顺序添加参数工艺路线数据映射到生产订单参数
params.add(item.getSite()); // @site
params.add(item.getBuNo()); // @buNo
params.add(item.getOrderNo()); // @orderNo
params.add("已下达"); // @status - 工艺路线默认状态
params.add("已下达"); // @statusTmp - 工艺路线默认状态
params.add(new Date()); // @enterDate - 当前时间
params.add(item.getPlanStartTime() != null ? item.getPlanStartTime() : new Date()); // @needDate - 使用计划开始时间
params.add(item.getPlanStartTime()); // @planStartDate - 计划开始时间
params.add(null); // @originalNeedDate
params.add(item.getPlanFinishTime()); // @closeDate - 使用计划完成时间
params.add("生产订单"); // @orderType - 工艺路线默认订单类型
params.add(item.getPartNo() != null ? item.getPartNo() : ""); // @partNo - 使用产出物料编号
params.add(item.getQtyRequired() != null ? item.getQtyRequired() : 0.0); // @lotSize - 使用需加工数量
params.add("BOM"); // @bomRevNo - 默认BOM版本
params.add("ROUTING"); // @routingRevNo - 工艺路线标识
params.add(""); // @projectID
params.add(""); // @customerId
params.add(""); // @batchNo
params.add(item.getRemark()); // @orderref1 - 使用备注
params.add(item.getOperationDesc()); // @orderref2 - 使用工序名称
params.add(item.getMethod()); // @method
soRoutingMapper.updateSoRouting(routingData);
log.debug("修改生产订单工艺路线: {}-{}", item.getOrderNo(), item.getItemNo());
}
/**
* 处理删除工艺路线
*/
private void processDeleteRouting(ProductionRoutingItemDto item) {
soRoutingMapper.deleteSoRouting(item.getSite(), item.getOrderNo(), item.getItemNo());
log.debug("删除生产订单工艺路线: {}-{}", item.getOrderNo(), item.getItemNo());
}
/**
* 将DTO映射到SORoutingData
*/
private void mapItemToRouting(ProductionRoutingItemDto item, SORoutingData routingData) {
routingData.setSite(item.getSite());
routingData.setOrderNo(item.getOrderNo());
routingData.setItemNo(item.getItemNo());
// 映射主要字段
routingData.setOperationDesc(item.getOperationDesc());
routingData.setWorkCenterNo(item.getWorkCenterNo());
routingData.setMachSetupTime(item.getMachSetupTime());
routingData.setMachRunFactor(item.getMachRunFactor());
routingData.setFactorUnitDb(item.getFactorUnitDb());
routingData.setFactorUnit(item.getFactorUnit());
// 执行存储过程
List<Map<String, Object>> resultList = procedureDao.getProcedureData("UspInsertShopOrder", params);
// 映射数量相关字段
routingData.setQtyRequired(item.getQtyRequired());
routingData.setTimeRequired(item.getTimeRequired());
routingData.setCrewsize(item.getCrewSize());
routingData.setEfficiency(item.getEfficiency());
// 映射时间字段
routingData.setPlanStartTime(item.getPlanStartTime());
routingData.setPlanFinishTime(item.getPlanFinishTime());
// 映射字符串字段
routingData.setRemark(item.getRemark());
routingData.setClosedFlag(item.getClosedFlag() != null ? item.getClosedFlag() : "N");
routingData.setOutWorkFlag(item.getOutWorkFlag() != null ? item.getOutWorkFlag() : "N");
routingData.setPartNo(item.getPartNo());
routingData.setOutWorkPartNo(item.getOutWorkPartNo());
// 判断执行结果
if (resultList != null && !resultList.isEmpty()) {
String code = String.valueOf(resultList.get(0).get("resultCode"));
if ("400".equalsIgnoreCase(code)) {
String msg = String.valueOf(resultList.get(0).get("resultMsg"));
throw new RuntimeException(msg);
}
}
// 初始化其他字段为默认值
routingData.setQtyReported(0.0);
routingData.setQtyApprove(0.0);
routingData.setTimeReported(0.0);
routingData.setQtyScrapt(0.0);
routingData.setQtyOnPR(0.0);
routingData.setQtyOnPO(0.0);
routingData.setScheduledFlag("N");
routingData.setQtyScheduled(0.0);
log.debug("调用存储过程UspInsertShopOrder成功,工艺路线订单号: {}, 工序号: {}, 操作: {}",
item.getOrderNo(), item.getItemNo(), getMethodDesc(item.getMethod()));
}
/**

Loading…
Cancel
Save