|
|
@@ -15,12 +15,9 @@ import com.uas.eis.utils.*;
|
|
|
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;
|
|
|
import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author wuyx
|
|
|
@@ -187,7 +184,7 @@ public class ERPServiceImpl implements ERPService {
|
|
|
retMap.put("message", "没有需要对接的明细。");
|
|
|
return retMap;
|
|
|
}
|
|
|
- ProdInout prodInOut = docCommonService.getIO(master, id);
|
|
|
+ ProdInout prodInOut = docCommonService.getIO(master, id,null);
|
|
|
if (CollectionUtil.isEmpty(prodInOut.getDetails())) {
|
|
|
retMap.put("success", false);
|
|
|
retMap.put("message", "没有需要同步的明细。");
|
|
|
@@ -236,4 +233,133 @@ public class ERPServiceImpl implements ERPService {
|
|
|
return retMap;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> cancelIO(ErpCancelIORequest erpCancelIORequest) {
|
|
|
+ String master = erpCancelIORequest.getMaster();
|
|
|
+ String emCode = erpCancelIORequest.getEmCode();
|
|
|
+ String caller = erpCancelIORequest.getCaller();
|
|
|
+ String formStore = erpCancelIORequest.getFormStore();
|
|
|
+ String gridStore = erpCancelIORequest.getGridStore();
|
|
|
+ Map<Object, Object> store = BaseUtil.parseFormStoreToMap(formStore);
|
|
|
+ List<Map<Object, Object>> gstore = BaseUtil.parseGridStoreToMaps(gridStore);
|
|
|
+ Object piId = store.get("pi_id");
|
|
|
+ Map<String, Object> retMap = new HashMap<>();
|
|
|
+ retMap.put("success", true);
|
|
|
+ logger.info("cancelIO-Begin:master {} id {}", master, piId);
|
|
|
+ if(CollectionUtil.isEmpty(gstore)) {
|
|
|
+ logger.info("cancelIO-End:master {} id {} res {}", master, piId, "没有需要对接的明细。");
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "没有需要对接的明细。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ StringBuffer pdIds = new StringBuffer();
|
|
|
+ for (Map<Object, Object> map : gstore) {
|
|
|
+ if(pdIds.length()>0){
|
|
|
+ pdIds.append(",");
|
|
|
+ }
|
|
|
+ if(StringUtil.hasText(map.get("pd_id"))){
|
|
|
+ pdIds.append(map.get("pd_id"));
|
|
|
+ }
|
|
|
+ if(StringUtil.hasText(map.get("PD_ID"))){
|
|
|
+ pdIds.append(map.get("PD_ID"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 执行查询
|
|
|
+ if (!baseDao.checkIf(master + ".prodiodetail left join " + master + ".product on pr_code = pd_prodcode "
|
|
|
+ , "pd_id in (" + pdIds + ") and nvl(pr_sendwmsflag,0) = -1")) {
|
|
|
+ logger.info("cancelIO-End:master {} id {} res {}", master, piId, "明细不需要对接WMS。");
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "明细不需要对接WMS。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ ProdInout prodInOut = docCommonService.getIO(master, piId.toString(),pdIds.toString());
|
|
|
+ if (prodInOut.getPiWmsstatus().equals("已确认")) {
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "单据已确认采集,不允许重复同步。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ String ownerCode = master;
|
|
|
+ if("YUEJH_TEST".equals(master)){
|
|
|
+ ownerCode = "YUEJH";
|
|
|
+ }
|
|
|
+ if("YJH_T".equals(master)){
|
|
|
+ ownerCode = "AIFL";
|
|
|
+ }
|
|
|
+ if("YIT_T".equals(master)){
|
|
|
+ ownerCode = "YJH_HK";
|
|
|
+ }
|
|
|
+ String deliveryOrderCode = prodInOut.getPiInoutno();
|
|
|
+ String warehouseCode = vwmsConfig.getWarehouseCode();
|
|
|
+ List<Prodiodetail> prodiodetails = prodInOut.getDetails();
|
|
|
+ CancelIORequest cancelIORequest = new CancelIORequest();
|
|
|
+ CancelIORequest.CancelItems cancelItems = new CancelIORequest.CancelItems();
|
|
|
+ List<CancelIORequest.CancelItem> cancelItemList = new ArrayList<>();
|
|
|
+ for (Map<Object, Object> map : gstore) {
|
|
|
+ Long pdId = 0L;
|
|
|
+ Double qtyAfter = 0.0;
|
|
|
+ if(StringUtil.hasText(map.get("pd_id"))){
|
|
|
+ pdId = Long.valueOf(map.get("pd_id").toString());
|
|
|
+ }
|
|
|
+ if(StringUtil.hasText(map.get("PD_ID"))){
|
|
|
+ pdId = Long.valueOf(map.get("PD_ID").toString());
|
|
|
+ }
|
|
|
+ if(StringUtil.hasText(map.get("pd_outqty"))){
|
|
|
+ qtyAfter = Double.valueOf(map.get("pd_outqty").toString());
|
|
|
+ }
|
|
|
+ if(StringUtil.hasText(map.get("PD_OUTQTY"))){
|
|
|
+ qtyAfter = Double.valueOf(map.get("PD_OUTQTY").toString());
|
|
|
+ }
|
|
|
+ if(pdId > 0){
|
|
|
+ Long finalPdId = pdId;
|
|
|
+ Prodiodetail detail = prodiodetails.stream()
|
|
|
+ .filter(p -> finalPdId.equals(p.getPdId()))
|
|
|
+ .findFirst()
|
|
|
+ .orElse(null);
|
|
|
+ if(detail != null) {
|
|
|
+ Double qtyBefor = detail.getPdQty();
|
|
|
+ Double cancelQty = NumberUtil.sub(qtyBefor,qtyAfter);
|
|
|
+ if(cancelQty>0){
|
|
|
+ CancelIORequest.CancelItem cancelItem = new CancelIORequest.CancelItem(warehouseCode,ownerCode,deliveryOrderCode);
|
|
|
+ cancelItem.setOrderLineNo(String.valueOf(detail.getPdPdno()));
|
|
|
+ cancelItem.setLogicWarehouseCode(detail.getPdWhcode());
|
|
|
+ cancelItem.setItemCode(detail.getPdProdcode());
|
|
|
+ cancelItem.setItemName(detail.getPdProdname());
|
|
|
+ cancelItem.setCancelQty(cancelQty);
|
|
|
+ cancelItemList.add(cancelItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(CollectionUtil.isEmpty(cancelItemList)){
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "无需要取消的明细。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ cancelItems.setCancelItem(cancelItemList);
|
|
|
+ cancelIORequest.setCancelItems(cancelItems);
|
|
|
+ String xml = null;
|
|
|
+ String method = "stockout.detailCancel";
|
|
|
+ try {
|
|
|
+ XmlMapper xmlMapper = new XmlMapper();
|
|
|
+ xml = xmlMapper.writeValueAsString(cancelIORequest);
|
|
|
+// System.out.println("xml:"+xml);
|
|
|
+ String errMsg = docCommonService.doPostToWms(xml,method);
|
|
|
+ if (errMsg != null) {
|
|
|
+ errMsg = errMsg.replaceAll("'", "''");
|
|
|
+ logger.info("cancelIO-End-failure master {} pdIds {} errorTip {}", master, pdIds.toString(), errMsg);
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", errMsg);
|
|
|
+ return retMap;
|
|
|
+ } else {
|
|
|
+ logger.info("cancelIO-End-success master {} pdIds {} ", master, pdIds.toString());
|
|
|
+ }
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ retMap.put("success", false);
|
|
|
+ retMap.put("message", "JSON转换失败。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ retMap.put("message", "取消成功。");
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
}
|