|
|
@@ -4,10 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.uas.eis.config.VwmsConfig;
|
|
|
import com.uas.eis.dao.*;
|
|
|
-import com.uas.eis.entity.vwms.entity.Customer;
|
|
|
-import com.uas.eis.entity.vwms.entity.CustomerAddress;
|
|
|
-import com.uas.eis.entity.vwms.entity.VendorContact;
|
|
|
-import com.uas.eis.entity.vwms.entity.Vendor;
|
|
|
+import com.uas.eis.entity.vwms.entity.*;
|
|
|
import com.uas.eis.entity.vwms.req.*;
|
|
|
import com.uas.eis.entity.vwms.resp.BaseVastResp;
|
|
|
import com.uas.eis.service.ERPService;
|
|
|
@@ -17,6 +14,7 @@ import com.uas.eis.utils.StringUtil;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
@@ -88,7 +86,7 @@ public class ERPServiceImpl implements ERPService {
|
|
|
return retMap;
|
|
|
}
|
|
|
private Map<String, Object> sendProdSigle(String master,String actionType,List<Map<String, Object>> list){
|
|
|
- List<ProductReq> productReqList = new ArrayList<>();
|
|
|
+ List<ProductReq> prodList = new ArrayList<>();
|
|
|
List<Object> docCodes = new ArrayList<>();
|
|
|
String prCodes = "";
|
|
|
StringBuffer errMsg = new StringBuffer();
|
|
|
@@ -117,26 +115,28 @@ public class ERPServiceImpl implements ERPService {
|
|
|
setKey1(StringUtil.nvl(map.get("pr_zxbzs"),"0.0"));
|
|
|
}})
|
|
|
.build();
|
|
|
- productReqList.add(productReq);
|
|
|
+ prodList.add(productReq);
|
|
|
}
|
|
|
prCodes = "'"+docCodes.stream()
|
|
|
.map(String::valueOf)
|
|
|
.collect(Collectors.joining("','"))+"'";
|
|
|
// 创建BaseReq对象
|
|
|
- BaseVastReq<ProductReq> baseVastReq = new BaseVastReq.Builder<ProductReq>()
|
|
|
- .actionType(actionType)
|
|
|
- .warehouseCode(vwmsConfig.getWarehouseCode())
|
|
|
- .ownerCode(vwmsConfig.getOwnerCode())
|
|
|
- .outBizCode("sendProd-"+System.currentTimeMillis())
|
|
|
- .items(new BaseVastItem.Builder<ProductReq>().item(productReqList).build())
|
|
|
- .build();
|
|
|
+ BaseItemsReq<ProductReq> prodBaseItemsReq = new BaseItemsReq();
|
|
|
+ prodBaseItemsReq.setActionType(actionType);
|
|
|
+ prodBaseItemsReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
|
|
|
+ prodBaseItemsReq.setOwnerCode(vwmsConfig.getOwnerCode());
|
|
|
+ prodBaseItemsReq.setOutBizCode("sendProd-"+System.currentTimeMillis());
|
|
|
+ // 创建BaseVastItem对象
|
|
|
+ BaseItemsReq.BaseItems prodBaseItems = new BaseItemsReq<ProductReq>().new BaseItems<ProductReq>();
|
|
|
+ // 设置BaseVastItem的item属性
|
|
|
+ prodBaseItems.setItem(prodList);
|
|
|
+ prodBaseItemsReq.setItems(prodBaseItems);
|
|
|
// 创建RequestWrapper对象
|
|
|
- RequestWrapperVast<ProductReq> wrapper = new RequestWrapperVast.Builder<ProductReq>()
|
|
|
- .request(baseVastReq)
|
|
|
- .build();
|
|
|
+ BaseReq<BaseItemsReq<ProductReq>> prodBaseReq = new BaseReq();
|
|
|
+ prodBaseReq.setRequest(prodBaseItemsReq);
|
|
|
try {
|
|
|
// 将wrapper对象转换为JSON字符串
|
|
|
- String json = objectMapper.writeValueAsString(wrapper);
|
|
|
+ String json = objectMapper.writeValueAsString(prodBaseReq);
|
|
|
logger.info("Request JSON: {}", json);
|
|
|
//{{testapiurl}}?method=openapi.singleitem.synchronize×tamp=2025-03-04 15:45:00
|
|
|
// &format={{format}}&app_key={{app_key}}&v=2.0&sign=B21FFFE48507569E72D573359856B19B
|
|
|
@@ -207,7 +207,7 @@ public class ERPServiceImpl implements ERPService {
|
|
|
} 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 in ("+prCodes+")");
|
|
|
+ baseDao.execute("update "+master+".product set pr_sendwmsstatus='同步失败' ,pr_sendwmserr='操作:"+actionType+":"+eMsg+"' where pr_code in ("+prCodes+")");
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}
|
|
|
@@ -344,20 +344,22 @@ public class ERPServiceImpl implements ERPService {
|
|
|
.map(String::valueOf)
|
|
|
.collect(Collectors.joining("','"))+"'";
|
|
|
// 创建BaseReq对象
|
|
|
- BaseVastReq<PartnersReq> baseVastReq = new BaseVastReq.Builder<PartnersReq>()
|
|
|
- .actionType(actionType)
|
|
|
- .warehouseCode(vwmsConfig.getWarehouseCode())
|
|
|
- .ownerCode(vwmsConfig.getOwnerCode())
|
|
|
- .outBizCode("sendVend"+System.currentTimeMillis())
|
|
|
- .items(new BaseVastItem.Builder<PartnersReq>().item(regList).build())
|
|
|
- .build();
|
|
|
- // 创建RequestWrapper对象
|
|
|
- RequestWrapperVast<PartnersReq> wrapper = new RequestWrapperVast.Builder<PartnersReq>()
|
|
|
- .request(baseVastReq)
|
|
|
- .build();
|
|
|
+ BaseItemsReq<PartnersReq> vendBaseItemsReq = new BaseItemsReq();
|
|
|
+ vendBaseItemsReq.setActionType(actionType);
|
|
|
+ vendBaseItemsReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
|
|
|
+ vendBaseItemsReq.setOwnerCode(vwmsConfig.getOwnerCode());
|
|
|
+ vendBaseItemsReq.setOutBizCode("sendVend-"+System.currentTimeMillis());
|
|
|
+ // 创建BaseVastItem对象
|
|
|
+ BaseItemsReq.BaseItems vendBaseItems = new BaseItemsReq<PartnersReq>().new BaseItems<PartnersReq>();
|
|
|
+ // 设置BaseVastItem的item属性
|
|
|
+ vendBaseItems.setItem(regList);
|
|
|
+ vendBaseItemsReq.setItems(vendBaseItems);
|
|
|
+ // 创建BaseReq对象
|
|
|
+ BaseReq<BaseItemsReq<PartnersReq>> vendBaseReq = new BaseReq();
|
|
|
+ vendBaseReq.setRequest(vendBaseItemsReq);
|
|
|
try {
|
|
|
// 将wrapper对象转换为JSON字符串
|
|
|
- String json = objectMapper.writeValueAsString(wrapper);
|
|
|
+ String json = objectMapper.writeValueAsString(vendBaseReq);
|
|
|
logger.info("Request JSON: {}", json);
|
|
|
HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.partners.batchcreate", json,vwmsConfig);
|
|
|
if(!String.valueOf(response.getStatusCode()).startsWith("2")){
|
|
|
@@ -508,7 +510,7 @@ public class ERPServiceImpl implements ERPService {
|
|
|
}
|
|
|
|
|
|
private Map<String, Object> sendCustSigle(String master,String actionType,List<Customer> list){
|
|
|
- List<PartnersReq> regList = new ArrayList<>();
|
|
|
+ List<PartnersReq> custList = new ArrayList<>();
|
|
|
List<Object> docCodes = new ArrayList<>();
|
|
|
String codes = "";
|
|
|
StringBuffer errMsg = new StringBuffer();
|
|
|
@@ -548,26 +550,28 @@ public class ERPServiceImpl implements ERPService {
|
|
|
.collect(Collectors.toList()))
|
|
|
.build())
|
|
|
.build();
|
|
|
- regList.add(req);
|
|
|
+ custList.add(req);
|
|
|
}
|
|
|
codes = "'"+docCodes.stream()
|
|
|
.map(String::valueOf)
|
|
|
.collect(Collectors.joining("','"))+"'";
|
|
|
// 创建BaseReq对象
|
|
|
- BaseVastReq<PartnersReq> baseVastReq = new BaseVastReq.Builder<PartnersReq>()
|
|
|
- .actionType(actionType)
|
|
|
- .warehouseCode(vwmsConfig.getWarehouseCode())
|
|
|
- .ownerCode(vwmsConfig.getOwnerCode())
|
|
|
- .outBizCode("sendCust-"+System.currentTimeMillis())
|
|
|
- .items(new BaseVastItem.Builder<PartnersReq>().item(regList).build())
|
|
|
- .build();
|
|
|
- // 创建RequestWrapper对象
|
|
|
- RequestWrapperVast<PartnersReq> wrapper = new RequestWrapperVast.Builder<PartnersReq>()
|
|
|
- .request(baseVastReq)
|
|
|
- .build();
|
|
|
+ BaseItemsReq<PartnersReq> custBaseItemsReq = new BaseItemsReq();
|
|
|
+ custBaseItemsReq.setActionType(actionType);
|
|
|
+ custBaseItemsReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
|
|
|
+ custBaseItemsReq.setOwnerCode(vwmsConfig.getOwnerCode());
|
|
|
+ custBaseItemsReq.setOutBizCode("sendCust-"+System.currentTimeMillis());
|
|
|
+ // 创建BaseVastItem对象
|
|
|
+ BaseItemsReq.BaseItems custBaseItems = new BaseItemsReq<PartnersReq>().new BaseItems<PartnersReq>();
|
|
|
+ // 设置BaseVastItem的item属性
|
|
|
+ custBaseItems.setItem(custList);
|
|
|
+ custBaseItemsReq.setItems(custBaseItems);
|
|
|
+ // 创建BaseReq对象
|
|
|
+ BaseReq<BaseItemsReq<PartnersReq>> custBaseReq = new BaseReq();
|
|
|
+ custBaseReq.setRequest(custBaseItemsReq);
|
|
|
try {
|
|
|
// 将wrapper对象转换为JSON字符串
|
|
|
- String json = objectMapper.writeValueAsString(wrapper);
|
|
|
+ String json = objectMapper.writeValueAsString(custBaseReq);
|
|
|
logger.info("Request JSON: {}", json);
|
|
|
HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.partners.batchcreate", json,vwmsConfig);
|
|
|
if(!String.valueOf(response.getStatusCode()).startsWith("2")){
|
|
|
@@ -633,8 +637,274 @@ public class ERPServiceImpl implements ERPService {
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
eMsg = StringUtil.nvl(e.getMessage(),"无");
|
|
|
- baseDao.execute("update "+master+".customer set cu_sendwmsstatus='同步失败' ,cu_sendwmserr='操作:"+actionType+":"+eMsg+"' where cu_code in ("+codes+")");
|
|
|
+ baseDao.execute("update "+master+".customer set cu_sendwmsstatus='同步失败' ,cu_sendwmserr='操作:"+actionType+":"+eMsg+"' where cu_code in ("+codes+")");
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @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);
|
|
|
+ // 执行查询
|
|
|
+ if(!baseDao.checkIf(master+".prodiodetail left join "+master+".product on pr_code = pd_prodcode left join "+master+".productbrand on pb_name = pr_brand "
|
|
|
+ ,"pd_piid = "+id+" and pb_sendwms = -1")){
|
|
|
+ logger.info("sendIO-End:master {} id {} res {}",master,id,"没有需要对接的明细。");
|
|
|
+ retMap.put("success",false);
|
|
|
+ retMap.put("message","没有需要对接的明细。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ ProdInout prodInOut = getIO(master,id,false);
|
|
|
+ if(CollectionUtil.isEmpty(prodInOut.getDetails())){
|
|
|
+ retMap.put("success",false);
|
|
|
+ retMap.put("message","没有需要同步的明细。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ //构建请求主体
|
|
|
+ String masterName = baseDao.queryForObject("select max(ma_function) masterName from DATACENTER_P.master where ma_user = '"+master+"' ",String.class);
|
|
|
+ Long piId = prodInOut.getPiId();
|
|
|
+ EntryOrder entryOrder = new EntryOrder();
|
|
|
+ OrderLines orderLines = new OrderLines();
|
|
|
+ entryOrder.setOutBizCode(prodInOut.getPiOrderType()+"-"+System.currentTimeMillis());// 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理
|
|
|
+ entryOrder.setEntryOrderCode(prodInOut.getPiInoutno());// 入库单号
|
|
|
+ entryOrder.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
|
|
|
+ entryOrder.setWarehouseCode(vwmsConfig.getWarehouseCode());// 仓库编码
|
|
|
+ entryOrder.setOrderCreateTime(prodInOut.getPiRecordDate());// 订单创建时间
|
|
|
+ entryOrder.setOrderType(prodInOut.getPiOrderType());// 订单类型
|
|
|
+ entryOrder.setSupplierCode(prodInOut.getPiCardCode());// 供应商编码
|
|
|
+ entryOrder.setSupplierName(prodInOut.getPiTitle());// 供应商名称
|
|
|
+ entryOrder.setDocumentMaker(prodInOut.getPiRecordman());// 制单人
|
|
|
+ entryOrder.setRemark(prodInOut.getPiRemark());// 备注
|
|
|
+ List<OrderLine> orderLineList = getOrderLines(prodInOut,masterName);
|
|
|
+ orderLines.setOrderLine(orderLineList);
|
|
|
+ EntryOrderAndDetRequest entryOrderAndDetRequest = new EntryOrderAndDetRequest();
|
|
|
+ entryOrderAndDetRequest.setEntryOrder(entryOrder);
|
|
|
+ entryOrderAndDetRequest.setOrderLines(orderLines);
|
|
|
+ String errMsg = null;
|
|
|
+ String docOp = "创建";
|
|
|
+ if(prodInOut.getPiSendwmsflag() == 0){
|
|
|
+ errMsg = createIoToWms(piId,master,entryOrderAndDetRequest);
|
|
|
+ }else {
|
|
|
+ docOp = "更新";
|
|
|
+ errMsg = updateIoToWms(piId,master,entryOrderAndDetRequest);
|
|
|
+ }
|
|
|
+ if(errMsg!=null){
|
|
|
+ errMsg = docOp+"失败:"+errMsg.replaceAll("'","''");
|
|
|
+ logger.info("sendIO-End-failure master {} piid {} errorTip {}",master,piId,errMsg);
|
|
|
+ baseDao.execute("update "+master+".prodinout set pi_sendwmsstatus='"+docOp+"失败',pi_sendwmserr=UNISTR('"+errMsg+"') where pi_id = "+piId);
|
|
|
+ retMap.put("success",false);
|
|
|
+ retMap.put("message",errMsg);
|
|
|
+ }else {
|
|
|
+ logger.info("sendIO-End-success master {} piid {} ",master,piId);
|
|
|
+ }
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ private String createIoToWms(Long piId,String master,EntryOrderAndDetRequest entryOrderAndDetRequest){
|
|
|
+ String eMsg = null;
|
|
|
+ BaseReq<EntryOrderAndDetRequest> entryOrderReq = new BaseReq();
|
|
|
+ entryOrderReq.setRequest(entryOrderAndDetRequest);
|
|
|
+ try {
|
|
|
+ //转换为JSON字符串
|
|
|
+ String json = objectMapper.writeValueAsString(entryOrderReq);
|
|
|
+ logger.info("sendIO-add-Request: {}", json);
|
|
|
+ HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.entryorder.create", json,vwmsConfig);
|
|
|
+ if(!String.valueOf(response.getStatusCode()).startsWith("2")){
|
|
|
+ eMsg = "("+response.getStatusCode()+")"+StringUtil.nvl(response.getResponseText(),"未知").replaceAll("'","''");
|
|
|
+ }else {
|
|
|
+ BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
|
|
|
+ BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
|
|
|
+ if(baseVastRespResponse!=null){
|
|
|
+ if("success".equals(baseVastRespResponse.getFlag())){
|
|
|
+ logger.info("sendIO-add-response-success code: {} entryOrderId {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getEntryOrderId(),baseVastRespResponse.getMessage());
|
|
|
+ baseDao.execute("update "+master+".prodinout set pi_wmsordercode='"+baseVastRespResponse.getEntryOrderId()+"',pi_sendwmsstatus='同步成功' ,pi_sendwmserr=null,pi_sendwmsflag=-1 where pi_id = "+piId);
|
|
|
+ }else {
|
|
|
+ eMsg = "(" + baseVastRespResponse.getCode() + ")";
|
|
|
+ String errorMessage = baseVastRespResponse.getMessage();
|
|
|
+ if (baseVastRespResponse.getOrders() != null &&
|
|
|
+ !CollectionUtil.isEmpty(baseVastRespResponse.getOrders().getOrder())) {
|
|
|
+ errorMessage = StringUtil.nvl(baseVastRespResponse.getOrders().getOrder().get(0).getMessage(),baseVastRespResponse.getMessage());
|
|
|
+ }
|
|
|
+ eMsg += StringUtil.nvl(errorMessage, "未知").replaceAll("'", "''");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ eMsg = "RespJSON转换失败:"+response.getStatusCode()+":"+response.getResponseText();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ eMsg = "JSON转换失败";
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ eMsg = StringUtil.nvl(e.getMessage(),"无").replaceAll("'","''");
|
|
|
+ }
|
|
|
+ return eMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String updateIoToWms(Long piId,String master,EntryOrderAndDetRequest entryOrderAndDetRequest){
|
|
|
+ String eMsg = "";
|
|
|
+ BaseReq<EntryOrderVastRequest<EntryOrderAndDetRequest>> baseEntryOrderReq = new BaseReq();
|
|
|
+ EntryOrderVastRequest<EntryOrderAndDetRequest> entryOrderVastRequest = new EntryOrderVastRequest();
|
|
|
+ EntryOrdersRequest<EntryOrderAndDetRequest> ordersRequest = new EntryOrdersRequest();
|
|
|
+ ordersRequest.setOrder(Arrays.asList(entryOrderAndDetRequest));
|
|
|
+ entryOrderVastRequest.setOutBizCode(entryOrderAndDetRequest.getEntryOrder().getOutBizCode());
|
|
|
+ entryOrderVastRequest.setOrders(ordersRequest);
|
|
|
+ baseEntryOrderReq.setRequest(entryOrderVastRequest);
|
|
|
+ try {
|
|
|
+ //转换为JSON字符串
|
|
|
+ String json = objectMapper.writeValueAsString(baseEntryOrderReq);
|
|
|
+ logger.info("sendIO-update-Request: {}", json);
|
|
|
+ HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.entryorder.batchupdate", json,vwmsConfig);
|
|
|
+ if(!String.valueOf(response.getStatusCode()).startsWith("2")){
|
|
|
+ eMsg = "("+response.getStatusCode()+")"+StringUtil.nvl(response.getResponseText(),"无").replaceAll("'","''");
|
|
|
+ }else {
|
|
|
+ logger.info("sendIO-update-Response: {}", response.getResponseText());
|
|
|
+ BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
|
|
|
+ BaseVastResp.Response baseVastRespResponse = baseVastResp.getResponse();
|
|
|
+ if(baseVastRespResponse!=null){
|
|
|
+ if("success".equals(baseVastRespResponse.getFlag())){
|
|
|
+ logger.info("sendIO-update-response-success code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
|
|
|
+ baseDao.execute("update "+master+".prodinout set pi_sendwmsstatus='更新成功',pi_sendwmserr=null where pi_id = "+piId);
|
|
|
+ }else {
|
|
|
+ eMsg = "(" + baseVastRespResponse.getCode() + ")";
|
|
|
+ String errorMessage = baseVastRespResponse.getMessage();
|
|
|
+ if (baseVastRespResponse.getOrders() != null &&
|
|
|
+ !CollectionUtil.isEmpty(baseVastRespResponse.getOrders().getOrder())) {
|
|
|
+ errorMessage = StringUtil.nvl(baseVastRespResponse.getOrders().getOrder().get(0).getMessage(),baseVastRespResponse.getMessage());
|
|
|
+ }
|
|
|
+ eMsg += StringUtil.nvl(errorMessage, "未知").replaceAll("'", "''");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ eMsg = "RespJSON转换失败:"+response.getStatusCode()+":"+response.getResponseText();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ eMsg = "JSON转换失败";
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ eMsg = StringUtil.nvl(e.getMessage(),"无").replaceAll("'","''");
|
|
|
+ }
|
|
|
+ return eMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> cancelIO(String master, String id, String emCode, String caller,String cancelReason) {
|
|
|
+ Map<String,Object> retMap = new HashMap<>();
|
|
|
+ String docOp = "对接操作:取消:";
|
|
|
+ retMap.put("success",true);
|
|
|
+ String eMsg = null;
|
|
|
+ logger.info("sendIO-cancel-Begin:master {} id {} cancelReason {}",master,id,cancelReason);
|
|
|
+ // 执行查询
|
|
|
+ if(!baseDao.checkIf(master+".prodinout","pi_id = "+id+" and nvl(pi_sendwmsflag,0) = -1")){
|
|
|
+ logger.info("sendIO-cancel-End:master {} id {} res {}",master,id,"单据不存在或尚未同步到WMS。");
|
|
|
+ retMap.put("success",false);
|
|
|
+ retMap.put("message","单据不存在或尚未同步到WMS。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ ProdInout prodInOut = getIO(master,id,true);
|
|
|
+ Long piId = prodInOut.getPiId();
|
|
|
+ EntryOrderVastRequest<EntryOrderCancel> cancelIOSRequest = new EntryOrderVastRequest();
|
|
|
+ EntryOrdersRequest<EntryOrderCancel> orders = new EntryOrdersRequest();
|
|
|
+ cancelIOSRequest.setOutBizCode("sendIO-cancel-"+prodInOut.getPiOrderType()+"-"+System.currentTimeMillis());// 外部业务代码 消息ID, 用于去重, 因为网络等原因导致重复传输, 请求不会被重复处理
|
|
|
+ EntryOrderCancel cancelOrder = new EntryOrderCancel();
|
|
|
+ cancelOrder.setWarehouseCode(vwmsConfig.getWarehouseCode());// 仓库编码
|
|
|
+ cancelOrder.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
|
|
|
+ cancelOrder.setOrderCode(prodInOut.getPiInoutno());// 入库单号
|
|
|
+ cancelOrder.setCancelReason(cancelReason);
|
|
|
+ cancelOrder.setCancelType(prodInOut.getPiWmsInType());
|
|
|
+ orders.setOrder(Arrays.asList(cancelOrder));
|
|
|
+ cancelIOSRequest.setOrders(orders);
|
|
|
+ BaseReq<EntryOrderVastRequest<EntryOrderCancel>> iobaseReq = new BaseReq();
|
|
|
+ iobaseReq.setRequest(cancelIOSRequest);
|
|
|
+ try {
|
|
|
+ //转换为JSON字符串
|
|
|
+ String json = objectMapper.writeValueAsString(iobaseReq);
|
|
|
+ logger.info("sendIO-cancel-Request JSON: {}", json);
|
|
|
+ HttpUtil.Response response = HttpUtil.doPostToVWMS("openapi.order.batchcancel.v2", json,vwmsConfig);
|
|
|
+ if(!String.valueOf(response.getStatusCode()).startsWith("2")){
|
|
|
+ eMsg = "("+response.getStatusCode()+")"+StringUtil.nvl(response.getResponseText(),"无").replaceAll("'","''");
|
|
|
+ }else {
|
|
|
+ BaseVastResp baseVastResp = new ObjectMapper().readValue(response.getResponseText(), BaseVastResp.class);
|
|
|
+ BaseVastResp.Response baseVastRespResponse = baseVastResp.getResponse();
|
|
|
+ if(baseVastRespResponse!=null){
|
|
|
+ if("success".equals(baseVastRespResponse.getFlag())){
|
|
|
+ logger.info("sendIO-cancel-response-success code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
|
|
|
+ baseDao.execute("update "+master+".prodinout set pi_sendwmsstatus='取消成功' ,pi_sendwmserr=null,pi_sendwmsflag=0,PI_WMSORDERCODE=null where pi_id = "+piId);
|
|
|
+ }else {
|
|
|
+// logger.info("sendIO-cancel-response-failure {}", response.getResponseText());
|
|
|
+ eMsg = "(" + baseVastRespResponse.getCode() + ")";
|
|
|
+ String errorMessage = baseVastRespResponse.getMessage();
|
|
|
+ if (baseVastRespResponse.getOrders() != null &&
|
|
|
+ !CollectionUtil.isEmpty(baseVastRespResponse.getOrders().getOrder())) {
|
|
|
+ errorMessage = StringUtil.nvl(baseVastRespResponse.getOrders().getOrder().get(0).getMessage(),baseVastRespResponse.getMessage());
|
|
|
+ }
|
|
|
+ eMsg += StringUtil.nvl(errorMessage, "未知").replaceAll("'", "''");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ eMsg = "RespJSON转换失败:"+response.getStatusCode()+":"+response.getResponseText();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ eMsg = "JSON转换失败";
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ eMsg = StringUtil.nvl(e.getMessage(),"无").replaceAll("'","''");
|
|
|
+ }
|
|
|
+ if(eMsg!=null){
|
|
|
+ eMsg = docOp+"失败:"+eMsg.replaceAll("'","''");
|
|
|
+ logger.info("sendIO-cancel-End-failure master {} piid {} errorTip {}",master,piId,eMsg);
|
|
|
+ baseDao.execute("update "+master+".prodinout set pi_sendwmsstatus='取消失败',pi_sendwmserr=UNISTR('"+eMsg+"') where pi_id = "+piId);
|
|
|
+ retMap.put("success",false);
|
|
|
+ retMap.put("message",eMsg);
|
|
|
+ }else {
|
|
|
+ logger.info("sendIO-cancel-End-success master {} piid {} ",master,piId);
|
|
|
+ }
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private ProdInout getIO(String master,String id,boolean onlyMain){
|
|
|
+ List<ProdInout> prodInOuts = baseDao.getJdbcTemplate().query(
|
|
|
+ "select pi_Wmsordertype piOrderType,pi_id piId,pi_inoutno piInoutno,pi_class piClass,pi_type piType,to_char(pi_recorddate,'yyyy-mm-dd hh24:mi:ss') piDate" +
|
|
|
+ ",pi_Cardcode piCardcode,pi_Title piTitle,pi_Recordman piRecordman,to_char(pi_recorddate,'yyyy-mm-dd hh24:mi:ss') piRecorddate,pi_Remark piRemark" +
|
|
|
+ ",abs(nvl(pi_sendwmsflag,0)) piSendwmsflag,nvl(pi_WmsInType,'in') piWmsInType " +
|
|
|
+ " from "+master+".prodinout where pi_id = "+id,
|
|
|
+ new BeanPropertyRowMapper<ProdInout>(ProdInout.class));
|
|
|
+ ProdInout prodInOut = prodInOuts.get(0);
|
|
|
+ if(!onlyMain){
|
|
|
+ List<Prodiodetail> details = baseDao.getJdbcTemplate().query(
|
|
|
+ "select min(pd_id) pdId,min(pd_pdno) pdPdno,pd_prodcode pdProdcode,pr_detail pdProdname,pr_brand pdBrandName" +
|
|
|
+ ",sum(nvl(pd_inqty,0)+nvl(pd_outqty,0)) pdQty" +
|
|
|
+ ",pd_whcode pdWhcode,wh_description pdWhname,pd_description pdInBatch" +
|
|
|
+ " from "+master+".prodiodetail LEFT JOIN "+master+".product on pr_code = pd_prodcode left join "+master+".productbrand on pb_name = pr_brand " +
|
|
|
+ " left join "+master+".warehouse on wh_Code = pd_whcode " +
|
|
|
+ " where pd_piid = ? and pb_sendwms = -1 " +
|
|
|
+ " group by pd_prodcode,pr_detail,pr_brand,pd_whcode,wh_description,pd_description" +
|
|
|
+ " order by MIN(pd_pdno) ",
|
|
|
+ new BeanPropertyRowMapper<Prodiodetail>(Prodiodetail.class), prodInOut.getPiId());
|
|
|
+ prodInOut.setDetails(details);
|
|
|
+ }
|
|
|
+ return prodInOut;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<OrderLine> getOrderLines(ProdInout prodInOut,String masterName) {
|
|
|
+ List<OrderLine> orderLineList = new ArrayList<>();
|
|
|
+ for (Prodiodetail detail : prodInOut.getDetails()) {
|
|
|
+ OrderLine orderLine = new OrderLine();
|
|
|
+ orderLine.setLineNo(detail.getPdPdno());// 行号
|
|
|
+ orderLine.setOwnerCode(vwmsConfig.getOwnerCode());// 货主编码
|
|
|
+ orderLine.setItemCode(detail.getPdProdcode());// 商品编码
|
|
|
+ orderLine.setItemName(detail.getPdProdname());// 商品名称
|
|
|
+ orderLine.setPlanQty(detail.getPdQty());// 数量
|
|
|
+ orderLine.setVirtualWarehouse(detail.getPdWhname());// 虚拟仓库编号
|
|
|
+ orderLine.setStockinDate(prodInOut.getPiDate());// 入库日期
|
|
|
+ orderLine.setUserDefined1(detail.getPdInBatch());// 入库批次
|
|
|
+ orderLine.setUserDefined3(detail.getPdBrandName());// 品牌
|
|
|
+ orderLine.setUserDefined4(masterName);//账套
|
|
|
+ orderLineList.add(orderLine);
|
|
|
+ }
|
|
|
+ return orderLineList;
|
|
|
+ }
|
|
|
}
|