常熟吴彦祖 5 days ago
parent
commit
b39e24895d
  1. 134
      src/main/java/com/letian/modules/pda/dao/impl/ProcedureDaoImpl.java
  2. 15
      src/main/java/com/letian/modules/pda/service/impl/OutBoundServiceImpl.java
  3. 14
      src/main/java/com/letian/modules/production/service/impl/PalletServiceImpl.java

134
src/main/java/com/letian/modules/pda/dao/impl/ProcedureDaoImpl.java

@ -13,8 +13,16 @@ import org.springframework.stereotype.Repository;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.*; import java.sql.*;
import java.sql.Date; import java.sql.Date;
import java.util.*;
import java.util.logging.Logger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
/** /**
* *
@ -27,60 +35,98 @@ import java.util.logging.Logger;
@Repository @Repository
public class ProcedureDaoImpl implements ProcedureDao { public class ProcedureDaoImpl implements ProcedureDao {
private static final Logger log = LoggerFactory.getLogger(ProcedureDaoImpl.class);
@Autowired @Autowired
private JdbcTemplate jdbcTemplate; private JdbcTemplate jdbcTemplate;
/**
* 输出 JDBC/SQL Server 异常链 SQLException.getNextException便于定位库端真实报错rqrq
*/
private void logJdbcThrowableChain(String context, Throwable throwable) {
if (throwable == null) {
return;
}
Throwable t = throwable;
Set<Throwable> seen = Collections.newSetFromMap(new IdentityHashMap<>());
int depth = 0;
while (t != null && !seen.contains(t) && depth < 50) {
seen.add(t);
log.error("{} 异常链 depth={} class={} message={}", context, depth, t.getClass().getName(), t.getMessage());
if (t instanceof SQLException) {
SQLException next = ((SQLException) t).getNextException();
int nx = 0;
while (next != null && nx < 20) {
log.error("{} SQLException.getNextException[{}] SQLState={} errorCode={} message={}", context, nx,
next.getSQLState(), next.getErrorCode(), next.getMessage());
next = next.getNextException();
nx++;
}
}
t = t.getCause();
depth++;
}
}
@Override @Override
public List<Map<String, Object>> soReceiveFgRmBackflush(String site, String orderNo, Date transDate, public List<Map<String, Object>> soReceiveFgRmBackflush(String site, String orderNo, Date transDate,
String transNo, float itemNo, float oldQty, float newQty, String OrderType, String userId, String receiver, String transNo, float itemNo, float oldQty, float newQty, String OrderType, String userId, String receiver,
String partnerId) { String partnerId) {
return jdbcTemplate.execute(new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection con) throws SQLException {
String sql = "EXEC SO_Receive_FG_RMBackflush ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?";
CallableStatement cs = con.prepareCall(sql);
cs.setString(1, site);
cs.setString(2, orderNo);
cs.setDate(3, transDate);
cs.setString(4, transNo);
cs.setFloat(5, itemNo);
cs.setFloat(6, oldQty);
cs.setFloat(7, newQty);
cs.setString(8, OrderType);
cs.setString(9, userId);
cs.setString(10, receiver);
cs.setString(11, partnerId);
return cs;
}
}, new CallableStatementCallback<List<Map<String, Object>>>() {
final String ctx = "SO_Receive_FG_RMBackflush site=" + site + " orderNo=" + orderNo + " transNo=" + transNo;
log.info(
"SO_Receive_FG_RMBackflush 入参 site={} orderNo={} transDate={} transNo={} itemNo={} oldQty={} newQty={} OrderType={} userId={} receiver={} partnerId={}",
site, orderNo, transDate, transNo, itemNo, oldQty, newQty, OrderType, userId, receiver, partnerId);
try {
return jdbcTemplate.execute(new CallableStatementCreator() {
@Override
public List<Map<String, Object>> doInCallableStatement(CallableStatement cs)
throws SQLException, DataAccessException {
List<Map<String, Object>> resultList = new ArrayList<>();
ResultSet rs = cs.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
//处理列名
Map<String, Object> columnMap = new HashMap<>();
for(int i = 1; i <= columns; i++){
columnMap.put(rsmd.getColumnName(i), null);
@Override
public CallableStatement createCallableStatement(Connection con) throws SQLException {
String sql = "EXEC SO_Receive_FG_RMBackflush ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?";
CallableStatement cs = con.prepareCall(sql);
cs.setString(1, site);
cs.setString(2, orderNo);
cs.setDate(3, transDate);
cs.setString(4, transNo);
cs.setFloat(5, itemNo);
cs.setFloat(6, oldQty);
cs.setFloat(7, newQty);
cs.setString(8, OrderType);
cs.setString(9, userId);
cs.setString(10, receiver);
cs.setString(11, partnerId);
return cs;
} }
//循环处理数据
while(rs.next()){
Map<String, Object> resultMap = new HashMap<String, Object>();
//循环出当前行的所有数据
for(String str : columnMap.keySet()){
resultMap.put(str, rs.getObject(str));
}, new CallableStatementCallback<List<Map<String, Object>>>() {
@Override
public List<Map<String, Object>> doInCallableStatement(CallableStatement cs)
throws SQLException, DataAccessException {
List<Map<String, Object>> resultList = new ArrayList<>();
ResultSet rs = cs.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
//处理列名
Map<String, Object> columnMap = new HashMap<>();
for (int i = 1; i <= columns; i++) {
columnMap.put(rsmd.getColumnName(i), null);
} }
resultList.add(resultMap);
//循环处理数据
while (rs.next()) {
Map<String, Object> resultMap = new HashMap<String, Object>();
//循环出当前行的所有数据
for (String str : columnMap.keySet()) {
resultMap.put(str, rs.getObject(str));
}
resultList.add(resultMap);
}
return resultList;
} }
return resultList;
}
});
});
} catch (RuntimeException ex) {
log.error("{} 调用失败(即将抛出)", ctx, ex);
logJdbcThrowableChain(ctx, ex);
throw ex;
}
} }

