Просмотр исходного кода

Merge branch 'master' of http://git.dongkesoft.com:9001/iBOSS-2.0-Mini/iboss-server-mdm

hongxudong 1 год назад
Родитель
Сommit
0f0db2ffaa
33 измененных файлов с 1182 добавлено и 479 удалено
  1. 11 0
      src/main/java/com/dk/mdm/controller/mac/ReceiptController.java
  2. 28 0
      src/main/java/com/dk/mdm/controller/sale/OrderItemController.java
  3. 8 1
      src/main/java/com/dk/mdm/mapper/common/CommonMapper.xml
  4. 3 1
      src/main/java/com/dk/mdm/mapper/ivt/InboundItemMapper.xml
  5. 14 4
      src/main/java/com/dk/mdm/mapper/ivt/InboundMapper.xml
  6. 4 0
      src/main/java/com/dk/mdm/mapper/ivt/InventoryMapper.xml
  7. 6 1
      src/main/java/com/dk/mdm/mapper/ivt/OutboundItemMapper.xml
  8. 41 21
      src/main/java/com/dk/mdm/mapper/ivt/OutboundMapper.xml
  9. 14 0
      src/main/java/com/dk/mdm/mapper/mac/RecPayMapper.java
  10. 93 7
      src/main/java/com/dk/mdm/mapper/mac/RecPayMapper.xml
  11. 1 1
      src/main/java/com/dk/mdm/mapper/mst/GoodsSkuMapper.xml
  12. 27 0
      src/main/java/com/dk/mdm/mapper/report/ReportMapper.java
  13. 150 31
      src/main/java/com/dk/mdm/mapper/report/ReportMapper.xml
  14. 16 0
      src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.java
  15. 54 0
      src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.xml
  16. 92 65
      src/main/java/com/dk/mdm/mapper/sale/OrderMapper.xml
  17. 28 22
      src/main/java/com/dk/mdm/model/pojo/sale/Order.java
  18. 13 0
      src/main/java/com/dk/mdm/model/query/ivt/InventoryQuery.java
  19. 30 23
      src/main/java/com/dk/mdm/model/query/sale/OrderQuery.java
  20. 3 0
      src/main/java/com/dk/mdm/model/response/ivt/OutboundItemResponse.java
  21. 3 0
      src/main/java/com/dk/mdm/model/response/mac/RecPayResponse.java
  22. 22 22
      src/main/java/com/dk/mdm/model/response/sale/OrderResponse.java
  23. 22 22
      src/main/java/com/dk/mdm/model/vo/sale/OrderVO.java
  24. 5 0
      src/main/java/com/dk/mdm/service/common/CommonService.java
  25. 1 1
      src/main/java/com/dk/mdm/service/ivt/inbound/InboundOtherService.java
  26. 67 65
      src/main/java/com/dk/mdm/service/ivt/inventory/InventoryService.java
  27. 2 2
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundOtherService.java
  28. 292 156
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java
  29. 24 7
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleReturnService.java
  30. 30 5
      src/main/java/com/dk/mdm/service/mac/ReceiptService.java
  31. 47 19
      src/main/java/com/dk/mdm/service/report/ReportService.java
  32. 22 0
      src/main/java/com/dk/mdm/service/sale/OrderItemService.java
  33. 9 3
      src/main/java/com/dk/mdm/service/sale/OrderService.java

+ 11 - 0
src/main/java/com/dk/mdm/controller/mac/ReceiptController.java

@@ -38,6 +38,17 @@ public class ReceiptController {
     }
 
     /**
+     * @desc : 条件查询--客户详情的收款列表
+     * @author : 姜永辉
+     * @date : 2023/1/9 10:36
+     */
+    @ApiOperation(value = "分页、关联、条件查询", notes = "分页、关联、条件查询")
+    @PostMapping({"list_by_cus"})
+    public ResponseResultVO<PageList<RecPayResponse>> selectByCondCus(@RequestBody RecPayQuery recPayQuery) {
+        return receiptService.selectByCondCus(recPayQuery);
+    }
+
+    /**
      * @desc :查询收款明细(货物、收款、附件)
      * @author : 付斌
      * @date : 2024-02-28 13:24

+ 28 - 0
src/main/java/com/dk/mdm/controller/sale/OrderItemController.java

@@ -7,8 +7,10 @@ import com.dk.common.controller.BaseController;
 import com.dk.common.service.BaseService;
 import com.dk.mdm.model.query.pur.PurchaseItemQuery;
 import com.dk.mdm.model.query.sale.OrderItemQuery;
+import com.dk.mdm.model.query.sale.OrderQuery;
 import com.dk.mdm.model.response.pur.PurchaseItemResponse;
 import com.dk.mdm.model.response.sale.OrderItemResponse;
+import com.dk.mdm.model.response.sale.OrderResponse;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -18,6 +20,8 @@ import org.springframework.web.bind.annotation.RestController;
 import io.swagger.annotations.Api;
 import com.dk.mdm.service.sale.OrderItemService;
 
+import java.util.List;
+
 @Api(tags = "销售明细API接口")
 @RestController
 @RequestMapping("/sale/orderItem")
@@ -58,4 +62,28 @@ public class OrderItemController{
         return orderItemService.purchaseBasedOnSaleSelectOrder(orderItemQuery);
     }
 
+
+    /**
+     * @desc   : 销售出库页面选择源单条件查询分页
+     * @date   : 2024/6/27 14:12
+     * @author : 寇珊珊
+     */
+    @ApiOperation(value = "销售出库页面选择源单条件查询分页", notes = "销售出库页面选择源单条件查询分页")
+    @PostMapping({"select_by_sale_out_by_page"})
+    public ResponseResultVO<PageList<OrderItemResponse>> selectBySaleOutByPage(@RequestBody OrderItemQuery orderItemQuery) {
+        return orderItemService.selectBySaleOutByPage(orderItemQuery);
+    }
+
+
+    /**
+     * @desc   : 销售出库页面选择源单
+     * @date   : 2024/6/27 14:12
+     * @author : 寇珊珊
+     */
+    @ApiOperation(value = "销售出库页面选择源单", notes = "销售出库页面选择源单")
+    @PostMapping({"select_by_sale_out"})
+    public ResponseResultVO<List<OrderItemResponse>> selectBySaleOut(@RequestBody OrderItemQuery orderItemQuery) {
+        return orderItemService.selectBySaleOut(orderItemQuery);
+    }
+
 }

+ 8 - 1
src/main/java/com/dk/mdm/mapper/common/CommonMapper.xml

@@ -190,6 +190,10 @@
         <if test="flgBusiness != null">
             AND flg_business  = #{flgBusiness}
         </if>
