From 94e32ffa12d471f87c969b839aad9b7f98c12769 Mon Sep 17 00:00:00 2001
From: liuy <37787198+LiuyCodes@users.noreply.github.com>
Date: Wed, 20 Nov 2024 13:41:48 +0800
Subject: [PATCH] =?UTF-8?q?feat(plugin):=20=E6=96=B0=E5=A2=9E=E8=AE=A1?=
 =?UTF-8?q?=E7=AE=97=E5=85=AC=E5=BC=8F=E5=AD=97=E6=AE=B5=E5=B9=B6=E4=BC=98?=
 =?UTF-8?q?=E5=8C=96=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 在 TocofsReturngoodsDetailedEntity 和 DetailsDto 中添加计算公式字段
- 修改相关方法以支持计算公式存储和传递
- 优化批量插入或更新操作,支持新字段- 调整分页查询大小
---
 .../TocofsReturngoodsDetailedEntity.xml       | 16 +++--
 .../entity/TocofsSaleoutDetailedEntity.xml    | 16 +++--
 .../sales/SoSaleOutPluginInitializerToB.java  | 29 +++++++---
 .../sales/SoSaleOutPluginInitializerToC.java  |  7 ++-
 .../SoSaleReturnPluginInitializerToB.java     | 58 +++++++++++++------
 .../SoSaleReturnPluginInitializerToC.java     |  2 +-
 .../plugin/lets/util/OfsStandardUtil.java     |  4 +-
 .../SoSaleOutPluginInitializerToCTest.java    |  4 +-
 .../dto/ofssaleorderoutsearch/DetailsDto.java |  7 ++-
 .../dto/stock/StockinOrderSearchResponse.java |  8 +++
 10 files changed, 108 insertions(+), 43 deletions(-)

diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsReturngoodsDetailedEntity.xml b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsReturngoodsDetailedEntity.xml
index 17e7a583..404a5b36 100644
--- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsReturngoodsDetailedEntity.xml
+++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsReturngoodsDetailedEntity.xml
@@ -911,10 +911,10 @@
 
 <!-- 批量新增或者修改,TOB退货-库存-->
 <insert id="entityInsertOrUpdateBatchByTobRerturnStock" keyProperty="id" useGeneratedKeys="true">
-    insert into tocofs_returngoods_detailed(id,newPushDate,newTransmitInfo,newState,newSystemNumber,newSystemPrimary)
+    insert into tocofs_returngoods_detailed(id,newPushDate,newTransmitInfo,newState,newSystemNumber,newSystemPrimary,def7,def8)
     values
     <foreach collection="list" item="entity" separator=",">
