Browse Source

SAP 生产收货transNo 引起的BUG

master
rui_li 4 weeks ago
parent
commit
43132c2772
  1. 6
      src/main/java/com/gaotao/modules/pda/controller/ProduceController.java
  2. 15
      src/main/java/com/gaotao/modules/pda/service/ProduceService.java
  3. 155
      src/main/java/com/gaotao/modules/pda/service/impl/ProduceServiceImpl.java

6
src/main/java/com/gaotao/modules/pda/controller/ProduceController.java

@ -210,7 +210,11 @@ public class ProduceController {
@ResponseBody
public Object endCurrentScan(HttpServletRequest request, String depot){
HttpSession session = request.getSession();
ResponseData responseData = produceService.endCurrentScan(session, xuJieConfig.getWebservice(), depot);
//获取创建的交易单号
String transNo = produceService.getTransNo("1", "SR");
//ResponseData responseData = produceService.endCurrentScan(session, xuJieConfig.getWebservice(), depot);
ResponseData responseData = produceService.endCurrentScanNew(session, xuJieConfig.getWebservice(), depot, transNo);
return responseData;
}

15
src/main/java/com/gaotao/modules/pda/service/ProduceService.java

@ -88,4 +88,19 @@ public interface ProduceService {
*/
ResponseData endCurrentScan(HttpSession session, String webservice, String depot);
/**
* @description: 交易单号生成
* @author LR
* @date 2026-7-7 14:49
* @version 1.0
*/
String getTransNo(String site, String transType);
/**
* @description: 结束扫描发送数据
* @author LR
* @date 2026-7-7 14:51
* @version 1.0
*/
ResponseData endCurrentScanNew(HttpSession session, String webservice, String depot, String transNo);
}

155
src/main/java/com/gaotao/modules/pda/service/impl/ProduceServiceImpl.java

@ -623,4 +623,159 @@ public class ProduceServiceImpl implements ProduceService {
return responseData;
}
@Override
@Transactional
public String getTransNo(String site, String transType) {
String transNo = transNoDao.getTransNo("1", "SR");
//更新当前的交易号
transNoDao.updateTransNo("1", "SR");
return transNo;
}
@Override
@Transactional
public ResponseData endCurrentScanNew(HttpSession session, String webservice, String depot, String transNo) {
ResponseData responseData = new ResponseData();
//获取生产入库的标记
Object produce_submit_flag = session.getAttribute("produce_submit_flag");
if(null == produce_submit_flag){
//设置库存转储的结束标记
session.setAttribute("produce_submit_flag", "Y");
}else{
responseData.setCode("500");
responseData.setMsg("不允许重复提交!");
return responseData;
}
//从session中获取sap数据
Map<String, Object> produceToSap = (Map<String, Object>) session.getAttribute("produceToSap");
String orderNo = session.getAttribute("produce_order_no").toString();
//获取用户名
SysUserEntity auth = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
String userid = auth.getUsername();
//根据userid获取user
// todo Users user = userDao.findByUserId(userid);
//获取所有未入库的成品卷号数据
List<FPRollsOutData> fg_rolls = fPRollsDao.getFGRollsByOrderNo(orderNo, auth.getSite());
Map<String, FPRollsOutData> fg_rollMap = new HashMap<>();
//转换成map
for(FPRollsOutData fgRoll : fg_rolls){
fg_rollMap.put(fgRoll.getRollNo(), fgRoll);
}
//获取session中的卷号记录
Map<String, String> produceRollNos = (Map<String, String>) session.getAttribute("produceRollNos");
List<String> errorStatusRollNos = new ArrayList<>();
List<FPRollsOutData> scanedRolls = new ArrayList<>();
//判断状态是否正确
for(String str : produceRollNos.keySet()){
boolean errorFlag = fg_rollMap.containsKey(str);
if(!errorFlag){
errorStatusRollNos.add(str);
}else{
FPRollsOutData temp = fg_rollMap.get(str);
temp.setStatus("已入库");
temp.setStatusDb("I");
scanedRolls.add(temp);
}
}
//判断是否可以结束
int size = errorStatusRollNos.size();
if(size==0){
//从session中获取sap数据
StringBuilder xmlParams = new StringBuilder();
xmlParams.append("<BOM><BO><AdmInfo><Object>59</Object><Version>2</Version></AdmInfo>");
xmlParams.append("<Documents><row><DocDate>"+ DateUtils.getStringDate(new Date(), "yyyyMMdd")+"</DocDate>");
xmlParams.append("<DocDueDate>"+DateUtils.getStringDate(new Date(), "yyyyMMdd")+"</DocDueDate>");
xmlParams.append("<U_MESTransNo>"+transNo+"</U_MESTransNo></row></Documents>");
//发送的参数
xmlParams.append("<Document_Lines>");
//需要保存的transdetails
List<TransDetail> transDetails = new ArrayList<>();
//临时的itemnNo
Map<String, String> tempItemNos = new HashMap<>();
int itemNo = 1;
Map<String, Float> shopOrderMap = new HashMap<>();
for(String str : produceToSap.keySet()){
Map<String, Object> currentRollSap = (Map<String, Object>) produceToSap.get(str);
xmlParams.append("<row><BaseType>202</BaseType>");
xmlParams.append("<BaseEntry>"+orderNo+"</BaseEntry>");
xmlParams.append("<Quantity>"+currentRollSap.get("nums").toString()+"</Quantity>");
xmlParams.append("<WarehouseCode>"+depot+"</WarehouseCode></row>");
//处理参数
tempItemNos.put(orderNo, itemNo+"");
shopOrderMap.put(orderNo, Float.parseFloat(currentRollSap.get("nums").toString()));
TransDetail transDetail = new TransDetail(auth.getSite(), transNo, itemNo+"", currentRollSap.get("partNo").toString(),
Double.parseDouble(currentRollSap.get("nums").toString()), "*",
depot, "+", orderNo, null, null, null, null, null);
transDetails.add(transDetail);
itemNo++;
}
xmlParams.append("</Document_Lines></BO></BOM>");
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put("xmlDocument", xmlParams.toString());
String url = webservice+"/ImportReceiptFromProduction";
logger.info("请求webservice的路径:"+url);
logger.info("请求webservice的参数:"+xmlParams.toString());
responseData = HttpClientUtil.doGet(url, paramsMap);
if(!"200".equals(responseData.getCode())){
responseData.setCode("500");
responseData.setMsg("SAP服务出错!");
//10.移除提交标记
session.removeAttribute("produce_submit_flag");
return responseData;
}
//判断是否保存成功
if("200".equals(responseData.getCode())){
String str = responseData.getMsg();
XMLSerializer xmlSerializer = new XMLSerializer();
String js = xmlSerializer.read(str).toString();
JSONObject jsonObject = JSONObject.fromObject(js);
Map<String, Object> map = jsonObject.getJSONObject("ResponseMessage");
String code = map.get("Code").toString();
logger.info("请求webservice的结果:"+responseData.getMsg());
//任务失败返回信息
if("1".equals(code)){
String msg = map.get("Message").toString();
responseData.setCode("500");
responseData.setMsg(msg);
//删除提交过程中的标记允许下一次提交
session.removeAttribute("produce_submit_flag");
}else{
String sapNo = map.get("DocEntry").toString();
//新建一个transHeader
TransHeader transHeader = new TransHeader(auth.getSite(), transNo, "SR",auth.getUsername(), auth.getUserDisplay());
//设置Sap回写单号
transHeader.setOrderRef1(sapNo);
//保存当前交易记录
transHeaderDao.saveTransHeader(transHeader);
//需要保存的列表
List<TransDetailSub> saveTransDetailSub = new ArrayList<>();
//已扫描的卷转成transdetailroll
for(int i = 0;i<scanedRolls.size();i++){
String current_itemNo = tempItemNos.get(orderNo);
TransDetailSub tempTransDetailSub = new TransDetailSub("1", transNo, current_itemNo, scanedRolls.get(i).getRollNo(),
scanedRolls.get(i).getRollQty(), "+", orderNo, scanedRolls.get(i).getOrderRef3(),
null, null, null, null);
saveTransDetailSub.add(tempTransDetailSub);
}
//批量保存transDetail
transDetailDao.batchInsert(transDetails);
//批量修改卷号状态
fPRollsDao.batchUpdateRoll(scanedRolls, depot);
//批量插入明细
transDetailSubDao.batchInsert(saveTransDetailSub);
//刷新shoporder的finishedQty
shopOrderDao.batchUpdateQty(shopOrderMap);
goBackHome(session);
responseData.setCode("200");
responseData.setMsg("生产收货订单:"+sapNo+"已生成!");
}
}
}else{
responseData.setCode("501");
responseData.setObj(errorStatusRollNos);
}
return responseData;
}
}
Loading…
Cancel
Save