diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/constant/ExportConstant.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/constant/ExportConstant.java index 1d74e1bc..dede1ed2 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/constant/ExportConstant.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/constant/ExportConstant.java @@ -4,6 +4,8 @@ import java.util.HashMap; import java.util.Map; /** + * 如果是海外店铺,税率为 0 + * * @Author:liuyang * @Package:com.hzya.frame.plugin.lets.constant * @Project:kangarooDataCenterV3 diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToB.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToB.java index 9a48d94f..5ab3da52 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToB.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToB.java @@ -13,8 +13,12 @@ import com.hzya.frame.plugin.lets.constant.OverallConstant; import com.hzya.frame.plugin.lets.constant.ProfilesActiveConstant; import com.hzya.frame.plugin.lets.dao.*; import com.hzya.frame.plugin.lets.entity.*; +import com.hzya.frame.plugin.lets.ofs.dao.IOfsPassiveorderDetailDao; +import com.hzya.frame.plugin.lets.ofs.dao.IOfsPassiveorderHeaderDao; import com.hzya.frame.plugin.lets.ofs.dao.ITocofsReturngoodsDao; import com.hzya.frame.plugin.lets.ofs.dao.ITocofsReturngoodsDetailedDao; +import com.hzya.frame.plugin.lets.ofs.entity.OfsPassiveorderDetailEntity; +import com.hzya.frame.plugin.lets.ofs.entity.OfsPassiveorderHeaderEntity; import com.hzya.frame.plugin.lets.ofs.entity.TocofsReturngoodsDetailedEntity; import com.hzya.frame.plugin.lets.ofs.entity.TocofsReturngoodsEntity; import com.hzya.frame.plugin.lets.ofsvo.QueryOfsSoSaleOutVo; @@ -27,6 +31,7 @@ import com.hzya.frame.ttxofs.dto.ofssalesordersearch.DetailsDto; import com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto; import com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDto; import com.hzya.frame.ttxofs.dto.ofssalesordersearch.SaleOrderMessageDto; +import com.hzya.frame.ttxofs.dto.passivestorage.PassiveStorageResponse; import com.hzya.frame.ttxofs.dto.returngoodordersearch.RerturnGoodsOrderSearchData; import com.hzya.frame.ttxofs.dto.returngoodordersearch.RerturnGoodsOrderSearchDetails; import com.hzya.frame.ttxofs.dto.returngoodordersearch.RerturnGoodsOrderSearchHeader; @@ -51,8 +56,7 @@ import java.util.stream.Collectors; * TOB业务,无源入库单(TOB) -> 推送U8C 红字销售订单、交易成功部分生成红字应收单 * * @author makejava - * @see SoSaleOutPluginInitializerToB TOB销售 - * @since 2024年8月12日 15:03:51 + * @since 2025-03-17 13:47:31 */ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { @@ -71,97 +75,6 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { @Autowired private QueryU8CEntityUtil queryU8CEntityUtil; - @Override - public void initialize() { - logger.info(getPluginLabel() + "執行初始化方法initialize()"); - } - - @Override - public void destroy() { - logger.info(getPluginLabel() + "執行銷毀方法destroy()"); - } - - @Override - public String getPluginId() { - return "sales.PassiveWarehouseReceiptToB"; - } - - @Override - public String getPluginName() { - return "OFS无源入库单(TOB)生成U8C红字销售订单或红字发票"; - } - - @Override - public String getPluginLabel() { - return "OFS无源入库单(TOB)生成U8C红字销售订单或红字发票"; - } - - @Override - public String getPluginType() { - return "3"; - } - - private static final Object PUSH_LOCK1 = new Object(); - - private static final Object PUSH_LOCK2 = new Object(); - - @Override - public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception { - logger.info("触发调用:{}" + getPluginName()); - try { - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - long startMillis = System.currentTimeMillis(); - logger.info("executeBusiness方法调用开始:" + getPluginName() + "-插件"); - - try { - String param = String.valueOf(requestJson.get("param")); - String sceneType = String.valueOf(requestJson.get("sceneType"));//sceneType:stock、tran - if (ProfilesActiveConstant.TYPE_VBILLCODE.equals(requestJson.get("type"))) { - //按单号 - if (param != null && !"".equals(param)) { - startImplementByCode(param, sceneType); - } - } else if (ProfilesActiveConstant.TYPE_TIME_FRAME.equals(requestJson.get("type"))) { - //前台页面功能日期推送,或者接口调用也行 - Assert.notNull(sceneType, "sceneType参数不能为空"); - Assert.notNull(!"".equals(sceneType), "sceneType参数不能为空"); - String craeteDateStr = computingTime(param); - if (craeteDateStr != null && !"".equals(craeteDateStr)) { - splitDateAndPush(craeteDateStr, sceneType); - } - } else { - if (ProfilesActiveConstant.LETS_PROFILES_ACTIVE.equals(PROD_FILED)) { - //实时执行,每1分钟调度一次 - StartAndEndVo startAndEndVo = offsetTimeTime.getCurrentDateRange(); - startImplementByStockTime(startAndEndVo.getStart_time(), startAndEndVo.getEnd_time()); - startImplementByTradeTime(startAndEndVo.getStart_time(), startAndEndVo.getEnd_time()); - } - } - } catch (Exception e) { - logger.error("executeBusiness方法异常", e); - } - long endMillis = System.currentTimeMillis(); - logger.info("executeBusiness方法调用结束:" + getPluginName() + "-插件 执行耗时:{}", (endMillis - startMillis)); -// return null; - } - }, "执行插件:" + getPluginName()); - thread.start(); - - if (requestJson != null && requestJson.get("type") != null && ProfilesActiveConstant.TYPE_DETAIL_ERROR.equals(requestJson.get("type"))) { - try { - thread.join(); - } catch (Exception e) { - logger.error("thread.join();抛出异常", e); - } - } - } catch (Exception e) { - logger.error("executeBusiness方法抛出异常", e); - } - return BaseResult.getSuccessMessageEntity("插件执行成功"); - } - @Autowired private OfsUnifiedService ofsUnifiedService; @@ -225,12 +138,18 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { @Autowired private ISoSaleDao iSoSaleDao; + @Autowired + private IOfsPassiveorderDetailDao iOfsPassiveorderDetailDao; + @Autowired private ISoSaleorderBDao iSoSaleorderBDao; @Autowired private ISoSaleinvoiceDao iSoSaleinvoiceDao; + @Autowired + private BalanceUnitPriceUtil balanceUnitPriceUtil; + private static final String STOCK = "stock"; private static final String TRAN = "tran"; @@ -239,8 +158,99 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { private static final String VNOTETYPE = "RETURN"; + private static final Object PUSH_LOCK1 = new Object(); + + private static final Object PUSH_LOCK2 = new Object(); + @Autowired - private BalanceUnitPriceUtil balanceUnitPriceUtil; + private IOfsPassiveorderHeaderDao iOfsPassiveorderHeaderDao; + + @Override + public void initialize() { + logger.info(getPluginLabel() + "執行初始化方法initialize()"); + } + + @Override + public void destroy() { + logger.info(getPluginLabel() + "執行銷毀方法destroy()"); + } + + @Override + public String getPluginId() { + return "sales.PassiveWarehouseReceiptToB"; + } + + @Override + public String getPluginName() { + return "OFS无源入库单(TOB)生成U8C红字销售订单或红字发票"; + } + + @Override + public String getPluginLabel() { + return "OFS无源入库单(TOB)生成U8C红字销售订单或红字发票"; + } + + @Override + public String getPluginType() { + return "3"; + } + + @Override + public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception { + logger.info("触发调用:{}" + getPluginName()); + try { + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + long startMillis = System.currentTimeMillis(); + logger.info("executeBusiness方法调用开始:" + getPluginName() + "-插件"); + + try { + String param = String.valueOf(requestJson.get("param")); + String sceneType = String.valueOf(requestJson.get("sceneType"));//sceneType:stock、tran + if (ProfilesActiveConstant.TYPE_VBILLCODE.equals(requestJson.get("type"))) { + //按单号 + if (param != null && !"".equals(param)) { + startImplementByCode(param, sceneType); + } + } else if (ProfilesActiveConstant.TYPE_TIME_FRAME.equals(requestJson.get("type"))) { + //前台页面功能日期推送,或者接口调用也行 + Assert.notNull(sceneType, "sceneType参数不能为空"); + Assert.notNull(!"".equals(sceneType), "sceneType参数不能为空"); + String craeteDateStr = computingTime(param); + if (craeteDateStr != null && !"".equals(craeteDateStr)) { + splitDateAndPush(craeteDateStr, sceneType); + } + } else { + if (ProfilesActiveConstant.LETS_PROFILES_ACTIVE.equals(PROD_FILED)) { + //实时执行,每1分钟调度一次 + StartAndEndVo startAndEndVo = offsetTimeTime.getCurrentDateRange(); + startImplementByStockTime(startAndEndVo.getStart_time(), startAndEndVo.getEnd_time()); + startImplementByTradeTime(startAndEndVo.getStart_time(), startAndEndVo.getEnd_time()); + } + } + } catch (Exception e) { + logger.error("executeBusiness方法异常", e); + } + long endMillis = System.currentTimeMillis(); + logger.info("executeBusiness方法调用结束:" + getPluginName() + "-插件 执行耗时:{}", (endMillis - startMillis)); +// return null; + } + }, "执行插件:" + getPluginName()); + thread.start(); + + if (requestJson != null && requestJson.get("type") != null && ProfilesActiveConstant.TYPE_DETAIL_ERROR.equals(requestJson.get("type"))) { + try { + thread.join(); + } catch (Exception e) { + logger.error("thread.join();抛出异常", e); + } + } + } catch (Exception e) { + logger.error("executeBusiness方法抛出异常", e); + } + return BaseResult.getSuccessMessageEntity("插件执行成功"); + } /** * 库存同步,按指定时间拉取 @@ -250,37 +260,31 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { public void startImplementByStockTime(String startTime, String endTime) throws Exception { try { long startMillis = System.currentTimeMillis(); - String threadNameStrStart = StrUtil.format("OFS售后入库(TOB)同步U8C销售订单(库存同步) 开始时间:{} 结束时间:{}", startTime, endTime); + String threadNameStrStart = StrUtil.format("OFS无源入库单(TOB)同步U8C销售订单(库存同步) 开始时间:{} 结束时间:{}", startTime, endTime); logger.info(threadNameStrStart); Assert.notNull(startTime, "startTime不能为空"); Assert.notNull(endTime, "endTime不能为空"); - //生成一个时间范围 -// StartAndEndVo startAndEndVo = offsetTimeTime.offsetTime(); - //2024年8月19日 15:47:51 查询出U8C里标记的店铺TOB属性 - String tobShop = shopTobOrToCUtil.getCommaShop("TOB"); - List returnGoodHeaderDetailsDataDtoArrayList = new ArrayList<>(); + //2024年8月19日 15:47:51 查询出U8C里标记的店铺TOB属性 +// String tobShop = shopTobOrToCUtil.getCommaShop("TOB"); + List passiveStorageResponseDataDtoArrayList = new ArrayList<>(); QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo(); - queryOfsSoSaleOutVo.setClosedAt_start(startTime); - queryOfsSoSaleOutVo.setClosedAt_end(endTime); + queryOfsSoSaleOutVo.setRelatedAt_start(startTime); + queryOfsSoSaleOutVo.setRelatedAt_end(endTime); queryOfsSoSaleOutVo.setClientCode("LETS"); - queryOfsSoSaleOutVo.setStatus(900L); queryOfsSoSaleOutVo.setPageNo(1L); queryOfsSoSaleOutVo.setPageSize(50L); - queryOfsSoSaleOutVo.setStoreCode(tobShop); - queryOfsSoSaleOutVo.setInternalInstructionType("RETURN"); -// queryOfsSoSaleOutVo.setCode("LETS-RE2024081900000001"); - ofsStandardUtil.queryOfsReturnGoods(queryOfsSoSaleOutVo, returnGoodHeaderDetailsDataDtoArrayList, 1L, "ofs.receipt.search"); - logger.info("插件:{} (库存)O接口返回行数:{} 时间段:{} {}", getPluginName(), returnGoodHeaderDetailsDataDtoArrayList.size(), startTime, endTime); -// splicingPrintingOrderNumber(returnGoodHeaderDetailsDataDtoArrayList, "stock", startTime, endTime, null); - printOfsDocCode(returnGoodHeaderDetailsDataDtoArrayList, startTime, endTime, "入库"); +// queryOfsSoSaleOutVo.setStoreCode(tobShop); + ofsStandardUtil.queryOfsPassiveComponents(queryOfsSoSaleOutVo, passiveStorageResponseDataDtoArrayList, 1L, "ofs.passive.order.search"); + logger.info("插件:{} (库存)O接口返回行数:{} 时间段:{} {}", getPluginName(), passiveStorageResponseDataDtoArrayList.size(), startTime, endTime); + printOfsDocCode(passiveStorageResponseDataDtoArrayList, startTime, endTime, "无源入库单"); - if (returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - returnGoodHeaderDetailsDataDtoArrayList.removeIf(new Predicate() { + if (passiveStorageResponseDataDtoArrayList.size() > 0) { + passiveStorageResponseDataDtoArrayList.removeIf(new Predicate() { @Override - public boolean test(StockinOrderSearchResponse.StockinOrder headerDetailsDto) { - StockinOrderSearchResponse.StockinOrder.StockinH header = headerDetailsDto.getHeader(); + public boolean test(PassiveStorageResponse.Data headerDetailsDto) { + PassiveStorageResponse.Header header = headerDetailsDto.getHeader(); if (header != null && header.getCompanyCode() != null) { if (ProfilesActiveConstant.FILTER_COMPANY.contains(header.getCompanyCode().trim())) { return true; @@ -289,13 +293,13 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { return false; } }); - getSetStock(returnGoodHeaderDetailsDataDtoArrayList); + getSetStock(passiveStorageResponseDataDtoArrayList); } else { logger.info("没有查询到任何数据!不需要同步"); } long endMillis = System.currentTimeMillis(); - String threadNameStrEnd = StrUtil.format("OFS售后入库(TOB)同步U8C销售订单(库存同步) 开始时间:{} 结束时间:{} 耗时:{}", startTime, endTime, (endMillis - startMillis)); + String threadNameStrEnd = StrUtil.format("OFS无源入库单(TOB)同步U8C销售订单(库存同步) 开始时间:{} 结束时间:{} 耗时:{}", startTime, endTime, (endMillis - startMillis)); logger.info(threadNameStrEnd); } catch (Exception e) { logger.error("startImplementByStockTime方法抛出异常", e); @@ -310,39 +314,32 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { public void startImplementByTradeTime(String startTime, String endTime) throws Exception { try { long startMillis = System.currentTimeMillis(); - String threadNameStrStart = StrUtil.format("OFS售后入库(TOB)同步U8C销售订单(库存同步) 开始时间:{} 结束时间:{}", startTime, endTime); + String threadNameStrStart = StrUtil.format("OFS无源入库退款到账(TOB)同步U8C发票 开始时间:{} 结束时间:{}", startTime, endTime); logger.info(threadNameStrStart); Assert.notNull(startTime, "startTime不能为空"); Assert.notNull(endTime, "endTime不能为空"); //生成一个时间范围 -// StartAndEndVo startAndEndVo = offsetTimeTime.offsetTime(); - //2024年8月19日 15:47:51 查询出U8C里标记的店铺TOB属性 - String tobShop = shopTobOrToCUtil.getCommaShop("TOB"); +// String tobShop = shopTobOrToCUtil.getCommaShop("TOB"); - List returnGoodHeaderDetailsDataDtoArrayList = new ArrayList<>(); + List passiveStorageResponseDataDtoArrayList = new ArrayList<>(); QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo(); - queryOfsSoSaleOutVo.setRefundedAt_start(startTime); - queryOfsSoSaleOutVo.setRefundedAt_end(endTime); + queryOfsSoSaleOutVo.setRelatedAt_start(startTime); + queryOfsSoSaleOutVo.setRelatedAt_end(endTime); queryOfsSoSaleOutVo.setClientCode("LETS"); queryOfsSoSaleOutVo.setPageNo(1L); queryOfsSoSaleOutVo.setPageSize(50L); -// queryOfsSoSaleOutVo.setStatus(900L); - queryOfsSoSaleOutVo.setStoreCode(tobShop); - queryOfsSoSaleOutVo.setInternalInstructionType("RETURN"); - queryOfsSoSaleOutVo.setRefundStatus("900"); -// queryOfsSoSaleOutVo.setCode("LETS-RE2024081900000001"); - ofsStandardUtil.queryOfsReturnGoods(queryOfsSoSaleOutVo, returnGoodHeaderDetailsDataDtoArrayList, 1L, "ofs.receipt.search"); - logger.info("插件:{} (确认收入)O接口返回行数:{} 时间段:{} {}", getPluginName(), returnGoodHeaderDetailsDataDtoArrayList.size(), startTime, endTime); -// splicingPrintingOrderNumber(returnGoodHeaderDetailsDataDtoArrayList, "tran", startTime, endTime, null); - printOfsDocCode(returnGoodHeaderDetailsDataDtoArrayList, startTime, endTime, "确认收入"); +// queryOfsSoSaleOutVo.setStoreCode(tobShop); + ofsStandardUtil.queryOfsPassiveComponents(queryOfsSoSaleOutVo, passiveStorageResponseDataDtoArrayList, 1L, "ofs.passive.order.search"); + logger.info("插件:{} (库存)O接口返回行数:{} 时间段:{} {}", getPluginName(), passiveStorageResponseDataDtoArrayList.size(), startTime, endTime); + printOfsDocCode(passiveStorageResponseDataDtoArrayList, startTime, endTime, "无源入库单退货"); - if (returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - returnGoodHeaderDetailsDataDtoArrayList.removeIf(new Predicate() { + if (passiveStorageResponseDataDtoArrayList.size() > 0) { + passiveStorageResponseDataDtoArrayList.removeIf(new Predicate() { @Override - public boolean test(StockinOrderSearchResponse.StockinOrder headerDetailsDto) { - StockinOrderSearchResponse.StockinOrder.StockinH header = headerDetailsDto.getHeader(); + public boolean test(PassiveStorageResponse.Data headerDetailsDto) { + PassiveStorageResponse.Header header = headerDetailsDto.getHeader(); if (header != null && header.getCompanyCode() != null) { if (ProfilesActiveConstant.FILTER_COMPANY.contains(header.getCompanyCode().trim())) { return true; @@ -351,13 +348,13 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { return false; } }); - getSetTrade(returnGoodHeaderDetailsDataDtoArrayList); + getSetTrade(passiveStorageResponseDataDtoArrayList); } else { logger.info("没有查询到任何数据!不需要同步"); } long endMillis = System.currentTimeMillis(); - String threadNameStrEnd = StrUtil.format("OFS售后入库(TOB)同步U8C销售订单(库存同步) 开始时间:{} 结束时间:{} 耗时:{}", startTime, endTime, (endMillis - startMillis)); + String threadNameStrEnd = StrUtil.format("OFS无源入库退款到账(TOB)同步U8C发票 开始时间:{} 结束时间:{} 耗时:{}", startTime, endTime, (endMillis - startMillis)); logger.info(threadNameStrEnd); } catch (Exception e) { logger.error("startImplementByTradeTime方法抛出异常", e); @@ -372,35 +369,29 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { public void startImplementByCode(String code, String sceneType) throws Exception { try { long startMillis = System.currentTimeMillis(); - String threadNameStrStart = StrUtil.format("OFS售后入库(TOB)同步U8C销售订单(库存同步) 售后入库单号:{}", code); + String threadNameStrStart = StrUtil.format("OFS无源入库(TOB)同步U8C销售订单(库存同步) 售后入库单号:{}", code); logger.info(threadNameStrStart); - Assert.notNull(code, "code不能为空"); - //生成一个时间范围 -// StartAndEndVo startAndEndVo = offsetTimeTime.offsetTime(); - //2024年8月19日 15:47:51 查询出U8C里标记的店铺TOB属性 - String tobShop = shopTobOrToCUtil.getCommaShop("TOB"); - List returnGoodHeaderDetailsDataDtoArrayList = new ArrayList<>(); + //2024年8月19日 15:47:51 查询出U8C里标记的店铺TOB属性 +// String tobShop = shopTobOrToCUtil.getCommaShop("TOB"); + + List passiveStorageResponseDataList = new ArrayList<>(); QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo(); -// queryOfsSoSaleOutVo.setClosedAt_start("2002-01-01 00:00:00");// 2024年8月19日 17:13:35 仅作为接口参数验证,O口头反馈根据单号查询,不会启用时间范围搜索 -// queryOfsSoSaleOutVo.setClosedAt_end("2002-01-01 23:59:59"); + queryOfsSoSaleOutVo.setReceiptCode(code); queryOfsSoSaleOutVo.setClientCode("LETS"); queryOfsSoSaleOutVo.setPageNo(1L); queryOfsSoSaleOutVo.setPageSize(50L); - queryOfsSoSaleOutVo.setStoreCode(tobShop); - queryOfsSoSaleOutVo.setCode(code); - queryOfsSoSaleOutVo.setInternalInstructionType("RETURN"); -// queryOfsSoSaleOutVo.setStatus(900L); - ofsStandardUtil.queryOfsReturnGoods(queryOfsSoSaleOutVo, returnGoodHeaderDetailsDataDtoArrayList, 1L, "ofs.receipt.search"); - logger.info("数据返回行数:{}", returnGoodHeaderDetailsDataDtoArrayList.size()); - splicingPrintingOrderNumber(returnGoodHeaderDetailsDataDtoArrayList, sceneType, null, null, code); - if (returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { + ofsStandardUtil.queryOfsPassiveComponents(queryOfsSoSaleOutVo, passiveStorageResponseDataList, 1L, "ofs.passive.order.search"); + logger.info("数据返回行数:{}", passiveStorageResponseDataList.size()); + splicingPrintingOrderNumber(passiveStorageResponseDataList, sceneType, null, null, code); + + if (passiveStorageResponseDataList.size() > 0) { if (sceneType.equals("stock")) { - returnGoodHeaderDetailsDataDtoArrayList.removeIf(new Predicate() { + passiveStorageResponseDataList.removeIf(new Predicate() { @Override - public boolean test(StockinOrderSearchResponse.StockinOrder headerDetailsDto) { - StockinOrderSearchResponse.StockinOrder.StockinH header = headerDetailsDto.getHeader(); + public boolean test(PassiveStorageResponse.Data headerDetailsDto) { + PassiveStorageResponse.Header header = headerDetailsDto.getHeader(); if (header != null && header.getCompanyCode() != null) { if (ProfilesActiveConstant.FILTER_COMPANY.contains(header.getCompanyCode().trim())) { return true; @@ -409,16 +400,16 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { return false; } }); - getSetStock(returnGoodHeaderDetailsDataDtoArrayList); + getSetStock(passiveStorageResponseDataList); } else if (sceneType.equals("tran")) { - getSetTrade(returnGoodHeaderDetailsDataDtoArrayList); + getSetTrade(passiveStorageResponseDataList); } } else { logger.info("没有查询到任何数据!不需要同步"); } long endMillis = System.currentTimeMillis(); - String threadNameStrEnd = StrUtil.format("OFS售后入库(TOB)同步U8C销售订单(库存同步) 售后入库单号:{} 耗时:{}", code, (endMillis - startMillis)); + String threadNameStrEnd = StrUtil.format("OFS无源入库(TOB)同步U8C销售订单(库存同步) 售后入库单号:{} 耗时:{}", code, (endMillis - startMillis)); logger.info(threadNameStrEnd); } catch (Exception e) { logger.error("startImplementByCode方法抛出异常", e); @@ -430,15 +421,15 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private void getSetStock(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { + private void getSetStock(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { LOCK1.lock(); try { - //保存到mysql - batchInsert(returnGoodHeaderDetailsDataDtoArrayList); //过滤成功的数据 - List stockinOrderList = filterDataStock(returnGoodHeaderDetailsDataDtoArrayList); + List data = filterDataStock(returnGoodHeaderDetailsDataDtoArrayList); + //保存到mysql + batchInsert(data); //执行推送主逻辑 - implementStock(stockinOrderList); + implementStock(data); } catch (Exception e) { logger.error("getSetStock方法抛出异常", e); } finally { @@ -451,15 +442,15 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private void getSetTrade(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { + private void getSetTrade(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { LOCK2.lock(); try { - //保存到mysql - batchInsert(returnGoodHeaderDetailsDataDtoArrayList); //过滤成功的数据 - List stockinOrderList = filterDataTran(returnGoodHeaderDetailsDataDtoArrayList); + List data = filterDataTran(returnGoodHeaderDetailsDataDtoArrayList); + //保存到mysql + batchInsert(data); //执行推送主逻辑 - implementSuccessfulTrade(stockinOrderList); + implementSuccessfulTrade(data); } catch (Exception e) { logger.error("getSetTrade方法抛出异常", e); } finally { @@ -472,67 +463,68 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private List filterDataStock(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { - synchronized (PUSH_LOCK1) { - // List headerDetailsDtoList1 = new ArrayList<>(); - List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); - if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100); - for (int i = 0; i < splitListByCount.size(); i++) { - List stockinOrderList = splitListByCount.get(i); - String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList); - List tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr); - tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities); - } + private List filterDataStock(List passiveStorageResponseDataDtoArrayList) throws Exception { + List ofsPassiveorderDetailEntitiesList = new ArrayList<>(); + //查询每行无源入库单,对应的推送状态 + if (passiveStorageResponseDataDtoArrayList != null && passiveStorageResponseDataDtoArrayList.size() > 0) { + List> lists = SplitListByCountUtil.splitListByCount(passiveStorageResponseDataDtoArrayList, 1000); + for (int i = 0; i < lists.size(); i++) { + List data = lists.get(i); + String idStr = commaConcatenatedPrimaryKeyStock(data); + List ofsPassiveorderDetailEntities = queryStockTocOutLog(idStr); + ofsPassiveorderDetailEntitiesList.addAll(ofsPassiveorderDetailEntities); } - return filterDataRowsAsPushOrFailedStock(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList); } + return filterDataRowsAsPushOrFailedStock(ofsPassiveorderDetailEntitiesList, passiveStorageResponseDataDtoArrayList); } /** - * 筛选出未推送、或者失败的数据行,过滤库存同步业务 + * 过滤库存同步业务,筛选出未推送、或者失败的数据行,使用批处理并且直接在内存中计算这样比较高效 * - * @param tocofsReturngoodsDetailedEntityList 日志行状态,可能为0 - * @param returnGoodHeaderDetailsDataDtoArrayList 返回结果 + * @param tocofsReturngoodsDetailedEntityList 无源入库单推送状态信息 + * @param returnGoodHeaderDetailsDataDtoArrayList O 无源入库单对象封装 * @author liuyang */ - private List filterDataRowsAsPushOrFailedStock(List tocofsReturngoodsDetailedEntityList, List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { - List targetHeaderDetailsDtoList = new ArrayList<>(); + private List filterDataRowsAsPushOrFailedStock(List tocofsReturngoodsDetailedEntityList, List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { + List targetHeaderDetailsDtoList = new ArrayList<>(); if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { + //如果推送状态为 null,则赋予"",便于 stream 计算 + List resultList = tocofsReturngoodsDetailedEntityList.stream().map(obj -> { + if (obj.getNewstate() == null) { + obj.setNewstate(""); + } + return obj; + }).collect(Collectors.toList()); + //汇总每个 id 对应的推送状态 + Map no2NameMap = resultList.stream().collect(Collectors.toMap(OfsPassiveorderDetailEntity::getId, OfsPassiveorderDetailEntity::getNewstate)); + //字段Y(成功)或者为H(待处理)可以视为成功,完成了小段业务闭环的数据行 String succeseeY = "Y"; String succeseeH = "H"; for (int i = 0; i < returnGoodHeaderDetailsDataDtoArrayList.size(); i++) { - StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoArrayList.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); - List details = stockinOrder.getDetails(); + PassiveStorageResponse.Data data = returnGoodHeaderDetailsDataDtoArrayList.get(i); + PassiveStorageResponse.Header header = data.getHeader(); + List details = data.getDetails(); - List targetDetails = new ArrayList<>(); + List targetDetails = new ArrayList<>(); for (int j = 0; j < details.size(); j++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = details.get(j); + PassiveStorageResponse.Details details1 = details.get(j); Boolean isSuccess = false; - String newstate = null; - if (tocofsReturngoodsDetailedEntityList != null && tocofsReturngoodsDetailedEntityList.size() > 0) { - for (int k = 0; k < tocofsReturngoodsDetailedEntityList.size(); k++) { - TocofsReturngoodsDetailedEntity tocofsReturngoodsDetailedEntity = tocofsReturngoodsDetailedEntityList.get(k); - if (tocofsReturngoodsDetailedEntity.getId().equals(stockinB.getId())) { - newstate = tocofsReturngoodsDetailedEntity.getNewstate(); - if (succeseeY.equals(newstate) || succeseeH.equals(newstate)) { - isSuccess = true; - } - } - } + + String newstate = no2NameMap.get(details1.getId()); + if (newstate != null && !"".equals(newstate) && (succeseeY.equals(newstate) || succeseeH.equals(newstate))) { + isSuccess = true; } if (!isSuccess) { - stockinB.setNewstate(newstate); - targetDetails.add(stockinB); + targetDetails.add(details1); } } if (targetDetails.size() > 0) { //如果明细行中,还存在未推送或者失败的数据,则需要更新明细行 - stockinOrder.setDetails(targetDetails); - targetHeaderDetailsDtoList.add(stockinOrder); + //相当于覆盖对应的对象 + data.setDetails(targetDetails); + targetHeaderDetailsDtoList.add(data); } } } @@ -546,28 +538,28 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * @param returnGoodHeaderDetailsDataDtoArrayList 返回结果 * @author liuyang */ - private List filterDataRowsAsPushOrFailedTran(List tocofsReturngoodsDetailedEntityList, List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { - List targetHeaderDetailsDtoList = new ArrayList<>(); + private List filterDataRowsAsPushOrFailedTran(List tocofsReturngoodsDetailedEntityList, List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { + List targetHeaderDetailsDtoList = new ArrayList<>(); if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { //字段Y(成功)或者为H(待处理)可以视为成功,完成了小段业务闭环的数据行 String succeseeY = "Y"; String succeseeH = "H"; for (int i = 0; i < returnGoodHeaderDetailsDataDtoArrayList.size(); i++) { - StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoArrayList.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); - List details = stockinOrder.getDetails(); + PassiveStorageResponse.Data data = returnGoodHeaderDetailsDataDtoArrayList.get(i); + PassiveStorageResponse.Header header = data.getHeader(); + List details = data.getDetails(); - List targetDetails = new ArrayList<>(); + List targetDetails = new ArrayList<>(); for (int j = 0; j < details.size(); j++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = details.get(j); + PassiveStorageResponse.Details details1 = details.get(j); Boolean isSuccess = false; String newstate = null; if (tocofsReturngoodsDetailedEntityList != null && tocofsReturngoodsDetailedEntityList.size() > 0) { for (int k = 0; k < tocofsReturngoodsDetailedEntityList.size(); k++) { - TocofsReturngoodsDetailedEntity tocofsReturngoodsDetailedEntity = tocofsReturngoodsDetailedEntityList.get(k); - if (tocofsReturngoodsDetailedEntity.getId().equals(stockinB.getId())) { - newstate = tocofsReturngoodsDetailedEntity.getNewstate2(); + OfsPassiveorderDetailEntity ofsPassiveorderDetailEntity = tocofsReturngoodsDetailedEntityList.get(k); + if (ofsPassiveorderDetailEntity.getId().equals(details1.getId())) { + newstate = ofsPassiveorderDetailEntity.getNewstate2(); if (succeseeY.equals(newstate) || succeseeH.equals(newstate)) { isSuccess = true; } @@ -575,14 +567,13 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } } if (!isSuccess) { - stockinB.setNewstate(newstate); - targetDetails.add(stockinB); + targetDetails.add(details1); } } if (targetDetails.size() > 0) { //如果明细行中,还存在未推送或者失败的数据,则需要更新明细行 - stockinOrder.setDetails(targetDetails); - targetHeaderDetailsDtoList.add(stockinOrder); + data.setDetails(targetDetails); + targetHeaderDetailsDtoList.add(data); } } } @@ -594,12 +585,12 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private List queryStockTocOutLog(String idStr) throws Exception { - List tocofsReturngoodsDetailedEntities = null; + private List queryStockTocOutLog(String idStr) throws Exception { + List tocofsReturngoodsDetailedEntities = null; if (idStr != null && !"".equals(idStr.trim())) { - TocofsReturngoodsDetailedEntity tocofsReturngoodsDetailedEntity = new TocofsReturngoodsDetailedEntity(); - tocofsReturngoodsDetailedEntity.setIds(idStr); - tocofsReturngoodsDetailedEntities = iTocofsReturngoodsDetailedDao.query(tocofsReturngoodsDetailedEntity); + OfsPassiveorderDetailEntity ofsPassiveorderDetailEntity = new OfsPassiveorderDetailEntity(); + ofsPassiveorderDetailEntity.setIds(idStr); + tocofsReturngoodsDetailedEntities = iOfsPassiveorderDetailDao.query(ofsPassiveorderDetailEntity); } else { logger.error("idStr为空,无法查询数据!"); } @@ -608,24 +599,22 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { /** * 逗号拼接字符串主键,作为批处理的一部分,方便下一步的批量查询操作 + * 入库和退款导致完成都可以通用 * * @author liuyang */ - private String commaConcatenatedPrimaryKeyStock(List headerDetailsDtoList2) throws Exception { + private String commaConcatenatedPrimaryKeyStock(List headerDetailsDtoList2) throws Exception { StringBuffer idStr = new StringBuffer(); if (headerDetailsDtoList2 != null && headerDetailsDtoList2.size() > 0) { for (int i = 0; i < headerDetailsDtoList2.size(); i++) { - StockinOrderSearchResponse.StockinOrder stockinOrder = headerDetailsDtoList2.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); - List details = stockinOrder.getDetails(); + PassiveStorageResponse.Data data = headerDetailsDtoList2.get(i); + PassiveStorageResponse.Header header = data.getHeader(); + List details = data.getDetails(); for (int j = 0; j < details.size(); j++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = details.get(j); - Assert.notNull(stockinB.getId(), "O明细主键不能为空!"); - Assert.state(!"".equals(stockinB.getId()), "O明细主键不能为空!"); - - idStr.append("'"); - idStr.append(stockinB.getId()); - idStr.append("'"); + PassiveStorageResponse.Details details1 = details.get(j); + Assert.notNull(details1.getId(), "O明细主键不能为空!"); + Assert.state(!"".equals(details1.getId()), "O明细主键不能为空!"); + idStr.append(details1.getId()); idStr.append(","); } } @@ -641,17 +630,16 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private List filterDataTran(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { + private List filterDataTran(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { synchronized (PUSH_LOCK2) { - // List headerDetailsDtoList1 = new ArrayList<>(); - List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); + List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100); - for (int i = 0; i < splitListByCount.size(); i++) { - List stockinOrderList = splitListByCount.get(i); - String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList); - List tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr); - tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities); + List> lists = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100); + for (int i = 0; i < lists.size(); i++) { + List data = lists.get(i); + String idStr = commaConcatenatedPrimaryKeyStock(data); + List ofsPassiveorderDetailEntities = queryStockTocOutLog(idStr); + tocofsReturngoodsDetailedEntityList.addAll(ofsPassiveorderDetailEntities); } } return filterDataRowsAsPushOrFailedTran(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList); @@ -659,110 +647,166 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } /** - * 保存抓取到的数据到mysql底表,如果底表里已经存在,则会忽略 + * 保存抓取到的数据到mysql底表,如果底表里已经存在,则会忽略,并且发生更新 * - * @param returnGoodHeaderDetailsDataDtoArrayList 数据行 + * @param passiveStorageResponseDataDtoArrayList 需要保存到 Mysql 底表的数据行,采用批量插入的方式 + * @author liuyang */ - private void batchInsert(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { - if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - List headerDetailsDtoList1 = new ArrayList<>(); - List headerDetailsDtoList2 = new ArrayList<>(); - for (StockinOrderSearchResponse.StockinOrder index : returnGoodHeaderDetailsDataDtoArrayList) { - StockinOrderSearchResponse.StockinOrder.StockinH header = index.getHeader();// 主表 - List details = index.getDetails();//明细表 - for (int i = 0; i < details.size(); i++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = details.get(i); - stockinB.setReturnGoodSearchHeaderDto(header); + private void batchInsert(List passiveStorageResponseDataDtoArrayList) throws Exception { + if (passiveStorageResponseDataDtoArrayList != null && passiveStorageResponseDataDtoArrayList.size() > 0) { + List headerDetailsDtoList1 = new ArrayList<>(); + List headerDetailsDtoList2 = new ArrayList<>(); + + for (PassiveStorageResponse.Data index : passiveStorageResponseDataDtoArrayList) { + //主表、明细表 + PassiveStorageResponse.Header header = index.getHeader(); + List details = index.getDetails(); + if (details != null && details.size() > 0) { + for (PassiveStorageResponse.Details passiveStorageResponseDetails : details) { + passiveStorageResponseDetails.setHeader(header); + } } headerDetailsDtoList1.add(header); headerDetailsDtoList2.addAll(details); } //每100作为一个批次插入主表,根据主键(id)判断是否重复,如果重复的,则不进行插入 - List> lists = SplitListByCountUtil.splitListByCount(headerDetailsDtoList1, 100); + List> lists = SplitListByCountUtil.splitListByCount(headerDetailsDtoList1, 100); for (int i = 0; i < lists.size(); i++) { - List stockinHS = lists.get(i); - List tocofsReturngoodsEntities = copyHeaderDto(stockinHS); - if (tocofsReturngoodsEntities.size() > 0) { - logger.info("TocofsReturngoodsEntity:插入底表{}个对象(表头)", tocofsReturngoodsEntities.size()); - iTocofsReturngoodsDao.entityInsertOrUpdateBatch(tocofsReturngoodsEntities); - } else { - logger.info("TocofsReturngoodsEntity:没有对象被插入表头底表"); + List headers = lists.get(i); + + final Throwable[] childException = {null}; + long startTime = System.currentTimeMillis(); + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + try { + List ofsPassiveorderHeaderEntities = copyHeaderDto(headers); + if (ofsPassiveorderHeaderEntities.size() > 0) { + logger.info("插入底表{}个对象(表头)", ofsPassiveorderHeaderEntities.size()); + iOfsPassiveorderHeaderDao.entityInsertOrUpdateBatch(ofsPassiveorderHeaderEntities); + } else { + logger.info("ofsPassiveorderHeaderEntities:没有对象被插入表头底表"); + } + } catch (Exception e) { + logger.error("线程保存无源件主表抛出异常", e); + childException[0] = e; + } + } + }); + thread.start(); + try { + thread.join(); + } catch (Exception e) { + logger.error("线程保存TOC退货主表抛出异常", e); + childException[0] = e; + } + long endTime = System.currentTimeMillis(); + logger.info("插入或更新无源入库单表-耗时:{}", (endTime - startTime)); + + //如果子线程抛出异常,则反馈到主线程方便排查 + if (childException[0] != null) { + Assert.state(false, childException[0].getMessage()); } } //插入明细表 - List> lists1 = SplitListByCountUtil.splitListByCount(headerDetailsDtoList2, 100); + List> lists1 = SplitListByCountUtil.splitListByCount(headerDetailsDtoList2, 100); for (int i = 0; i < lists1.size(); i++) { - List stockinBS = lists1.get(i); - List tocofsReturngoodsDetailedEntities = copyDetailsDto(stockinBS); - if (tocofsReturngoodsDetailedEntities.size() > 0) { - logger.info("TocofsReturngoodsDetailedEntity:插入底表{}个对象(表体)", tocofsReturngoodsDetailedEntities.size()); - iTocofsReturngoodsDetailedDao.entityInsertOrUpdateBatch(tocofsReturngoodsDetailedEntities); - } else { - logger.info("TocofsReturngoodsDetailedEntity:没有对象被插入表头底表"); + List details = lists1.get(i); + List ofsPassiveorderDetailEntities = copyDetailsDto(details); + + final Throwable[] childException = {null}; + long startTime = System.currentTimeMillis(); + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + try { + if (ofsPassiveorderDetailEntities.size() > 0) { + logger.info("插入底表{}个对象(表体)", ofsPassiveorderDetailEntities.size()); + iOfsPassiveorderDetailDao.entityInsertOrUpdateBatch(ofsPassiveorderDetailEntities); + } else { + logger.info("ofsPassiveorderDetailEntities:没有对象被插入表头底表"); + } + } catch (Exception e) { + logger.error("线程保存TOC退货明细抛出异常", e); + childException[0] = e; + } + } + }); + thread.start(); + try { + thread.join(); + } catch (Exception e) { + logger.error("线程保存无源件明细表抛出异常", e); + childException[0] = e; + } + long endTime = System.currentTimeMillis(); + logger.info("插入或更新TOC退货入库表体-耗时:{}", (endTime - startTime)); + //如果子线程抛出异常,则反馈到主线程方便排查 + if (childException[0] != null) { + Assert.state(false, childException[0].getMessage()); } } - } else { - logger.info("returnGoodHeaderDetailsDataDtoArrayList为空或者原始为零!"); } } /** * 代码同步逻辑 * - * @param returnGoodHeaderDetailsDataDtoList 查询得到的O出库单对象 + * @param passiveStorageResponseDataDtoArrayList 需要推送的TOB无源入库单 * @author liuyang */ - private void implementStock(List returnGoodHeaderDetailsDataDtoList) throws Exception { - if (returnGoodHeaderDetailsDataDtoList != null) { - logger.info("TOB售后入库:{}行需要进行数据转换", returnGoodHeaderDetailsDataDtoList.size()); + private void implementStock(List passiveStorageResponseDataDtoArrayList) throws Exception { + if (passiveStorageResponseDataDtoArrayList != null) { + logger.info("TOC无源入库单:{}行需要进行数据转换", passiveStorageResponseDataDtoArrayList.size()); } - if (returnGoodHeaderDetailsDataDtoList != null && returnGoodHeaderDetailsDataDtoList.size() > 0) { + if (passiveStorageResponseDataDtoArrayList != null && passiveStorageResponseDataDtoArrayList.size() > 0) { try { // 查询基本档案 -// String sceneType = "stock"; - List orderToBHeaderDtos = queryBasicArchivesStock(returnGoodHeaderDetailsDataDtoList); + String sceneType = "stock"; + List orderToBHeaderDtoV2s = queryBasicArchivesStock(passiveStorageResponseDataDtoArrayList, sceneType); // 查询U8C业务流程 BdBusitypeEntity bdBusitypeEntity = u8cOperationFlow(); // 查询销售收发类别 // BdRdclEntity bdRdclEntity = rdclUtil.queryRdClObject("201"); - for (int i = 0; i < orderToBHeaderDtos.size(); i++) { - OrderToBHeaderDto orderOutTobHeaderDto = orderToBHeaderDtos.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = orderOutTobHeaderDto.getHeader(); - List details = orderOutTobHeaderDto.getDetails(); + for (int i = 0; i < orderToBHeaderDtoV2s.size(); i++) { + OrderToBHeaderDtoV2 orderToBHeaderDtoV2 = orderToBHeaderDtoV2s.get(i); + PassiveStorageResponse.Header header = orderToBHeaderDtoV2.getHeader(); + List details = orderToBHeaderDtoV2.getDetails(); + try { //销售公司、发货公司 - BdCorpEntity bdCorpEntity = orderOutTobHeaderDto.getBdCorpEntity(); + BdCorpEntity bdCorpEntity = orderToBHeaderDtoV2.getBdCorpEntity(); //发货库存组织 - BdCalbodyEntity bdCalbodyEntity = orderOutTobHeaderDto.getBdCalbodyEntity(); + BdCalbodyEntity bdCalbodyEntity = orderToBHeaderDtoV2.getBdCalbodyEntity(); //入库参数 - BdStordocEntity bdStordocEntity = orderOutTobHeaderDto.getBdStordocEntity(); + BdStordocEntity bdStordocEntity = orderToBHeaderDtoV2.getBdStordocEntity(); //销售组织 - BdSalestruEntity bdSalestruEntity = orderOutTobHeaderDto.getBdSalestruEntity(); + BdSalestruEntity bdSalestruEntity = orderToBHeaderDtoV2.getBdSalestruEntity(); //业务部门 - BdDeptdocEntity bdDeptdocEntity = orderOutTobHeaderDto.getBdDeptdocEntity(); + BdDeptdocEntity bdDeptdocEntity = orderToBHeaderDtoV2.getBdDeptdocEntity(); //客商基本档案 - BdCubasdocEntity bdCubasdocEntity = orderOutTobHeaderDto.getBdCubasdocEntity(); + BdCubasdocEntity bdCubasdocEntity = orderToBHeaderDtoV2.getBdCubasdocEntity(); //客商基本档案 - BdCumandocEntity bdCumandocEntity = orderOutTobHeaderDto.getBdCumandocEntity(); + BdCumandocEntity bdCumandocEntity = orderToBHeaderDtoV2.getBdCumandocEntity(); //发货公司 - BdCorpEntity deliverGoodsCorp = orderOutTobHeaderDto.getDeliverGoodsCorp(); + BdCorpEntity deliverGoodsCorp = orderToBHeaderDtoV2.getDeliverGoodsCorp(); //平台档案 - BdDefdocEntity platformArchives = orderOutTobHeaderDto.getPlatformArchives(); + BdDefdocEntity platformArchives = orderToBHeaderDtoV2.getPlatformArchives(); //U8C店铺档案 - BdDefdocEntity shopArchives = orderOutTobHeaderDto.getShopArchives(); + BdDefdocEntity shopArchives = orderToBHeaderDtoV2.getShopArchives(); //生成业务日期 - String generateBusinessDate = createGenerateBusinessDate(orderOutTobHeaderDto); + String generateBusinessDate = createGenerateBusinessDate(header); //U8C销售订单 - SoSaleEntity soSaleEntity = orderOutTobHeaderDto.getSoSaleEntity(); + SoSaleEntity soSaleEntity = orderToBHeaderDtoV2.getSoSaleEntity(); //OFS销售订单 - SaleOrderMessageDto saleOrderMessageDto = orderOutTobHeaderDto.getSaleOrderMessageDto(); + SaleOrderMessageDto saleOrderMessageDto = orderToBHeaderDtoV2.getSaleOrderMessageDto(); //OFS售后订单 - RerturnGoodsOrderSearchData ofsRertunOrder1 = orderOutTobHeaderDto.getOfsRertunOrder(); + RerturnGoodsOrderSearchData ofsRertunOrder1 = orderToBHeaderDtoV2.getOfsRertunOrder(); //OFS收发类别 - BdRdclEntity bdRdclEntity = orderOutTobHeaderDto.getBdRdclEntity(); + BdRdclEntity bdRdclEntity = orderToBHeaderDtoV2.getBdRdclEntity(); SaleorderRequestDto saleorderRequestDto = new SaleorderRequestDto(); SaleorderRequestParentDto saleorderRequestParentDto = new SaleorderRequestParentDto(); @@ -784,7 +828,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { saleorderRequestParentDto.setVdef17(ProfilesActiveConstant.sourceSystem1);//来源系统 //原单单号、原单主键,销售发票就是靠这个字段关联的 - saleorderRequestParentDto.setVdef19(header.getCode()); + saleorderRequestParentDto.setVdef19(header.getReceiptCode()); saleorderRequestParentDto.setVdef20(header.getId()); //平台 @@ -813,15 +857,15 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { //把汇总好的出库单明细行合并成一行 for (int j = 0; j < details.size(); j++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = details.get(j); + PassiveStorageResponse.Details details1 = details.get(j); //存货管理档案:取发货公司的存货管理档案 - BdInvmandocEntity bdInvmandocEntity = queryInventoryMan(stockinB, bdCalbodyEntity.getPkCorp()); + BdInvmandocEntity bdInvmandocEntity = queryInventoryMan(details1, bdCalbodyEntity.getPkCorp()); //存货基础档案 BdInvbasdocEntity bdInvbasdocEntity = queryStockBasicArchives(bdInvmandocEntity.getPkInvmandoc(), deliverGoodsCorp.getPkCorp()); //根据存货基础档案编码,查询当前存货的税率 BdTaxitemsEntity bdTaxitemsEntity1 = queryBdTaxitems(bdInvbasdocEntity.getInvcode()); //取对应的售后订单明细,主要是取这个价格 - RerturnGoodsOrderSearchDetails afterSalesOrder = findAfterSalesOrder(stockinB, ofsRertunOrder1); + RerturnGoodsOrderSearchDetails afterSalesOrder = findAfterSalesOrder(details1, ofsRertunOrder1); String tax = new BigDecimal(bdTaxitemsEntity1.getTaxratio()).divide(new BigDecimal(100), 20, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString(); @@ -844,9 +888,9 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { String totalAmount = null; try { // Assert.notNull(stockinB.getTotalAmount(), "退货入库单总金额不能为空 明细行对象:{}", JSON.toJSONString(stockinB)); - Assert.notNull(stockinB.getReceivedQty(), "实收数量不能为空 售后订单:{} 售后订单主键:{}", header.getCode(), stockinB.getId()); + Assert.notNull(details1.getQuantity(), "实收数量不能为空 无源入库单号:{} 无源入库单明细主键:{}", details1.getReceiptCode(), details1.getId()); //确定实退金额,可能为O的实退金额,也可能是结存价和采购价 - totalAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, afterSalesOrder, calculationFormula, stockinB, bdInvbasdocEntity); + totalAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, afterSalesOrder, calculationFormula, details1, bdInvbasdocEntity); Assert.notNull(totalAmount, "无法确定实退金额"); // noriginalcurtaxprice = new BigDecimal(totalAmount).divide(new BigDecimal(stockinB.getReceivedQty()), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP); @@ -855,8 +899,8 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { // noriginalcursummny = noriginalcurtaxprice.multiply(new BigDecimal(stockinB.getReceivedQty())).setScale(2, BigDecimal.ROUND_HALF_UP); // noriginalcurtaxmny = noriginalcursummny.subtract(noriginalcurmny).setScale(2, BigDecimal.ROUND_HALF_UP); } catch (Exception e) { - logger.error("TOB金额计算错误", e); - Assert.state(false, "TOB金额计算错误,原因:{}", e.getMessage()); + logger.error("TOB无源件金额计算错误", e); + Assert.state(false, "TOB无源件金额计算错误,原因:{}", e.getMessage()); } //判断是否为赠品 @@ -876,7 +920,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { saleorderRequestChildrenDto.setDdeliverdate(generateBusinessDate);// 要求收货日期 saleorderRequestChildrenDto.setNexchangeotobrate("1.00000000");//折本汇率 saleorderRequestChildrenDto.setNitemdiscountrate("100.000000");//单品折扣 - saleorderRequestChildrenDto.setNnumber("-" + stockinB.getReceivedQty());//数量 + saleorderRequestChildrenDto.setNnumber("-" + details1.getQuantity());//数量 saleorderRequestChildrenDto.setNoriginalcurdiscountmny("0");//折扣额 // saleorderRequestChildrenDto.setNoriginalcurmny("-" + noriginalcurmny.stripTrailingZeros().toPlainString());//无税金额 // saleorderRequestChildrenDto.setNoriginalcurnetprice(noriginalcurprice.stripTrailingZeros().toPlainString());//无税净价 @@ -892,13 +936,13 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } else { saleorderRequestChildrenDto.setNtaxrate(new BigDecimal(bdTaxitemsEntity1.getTaxratio()).stripTrailingZeros().toPlainString()); } - saleorderRequestChildrenDto.setVdef20(stockinB.getId());//原单明细主键 + saleorderRequestChildrenDto.setVdef20(details1.getId());//原单明细主键 // saleorderRequestChildrenDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目 // saleorderRequestChildrenDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj()); saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto); - stockinB.setDef7(totalAmount);//计算应收 - stockinB.setDef8(calculationFormula.toString());//计算公式 + details1.setDef1(totalAmount);//计算应收 + details1.setDef2(calculationFormula.toString());//计算公式 } //记录成功 //销售订单单据推送到u8c @@ -906,9 +950,9 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { saleorderRequestDtoList.add(saleorderRequestDto); synchronized (PUSH_LOCK1) { - Boolean aBoolean = checkTobOrder(header.getId(), header.getCode()); + Boolean aBoolean = checkTobOrder(header.getId(), header.getReceiptCode()); if (!aBoolean) { - logger.error("经过SQL查询判断,在U8C(红字)销售订单不存在OFS入库单号为:{} OFS入库主键为:{}的单据,将调用U8C接口执行推送!", header.getCode(), header.getId()); + logger.error("经过SQL查询判断,在U8C(红字)销售订单不存在OFS无源入库单号为:{} OFS无源入库主键为:{}的单据,将调用U8C接口执行推送!", header.getReceiptCode(), header.getId()); Map> stringStringMap = new HashMap<>(); stringStringMap.put("saleorder", saleorderRequestDtoList); SoSaleResultRootDto soSaleResultRootDto = sendU8CTOCOrder(JSON.toJSONString(stringStringMap)); @@ -922,11 +966,11 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { csaleid = parentvo.getCsaleid(); pk_corp = parentvo.getPk_corp(); } - logger.info("TOB红字销售订单编号:{} 销售订单主键:{} 销售公司:{}", vreceiptcode, csaleid, pk_corp); + logger.info("TOB无源入库-红字销售订单编号:{} 销售订单主键:{} 销售公司:{}", vreceiptcode, csaleid, pk_corp); //记录成功 updateSuccessOrFail1(details, "Y", "success", vreceiptcode, csaleid); } else { - logger.error("经过SQL查询判断,在U8C(红字)销售订单存在OFS入库单号为:{} OFS入库主键为:{}的单据,为了避免造成单据重复,不推送到U8C!", header.getCode(), header.getId()); + logger.error("经过SQL查询判断,在U8C(红字)销售订单存在OFS无源入库单号为:{} OFS无源入库主键为:{}的单据,为了避免造成单据重复,不推送到U8C!", header.getReceiptCode(), header.getId()); } } } catch (Exception e) { @@ -940,7 +984,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } } } catch (Exception e) { - logger.error("TOB外层转换逻辑抛出异常", e); + logger.error("TOB无源件外层转换逻辑抛出异常", e); } } } @@ -951,26 +995,25 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private String createGenerateBusinessDate(OrderToBHeaderDto orderOutTobHeaderDto) { + private String createGenerateBusinessDate(PassiveStorageResponse.Header header) { String code = null; - if (orderOutTobHeaderDto != null && orderOutTobHeaderDto.getHeader() != null) { - code = orderOutTobHeaderDto.getHeader().getCode(); + if (header != null && header.getReceiptCode() != null) { + code = header.getReceiptCode(); } - if (orderOutTobHeaderDto != null && orderOutTobHeaderDto.getHeader() != null && orderOutTobHeaderDto.getHeader().getClosedAt() != null) { - StockinOrderSearchResponse.StockinOrder.StockinH header = orderOutTobHeaderDto.getHeader(); - String closedAt = header.getClosedAt(); + if (header != null && header.getRelatedAt() != null) { + String relatedAt = header.getRelatedAt(); String businessFormat = null; try { - Date dbill = DateUtil.parse(closedAt); + Date dbill = DateUtil.parse(relatedAt); businessFormat = DateUtil.format(dbill, "yyyy-MM-dd"); } catch (Exception e) { - logger.error("业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号:{}", e.getMessage(), code); - Assert.state(false, "业务日期生成失败closedAt(O关单时间)解析异常:{} O售后入库单号:{}", e.getMessage(), code); + logger.error("业务日期生成失败relatedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); + Assert.state(false, "业务日期生成失败closedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); } return businessFormat; } else { - logger.error("业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code); - Assert.state(false, "业务日期生成失败closedAt(O关单时间)不能为空 O售后入库单号:{}", code); + logger.error("业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); + Assert.state(false, "业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); return null; } } @@ -980,26 +1023,27 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private List queryBasicArchivesStock(List returnGoodHeaderDetailsDataDtoList) throws Exception { - if (returnGoodHeaderDetailsDataDtoList != null) { - logger.info("库存同步:需要把OFS档案转换为U8C档案的O数据条数:{}", returnGoodHeaderDetailsDataDtoList.size()); + private List queryBasicArchivesStock(List passiveStorageResponseDataDtoArrayList, String sceneType) throws Exception { + if (passiveStorageResponseDataDtoArrayList != null) { + logger.info("库存同步:需要把OFS档案转换为U8C档案的O数据条数:{}", passiveStorageResponseDataDtoArrayList.size()); } - List orderToBHeaderDtoArrayList = new ArrayList<>(); - List errorHeaderDetailsDtoDtoList = new ArrayList<>(); + List orderToBHeaderDtoArrayList = new ArrayList<>(); + List errorHeaderDetailsDtoDtoList = new ArrayList<>(); - if (returnGoodHeaderDetailsDataDtoList != null && returnGoodHeaderDetailsDataDtoList.size() > 0) { - for (int i = 0; i < returnGoodHeaderDetailsDataDtoList.size(); i++) { - StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); - List details = stockinOrder.getDetails(); + if (passiveStorageResponseDataDtoArrayList != null && passiveStorageResponseDataDtoArrayList.size() > 0) { + for (int i = 0; i < passiveStorageResponseDataDtoArrayList.size(); i++) { + PassiveStorageResponse.Data data = passiveStorageResponseDataDtoArrayList.get(i); + PassiveStorageResponse.Header header = data.getHeader(); + List details = data.getDetails(); try { //查询OFS售后订单 - Assert.notNull(header.getRefOrderCode(), "header.getRefOrderCode()不能为空!"); - RerturnGoodsOrderSearchData ofsRertunOrder = afterSalesOrderUtil.getOfsRertunOrder(header.getRefOrderCode().trim()); - Assert.notNull(ofsRertunOrder, "无法查询到OFS售后订单 编码:{}", header.getRefOrderCode()); + Assert.notNull(header.getReturnOrderCode(), "无源入库单对应的售后订单号不能为空 无源入库单:{}" + header.getReceiptCode()); + RerturnGoodsOrderSearchData ofsRertunOrder = afterSalesOrderUtil.getOfsRertunOrder(header.getReturnOrderCode().trim()); + Assert.notNull(ofsRertunOrder, "无法查询到OFS售后订单 编码:{}", header.getReturnOrderCode()); //查询OFS销售订单 + Assert.notNull(ofsRertunOrder.getHeader().getRefOrderCode(), "销售订单编码不能为空 售后订单单号:{}", ofsRertunOrder.getHeader().getRefOrderCode()); SaleOrderMessageDto saleOrderMessageDto = null; try { Assert.notNull(ofsRertunOrder.getHeader().getRefOrderCode(), "ofsRertunOrder.getHeader().getRefOrderCode()不能为空!"); @@ -1021,6 +1065,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } HeaderDto header1 = saleOrderMessageDto.getData().get(0).getHeader(); String memberId = header1.getMemberId(); + //会员id // memberId = "GYS00002"; Assert.notNull(memberId, "TOB销售订单(OFS)表头会员id不能为空,否则无法匹配U8C客商档案!"); @@ -1154,7 +1199,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { //查找平台 // String platformZdyId = "0001A210000000000JUD"; String platformZdyId = OverallConstant.getOverAllValue("u8c自定义项档案-平台主键"); - String sourcePlatformCode = header.getSourcePlatformCode(); + String sourcePlatformCode = ofsRertunOrder.getHeader().getSourcePlatformCode(); Assert.notNull(sourcePlatformCode, "sourcePlatformCode不能为空"); BdDefdocEntity bdDefdocEntity = new BdDefdocEntity(); bdDefdocEntity.setPkDefdoclist(platformZdyId); @@ -1185,7 +1230,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { Assert.state(false, "根据O店铺编码{},无法匹配到U8C店铺自定义档案 自定义档案主键:{}", ofsStoreCode, platformZdyId); } - OrderToBHeaderDto orderOutTobHeaderDto = new OrderToBHeaderDto(); + OrderToBHeaderDtoV2 orderOutTobHeaderDto = new OrderToBHeaderDtoV2(); orderOutTobHeaderDto.setBdCorpEntity(bdCorpEntityList.get(0)); orderOutTobHeaderDto.setBdCalbodyEntity(bdCalbodyEntities.get(0)); orderOutTobHeaderDto.setBdStordocEntity(bdStordocEntityList.get(0)); @@ -1206,13 +1251,12 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { orderToBHeaderDtoArrayList.add(orderOutTobHeaderDto); } catch (Exception e) { logger.error("档案转换失败", e); - //失败 String message = e.getMessage(); if (message == null) { message = "未知错误"; } - ErrorHeaderDetailsDtoDtoV2 errorHeaderDetailsDtoDto = new ErrorHeaderDetailsDtoDtoV2(); + ErrorHeaderDetailsDtoDtoV3 errorHeaderDetailsDtoDto = new ErrorHeaderDetailsDtoDtoV3(); errorHeaderDetailsDtoDto.setNewPushDate(getNewDateStr()); errorHeaderDetailsDtoDto.setNewTransmitInfo(message); errorHeaderDetailsDtoDto.setNewstate("N"); @@ -1221,12 +1265,12 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { errorHeaderDetailsDtoDtoList.add(errorHeaderDetailsDtoDto); } } - //成功 + //档案转换成功 } else { logger.info("queryBasicArchives方法对应的returnGoodHeaderDetailsDataDtoList.size为0"); } if (errorHeaderDetailsDtoDtoList.size() > 0) { - updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiryStock(errorHeaderDetailsDtoDtoList); + updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiryStock(errorHeaderDetailsDtoDtoList, sceneType); } return orderToBHeaderDtoArrayList; } @@ -1234,27 +1278,33 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { /** * 交易成功档案查询,档案转换 * - * @param returnGoodHeaderDetailsDataDtoList 查询出来的售后入库单数据 + * @param passiveStorageList O无源入库单¬ * @author liuyang */ - private List queryBasicArchivesTran(List returnGoodHeaderDetailsDataDtoList) { - if (returnGoodHeaderDetailsDataDtoList != null) { - logger.info("确认收入:需要把OFS档案转换为U8C档案的O数据条数:{}", returnGoodHeaderDetailsDataDtoList.size()); + private List queryBasicArchivesTran(List passiveStorageList, String sceneType) throws Exception { + if (passiveStorageList != null) { + logger.info("确认收入:需要把OFS档案转换为U8C档案的O数据条数:{}", passiveStorageList.size()); } - List orderToBHeaderDtoArrayList = new ArrayList<>(); - List errorHeaderDetailsDtoDtoList = new ArrayList<>(); + List orderToBHeaderDtoArrayList = new ArrayList<>(); + List errorHeaderDetailsDtoDtoList = new ArrayList<>(); - if (returnGoodHeaderDetailsDataDtoList != null && returnGoodHeaderDetailsDataDtoList.size() > 0) { - for (int i = 0; i < returnGoodHeaderDetailsDataDtoList.size(); i++) { - StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); - List details = stockinOrder.getDetails(); + if (passiveStorageList != null && passiveStorageList.size() > 0) { + for (int i = 0; i < passiveStorageList.size(); i++) { + PassiveStorageResponse.Data data = passiveStorageList.get(i); + PassiveStorageResponse.Header header = data.getHeader(); + List details = data.getDetails(); try { + Assert.state(false, "测试"); //查询OFS售后订单 - Assert.notNull(header.getRefOrderCode(), "header.getRefOrderCode()不能为空!"); - RerturnGoodsOrderSearchData ofsRertunOrder = afterSalesOrderUtil.getOfsRertunOrder(header.getRefOrderCode().trim()); - Assert.notNull(ofsRertunOrder, "无法查询到OFS售后订单 编码:{}", header.getRefOrderCode()); + Assert.notNull(header.getReturnOrderCode(), "header.getReturnOrderCode()不能为空!"); + RerturnGoodsOrderSearchData ofsRertunOrder = afterSalesOrderUtil.getOfsRertunOrder(header.getReturnOrderCode().trim()); + Assert.notNull(ofsRertunOrder, "无法查询到OFS售后订单 单据编码:{}", header.getReturnOrderCode()); + //2025-03-17 16:41:14 过滤掉不存在交易成功时间的无源入库单 +// ofsRertunOrder.getHeader().setRefundedAt("2025-03-15 11:57:06"); + if (ofsRertunOrder.getHeader() == null || ofsRertunOrder.getHeader().getRefundedAt() == null || "".equals(ofsRertunOrder.getHeader().getRefundedAt().trim())) { + Assert.state(false, "当前无源入库单对应的售后订单没有退款完成时间!"); + } //查询OFS销售订单 SaleOrderMessageDto saleOrderMessageDto = null; @@ -1279,7 +1329,6 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } HeaderDto header1 = saleOrderMessageDto.getData().get(0).getHeader(); String memberId = header1.getMemberId(); - //测试 // memberId = "GYS00002"; Assert.notNull(memberId, "TOB销售订单(OFS)表头会员id不能为空,否则无法匹配U8C客商档案!"); Assert.state(!"".equals(memberId.trim()), "TOB销售订单(OFS)表头会员id不能为空,否则无法匹配U8C客商档案!"); @@ -1292,19 +1341,19 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { Assert.notNull(bdRdclEntity, "根据收发类别编码:{} 无法匹配到U8C收发类别"); //2024年8月30日 10:57:29 查询对应的U8C销售订单,注意要把编码和主键一起查询,O主键导入到U8C中,对于U8C来说可能会重复 - Assert.notNull(header.getCode(), "header.getCode()不能为空"); + Assert.notNull(header.getReceiptCode(), "header.getCode()不能为空"); Assert.notNull(header.getId(), "header.getId()不能为空"); SoSaleEntity soSaleEntity = new SoSaleEntity(); soSaleEntity.setDr(0L); soSaleEntity.setDataSourceCode("lets_u8c"); - soSaleEntity.setVdef19(header.getCode().trim()); + soSaleEntity.setVdef19(header.getReceiptCode().trim()); soSaleEntity.setVdef20(header.getId().trim()); soSaleEntity.setBretinvflag("Y");//仅查询红字销售订单 List soSaleEntityList = iSoSaleDao.query(soSaleEntity); if (soSaleEntityList == null || soSaleEntityList.size() == 0) { - Assert.state(false, "根据O售后入库单主键:{} 单号:{} 无法匹配到U8C红字销售订单(传到U8C可能失败了!bretinvflag=Ys)", header.getId(), header.getCode()); + Assert.state(false, "根据O无源入库单主键:{} 单号:{} 无法匹配到U8C红字销售订单(传到U8C可能失败了!bretinvflag=Y)", header.getId(), header.getReceiptCode()); } else if (soSaleEntityList.size() >= 2) { - Assert.state(false, "根据O出库单主键:{} 单号:{} 匹配到{}个U8C销售订单", header.getId(), header.getCode(), soSaleEntityList.size()); + Assert.state(false, "根据O无源入库单主键:{} 单号:{} 匹配到{}个U8C红字销售订单,存在歧义!", header.getId(), header.getReceiptCode(), soSaleEntityList.size()); } //查询销售订单明细行表体 @@ -1315,8 +1364,6 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { List soSaleorderBEntityList = iSoSaleorderBDao.query(soSaleorderBEntity); if (soSaleorderBEntityList == null || soSaleorderBEntityList.size() == 0) { Assert.state(false, "根据O销售订单主键:{},无法匹配到U8C销售订单明细行(传到U8C可能失败了!)", soSaleEntityList.get(soSaleEntityList.size() - 1).getCsaleid()); - } else if (soSaleorderBEntityList.size() >= 2) { - Assert.state(false, "根据O销售订单主键:{},无法匹配到U8C销售订单明细行(传到U8C可能失败了!)", soSaleEntityList.get(soSaleEntityList.size() - 1).getCsaleid()); } //查询U8C销售订单对应的销售出库单表头 @@ -1468,7 +1515,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { //查找平台 // String platformZdyId = "0001A210000000000JUD"; String platformZdyId = OverallConstant.getOverAllValue("u8c自定义项档案-平台主键"); - String sourcePlatformCode = header.getSourcePlatformCode(); + String sourcePlatformCode = ofsRertunOrder.getHeader().getSourcePlatformCode(); Assert.notNull(sourcePlatformCode, "sourcePlatformCode不能为空!"); BdDefdocEntity bdDefdocEntity = new BdDefdocEntity(); bdDefdocEntity.setPkDefdoclist(platformZdyId); @@ -1512,7 +1559,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { // Assert.state(false, "根据O出库单主键:{} 单号:{} 匹配到{}个U8C销售订单", header.getId(), header.getCode(), soSaleEntityList.size()); // } - OrderToBHeaderDto orderOutTobHeaderDto = new OrderToBHeaderDto(); + OrderToBHeaderDtoV2 orderOutTobHeaderDto = new OrderToBHeaderDtoV2(); orderOutTobHeaderDto.setBdCorpEntity(bdCorpEntityList.get(0)); orderOutTobHeaderDto.setBdCalbodyEntity(bdCalbodyEntities.get(0)); orderOutTobHeaderDto.setBdStordocEntity(bdStordocEntityList.get(0)); @@ -1538,17 +1585,16 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { BeanUtil.copyPropertiesV2(header, orderOutTobHeaderDto); orderToBHeaderDtoArrayList.add(orderOutTobHeaderDto); } catch (Exception e) { - logger.error("TOB退货确认收入", e); - + logger.error("TOB无源退货确认收入", e); //失败 String message = e.getMessage(); if (message == null) { message = "未知错误"; } - ErrorHeaderDetailsDtoDtoV2 errorHeaderDetailsDtoDto = new ErrorHeaderDetailsDtoDtoV2(); - errorHeaderDetailsDtoDto.setNewPushDate2(getNewDateStr()); - errorHeaderDetailsDtoDto.setNewTransmitInfo2(message); - errorHeaderDetailsDtoDto.setNewstate2("N"); + ErrorHeaderDetailsDtoDtoV3 errorHeaderDetailsDtoDto = new ErrorHeaderDetailsDtoDtoV3(); + errorHeaderDetailsDtoDto.setNewPushDate(getNewDateStr()); + errorHeaderDetailsDtoDto.setNewTransmitInfo(message); + errorHeaderDetailsDtoDto.setNewstate("N"); errorHeaderDetailsDtoDto.setHeader(header); errorHeaderDetailsDtoDto.setDetails(details); errorHeaderDetailsDtoDtoList.add(errorHeaderDetailsDtoDto); @@ -1558,55 +1604,54 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { logger.info("queryBasicArchives方法对应的returnGoodHeaderDetailsDataDtoList.size为0"); } if (errorHeaderDetailsDtoDtoList.size() > 0) { - updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiryTran(errorHeaderDetailsDtoDtoList); + updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiryStock(errorHeaderDetailsDtoDtoList, sceneType); } return orderToBHeaderDtoArrayList; } /** - * bean copy - * 2024年8月15日 14:19:36 + * 对象拷贝 bean copy + * 2024年8月9日 11:23:57 */ - private List copyHeaderDto(List stockinHS) { - List tocofsReturngoodsEntityArrayList = new ArrayList<>(); + private List copyHeaderDto(List stockinHS) { + List ofsPassiveorderHeaderEntityArrayList = new ArrayList<>(); if (stockinHS != null && stockinHS.size() > 0) { for (int i = 0; i < stockinHS.size(); i++) { - StockinOrderSearchResponse.StockinOrder.StockinH stockinH = stockinHS.get(i); + PassiveStorageResponse.Header header = stockinHS.get(i); - TocofsReturngoodsEntity tocofsReturngoodsEntity = new TocofsReturngoodsEntity(); - BeanUtil.copyPropertiesV2(stockinH, tocofsReturngoodsEntity); - tocofsReturngoodsEntityArrayList.add(tocofsReturngoodsEntity); + OfsPassiveorderHeaderEntity ofsPassiveorderHeaderEntity = new OfsPassiveorderHeaderEntity(); + BeanUtil.copyPropertiesV2(header, ofsPassiveorderHeaderEntity); + ofsPassiveorderHeaderEntityArrayList.add(ofsPassiveorderHeaderEntity); } } else { logger.info("需要复制{}个bean对象(O表头)", stockinHS.size()); } - return tocofsReturngoodsEntityArrayList; + return ofsPassiveorderHeaderEntityArrayList; } /** - * bean copy - * 2024年8月15日 14:24:38 + * 对象拷贝 bean copy + * + * @author liuyang */ - private List copyDetailsDto(List stockinBS) { - List tocofsSaleoutDetailedEntityArrayList = new ArrayList<>(); + private List copyDetailsDto(List stockinBS) { + List ofsPassiveorderDetailEntityArrayList = new ArrayList<>(); if (stockinBS != null && stockinBS.size() > 0) { for (int i = 0; i < stockinBS.size(); i++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = stockinBS.get(i); - - //明细行中引用的表头 - StockinOrderSearchResponse.StockinOrder.StockinH returnGoodSearchHeaderDto = stockinB.getReturnGoodSearchHeaderDto(); - - TocofsReturngoodsDetailedEntity tocofsReturngoodsDetailedEntity = new TocofsReturngoodsDetailedEntity(); -// tocofsReturngoodsDetailedEntity.setBusinessType("TOB_RETURN"); - //处理填充额外字段 - BeanUtil.copyPropertiesV2(stockinB, tocofsReturngoodsDetailedEntity); - createPrimaryKeyAndBusinessDateAndBusinessType(tocofsReturngoodsDetailedEntity, returnGoodSearchHeaderDto); - tocofsSaleoutDetailedEntityArrayList.add(tocofsReturngoodsDetailedEntity); + PassiveStorageResponse.Details details = stockinBS.get(i); + //表头 + PassiveStorageResponse.Header header = details.getHeader(); + //拷贝对象 + OfsPassiveorderDetailEntity tocofsReturngoodsDetailedEntity = new OfsPassiveorderDetailEntity(); + BeanUtil.copyPropertiesV2(details, tocofsReturngoodsDetailedEntity); + //补充额外的字段信息 + createPrimaryKeyAndBusinessDateAndBusinessType(tocofsReturngoodsDetailedEntity, header); + ofsPassiveorderDetailEntityArrayList.add(tocofsReturngoodsDetailedEntity); } } else { - logger.info("需要复制{}个bean对象(O表体)", tocofsSaleoutDetailedEntityArrayList.size()); + logger.info("需要复制{}个bean对象(O表体)", ofsPassiveorderDetailEntityArrayList.size()); } - return tocofsSaleoutDetailedEntityArrayList; + return ofsPassiveorderDetailEntityArrayList; } /** @@ -1617,7 +1662,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { private BdBusitypeEntity u8cOperationFlow() throws Exception { //查询业务流程 //2024年8月6日 11:33:07 具体的业务流程名称,还需要实施提供 - String processName = "TOB销售"; + String processName = "TOB无源件"; BdBusitypeEntity bdBusitypeEntity = queryBdBusitypeUtil.queryBdBusitype(processName); Assert.notNull(bdBusitypeEntity, "根据业务流程名称({})没有查询到业务流程", processName); return bdBusitypeEntity; @@ -1630,7 +1675,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * @param detailsDto 出库单存货明细行 * @author liuyang */ - private BdInvmandocEntity queryInventoryMan(StockinOrderSearchResponse.StockinOrder.StockinB detailsDto, String pkCorp) throws Exception { + private BdInvmandocEntity queryInventoryMan(PassiveStorageResponse.Details detailsDto, String pkCorp) throws Exception { Assert.notNull(detailsDto, "sonDetailsDto不能为空"); Assert.notNull(detailsDto.getSkuCode(), "O存货商家编码不能为空"); Assert.notNull(pkCorp, "发货公司主键不能为空"); @@ -1773,92 +1818,92 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { /** * 填充主表主键、业务日期、业务类型 * 2024年8月15日 17:31:54 + * + * @param ofsPassiveorderDetailEntity 无源件明细表 dao 对象 + * @param header O 无源件明细原始对象 */ - private void createPrimaryKeyAndBusinessDateAndBusinessType(TocofsReturngoodsDetailedEntity tocofsReturngoodsDetailedEntity, StockinOrderSearchResponse.StockinOrder.StockinH returnGoodSearchHeaderDto) { - if (tocofsReturngoodsDetailedEntity != null && returnGoodSearchHeaderDto != null) { + private void createPrimaryKeyAndBusinessDateAndBusinessType(OfsPassiveorderDetailEntity ofsPassiveorderDetailEntity, PassiveStorageResponse.Header header) { + if (ofsPassiveorderDetailEntity != null && header != null) { //主表主键 - if (returnGoodSearchHeaderDto.getId() != null) { - tocofsReturngoodsDetailedEntity.setMaintableid(returnGoodSearchHeaderDto.getId()); + if (header.getId() != null) { + ofsPassiveorderDetailEntity.setHeaderid(header.getId()); } - //业务日期-入库时间 - if (returnGoodSearchHeaderDto.getClosedAt() != null) { - tocofsReturngoodsDetailedEntity.setBusinessdate(returnGoodSearchHeaderDto.getClosedAt()); - } - //业务日期-退款完成时间 - if (returnGoodSearchHeaderDto.getRefundedAt() != null) { - tocofsReturngoodsDetailedEntity.setRefundedat(returnGoodSearchHeaderDto.getRefundedAt()); + //业务日期-关联时间 + if (header.getRelatedAt() != null) { + ofsPassiveorderDetailEntity.setBusinessdate(header.getRelatedAt()); } //业务类型 - tocofsReturngoodsDetailedEntity.setBusinesstype("TOB_RETURN"); + ofsPassiveorderDetailEntity.setBusinesstype("TOB_ORDER"); } } /** * 交易成功,代码同步逻辑 * - * @param returnGoodHeaderDetailsDataDtoList 查询得到的O出库单对象 + * @param passiveStorageResponseDataList O无源入库单对象 * @author liuyang */ - private void implementSuccessfulTrade(List returnGoodHeaderDetailsDataDtoList) throws Exception { - if (returnGoodHeaderDetailsDataDtoList != null) { - logger.info("TOB售后入库退货到账完成:{}行需要进行数据转换", returnGoodHeaderDetailsDataDtoList.size()); + private void implementSuccessfulTrade(List passiveStorageResponseDataList) throws Exception { + if (passiveStorageResponseDataList != null) { + logger.info("TOB无源入库退货到账完成:{}行需要进行数据转换", passiveStorageResponseDataList.size()); } - if (returnGoodHeaderDetailsDataDtoList != null && returnGoodHeaderDetailsDataDtoList.size() > 0) { + if (passiveStorageResponseDataList != null && passiveStorageResponseDataList.size() > 0) { try { //转换基本档案 -// String sceneType = "tran"; - List orderToBHeaderDtos = queryBasicArchivesTran(returnGoodHeaderDetailsDataDtoList); + String sceneType = "tran"; + List orderToBHeaderDtoV2s = queryBasicArchivesTran(passiveStorageResponseDataList, sceneType); + //查询U8C业务流程 BdBusitypeEntity bdBusitypeEntity = u8cOperationFlow(); //查询销售收发类别 // BdRdclEntity bdRdclEntity = rdclUtil.queryRdClObject("201"); - logger.info("TOB销售业务退货到账成功同步,档案转换成功对应的数量:{}行需要进行数据转换", orderToBHeaderDtos.size()); + logger.info("TOB销售业务退货到账成功同步,档案转换成功对应的数量:{}行需要进行数据转换", orderToBHeaderDtoV2s.size()); logger.info("TOB销售发票业务流程编码:{}", bdBusitypeEntity.getBusicode()); - for (int i = 0; i < orderToBHeaderDtos.size(); i++) { - OrderToBHeaderDto orderOutTobHeaderDto = orderToBHeaderDtos.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = orderOutTobHeaderDto.getHeader(); - List details = orderOutTobHeaderDto.getDetails(); + for (int i = 0; i < orderToBHeaderDtoV2s.size(); i++) { + OrderToBHeaderDtoV2 orderToBHeaderDtoV2 = orderToBHeaderDtoV2s.get(i); + PassiveStorageResponse.Header header = orderToBHeaderDtoV2.getHeader(); + List details = orderToBHeaderDtoV2.getDetails(); try { //销售公司、发货公司 - BdCorpEntity bdCorpEntity = orderOutTobHeaderDto.getBdCorpEntity(); + BdCorpEntity bdCorpEntity = orderToBHeaderDtoV2.getBdCorpEntity(); //发货库存组织 - BdCalbodyEntity bdCalbodyEntity = orderOutTobHeaderDto.getBdCalbodyEntity(); + BdCalbodyEntity bdCalbodyEntity = orderToBHeaderDtoV2.getBdCalbodyEntity(); //入库仓库 - BdStordocEntity bdStordocEntity = orderOutTobHeaderDto.getBdStordocEntity(); + BdStordocEntity bdStordocEntity = orderToBHeaderDtoV2.getBdStordocEntity(); //销售组织 - BdSalestruEntity bdSalestruEntity = orderOutTobHeaderDto.getBdSalestruEntity(); + BdSalestruEntity bdSalestruEntity = orderToBHeaderDtoV2.getBdSalestruEntity(); //业务部门 - BdDeptdocEntity bdDeptdocEntity = orderOutTobHeaderDto.getBdDeptdocEntity(); + BdDeptdocEntity bdDeptdocEntity = orderToBHeaderDtoV2.getBdDeptdocEntity(); //客商基本档案 - BdCubasdocEntity bdCubasdocEntity = orderOutTobHeaderDto.getBdCubasdocEntity(); + BdCubasdocEntity bdCubasdocEntity = orderToBHeaderDtoV2.getBdCubasdocEntity(); //客商管理档案 - BdCumandocEntity bdCumandocEntity = orderOutTobHeaderDto.getBdCumandocEntity(); + BdCumandocEntity bdCumandocEntity = orderToBHeaderDtoV2.getBdCumandocEntity(); //发货公司 - BdCorpEntity deliverGoodsCorp = orderOutTobHeaderDto.getDeliverGoodsCorp(); + BdCorpEntity deliverGoodsCorp = orderToBHeaderDtoV2.getDeliverGoodsCorp(); //平台档案 - BdDefdocEntity platformArchives = orderOutTobHeaderDto.getPlatformArchives(); + BdDefdocEntity platformArchives = orderToBHeaderDtoV2.getPlatformArchives(); //生成业务日期 - String successfulTradeDate = createSuccessFulTradeDate(orderOutTobHeaderDto); + String successfulTradeDate = createSuccessFulTradeDate(header); //店铺 - BdDefdocEntity shopArchives = orderOutTobHeaderDto.getShopArchives(); + BdDefdocEntity shopArchives = orderToBHeaderDtoV2.getShopArchives(); //U8C销售订单 - SoSaleEntity soSaleEntity = orderOutTobHeaderDto.getSoSaleEntity(); + SoSaleEntity soSaleEntity = orderToBHeaderDtoV2.getSoSaleEntity(); //U8C销售订单明细行 - List soSaleorderBEntityList = orderOutTobHeaderDto.getSoSaleorderBEntityList(); + List soSaleorderBEntityList = orderToBHeaderDtoV2.getSoSaleorderBEntityList(); //U8C销售出库单 - IcGeneralHEntity icGeneralHEntity = orderOutTobHeaderDto.getIcGeneralHEntity(); + IcGeneralHEntity icGeneralHEntity = orderToBHeaderDtoV2.getIcGeneralHEntity(); //U8C销售出库单明细行 - List icGeneralBEntityList = orderOutTobHeaderDto.getIcGeneralBEntityList(); + List icGeneralBEntityList = orderToBHeaderDtoV2.getIcGeneralBEntityList(); //U8C销售订单执行情况明细表 - List extIntegrationTaskLivingDetailsQueryVos = orderOutTobHeaderDto.getExtIntegrationTaskLivingDetailsQueryVos(); + List extIntegrationTaskLivingDetailsQueryVos = orderToBHeaderDtoV2.getExtIntegrationTaskLivingDetailsQueryVos(); //OFS销售订单 - SaleOrderMessageDto saleOrderMessageDto = orderOutTobHeaderDto.getSaleOrderMessageDto(); + SaleOrderMessageDto saleOrderMessageDto = orderToBHeaderDtoV2.getSaleOrderMessageDto(); //OFS售后订单 - RerturnGoodsOrderSearchData ofsRertunOrder = orderOutTobHeaderDto.getOfsRertunOrder(); + RerturnGoodsOrderSearchData ofsRertunOrder = orderToBHeaderDtoV2.getOfsRertunOrder(); //OFS收发类别 - BdRdclEntity bdRdclEntity = orderOutTobHeaderDto.getBdRdclEntity(); + BdRdclEntity bdRdclEntity = orderToBHeaderDtoV2.getBdRdclEntity(); //红字销售发票表头 SalesInvoiceHeadDto salesInvoiceHeadDto = new SalesInvoiceHeadDto(); @@ -1880,7 +1925,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { salesInvoiceHeadDto.setDapprovedate(successfulTradeDate);//审批日期 salesInvoiceHeadDto.setVnote(VNOTETYPE); salesInvoiceHeadDto.setVdef17(ProfilesActiveConstant.sourceSystem1); - salesInvoiceHeadDto.setVdef19(header.getCode()); + salesInvoiceHeadDto.setVdef19(header.getReceiptCode()); salesInvoiceHeadDto.setVdef20(header.getId()); //平台 salesInvoiceHeadDto.setPk_defdoc2(platformArchives.getPkDefdoc()); @@ -1897,19 +1942,20 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { List salesInvoiceBodyDtoList = new ArrayList<>(); for (int j = 0; j < details.size(); j++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = details.get(j); + PassiveStorageResponse.Details details1 = details.get(j); + //存货管理档案:取发货公司的存货管理档案 - BdInvmandocEntity bdInvmandocEntity = queryInventoryMan(stockinB, bdCalbodyEntity.getPkCorp()); + BdInvmandocEntity bdInvmandocEntity = queryInventoryMan(details1, bdCalbodyEntity.getPkCorp()); //存货基础档案 BdInvbasdocEntity bdInvbasdocEntity = queryStockBasicArchives(bdInvmandocEntity.getPkInvmandoc(), deliverGoodsCorp.getPkCorp()); //根据存货基础档案编码,查询当前存货的税率 BdTaxitemsEntity bdTaxitemsEntity1 = queryBdTaxitems(bdInvbasdocEntity.getInvcode()); //2024年8月30日 11:20:08 查找对应的售后订单的明细行,主要取价格 - RerturnGoodsOrderSearchDetails afterSalesOrder = findAfterSalesOrder(stockinB, ofsRertunOrder); + RerturnGoodsOrderSearchDetails afterSalesOrder = findAfterSalesOrder(details1, ofsRertunOrder); //查找来源单据,销售发票的来源单据为销售出库单 - IcGeneralBEntity sourceDocuments = findSourceDocuments(header, stockinB, soSaleorderBEntityList, icGeneralBEntityList, extIntegrationTaskLivingDetailsQueryVos); + IcGeneralBEntity sourceDocuments = findSourceDocuments(header, details1, soSaleorderBEntityList, icGeneralBEntityList, extIntegrationTaskLivingDetailsQueryVos); //查找来源销售订单明细行 - SoSaleorderBEntity sourceDocumentsV2 = findSourceDocumentsV2(header, stockinB, soSaleorderBEntityList, extIntegrationTaskLivingDetailsQueryVos); + SoSaleorderBEntity sourceDocumentsV2 = findSourceDocumentsV2(header, details1, soSaleorderBEntityList, extIntegrationTaskLivingDetailsQueryVos); //查询收支项目 // BdInvclEntity bdInvclEntity = queryU8CEntityUtil.queryBdInvbasdocByBdInvcl(bdInvbasdocEntity); // BdCostsubjEntity bdCostsubjEntity = queryU8CEntityUtil.queryBdCostsubj(bdInvclEntity); @@ -1922,7 +1968,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { String totalPayAmount = null; try { //综合判断对应的目标金额 - totalPayAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, afterSalesOrder, calculationFormula, stockinB, bdInvbasdocEntity); + totalPayAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, afterSalesOrder, calculationFormula, details1, bdInvbasdocEntity); // noriginalcurtaxprice = new BigDecimal(totalPayAmount).divide(new BigDecimal(stockinB.getReceivedQty()), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP); } catch (Exception e) { logger.error("含税单价金额计算失败!", e); @@ -1938,7 +1984,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { salesInvoiceBodyDto.setCinventoryid(bdInvmandocEntity.getPkInvmandoc()); salesInvoiceBodyDto.setCupreceipttype("4C"); salesInvoiceBodyDto.setCupsourcebillcode(soSaleEntity.getVreceiptcode()); - salesInvoiceBodyDto.setNnumber("-" + stockinB.getReceivedQty());//数量 + salesInvoiceBodyDto.setNnumber("-" + details1.getQuantity());//数量 // salesInvoiceBodyDto.setNoriginalcurtaxprice(noriginalcurtaxprice.stripTrailingZeros().toPlainString());//含税单价 salesInvoiceBodyDto.setNoriginalcursummny("-" + new BigDecimal(totalPayAmount).setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());//价税合计 新逻辑 // salesInvoiceBodyDto.setNtaxrate(new BigDecimal(bdTaxitemsEntity1.getTaxratio()).stripTrailingZeros().toPlainString());//税率 @@ -1955,8 +2001,9 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { // salesInvoiceBodyDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj()); salesInvoiceBodyDtoList.add(salesInvoiceBodyDto); - stockinB.setDef7(afterSalesOrder.getTotalAmount()); - stockinB.setDef8(calculationFormula.toString());//计算公式 + details1.setDef1(afterSalesOrder.getTotalAmount());//计算应收 + details1.setDef2(calculationFormula.toString());//计算公式 + details1.setRefundedAt(ofsRertunOrder.getHeader().getRefundedAt());//表头对应的退款完成时间 } SalesInvoiceDto salesInvoiceDto = new SalesInvoiceDto(); salesInvoiceDto.setParentvo(salesInvoiceHeadDto); @@ -1970,9 +2017,9 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { //推送到U8C生成销售发票 synchronized (PUSH_LOCK2) { - Boolean aBoolean = checkTobSalesInvoice(header.getId(), header.getCode()); + Boolean aBoolean = checkTobSalesInvoice(header.getId(), header.getReceiptCode()); if (!aBoolean) { - logger.error("经过SQL查询判断,在U8C红字销售发票中不存在OFS入库单号为:{} OFS入库主键为:{}的单据,将调用U8C接口执行推送!", header.getCode(), header.getId()); + logger.error("经过SQL查询判断,在U8C红字销售发票中不存在OFS入库单号为:{} OFS入库主键为:{}的单据,将调用U8C接口执行推送!", header.getReceiptCode(), header.getId()); SaleinvoiceDto saleinvoiceDto = sendU8CTOCSoSaleinvoiceB(JSON.toJSONString(stringListMap)); String vreceiptcode = null; String csaleid = null; @@ -1988,7 +2035,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { //记录成功 updateSuccessOrFail2(details, "Y", "success", vreceiptcode, csaleid); } else { - logger.error("经过SQL查询判断,在U8C红字销售发票中已经存在OFS入库单号为:{} OFS入库主键为:{}的单据,为了避免造成单据重复,不推送到U8C!", header.getCode(), header.getId()); + logger.error("经过SQL查询判断,在U8C红字销售发票中已经存在OFS无源入库单号为:{} OFS无源入库主键为:{}的单据,为了避免造成单据重复,不推送到U8C!", header.getReceiptCode(), header.getId()); } } } catch (Exception e) { @@ -2013,27 +2060,25 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private String createSuccessFulTradeDate(OrderToBHeaderDto orderOutTobHeaderDto) { -// orderOutTobHeaderDto.getHeader().setRefundedAt("2024-11-19 00:00:00"); + private String createSuccessFulTradeDate(PassiveStorageResponse.Header header) { String code = null; - if (orderOutTobHeaderDto != null && orderOutTobHeaderDto.getHeader() != null) { - code = orderOutTobHeaderDto.getHeader().getCode(); + if (header != null && header.getReceiptCode() != null) { + code = header.getReceiptCode(); } - if (orderOutTobHeaderDto != null && orderOutTobHeaderDto.getHeader() != null && orderOutTobHeaderDto.getHeader().getRefundedAt() != null) { - StockinOrderSearchResponse.StockinOrder.StockinH header = orderOutTobHeaderDto.getHeader(); - String refundedAt = header.getRefundedAt(); + if (header != null && header.getRelatedAt() != null) { + String relatedAt = header.getRelatedAt(); String businessFormat = null; try { - Date dbill = DateUtil.parse(refundedAt); + Date dbill = DateUtil.parse(relatedAt); businessFormat = DateUtil.format(dbill, "yyyy-MM-dd"); } catch (Exception e) { - logger.error("业务日期生成失败refundedAt(O退款完成时间)解析异常:{} O售后入库单编码:{}", e.getMessage(), code); - Assert.state(false, "业务日期生成失败refundedAt(O退款完成时间)解析异常:{} O售后入库单编码:{}", e.getMessage(), code); + logger.error("业务日期生成失败relatedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); + Assert.state(false, "业务日期生成失败closedAt(O 关联时间)解析异常:{} O 无源入库单号:{}", e.getMessage(), code); } return businessFormat; } else { - logger.error("业务日期生成失败refundedAt(O退款完成时间)不能为空! O售后入库单编码:{}", code); - Assert.state(false, "业务日期生成失败refundedAt(O退款完成时间)不能为空! O售后入库单编码:{}", code); + logger.error("业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); + Assert.state(false, "业务日期生成失败relatedAt(O 关联时间)不能为空 O 无源入库单号:{}", code); return null; } } @@ -2085,7 +2130,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * @param ofsRertunOrder OFS售后订单 * @author liuyang */ - private RerturnGoodsOrderSearchDetails findAfterSalesOrder(StockinOrderSearchResponse.StockinOrder.StockinB stockinB, RerturnGoodsOrderSearchData ofsRertunOrder) { + private RerturnGoodsOrderSearchDetails findAfterSalesOrder(PassiveStorageResponse.Details stockinB, RerturnGoodsOrderSearchData ofsRertunOrder) { Assert.notNull(stockinB, "stockinB不能为空!"); Assert.notNull(ofsRertunOrder, "saleOrderMessageDto不能为空!"); @@ -2098,11 +2143,11 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } for (int i = 0; i < details1.size(); i++) { RerturnGoodsOrderSearchDetails rerturnGoodsOrderSearchDetails = details1.get(i); - if (rerturnGoodsOrderSearchDetails.getId().equals(stockinB.getRefOrderDetailId())) { + if (rerturnGoodsOrderSearchDetails.getSkuCode().equals(stockinB.getSkuCode())) { return rerturnGoodsOrderSearchDetails; } } - Assert.state(false, "通过售后入库单号({})无法匹配到售后订单", stockinB.getId()); + Assert.state(false, "通过无源入库单明细行({})无法匹配到售后订单明细行", stockinB.getSkuCode()); return null; } @@ -2117,7 +2162,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * @param extIntegrationTaskLivingDetailsQueryVos U8C销售订单执行情况明细表 * @author liuyang */ - private IcGeneralBEntity findSourceDocuments(StockinOrderSearchResponse.StockinOrder.StockinH header, StockinOrderSearchResponse.StockinOrder.StockinB stockinB, List soSaleorderBEntityList, List icGeneralBEntityList, List extIntegrationTaskLivingDetailsQueryVos) { + private IcGeneralBEntity findSourceDocuments(PassiveStorageResponse.Header header, PassiveStorageResponse.Details stockinB, List soSaleorderBEntityList, List icGeneralBEntityList, List extIntegrationTaskLivingDetailsQueryVos) { Assert.notNull(header, "header不能为空"); Assert.notNull(stockinB, "detailsDto不能为空"); Assert.notNull(soSaleorderBEntityList, "soSaleorderBEntityList不能为空"); @@ -2160,7 +2205,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * @param soSaleorderBEntityList U8C销售订单明细集合 * @author liuyang */ - private SoSaleorderBEntity findSourceDocumentsV2(StockinOrderSearchResponse.StockinOrder.StockinH header, StockinOrderSearchResponse.StockinOrder.StockinB stockinB, List soSaleorderBEntityList, List extIntegrationTaskLivingDetailsQueryVos) { + private SoSaleorderBEntity findSourceDocumentsV2(PassiveStorageResponse.Header header, PassiveStorageResponse.Details stockinB, List soSaleorderBEntityList, List extIntegrationTaskLivingDetailsQueryVos) { Assert.notNull(header, "header不能为空"); Assert.notNull(stockinB, "stockinB不能为空"); Assert.notNull(soSaleorderBEntityList, "soSaleorderBEntityList不能为空"); @@ -2204,11 +2249,11 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { soSaleEntity.setDataSourceCode("lets_u8c"); soSaleEntity.setVdef19(ofsCode); soSaleEntity.setVdef20(ofsId); - soSaleEntity.setBretinvflag("Y");//仅查询销售订单 + soSaleEntity.setBretinvflag("Y");//仅查询退货的销售订单 List soSaleEntityList = iSoSaleDao.query(soSaleEntity); if (soSaleEntityList.size() > 0) { SoSaleEntity soSaleEntity1 = soSaleEntityList.get(0); - logger.error("OFS销售出库单主键:{} OFS销售出库单编码:{} 该单据在U8C已经存在U8C销售订单,并且销售订单编码为:{} 对应的公司为:{}", ofsId, ofsCode, soSaleEntity1.getVreceiptcode(), soSaleEntity1.getPkCorp()); + logger.error("O无源入库单主键:{} O无源入库单编码:{} 该单据在U8C已经存在U8C销售订单,并且销售订单编码为:{} 对应的公司为:{}", ofsId, ofsCode, soSaleEntity1.getVreceiptcode(), soSaleEntity1.getPkCorp()); return true; } return false; @@ -2339,11 +2384,16 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { } /** - * 处理TOC-库存同步的成功、失败错误逻辑 + * 处理TOB-库存同步的成功、失败错误逻辑 * + * @param sonDetailsDtoList O无源入库单明细行 + * @param newstate 推送状态 + * @param newTransmitInfo 错误详情 + * @param newsystemnumber 下游单号 + * @param newsystemprimary 下游主键 * @author liuyang */ - private void updateSuccessOrFail1(List sonDetailsDtoList, String newstate, String newTransmitInfo, String newsystemnumber, String newsystemprimary) { + private void updateSuccessOrFail1(List sonDetailsDtoList, String newstate, String newTransmitInfo, String newsystemnumber, String newsystemprimary) { if (newTransmitInfo != null && !"".equals(newTransmitInfo.trim()) && newTransmitInfo.length() >= 400) { newTransmitInfo = newTransmitInfo.substring(0, 400); } @@ -2355,35 +2405,35 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { try { String successY = "Y"; if (sonDetailsDtoList != null && sonDetailsDtoList.size() > 0) { - List tocofsReturngoodsDetailedEntityArrayList = new ArrayList<>(); + List ofsPassiveorderDetailEntityArrayList = new ArrayList<>(); for (int i = 0; i < sonDetailsDtoList.size(); i++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = sonDetailsDtoList.get(i); - - TocofsReturngoodsDetailedEntity tocofsReturngoodsDetailedEntity = new TocofsReturngoodsDetailedEntity(); - tocofsReturngoodsDetailedEntity.setId(stockinB.getId()); - tocofsReturngoodsDetailedEntity.setNewpushdate(getNewDateStr()); - tocofsReturngoodsDetailedEntity.setNewtransmitinfo(finalNewTransmitInfo); - tocofsReturngoodsDetailedEntity.setNewstate(newstate); - tocofsReturngoodsDetailedEntity.setDef7(stockinB.getDef7()); - tocofsReturngoodsDetailedEntity.setDef8(stockinB.getDef8()); + PassiveStorageResponse.Details details = sonDetailsDtoList.get(i); + OfsPassiveorderDetailEntity ofsPassiveorderDetailEntity = new OfsPassiveorderDetailEntity(); + ofsPassiveorderDetailEntity.setId(details.getId()); + ofsPassiveorderDetailEntity.setTransactionDate(details.getRefundedAt()); + ofsPassiveorderDetailEntity.setNewpushdate(getNewDateStr()); + ofsPassiveorderDetailEntity.setNewtransmitinfo(finalNewTransmitInfo); + ofsPassiveorderDetailEntity.setNewstate(newstate); if (successY.equals(newstate)) { - tocofsReturngoodsDetailedEntity.setNewsystemnumber(newsystemnumber); - tocofsReturngoodsDetailedEntity.setNewsystemprimary(newsystemprimary); + ofsPassiveorderDetailEntity.setNewsystemnumber(newsystemnumber); + ofsPassiveorderDetailEntity.setNewsystemprimary(newsystemprimary); } - tocofsReturngoodsDetailedEntityArrayList.add(tocofsReturngoodsDetailedEntity); + ofsPassiveorderDetailEntity.setDef1(details.getDef1()); + ofsPassiveorderDetailEntity.setDef2(details.getDef2()); + ofsPassiveorderDetailEntityArrayList.add(ofsPassiveorderDetailEntity); } //以50行为一个批次,推送到Mysql - if (tocofsReturngoodsDetailedEntityArrayList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(tocofsReturngoodsDetailedEntityArrayList, 200); - for (int i = 0; i < splitListByCount.size(); i++) { - List tocofsReturngoodsDetailedEntities = splitListByCount.get(i); - iTocofsReturngoodsDetailedDao.entityInsertOrUpdateBatchByTobRerturnStock(tocofsReturngoodsDetailedEntities); + if (ofsPassiveorderDetailEntityArrayList.size() > 0) { + List> lists = SplitListByCountUtil.splitListByCount(ofsPassiveorderDetailEntityArrayList, 50); + for (int i = 0; i < lists.size(); i++) { + List ofsPassiveorderDetailEntities = lists.get(i); + iOfsPassiveorderDetailDao.entityInsertOrUpdateBatchByStock(ofsPassiveorderDetailEntities); } } } } catch (Exception e) { - logger.error("TOC库存同步日志,抛出异常", e); + logger.error("无源件日志同步,抛出异常", e); } } }); @@ -2411,7 +2461,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private void updateSuccessOrFail2(List sonDetailsDtoList, String newstate, String newTransmitInfo, String newsystemnumber, String newsystemprimary) { + private void updateSuccessOrFail2(List value, String newstate, String newTransmitInfo, String newsystemnumber, String newsystemprimary) { if (newTransmitInfo != null && !"".equals(newTransmitInfo.trim()) && newTransmitInfo.length() >= 400) { newTransmitInfo = newTransmitInfo.substring(0, 400); } @@ -2422,36 +2472,37 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { public void run() { try { String successY = "Y"; - if (sonDetailsDtoList != null && sonDetailsDtoList.size() > 0) { - List tocofsReturngoodsDetailedEntityArrayList = new ArrayList<>(); - for (int i = 0; i < sonDetailsDtoList.size(); i++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = sonDetailsDtoList.get(i); + if (value != null && value.size() > 0) { + List ofsPassiveorderDetailEntityArrayList = new ArrayList<>(); + for (int i = 0; i < value.size(); i++) { + PassiveStorageResponse.Details details = value.get(i); - TocofsReturngoodsDetailedEntity tocofsReturngoodsDetailedEntity = new TocofsReturngoodsDetailedEntity(); - tocofsReturngoodsDetailedEntity.setId(stockinB.getId()); - tocofsReturngoodsDetailedEntity.setNewpushdate2(getNewDateStr()); - tocofsReturngoodsDetailedEntity.setNewtransmitinfo2(finalNewTransmitInfo); - tocofsReturngoodsDetailedEntity.setNewstate2(newstate); - tocofsReturngoodsDetailedEntity.setDef7(stockinB.getDef7()); - tocofsReturngoodsDetailedEntity.setDef8(stockinB.getDef8()); + OfsPassiveorderDetailEntity ofsPassiveorderDetailEntity = new OfsPassiveorderDetailEntity(); + ofsPassiveorderDetailEntity.setId(details.getId()); + ofsPassiveorderDetailEntity.setTransactionDate(details.getRefundedAt()); + ofsPassiveorderDetailEntity.setNewpushdate2(getNewDateStr()); + ofsPassiveorderDetailEntity.setNewtransmitinfo2(finalNewTransmitInfo); + ofsPassiveorderDetailEntity.setNewstate2(newstate); if (successY.equals(newstate)) { - tocofsReturngoodsDetailedEntity.setNewsystemnumber2(newsystemnumber); - tocofsReturngoodsDetailedEntity.setNewsystemprimary2(newsystemprimary); + ofsPassiveorderDetailEntity.setNewsystemnumber2(newsystemnumber); + ofsPassiveorderDetailEntity.setNewsystemprimary2(newsystemprimary); } - tocofsReturngoodsDetailedEntityArrayList.add(tocofsReturngoodsDetailedEntity); + ofsPassiveorderDetailEntity.setDef1(details.getDef1()); + ofsPassiveorderDetailEntity.setDef2(details.getDef2()); + ofsPassiveorderDetailEntityArrayList.add(ofsPassiveorderDetailEntity); } //以50行为一个批次,推送到Mysql - if (tocofsReturngoodsDetailedEntityArrayList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(tocofsReturngoodsDetailedEntityArrayList, 50); - for (int i = 0; i < splitListByCount.size(); i++) { - List tocofsReturngoodsDetailedEntities = splitListByCount.get(i); - iTocofsReturngoodsDetailedDao.entityInsertOrUpdateBatchByTobRerturnTran(tocofsReturngoodsDetailedEntities); + if (ofsPassiveorderDetailEntityArrayList.size() > 0) { + List> lists = SplitListByCountUtil.splitListByCount(ofsPassiveorderDetailEntityArrayList, 50); + for (int i = 0; i < lists.size(); i++) { + List ofsPassiveorderDetailEntities = lists.get(i); + iOfsPassiveorderDetailDao.entityInsertOrUpdateBatchByTran(ofsPassiveorderDetailEntities); } } } } catch (Exception e) { - logger.error("TOC库存同步日志,抛出异常", e); + logger.error("TOB确认收入同步日志,抛出异常", e); } } }); @@ -2459,63 +2510,86 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { try { thread.join(); } catch (Exception e) { - logger.error("updateSuccessOrFail2方法现场抛出异常", e); + logger.error("updateSuccessOrFail1方法现场抛出异常", e); } } /** * 批量修改成功、或者失败,适合档案查询的部分 * + * @param errorHeaderDetailsDtoDtoV3List 错误数据行 + * @param sceneType 场景类型 * @author liuyang */ - private void updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiryStock(List errorHeaderDetailsDtoDtoList) throws Exception { - Assert.notNull(errorHeaderDetailsDtoDtoList, "errorHeaderDetailsDtoDtoList不能为空!"); + private void updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiryStock(List errorHeaderDetailsDtoDtoV3List, String sceneType) throws Exception { + Assert.notNull(errorHeaderDetailsDtoDtoV3List, "errorHeaderDetailsDtoDtoV3List不能为空!"); + Assert.notNull(sceneType, "sceneType不能为空!"); Thread thread = new Thread(new Runnable() { @Override public void run() { try { - if (errorHeaderDetailsDtoDtoList != null && errorHeaderDetailsDtoDtoList.size() > 0) { - List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); - for (int i = 0; i < errorHeaderDetailsDtoDtoList.size(); i++) { - ErrorHeaderDetailsDtoDtoV2 errorHeaderDetailsDtoDtoV2 = errorHeaderDetailsDtoDtoList.get(i); - StockinOrderSearchResponse.StockinOrder.StockinH header = errorHeaderDetailsDtoDtoV2.getHeader(); - List details = errorHeaderDetailsDtoDtoV2.getDetails(); + if (errorHeaderDetailsDtoDtoV3List != null && errorHeaderDetailsDtoDtoV3List.size() > 0) { + List tocofsSaleoutDetailedEntityList = new ArrayList<>(); + for (int i = 0; i < errorHeaderDetailsDtoDtoV3List.size(); i++) { + ErrorHeaderDetailsDtoDtoV3 errorHeaderDetailsDtoDtoV3 = errorHeaderDetailsDtoDtoV3List.get(i); + PassiveStorageResponse.Header header = errorHeaderDetailsDtoDtoV3.getHeader(); + List details = errorHeaderDetailsDtoDtoV3.getDetails(); - String newstate = errorHeaderDetailsDtoDtoV2.getNewstate(); - String newPushDate = errorHeaderDetailsDtoDtoV2.getNewPushDate(); - String newTransmitInfo = errorHeaderDetailsDtoDtoV2.getNewTransmitInfo(); + String newstate = errorHeaderDetailsDtoDtoV3.getNewstate(); + String newPushDate = errorHeaderDetailsDtoDtoV3.getNewPushDate(); + String newTransmitInfo = errorHeaderDetailsDtoDtoV3.getNewTransmitInfo(); + String newsystemnumber = errorHeaderDetailsDtoDtoV3.getNewsystemnumber(); + String newsystemprimary = errorHeaderDetailsDtoDtoV3.getNewsystemprimary(); +// String transactionDate = errorHeaderDetailsDtoDtoV3.getTransactionDate(); - //如果报错内容太长了,则仅保留500个长度 + //如果报错内容太长了,则仅保留400个长度,维护数据库性能,缓解资源公平使用 if (newTransmitInfo != null && !"".equals(newTransmitInfo.trim()) && newTransmitInfo.length() >= 400) { newTransmitInfo = newTransmitInfo.substring(0, 400); } for (int j = 0; j < details.size(); j++) { - StockinOrderSearchResponse.StockinOrder.StockinB stockinB = details.get(j); + PassiveStorageResponse.Details details1 = details.get(j); - TocofsReturngoodsDetailedEntity tocofsSaleoutDetailedEntity = new TocofsReturngoodsDetailedEntity(); - tocofsSaleoutDetailedEntity.setId(stockinB.getId()); - tocofsSaleoutDetailedEntity.setNewpushdate(newPushDate); - tocofsSaleoutDetailedEntity.setNewtransmitinfo(newTransmitInfo); - tocofsSaleoutDetailedEntity.setNewstate(newstate); - tocofsSaleoutDetailedEntity.setNewsystemnumber(null); - tocofsSaleoutDetailedEntity.setNewsystemprimary(null); - tocofsReturngoodsDetailedEntityList.add(tocofsSaleoutDetailedEntity); + OfsPassiveorderDetailEntity ofsPassiveorderDetailEntity = new OfsPassiveorderDetailEntity(); + ofsPassiveorderDetailEntity.setId(details1.getId()); + ofsPassiveorderDetailEntity.setTransactionDate(details1.getRefundedAt()); + if (sceneType.equals("stock")) { + ofsPassiveorderDetailEntity.setNewpushdate(newPushDate); + ofsPassiveorderDetailEntity.setNewtransmitinfo(newTransmitInfo); + ofsPassiveorderDetailEntity.setNewstate(newstate); + if (!"N".equals(newstate)) { + ofsPassiveorderDetailEntity.setNewsystemnumber(newsystemnumber); + ofsPassiveorderDetailEntity.setNewsystemprimary(newsystemprimary); + } + } else if (sceneType.equals("tran")) { + ofsPassiveorderDetailEntity.setNewpushdate2(newPushDate); + ofsPassiveorderDetailEntity.setNewtransmitinfo2(newTransmitInfo); + ofsPassiveorderDetailEntity.setNewstate2(newstate); + if (!"N".equals(newstate)) { + ofsPassiveorderDetailEntity.setNewsystemnumber2(newsystemnumber); + ofsPassiveorderDetailEntity.setNewsystemprimary2(newTransmitInfo); + } + } + tocofsSaleoutDetailedEntityList.add(ofsPassiveorderDetailEntity); } } - //以50行为一个批次更新状态 - if (tocofsReturngoodsDetailedEntityList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(tocofsReturngoodsDetailedEntityList, 50); - for (int i = 0; i < splitListByCount.size(); i++) { - List tocofsReturngoodsDetailedEntityList1 = splitListByCount.get(i); - iTocofsReturngoodsDetailedDao.entityInsertOrUpdateBatchByTobRerturnStockV2(tocofsReturngoodsDetailedEntityList1); + //以50行为一个批次更新状态,并且入库和确认收入调用不同的方法 + if (tocofsSaleoutDetailedEntityList.size() > 0) { + List> lists = SplitListByCountUtil.splitListByCount(tocofsSaleoutDetailedEntityList, 50); + for (int i = 0; i < lists.size(); i++) { + List ofsPassiveorderDetailEntities = lists.get(i); + if (sceneType.equals("stock")) { + iOfsPassiveorderDetailDao.entityInsertOrUpdateBatchByStock(ofsPassiveorderDetailEntities); + } else if (sceneType.equals("tran")) { + iOfsPassiveorderDetailDao.entityInsertOrUpdateBatchByTran(ofsPassiveorderDetailEntities); + } } } } } catch (Exception e) { - logger.error("TOB填充出库明细日志抛出异常", e); + logger.error("无源件业务填充出库明细日志抛出异常", e); } } }); @@ -2523,7 +2597,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { try { thread.join(); } catch (Exception e) { - logger.error("updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiry方法现场抛出异常", e); + logger.error("updateFailOrSuccessTocofsSaleoutDetailedArchiveInquiry方法调用join 跑出异常", e); } } @@ -2598,20 +2672,20 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @param isCheckShopChoose true取OFS实付金额、false取结存金额或者采购价 * @param bdInvmandocEntity 存货管理档案 - * @param header OFS售后入库单表头 - * @param afterSalesOrder OFS售后订单明细行 + * @param header O无源头入库单表头 + * @param afterSalesOrder 对应的OFS售后订单明细行 * @param calculationFormula 计算公式 - * @param stockinB OFS售后入库单明细行 + * @param details1 O无源入库单明细行 * @param bdInvbasdocEntity 存货基本档案 * @author liuyang */ - private String getFloorPrice(Boolean isCheckShopChoose, BdInvmandocEntity bdInvmandocEntity, StockinOrderSearchResponse.StockinOrder.StockinH header, RerturnGoodsOrderSearchDetails afterSalesOrder, StringBuffer calculationFormula, StockinOrderSearchResponse.StockinOrder.StockinB stockinB, BdInvbasdocEntity bdInvbasdocEntity) throws Exception { + private String getFloorPrice(Boolean isCheckShopChoose, BdInvmandocEntity bdInvmandocEntity, PassiveStorageResponse.Header header, RerturnGoodsOrderSearchDetails afterSalesOrder, StringBuffer calculationFormula, PassiveStorageResponse.Details details1, BdInvbasdocEntity bdInvbasdocEntity) throws Exception { Assert.notNull(isCheckShopChoose, "isCheckShopChoose不能为空"); Assert.notNull(bdInvmandocEntity, "bdInvmandocEntity不能为空"); Assert.notNull(header, "header不能为空"); Assert.notNull(afterSalesOrder, "afterSalesOrder不能为空"); Assert.notNull(calculationFormula, "calculationFormula不能为空"); - Assert.notNull(stockinB, "stockinB不能为空"); + Assert.notNull(details1, "stockinB不能为空"); Assert.notNull(bdInvbasdocEntity, "bdInvbasdocEntity不能为空"); //totalPayAmount只能是金额 @@ -2663,7 +2737,7 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { // Assert.state(false, "店铺:{} 存货管理档案主键:{} 既没有结存价、也没有采购价!", header.getStoreCode(), bdInvmandocEntity.getPkInvmandoc()); // } // } - totalPayAmount = getRefsaleprice(bdInvmandocEntity, bdInvbasdocEntity, calculationFormula, stockinB, header); + totalPayAmount = getRefsaleprice(bdInvmandocEntity, bdInvbasdocEntity, calculationFormula, details1, header); } else { //O用户实退 logger.info("店铺:{} 取O实付金额", header.getStoreCode()); @@ -2678,10 +2752,10 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * * @author liuyang */ - private void splicingPrintingOrderNumber(List returnGoodHeaderDetailsDataDtoArrayList, String sceneType, String startTime, String endTime, String code) { + private void splicingPrintingOrderNumber(List passiveStorageResponseDataDtoArrayList, String sceneType, String startTime, String endTime, String code) { try { - if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - String codesJoined = returnGoodHeaderDetailsDataDtoArrayList.stream().map(StockinOrderSearchResponse.StockinOrder::getHeader).map(StockinOrderSearchResponse.StockinOrder.StockinH::getCode).collect(Collectors.joining(",")); + if (passiveStorageResponseDataDtoArrayList != null && passiveStorageResponseDataDtoArrayList.size() > 0) { + String codesJoined = passiveStorageResponseDataDtoArrayList.stream().map(PassiveStorageResponse.Data::getHeader).map(PassiveStorageResponse.Header::getReceiptCode).collect(Collectors.joining(",")); logger.info("{} 售后入库单单号:{} 查询条件:{} ~ {} code:{}", sceneType, codesJoined, startTime, endTime, code); } else { logger.info("{} 售后入库单单号:{} 查询条件:{} ~ {} code:{}", sceneType, "无", startTime, endTime, code); @@ -2697,15 +2771,15 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { * @param bdInvmandocEntity 存货管理档案 * @param bdInvbasdocEntity 存货基本档案 * @param calculationFormulaStr 计算公式 - * @param stockinB O售后入库单明细行 + * @param details O无源入库单明细行 * @param header O售后入库单表头 * @author liuyang */ - private String getRefsaleprice(BdInvmandocEntity bdInvmandocEntity, BdInvbasdocEntity bdInvbasdocEntity, StringBuffer calculationFormulaStr, StockinOrderSearchResponse.StockinOrder.StockinB stockinB, StockinOrderSearchResponse.StockinOrder.StockinH header) throws Exception { + private String getRefsaleprice(BdInvmandocEntity bdInvmandocEntity, BdInvbasdocEntity bdInvbasdocEntity, StringBuffer calculationFormulaStr, PassiveStorageResponse.Details details, PassiveStorageResponse.Header header) throws Exception { Assert.notNull(bdInvmandocEntity, "bdInvmandocEntity不能为空!"); Assert.notNull(bdInvbasdocEntity, "bdInvbasdocEntity不能为空!"); Assert.notNull(calculationFormulaStr, "calculationFormulaStr不能为空!"); - Assert.notNull(stockinB, "goodsRertunSonDetailsDto不能为空!"); + Assert.notNull(details, "goodsRertunSonDetailsDto不能为空!"); Assert.notNull(header, "header不能为空"); //U参考售价 @@ -2713,9 +2787,9 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { Assert.notNull(refsaleprice, "存货:{} 公司:{} 不存在参考售价,请维护!", bdInvbasdocEntity.getInvname(), bdInvmandocEntity.getPkCorp()); //O实收数量 - String receivedQty = stockinB.getReceivedQty(); - Assert.notNull(receivedQty, "O实收数量不能为空 O售后入库单编码:{} O明细行主键:{}", header.getCode(), stockinB.getId()); - Assert.state(!"".equals(receivedQty), "O实收数量不能为空 O售后入库单编码:{} O明细行主键:{}", header.getCode(), stockinB.getId()); + String receivedQty = details.getQuantity(); + Assert.notNull(receivedQty, "O实收数量不能为空 O无源入库单编码:{} O明细行主键:{}", header.getReceiptCode(), details.getId()); + Assert.state(!"".equals(receivedQty), "O实收数量不能为空 O售后入库单编码:{} O明细行主键:{}", header.getReceiptCode(), details.getId()); BigDecimal amountOfMoney = new BigDecimal(refsaleprice).multiply(new BigDecimal(receivedQty)); String format = StrUtil.format("取U参考售价:{}*{}", refsaleprice, receivedQty); @@ -2726,12 +2800,16 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { /** * 打印OFS单号 * + * @param passiveStorageResponseDataDtoArrayList 无源入库单 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param type 类型 * @author liuyang */ - private void printOfsDocCode(List returnGoodHeaderDetailsDataDtoArrayList, String startTime, String endTime, String type) { - Assert.notNull(returnGoodHeaderDetailsDataDtoArrayList, "returnGoodHeaderDetailsDataDtoArrayList不能为空"); - Assert.notNull(startTime, "startTime不能为空"); - Assert.notNull(endTime, "endTime不能为空"); + private void printOfsDocCode(List passiveStorageResponseDataDtoArrayList, String startTime, String endTime, String type) { + Assert.notNull(passiveStorageResponseDataDtoArrayList, "passiveStorageResponseDataDtoArrayList不能为空!"); + Assert.notNull(startTime, "startTime不能为空!"); + Assert.notNull(endTime, "endTime不能为空!"); try { StringBuffer stringBuffer = new StringBuffer(); @@ -2749,11 +2827,42 @@ public class PassiveWarehouseReceiptToB extends PluginBaseEntity { stringBuffer.append(" "); stringBuffer.append("获取到的单号:"); - String codes = returnGoodHeaderDetailsDataDtoArrayList.stream().map(headerDetailsDto -> headerDetailsDto.getHeader().getCode()).collect(Collectors.joining(",")); + String codes = passiveStorageResponseDataDtoArrayList.stream().map(headerDetailsDto -> headerDetailsDto.getHeader().getReceiptCode()).collect(Collectors.joining(",")); stringBuffer.append(codes); logger.info(stringBuffer.toString()); } catch (Exception e) { logger.error("{} 插件:{},打印拉取到的单据号出错", type, getPluginName(), e); } } + + /** + * 过滤掉没有交易成功的无源件明细行 + * + * @param passiveStorageResponseDataList O无源件交易成功状态 + * @throws Exception 跑出可能的异常 + */ + private List filterAfterSalesOrder(List passiveStorageResponseDataList) throws Exception { + List filteredList = null; + if (passiveStorageResponseDataList != null && passiveStorageResponseDataList.size() > 0) { + filteredList = passiveStorageResponseDataList.stream().filter(stockinOrder -> { + PassiveStorageResponse.Header header = stockinOrder.getHeader(); + if (header == null) { + return false; + } + RerturnGoodsOrderSearchData returnData = header.getRerturnGoodsOrderSearchData(); + if (returnData == null) { + return false; + } + RerturnGoodsOrderSearchHeader header1 = returnData.getHeader(); + if (header1 == null) { + return false; + } + if (header1.getRefundedAt() == null) { + return false; + } + return true; + }).collect(Collectors.toList()); + } + return filteredList; + } } \ No newline at end of file diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java index c175dfcf..d46cacff 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToC.java @@ -935,7 +935,6 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { // 查询基本档案 String sceneType = "tran"; List passiveStorageSonDetailsDtos = queryBasicArchivesStock(passiveStorageResponseDataList, sceneType); - filterAfterSalesOrder(passiveStorageResponseDataList); // 分组汇总 String dimension = null; @@ -1236,7 +1235,10 @@ public class PassiveWarehouseReceiptToC extends PluginBaseEntity { //查询OFS无源入库单对应的售后订单,并关联无源无源入库单对象 List rerturnGoodsOrderSearchData = queryBatchAfterSalesOrder(passiveStorageResponseDataList); findAfterSalesOrder(rerturnGoodsOrderSearchData, passiveStorageResponseDataList); - + if ("tran".equals(sceneType)) { + passiveStorageResponseDataList = filterAfterSalesOrder(passiveStorageResponseDataList); + } + //查询OFS售后订单对应的OFS销售订单 List headerDetailsDtos = queryBatchOfsOrder(passiveStorageResponseDataList); findOfsOrder(headerDetailsDtos, passiveStorageResponseDataList); diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java index 9001d28e..ac4a2ee3 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java @@ -2846,7 +2846,9 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity { private void splicingPrintingOrderNumber(List headerDetailsDtoList, String sceneType, String startTime, String endTime, String code) { try { if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) { - String codesJoined = headerDetailsDtoList.stream().map(HeaderDetailsDto::getHeader).map(HeaderDto::getCode).collect(Collectors.joining(",")); + String codesJoined = headerDetailsDtoList.stream() + .map(HeaderDetailsDto::getHeader) + .map(HeaderDto::getCode).collect(Collectors.joining(",")); logger.info("{} 销售出库单号:{} 查询条件:{} ~ {} code:{}", sceneType, codesJoined, startTime, endTime, code); } else { logger.info("{} 销售出库单号:{} 查询条件:{} ~ {} code:{}", sceneType, "无", startTime, endTime, code); diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java index e0edb736..500072ce 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java @@ -1317,10 +1317,11 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity { soSaleorderBEntity.setDataSourceCode("lets_u8c"); List soSaleorderBEntityList = iSoSaleorderBDao.query(soSaleorderBEntity); if (soSaleorderBEntityList == null || soSaleorderBEntityList.size() == 0) { - Assert.state(false, "根据O销售订单主键:{},无法匹配到U8C销售订单明细行(传到U8C可能失败了!)", soSaleEntityList.get(soSaleEntityList.size() - 1).getCsaleid()); - } else if (soSaleorderBEntityList.size() >= 2) { - Assert.state(false, "根据O销售订单主键:{},无法匹配到U8C销售订单明细行(传到U8C可能失败了!)", soSaleEntityList.get(soSaleEntityList.size() - 1).getCsaleid()); + Assert.state(false, "根据O销售订单主键:{},无法匹配到U8C销售订单明细行!", soSaleEntityList.get(soSaleEntityList.size() - 1).getCsaleid()); } +// else if (soSaleorderBEntityList.size() >= 2) { +// Assert.state(false, "根据O销售订单主键:{},无法匹配到U8C销售订单明细行(传到U8C可能失败了!)", soSaleEntityList.get(soSaleEntityList.size() - 1).getCsaleid()); +// } //查询U8C销售订单对应的销售出库单表头 IcGeneralHEntity icGeneralHEntity = new IcGeneralHEntity(); diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/u8cdto/OrderToBHeaderDtoV2.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/u8cdto/OrderToBHeaderDtoV2.java new file mode 100644 index 00000000..fe31576b --- /dev/null +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/u8cdto/OrderToBHeaderDtoV2.java @@ -0,0 +1,133 @@ +package com.hzya.frame.plugin.lets.u8cdto; + +import com.hzya.frame.plugin.lets.entity.*; +import com.hzya.frame.plugin.lets.queryvo.ExtIntegrationTaskLivingDetailsQueryVo; +import com.hzya.frame.ttxofs.dto.ofssalesordersearch.SaleOrderMessageDto; +import com.hzya.frame.ttxofs.dto.passivestorage.PassiveStorageResponse; +import com.hzya.frame.ttxofs.dto.returngoodordersearch.RerturnGoodsOrderSearchData; +import com.hzya.frame.ttxofs.dto.stock.StockinOrderSearchResponse; +import lombok.Data; + +import java.util.List; + +/** + * @Author:liuyang + * @Package:com.hzya.frame.plugin.lets.u8cdto + * @Project:kangarooDataCenterV3 + * @name:OrderToBHeaderDto + * @Date:2024年8月15日 14:52:34 + * @Filename:OrderToBHeaderDto + */ +@Data +public class OrderToBHeaderDtoV2 extends PassiveStorageResponse.Header { + /** + * 表头公司(销售公司)、视为发货公司 + */ + private BdCorpEntity bdCorpEntity; + + /** + * 发货库存组织 + */ + private BdCalbodyEntity bdCalbodyEntity; + + /** + * 入库仓库 + */ + private BdStordocEntity bdStordocEntity; + + /** + * 收货库存组织 + */ +// private BdCalbodyEntity bdCalbodyEntity1; + + /** + * 收货仓库 + */ +// private BdStordocEntity bdStordocEntity1; + + /** + * 销售组织 + */ + private BdSalestruEntity bdSalestruEntity; + + + /** + * 业务部门 + */ + private BdDeptdocEntity bdDeptdocEntity; + + /** + * 客商管理档案 + */ + private BdCumandocEntity bdCumandocEntity; + + /** + * 客商基本档案 + */ + private BdCubasdocEntity bdCubasdocEntity; + + /** + * 发货公司 + */ + private BdCorpEntity deliverGoodsCorp; + + /** + * U8C平台档案 + */ + private BdDefdocEntity platformArchives; + + /** + * 店铺档案 + */ + private BdDefdocEntity shopArchives; + + /** + * TOB无源入库单表头 + */ + private PassiveStorageResponse.Header header; + + /** + * TOB售后入库单表体 + */ + private List details; + + /** + * OFS销售订单 + */ + private SaleOrderMessageDto saleOrderMessageDto; + + /** + * U8C销售订单 + */ + private SoSaleEntity soSaleEntity; + + /** + * U8C销售出库单表头 + */ + private IcGeneralHEntity icGeneralHEntity; + + /** + * U8C销售出库单明细行 + */ + private List icGeneralBEntityList; + + /** + * U8C销售订单明细行 + */ + private List soSaleorderBEntityList; + + /** + * 执行情况自定义项 + */ + private List extIntegrationTaskLivingDetailsQueryVos; + + /** + * OFS售后订单 + */ + private RerturnGoodsOrderSearchData ofsRertunOrder; + + /** + * O收发类别 + */ + private BdRdclEntity bdRdclEntity; +} \ No newline at end of file diff --git a/buildpackage/src/main/resources/cfgHome/plugin/lets/spring/spring-lets-plugin.xml b/buildpackage/src/main/resources/cfgHome/plugin/lets/spring/spring-lets-plugin.xml index d8ff0036..a556a057 100644 --- a/buildpackage/src/main/resources/cfgHome/plugin/lets/spring/spring-lets-plugin.xml +++ b/buildpackage/src/main/resources/cfgHome/plugin/lets/spring/spring-lets-plugin.xml @@ -49,6 +49,9 @@ - + + + + diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToBTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToBTest.java new file mode 100644 index 00000000..affe4956 --- /dev/null +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/PassiveWarehouseReceiptToBTest.java @@ -0,0 +1,44 @@ +package com.hzya.frame.plugin.lets.plugin.sales; + +import com.hzya.frame.WebappApplication; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * @Author:liuyang + * @Package:com.hzya.frame.plugin.lets.plugin.sales + * @Project:kangarooDataCenterV3 + * @name:PassiveWarehouseReceiptToBTest + * @Date:2025/3/17 16:51 + * @Filename:PassiveWarehouseReceiptToBTest + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = WebappApplication.class) +public class PassiveWarehouseReceiptToBTest { + + @Autowired + private PassiveWarehouseReceiptToB passiveWarehouseReceiptToB; + + @Test + public void startImplementByStockTime() { + } + + @Test + public void startImplementByTradeTime() { + } + + @Test + public void startImplementByCode() { + try { + //TOB 无源入库 +// passiveWarehouseReceiptToB.startImplementByStockTime("2025-03-16 20:20:20", "2025-03-16 20:20:20"); + //TOB 无源入库退款完成 + passiveWarehouseReceiptToB.startImplementByTradeTime("2025-03-16 20:20:20", "2025-03-16 20:20:20"); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/util/DeleteU8cDataUtilTest4.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/util/DeleteU8cDataUtilTest4.java index 30b72431..d8322c5a 100644 --- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/util/DeleteU8cDataUtilTest4.java +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/util/DeleteU8cDataUtilTest4.java @@ -30,6 +30,8 @@ public class DeleteU8cDataUtilTest4 { // deleteU8cDataUtil.cancelSignatureIcGeneralHV2("'0001A110000000001TH6', '0001A1100000000VKCOK'"); //销售出库单签字 已测试 // deleteU8cDataUtil.saleOutSign("'0001A110000000001TH6', '0001A1100000000VKCOK'"); + + deleteU8cDataUtil.abandoningReviewAccReceDoc(); } catch (Exception e) { e.printStackTrace(); } diff --git a/service/src/main/java/com/hzya/frame/deletedata/entity/DeleteU8cDataUtilEntity.xml b/service/src/main/java/com/hzya/frame/deletedata/entity/DeleteU8cDataUtilEntity.xml index 3af8ca40..232fb464 100644 --- a/service/src/main/java/com/hzya/frame/deletedata/entity/DeleteU8cDataUtilEntity.xml +++ b/service/src/main/java/com/hzya/frame/deletedata/entity/DeleteU8cDataUtilEntity.xml @@ -135,6 +135,20 @@ diff --git a/service/src/main/java/com/hzya/frame/ttxofs/dto/passivestorage/PassiveStorageResponse.java b/service/src/main/java/com/hzya/frame/ttxofs/dto/passivestorage/PassiveStorageResponse.java index a47118a2..290f68a6 100644 --- a/service/src/main/java/com/hzya/frame/ttxofs/dto/passivestorage/PassiveStorageResponse.java +++ b/service/src/main/java/com/hzya/frame/ttxofs/dto/passivestorage/PassiveStorageResponse.java @@ -72,5 +72,9 @@ public class PassiveStorageResponse extends ReturnMessageBasics { private PassiveStorageResponse.Header header; //退款完成时间 private String refundedAt; + //计算应收 + private String def1; + //计算公式 + private String def2; } }