|
|
@@ -36,185 +36,166 @@ public class ERPServiceImpl implements ERPService {
|
|
|
@Autowired
|
|
|
private VwmsConfig vwmsConfig;
|
|
|
|
|
|
- @Autowired
|
|
|
- private ObjectMapper objectMapper; // 注入Jackson的ObjectMapper
|
|
|
-
|
|
|
@Autowired
|
|
|
private DocCommonService docCommonService;
|
|
|
|
|
|
@Override
|
|
|
- public Map<String, Object> sendProd(String master, String ids,String emCode,String caller) {
|
|
|
- Map<String,Object> retMap = new HashMap<>();
|
|
|
- retMap.put("success",true);
|
|
|
- logger.info("sendProd-Begin:master {} ids {}",master,ids);
|
|
|
-// SpObserver.putSp(master);//没有用
|
|
|
+ public Map<String, Object> sendProd(String master, String id, String emCode, String caller) {
|
|
|
+ Map<String, Object> retMap = new HashMap<>();
|
|
|
+ retMap.put("success", true);
|
|
|
+ logger.info("sendProd-Begin:master {} id {}", master, id);
|
|
|
// 执行查询
|
|
|
SqlRowList docMsg = baseDao.queryForRowSet(" select nvl(pr_sendwmsflag,0) pr_sendwmsflag,pr_id,pr_code,pr_detail,pr_spec,pr_brand,pr_xsl_user,pr_hsl_user,pr_psl_user " +
|
|
|
- " from "+master+".product where pr_id in ("+ids+") ");
|
|
|
- if(!docMsg.hasNext()){
|
|
|
- baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr='没有需要同步的商品(品牌需设置对接MWS)。' where pr_id IN ("+ids+")");
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message","没有需要同步的商品(品牌需设置对接MWS)。");
|
|
|
+ " from " + master + ".product where pr_id = " + id);
|
|
|
+ if (!docMsg.next()) {
|
|
|
+ baseDao.execute("update " + master + ".product set pr_sendwmsstatus='同步失败',pr_sendwmserr='没有需要同步的商品。' where pr_id = " + id);
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "没有需要同步的商品。");
|
|
|
return retMap;
|
|
|
}
|
|
|
- List<Map<String, Object>> docMsgResultList = docMsg.getResultList();
|
|
|
- // 按 pr_sendwmsflag 分组
|
|
|
- Map<Object, List<Map<String, Object>>> groupedByFlag = docMsgResultList.stream()
|
|
|
- .collect(Collectors.groupingBy(map -> map.get("pr_sendwmsflag")));
|
|
|
StringBuffer errMsg = new StringBuffer();
|
|
|
// 处理分组后的数据
|
|
|
- groupedByFlag.forEach((sendflag, list) -> {
|
|
|
- logger.info("Flag: {}, Count: {}", sendflag, list.size());
|
|
|
- // 其他处理逻辑
|
|
|
- String actionType = "update";
|
|
|
- String actionTypeName = "更新";
|
|
|
- if("0".equals(String.valueOf(sendflag))){
|
|
|
- actionType = "add";
|
|
|
- actionTypeName = "创建";
|
|
|
- }
|
|
|
- Map<String, Object> res = sendProdSigle(master,actionType,list);
|
|
|
- if(!res.get("success").equals(true)){
|
|
|
- if(errMsg.length()>0){
|
|
|
- errMsg.append("</br>");
|
|
|
- }
|
|
|
- errMsg.append("执行:"+actionTypeName+"操作失败:"+res.get("message"));
|
|
|
+ String sendflag = docMsg.getGeneralString("pr_sendwmsflag");
|
|
|
+ logger.info("Flag: {}", sendflag);
|
|
|
+ // 其他处理逻辑
|
|
|
+ String actionType = "update";
|
|
|
+ String actionTypeName = "更新";
|
|
|
+ if ("0".equals(String.valueOf(sendflag))) {
|
|
|
+ actionType = "add";
|
|
|
+ actionTypeName = "创建";
|
|
|
+ }
|
|
|
+ //需要调用三次对接方法
|
|
|
+ String[] masterList = new String[]{"YUEJH_TEST", "YJH_T", "YIT_T"};//YUEJH、AIFL、YJH_HK
|
|
|
+ for (String m : masterList) {
|
|
|
+ Map<String, Object> res = sendProdSigle(m, actionType, docMsg.getCurrentMap());
|
|
|
+ if (!res.get("success").equals(true)) {
|
|
|
+ if(StringUtil.hasText(res.get("message"))){
|
|
|
+ if(errMsg.length()>0){
|
|
|
+ errMsg.append("</br>");
|
|
|
+ }
|
|
|
+ errMsg.append(res.get("message"));
|
|
|
+ }
|
|
|
}
|
|
|
- });
|
|
|
- if(errMsg.length()>0){
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message",errMsg.toString());
|
|
|
- return retMap;
|
|
|
}
|
|
|
- logger.info("sendProd-End:master {} ids {}",master,ids);
|
|
|
- retMap.put("message","同步成功。");
|
|
|
+ if (errMsg.length() > 0) {
|
|
|
+ logger.info("sendProd-End-F:master {} id {} message {}", master, id,errMsg.toString());
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", errMsg.toString());
|
|
|
+ baseDao.execute("update " + master + ".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:" + actionTypeName + "</br>" + errMsg.toString().replaceAll("'", "''") + "') " +
|
|
|
+ " where pr_id = " + id);
|
|
|
+ }else {
|
|
|
+ logger.info("sendProd-End-S:master {} id {}", master, id);
|
|
|
+ retMap.put("message", "同步成功。");
|
|
|
+ baseDao.execute("update " + master + ".product set pr_sendwmsstatus='同步成功' ,pr_sendwmserr=null where pr_id = " + id);
|
|
|
+ }
|
|
|
return retMap;
|
|
|
}
|
|
|
- private Map<String, Object> sendProdSigle(String master,String actionType,List<Map<String, Object>> list){
|
|
|
+
|
|
|
+ private Map<String, Object> sendProdSigle(String master, String actionType, Map<String, Object> map) {
|
|
|
List<Object> docCodes = new ArrayList<>();
|
|
|
StringBuffer errMsg = new StringBuffer();
|
|
|
String eMsg = "";
|
|
|
Map<String, Object> retMap = new HashMap<>();
|
|
|
- retMap.put("success",true);
|
|
|
- if(CollectionUtil.isEmpty(list)){
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message","没有需要同步的商品(品牌需设置对接MWS)。");
|
|
|
- return retMap;
|
|
|
- }
|
|
|
- String ownerCode = master;//注意如果是资料中心 需要调用三次对接方法
|
|
|
- if("YUEJH_TEST".equals(master)){
|
|
|
+ retMap.put("success", true);
|
|
|
+ String ownerCode = master;
|
|
|
+ String ownerName = "越加红";
|
|
|
+ if ("YUEJH_TEST".equals(master)) {
|
|
|
ownerCode = "YUEJH";
|
|
|
}
|
|
|
- if("YJH_T".equals(master)){
|
|
|
+ if ("YJH_T".equals(master)) {
|
|
|
ownerCode = "AIFL";
|
|
|
+ ownerName = "艾富利";
|
|
|
}
|
|
|
- if("YIT_T".equals(master)){
|
|
|
+ if ("YIT_T".equals(master)) {
|
|
|
ownerCode = "YJH_HK";
|
|
|
+ ownerName = "越加红香港";
|
|
|
+ }
|
|
|
+ if (map == null || !StringUtil.hasText(map.get("pr_code"))) {
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "账套:"+ownerName+"没有需要同步的商品。");
|
|
|
+ return retMap;
|
|
|
}
|
|
|
- for (Map<String, Object> map : list) {
|
|
|
- String prCode = map.get("pr_code").toString();
|
|
|
- // 创建ProductReq对象
|
|
|
- docCodes.add(map.get("pr_code"));
|
|
|
- logger.info("sendProd-test: id {} code {}",map.get("pr_id"),prCode);
|
|
|
- // 创建ProductReq对象
|
|
|
- ProductReq productReq = new ProductReq();
|
|
|
- productReq.setItemCode(prCode.toString());
|
|
|
- productReq.setItemName(StringUtil.nvl(map.get("pr_detail")," "));
|
|
|
- productReq.setBrandName(StringUtil.nvl(map.get("pr_brand")," "));
|
|
|
- productReq.setBoxQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_xsl_user"),"0")));
|
|
|
- productReq.setSecondQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_hsl_user"),"0")));
|
|
|
- productReq.setThirdQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_psl_user"),"0")));
|
|
|
- productReq.setSkuProperty(StringUtil.nvl(map.get("pr_spec")," "));
|
|
|
- // 创建BaseReq对象
|
|
|
- BaseItemReq<ProductReq> prodBaseItemReq = new BaseItemReq();
|
|
|
- prodBaseItemReq.setActionType(actionType);
|
|
|
- prodBaseItemReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
|
|
|
- prodBaseItemReq.setOwnerCode(ownerCode);
|
|
|
-// prodBaseItemReq.setOutBizCode("sendProd-"+System.currentTimeMillis());
|
|
|
- prodBaseItemReq.setItem(productReq);
|
|
|
- try {
|
|
|
- // 创建XmlMapper实例
|
|
|
- XmlMapper xmlMapper = new XmlMapper();
|
|
|
- String xml = xmlMapper.writeValueAsString(prodBaseItemReq);
|
|
|
- logger.info("Request XML: {}", xml);
|
|
|
- HttpUtil.Response response= HttpUtil.postXmlToVWMS("singleitem.synchronize",xml, "UTF-8",vwmsConfig);
|
|
|
+ String prCode = map.get("pr_code").toString();
|
|
|
+ // 创建ProductReq对象
|
|
|
+ docCodes.add(map.get("pr_code"));
|
|
|
+ logger.info("sendProd-test: id {} code {} ownerCode {}", map.get("pr_id"), prCode,ownerCode);
|
|
|
+ // 创建ProductReq对象
|
|
|
+ ProductReq productReq = new ProductReq();
|
|
|
+ productReq.setItemCode(prCode.toString());
|
|
|
+ productReq.setItemName(StringUtil.nvl(map.get("pr_detail"), " "));
|
|
|
+ productReq.setBrandName(StringUtil.nvl(map.get("pr_brand"), " "));
|
|
|
+ productReq.setBoxQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_xsl_user"), "0")));
|
|
|
+ productReq.setSecondQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_hsl_user"), "0")));
|
|
|
+ productReq.setThirdQuantity(Long.valueOf(StringUtil.nvl(map.get("pr_psl_user"), "0")));
|
|
|
+ productReq.setSkuProperty(StringUtil.nvl(map.get("pr_spec"), " "));
|
|
|
+ // 创建BaseReq对象
|
|
|
+ BaseItemReq<ProductReq> prodBaseItemReq = new BaseItemReq();
|
|
|
+ prodBaseItemReq.setActionType(actionType);
|
|
|
+ prodBaseItemReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
|
|
|
+ prodBaseItemReq.setOwnerCode(ownerCode);
|
|
|
+ prodBaseItemReq.setItem(productReq);
|
|
|
+ try {
|
|
|
+ // 创建XmlMapper实例
|
|
|
+ XmlMapper xmlMapper = new XmlMapper();
|
|
|
+ String xml = xmlMapper.writeValueAsString(prodBaseItemReq);
|
|
|
+ logger.info("Request XML: {}", xml);
|
|
|
+ HttpUtil.Response response = HttpUtil.postXmlToVWMS("singleitem.synchronize", xml, "UTF-8", vwmsConfig);
|
|
|
// System.out.println("responseText:"+responseText);
|
|
|
- // 解析XML响应
|
|
|
- if(!String.valueOf(response.getStatusCode()).startsWith("2")){
|
|
|
- eMsg = StringUtil.nvl(response.getResponseText(),"未知");
|
|
|
- retMap.put("success", false);
|
|
|
- retMap.put("message", "请求失败:"+response.getStatusCode()+":"+eMsg);
|
|
|
- baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
|
|
|
- " where pr_code ='"+prCode+"'");
|
|
|
- }else {
|
|
|
- retMap.put("success",true);
|
|
|
- ProdResp prodResp = xmlMapper.readValue(response.getResponseText(), ProdResp.class);
|
|
|
- if(prodResp!=null){
|
|
|
- //默认成功
|
|
|
- baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步成功' ,pr_sendwmserr=null where pr_code = '"+prCode+"'");
|
|
|
- if("success".equals(prodResp.getFlag())){
|
|
|
- logger.info("response-success prcode: {}",prodResp.getItemId());
|
|
|
- }else {
|
|
|
- retMap.put("success",false);
|
|
|
- logger.info("response-failure code: {} message: {}", prodResp.getCode(),prodResp.getMessage());
|
|
|
- eMsg = StringUtil.nvl(prodResp.getMessage(),"无");
|
|
|
- baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败',pr_sendwmserr=('操作:"+actionType+":"+eMsg.replaceAll("'","''")+"') " +
|
|
|
- " where pr_code ='"+prCode+"'");
|
|
|
- retMap.put("message", eMsg);
|
|
|
- }
|
|
|
- baseDao.execute("update "+master+".product set pr_sendwmsflag=-1 where pr_code = '"+prCode+"' AND NVL(pr_sendwmsflag,0) = 0 AND pr_sendwmsstatus='同步成功'");
|
|
|
- }else {
|
|
|
- retMap.put("success", false);
|
|
|
- retMap.put("message", "转换失败:"+response.getStatusCode()+":"+response.getResponseText());
|
|
|
+ // 解析XML响应
|
|
|
+ if (!String.valueOf(response.getStatusCode()).startsWith("2")) {
|
|
|
+ eMsg = "请求失败:" + response.getStatusCode() + ":" +StringUtil.nvl(response.getResponseText(), "未知");
|
|
|
+ } else {
|
|
|
+ ProdResp prodResp = xmlMapper.readValue(response.getResponseText(), ProdResp.class);
|
|
|
+ if (prodResp != null) {
|
|
|
+ if ("success".equals(prodResp.getFlag())) {
|
|
|
+ logger.info("response-success ownerCode {} prcode: {}", ownerCode,prodResp.getItemId());
|
|
|
+ } else {
|
|
|
+ logger.info("response-failure ownerCode {} code: {} message: {}", ownerCode,prodResp.getCode(), prodResp.getMessage());
|
|
|
+ eMsg = StringUtil.nvl(prodResp.getMessage(), "无");
|
|
|
}
|
|
|
+ } else {
|
|
|
+ eMsg="转换失败:" + response.getStatusCode() + ":" + response.getResponseText();
|
|
|
}
|
|
|
- //TODO 考虑记录日志
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
- e.printStackTrace();
|
|
|
- logger.info("sendProd-Error:JSON转换失败 codes {} ",prCode);
|
|
|
- retMap.put("success", false);
|
|
|
- retMap.put("message", "JSON转换失败");
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- eMsg = StringUtil.nvl(e.getMessage(),"无");
|
|
|
- baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败' ,pr_sendwmserr='操作:"+actionType+":"+eMsg+"' where pr_code = ’"+prCode+"'");
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- if(StringUtil.hasText(eMsg)){
|
|
|
- errMsg.append("物料编号:").append(prCode).append(eMsg);
|
|
|
}
|
|
|
+ //TODO 考虑记录日志
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ eMsg = StringUtil.nvl(e.getMessage(), "无");
|
|
|
}
|
|
|
- if(errMsg.length()>0){
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message",errMsg.toString());
|
|
|
+ if (StringUtil.hasText(eMsg)) {
|
|
|
+ errMsg.append("账套:").append(ownerName).append(eMsg);
|
|
|
+ }
|
|
|
+ if (errMsg.length() > 0) {
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", errMsg.toString());
|
|
|
return retMap;
|
|
|
}
|
|
|
return retMap;
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public Map<String, Object> sendIO(String master, String id, String emCode, String caller) {
|
|
|
- Map<String,Object> retMap = new HashMap<>();
|
|
|
- retMap.put("success",true);
|
|
|
- logger.info("sendIO-Begin:master {} id {}",master,id);
|
|
|
+ Map<String, Object> retMap = new HashMap<>();
|
|
|
+ retMap.put("success", true);
|
|
|
+ logger.info("sendIO-Begin:master {} id {}", master, id);
|
|
|
// 执行查询
|
|
|
- if(!baseDao.checkIf(master+".prodiodetail left join "+master+".product on pr_code = pd_prodcode "
|
|
|
- ,"pd_piid = "+id+" and nvl(pr_sendwmsflag,0) = -1")){
|
|
|
- logger.info("sendIO-End:master {} id {} res {}",master,id,"没有需要对接的明细。");
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message","没有需要对接的明细。");
|
|
|
+ if (!baseDao.checkIf(master + ".prodiodetail left join " + master + ".product on pr_code = pd_prodcode "
|
|
|
+ , "pd_piid = " + id + " and nvl(pr_sendwmsflag,0) = -1")) {
|
|
|
+ logger.info("sendIO-End:master {} id {} res {}", master, id, "没有需要对接的明细。");
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "没有需要对接的明细。");
|
|
|
return retMap;
|
|
|
}
|
|
|
- ProdInout prodInOut = docCommonService.getIO(master,id);
|
|
|
- if(CollectionUtil.isEmpty(prodInOut.getDetails())){
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message","没有需要同步的明细。");
|
|
|
+ ProdInout prodInOut = docCommonService.getIO(master, id);
|
|
|
+ if (CollectionUtil.isEmpty(prodInOut.getDetails())) {
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "没有需要同步的明细。");
|
|
|
return retMap;
|
|
|
}
|
|
|
- if(prodInOut.getPiWmsstatus().equals("已确认")){
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message","单据已确认采集,不允许重复同步。");
|
|
|
+ if (prodInOut.getPiWmsstatus().equals("已确认")) {
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "单据已确认采集,不允许重复同步。");
|
|
|
return retMap;
|
|
|
}
|
|
|
if (!StringUtil.hasText(prodInOut.getPiWmsInType())
|
|
|
@@ -223,37 +204,37 @@ public class ERPServiceImpl implements ERPService {
|
|
|
&& !prodInOut.getPiWmsInType().equals("out")
|
|
|
&& !prodInOut.getPiWmsInType().equals("transfer")
|
|
|
)) {
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message","WMS单据类型为空或异常,不允许同步。");
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "WMS单据类型为空或异常,不允许同步。");
|
|
|
return retMap;
|
|
|
}
|
|
|
//构建请求主体
|
|
|
String masterName = prodInOut.getCurrentMaster();
|
|
|
Long piId = prodInOut.getPiId();
|
|
|
String errMsg = null;
|
|
|
- if("in".equals(prodInOut.getPiWmsInType())){
|
|
|
- errMsg = docCommonService.sendInToWms(prodInOut,masterName);
|
|
|
+ if ("in".equals(prodInOut.getPiWmsInType())) {
|
|
|
+ errMsg = docCommonService.sendInToWms(prodInOut, masterName);
|
|
|
}
|
|
|
- if("out".equals(prodInOut.getPiWmsInType())){
|
|
|
- errMsg = docCommonService.sendOutToWms(prodInOut,masterName);
|
|
|
+ if ("out".equals(prodInOut.getPiWmsInType())) {
|
|
|
+ errMsg = docCommonService.sendOutToWms(prodInOut, masterName);
|
|
|
}
|
|
|
- if("transfer".equals(prodInOut.getPiWmsInType())){
|
|
|
- errMsg = docCommonService.sendOMoveToWms(prodInOut,masterName);
|
|
|
+ if ("transfer".equals(prodInOut.getPiWmsInType())) {
|
|
|
+ errMsg = docCommonService.sendOMoveToWms(prodInOut, masterName);
|
|
|
}
|
|
|
- if(errMsg!=null){
|
|
|
- if(errMsg.startsWith("OrderId:")){
|
|
|
- retMap.put("OrderId",errMsg.replaceAll("OrderId:",""));
|
|
|
- logger.info("sendIO-End-Sucess master {} piid {} OrderId {}",master,piId,errMsg.replaceAll("OrderId:",""));
|
|
|
+ if (errMsg != null) {
|
|
|
+ if (errMsg.startsWith("OrderId:")) {
|
|
|
+ retMap.put("OrderId", errMsg.replaceAll("OrderId:", ""));
|
|
|
+ logger.info("sendIO-End-Sucess master {} piid {} OrderId {}", master, piId, errMsg.replaceAll("OrderId:", ""));
|
|
|
//更新 WMSORDERID
|
|
|
- baseDao.execute("update "+master+".prodiowms set WMSORDERID = '"+errMsg.replaceAll("OrderId:","")+"' where PIID = "+piId);
|
|
|
- }else {
|
|
|
- errMsg = errMsg.replaceAll("'","''");
|
|
|
- logger.info("sendIO-End-failure master {} piid {} errorTip {}",master,piId,errMsg);
|
|
|
- retMap.put("success",false);
|
|
|
- retMap.put("message",errMsg);
|
|
|
+ baseDao.execute("update " + master + ".prodiowms set WMSORDERID = '" + errMsg.replaceAll("OrderId:", "") + "' where PIID = " + piId);
|
|
|
+ } else {
|
|
|
+ errMsg = errMsg.replaceAll("'", "''");
|
|
|
+ logger.info("sendIO-End-failure master {} piid {} errorTip {}", master, piId, errMsg);
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", errMsg);
|
|
|
}
|
|
|
- }else {
|
|
|
- logger.info("sendIO-End-success master {} piid {} ",master,piId);
|
|
|
+ } else {
|
|
|
+ logger.info("sendIO-End-success master {} piid {} ", master, piId);
|
|
|
}
|
|
|
return retMap;
|
|
|
}
|