-        (#{entity.id},#{entity.newpushdate},#{entity.newtransmitinfo},#{entity.newstate},#{entity.newsystemnumber},#{entity.newsystemprimary})
+        (#{entity.id},#{entity.newpushdate},#{entity.newtransmitinfo},#{entity.newstate},#{entity.newsystemnumber},#{entity.newsystemprimary},#{entity.def7},#{entity.def8})
     </foreach>
     on duplicate key update
     id = values(id),
@@ -922,7 +922,9 @@
     newTransmitInfo = values(newTransmitInfo),
     newState = values(newState),
     newSystemNumber = values(newSystemNumber),
-    newSystemPrimary = values(newSystemPrimary)
+    newSystemPrimary = values(newSystemPrimary),
+    def7 = values(def7),
+    def8 = values(def8)
 </insert>
 
 <!-- 批量新增或者修改,TOB退货-库存-->
@@ -941,10 +943,10 @@
 
 <!-- 批量新增或者修改,TOB退货-确认收入-->
 <insert id="entityInsertOrUpdateBatchByTobRerturnTran" keyProperty="id" useGeneratedKeys="true">
-    insert into tocofs_returngoods_detailed(id,newPushDate2,newTransmitInfo2,newState2,newSystemNumber2,newSystemPrimary2)
+    insert into tocofs_returngoods_detailed(id,newPushDate2,newTransmitInfo2,newState2,newSystemNumber2,newSystemPrimary2,def7,def8)
     values
     <foreach collection="list" item="entity" separator=",">
-        (#{entity.id},#{entity.newpushdate2},#{entity.newtransmitinfo2},#{entity.newstate2},#{entity.newsystemnumber2},#{entity.newsystemprimary2})
+        (#{entity.id},#{entity.newpushdate2},#{entity.newtransmitinfo2},#{entity.newstate2},#{entity.newsystemnumber2},#{entity.newsystemprimary2},#{entity.def7},#{entity.def8})
     </foreach>
     on duplicate key update
     id = values(id),
@@ -952,7 +954,9 @@
     newTransmitInfo2 = values(newTransmitInfo2),
     newState2 = values(newState2),
     newSystemNumber2 = values(newSystemNumber2),
-    newSystemPrimary2 = values(newSystemPrimary2)
+    newSystemPrimary2 = values(newSystemPrimary2),
+    def7 = values(def7),
+    def8 = values(def8)
 </insert>
 
 <!-- 批量新增或者修改,TOB退货-确认收入-->
diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsSaleoutDetailedEntity.xml b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsSaleoutDetailedEntity.xml
index ecc9a204..857d1f14 100644
--- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsSaleoutDetailedEntity.xml
+++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/ofs/entity/TocofsSaleoutDetailedEntity.xml
@@ -1009,7 +1009,7 @@
 
     <!-- TOB更新推送状态(适合确认收入蓝字)-->
     <insert id="entityInsertOrUpdateBatchStock6" keyProperty="id" useGeneratedKeys="true">
-        insert into tocofs_saleout_detailed(id,newPushDate,newTransmitInfo,newState,newSystemNumber,newSystemPrimary,def7)
+        insert into tocofs_saleout_detailed(id,newPushDate,newTransmitInfo,newState,newSystemNumber,newSystemPrimary,def7,def8)
         values
         <foreach collection="list" item="entity" separator=",">
             (
@@ -1019,7 +1019,8 @@
             #{entity.newstate},
             #{entity.newsystemnumber},
             #{entity.newsystemprimary},
-            #{entity.def7}
+            #{entity.def7},
+            #{entity.def8}
             )
         </foreach>
         on duplicate key update
@@ -1029,7 +1030,8 @@
         newState = values(newState),
         newSystemNumber = values(newSystemNumber),
         newSystemPrimary = values(newSystemPrimary),
-        def7 = values(def7)
+        def7 = values(def7),
+        def8 = values(def8)
     </insert>
 
     <!-- TOB更新推送状态(适合确认收入蓝字)-->
@@ -1053,7 +1055,7 @@
 
     <!-- TOB更新推送状态(适合确认收入蓝字)-->
     <insert id="entityInsertOrUpdateBatchStock8" keyProperty="id" useGeneratedKeys="true">
-        insert into tocofs_saleout_detailed(id,def5,def6,newState4,newSystemNumber4,newSystemPrimary4,def7)
+        insert into tocofs_saleout_detailed(id,def5,def6,newState4,newSystemNumber4,newSystemPrimary4,def7,def8)
         values
         <foreach collection="list" item="entity" separator=",">
             (
@@ -1063,7 +1065,8 @@
             #{entity.newstate4},
             #{entity.newsystemnumber4},
             #{entity.newsystemprimary4},
-            #{entity.def7}
+            #{entity.def7},
+            #{entity.def8}
             )
         </foreach>
         on duplicate key update
@@ -1073,7 +1076,8 @@
         newState4 = values(newState4),
         newSystemNumber4 = values(newSystemNumber4),
         newSystemPrimary4 = values(newSystemPrimary4),
-        def7 = values(def7)
+        def7 = values(def7),
+        def8 = values(def8)
     </insert>
 
     <!--通过主键修改方法-->
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 d7b94546..351c6ed1 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
@@ -781,15 +781,16 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
                                 tax = "0";
                             }
 
+                            StringBuffer calculationFormula = new StringBuffer();//计算公式
                             BigDecimal noriginalcurprice = null;//无税单价
                             BigDecimal noriginalcurmny = null;//无税金额
                             BigDecimal noriginalcurtaxprice = null;//含税单价
                             BigDecimal noriginalcursummny = null;//价税合计
                             BigDecimal noriginalcurtaxmny = null;//税额
+                            String totalPayAmount = null;
                             try {
                                 //判断目标金额:O实收、结存价、采购价
-                                String totalPayAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, detailsDto);
-                                detailsDto.setTargetAccountsReceivable(totalPayAmount);
+                                totalPayAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, detailsDto, calculationFormula);
 
                                 noriginalcurtaxprice = new BigDecimal(totalPayAmount).divide(new BigDecimal(detailsDto.getShipQty()), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP);
                                 noriginalcurprice = noriginalcurtaxprice.divide(new BigDecimal(1).add(new BigDecimal(tax)), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP);
@@ -843,6 +844,9 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
 //                            saleorderRequestChildrenDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目
 //                            saleorderRequestChildrenDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
                             saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
+
+                            detailsDto.setDef7(totalPayAmount);
+                            detailsDto.setDef8(calculationFormula.toString());
                         }
                         //记录成功
                         //销售订单单据推送到u8c
@@ -1905,12 +1909,14 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
 //                        BdInvclEntity bdInvclEntity = queryU8CEntityUtil.queryBdInvbasdocByBdInvcl(bdInvbasdocEntity);
 //                        BdCostsubjEntity bdCostsubjEntity = queryU8CEntityUtil.queryBdCostsubj(bdInvclEntity);
 
+                        //计算公式
+                        StringBuffer calculationFormula = new StringBuffer();
                         //含税单价
                         BigDecimal noriginalcurtaxprice = null;
+                        String totalPayAmount = null;
                         try {
                             //综合判断对应的目标金额
-                            String totalPayAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, detailsDto);
-                            detailsDto.setTargetAccountsReceivable(totalPayAmount);
+                            totalPayAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, detailsDto, calculationFormula);
                             noriginalcurtaxprice = new BigDecimal(totalPayAmount).divide(new BigDecimal(detailsDto.getShipQty()), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP);
                         } catch (Exception e) {
                             logger.error("含税单价金额计算失败!", e);
@@ -1951,6 +1957,9 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
 //                        salesInvoiceBodyDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
 
                         salesInvoiceBodyDtoList.add(salesInvoiceBodyDto);
+
+                        detailsDto.setDef7(totalPayAmount);
+                        detailsDto.setDef8(calculationFormula.toString());
                     }
                     SalesInvoiceDto salesInvoiceDto = new SalesInvoiceDto();
                     salesInvoiceDto.setParentvo(salesInvoiceHeadDto);