15
src/main/java/com/letian/modules/pda/service/impl/OutBoundServiceImpl.java

@ -254,6 +254,21 @@ public class OutBoundServiceImpl implements OutBoundService {
String userId = inData.getUserId(); String userId = inData.getUserId();
String creditFlag = inData.getCreditFlag(); String creditFlag = inData.getCreditFlag();
String palletFlag= inData.getPalletFlag(); String palletFlag= inData.getPalletFlag();
// 出库前重新校验通知单主表CustomerID防止前端参数不一致rqrq
List<NotifyHeaderOutData> notifyHeaders = outBoundDao.getNotifyHeadersByCon(site, delNotifyNo);
if(notifyHeaders.size() != 1){
throw new RuntimeException("通知单号:" + delNotifyNo + "不存在或数据异常,不允许保存!");
}
NotifyHeaderOutData notifyHeader = notifyHeaders.get(0);
String dbCustomerId = notifyHeader.getCustomerId();
if(dbCustomerId == null || "".equals(dbCustomerId.trim())){
throw new RuntimeException("通知单号:" + delNotifyNo + "的CustomerID为空,不允许保存!");
}
if(customerId != null && !"".equals(customerId.trim()) && !dbCustomerId.equals(customerId)){
logger.warn("outBoundOperation CustomerID不一致,使用数据库值。site={}, delNotifyNo={}, requestCustomerId={}, dbCustomerId={}",
site, delNotifyNo, customerId, dbCustomerId);
}
customerId = dbCustomerId;
//生成销售订单号 //生成销售订单号
String salesOrderNo = procedureFunctionDao.getCoDeliveryDelNo(site, new Date()); String salesOrderNo = procedureFunctionDao.getCoDeliveryDelNo(site, new Date());
//CoDelHeader生成数据 //CoDelHeader生成数据

14
src/main/java/com/letian/modules/production/service/impl/PalletServiceImpl.java

@ -259,9 +259,17 @@ public class PalletServiceImpl implements PalletService {
logger.info("发料"+ qtyList.get(i).getOrderNo()+"开始"); logger.info("发料"+ qtyList.get(i).getOrderNo()+"开始");
logger.info("发料参数:"+site+";"+qtyList.get(i).getOrderNo()+";"+new java.sql.Date(new Date().getTime())+";"+ transNo+";"+"1f"+";"+"0f"+";"+ logger.info("发料参数:"+site+";"+qtyList.get(i).getOrderNo()+";"+new java.sql.Date(new Date().getTime())+";"+ transNo+";"+"1f"+";"+"0f"+";"+
qtyList.get(i).getQty()+";"+ "so"+";"+userId+";"+ userId+";"+""); qtyList.get(i).getQty()+";"+ "so"+";"+userId+";"+ userId+";"+"");
//先执行生产发料的动作
List<Map<String, Object>> resultList = procedureDao.soReceiveFgRmBackflush(site, qtyList.get(i).getOrderNo(), new java.sql.Date(new Date().getTime()), transNo, 1f, 0f,
qtyList.get(i).getQty(), "so", userId, userId, "");
//先执行生产发料的动作失败时 DAO 会打完整 JDBC/SQL 异常链日志此处附业务键便于检索rqrq
List<Map<String, Object>> resultList;
try {
resultList = procedureDao.soReceiveFgRmBackflush(site, qtyList.get(i).getOrderNo(), new java.sql.Date(new Date().getTime()), transNo, 1f, 0f,
qtyList.get(i).getQty(), "so", userId, userId, "");
} catch (RuntimeException ex) {
logger.error(
"transInPallet 发料存储过程失败 site={} palletNo={} orderNo={} transNo={} qtyIdx={} qty={} userId={}",
site, palletNo, qtyList.get(i).getOrderNo(), transNo, i, qtyList.get(i).getQty(), userId, ex);
throw ex;
}
logger.info(resultList.toString()); logger.info(resultList.toString());
//判断是否可以继续操作 //判断是否可以继续操作
Map<String, Object> resultMap = resultList.get(0); Map<String, Object> resultMap = resultList.get(0);

Loading…
Cancel
Save