+        <if test="searchText !=null">
+            AND ( org_name LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            or org_code LIKE concat('%', my_ex.likequery(#{searchText}), '%'))
+        </if>
         <if test="ids != null and ids.size() > 0 ">
             order by case org_id
             <foreach collection="ids" index="index" item="item">
@@ -288,7 +292,10 @@
         <if test="staffName != null and staffName != ''">
             And position (#{staffName} in staff.staff_name)>0
         </if>
-
+        <if test="searchText !=null">
+            AND ( staff.staff_name LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            or staff.staff_code LIKE concat('%', my_ex.likequery(#{searchText}), '%'))
+        </if>
         <if test="ids != null and ids.size() > 0 ">
             order by case staff.staff_id
             <foreach collection="ids" index="index" item="item">

+ 3 - 1
src/main/java/com/dk/mdm/mapper/ivt/InboundItemMapper.xml

@@ -684,7 +684,9 @@
                 AND tmgs.sku_model LIKE concat('%',my_ex.likequery(#{skuModel}),'%')
             </if>
             <if test="searchText !=null">
-                AND  (tpid.into_no LIKE concat('%',my_ex.likequery(#{searchText}), '%')    OR   tmgs.sku_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')   OR   tmgs.sku_code LIKE concat('%',my_ex.likequery(#{searchText}),'%'))
+                AND  (tpid.into_no LIKE concat('%',my_ex.likequery(#{searchText}), '%')
+                OR   tmgs.sku_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                OR   tmgs.sku_model LIKE concat('%',my_ex.likequery(#{searchText}),'%'))
             </if>
         </where>
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">

+ 14 - 4
src/main/java/com/dk/mdm/mapper/ivt/InboundMapper.xml

@@ -846,14 +846,19 @@
                 AND tpi.sup_id = #{supId}::uuid
             </if>
             <if test="orgIdList != null and orgIdList.size() > 0">
-                AND tmo.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
+                AND tpi.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
             </if>
             <if test="staffIdList != null and staffIdList.size() > 0">
-                AND tms.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
+                AND tpi.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
             </if>
             <if test="flgValidList != null and flgValidList.size()>0">
                 AND tpi.flg_valid =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
             </if>
+            <if test="searchText !=null and searchText != ''">
+                AND (
+                tpi.into_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                )
+            </if>
         </where>
         union all
         select
@@ -901,14 +906,19 @@
                 AND tpo.sup_id = #{supId}::uuid
             </if>
             <if test="orgIdList != null and orgIdList.size() > 0">
-                AND tmo.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
+                AND tpo.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
             </if>
             <if test="staffIdList != null and staffIdList.size() > 0">
-                AND tms.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
+                AND tpo.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
             </if>
             <if test="flgValidList != null and flgValidList.size()>0">
                 AND tpo.flg_valid =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
             </if>
+            <if test="searchText !=null and searchText != ''">
+                AND (
+                tpo.out_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                )
+            </if>
         </where>
         ) tt order by tt.op_update_time desc
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">

+ 4 - 0
src/main/java/com/dk/mdm/mapper/ivt/InventoryMapper.xml

@@ -92,6 +92,10 @@
                 AND tpi.wh_id =
                 any(#{whIds, typeHandler=UuidListTypeHandler})
             </if>
+            <if test="warehouseIds != null and warehouseIds.size()>0">
+                AND tpi.wh_id =
+                any(#{warehouseIds, typeHandler=UuidListTypeHandler})
+            </if>
             <if test="skuId != null and skuId != ''">
                 AND tpi.sku_id = #{skuId}
             </if>

+ 6 - 1
src/main/java/com/dk/mdm/mapper/ivt/OutboundItemMapper.xml

@@ -139,6 +139,7 @@ sys.f_remove_zero(out_qty) as out_qty, out_amt, sys.f_remove_zero(return_qty) as
         <result column="fact_amt" property="factAmt"/>
         <result column="discount" property="discount"/>
         <result column="disc_amt" property="discAmt"/>
+        <result column="out_no" property="outNo"/>
     </resultMap>
 
     <!-- 通用条件列 -->
@@ -222,6 +223,7 @@ sys.f_remove_zero(out_qty) as out_qty, out_amt, sys.f_remove_zero(return_qty) as
     <select id="selectByCond" resultMap="BaseResultMapResponse">
         SELECT tpoi.item_id,
         tpoi.out_id,
+        tpo.out_no,
         tpoi.out_type,
         tpoi.from_id,
         tpoi.from_item_id,
@@ -270,6 +272,7 @@ sys.f_remove_zero(out_qty) as out_qty, out_amt, sys.f_remove_zero(return_qty) as
         u2.unit_name as "subUnitName"
         FROM dkic_b.t_psi_outbound_item as tpoi
         left join dkic_b.t_mst_warehouse as tmw on tmw.wh_id = tpoi.wh_id
+        left join dkic_b.t_psi_outbound as tpo on tpo.out_id = tpoi.out_id
         LEFT JOIN dkic_b.t_mst_supplier as tms ON tpoi.sup_id = tms.sup_id
         LEFT JOIN dkic_b.t_mst_unit AS ul ON tpoi.unit_id = ul.unit_id
         LEFT JOIN dkic_b.t_mst_unit AS u2 ON tpoi.sub_unit_id = u2.unit_id
@@ -430,7 +433,8 @@ sys.f_remove_zero(out_qty) as out_qty, out_amt, sys.f_remove_zero(return_qty) as
                t.non_std_code,
                t.remarks,
                t.inv_id,
-               tpi.wh_id                                                                 as "whId",
+               t.wh_id                                                                 as "whId",
+
                sys.f_remove_zero(tpi.inv_qty)                                                               as "invQty",
                sys.f_remove_zero(tpi.usable_qty)                                                            as "usableQty",
                tmw.wh_name                                                               as "whName",
@@ -662,6 +666,7 @@ sys.f_remove_zero(out_qty) as out_qty, out_amt, sys.f_remove_zero(return_qty) as
                  left join dkic_b.t_psi_outbound_item as tpobi on tpobi.item_id = t.s_out_item_id
         where t.flg_valid
           and t.out_id = #{id}::uuid
+          and t.out_qty  - t.return_qty > 0
         order by t.item_index
     </select>
 

+ 41 - 21
src/main/java/com/dk/mdm/mapper/ivt/OutboundMapper.xml

@@ -155,7 +155,7 @@
         <result column="cus_from_name" property="cusFromName"/>
         <result column="out_reason" property="outReason" typeHandler="UuidTypeHandler"/>
         <result column="out_reason_name" property="outReasonName" />
-
+        <result column="outStatusName" property="outStatusName"/>
         <collection property="goodsList" resultMap="itemListMap" columnPrefix="list_"/>
     </resultMap>
 
@@ -211,6 +211,8 @@
         <result column="out_box" property="box"/>
         <result column="out_piece" property="piece"/>
         <result column="decimal_places" property="decimalPlaces"/>
+        <result column="fact_price" property="factPrice"/>
+        <result column="fact_amt" property="factAmt"/>
     </resultMap>
     <!-- 通用条件列 -->
     <sql id="Condition">
@@ -320,11 +322,11 @@
             <if test="cusName != null and cusName != ''">
                 AND tmc.cus_name LIKE concat('%',my_ex.likequery(#{cusName}),'%')
             </if>
-            <if test="orgIdList != null and orgIdList.size() > 0">
-                AND t.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
+            <if test="orgIds != null and orgIds.size() > 0">
+                AND t.org_id  =any(#{orgIds, typeHandler=uuidListTypeHandler})
             </if>
-            <if test="staffIdList != null and staffIdList.size() > 0">
-                AND t.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
+            <if test="staffIds != null and staffIds.size() > 0">
+                AND t.staff_id  =any(#{staffIds, typeHandler=uuidListTypeHandler})
             </if>
             <if test="outStatusList != null and outStatusList.size() > 0">
                 AND t.out_status  =any(#{outStatusList, typeHandler=StringListTypeHandler})
@@ -807,15 +809,23 @@
             <if test="supId != null and supId != ''">
                 AND tpo.sup_id = #{supId}::uuid
             </if>
-            <if test="orgIdList != null and orgIdList.size() > 0">
-                AND tmo.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
+            <if test="orgIds != null and orgIds.size() > 0">
+                AND tpo.org_id  =any(#{orgIds, typeHandler=uuidListTypeHandler})
             </if>
-            <if test="staffIdList != null and staffIdList.size() > 0">
-                AND tms.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
+            <if test="staffIds != null and staffIds.size() > 0">
+                AND tpo.staff_id  =any(#{staffIds, typeHandler=uuidListTypeHandler})
             </if>
             <if test="flgValidList != null and flgValidList.size()>0">
                 AND tpo.flg_valid =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
             </if>
+            <if test="searchText !=null and searchText != ''">
+                AND (
+                tpo.out_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                or tpo.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                or tpo.cus_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                or tpo.address_full LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                )
+            </if>
         </where>
         union all
         SELECT
@@ -860,15 +870,23 @@
             <if test="supId != null and supId != ''">
                 AND tpi.sup_id = #{supId}::uuid
             </if>
-            <if test="orgIdList != null and orgIdList.size() > 0">
-                AND tmo.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
+            <if test="orgIds != null and orgIds.size() > 0">
+                AND tpi.org_id  =any(#{orgIds, typeHandler=uuidListTypeHandler})
             </if>
-            <if test="staffIdList != null and staffIdList.size() > 0">
-                AND tms.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
+            <if test="staffIds != null and staffIds.size() > 0">
+                AND tpi.staff_id  =any(#{staffIds, typeHandler=uuidListTypeHandler})
             </if>
             <if test="flgValidList != null and flgValidList.size()>0">
                 AND tpi.flg_valid =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
             </if>
+            <if test="searchText !=null and searchText != ''">
+                AND (
+                tpi.into_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                or tmc.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                or tmc.cus_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                or tmc.address_full LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+                )
+            </if>
         </where>
         ) tt order by tt.op_update_time desc
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
@@ -922,11 +940,11 @@
             <if test="supId != null and supId != ''">
                 AND tpo.sup_id = #{supId}::uuid
             </if>
-            <if test="orgIdList != null and orgIdList.size() > 0">
-                AND tmo.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
+            <if test="orgIds != null and orgIds.size() > 0">
+                AND tmo.org_id  =any(#{orgIds, typeHandler=uuidListTypeHandler})
             </if>
-            <if test="staffIdList != null and staffIdList.size() > 0">
-                AND tms.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
+            <if test="staffIds != null and staffIds.size() > 0">
+                AND tms.staff_id  =any(#{staffIds, typeHandler=uuidListTypeHandler})
             </if>
             <if test="flgValidList != null and flgValidList.size()>0">
                 AND tpo.flg_valid =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
@@ -975,11 +993,11 @@
             <if test="supId != null and supId != ''">
                 AND tpi.sup_id = #{supId}::uuid
             </if>
-            <if test="orgIdList != null and orgIdList.size() > 0">
-                AND tmo.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
+            <if test="orgIds != null and orgIds.size() > 0">
+                AND tmo.org_id  =any(#{orgIds, typeHandler=uuidListTypeHandler})
             </if>
-            <if test="staffIdList != null and staffIdList.size() > 0">
-                AND tms.staff_id  =any(#{staffIdList, typeHandler=uuidListTypeHandler})
+            <if test="staffIds != null and staffIds.size() > 0">
+                AND tms.staff_id  =any(#{staffIds, typeHandler=uuidListTypeHandler})
             </if>
             <if test="flgValidList != null and flgValidList.size()>0">
                 AND tpi.flg_valid =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
@@ -1131,6 +1149,8 @@
         tpoi.sku_model AS list_sku_model,
         tpoi.sku_name AS list_sku_name,
         tmgs.sku_spec AS list_sku_spec,
+        tpoi.fact_price AS list_fact_price,
+        tpoi.fact_amt AS list_fact_amt,
         case when tpoi.sku_id is null then tmp.sup_name || '(外协)' else  tmgb.brand_name end AS list_brand_name,
         tmgb.short_name AS list_short_name,
         tmgs.price_purchase AS list_price_purchase,

+ 14 - 0
src/main/java/com/dk/mdm/mapper/mac/RecPayMapper.java

@@ -69,5 +69,19 @@ public interface RecPayMapper extends BaseMapper<RecPay> {
      * @date : 2024-04-28 9:10
      */
     int deleteById(@Param("id") String id);
+
+    /**
+     * @desc : 根据条件进行查询-客户详情的收款列表
+     * @author : 姜永辉
+     * @date : 2024-02-28 10:18
+     */
+    List<RecPayResponse> selectByCondCus(RecPayQuery recPayQuery);
+
+    /**
+     * @desc : 根据条件进行查询(数量)-客户详情的收款列表
+     * @author : 付斌
+     * @date : 2024-02-28 10:19
+     */
+    Long countByCondCus(RecPayQuery recPayQuery);
 }
 

+ 93 - 7
src/main/java/com/dk/mdm/mapper/mac/RecPayMapper.xml

@@ -71,6 +71,7 @@
             <result column="payable_residue" property="payableResidue"/>
             <result column="payment_residue" property="paymentResidue"/>
             <result column="macNames" property="macNames"/>
+             <result column="amt_rec" property="amtRec"/>
     </resultMap>
 
     <!-- 通用条件列 -->
@@ -246,8 +247,7 @@
                t.flg_valid,
                t.cp_id,
                 tma.receivable_residue,
-                tma.receipt_residue,
-                 concat (tmma.mac_name ) AS "macNames"
+                tma.receipt_residue
         from dkic_b.t_mac_rec_pay as t
                  left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.object_id
                  left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
@@ -255,15 +255,12 @@
                  left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
                  left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
                   LEFT JOIN  dkic_b.t_mac_account tma  on tma.object_id = t.object_id and tma.object_type in ('对象类型-客户')
-                 left  join   dkic_b.t_mac_rec_pay_item  rpi  on  rpi.rp_id = t.rp_id
-                 left  join   dkic_b.t_mst_money_account tmma  on  tmma.mac_id = rpi.mac_id
         where t.rp_type in ('收付款类型-收款', '收付款类型-退收款')
         <include refid="Condition"/>
 
         <if test="searchText !=null and searchText != ''">
-            AND (
-            t.rp_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
-            or tmc.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            AND (  tmc.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tmc.address_full LIKE concat('%',my_ex.likequery(#{searchText}),'%')
             or tmc.cus_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
             or tmo.org_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
             or tms.staff_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
@@ -297,6 +294,95 @@
         </if>
     </select>
 
+    <!-- 查询表t_mac_rec_pay,(条件查询+分页)列表 -->
+    <select id="selectByCondCus" resultMap="BaseResultMapResponse">
+        select t.rp_id,
+        t.rp_no,
+        t.rp_type,
+        sys.f_get_name_i18n(tdk1.kind_name_i18n, #{i18n}) as "rpTypeName",
+        t.object_id,
+        tmc.cus_code         as "cusCode",
+        tmc.cus_name         as "cusName",
+        tmc.cus_phone        as "cusPhone",
+        tmc.address_full     as "addressFull",
+        t.org_id,
+        tmo.org_name         as "orgName",
+        t.staff_id,
+        tms.staff_name       as "staffName",
+        t.sum_amt_rec,
+        t.sum_amt_pay,
+        t.sum_should_handle,
+        t.sum_use_receipt_residue,
+        t.sum_use_payment_residue,
+        t.sum_amt_receivable_handle,
+        t.sum_amt_payable_handle,
+        t.sum_waive_amt,
+        t.acc_date,
+        t.remarks,
+        t.annex_paths,
+        t.biznis_type,
+        t.biznis_id,
+        t.biznis_no,
+        t.flg_order_handle,
+        t.flg_lock,
+        t.make_staff,
+        makestaff.staff_name as "makeStaffName",
+        t.make_time,
+        t.flg_valid,
+        t.cp_id,
+        tma.receivable_residue,
+        tma.receipt_residue,
+        rpi.amt_rec,
+        concat (tmma.mac_name ) AS "macNames"
+        from dkic_b.t_mac_rec_pay as t
+        left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.object_id
+        left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
+        left join dkic_b.t_mst_org tmo on tmo.org_id = t.org_id
+        left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
+        left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
+        LEFT JOIN  dkic_b.t_mac_account tma  on tma.object_id = t.object_id and tma.object_type in ('对象类型-客户')
+        left  join   dkic_b.t_mac_rec_pay_item  rpi  on  rpi.rp_id = t.rp_id
+        left  join   dkic_b.t_mst_money_account tmma  on  tmma.mac_id = rpi.mac_id
+        where t.rp_type in ('收付款类型-收款', '收付款类型-退收款')
+        <include refid="Condition"/>
+
+        <if test="searchText !=null and searchText != ''">
+            AND (
+            t.rp_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tmc.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tmc.cus_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tmo.org_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tms.staff_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            )
+        </if>
+        order by t.op_create_time desc
+        <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
+            limit #{end} offset #{start}
+        </if>
+    </select>
+
+    <!-- 查询表t_mac_rec_pay,(条件查询)个数 -->
+    <select id="countByCondCus" resultType="Long">
+        SELECT count(1)
+        from dkic_b.t_mac_rec_pay as t
+        left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.object_id
+        left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.rp_type
+        left join dkic_b.t_mst_org tmo on tmo.org_id = t.org_id
+        left join dkic_b.t_mst_staff tms on tms.staff_id = t.staff_id
+        left join dkic_b.t_mst_staff as makestaff on makestaff.staff_id = t.make_staff
+        where t.rp_type in ('收付款类型-收款', '收付款类型-退收款')
+        <include refid="Condition"/>
+        <if test="searchText !=null and searchText != ''">
+            AND (
+            t.rp_no   LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tmc.cus_phone LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tmc.cus_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tmo.org_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            or tms.staff_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')
+            )
+        </if>
+    </select>
+
     <!-- 根据主键查询表t_mac_rec_pay的一行数据 -->
     <select id="selectById" resultMap="BaseResultMapResponse">
         select t.rp_id,

+ 1 - 1
src/main/java/com/dk/mdm/mapper/mst/GoodsSkuMapper.xml

@@ -247,7 +247,7 @@
         tmwitem.wh_name,
         tpivt.non_std_code,
         tpivt.inv_qty,
-        tpivt.cost_price
+        tpii.cost_price
         FROM
         dkic_b.t_psi_inbound_item tpii
         LEFT JOIN dkic_b.t_psi_inventory tpivt ON tpii.inv_id = tpivt.inv_id

+ 27 - 0
src/main/java/com/dk/mdm/mapper/report/ReportMapper.java

@@ -307,4 +307,31 @@ public interface ReportMapper extends BaseMapper<JSONObject> {
      * @date   : 2024-06-07 16:48
      */
     List<Map<String, Object>> getSaleProfitGroupBySku(Map params);
+
+    /**
+     * @desc   : 根据用户查询订单明细
+     * @author : 刘尧
+     * @date   : 2024-06-26 14:31
+     */
+    List<Map<String, Object>> getPsiOrderByUser(Map<String, Object> params);
+
+    /**
+     * @desc   : 获取销售额
+     * @author : 刘尧
+     * @date   : 2024-06-26 17:28
+     */
+    Map<String, Object> getSales(Map<String, Object> params);
+    /**
+     * @desc   : 获取收支额
+     * @author : 刘尧
+     * @date   : 2024-06-26 17:28
+     */
+    Map<String, Object> getIncomeExpenditure(Map<String, Object> params);
+    // 获取欠款额 !!!!
+    /**
+     * @desc   : 获取欠款额
+     * @author : 刘尧
+     * @date   : 2024-06-26 17:28
+     */
+    Map<String, Object> getDebt(Map<String, Object> params);
 }

+ 150 - 31
src/main/java/com/dk/mdm/mapper/report/ReportMapper.xml

@@ -839,9 +839,9 @@
         t.sum_amount as "sumAmount",
         t.sale_discount as "saleDiscount",
         sys.f_get_name_i18n(tdk2.kind_name_i18n, #{i18n}) as "orderStatusName",
-        t.amt_receivable as "amtReceivable",
-        t.amt_handle as "amtHandle",
-        t.amt_residue as "amtResidue",
+--         t.amt_receivable as "amtReceivable",
+--         t.amt_handle as "amtHandle",
+--         t.amt_residue as "amtResidue",
         t.remarks,
         makestaff.staff_name as "makeStaffName",
         t.make_time as "makeTime"
@@ -896,9 +896,9 @@
         ,t.sum_amount as "sumAmount"
         ,t.sale_discount as "saleDiscount"
         ,sys.f_get_name_i18n(tdk2.kind_name_i18n, #{i18n}) as "orderStatusName"
-        ,t.amt_receivable as "amtReceivable"
-        ,t.amt_handle as "amtHandle"
-        ,t.amt_residue as "amtResidue"
+--          ,t.amt_receivable as "amtReceivable"
+--          ,t.amt_handle as "amtHandle"
+--          ,t.amt_residue as "amtResidue"
         ,t.remarks
         ,makestaff.staff_name as "makeStaffName"
         ,t.make_time as "makeTime"
@@ -1444,9 +1444,9 @@
              ,tpo.out_amt AS "outAmt"
              ,sys.f_remove_zero(tpo.return_qty) AS "returnQty"
              ,tpo.return_amt AS "returnAmt"
-             ,tpo.amt_receivable AS "amtReceivable"
-             ,tpo.amt_handle AS "amtHandle"
-             ,tpo.amt_residue AS "amtResidue"
+--              ,tpo.amt_receivable AS "amtReceivable"
+--              ,tpo.amt_handle AS "amtHandle"
+--              ,tpo.amt_residue AS "amtResidue"
              ,tpo.make_time AS "makeTime"
             ,tmc.cus_code AS "cusCode"
             ,tmc.cus_name  As "cusName"
@@ -2296,9 +2296,9 @@
         T.out_amt AS "outAmt",
         sys.f_remove_zero(T.return_qty) AS "returnQty",
         T.return_amt AS "returnAmt",
-        T.amt_receivable AS "amtReceivable",
-        T.amt_handle AS "amtHandle",
-        T.amt_residue AS "amtResidue",
+--         T.amt_receivable AS "amtReceivable",
+--         T.amt_handle AS "amtHandle",
+--         T.amt_residue AS "amtResidue",
         T.remarks AS "remarks",
         T.annex_paths AS "annexPaths",
         makestaff.staff_name AS "makeStaffName",
@@ -2984,26 +2984,35 @@
         select dkic_b.f_query_mac_pay_current_item(#{cpId},#{objectId} ::uuid,#{orgId} ::uuid,#{macType},#{accDateStart} ::date
                    ,#{accDateEnd} ::date,#{i18n} ,#{currentPage},#{pageSize})
     </select>
+    <!--  根据用户信息和筛选信息查询账款明细  -->
     <select id="getCusRecPayReportItemByUser" resultType="java.util.Map">
         SELECT a.object_id as "objectId"
         , a.biznis_no as "biznisNo"
         , COALESCE(SUM(tpo.out_amt), 0) as "outAmt"
         , COALESCE(SUM(tpo.return_amt), 0) as "returnAmt"
-        , COALESCE(SUM(tmrp.sum_amt_rec), 0) as "sumAmtRec"
+        , COALESCE(SUM(a.amt_rec), 0) as "sumAmtRec"
+        , COALESCE(SUM(tmrp.sum_amt_pay), 0) as "sumAmtPay"
+        , COALESCE(SUM(a.amt_handle), 0) as "amtHandle"
         , a.acc_date as "accDate"
         FROM
-            dkic_b.t_mac_account_item a
-                LEFT JOIN dkic_b.t_psi_outbound tpo ON tpo.out_id = a.biznis_id
-                LEFT JOIN dkic_b.t_mac_rec_pay tmrp ON tmrp.rp_id = a.biznis_id
+            dkic_b.t_psi_order tpio
+            LEFT JOIN dkic_b.t_mac_account_item a ON a.object_id = tpio.cus_id
+            LEFT JOIN dkic_b.t_psi_outbound tpo ON tpo.out_id = a.biznis_id
+            LEFT JOIN dkic_b.t_mac_rec_pay tmrp ON tmrp.rp_id = a.biznis_id
+            LEFT JOIN dkic_b.t_mst_customer tmc ON tmc.cus_id = a.object_id
+            LEFT JOIN dkic_b.t_mac_rec_pay_item tmrpi ON tmrpi.rp_id = tmrp.rp_id
+            <if test="moneyAccountList != null and moneyAccountList.size() > 0">
+               LEFT JOIN dkic_b.t_mst_money_account tmma ON tmma.mac_id = tmrpi.mac_id
+            </if>
         WHERE a.flg_valid
-          AND a.cp_id = #{cpId}
-        <if test="objectId != null and objectId != ''">
+        AND a.cp_id = #{cpId}
+        <if test="objectId != null">
             AND a.object_id = #{objectId}::uuid
         </if>
-        <if test="staffId != null and staffId != ''">
+        <if test="staffId != null">
             AND a.staff_id = #{staffId}::uuid
         </if>
-        <if test="orgId != null and orgId != ''">
+        <if test="orgId != null">
             AND a.org_id = #{orgId}::uuid
         </if>
         <if test="makeTimeStart != null and makeTi8meStart != ''">
@@ -3018,46 +3027,56 @@
                 #{item}::uuid
             </foreach>
         </if>
+        <if test="searchText != null and searchText != ''">
+            AND (tmc.cus_name LIKE concat('%',#{searchText},'%')
+            OR tmc.cus_phone LIKE concat('%',#{searchText},'%')
+            OR tmc.address_full LIKE concat('%',#{searchText},'%'))
+        </if>
         <if test="orgIds != null and orgIds.size() > 0">
             AND a.org_id IN
             <foreach collection="orgIds" index="index" item="item" separator="," open="(" close=")">
                 #{item}::uuid
             </foreach>
         </if>
-        <if test="recTypeIds != null and recTypeIds.size() > 0">
-            <foreach collection="recTypeIds" item="item">
-                <if test="item != null and item != '' and item == '收支类型-出库'">
-                    AND tpo.out_amt &gt; 0
-                </if>
+        <if test="recTypeList != null and recTypeList.size() > 0">
+            <foreach collection="recTypeList" item="item">
                 <if test="item != null and item != '' and item == '收支类型-退货'">
                     AND tpo.out_amt &lt; 0
                 </if>
                 <if test="item != null and item != '' and item == '收支类型-收款'">
-                    AND tmrp.sum_amt_rec &gt; 0
+                    AND a.amt_rec &gt; 0
                 </if>
                 <if test="item != null and item != '' and item == '收支类型-退款'">
-                    AND tmrp.sum_amt_rec &lt; 0
+                    AND a.amt_rec &lt; 0
+                </if>
+            </foreach>
+        </if>
+        <if test="moneyAccountList != null and moneyAccountList.size() > 0">
+            AND
+            <foreach collection="moneyAccountList" item="item" separator="OR" open="(" close=")">
+                <if test="item != null and item != ''">
+                    tmma.mac_code = #{item}
                 </if>
             </foreach>
         </if>
         group by a.object_id, a.biznis_no, a.acc_date, a.staff_id
     </select>
 
+    <!--  查询用户欠款  -->
     <select id="getUserArrears" resultType="java.util.Map">
         SELECT a.object_id as "objectId"
         , tmc.cus_name as "cusName"
         , tmc.cus_phone as "cusPhone"
-        , SUM(COALESCE(tpo.out_amt, 0) + COALESCE(tpo.return_amt, 0)) - SUM(COALESCE(tmrp.sum_amt_rec, 0)) as arrears
+        , SUM(COALESCE(tpo.out_amt, 0) + COALESCE(tpo.return_amt, 0)) - SUM(COALESCE(a.amt_rec, 0)) as arrears
         FROM
-        dkic_b.t_mac_account_item a
+        dkic_b.t_psi_order tpio
+        LEFT JOIN dkic_b.t_mac_account_item a ON a.object_id = tpio.cus_id
         LEFT JOIN dkic_b.t_psi_outbound tpo ON tpo.out_id = a.biznis_id
         LEFT JOIN dkic_b.t_mac_rec_pay tmrp ON tmrp.rp_id = a.biznis_id
         LEFT JOIN dkic_b.t_mst_customer tmc ON tmc.cus_id = a.object_id
         WHERE a.flg_valid
         AND a.cp_id = #{cpId}
         AND tmc.cus_name IS NOT NULL AND tmc.cus_name != ''
-        GROUP BY a.object_id, tmc.cus_name, tmc.cus_phone, tmc.address_full
-        HAVING SUM(COALESCE(tpo.out_amt, 0) + COALESCE(tpo.return_amt, 0)) - SUM(COALESCE(tmrp.sum_amt_rec, 0)) > 0
         <if test="objectId != null">
             AND a.object_id = #{objectId}::uuid
         </if>
@@ -3066,11 +3085,111 @@
             OR tmc.cus_phone LIKE concat('%',#{searchText},'%')
             OR tmc.address_full LIKE concat('%',#{searchText},'%'))
         </if>
+        GROUP BY a.object_id, tmc.cus_name, tmc.cus_phone, tmc.address_full
+        HAVING SUM(COALESCE(tpo.out_amt, 0) + COALESCE(tpo.return_amt, 0)) - SUM(COALESCE(tmrp.sum_amt_rec, 0) + COALESCE(sum_amt_pay, 0)) > 0
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
             limit #{end} offset #{start}
         </if>
     </select>
 
+    <select id="getPsiOrderCount" resultType="java.util.Map">
+        SELECT
+        tpo.cus_id as "objectId"
+        , tpo.order_no as "biznisNo"
+        , tpo.make_time as "accDate"
+        , COALESCE(SUM(tpo.fact_amt), 0) as "facAmt"
+        FROM dkic_b.t_psi_order tpo
+        WHERE tpo.flg_valid
+        AND tpo.cp_id = #{cpId}
+        <if test="objectId != null">
+            AND tpo.cus_id = #{objectId}::uuid
+        </if>
+        <if test="staffIds != null and staffIds.size() > 0">
+            AND tpo.staff_id IN
+            <foreach collection="staffIds" index="index" item="item" separator="," open="(" close=")">
+                #{item}::uuid
+            </foreach>
+        </if>
+        <if test="orgIds != null and orgIds.size() > 0">
+            AND tpo.org_id IN
+            <foreach collection="orgIds" index="index" item="item" separator="," open="(" close=")">
+                #{item}::uuid
+            </foreach>
+        </if>
+        group by tpo.cus_id, tpo.make_time, tpo.fact_amt, tpo.order_no
+    </select>
+
+    <select id="getPsiOrderByUser" resultType="java.util.Map">
+        SELECT
+            tpo.cus_id as "objectId"
+             , tpo.order_no as "biznisNo"
+             , tpo.make_time::date as "accDate"
+             , COALESCE(SUM(tpo.fact_amt), 0) as "facAmt"
+        FROM dkic_b.t_psi_order tpo
+        WHERE tpo.flg_valid
+        AND tpo.cp_id = #{cpId}
+        <if test="objectId != null">
+            AND tpo.cus_id = #{objectId}::uuid
+        </if>
+        <if test="staffId != null">
+            AND tpo.staff_id = #{staffId}::uuid
+        </if>
+        <if test="orgId != null">
+            AND tpo.org_id = #{orgId}::uuid
+        </if>
+        <if test="staffIds != null and staffIds.size() > 0">
+            AND tpo.staff_id IN
+            <foreach collection="staffIds" index="index" item="item" separator="," open="(" close=")">
+                #{item}::uuid
+            </foreach>
+        </if>
+        <!--  改好再说  -->
+<!--        <if test="searchText != null and searchText != ''">-->
+<!--            AND (tmc.cus_name LIKE concat('%',#{searchText},'%')-->
+<!--            OR tmc.cus_phone LIKE concat('%',#{searchText},'%')-->
+<!--            OR tmc.address_full LIKE concat('%',#{searchText},'%'))-->
+<!--        </if>-->
+        <if test="orgIds != null and orgIds.size() > 0">
+            AND tpo.org_id IN
+            <foreach collection="orgIds" index="index" item="item" separator="," open="(" close=")">
+                #{item}::uuid
+            </foreach>
+        </if>
+        group by tpo.cus_id, tpo.make_time, tpo.fact_amt, tpo.order_no
+    </select>
+
+    <!--获取销售额-->
+    <select id="getSales" resultType="java.util.Map">
+        SELECT
+            COALESCE(SUM(tpo.fact_amt), 0) as "facAmt"
+        FROM dkic_b.t_psi_order tpo
+        WHERE tpo.flg_valid
+        AND tpo.cp_id = #{cpId}
+        AND tpo.make_time::date &lt;= CURRENT_DATE
+    </select>
+    <!--获取收支额-->
+    <select id="getIncomeExpenditure" resultType="java.util.Map">
+        SELECT
+            COALESCE(SUM(a.amt_rec), 0) as "arrears"
+        FROM dkic_b.t_mac_account_item a
+        LEFT JOIN dkic_b.t_mst_customer tmc ON tmc.cus_id = a.object_id
+        WHERE a.flg_valid
+        AND a.cp_id = #{cpId}
+        AND tmc.cus_name IS NOT NULL AND tmc.cus_name != ''
+        AND a.make_time::date &lt;= CURRENT_DATE
+    </select>
+    <!--获取欠款额-->
+    <select id="getDebt" resultType="java.util.Map">
+        SELECT
+            COALESCE(SUM(tpo.out_amt), 0) as "outAmt"
+        FROM dkic_b.t_mac_account_item a
+        LEFT JOIN dkic_b.t_psi_outbound tpo ON tpo.out_id = a.biznis_id
+        WHERE a.flg_valid
+        AND a.cp_id = #{cpId}
+        AND tpo.out_amt &lt; 0
+        AND a.make_time::date &lt;= CURRENT_DATE
+    </select>
+
     <!--region 销售利润-->
     <!--
     2024-06-24 11:25 成本和销售额都从出库明细中取

+ 16 - 0
src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.java

@@ -4,8 +4,10 @@ import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.mdm.model.pojo.sale.OrderItem;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.sale.OrderItemQuery;
+import com.dk.mdm.model.query.sale.OrderQuery;
 import com.dk.mdm.model.response.ivt.IntoReturnResponse;
 import com.dk.mdm.model.response.sale.OrderItemResponse;
+import com.dk.mdm.model.response.sale.OrderResponse;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -88,5 +90,19 @@ public interface OrderItemMapper extends BaseMapper<OrderItem> {
      * @date   : 2024/3/29 16:26
      */
     Long  purchaseBasedOnSaleContByCond (OrderItemQuery orderItemQuery);
+
+    /**
+     * @desc   : 销售出库页面选择源单
+     * @date   : 2024/6/27 14:10
+     * @author : 寇珊珊
+     */
+    List<OrderItemResponse> selectBySaleOut(OrderItemQuery orderItemQuery);
+
+    /**
+     * @desc   : 销售出库页面选择源单(数量)
+     * @date   : 2024/6/27 14:10
+     * @author : 寇珊珊
+     */
+    Long selectBySaleOutByCound(OrderItemQuery orderItemQuery);
 }
 

+ 54 - 0
src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.xml

@@ -98,6 +98,8 @@
         <result column="use_place" property="usePlace"/>
         <result column="discount" property="discount"/>
         <result column="sup_id" property="supId"/>
+        <result column="canOutingQty" property="canOutingQty"/>
+
     </resultMap>
 
     <!-- 通用条件列 -->
@@ -696,4 +698,56 @@
             limit #{end} offset #{start}
         </if>
     </select>
+
+    <!-- 销售出库页面选择源单 -->
+    <select id="selectBySaleOut" resultMap="BaseResultMapResponse">
+        SELECT
+        <include refid="Base_Column_List_Response"/>,
+        tpo.ordeer_no  as "orderNo",
+        tmc.cus_code as "cusCode",
+        tmc.cus_name as "cusName",
+        tmc.cus_phone as "cusPhone",
+        tmc.address_full as "addressFull",
+        tmsc.channel_name as "channelName",
+        tmgs.sku_code AS "skuCode",
+        tmgs.sku_model AS "skuModel",
+        tmgs.sku_name AS "skuName",
+        tmgb.brand_name AS "brandName",
+        tmgb.short_name AS "shortName"
+        FROM dkic_b.t_psi_order_item t
+        LEFT JOIN dkic_b.t_psi_order as tpo ON t.order_id = tpo.order_id
+        LEFT JOIN dkic_b.t_mst_customer tmc ON tmc.cus_id = tpo.cus_id
+        LEFT JOIN dkic_b.t_mst_sale_channel tmsc ON tpo.sales_channel = tmsc.channel_id
+        LEFT JOIN dkic_b.t_mst_goods_sku tmgs ON tmgs.sku_id  = t.sku_id
+        LEFT JOIN dkic_b.t_mst_goods_brand tmgb ON tmgb.brand_id  = tmgs.brand_id
+        WHERE
+        t.cp_id = #{cpId}
+        and t.item_qty - t.outing_qty - t.out_qty  > 0
+        <if test="orderNo != null">
+            AND tpo.order_no like concat('%', my_ex.likequery(#{orderNo}) , '%')
+        </if>
+        order by t.op_create_time desc
+        <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
+            limit #{end} offset #{start}
+        </if>
+    </select>
+
+    <!-- 销售出库页面选择源单个数 -->
+    <select id="selectBySaleOutByCound" resultMap="BaseResultMapResponse">
+        SELECT
+        count(1)
+        FROM dkic_b.t_psi_order_item t
+        LEFT JOIN dkic_b.t_psi_order as tpo ON t.order_id = tpo.order_id
+        LEFT JOIN dkic_b.t_mst_customer tmc ON tmc.cus_id = tpo.cus_id
+        LEFT JOIN dkic_b.t_mst_sale_channel tmsc ON tpo.sales_channel = tmsc.channel_id
+        LEFT JOIN dkic_b.t_mst_goods_sku tmgs ON tmgs.sku_id  = t.sku_id
+        LEFT JOIN dkic_b.t_mst_goods_brand tmgb ON tmgb.brand_id  = tmgs.brand_id
+        WHERE
+        t.cp_id = #{cpId}
+         and t.item_qty - t.outing_qty - t.out_qty  > 0
+        <if test="orderNo != null">
+            AND tpo.order_no like concat('%', my_ex.likequery(#{orderNo}) , '%')
+        </if>
+    </select>
+
 </mapper>

+ 92 - 65
src/main/java/com/dk/mdm/mapper/sale/OrderMapper.xml

@@ -8,9 +8,9 @@
         order_id, order_no, order_type, org_id, staff_id, cus_id, address_area, address_name, address_no, address_gcj02,
         address_full, contact_name, contact_phone, sales_channel, delivery_date, sys.f_remove_zero(sum_quantity) as sum_quantity,
         sum_standard, sum_amount, sale_discount, order_status, out_status, sys.f_remove_zero(outing_qty) as outing_qty, outing_amt,
-        sys.f_remove_zero(out_qty) as out_qty, out_amt, sys.f_remove_zero(return_qty) as return_qty, return_amt, amt_receivable,
-        amt_handle, amt_residue, remarks, annex_paths, make_staff, make_time, flg_valid, cp_id,
-        fact_amt,disc_amt,discount,flg_auto_handle,flg_handle_setting,outbound_processing_flag
+        sys.f_remove_zero(out_qty) as out_qty, out_amt, sys.f_remove_zero(return_qty) as return_qty, return_amt,
+        remarks, annex_paths, make_staff, make_time, flg_valid, cp_id,
+        fact_amt,disc_amt,discount,flg_auto_handle,flg_handle_setting,outbound_processing_flag,cus_name,cus_phone
     </sql>
 
     <!-- 通用查询映射结果 -->
@@ -42,9 +42,9 @@
         <result column="out_amt" property="outAmt"/>
         <result column="return_qty" property="returnQty"/>
         <result column="return_amt" property="returnAmt"/>
-        <result column="amt_receivable" property="amtReceivable"/>
-        <result column="amt_handle" property="amtHandle"/>
-        <result column="amt_residue" property="amtResidue"/>
+<!--        <result column="amt_receivable" property="amtReceivable"/>-->
+<!--        <result column="amt_handle" property="amtHandle"/>-->
+<!--        <result column="amt_residue" property="amtResidue"/>-->
         <result column="remarks" property="remarks"/>
         <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
         <result column="make_staff" property="makeStaff" typeHandler="UuidTypeHandler"/>
@@ -99,9 +99,9 @@
         <result column="out_amt" property="outAmt"/>
         <result column="return_qty" property="returnQty"/>
         <result column="return_amt" property="returnAmt"/>
-        <result column="amt_receivable" property="amtReceivable"/>
-        <result column="amt_handle" property="amtHandle"/>
-        <result column="amt_residue" property="amtResidue"/>
+<!--        <result column="amt_receivable" property="amtReceivable"/>-->
+<!--        <result column="amt_handle" property="amtHandle"/>-->
+<!--        <result column="amt_residue" property="amtResidue"/>-->
         <result column="remarks" property="remarks"/>
         <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
         <result column="make_staff" property="makeStaff" typeHandler="UuidTypeHandler"/>
@@ -180,9 +180,9 @@
         <result column="out_amt" property="outAmt"/>
         <result column="return_qty" property="returnQty"/>
         <result column="return_amt" property="returnAmt"/>
-        <result column="amt_receivable" property="amtReceivable"/>
-        <result column="amt_handle" property="amtHandle"/>
-        <result column="amt_residue" property="amtResidue"/>
+<!--        <result column="amt_receivable" property="amtReceivable"/>-->
+<!--        <result column="amt_handle" property="amtHandle"/>-->
+<!--        <result column="amt_residue" property="amtResidue"/>-->
         <result column="remarks" property="remarks"/>
         <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
         <result column="make_staff" property="makeStaff" typeHandler="UuidTypeHandler"/>
@@ -254,6 +254,7 @@
             <result column="inv_qty" property="invQty"/>
             <result column="usable_qty" property="usableQty"/>
             <result column="wh_name" property="whName"/>
+            <result column="max_out_qty" property="maxOutQty"/>
 
     </resultMap>
     <!--小程序用 总单-->
@@ -282,11 +283,13 @@
         t.order_status, t.out_status,
         sys.f_remove_zero(t.outing_qty) as  outing_qty, t.outing_amt, sys.f_remove_zero(t.out_qty) as  out_qty,
         t.out_amt, sys.f_remove_zero(t.return_qty) as  return_qty, t.return_amt,
-        t.amt_receivable, amt_handle, amt_residue,
+--         t.amt_receivable, amt_handle, amt_residue,
         t.remarks, t.annex_paths, t.make_staff, t.make_time,
         t.flg_valid, t.cp_id,
         tmo.org_name,
-        tms.staff_name
+        tms.staff_name,
+        t.cus_name,
+        t.cus_phone
     </sql>
     <!--小程序用 明细-->
     <sql id="Base_Column_List_Item_Response_Detail_Join">
@@ -301,6 +304,8 @@
         toi.amt_std AS list_amt_std,
         toi.price_sale AS list_price_sale,
         toi.price_sale AS list_price_out,
+        toi.fact_price AS list_fact_price,
+        toi.fact_amt AS list_fact_amt,
         toi.item_amt AS list_item_amt,
         toi.price_discount AS list_price_discount,
         toi.non_std_code AS list_non_std_code,
@@ -326,6 +331,7 @@
         i.wh_id as list_wh_id,
         sys.f_remove_zero(i.inv_qty)    as list_inv_qty,
         sys.f_remove_zero(i.usable_qty)  as list_usable_qty,
+        sys.f_remove_zero(toi.item_qty - toi.outing_qty -toi.out_qty  )  as list_max_out_qty,
         i.wh_name     as list_wh_name
     </sql>
 
@@ -333,6 +339,7 @@
     <!-- 通用条件列 -->
     <sql id="Condition">
         <where>
+
             <if test="orderNo != null and orderNo != ''">
                 AND t.order_no LIKE concat('%',my_ex.likequery(#{orderNo}),'%')
             </if>
@@ -408,15 +415,15 @@
             <if test="returnAmt != null">
                 AND t.return_amt = #{returnAmt}
             </if>
-            <if test="amtReceivable != null">
-                AND t.amt_receivable = #{amtReceivable}
-            </if>
-            <if test="amtHandle != null">
-                AND t.amt_handle = #{amtHandle}
-            </if>
-            <if test="amtResidue != null">
-                AND t.amt_residue = #{amtResidue}
-            </if>
+<!--            <if test="amtReceivable != null">-->
+<!--                AND t.amt_receivable = #{amtReceivable}-->
+<!--            </if>-->
+<!--            <if test="amtHandle != null">-->
+<!--                AND t.amt_handle = #{amtHandle}-->
+<!--            </if>-->
+<!--            <if test="amtResidue != null">-->
+<!--                AND t.amt_residue = #{amtResidue}-->
+<!--            </if>-->
             <if test="remarks != null and remarks != ''">
                 AND t.remarks LIKE concat('%',my_ex.likequery(#{remarks}),'%')
             </if>
@@ -433,10 +440,10 @@
                 AND t.cp_id = #{cpId}
             </if>
             <if test="cusPhone != null and cusPhone != ''">
-                AND tmc.cus_phone LIKE concat('%',my_ex.likequery(#{cusPhone}),'%')
+                AND t.cus_phone LIKE concat('%',my_ex.likequery(#{cusPhone}),'%')
             </if>
             <if test="cusName != null and cusName != ''">
-                AND tmc.cus_name LIKE concat('%',my_ex.likequery(#{cusName}),'%')
+                AND t.cus_name LIKE concat('%',my_ex.likequery(#{cusName}),'%')
             </if>
             <if test="orgIdList != null and orgIdList.size() > 0">
                 AND t.org_id  =any(#{orgIdList, typeHandler=uuidListTypeHandler})
@@ -471,15 +478,6 @@
             <if test="viewVoidedDocuments !=null and viewVoidedDocuments == false">
                 AND  t.flg_valid = true
             </if>
-            <if test="searchText !=null">
-                AND (  t.order_no LIKE concat('%', my_ex.likequery(#{searchText}), '%')
-                OR   t.contact_phone LIKE concat('%', my_ex.likequery(#{searchText}), '%')
-                OR   tmc.cus_name LIKE concat('%', my_ex.likequery(#{searchText}), '%')
-                OR   tmc.cus_phone LIKE concat('%', my_ex.likequery(#{searchText}), '%')
-                OR   t.address_full LIKE concat('%', my_ex.likequery(#{searchText}), '%')
-                OR   t.remarks LIKE concat('%', my_ex.likequery(#{searchText}), '%')
-                )
-            </if>
 
         </where>
     </sql>
@@ -504,8 +502,8 @@
                tms.staff_name                                    as "staffName",
                t.cus_id,
                tmc.cus_code                                      as "cusCode",
-               tmc.cus_name                                      as "cusName",
-               tmc.cus_phone                                     as "cusPhone",
+               t.cus_name                                       as "cusName",
+               t.cus_phone                                      as "cusPhone",
                tmc.cus_from                                      as "cusFrom",
                tmdd.data_value                                   as "cusFromName",
                t.address_area,
@@ -532,9 +530,9 @@
                t.out_amt,
         sys.f_remove_zero(t.return_qty) as return_qty,
                t.return_amt,
-               t.amt_receivable,
-               t.amt_handle,
-               t.amt_residue,
+--                t.amt_receivable,
+--                t.amt_handle,
+--                t.amt_residue,
                t.remarks,
                t.annex_paths,
                makestaff.staff_name                              as "makeStaffName",
@@ -613,8 +611,8 @@
         tms.staff_name AS "staffName",
         T.cus_id AS "cusId",
         tmc.cus_code AS "cusCode",
-        tmc.cus_name AS "cusName",
-        tmc.cus_phone AS "cusPhone",
+        T.cus_name AS "cusName",
+        T.cus_phone AS "cusPhone",
         tmc.cus_from AS "cusFrom",
         tmdd.data_value AS "dataValue",
         T.address_area AS "addressArea",
@@ -641,9 +639,9 @@
         T.out_amt AS "outAmt",
         sys.f_remove_zero(T.return_qty) AS "returnQty",
         T.return_amt AS "returnAmt",
-        T.amt_receivable AS "amtReceivable",
-        T.amt_handle AS "amtHandle",
-        T.amt_residue AS "amtResidue",
+--         T.amt_receivable AS "amtReceivable",
+--         T.amt_handle AS "amtHandle",
+--         T.amt_residue AS "amtResidue",
         T.remarks AS "remarks",
         T.annex_paths AS "annexPaths",
         makestaff.staff_name AS "makeStaffName",
@@ -748,8 +746,8 @@
                tms.staff_name                                    as "staffName",
                t.cus_id,
                tmc.cus_code                                      as "cusCode",
-               tmc.cus_name                                      as "cusName",
-               tmc.cus_phone                                     as "cusPhone",
+               t.cus_name                                      as "cusName",
+               t.cus_phone                                     as "cusPhone",
                tmc.cus_from                                      as "cusFrom",
                tmdd.data_value                                   as "cusFromName",
                t.address_area,
@@ -776,9 +774,9 @@
                t.out_amt,
                sys.f_remove_zero(t.return_qty) as  return_qty,
                t.return_amt,
-               t.amt_receivable,
-               t.amt_handle,
-               t.amt_residue,
+--                t.amt_receivable,
+--                t.amt_handle,
+--                t.amt_residue,
                t.remarks,
                t.annex_paths,
                t.make_staff,
@@ -850,9 +848,7 @@
             out_amt,
             return_qty,
             return_amt,
-            amt_receivable,
-            amt_handle,
-            amt_residue,
+
             remarks,
             annex_paths,
             make_staff,
@@ -897,9 +893,7 @@
                 #{item.outAmt},
                 #{item.returnQty},
                 #{item.returnAmt},
-                #{item.amtReceivable},
-                #{item.amtHandle},
-                #{item.amtResidue},
+
                 #{item.remarks},
                 #{item.annexPaths},
                 #{item.makeStaff}::uuid,
@@ -996,15 +990,15 @@
             <if test=" et!=null and et.returnAmt != null">
                 return_amt =#{et.returnAmt,jdbcType=NUMERIC},
             </if>
-            <if test=" et!=null and et.amtReceivable != null">
-                amt_receivable =#{et.amtReceivable,jdbcType=NUMERIC},
-            </if>
-            <if test=" et!=null and et.amtHandle != null">
-                amt_handle =#{et.amtHandle,jdbcType=NUMERIC},
-            </if>
-            <if test=" et!=null and et.amtResidue != null">
-                amt_residue =#{et.amtResidue,jdbcType=NUMERIC},
-            </if>
+<!--            <if test=" et!=null and et.amtReceivable != null">-->
+<!--                amt_receivable =#{et.amtReceivable,jdbcType=NUMERIC},-->
+<!--            </if>-->
+<!--            <if test=" et!=null and et.amtHandle != null">-->
+<!--                amt_handle =#{et.amtHandle,jdbcType=NUMERIC},-->
+<!--            </if>-->
+<!--            <if test=" et!=null and et.amtResidue != null">-->
+<!--                amt_residue =#{et.amtResidue,jdbcType=NUMERIC},-->
+<!--            </if>-->
             <if test=" et!=null and et.remarks != null">
                 remarks =#{et.remarks,jdbcType=VARCHAR},
             </if>
@@ -1038,6 +1032,12 @@
             <if test=" et!=null and et.flgHandleSetting != null">
                 flg_handle_setting =#{et.flgHandleSetting,jdbcType=BOOLEAN},
             </if>
+            <if test=" et!=null and et.cusName != null">
+                cus_name =#{et.cusName,jdbcType=VARCHAR},
+            </if>
+            <if test=" et!=null and et.cusPhone != null">
+                cus_phone =#{et.cusPhone,jdbcType=VARCHAR},
+            </if>
         </set>
         where order_id =#{et.orderId,typeHandler=UuidTypeHandler}
         and sum_quantity >= (out_qty + outing_qty)
@@ -1048,11 +1048,12 @@
     <select id="selectByCondDetail" resultMap="BaseResultMapDetailResponse">
         SELECT
         <include refid="Base_Column_List_Detail_Join"/>,
-        tmc.cus_code,tmc.cus_name, tmc.cus_phone, tmc.address_area, tmc.address_name, tmc.address_no,
+        tmc.cus_code, tmc.address_area, tmc.address_name, tmc.address_no,
         tmc.address_gcj02, tmc.address_full, tmc.contact_name, tmc.contact_phone, tmc.cus_from, tmc.channel_id,
         tmsc.channel_name as "channelName",
 
         <include refid="Base_Column_List_Item_Response_Detail_Join"/>
+
         ,(select count(DISTINCT tmgss.category_id) from dkic_b.t_psi_order_item ti
                 LEFT  JOIN dkic_b.t_mst_goods_sku tmgss ON tmgss.sku_id = ti.sku_id
                 where ti.order_id = t.order_id and ti.flg_valid) as "categoryCount"
@@ -1080,6 +1081,17 @@
         WHERE T.RK = 1) as i
         on i.sku_id = toi.sku_id and i.non_std_code = toi.non_std_code and i.cp_id = toi.cp_id
         <include refid="Condition"/>
+        <if test="flgSource !=null and flgSource == true">
+            AND toi.item_qty - toi.outing_qty -toi.out_qty   > 0
+        </if>
+        <if test="searchText !=null">
+            AND (  t.order_no LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   t.cus_name LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   t.cus_phone LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   toi.sku_name LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   toi.sku_model LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            )
+        </if>
         order by t.op_create_time desc
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
             limit #{end} offset #{start}
@@ -1091,7 +1103,22 @@
         SELECT
         count(1)
         FROM dkic_b.t_psi_order as t
+        left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.cus_id
+        left join dkic_b.t_psi_order_item toi on toi.order_id  = t.order_id
+        left join dkic_b.t_mst_goods_sku tmgs on tmgs.sku_id  = toi.sku_id
+        left join dkic_b.t_mst_goods_brand tmgb on tmgb.brand_id  = tmgs.brand_id
+        left join dkic_b.t_mst_org tmo on t.org_id = tmo.org_id
+        left join dkic_b.t_mst_sale_channel tmsc on t.sales_channel = tmsc.channel_id
+        left join dkic_b.t_mst_staff tms on t.staff_id = tms.staff_id
         <include refid="Condition"/>
+        <if test="searchText !=null">
+            AND (  t.order_no LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   t.cus_name LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   t.cus_phone LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   toi.sku_name LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            OR   toi.sku_model LIKE concat('%', my_ex.likequery(#{searchText}), '%')
+            )
+        </if>
     </select>
 
     <!--修改退货信息 -->

+ 28 - 22
src/main/java/com/dk/mdm/model/pojo/sale/Order.java

@@ -264,28 +264,28 @@ public class Order extends PageInfo<Order> implements Serializable {
     private BigDecimal returnAmt;
 
 
-    /**
-     * 应收金额
-     */
-    @Excel(name = "应收金额")
-    @ApiModelProperty(value = "应收金额")
-    private BigDecimal amtReceivable;
-
-
-    /**
-     * 还款金额
-     */
-    @Excel(name = "还款金额")
-    @ApiModelProperty(value = "还款金额")
-    private BigDecimal amtHandle;
-
-
-    /**
-     * 剩余应收
-     */
-    @Excel(name = "剩余应收")
-    @ApiModelProperty(value = "剩余应收")
-    private BigDecimal amtResidue;
+//    /**
+//     * 应收金额
+//     */
+//    @Excel(name = "应收金额")
+//    @ApiModelProperty(value = "应收金额")
+//    private BigDecimal amtReceivable;
+//
+//
+//    /**
+//     * 还款金额
+//     */
+//    @Excel(name = "还款金额")
+//    @ApiModelProperty(value = "还款金额")
+//    private BigDecimal amtHandle;
+//
+//
+//    /**
+//     * 剩余应收
+//     */
+//    @Excel(name = "剩余应收")
+//    @ApiModelProperty(value = "剩余应收")
+//    private BigDecimal amtResidue;
 
 
     /**
@@ -369,6 +369,12 @@ public class Order extends PageInfo<Order> implements Serializable {
     @ApiModelProperty(value = "开单并出库办理标识")
     private Boolean outboundProcessingFlag;
 
+    @ApiModelProperty(value = "客户名称")
+    private String cusName;
+
+    @ApiModelProperty(value = "客户电话")
+    private String cusPhone;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 13 - 0
src/main/java/com/dk/mdm/model/query/ivt/InventoryQuery.java

@@ -44,6 +44,19 @@ public class InventoryQuery extends PageInfo<InventoryQuery>{
      */
     @ApiModelProperty(value = "库存ID")
     private List<String> whIds;
+
+    /**
+     * @desc   : 库存IDlist
+     * @date   : 2024/3/2 9:27
+     */
+    @ApiModelProperty(value = "库存ID")
+    private List<String> warehouseIds;
+
+    /**
+     * @desc   : 可售量排序
+     * @date   : 2024/3/2 9:27
+     */
+    private String sellableQuantityAsc;
     /**
      * 商品种类
      */

+ 30 - 23
src/main/java/com/dk/mdm/model/query/sale/OrderQuery.java

@@ -268,29 +268,29 @@ public class OrderQuery extends PageInfo<OrderQuery> implements Serializable {
     @ApiModelProperty(value = "已出库退货金额")
     private BigDecimal returnAmt;
 
-
-    /**
-     * 应收金额
-     */
-    @Excel(name = "应收金额")
-    @ApiModelProperty(value = "应收金额")
-    private BigDecimal amtReceivable;
-
-
-    /**
-     * 还款金额
-     */
-    @Excel(name = "还款金额")
-    @ApiModelProperty(value = "还款金额")
-    private BigDecimal amtHandle;
-
-
-    /**
-     * 剩余应收
-     */
-    @Excel(name = "剩余应收")
-    @ApiModelProperty(value = "剩余应收")
-    private BigDecimal amtResidue;
+//    240626
+//    /**
+//     * 应收金额
+//     */
+//    @Excel(name = "应收金额")
+//    @ApiModelProperty(value = "应收金额")
+//    private BigDecimal amtReceivable;
+//
+//
+//    /**
+//     * 还款金额
+//     */
+//    @Excel(name = "还款金额")
+//    @ApiModelProperty(value = "还款金额")
+//    private BigDecimal amtHandle;
+//
+//
+//    /**
+//     * 剩余应收
+//     */
+//    @Excel(name = "剩余应收")
+//    @ApiModelProperty(value = "剩余应收")
+//    private BigDecimal amtResidue;
 
 
     /**
@@ -395,6 +395,13 @@ public class OrderQuery extends PageInfo<OrderQuery> implements Serializable {
     private String searchText;
     @ApiModelProperty(value = "查询作废")
     private Boolean viewVoidedDocuments;
+
+    /**
+     * 销售出库是否过滤明细的 外协 明细订单量-出库中-已出库+退货数量
+     */
+    @ApiModelProperty(value = "销售出库是否过滤明细的")
+    private Boolean flgSource;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 3 - 0
src/main/java/com/dk/mdm/model/response/ivt/OutboundItemResponse.java

@@ -437,6 +437,9 @@ public class OutboundItemResponse {
     @ApiModelProperty(value = "本次出库包装数量")
     private String unitInfo;
 
+    @ApiModelProperty(value = "出库单号")
+    private String outNo;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 3 - 0
src/main/java/com/dk/mdm/model/response/mac/RecPayResponse.java

@@ -315,6 +315,9 @@ public class RecPayResponse extends PageInfo<RecPayResponse> implements Serializ
     @ApiModelProperty(value = "账户名称")
     private String macNames;
 
+    @ApiModelProperty(value = "收款金额-明细")
+    private BigDecimal amtRec ;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 22 - 22
src/main/java/com/dk/mdm/model/response/sale/OrderResponse.java

@@ -281,28 +281,28 @@ public class OrderResponse extends PageInfo<OrderResponse> implements Serializab
     private BigDecimal returnAmt;
 
 
-    /**
-     * 应收金额
-     */
-    @Excel(name = "应收金额")
-    @ApiModelProperty(value = "应收金额")
-    private BigDecimal amtReceivable;
-
-
-    /**
-     * 还款金额
-     */
-    @Excel(name = "还款金额")
-    @ApiModelProperty(value = "还款金额")
-    private BigDecimal amtHandle;
-
-
-    /**
-     * 剩余应收
-     */
-    @Excel(name = "剩余应收")
-    @ApiModelProperty(value = "剩余应收")
-    private BigDecimal amtResidue;
+//    /**
+//     * 应收金额
+//     */
+//    @Excel(name = "应收金额")
+//    @ApiModelProperty(value = "应收金额")
+//    private BigDecimal amtReceivable;
+//
+//
+//    /**
+//     * 还款金额
+//     */
+//    @Excel(name = "还款金额")
+//    @ApiModelProperty(value = "还款金额")
+//    private BigDecimal amtHandle;
+//
+//
+//    /**
+//     * 剩余应收
+//     */
+//    @Excel(name = "剩余应收")
+//    @ApiModelProperty(value = "剩余应收")
+//    private BigDecimal amtResidue;
 
 
     /**

+ 22 - 22
src/main/java/com/dk/mdm/model/vo/sale/OrderVO.java

@@ -270,28 +270,28 @@ public class OrderVO extends PageInfo<OrderVO> implements Serializable {
     private BigDecimal returnAmt;
 
 
-    /**
-     * 应收金额
-     */
-    @Excel(name = "应收金额")
-    @ApiModelProperty(value = "应收金额")
-    private BigDecimal amtReceivable;
-
-
-    /**
-     * 还款金额
-     */
-    @Excel(name = "还款金额")
-    @ApiModelProperty(value = "还款金额")
-    private BigDecimal amtHandle;
-
-
-    /**
-     * 剩余应收
-     */
-    @Excel(name = "剩余应收")
-    @ApiModelProperty(value = "剩余应收")
-    private BigDecimal amtResidue;
+//    /**
+//     * 应收金额
+//     */
+//    @Excel(name = "应收金额")
+//    @ApiModelProperty(value = "应收金额")
+//    private BigDecimal amtReceivable;
+//
+//
+//    /**
+//     * 还款金额
+//     */
+//    @Excel(name = "还款金额")
+//    @ApiModelProperty(value = "还款金额")
+//    private BigDecimal amtHandle;
+//
+//
+//    /**
+//     * 剩余应收
+//     */
+//    @Excel(name = "剩余应收")
+//    @ApiModelProperty(value = "剩余应收")
+//    private BigDecimal amtResidue;
 
 
     /**

+ 5 - 0
src/main/java/com/dk/mdm/service/common/CommonService.java

@@ -808,6 +808,11 @@ public class CommonService extends BaseService<Map<String, Object>> {
             map.put("kindType", "收支类型");
             list = commonMapper.getDataKind(map);
         }
+        // 收支类型
+        if (dataSourceCode.equals("moneyAccount")) {
+            map.put("moneyAccount", "资金账户");
+            list = commonMapper.getDataKind(map);
+        }
 
         return ResponseResultUtil.success(list);
     }

+ 1 - 1
src/main/java/com/dk/mdm/service/ivt/inbound/InboundOtherService.java

@@ -295,7 +295,7 @@ public class InboundOtherService extends BaseService<Inbound> {
                                 .setIntoingQty(BigDecimal.ZERO)
                                 .setIntoingAmt(BigDecimal.ZERO)
                                 .setCostPrice(inboundItemVO.getPriceInto())
-                                .setCostAmt(inboundItemVO.getOutQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
+                                .setCostAmt(inboundItemVO.getIntoQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
                         ;
                         inboundItemVO.setIntoId(inboundVO.getIntoId());
                         //入库状态

+ 67 - 65
src/main/java/com/dk/mdm/service/ivt/inventory/InventoryService.java

@@ -92,9 +92,9 @@ public class InventoryService extends BaseService<Inventory> {
     private GoodsSkuMapper goodsSkuMapper;
 
     /**
-     * @desc   : 重写主键
+     * @desc : 重写主键
      * @author : 宋扬
-     * @date   : 2024/5/9 13:10
+     * @date : 2024/5/9 13:10
      */
     @Override
     public String getPrimaryKey() {
@@ -155,20 +155,20 @@ public class InventoryService extends BaseService<Inventory> {
         //region  查询当前公司的系统参数  自动办理信息  并赋值
         Map<String, Object> map = new HashMap<>();
         map.put("cpId", inOutRecordVOList.get(0).getCpId());
-        map.put("code",Constant.SystemConstant.IVT_002.getValue());
+        map.put("code", Constant.SystemConstant.IVT_002.getValue());
         //负数标识1
         String flgHandleSetting = commonMapper.getSettingValue(map);
         //endregion
         //赋值
         for (InOutRecordVO inOutRecordVO : inOutRecordVOList) {
             //如果可以为负数标识为空或者false 那就赋值系统参数的
-            if(inOutRecordVO.getCanNegativeFlag() == null || !inOutRecordVO.getCanNegativeFlag()){
+            if (inOutRecordVO.getCanNegativeFlag() == null || !inOutRecordVO.getCanNegativeFlag()) {
                 //负数标识1 可以
                 if (Constant.FlgAutoHandleStringType.ONE.getValue().equals(flgHandleSetting)) {
                     inOutRecordVO.setCanNegativeFlag(true);
                 }
                 //不可以
-                else{
+                else {
                     inOutRecordVO.setCanNegativeFlag(false);
                 }
             }
@@ -224,16 +224,16 @@ public class InventoryService extends BaseService<Inventory> {
         }
         for (InOutRecordVO inventoryBatchVO : inOutRecordVOList) {
             // 外协供应商ID 不进行判断商品Id和库存ID
-            if(inventoryBatchVO.getSupId() == null) {
+            if (inventoryBatchVO.getSupId() == null) {
                 //商品ID
                 if (inventoryBatchVO.getSkuId() == null || "".equals(inventoryBatchVO.getSkuId())) {
                     throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.SKU_IS_NULL.getMessage());
                 }
-                //存货ID
-                if (Constant.InventoryType.OUTBOUND.equals(inventoryBatchVO.getInventoryType())
-                        && (inventoryBatchVO.getInvId() == null || "".equals(inventoryBatchVO.getInvId()))) {
-                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.SKU_IS_NOT_IN_INVENTORY.getMessage());
-                }
+                //存货ID // 后面有判断
+//                if (Constant.InventoryType.OUTBOUND.equals(inventoryBatchVO.getInventoryType())
+//                        && (inventoryBatchVO.getInvId() == null || "".equals(inventoryBatchVO.getInvId()))) {
+//                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.SKU_IS_NOT_IN_INVENTORY.getMessage());
+//                }
                 //仓库ID
                 if (!inventoryBatchVO.getCanNegativeFlag() && (inventoryBatchVO.getWhId() == null || "".equals(inventoryBatchVO.getWhId()))) {
                     throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.WAREHOUSE_IS_NULL.getMessage());
@@ -329,9 +329,9 @@ public class InventoryService extends BaseService<Inventory> {
             addOrEditFlag = obj.getBoolean("addOrEditFlag");
         }
         //入库删除
-        if (map.get("delIntoDetail") != null ) {
+        if (map.get("delIntoDetail") != null) {
             delIntoDetail = (JSONArray) JSON.toJSON(map.get("delIntoDetail"));
-            if(delIntoDetail.size()>0){
+            if (delIntoDetail.size() > 0) {
                 JSONObject obj = (JSONObject) delIntoDetail.get(0);
                 inventoryDocCode = obj.get("inventoryDocCode").toString();
             }
@@ -339,7 +339,7 @@ public class InventoryService extends BaseService<Inventory> {
         //出库
         if (map.get("outDetail") != null) {
             outDetail = (JSONArray) JSON.toJSON(map.get("outDetail"));
-            if(outDetail.size() > 0){
+            if (outDetail.size() > 0) {
                 JSONObject obj = (JSONObject) outDetail.get(0);
                 inventoryDocCode = obj.get("inventoryDocCode").toString();
                 addOrEditFlag = obj.getBoolean("addOrEditFlag");
@@ -348,7 +348,7 @@ public class InventoryService extends BaseService<Inventory> {
         //出库删除
         if (map.get("delOutDetail") != null) {
             delOutDetail = (JSONArray) JSON.toJSON(map.get("delOutDetail"));
-            if(delOutDetail.size()>0){
+            if (delOutDetail.size() > 0) {
                 JSONObject obj = (JSONObject) delOutDetail.get(0);
                 inventoryDocCode = obj.get("inventoryDocCode").toString();
             }
@@ -361,7 +361,7 @@ public class InventoryService extends BaseService<Inventory> {
             //region 新建
             if (addOrEditFlag) {
                 //先出
-                if (outDetail.size() > 0 ) {
+                if (outDetail.size() > 0) {
                     outList = outDetail.toJavaList(InOutRecordVO.class);
                     //赋值并校验库存流水数据
                     outList = this.setInOutRecordMessageByOut(outList);
@@ -369,7 +369,7 @@ public class InventoryService extends BaseService<Inventory> {
                     outList = this.warehouseAdjustmentOut(outList);
                     //反写出库单金额等信息
                     this.updateOutbound(outList);
-                } else if (outDetail.size() == 0 && intoDetail.size() == 0 ) {
+                } else if (outDetail.size() == 0 && intoDetail.size() == 0) {
                     throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_DATA_MOVED_OUT.getMessage());
                 }
                 //后入
@@ -383,7 +383,7 @@ public class InventoryService extends BaseService<Inventory> {
                     intoList = this.warehouseAdjustmentInto(intoList);
                     //修改入库单单价、金额、成本等信息
                     this.updateIntobound(intoList);
-                } else if (outDetail.size() == 0 && intoDetail.size() == 0 ) {
+                } else if (outDetail.size() == 0 && intoDetail.size() == 0) {
                     throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.NO_DATA_MOVED_IN.getMessage());
                 }
             }
@@ -451,13 +451,13 @@ public class InventoryService extends BaseService<Inventory> {
                 //赋值并校验库存流水数据
                 intoList = this.setInOutRecordMessageByInto(intoList);
                 //入库新建
-                intoAddList = intoList.stream().filter(it->it.getAddOrEditFlag()).collect(Collectors.toList());
+                intoAddList = intoList.stream().filter(it -> it.getAddOrEditFlag()).collect(Collectors.toList());
                 //入库编辑
-                intoEditList = intoList.stream().filter(it->!it.getAddOrEditFlag()).collect(Collectors.toList());
+                intoEditList = intoList.stream().filter(it -> !it.getAddOrEditFlag()).collect(Collectors.toList());
                 //新建
                 if (intoAddList.size() > 0) {
                     //正常逻辑 新建库存
-                    intoAddList =  this.operatingInsertInventory(intoAddList);
+                    intoAddList = this.operatingInsertInventory(intoAddList);
                     //修改入库单单价、金额、成本等信息
                     this.updateIntobound(intoAddList);
                 }
@@ -475,15 +475,15 @@ public class InventoryService extends BaseService<Inventory> {
                 //赋值并校验库存流水数据
                 outList = this.setInOutRecordMessageByOut(outList);
                 //出库新建
-                outAddList = outList.stream().filter(it->it.getAddOrEditFlag() && !it.getCanNegativeFlag() ).collect(Collectors.toList());
+                outAddList = outList.stream().filter(it -> it.getAddOrEditFlag() && !it.getCanNegativeFlag()).collect(Collectors.toList());
                 //出库编辑
-                outEditList = outList.stream().filter(it->!it.getAddOrEditFlag() && !it.getCanNegativeFlag() ).collect(Collectors.toList());
+                outEditList = outList.stream().filter(it -> !it.getAddOrEditFlag() && !it.getCanNegativeFlag()).collect(Collectors.toList());
                 //负出库新建
-                outNegAddList = outList.stream().filter(it->it.getAddOrEditFlag() && it.getCanNegativeFlag() ).collect(Collectors.toList());
+                outNegAddList = outList.stream().filter(it -> it.getAddOrEditFlag() && it.getCanNegativeFlag()).collect(Collectors.toList());
                 //负出库编辑
-                outNegEditList = outList.stream().filter(it->!it.getAddOrEditFlag() && it.getCanNegativeFlag() ).collect(Collectors.toList());
+                outNegEditList = outList.stream().filter(it -> !it.getAddOrEditFlag() && it.getCanNegativeFlag()).collect(Collectors.toList());
                 //走负库存逻辑 -- 新建
-                if (outNegAddList.size()>0) {
+                if (outNegAddList.size() > 0) {
                     //新建入库单
                     outNegAddList = this.insertOrUpdateInbound(outNegAddList);
                     //操作负库存
@@ -497,7 +497,7 @@ public class InventoryService extends BaseService<Inventory> {
                     this.operatingNegativeInventory(outNegEditList);
                 }
                 //正常库存逻辑 -- 新建
-                if (outAddList.size()>0) {
+                if (outAddList.size() > 0) {
                     //正常逻辑 新建库存
                     this.operatingInsertInventory(outAddList);
                 }
@@ -526,8 +526,8 @@ public class InventoryService extends BaseService<Inventory> {
     public InventoryResponse checkInventoryNumber(InOutRecordVO inOutRecordVO) {
         //存在标识
         //根据sku,仓库,非标号查询
-        InventoryResponse inventoryResponse = null ;
-        if(inOutRecordVO.getSkuId() != null){
+        InventoryResponse inventoryResponse = null;
+        if (inOutRecordVO.getSkuId() != null) {
             inventoryResponse = inventoryMapper.selectByOther(new InventoryQuery()
                     .setSkuId(inOutRecordVO.getSkuId())
                     .setWhId(inOutRecordVO.getWhId())
@@ -544,7 +544,7 @@ public class InventoryService extends BaseService<Inventory> {
     @Transactional(
             rollbackFor = {Exception.class}
     )
-    public List<InOutRecordVO>  operatingInsertInventory(List<InOutRecordVO> inOutRecordVOList) {
+    public List<InOutRecordVO> operatingInsertInventory(List<InOutRecordVO> inOutRecordVOList) {
         for (InOutRecordVO inOutRecordVO : inOutRecordVOList) {
             //校验库存是否存在
             InventoryResponse inventoryResponse = this.checkInventoryNumber(inOutRecordVO);
@@ -627,7 +627,7 @@ public class InventoryService extends BaseService<Inventory> {
                     //endregion
 
                     //region 销售退货出库  (负向出库相当于入库)
-                    if(inOutRecordVO.getSkuId() != null) {
+                    if (inOutRecordVO.getSkuId() != null) {
                         if (Constant.InventoryDocCode.SALE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode())) {
                             //region  新建库存
                             inOutRecordVO = this.insertInventory(inOutRecordVO);
@@ -673,10 +673,6 @@ public class InventoryService extends BaseService<Inventory> {
 
                     inOutRecordVO.setInvId(inventoryResponse.getInvId());
 
-                    //修改库存数量
-                    this.updateInventoryMessageAdd(inventoryResponse, inOutRecordVO);
-
-
                     //region  修改/新建   库存数量,可用量,金额等信息
                     //销售退货出库  新建库存批次
                     if (Constant.InventoryDocCode.SALE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode())) {
@@ -688,6 +684,9 @@ public class InventoryService extends BaseService<Inventory> {
                     }
                     //endregion
 
+                    //修改库存数量
+                    this.updateInventoryMessageAdd(inventoryResponse, inOutRecordVO);
+
                     //region 库存流水
                     this.insertInboundRecord(inOutRecordVO);
                     //endregion
@@ -726,7 +725,7 @@ public class InventoryService extends BaseService<Inventory> {
             this.updateIntobound(inOutRecordVOList);
         }
         //出库
-        else{
+        else {
             //修改源出库信息
             this.updateOutboundPri(inOutRecordVOList);
         }
@@ -827,8 +826,8 @@ public class InventoryService extends BaseService<Inventory> {
         //存货资产
         inventory.setCostAmt(costAmt);
         //存货单价
-        inventory.setCostPrice(costAmt.compareTo(BigDecimal.ZERO) > 0 &&  inventory.getInvQty().compareTo(BigDecimal.ZERO) > 0 ?
-               costAmt.divide(inventory.getInvQty(),BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+        inventory.setCostPrice(costAmt.compareTo(BigDecimal.ZERO) > 0 && inventory.getInvQty().compareTo(BigDecimal.ZERO) > 0 ?
+                costAmt.divide(inventory.getInvQty(), 2,BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
         inventoryMapper.updateAmtAndQty(inventory);
         //endregion
     }
@@ -869,7 +868,7 @@ public class InventoryService extends BaseService<Inventory> {
         else {
             //region 销售退货出库和入库(不是采退入库)  数量正数
             if (Constant.InventoryDocCode.SALE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()) ||
-                    ( !Constant.InventoryDocCode.PURCHASE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()) &&
+                    (!Constant.InventoryDocCode.PURCHASE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()) &&
                             Constant.InventoryType.INBOUND.getName().equals(inOutRecordVO.getInventoryType()))
             ) {
                 //入库价
@@ -883,7 +882,7 @@ public class InventoryService extends BaseService<Inventory> {
 
             //region 采退入库 和出库(不是销退出库) 数量负数
             if (Constant.InventoryDocCode.PURCHASE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()) ||
-                    ( !Constant.InventoryDocCode.SALE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()) &&
+                    (!Constant.InventoryDocCode.SALE_RETURN.getValue().equals(inOutRecordVO.getInventoryDocCode()) &&
                             Constant.InventoryType.OUTBOUND.getName().equals(inOutRecordVO.getInventoryType()))
             ) {
                 //入库价
@@ -933,7 +932,7 @@ public class InventoryService extends BaseService<Inventory> {
                 //库存资产
                 inventory.setCostAmt(inOutRecordVO.getIntoAmt());
                 //库存单价   存货资产/存货数量
-                inventory.setCostPrice(inventory.getCostAmt().negate().divide(inventory.getInvQty().negate(),BigDecimal.ROUND_HALF_UP));
+                inventory.setCostPrice(inventory.getCostAmt().negate().divide(inventory.getInvQty().negate(), BigDecimal.ROUND_HALF_UP));
             } else {
                 //库存数量
                 inventory.setInvQty(inOutRecordVO.getIntoQty());
@@ -942,7 +941,7 @@ public class InventoryService extends BaseService<Inventory> {
                 //库存资产
                 inventory.setCostAmt(inOutRecordVO.getIntoAmt());
                 //库存单价   存货资产/存货数量
-                inventory.setCostPrice(inventory.getCostAmt().divide(inventory.getInvQty(),BigDecimal.ROUND_HALF_UP));
+                inventory.setCostPrice(inventory.getCostAmt().divide(inventory.getInvQty(), BigDecimal.ROUND_HALF_UP));
             }
         }
 
@@ -1126,7 +1125,7 @@ public class InventoryService extends BaseService<Inventory> {
                     OutboundItem outboundItem = new OutboundItem();
                     outboundItem.setItemId(inOutRecordVO.getBiznisItemId());
                     outboundItem.setCostAmt(inOutRecordVO.getIntoAmt());
-                    outboundItem.setCostPrice(inOutRecordVO.getIntoAmt().divide(inOutRecordVO.getIntoQty(),2,BigDecimal.ROUND_HALF_UP));
+                    outboundItem.setCostPrice(inOutRecordVO.getIntoAmt().divide(inOutRecordVO.getIntoQty(), 2, BigDecimal.ROUND_HALF_UP));
                     outboundItemMapper.update(outboundItem,
                             new UpdateWrapper<OutboundItem>().lambda()
                                     .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
@@ -1136,13 +1135,13 @@ public class InventoryService extends BaseService<Inventory> {
                 //endregion
             }
         } else {
-            if(inOutRecordVO.getSkuId()!=null){
+            if (inOutRecordVO.getSkuId() != null) {
                 List<GoodsSkuResponse> goodsSkuResponses = goodsSkuMapper.selectByCond(new GoodsSkuQuery().setSkuId(inOutRecordVO.getSkuId()));
-                if(goodsSkuResponses!=null && goodsSkuResponses.size()>0){
+                if (goodsSkuResponses != null && goodsSkuResponses.size() > 0) {
                     //提示具体型号不足
-                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(),goodsSkuResponses.get(0).getSkuModel()+ ErrorCodeEnum.CAN_OUTBOUND_QUANTITY_INSUFFICIENT.getMessage());
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), goodsSkuResponses.get(0).getSkuModel() + ErrorCodeEnum.CAN_OUTBOUND_QUANTITY_INSUFFICIENT.getMessage());
                 }
-            }else{
+            } else {
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CAN_OUTBOUND_QUANTITY_INSUFFICIENT.getMessage());
             }
         }
@@ -1207,19 +1206,22 @@ public class InventoryService extends BaseService<Inventory> {
             ) {
                 //根据outItemId查找出库成本数据
                 List<OutboundItemCostResponse> outboundItemCostResponses = outboundItemCostMapper.selectByCond(new OutboundItemCostQuery().setOutItemId(inOutRecordVO.getBiznisItemId()));
-                for (OutboundItemCostResponse outboundItemCostResponse : outboundItemCostResponses) {
-                    //查找库存批次
-                    InventoryBatchResponse inventoryBatchResponse = inventoryBatchMapper.selectById(outboundItemCostResponse.getBatchId());
-                    InventoryBatch inventoryBatch = new InventoryBatch();
-                    inventoryBatch.setBatchId(outboundItemCostResponse.getBatchId());
-                    inventoryBatch.setInvQty(inventoryBatchResponse.getInvQty().add(outboundItemCostResponse.getOutQty()));
-                    inventoryBatch.setCostAmt(inventoryBatchResponse.getInvQty().multiply(outboundItemCostResponse.getCostPrice()));
-                    inventoryBatchMapper.updateAmtAndQty(inventoryBatch);
+                if(outboundItemCostResponses != null && outboundItemCostResponses.size() > 0){
+                    for (OutboundItemCostResponse outboundItemCostResponse : outboundItemCostResponses) {
+                        //查找库存批次
+                        InventoryBatchResponse inventoryBatchResponse = inventoryBatchMapper.selectById(outboundItemCostResponse.getBatchId());
+                        InventoryBatch inventoryBatch = new InventoryBatch();
+                        inventoryBatch.setBatchId(outboundItemCostResponse.getBatchId());
+                        inventoryBatch.setInvQty(inventoryBatchResponse.getInvQty().add(outboundItemCostResponse.getOutQty()));
+                        inventoryBatch.setCostAmt(inventoryBatchResponse.getInvQty().multiply(outboundItemCostResponse.getCostPrice()));
+                        inventoryBatchMapper.updateAmtAndQty(inventoryBatch);
+                    }
+                    //出库单价
+                    inOutRecordVO.setPriceInto(outboundItemCostResponses.get(0).getCostPrice());
+                    //金额
+                    inOutRecordVO.setIntoAmt(outboundItemCostResponses.get(0).getCostPrice().multiply(inOutRecordVO.getIntoQty()).abs());
                 }
-                //出库单价
-                inOutRecordVO.setPriceInto(outboundItemCostResponses.get(0).getCostPrice());
-                //金额
-                inOutRecordVO.setIntoAmt(outboundItemCostResponses.get(0).getCostPrice().multiply(inOutRecordVO.getIntoQty()).abs());
+
             }
             //endregion
 
@@ -1274,7 +1276,7 @@ public class InventoryService extends BaseService<Inventory> {
         //endregion
 
         //region 库存数量重算   库存数量-删除数量
-        BigDecimal qty = inOutRecordVO.getQtyBeforeUpdate()!=null && inOutRecordVO.getQtyBeforeUpdate().compareTo(BigDecimal.ZERO)>0 ?inOutRecordVO.getQtyBeforeUpdate():inOutRecordVO.getIntoQty();
+        BigDecimal qty = inOutRecordVO.getQtyBeforeUpdate() != null && inOutRecordVO.getQtyBeforeUpdate().compareTo(BigDecimal.ZERO) > 0 ? inOutRecordVO.getQtyBeforeUpdate() : inOutRecordVO.getIntoQty();
         Inventory inventory = new Inventory();
         //库存id
         inventory.setInvId(inventoryResponse.getInvId());
@@ -1294,7 +1296,7 @@ public class InventoryService extends BaseService<Inventory> {
         inventory.setCostAmt(costAmt);
         //存货单价
         inventory.setCostPrice(costAmt.compareTo(BigDecimal.ZERO) > 0 ?
-                costAmt.divide(inventory.getInvQty(),BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
+                costAmt.divide(inventory.getInvQty(), BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
         inventoryMapper.updateAmtAndQty(inventory);
         //endregion
     }
@@ -1330,7 +1332,7 @@ public class InventoryService extends BaseService<Inventory> {
                 //修改
                 outboundItemMapper.update(outboundItem,
                         new UpdateWrapper<OutboundItem>().lambda()
-                                .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getSOutItemId()))
+                                .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
             }
             //修改总单
@@ -1771,7 +1773,7 @@ public class InventoryService extends BaseService<Inventory> {
     )
     public List<InOutRecordVO> selectOutbound(List<InOutRecordVO> inOutRecordVOList) {
         for (InOutRecordVO inOutRecordVO : inOutRecordVOList) {
-            OutboundItemResponse outboundItemResponse = outboundItemMapper.selectItemIndex(inOutRecordVO.getItemIndex(),inOutRecordVO.getOutId());
+            OutboundItemResponse outboundItemResponse = outboundItemMapper.selectItemIndex(inOutRecordVO.getItemIndex(), inOutRecordVO.getOutId());
             //单价
             inOutRecordVO.setPriceInto(outboundItemResponse.getPriceOut());
             //金额
@@ -2259,10 +2261,10 @@ public class InventoryService extends BaseService<Inventory> {
             int invQty = item.getInvQty().intValue();
             Long warningLowerLimit = item.getWarningLowerLimit();
             Long warningUpperLimit = item.getWarningUpperLimit();
-            if (warningUpperLimit != 0 && invQty > warningUpperLimit){
+            if (warningUpperLimit != 0 && invQty > warningUpperLimit) {
                 item.setWarningMsg("超出警戒上限" + "(" + warningUpperLimit + item.getUnitName() + ")");
             }
-            if (warningLowerLimit != 0 && invQty < warningLowerLimit){
+            if (warningLowerLimit != 0 && invQty < warningLowerLimit) {
                 item.setWarningMsg("低于警戒下限" + "(" + warningLowerLimit + item.getUnitName() + ")");
             }
         });

+ 2 - 2
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundOtherService.java

@@ -462,8 +462,8 @@ public class OutboundOtherService extends BaseService<Outbound> {
                 //region 将库存需要的参数赋值
                 outboundItemResponse.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
                 outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.OTHER_OUTBOUND.getValue());
-                outboundItemResponse.setOutQty(outboundItemResponse.getOutQty().negate());
-                outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt().negate());
+                outboundItemResponse.setOutQty(outboundItemResponse.getOutQty());
+                outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt());
                 //endregion
 
                 //赋值   防止作废的单据查不到明细 故注掉下面代码

+ 292 - 156
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java

@@ -201,7 +201,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 //赋值箱片
                 for (OutboundItemVO outboundItemVO : outboundIngList) {
                     //箱
-                    outboundItemVO.setOutingBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),0,RoundingMode.DOWN).toString()) );
+                    outboundItemVO.setOutingBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(), 0, RoundingMode.DOWN).toString()));
                     //片
                     outboundItemVO.setOutingPiece(outboundItemVO.getOutingQty().remainder(outboundItemVO.getPackBox()));
                 }
@@ -218,7 +218,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 for (OutboundItemVO outboundItemVO : itemList) {
                     if (outboundItemVO.getSkuId() != null) { //过滤外协品 外协品没有箱片
                         //箱
-                        outboundItemVO.setOutBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(),0,RoundingMode.DOWN).toString()) );
+                        outboundItemVO.setOutBox(Integer.valueOf(outboundItemVO.getOutingQty().divide(outboundItemVO.getPackBox(), 0, RoundingMode.DOWN).toString()));
                         //片
                         outboundItemVO.setOutPiece(outboundItemVO.getOutingQty().remainder(outboundItemVO.getPackBox()));
                     }
@@ -250,7 +250,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     accountService.reversePayable(inboundResponse.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
                 }
             }
-
             //删除外协入库单
             //外协入库总单
             inboundMapper.deleteByFromId(outboundItemVOList.get(0).getOutId());
@@ -383,6 +382,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
      */
     @Transactional(rollbackFor = {Exception.class})
     public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO, Boolean orderTransmitFlag) {
+
         //region 如果没有客户id,要新建
 //        outboundVO = outCommon.insertCustomer(outboundVO);
         //endregion
@@ -409,8 +409,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         BigDecimal sumIntoPriceAmt = BigDecimal.ZERO;
         if (orderTransmitFlag) {
             sumIntoQty = outboundVO.getItemList().stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-            sumIntoPriceAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getPriceOut).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-        }
+            sumIntoPriceAmt = outboundVO.getItemList().stream().map(OutboundItemVO::getFactAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+      }
         //获取 id/单号
         Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.SALEORDER.getName(), false);
         outboundVO.setOutId(codeMap.get("outId").toString()).
@@ -429,7 +429,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) {
             outboundVO
                     .setOutQty(orderTransmitFlag ? sumIntoQty : outboundVO.getOutingQty())
-                    .setOutAmt(orderTransmitFlag ? sumIntoQty.multiply(sumIntoPriceAmt) : outboundVO.getOutingAmt())
+                    .setOutAmt(orderTransmitFlag ? sumIntoPriceAmt : outboundVO.getOutingAmt())
                     .setOutingQty(BigDecimal.ZERO)
                     .setOutingAmt(BigDecimal.ZERO)
             ;
@@ -439,7 +439,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     .setOutAmt(BigDecimal.ZERO)
                     //用于销售订单自动创建出库单
                     .setOutingQty(orderTransmitFlag ? sumIntoQty : outboundVO.getOutingQty())
-                    .setOutingAmt(orderTransmitFlag ? sumIntoQty.multiply(sumIntoPriceAmt) : outboundVO.getOutingAmt())
+                    .setOutingAmt(orderTransmitFlag ? sumIntoPriceAmt : outboundVO.getOutingAmt())
             ;
         }
 
@@ -453,47 +453,22 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region 销售订单
-        if (outboundVO.getFromId() != null) {
-            //赋值  (这里重写了更新方法,数量在更新方法中有数据库原始数量+本次数量)
-            Order order = new Order();
-            order.setOrderId(outboundVO.getFromId());
-            //根据id查询
-            OrderResponse orderResponse = orderMapper.selectById(outboundVO.getFromId());
-            //已出库
-            if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) {
-                order.setOutingQty(BigDecimal.ZERO);
-                order.setOutingAmt(BigDecimal.ZERO);
-                order.setOutQty(outboundVO.getOutQty());
-                order.setOutAmt(outboundVO.getOutAmt());
-            }
-            //出库中
-            else {
-                order.setOutingQty(outboundVO.getOutingQty());
-                order.setOutingAmt(outboundVO.getOutingAmt());
-                order.setOutQty(BigDecimal.ZERO);
-                order.setOutAmt(BigDecimal.ZERO);
-            }
-            //入库状态
-            String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
-                    orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
-            order.setOutStatus(outStatus);
-            //修改
-            int countRow = orderMapper.updateById(order);
-            //数量超出
-            if (countRow == 0) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
-            }
-        }
+        //新建销售出库修改销售订单信息
+        this.insertOrderMessageByEdit(outboundVO,outboundVO.getItemList());
         //endregion
 
+        BigDecimal factAmt = BigDecimal.ZERO; //总单的实际金额
+
         //region 明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
             throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
+
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
             outboundItemVO.setItemId(null);
+
             //region 将库存需要的参数赋值
             outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
             outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.SALE_ORDER.getValue());
@@ -512,13 +487,13 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                         .setOutingQty(BigDecimal.ZERO)
                         .setOutingAmt(BigDecimal.ZERO)
                         .setCostPrice(outboundItemVO.getPriceOut())
-                        .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP))
-                ;
+                        .setCostAmt(outboundItemVO.getOutQty().multiply(outboundItemVO.getPriceOut()).setScale(2, BigDecimal.ROUND_HALF_UP)) ;
             } else {
                 outboundItemVO
                         .setOutQty(BigDecimal.ZERO)
                         .setOutAmt(BigDecimal.ZERO);
             }
+            factAmt = factAmt.add(outboundItemVO.getFactAmt()); //把明细的 实际金额相加就是总单的
             //出库状态
             outboundItemVO.setOutStatus(outboundVO.getOutStatus());
             //实体转换
@@ -549,6 +524,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     orderItem.setOutQty(BigDecimal.ZERO);
                     orderItem.setOutAmt(BigDecimal.ZERO);
                 }
+
                 //出库状态
                 String outStatus = this.setOutStatus(orderItemResponse.getOutingQty().add(orderItem.getOutingQty()),
                         orderItemResponse.getOutQty().add(orderItem.getOutQty()), orderItemResponse.getItemQty());
@@ -565,6 +541,13 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         }
         //endregion
 
+        Outbound outboundup = new Outbound();
+        outboundup.setOutId(outbound.getOutId()).setFactAmt(factAmt);
+        //反写总单实际金额
+        outboundMapper.update(outboundup,
+                new UpdateWrapper<Outbound>().lambda()
+                        .eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
+        );
         //region  已出库  应收记账
         if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) {
             accountService.accReceivable(outboundVO.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
@@ -602,6 +585,58 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
     }
 
     /**
+     * @desc   : 新建销售出库修改销售订单信息
+     * @date   : 2024/6/27 9:27
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public  void insertOrderMessageByEdit(OutboundVO outboundVO , List<OutboundItemVO> itemList){
+        //出库明细汇总
+        Map<String, List<OutboundItemVO>> orderOutItemVOListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
+        //出库明细汇总循环
+        for (String fromId : orderOutItemVOListMap.keySet()) {
+
+            //region  提取新建分组后的明细
+            List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
+            //分组后的明细 出库数量和金额总和
+            BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            //endregion
+
+            //region  反写订单数据
+            //根据id查询
+            OrderResponse orderResponse = orderMapper.selectById(fromId);
+            Order order = new Order();
+            order.setOrderId(fromId);
+            //已出库
+            if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) {
+                order.setOutingQty(BigDecimal.ZERO);
+                order.setOutingAmt(BigDecimal.ZERO);
+                order.setOutQty(orderSumQty);
+                order.setOutAmt(orderSumAmt);
+            }
+            //出库中
+            else {
+                order.setOutingQty(orderSumQty);
+                order.setOutingAmt(orderSumQty);
+                order.setOutQty(BigDecimal.ZERO);
+                order.setOutAmt(BigDecimal.ZERO);
+            }
+            //出库状态
+            String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                    orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+            order.setOutStatus(outStatus);
+            //修改
+            int countRow = orderMapper.updateById(order);
+            //数量超出
+            if (countRow == 0) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+            }
+            //endregion
+        }
+    }
+
+    /**
      * @desc : 销售出库编辑
      * @date : 2024/3/25 16:25
      * @author : 寇珊珊
@@ -793,6 +828,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 outbound.setOutId(outboundVO.getOutId());
                 outbound.setOutQty(sumQty);
                 outbound.setOutAmt(sumAmt);
+                outbound.setAnnexPaths(outboundVO.getAnnexPaths());
                 //修改
                 outboundMapper.update(outbound,
                         new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
@@ -841,7 +877,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             }
             //endregion
 
-            //region 库中编辑
+            //region 库中编辑
             if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundVO.getOutStatus()) ||
                     Constant.OutStatus.DAICHUKU.getName().equals(outboundVO.getOutStatus())) {
                 //region 修改明细
@@ -861,8 +897,9 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
                         OutboundItem outboundItem = new OutboundItem();
                         outboundItem.setItemId(outboundItemResponse.getItemId());
-                        outboundItem.setOutingQty(outboundItemResponse.getOutingQty());
-                        outboundItem.setOutingAmt(outboundItemResponse.getOutingAmt());
+                        outboundItem.setOutingQty(outboundItemVO.getOutingQty());
+                        outboundItem.setOutingAmt(outboundItemVO.getOutingAmt());
+                        outboundItem.setWhId(outboundItemVO.getWhId());
                         //修改
                         outboundItemMapper.update(outboundItem,
                                 new UpdateWrapper<OutboundItem>().lambda()
@@ -959,6 +996,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                 outbound.setOutId(outboundVO.getOutId());
                 outbound.setOutingQty(sumQty);
                 outbound.setOutingAmt(sumAmt);
+                outbound.setAnnexPaths(outboundVO.getAnnexPaths());
                 //修改
                 outboundMapper.update(outbound,
                         new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
@@ -990,82 +1028,142 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         Map<String, List<OutboundItemVO>> delOrderOutItemVOListMap = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
         //出库明细汇总循环
         for (String fromId : orderOutItemVOListMap.keySet()) {
-            //出库明细删除汇总循环
-            for (String delFromId : delOrderOutItemVOListMap.keySet()) {
-                //新建出库明细来源Id = 删除出库明细来源Id
-                if (fromId.equals(delFromId)) {
-                    //region  提取新建分组后的明细
-                    List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
-                    //分组后的明细 出库数量和金额总和
-                    BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                    BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    //分组后的明细 原出库数量和金额总和
-                    BigDecimal updateOrderOutQty = BigDecimal.ZERO;
-                    BigDecimal updateOrderOutAmt = BigDecimal.ZERO;
-                    BigDecimal updateOrderOutingQty = BigDecimal.ZERO;
-                    BigDecimal updateOrderOutingAmt = BigDecimal.ZERO;
-                    //已出库
-                    if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
-                        updateOrderOutQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                        updateOrderOutAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    }
-                    //出库中
-                    else {
-                        updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                        updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    }
-                    //endregion
+            //有需要删除的修改数据
+            if(delOrderOutItemVOListMap!=null  && delOrderOutItemVOListMap.keySet().size()>0){
+                //出库明细删除汇总循环
+                for (String delFromId : delOrderOutItemVOListMap.keySet()) {
+                    //新建出库明细来源Id = 删除出库明细来源Id
+                    if (fromId.equals(delFromId)) {
+
+                        //region  提取新建分组后的明细
+                        List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
+                        //分组后的明细 出库数量和金额总和
+                        BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        //分组后的明细 原出库数量和金额总和
+                        BigDecimal updateOrderOutQty = BigDecimal.ZERO;
+                        BigDecimal updateOrderOutAmt = BigDecimal.ZERO;
+                        BigDecimal updateOrderOutingQty = BigDecimal.ZERO;
+                        BigDecimal updateOrderOutingAmt = BigDecimal.ZERO;
+                        //已出库
+                        if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                            updateOrderOutQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                            updateOrderOutAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
+                        //出库中
+                        else {
+                            updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                            updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
+                        //endregion
 
-                    //region 提取删除分组后的明细
-                    List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
-                    BigDecimal orderDelOutQty = BigDecimal.ZERO;
-                    BigDecimal orderDelOutAmt = BigDecimal.ZERO;
-                    //已出库
-                    if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
-                        orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                        orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    }
-                    //出库中
-                    else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
-                        orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                        orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    }
-                    //endregion
+                        //region 提取删除分组后的明细
+                        List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
+                        BigDecimal orderDelOutQty = BigDecimal.ZERO;
+                        BigDecimal orderDelOutAmt = BigDecimal.ZERO;
+                        //已出库
+                        if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                            orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                            orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
+                        //出库中
+                        else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
+                            orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                            orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
+                        //endregion
 
-                    //region  反写订单数据
-                    //根据id查询
-                    OrderResponse orderResponse = orderMapper.selectById(fromId);
-                    Order order = new Order();
-                    order.setOrderId(fromId);
-                    //已出库
-                    if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
-                        order.setOutQty(updateOrderOutQty.negate().add(orderSumQty).subtract(orderDelOutQty));
-                        order.setOutAmt(updateOrderOutAmt.negate().add(orderSumAmt).subtract(orderDelOutAmt));
-                        order.setOutingQty(orderDelOutQty);
-                        order.setOutingAmt(orderDelOutAmt);
-                        //出库状态
-                        String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
-                                orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
-                        order.setOutStatus(outStatus);
-                    }
-                    //出库中
-                    else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
-                        order.setOutingQty(updateOrderOutingQty.negate().add(orderSumQty).subtract(orderDelOutQty));
-                        order.setOutingAmt(updateOrderOutingAmt.negate().add(orderSumQty).subtract(orderDelOutAmt));
-                        //出库状态
-                        String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
-                                orderResponse.getOutQty(), orderResponse.getSumQuantity());
-                        order.setOutStatus(outStatus);
-                    }
-                    //修改
-                    int countRow = orderMapper.updateById(order);
-                    //数量超出
-                    if (countRow == 0) {
-                        throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                        //region  反写订单数据
+                        //根据id查询
+                        OrderResponse orderResponse = orderMapper.selectById(fromId);
+                        Order order = new Order();
+                        order.setOrderId(fromId);
+                        //已出库
+                        if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                            order.setOutQty(updateOrderOutQty.negate().add(orderSumQty).subtract(orderDelOutQty));
+                            order.setOutAmt(updateOrderOutAmt.negate().add(orderSumAmt).subtract(orderDelOutAmt));
+                            order.setOutingQty(orderDelOutQty);
+                            order.setOutingAmt(orderDelOutAmt);
+                            //出库状态
+                            String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                                    orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                            order.setOutStatus(outStatus);
+                        }
+                        //出库中
+                        else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
+                            order.setOutingQty(updateOrderOutingQty.negate().add(orderSumQty).subtract(orderDelOutQty));
+                            order.setOutingAmt(updateOrderOutingAmt.negate().add(orderSumQty).subtract(orderDelOutAmt));
+                            //出库状态
+                            String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                                    orderResponse.getOutQty(), orderResponse.getSumQuantity());
+                            order.setOutStatus(outStatus);
+                        }
+                        //修改
+                        int countRow = orderMapper.updateById(order);
+                        //数量超出
+                        if (countRow == 0) {
+                            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                        }
+                        //endregion
                     }
-                    //endregion
                 }
             }
+            //没有需要删除的修改数据
+            else{
+
+                //region  提取新建分组后的明细
+                List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
+                //分组后的明细 出库数量和金额总和
+                BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                //分组后的明细 原出库数量和金额总和
+                BigDecimal updateOrderOutQty = BigDecimal.ZERO;
+                BigDecimal updateOrderOutAmt = BigDecimal.ZERO;
+                BigDecimal updateOrderOutingQty = BigDecimal.ZERO;
+                BigDecimal updateOrderOutingAmt = BigDecimal.ZERO;
+                //已出库
+                if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                    updateOrderOutQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    updateOrderOutAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                }
+                //出库中
+                else {
+                    updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                }
+                //endregion
+
+                //region  反写订单数据
+                //根据id查询
+                OrderResponse orderResponse = orderMapper.selectById(fromId);
+                Order order = new Order();
+                order.setOrderId(fromId);
+                //已出库
+                if (Constant.OutStatus.YICHUKU.getName().equals(outboundResponse.getOutStatus())) {
+                    order.setOutQty(updateOrderOutQty.negate().add(orderSumQty));
+                    order.setOutAmt(updateOrderOutAmt.negate().add(orderSumAmt));
+                    //出库状态
+                    String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                            orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                    order.setOutStatus(outStatus);
+                }
+                //出库中
+                else if (Constant.OutStatus.CHUKUZHONG.getName().equals(outboundResponse.getOutStatus())) {
+                    order.setOutingQty(updateOrderOutingQty.negate().add(orderSumQty));
+                    order.setOutingAmt(updateOrderOutingAmt.negate().add(orderSumQty));
+                    //出库状态
+                    String outStatus = this.setOutStatus(orderResponse.getOutingQty().add(order.getOutingQty()),
+                            orderResponse.getOutQty(), orderResponse.getSumQuantity());
+                    order.setOutStatus(outStatus);
+                }
+                //修改
+                int countRow = orderMapper.updateById(order);
+                //数量超出
+                if (countRow == 0) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                }
+                //endregion
+            }
         }
     }
 
@@ -1241,6 +1339,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         Map<String, List<OutboundItemResponse>> orderOutItemListMap = itemList.stream().collect(Collectors.groupingBy(OutboundItemResponse::getFromId));
         //出库明细汇总循环
         for (String fromId : orderOutItemListMap.keySet()) {
+
             //region  提取新建分组后的明细
             //分组后的明细 原出库数量和金额总和
             List<OutboundItemResponse> orderOutItemListGroup = orderOutItemListMap.get(fromId);
@@ -1542,51 +1641,88 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         Map<String, List<OutboundItemVO>> delOrderOutItemVOListMap = deleteItemList.stream().collect(Collectors.groupingBy(OutboundItemVO::getFromId));
         //出库明细汇总循环
         for (String fromId : orderOutItemVOListMap.keySet()) {
-            //出库明细删除汇总循环
-            for (String delFromId : delOrderOutItemVOListMap.keySet()) {
-                //新建出库明细来源Id = 删除出库明细来源Id
-                if (fromId.equals(delFromId)) {
-                    //region  提取新建分组后的明细
-                    List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
-                    //分组后的明细 出库数量和金额总和
-                    BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                    BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    //分组后的明细 原出库数量和金额总和
-                    BigDecimal updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                    BigDecimal updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    //endregion
+            //有需要删除的办理数据
+            if (delOrderOutItemVOListMap != null && delOrderOutItemVOListMap.keySet().size() > 0) {
+                //出库明细删除汇总循环
+                for (String delFromId : delOrderOutItemVOListMap.keySet()) {
+                    //新建出库明细来源Id = 删除出库明细来源Id
+                    if (fromId.equals(delFromId)) {
+                        //region  提取新建分组后的明细
+                        List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
+                        //分组后的明细 出库数量和金额总和
+                        BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        //分组后的明细 原出库数量和金额总和
+                        BigDecimal updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        //endregion
 
-                    //region 提取删除分组后的明细
-                    List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
-                    BigDecimal orderDelOutingQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                    BigDecimal orderDelOutingAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    BigDecimal orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
-                    BigDecimal orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    //endregion
+                        //region 提取删除分组后的明细
+                        List<OutboundItemVO> delOrderOutItemVOListGroup = delOrderOutItemVOListMap.get(delFromId);
+                        BigDecimal orderDelOutingQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal orderDelOutingAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal orderDelOutQty = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal orderDelOutAmt = delOrderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        //endregion
 
-                    //region 反写订单数据
-                    //根据id查询
-                    OrderResponse orderResponse = orderMapper.selectById(fromId);
-                    //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
-                    Order order = new Order();
-                    order.setOrderId(fromId);
-                    order.setOutQty(orderSumQty.subtract(orderDelOutQty));
-                    order.setOutAmt(orderSumAmt.subtract(orderDelOutAmt));
-                    order.setOutingQty((updateOrderOutingQty.add(orderDelOutingQty)).negate());
-                    order.setOutingAmt((updateOrderOutingAmt.add(orderDelOutingAmt)).negate());
-                    //出库状态
-                    String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().subtract(orderSumQty).add(orderDelOutQty),
-                            orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
-                    order.setOutStatus(orderOutStatus);
-                    //修改
-                    int countRow = orderMapper.updateById(order);
-                    //数量超出
-                    if (countRow == 0) {
-                        throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                        //region 反写订单数据
+                        //根据id查询
+                        OrderResponse orderResponse = orderMapper.selectById(fromId);
+                        //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
+                        Order order = new Order();
+                        order.setOrderId(fromId);
+                        order.setOutQty(orderSumQty.subtract(orderDelOutQty));
+                        order.setOutAmt(orderSumAmt.subtract(orderDelOutAmt));
+                        order.setOutingQty((updateOrderOutingQty.add(orderDelOutingQty)).negate());
+                        order.setOutingAmt((updateOrderOutingAmt.add(orderDelOutingAmt)).negate());
+                        //出库状态
+                        String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().subtract(orderSumQty).add(orderDelOutQty),
+                                orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                        order.setOutStatus(orderOutStatus);
+                        //修改
+                        int countRow = orderMapper.updateById(order);
+                        //数量超出
+                        if (countRow == 0) {
+                            throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                        }
+                        //endregion
                     }
-                    //endregion
                 }
             }
+            //没有需要删除的办理数据
+            else {
+                //region  提取新建分组后的明细
+                List<OutboundItemVO> orderOutItemVOListGroup = orderOutItemVOListMap.get(fromId);
+                //分组后的明细 出库数量和金额总和
+                BigDecimal orderSumQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                BigDecimal orderSumAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getOutAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                //分组后的明细 原出库数量和金额总和
+                BigDecimal updateOrderOutingQty = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+                BigDecimal updateOrderOutingAmt = orderOutItemVOListGroup.stream().map(OutboundItemVO::getUpdateOrderOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+                //endregion
+
+                //region 反写订单数据
+                //根据id查询
+                OrderResponse orderResponse = orderMapper.selectById(fromId);
+                //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
+                Order order = new Order();
+                order.setOrderId(fromId);
+                order.setOutQty(orderSumQty);
+                order.setOutAmt(orderSumAmt);
+                order.setOutingQty(updateOrderOutingQty.negate());
+                order.setOutingAmt(updateOrderOutingAmt.negate());
+                //出库状态
+                String orderOutStatus = this.setOutStatus(orderResponse.getOutingQty().subtract(orderSumQty),
+                        orderResponse.getOutQty().add(order.getOutQty()), orderResponse.getSumQuantity());
+                order.setOutStatus(orderOutStatus);
+                //修改
+                int countRow = orderMapper.updateById(order);
+                //数量超出
+                if (countRow == 0) {
+                    throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED_OUTBOUND.getMessage());
+                }
+                //endregion
+            }
         }
     }
 
@@ -1786,8 +1922,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
     public String setOutStatus(BigDecimal intoingQty, BigDecimal intoQty, BigDecimal sumQty) {
         //出库状态
         String outStatus = null;
-        //出库中+已出库 小于 总数   或者 出库中数量小于等于订单总数量
-        if (intoingQty.compareTo(sumQty) <= 0 && intoingQty.add(intoQty).compareTo(sumQty) <= 0   ) {
+        //出库中小于等于总数,已出库小于总数,并且出库中+已出库大于0
+        if(intoingQty.compareTo(sumQty)<=0 && intoQty.compareTo(sumQty) < 0  && intoingQty.add(intoQty).compareTo(BigDecimal.ZERO) > 0 ){
             //出库中
             outStatus = Constant.OutStatus.CHUKUZHONG.getName();
         }

+ 24 - 7
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleReturnService.java

@@ -291,6 +291,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             }
         }
     }
+
     /**
      * @desc : 销售退货出库新建>>>退款
      * @date : 2024/3/7 14:13
@@ -298,13 +299,23 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
      */
     @Transactional(rollbackFor = {Exception.class})
     public ResponseResultVO<?> saleReturnOutboundInsertRefund(OutboundVO outboundVO) {
+        //region 如果没有客户id,要新建
+        if (outboundVO.getCusId() == null) {
+            outboundVO = outCommon.insertCustomer(outboundVO);
+        }
+        //endregion
+
         //根据id查询
         AccountResponse accountResponse = accountMapper.selectById(outboundVO.getCusId());
-        //退款的时候 判断资金账户金额是否充足
-        BigDecimal result = accountResponse.getReceipt().add(outboundVO.getSumAmtRec());//getSumAmtRec 退款是负值 所以相加
-        if (result.compareTo(BigDecimal.ZERO) < 0) {
-            return ResponseResultUtil.error(ResponseCodeEnum.NOT_LESS_RECEIPT_ZERO);
+        //客户有资金账户的时候才往下校验
+        if (accountResponse != null) {
+            //退款的时候 判断资金账户金额是否充足
+            BigDecimal result = accountResponse.getReceipt().add(outboundVO.getSumAmtRec());//getSumAmtRec 退款是负值 所以相加
+            if (result.compareTo(BigDecimal.ZERO) < 0) {
+                return ResponseResultUtil.error(ResponseCodeEnum.NOT_LESS_RECEIPT_ZERO);
+            }
         }
+
         //新建退货出库
         saleReturnOutboundInsert(outboundVO);
       //新建退款
@@ -321,6 +332,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         receiptService.insertRefund(recPayVO);
         return ResponseResultUtil.success();
     }
+
     /**
      * @desc : 销售退货出库新建
      * @date : 2024/3/7 14:13
@@ -458,9 +470,13 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
 
         //region 修改库存
         if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) {
-            Map<String, Object> invMap = new HashMap<>();
-            invMap.put("outDetail", outboundVO.getItemList());
-            inventoryService.operatingInventoryInformation(invMap);
+            //筛选出skuId不为空的 走库存
+            List<OutboundItemVO> invList = outboundVO.getItemList().stream().filter(it -> it.getSkuId() != null).collect(Collectors.toList());
+            if (invList != null && invList.size() > 0) {
+                Map<String, Object> invMap = new HashMap<>();
+                invMap.put("outDetail", invList);
+                inventoryService.operatingInventoryInformation(invMap);
+            }
         }
         //endregion
 
@@ -1074,6 +1090,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             outboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.SALE_RETURN.getValue());
             outboundItemResponse.setOutQty(outboundItemResponse.getOutQty().negate());
             outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt().negate());
+            outboundItemResponse.setAddOrEditFlag(false);
             //endregion
 
             //region修改出库明细信息

+ 30 - 5
src/main/java/com/dk/mdm/service/mac/ReceiptService.java

@@ -133,6 +133,17 @@ public class ReceiptService extends BaseService<RecPay> {
     }
 
     /**
+     * @desc : 条件查询-客户详情的收款列表
+     * @author : 姜永辉
+     * @date : 2023/1/9 10:40
+     */
+    @Pagination
+    public ResponseResultVO<PageList<RecPayResponse>> selectByCondCus(RecPayQuery recPayQuery) {
+        return super.mergeListWithCount(recPayQuery, recPayMapper.selectByCondCus(recPayQuery),
+                recPayMapper.countByCondCus(recPayQuery));
+    }
+
+    /**
      * @desc : 查询收款明细
      * @author : 付斌
      * @date : 2024-02-28 13:25
@@ -231,9 +242,15 @@ public class ReceiptService extends BaseService<RecPay> {
                 // 插入账款明细
                 AccountItem accountItem = new AccountItem();
                 accountItem.setAccItemType(Constant.accItemType.SHOU_KUAN.getName())
-                        .setObjectId(recPayVO.getObjectId()).setOrgId(recPayVO.getOrgId()).setStaffId(recPayVO.getStaffId())
-                        .setAccDate(recPayVO.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName()).setAmtRec(recPayItem.getAmtRec())
-                        .setBiznisType("t_mac_rec_pay_item").setBiznisId(recPayItem.getItemId()).setBiznisNo(recPayVO.getRpNo())
+                        .setObjectId(recPayVO.getObjectId())
+                        .setOrgId(recPayVO.getOrgId())
+                        .setStaffId(recPayVO.getStaffId())
+                        .setAccDate(recPayVO.getAccDate())
+                        .setRecStatus(Constant.recStatuse.QUE_DING.getName())
+                        .setAmtRec(recPayItem.getAmtRec())
+                        .setBiznisType("t_mac_rec_pay_item")
+                        .setBiznisId(recPayItem.getRpId())
+                        .setBiznisNo(recPayVO.getRpNo())
                         .setMakeStaff(recPayVO.getMakeStaff()).setCpId(recPayVO.getCpId());
                 accountItemMapper.insert(accountItem);
 
@@ -378,7 +395,11 @@ public class ReceiptService extends BaseService<RecPay> {
         List<String> macList = new ArrayList<>();
         for (RecPayItem recPayItem : recPayItemOriginalList) {
             // 删除收付款明细
-            recPayItemMapper.deleteById(recPayItem.getItemId());
+//            recPayItemMapper.deleteById(recPayItem.getItemId());
+            //            改为更新false
+            RecPayItem recPayItemNew = new RecPayItem();
+            recPayItemNew.setItemId(recPayItem.getItemId()).setFlgValid(false);
+            recPayItemService.updateByUuid(recPayItemNew);
             // 删除账款明细
             accountItemMapper.deleteById(recPayItem.getAccItemId());
             // 删除账户流水
@@ -662,7 +683,11 @@ public class ReceiptService extends BaseService<RecPay> {
         List<String> macList = new ArrayList<>();
         for (RecPayItem recPayItem : recPayItemOriginalList) {
             // 删除收付款明细
-            recPayItemMapper.deleteById(recPayItem.getItemId());
+//            recPayItemMapper.deleteById(recPayItem.getItemId());
+//            改为更新false
+            RecPayItem recPayItemNew = new RecPayItem();
+            recPayItemNew.setItemId(recPayItem.getItemId()).setFlgValid(false);
+            recPayItemService.updateByUuid(recPayItemNew);
             // 删除账款明细
             accountItemMapper.deleteById(recPayItem.getAccItemId());
             // 删除账户流水

+ 47 - 19
src/main/java/com/dk/mdm/service/report/ReportService.java

@@ -33,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.rmi.MarshalledObject;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -728,40 +729,67 @@ public class ReportService {
      * @date : 2024/6/6 14:27
      */
     public ResponseResultVO<List<Map<String, Object>>> getCusRecPayReportItem(Map<String, Object> params) {
-        List<Map<String, Object>> items = reportMapper.getCusRecPayReportItemByUser(params);
         params.put("start", (Integer.parseInt(params.get("currentPage").toString()) - 1) * Integer.parseInt(params.get("pageSize").toString()));
         params.put("end", Integer.parseInt(params.get("pageSize").toString()));
         List<Map<String, Object>> arrears = reportMapper.getUserArrears(params);
-        // 判断类型
-        for (Map<String, Object> item : items) {
-            if (Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt"))) > 0) {
-                item.put("type", "销售出库");
-            } else if (Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt"))) < 0) {
-                item.put("type", "销售退货");
-            } else if (Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))) > 0) {
-                item.put("type", "客户收款");
-            } else if (Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))) < 0) {
-                item.put("type", "客户退款");
-            }
-        }
         for (Map<String, Object> map : arrears) {
+            params.put("objectId", map.get("objectId"));
+            List<Map<String, Object>> items = reportMapper.getCusRecPayReportItemByUser(params);
+            List<Map<String, Object>> psiOrderByUser = reportMapper.getPsiOrderByUser(params);
+            items.addAll(psiOrderByUser);
+            // 判断类型
+            for (Map<String, Object> item : items) {
+                if (Double.valueOf(String.valueOf(item.get("facAmt")).equals("null") ? "0" : String.valueOf(item.get("facAmt"))) > 0) {
+                    item.put("type", "销售订单");
+                } else if (Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt"))) < 0) {
+                    item.put("type", "销售退货");
+                } else if (Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))) > 0) {
+                    item.put("type", "客户收款");
+                } else if (Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))) < 0) {
+                    item.put("type", "客户退款");
+                }
+            }
             // 筛选出符合条件的明细
             List<Map<String, Object>> userArrearsItem = items.stream()
                     .filter(item -> item.get("objectId").equals(map.get("objectId")))
-                    .filter(item -> (Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt"))) != 0
-                            || Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))) != 0))
+                    .filter(item -> ((Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt"))) != 0
+                            && Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt"))) < 0)
+                            || Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))) != 0
+                            || Double.valueOf(String.valueOf(item.get("facAmt")).equals("null") ? "0" : String.valueOf(item.get("facAmt"))) != 0))
                     .collect(Collectors.toList());
             AtomicReference<Double> total = new AtomicReference<>(0.00);
             // 计算单用户的总计
             userArrearsItem.forEach(item -> {
-                total.updateAndGet(v -> v + Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt")))
-                        + Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))));
+                total.updateAndGet(v -> v + Double.valueOf(String.valueOf(item.get("facAmt")).equals("null") ? "0" : String.valueOf(item.get("facAmt")))
+                        + Double.valueOf(String.valueOf(item.get("outAmt")).equals("null") ? "0" : String.valueOf(item.get("outAmt")))
+                        - Double.valueOf(String.valueOf(item.get("sumAmtRec")).equals("null") ? "0" : String.valueOf(item.get("sumAmtRec"))));
             });
             map.put("item", userArrearsItem);
             map.put("totalMoney", total);
         }
-
-        return ResponseResultUtil.success(arrears);
+        if (Integer.parseInt(params.get("currentPage").toString()) == 1) {
+            // 查询公司概况
+            // 获取销售额
+            Map<String, Object> sales = reportMapper.getSales(params);
+            // 获取收支额
+            Map<String, Object> incomeExpenditure = reportMapper.getIncomeExpenditure(params);
+            // 获取欠款额
+            Map<String, Object> debt = reportMapper.getDebt(params);
+            if (debt != null) {
+                debt.put("outAmt", Double.valueOf(String.valueOf(sales.get("facAmt")).equals("null") ? "0" : String.valueOf(sales.get("facAmt")))
+                        + Double.valueOf(String.valueOf(debt.get("outAmt")).equals("null") ? "0" : String.valueOf(debt.get("outAmt")))
+                        - Double.valueOf(String.valueOf(incomeExpenditure.get("arrears")).equals("null") ? "0" : String.valueOf(incomeExpenditure.get("arrears"))));
+            }
+            // todo
+            List<Map<String, Object>> overviewList = new ArrayList<>();
+            overviewList.add(sales);
+            overviewList.add(incomeExpenditure);
+            overviewList.add(debt);
+            overviewList.addAll(arrears);
+            return ResponseResultUtil.success(overviewList);
+        }else {
+            return ResponseResultUtil.success(arrears);
+        }
     }
 
     private static final Map<String, Class<?>> CLASS_MAP = ImmutableMap.<String, Class<?>>builder()

+ 22 - 0
src/main/java/com/dk/mdm/service/sale/OrderItemService.java

@@ -10,8 +10,10 @@ import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.pur.PurchaseItemQuery;
 import com.dk.mdm.model.query.sale.OrderItemQuery;
+import com.dk.mdm.model.query.sale.OrderQuery;
 import com.dk.mdm.model.response.pur.PurchaseItemResponse;
 import com.dk.mdm.model.response.sale.OrderItemResponse;
+import com.dk.mdm.model.response.sale.OrderResponse;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -58,4 +60,24 @@ public class OrderItemService extends BaseService<OrderItem> {
 		return ResponseResultUtil.success(new PageList<>(items, count));
 	}
 
+	/**
+	 * @desc   : 销售出库页面选择源单条件查询分页
+	 * @date   : 2024/6/27 14:13
+	 * @author : 寇珊珊
+	 */
+	@Pagination
+	public ResponseResultVO<PageList<OrderItemResponse>> selectBySaleOutByPage(OrderItemQuery orderItemQuery) {
+		return super.mergeListWithCount(orderItemQuery, orderItemMapper.selectBySaleOut(orderItemQuery),
+				orderItemMapper.selectBySaleOutByCound(orderItemQuery));
+	}
+
+	/**
+	 * @desc   : 销售出库页面选择源单条件查询
+	 * @date   : 2024/6/27 14:13
+	 * @author : 寇珊珊
+	 */
+	public ResponseResultVO<List<OrderItemResponse>> selectBySaleOut(OrderItemQuery orderItemQuery) {
+		return ResponseResultUtil.success(orderItemMapper.selectBySaleOut(orderItemQuery));
+	}
+
 }

+ 9 - 3
src/main/java/com/dk/mdm/service/sale/OrderService.java

@@ -634,6 +634,7 @@ public class OrderService extends BaseService<Order> {
 
                     recPay.setSumAmtRec(itemSum.getAmtRec());
                     recPayMapper.insert(recPay);
+                    recPayForUpdate = recPay;
                 } else {
                     // 更新收款总额
                     RecPay recPayUpdate = new RecPay();
@@ -702,6 +703,7 @@ public class OrderService extends BaseService<Order> {
 
                     recPay.setSumAmtRec(itemSum.getAmtRec());
                     recPayMapper.insert(recPay);
+                    recPayForUpdate = recPay;
                 } else {
                     // 更新收款总额
                     RecPay recPayUpdate = new RecPay();
@@ -791,8 +793,12 @@ public class OrderService extends BaseService<Order> {
             // 将之前的明细全部删除
             List<RecPayItem> recPayItemOriginalList = recPayItemMapper.selectByZIdForUpdate(recPayForUpdate.getRpId());
             for (RecPayItem recPayItem : recPayItemOriginalList) {
-                // 删除收付款明细
-                recPayItemMapper.deleteById(recPayItem.getItemId());
+                // 删除收付款明细 240627
+//                recPayItemMapper.deleteById(recPayItem.getItemId());
+                //            改为更新false
+                RecPayItem recPayItemNew = new RecPayItem();
+                recPayItemNew.setItemId(recPayItem.getItemId()).setFlgValid(false);
+                recPayItemService.updateByUuid(recPayItemNew);
                 // 删除账款明细
                 accountItemMapper.deleteById(recPayItem.getAccItemId());
                 // 删除账户流水
@@ -813,7 +819,7 @@ public class OrderService extends BaseService<Order> {
 
             // 作废
             RecPay recPayUpdate = new RecPay();
-            recPayUpdate.setFlgValid(false).setRpId(id);
+            recPayUpdate.setFlgValid(false).setRpId(recPayForUpdate.getRpId());
             receiptService.updateByUuid(recPayUpdate);
         }
         return ResponseResultUtil.success();