@@ -2358,7 +2367,8 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
                             tocofsSaleoutDetailedEntity.setNewpushdate(getNewDateStr());
                             tocofsSaleoutDetailedEntity.setNewtransmitinfo(finalNewTransmitInfo);
                             tocofsSaleoutDetailedEntity.setNewstate(newstate);
-                            tocofsSaleoutDetailedEntity.setDef7(detailsDto.getTargetAccountsReceivable());
+                            tocofsSaleoutDetailedEntity.setDef7(detailsDto.getDef7());
+                            tocofsSaleoutDetailedEntity.setDef8(detailsDto.getDef8());
                             if (successY.equals(newstate)) {
                                 //只有成功才填充下游系统主键和编码
                                 tocofsSaleoutDetailedEntity.setNewsystemnumber(newsystemnumber);
@@ -2415,7 +2425,8 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
                             tocofsSaleoutDetailedEntity.setDef5(getNewDateStr());
                             tocofsSaleoutDetailedEntity.setDef6(finalNewTransmitInfo);
                             tocofsSaleoutDetailedEntity.setNewstate4(newstate);
-                            tocofsSaleoutDetailedEntity.setDef7(detailsDto.getTargetAccountsReceivable());
+                            tocofsSaleoutDetailedEntity.setDef7(detailsDto.getDef7());
+                            tocofsSaleoutDetailedEntity.setDef8(detailsDto.getDef8());
                             if (successY.equals(newstate)) {
                                 //只有成功才填充下游系统主键和编码
                                 tocofsSaleoutDetailedEntity.setNewsystemnumber4(newsystemnumber);
@@ -2660,11 +2671,12 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
      * @param detailsDto        对应的销售出库单明细行对象
      * @author liuyang
      */
-    private String getFloorPrice(Boolean isCheckShopChoose, BdInvmandocEntity bdInvmandocEntity, HeaderDto header, DetailsDto detailsDto) throws Exception {
+    private String getFloorPrice(Boolean isCheckShopChoose, BdInvmandocEntity bdInvmandocEntity, HeaderDto header, DetailsDto detailsDto, StringBuffer calculationFormula) throws Exception {
         Assert.notNull(isCheckShopChoose, "isCheckShopChoose不能为空");
         Assert.notNull(bdInvmandocEntity, "bdInvmandocEntity不能为空");
         Assert.notNull(header, "header不能为空");
         Assert.notNull(detailsDto, "detailsDto不能为空");
+        Assert.notNull(calculationFormula, "calculationFormula不能为空");
 
         //这里只能是金额
         String totalPayAmount = null;
@@ -2676,6 +2688,7 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
             List<IaPeriodaccountEntity> iaPeriodaccountEntityList = balanceUnitPriceUtil.queryBalanceUnitPrice(bdInvmandocEntityArrayList);
             if (iaPeriodaccountEntityList != null && iaPeriodaccountEntityList.size() > 0) {
                 logger.info("店铺:{} 取O结存价", header.getStoreCode());
+                calculationFormula.append("U结存金额");
 
                 //结存金额
                 IaPeriodaccountEntity iaPeriodaccountEntity = iaPeriodaccountEntityList.get(0);
@@ -2707,6 +2720,7 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
                 List<PoOrderBEntity> poOrderBEntityList = balanceUnitPriceUtil.queryPurchaseUnitPriceByInvcodes(bdInvmandocEntityArrayList1);
                 if (poOrderBEntityList != null && poOrderBEntityList.size() > 0) {
                     logger.info("店铺:{} 取O采购价", header.getStoreCode());
+                    calculationFormula.append("U采购金额");
                     String norgtaxprice = poOrderBEntityList.get(0).getNorgtaxprice();
 //                    String nordernum = poOrderBEntityList.get(0).getNordernum();
                     if (!"0".equals(new BigDecimal(norgtaxprice).stripTrailingZeros().toPlainString())) {
@@ -2724,6 +2738,7 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
             }
         } else {
             logger.info("店铺:{} 取O实付金额", header.getStoreCode());
+            calculationFormula.append("O实退金额");
             totalPayAmount = detailsDto.getTotalPayAmount();
         }
         return totalPayAmount;
diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java
index 6fa68371..730c4717 100644
--- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java
+++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToC.java
@@ -201,7 +201,7 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
 
     private static final String NOTHING = "无";
 
-    private static final String ADD = "(*)";
+    private static final String ADD = "&";
 
     @Autowired
     private ShopTobOrToCUtil shopTobOrToCUtil;
@@ -849,6 +849,7 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
                 List<SonDetailsDto> sonDetailsDtoList = queryBasicArchivesStock(headerDetailsDtos, sceneType);
                 // 分组汇总
 //                String dimension = "1001(*)dy-intoyou(*)B2CHA20240010(*)6973391735605(*)SALES(*)002";
+//                String dimension = "1001(*)dy-intoyou(*)B2CHA20240010(*)6973391732482(*)SALES(*)002";
                 String dimension = null;
                 Map<String, List<SonDetailsDto>> summaryDimensionMap = groupSummaryStock(sonDetailsDtoList, dimension);
                 // 查询U8C业务流程
@@ -1673,6 +1674,7 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
         Assert.notNull(isCheckShopChoose, "isCheckShopChoose不能为空");
         Assert.notNull(mapList, "mapLists不能为空");
 
+        StringBuffer aaa = new StringBuffer();
         if (sonDetailsDtoList != null && sonDetailsDtoList.size() > 0) {
             BigDecimal groupTotalPayAmount = new BigDecimal("0");
             BigDecimal groupShipQty = new BigDecimal("0");
@@ -1723,6 +1725,8 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
                     BigDecimal detailedLineUnitPrice = new BigDecimal(targetDetails.getPayableAmount()).divide(new BigDecimal(targetDetails.getRequestQty()), 20, BigDecimal.ROUND_HALF_UP);
                     BigDecimal totalPayAmountBigDecimal = detailedLineUnitPrice.multiply(new BigDecimal(sonDetailsDto.getShipQty())).setScale(2, BigDecimal.ROUND_HALF_UP);
                     totalPayAmount = totalPayAmountBigDecimal.stripTrailingZeros().toPlainString();
+                    aaa.append(totalPayAmount);
+                    aaa.append(",");
 
                     String format = StrUtil.format("{}/{}*{}", targetDetails.getPayableAmount(), targetDetails.getRequestQty(), sonDetailsDto.getShipQty());
                     calculationFormulaStr.append(format);
@@ -1777,6 +1781,7 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
 
             //累加各类优惠
 //            logger.info("{}个明细行发生了合并!", sonDetailsDtoList.size());
+            System.out.println(aaa.toString());
             return sonDetailsDto;
         } else {
             logger.error("sonDetailsDtoList集合是空的!");
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 de0ce152..3d5ee82e 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
@@ -779,17 +779,18 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
                                 tax = "0";
                             }
 
+                            StringBuffer calculationFormula = new StringBuffer();//计算公式
                             BigDecimal noriginalcurprice = null;//无税单价
                             BigDecimal noriginalcurmny = null;//无税金额
                             BigDecimal noriginalcurtaxprice = null;//含税单价
                             BigDecimal noriginalcursummny = null;//价税合计
                             BigDecimal noriginalcurtaxmny = null;//税额
+                            String totalAmount = null;
                             try {
 //                                Assert.notNull(stockinB.getTotalAmount(), "退货入库单总金额不能为空 明细行对象:{}", JSON.toJSONString(stockinB));
-                                Assert.notNull(stockinB.getReceivedQty(), "实收数量不能为空  明细行对象:{}", JSON.toJSONString(stockinB));
-
-                                //确定好实退金额,可能为O的实退金额,也可能是结存价和采购价
-                                String totalAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, afterSalesOrder);
+                                Assert.notNull(stockinB.getReceivedQty(), "实收数量不能为空 售后订单:{} 售后订单主键:{}", header.getCode(), stockinB.getId());
+                                //确定实退金额,可能为O的实退金额,也可能是结存价和采购价
+                                totalAmount = getFloorPrice(isCheckShopChoose, bdInvmandocEntity, header, afterSalesOrder, calculationFormula, stockinB);
 
                                 noriginalcurtaxprice = new BigDecimal(totalAmount).divide(new BigDecimal(stockinB.getReceivedQty()), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP);
                                 noriginalcurprice = noriginalcurtaxprice.divide(new BigDecimal(1).add(new BigDecimal(tax)), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP);
@@ -833,6 +834,9 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
 //                            saleorderRequestChildrenDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目
 //                            saleorderRequestChildrenDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
                             saleorderRequestChildrenDtoList.add(saleorderRequestChildrenDto);
+
+                            stockinB.setDef7(totalAmount);//计算应收
+                            stockinB.setDef8(calculationFormula.toString());//计算公式
                         }
                         //记录成功
                         //销售订单单据推送到u8c
@@ -1847,6 +1851,8 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
 //                            BdInvclEntity bdInvclEntity = queryU8CEntityUtil.queryBdInvbasdocByBdInvcl(bdInvbasdocEntity);
 //                            BdCostsubjEntity bdCostsubjEntity = queryU8CEntityUtil.queryBdCostsubj(bdInvclEntity);
 
+                            StringBuffer calculationFormula = new StringBuffer();//计算公式
+                            calculationFormula.append("O实退金额");
                             BigDecimal noriginalcurtaxprice = null;//含税单价
                             try {
                                 noriginalcurtaxprice = new BigDecimal(afterSalesOrder.getTotalAmount()).divide(new BigDecimal(stockinB.getReceivedQty()), 20, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP);
@@ -1877,6 +1883,9 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
 //                            salesInvoiceBodyDto.setVdef2(bdCostsubjEntity.getCostname());//收支项目
 //                            salesInvoiceBodyDto.setPk_defdoc2(bdCostsubjEntity.getPkCostsubj());
                             salesInvoiceBodyDtoList.add(salesInvoiceBodyDto);
+
+                            stockinB.setDef7("-" + new BigDecimal(afterSalesOrder.getTotalAmount()).stripTrailingZeros().toPlainString());
+                            stockinB.setDef8(calculationFormula.toString());//计算公式
                         }
                         SalesInvoiceDto salesInvoiceDto = new SalesInvoiceDto();
                         salesInvoiceDto.setParentvo(salesInvoiceHeadDto);
@@ -2283,6 +2292,8 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
                             tocofsReturngoodsDetailedEntity.setNewpushdate(getNewDateStr());
                             tocofsReturngoodsDetailedEntity.setNewtransmitinfo(finalNewTransmitInfo);
                             tocofsReturngoodsDetailedEntity.setNewstate(newstate);
+                            tocofsReturngoodsDetailedEntity.setDef7(stockinB.getDef7());
+                            tocofsReturngoodsDetailedEntity.setDef8(stockinB.getDef8());
                             if (successY.equals(newstate)) {
                                 tocofsReturngoodsDetailedEntity.setNewsystemnumber(newsystemnumber);
                                 tocofsReturngoodsDetailedEntity.setNewsystemprimary(newsystemprimary);
@@ -2292,7 +2303,7 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
 
                         //以50行为一个批次,推送到Mysql
                         if (tocofsReturngoodsDetailedEntityArrayList.size() > 0) {
-                            List<List<TocofsReturngoodsDetailedEntity>> splitListByCount = SplitListByCountUtil.splitListByCount(tocofsReturngoodsDetailedEntityArrayList, 50);
+                            List<List<TocofsReturngoodsDetailedEntity>> splitListByCount = SplitListByCountUtil.splitListByCount(tocofsReturngoodsDetailedEntityArrayList, 200);
                             for (int i = 0; i < splitListByCount.size(); i++) {
                                 List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntities = splitListByCount.get(i);
                                 iTocofsReturngoodsDetailedDao.entityInsertOrUpdateBatchByTobRerturnStock(tocofsReturngoodsDetailedEntities);
@@ -2349,6 +2360,8 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
                             tocofsReturngoodsDetailedEntity.setNewpushdate2(getNewDateStr());
                             tocofsReturngoodsDetailedEntity.setNewtransmitinfo2(finalNewTransmitInfo);
                             tocofsReturngoodsDetailedEntity.setNewstate2(newstate);
+                            tocofsReturngoodsDetailedEntity.setDef7(stockinB.getDef7());
+                            tocofsReturngoodsDetailedEntity.setDef8(stockinB.getDef8());
                             if (successY.equals(newstate)) {
                                 tocofsReturngoodsDetailedEntity.setNewsystemnumber2(newsystemnumber);
                                 tocofsReturngoodsDetailedEntity.setNewsystemprimary2(newsystemprimary);
@@ -2511,18 +2524,23 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
      * 获取结存金额或者采购金额
      * Boolean isCheckShopChoose
      *
-     * @param isCheckShopChoose true取OFS实付金额、false取结存金额或者采购价
-     * @param bdInvmandocEntity 存货管理档案
-     * @param header            OFS收入入库单表头
-     * @param afterSalesOrder   OFS售后订单明细行
+     * @param isCheckShopChoose  true取OFS实付金额、false取结存金额或者采购价
+     * @param bdInvmandocEntity  存货管理档案
+     * @param header             OFS售后入库单表头
+     * @param afterSalesOrder    OFS售后订单明细行
+     * @param calculationFormula 计算公式
+     * @param stockinB           OFS售后入库单明细行
      * @author liuyang
      */
-    private String getFloorPrice(Boolean isCheckShopChoose, BdInvmandocEntity bdInvmandocEntity, StockinOrderSearchResponse.StockinOrder.StockinH header, RerturnGoodsOrderSearchDetails afterSalesOrder) throws Exception {
+    private String getFloorPrice(Boolean isCheckShopChoose, BdInvmandocEntity bdInvmandocEntity, StockinOrderSearchResponse.StockinOrder.StockinH header, RerturnGoodsOrderSearchDetails afterSalesOrder, StringBuffer calculationFormula, StockinOrderSearchResponse.StockinOrder.StockinB stockinB) 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不能为空");
 
+        //totalPayAmount只能是金额
         String totalPayAmount = null;
         if (isCheckShopChoose) {
             //取结存
@@ -2530,6 +2548,7 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
             bdInvmandocEntityArrayList.add(bdInvmandocEntity);
             List<IaPeriodaccountEntity> iaPeriodaccountEntityList = balanceUnitPriceUtil.queryBalanceUnitPrice(bdInvmandocEntityArrayList);
             if (iaPeriodaccountEntityList != null && iaPeriodaccountEntityList.size() > 0) {
+                calculationFormula.append("U结存金额");
                 //结存金额
                 logger.info("店铺:{} 取O结存价", header.getStoreCode());
                 IaPeriodaccountEntity iaPeriodaccountEntity = iaPeriodaccountEntityList.get(0);
@@ -2550,17 +2569,21 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
                 bdInvmandocEntityArrayList1.add(bdInvmandocEntity);
                 List<PoOrderBEntity> poOrderBEntityList = balanceUnitPriceUtil.queryPurchaseUnitPriceByInvcodes(bdInvmandocEntityArrayList1);
                 if (poOrderBEntityList != null && poOrderBEntityList.size() > 0) {
+                    calculationFormula.append("U采购金额");
                     logger.info("店铺:{} 取O采购价", header.getStoreCode());
-                    String norgtaxprice = poOrderBEntityList.get(0).getNorgtaxprice();
-                    String nordernum = poOrderBEntityList.get(0).getNordernum();
-                    if ("0".equals(new BigDecimal(norgtaxprice).stripTrailingZeros().toPlainString()) || "0".equals(new BigDecimal(nordernum).stripTrailingZeros().toPlainString())) {
+                    String norgtaxprice = poOrderBEntityList.get(0).getNorgtaxprice();//原币含税单价
+//                    String nordernum = poOrderBEntityList.get(0).getNordernum();//订货数量
+                    if ("0".equals(new BigDecimal(norgtaxprice).stripTrailingZeros().toPlainString())) {
                         //如果采购单价都为0,那么金额也为0
                         totalPayAmount = "0";
                     } else {
-                        BigDecimal norgtaxpriceBigDecimal = new BigDecimal(norgtaxprice);
-                        BigDecimal nordernumBigDecimal = new BigDecimal(nordernum);
-                        BigDecimal multiply = norgtaxpriceBigDecimal.multiply(nordernumBigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
-                        totalPayAmount = multiply.stripTrailingZeros().toPlainString();
+                        //采购金额的确定=原币含税单价*O实退数量
+//                        BigDecimal norgtaxpriceBigDecimal = new BigDecimal(norgtaxprice);
+//                        BigDecimal nordernumBigDecimal = new BigDecimal(nordernum);
+//                        BigDecimal multiply = norgtaxpriceBigDecimal.multiply(nordernumBigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                        totalPayAmount = multiply.stripTrailingZeros().toPlainString();
+                        BigDecimal totalPayAmountBigDecimal = new BigDecimal(norgtaxprice).multiply(new BigDecimal(stockinB.getReceivedQty())).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        totalPayAmount = totalPayAmountBigDecimal.stripTrailingZeros().toPlainString();
                     }
                 } else {
                     Assert.state(false, "店铺:{} 存货管理档案主键:{} 既没有结存价、也没有采购价!", header.getStoreCode(), bdInvmandocEntity.getPkInvmandoc());
@@ -2569,6 +2592,7 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
         } else {
             //O用户实退
             logger.info("店铺:{} 取O实付金额", header.getStoreCode());
+            calculationFormula.append("O实退金额");
             totalPayAmount = afterSalesOrder.getTotalAmount();
         }
         return totalPayAmount;
diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java
index 6d708485..7f662cc5 100644
--- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java
+++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToC.java
@@ -170,7 +170,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
 
     private static final String NOTHING = "无";
 
-    private static final String ADD = "(*)";
+    private static final String ADD = "&";
 
     @Autowired
     private ITocofsReturngoodsDao iTocofsReturngoodsDao;
diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/util/OfsStandardUtil.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/util/OfsStandardUtil.java
index a16fb1a4..caae9d15 100644
--- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/util/OfsStandardUtil.java
+++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/util/OfsStandardUtil.java
@@ -54,8 +54,8 @@ public class OfsStandardUtil {
         Assert.notNull(headerDetailsDtoList, "headerDetailsDtoList不能为空");
         Assert.notNull(pageNo, "pageNo不能为空");
         Assert.notNull(api, "api不能为空");
-
-        Long pageSize = 400L;
+        
+        Long pageSize = 500L;
         queryOfsSoSaleOutVo.setPageNo(pageNo);
         queryOfsSoSaleOutVo.setPageSize(pageSize);
 
diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToCTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToCTest.java
index d6e96b4d..c6d99c3e 100644
--- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToCTest.java
+++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToCTest.java
@@ -112,7 +112,7 @@ class SoSaleOutPluginInitializerToCTest {
 //            String aaa = "LETS-SH2024102800021196";
 //            soSaleOutPluginInitializerToC.startImplementTranByTime("2024-11-05 10:28:06", "2024-11-05 10:28:06");
 
-//            soSaleOutPluginInitializerToC.startImplementStockByTime("2024-11-01 00:00:00", "2024-11-01 23:59:59");
+            soSaleOutPluginInitializerToC.startImplementStockByTime("2024-11-15 00:00:00", "2024-11-15 23:59:59");
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -120,7 +120,7 @@ class SoSaleOutPluginInitializerToCTest {
 //        soSaleOutPluginInitializerToC.sendU8CTOCOrder("123446");
 
         try {
-            soSaleOutPluginInitializerToC.startImplementStockByCode("LETS-SH2024103100030329", "stock");
+//            soSaleOutPluginInitializerToC.startImplementStockByCode("LETS-SH2024103100030329", "stock");
 //            soSaleOutPluginInitializerToC.startImplementStockByCode("LETS-SH2024110500013375", "tran");
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/service/src/main/java/com/hzya/frame/ttxofs/dto/ofssaleorderoutsearch/DetailsDto.java b/service/src/main/java/com/hzya/frame/ttxofs/dto/ofssaleorderoutsearch/DetailsDto.java
index 27e35435..93bcb988 100755
--- a/service/src/main/java/com/hzya/frame/ttxofs/dto/ofssaleorderoutsearch/DetailsDto.java
+++ b/service/src/main/java/com/hzya/frame/ttxofs/dto/ofssaleorderoutsearch/DetailsDto.java
@@ -60,5 +60,10 @@ public class DetailsDto {
     /**
      * 目标应收
      */
-    private String targetAccountsReceivable;
+    private String def7;
+
+    /**
+     * 计算公式
+     */
+    private String def8;
 }
\ No newline at end of file
diff --git a/service/src/main/java/com/hzya/frame/ttxofs/dto/stock/StockinOrderSearchResponse.java b/service/src/main/java/com/hzya/frame/ttxofs/dto/stock/StockinOrderSearchResponse.java
index 740dc139..77b7ee66 100644
--- a/service/src/main/java/com/hzya/frame/ttxofs/dto/stock/StockinOrderSearchResponse.java
+++ b/service/src/main/java/com/hzya/frame/ttxofs/dto/stock/StockinOrderSearchResponse.java
@@ -107,6 +107,14 @@ public class StockinOrderSearchResponse extends ReturnMessageBasics {
             private String newstate4;
             //表头对象
             private StockinH returnGoodSearchHeaderDto;
+            /**
+             * 计算应收
+             */
+            private String def7;
+            /**
+             * 计算公式
+             */
+            private String def8;
         }
     }
 }