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

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

changhaoning 2 лет назад
Родитель
Сommit
9bb3f0a871
26 измененных файлов с 669 добавлено и 311 удалено
  1. 10 0
      src/main/java/com/dk/mdm/controller/ivt/inbound/InboundPurchaseController.java
  2. 8 0
      src/main/java/com/dk/mdm/infrastructure/convert/ivt/OutboundConvert.java
  3. 8 0
      src/main/java/com/dk/mdm/infrastructure/convert/ivt/OutboundItemConvert.java
  4. 1 1
      src/main/java/com/dk/mdm/mapper/ivt/InboundMapper.xml
  5. 8 0
      src/main/java/com/dk/mdm/mapper/ivt/OutboundItemMapper.java
  6. 55 31
      src/main/java/com/dk/mdm/mapper/ivt/OutboundItemMapper.xml
  7. 9 0
      src/main/java/com/dk/mdm/mapper/ivt/OutboundMapper.java
  8. 28 13
      src/main/java/com/dk/mdm/mapper/ivt/OutboundMapper.xml
  9. 9 0
      src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.java
  10. 15 0
      src/main/java/com/dk/mdm/mapper/sale/OrderItemMapper.xml
  11. 8 0
      src/main/java/com/dk/mdm/mapper/sale/OrderMapper.java
  12. 15 0
      src/main/java/com/dk/mdm/mapper/sale/OrderMapper.xml
  13. 2 2
      src/main/java/com/dk/mdm/model/response/ivt/OutboundResponse.java
  14. 2 0
      src/main/java/com/dk/mdm/model/vo/ivt/OutboundVO.java
  15. 17 4
      src/main/java/com/dk/mdm/service/ivt/InboundReturnService.java
  16. 5 32
      src/main/java/com/dk/mdm/service/ivt/inbound/InboundCheckService.java
  17. 4 4
      src/main/java/com/dk/mdm/service/ivt/inbound/InboundOtherService.java
  18. 34 10
      src/main/java/com/dk/mdm/service/ivt/inbound/InboundPurchaseReturnService.java
  19. 26 4
      src/main/java/com/dk/mdm/service/ivt/inbound/InboundPurchaseService.java
  20. 108 0
      src/main/java/com/dk/mdm/service/ivt/outbound/OutCommon.java
  21. 2 30
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundCheckService.java
  22. 11 35
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundOtherService.java
  23. 41 118
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java
  24. 228 12
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleReturnService.java
  25. 4 4
      src/main/java/com/dk/mdm/service/mac/AccountService.java
  26. 11 11
      src/main/java/com/dk/mdm/service/mac/RecPayService.java

+ 10 - 0
src/main/java/com/dk/mdm/controller/ivt/inbound/InboundPurchaseController.java

@@ -49,6 +49,16 @@ public class InboundPurchaseController {
         return inheritedPurchaseService.selectByCond(inboundQuery);
     }
 
+    /**
+     * @desc : 查看来源单据,总单加明细  采购入库用
+     * @author : 王英杰
+     * @date : 2024/3/6 10:36
+     */
+    @PostMapping({"/{id}"})
+    public ResponseResultVO selectById(@PathVariable String id) {
+        return inboundService.selectById(id);
+    }
+
 
     /**
      * @desc   : 明细信息条件查询

+ 8 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/OutboundConvert.java

@@ -1,6 +1,7 @@
 package com.dk.mdm.infrastructure.convert.ivt;
 
 import com.dk.mdm.model.pojo.ivt.Outbound;
+import com.dk.mdm.model.response.ivt.OutboundResponse;
 import com.dk.mdm.model.vo.ivt.OutboundVO;
 import org.mapstruct.Mapper;
 
@@ -18,4 +19,11 @@ public interface OutboundConvert {
      * @date   : 2024-02-28 15:26
      */
     Outbound convertToPo(OutboundVO outboundVO);
+
+    /**
+     * @desc   : 转换Res为VO
+     * @date   : 2024/3/29 11:11
+     * @author : 寇珊珊
+     */
+    OutboundVO convertResToVO(OutboundResponse outboundResponse);
 }

+ 8 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/OutboundItemConvert.java

@@ -1,6 +1,7 @@
 package com.dk.mdm.infrastructure.convert.ivt;
 
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
+import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import org.mapstruct.Mapper;
 
@@ -18,4 +19,11 @@ public interface OutboundItemConvert {
      * @date   : 2024-02-28 15:25
      */
     OutboundItem convertToPo(OutboundItemVO outboundVO);
+
+    /**
+     * @desc   : 转换Res为VO
+     * @date   : 2024/3/29 11:10
+     * @author : 寇珊珊
+     */
+    OutboundItemVO convertResToVO(OutboundItemResponse outboundItemResponse);
 }

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

@@ -958,6 +958,6 @@
         Left join dkic_b.t_mst_warehouse tmw on tmw.wh_id = tpi.wh_id
         left join dkic_b.t_mst_dictionary_data tmd on tmd.data_id = tpi.into_reason
         left join t_mac_account_item tmai on tmai.item_id = tpi.receivable_id
-        WHERE tpi.into_id = #{intoId}::uuid
+        WHERE tpi.into_id = #{intoId}::uuid AND tpi.flg_valid = true
     </select>
 </mapper>

+ 8 - 0
src/main/java/com/dk/mdm/mapper/ivt/OutboundItemMapper.java

@@ -4,6 +4,7 @@ import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.ivt.OutboundItemQuery;
 import com.dk.mdm.model.response.ivt.OutboundItemResponse;
+import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -62,6 +63,13 @@ public interface OutboundItemMapper extends BaseMapper<OutboundItem>{
      * @author : 寇珊珊
      */
     OutboundItemResponse selectById(@Param("itemId") String itemId);
+    
+    /**
+     * @desc   : 修改退货信息
+     * @date   : 2024/3/29 9:05
+     * @author : 寇珊珊
+     */
+    int  updateReturnMessage(OutboundItem outboundItem);
 
 
 }

+ 55 - 31
src/main/java/com/dk/mdm/mapper/ivt/OutboundItemMapper.xml

@@ -310,37 +310,37 @@
 
     <!-- 根据条件进行查询(出库编辑用) -->
     <select id="selectByCondForOutEdit" resultMap="BaseResultMapResponse">
-        SELECT tpoi.item_id,
-               tpoi.out_id,
-               tpoi.from_item_id,
-               tpoi.from_id,
-               tpoi.item_index,
-               tpoi.sku_id,
+        SELECT t.item_id,
+               t.out_id,
+               t.from_item_id,
+               t.from_id,
+               t.item_index,
+               t.sku_id,
                tmgs.sku_code                                  as "skuCode",
                tmgs.sku_model                                 as "skuModel",
                tmgs.sku_name                                  as "skuName",
-               tpoi1.item_qty                                  as "orderQty",
-               tpoi1.item_qty - tpoi1.outing_qty + tpoi.outing_qty as "canOutingQty",
-               tpoi.outing_qty,
-               tpoi.price_out,
-               tpoi.outing_amt,
-               tpoi.out_qty,
-               tpoi.out_amt,
-               tpoi.non_std_code,
-               tpoi.remarks,
-               tpoi.inv_id,
+               tpoi.item_qty                                  as "orderQty",
+               tpoi.item_qty - tpoi.outing_qty - tpoi.out_qty + t.outing_qty + t.out_qty as "canOutingQty",
+               t.price_out,
+               t.outing_qty + t.out_qty                       as outing_qty,
+               t.outing_amt + t.out_amt                       as outing_amt,
+               t.out_qty,
+               t.out_amt,
+               t.non_std_code,
+               t.remarks,
+               t.inv_id,
                tpi.wh_id                                      as "whId",
                tpi.inv_qty                                    as "invQty",
                tpi.usable_qty                                 as "usableQty",
                tmw.wh_name                                    as "whName"
-        FROM dkic_b.t_psi_outbound_item as tpoi
-                 left join dkic_b.t_psi_order_item as tpoi1 on tpoi1.item_id = tpoi.from_item_id
-                 left join dkic_b.t_mst_goods_sku tmgs on tpoi1.sku_id = tmgs.sku_id
-                 left join dkic_b.t_psi_inventory as tpi on tpi.inv_id = tpoi.inv_id
+        FROM dkic_b.t_psi_outbound_item as t
+                 left join dkic_b.t_psi_order_item as tpoi on tpoi.item_id = t.from_item_id
+                 left join dkic_b.t_mst_goods_sku tmgs on tpoi.sku_id = tmgs.sku_id
+                 left join dkic_b.t_psi_inventory as tpi on tpi.inv_id = t.inv_id
                  left join dkic_b.t_mst_warehouse as tmw on tmw.wh_id = tpi.wh_id
-        where tpoi.flg_valid
-          and tpoi.out_id = #{id}::uuid
-        order by tpoi.item_index
+        where t.flg_valid
+          and t.out_id = #{id}::uuid
+        order by t.item_index
     </select>
 
     <!-- 获取出库信息(新建退货用) -->
@@ -378,21 +378,45 @@
                t.s_order_item_id,
                t.item_index,
                t.sku_id,
-               tmgs.sku_code                                   as "skuCode",
-               tmgs.sku_model                                  as "skuModel",
-               tmgs.sku_name                                   as "skuName",
-               tpobi.out_qty                                   as "outboundOutQty",
-               tpobi.out_qty - tpobi.return_qty - t.outing_qty as "canReturnQty",
-               t.outing_qty,
+               tmgs.sku_code                  as "skuCode",
+               tmgs.sku_model                 as "skuModel",
+               tmgs.sku_name                  as "skuName",
+               COALESCE(tpobi.out_qty, 0)     as "outboundOutQty",
+               COALESCE(tpobi.out_qty, 0) - COALESCE(tpobi.return_qty, 0) + t.outing_qty + t.out_qty as "canReturnQty",
+               t.inv_id,
+               tpi.wh_id,
+               tpi.inv_qty                    as "invQty",
+               tpi.usable_qty                 as "usableQty",
+               tmw.wh_name                    as "whName",
                t.price_out,
-               t.outing_amt,
+               t.outing_qty + t.out_qty       as outing_qty,
+               t.outing_amt + t.out_amt       as outing_amt,
                t.non_std_code,
                t.remarks
         FROM dkic_b.t_psi_outbound_item as t
-                 left join dkic_b.t_psi_outbound_item as tpobi on tpobi.item_id = t.s_out_item_id
                  left join dkic_b.t_mst_goods_sku tmgs on tmgs.sku_id = t.sku_id
+                 left join dkic_b.t_psi_inventory tpi on tpi.inv_id = t.inv_id
+                 left join dkic_b.t_mst_warehouse tmw on tmw.wh_id = tpi.wh_id
+                 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
         order by t.item_index
     </select>
+
+
+    <!--修改退货信息 -->
+    <update id="updateReturnMessage" parameterType="com.dk.mdm.model.pojo.ivt.OutboundItem">
+        update dkic_b.t_psi_outbound_item
+        <set>
+            <if test=" returnQty != null">
+                return_qty = return_qty + #{et.returnQty,jdbcType=NUMERIC},
+            </if>
+            <if test=" returnAmt != null">
+                return_amt = return_amt + #{et.returnAmt,jdbcType=NUMERIC},
+            </if>
+        </set>
+        where item_id = #{itemId,typeHandler=UuidTypeHandler}
+        and  item_qty >= return_qty
+    </update>
+
 </mapper>

+ 9 - 0
src/main/java/com/dk/mdm/mapper/ivt/OutboundMapper.java

@@ -2,6 +2,7 @@ package com.dk.mdm.mapper.ivt;
 
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.mdm.model.query.ivt.InboundQuery;
 import com.dk.mdm.model.query.ivt.OutboundQuery;
 import com.dk.mdm.model.response.ivt.InboundResponse;
@@ -49,5 +50,13 @@ public interface OutboundMapper extends BaseMapper<Outbound>{
      * @author : 寇珊珊
      */
     OutboundResponse selectMessageByOtherQuery(OutboundQuery outboundQuery);
+
+
+    /**
+     * @desc   : 修改退货信息
+     * @date   : 2024/3/29 9:05
+     * @author : 寇珊珊
+     */
+    int  updateReturnMessage(Outbound outbound);
 }
 

+ 28 - 13
src/main/java/com/dk/mdm/mapper/ivt/OutboundMapper.xml

@@ -235,7 +235,7 @@
                t.out_type,
                t.from_id,
                t.from_no,
-               t.from_no                                         as "orderNo",
+               t.from_no                                         as "biznisNo",
                t.org_id,
                tmo.org_name                                      as "orgName",
                t.staff_id,
@@ -325,14 +325,14 @@
                tmc.contact_phone                                 as "contactPhone",
                tmc.address_full                                  as "addressFull",
                tmdd.data_value                                   as cus_from_name,
-               tpo1.address_area,
-               tpo1.address_name,
-               tpo1.address_no,
-               tpo1.address_gcj02,
-               tpo1.address_full,
-               tpo1.contact_name,
-               tpo1.contact_phone,
-               tpo1.sales_channel,
+               tmc.address_area,
+               tmc.address_name,
+               tmc.address_no,
+               tmc.address_gcj02,
+               tmc.address_full,
+               tmc.contact_name,
+               tmc.contact_phone,
+               tmc.channel_id                                    as sales_channel,
                tmsc.channel_name                                 as channel_name,
                t.sup_id,
                t.out_status,
@@ -353,14 +353,13 @@
                t.payable_id,
                t.cp_id,
                t.flg_valid,
-               tmd.data_value                                   as out_reason_name
+               tmd.data_value                                    as out_reason_name
         FROM dkic_b.t_psi_outbound as t
-                 left join dkic_b.t_psi_order as tpo1 on tpo1.order_id = t.from_id
-                 left join dkic_b.t_mst_sale_channel tmsc on tmsc.channel_id = tpo1.sales_channel
+                 left join dkic_b.t_mst_customer tmc on tmc.cus_id = t.cus_id
+                 left join dkic_b.t_mst_sale_channel tmsc on tmsc.channel_id = tmc.channel_id
                  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_mst_customer tmc on tmc.cus_id = t.cus_id
                  left join dkic_b.t_mst_dictionary_data tmdd on tmdd.data_id = tmc.cus_from
                  left join sys.t_data_kind as tdk1 on tdk1.kind_code = t.out_status
                  left join dkic_b.t_mst_dictionary_data tmd on tmd.data_id = t.out_reason
@@ -548,4 +547,20 @@
             </if>
         </where>
     </select>
+
+
+    <!--修改退货信息 -->
+    <update id="updateReturnMessage" parameterType="com.dk.mdm.model.pojo.sale.OrderItem">
+        update dkic_b.t_psi_outbound
+        <set>
+            <if test=" returnQty != null">
+                return_qty = return_qty + #{et.returnQty,jdbcType=NUMERIC},
+            </if>
+            <if test=" returnAmt != null">
+                return_amt = return_amt + #{et.returnAmt,jdbcType=NUMERIC},
+            </if>
+        </set>
+        where out_id = #{outId,typeHandler=UuidTypeHandler}
+        and  out_qty >= return_qty
+    </update>
 </mapper>

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

@@ -1,5 +1,6 @@
 package com.dk.mdm.mapper.sale;
 
+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;
@@ -66,6 +67,14 @@ public interface OrderItemMapper extends BaseMapper<OrderItem> {
     OrderItemResponse selectById(@Param("itemId") String itemId);
 
     /**
+     * @desc   : 修改退货信息
+     * @date   : 2024/3/29 9:05
+     * @author : 寇珊珊
+     */
+    int  updateReturnMessage(OrderItem orderItem);
+
+
+    /**
      * @desc   : 以销定采查询订单明细---web用
      * @author : 常皓宁
      * @date   : 2024/3/29 16:26

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

@@ -412,6 +412,21 @@
         and item_qty >=(out_qty + outing_qty)
     </update>
 
+    <!--修改退货信息 -->
+    <update id="updateReturnMessage" parameterType="com.dk.mdm.model.pojo.sale.OrderItem">
+        update dkic_b.t_psi_order_item
+        <set>
+            <if test=" returnQty != null">
+                return_qty = return_qty + #{et.returnQty,jdbcType=NUMERIC},
+            </if>
+            <if test=" returnAmt != null">
+                return_amt = return_amt + #{et.returnAmt,jdbcType=NUMERIC},
+            </if>
+        </set>
+        where item_id = #{itemId,typeHandler=UuidTypeHandler}
+        and  item_qty >= return_qty
+    </update>
+
     <!-- 通用条件列 -->
     <sql id="Condition_pur">
         <where>

+ 8 - 0
src/main/java/com/dk/mdm/mapper/sale/OrderMapper.java

@@ -1,5 +1,6 @@
 package com.dk.mdm.mapper.sale;
 
+import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.sale.OrderQuery;
@@ -56,5 +57,12 @@ public interface OrderMapper extends BaseMapper<Order>{
      * @date   : 2024-02-28 10:19
      */
     Long countByCondDetail(OrderQuery orderQuery);
+
+    /**
+     * @desc   : 修改退货信息
+     * @date   : 2024/3/29 9:05
+     * @author : 寇珊珊
+     */
+    int  updateReturnMessage(Order order);
 }
 

+ 15 - 0
src/main/java/com/dk/mdm/mapper/sale/OrderMapper.xml

@@ -916,4 +916,19 @@
         FROM dkic_b.t_psi_order as t
         <include refid="Condition"/>
     </select>
+
+    <!--修改退货信息 -->
+    <update id="updateReturnMessage" parameterType="com.dk.mdm.model.pojo.sale.Order">
+        update dkic_b.t_psi_order
+        <set>
+            <if test=" returnQty != null">
+                return_qty = return_qty + #{et.returnQty,jdbcType=NUMERIC},
+            </if>
+            <if test=" returnAmt != null">
+                return_amt = return_amt + #{et.returnAmt,jdbcType=NUMERIC},
+            </if>
+        </set>
+        where order_id = #{orderId,typeHandler=UuidTypeHandler}
+        and  out_qty >= return_qty
+    </update>
 </mapper>

+ 2 - 2
src/main/java/com/dk/mdm/model/response/ivt/OutboundResponse.java

@@ -284,8 +284,8 @@ public class OutboundResponse extends PageInfo<OutboundResponse> implements Seri
     @ApiModelProperty(value = "出库单明细")
     private List<OutboundItemResponse> goodsList;
 
-    @ApiModelProperty(value = "订单单号")
-    private String orderNo;
+    @ApiModelProperty(value = "来源单号")
+    private String biznisNo;
 
     @ApiModelProperty(value = "组织名称")
     private String orgName;

+ 2 - 0
src/main/java/com/dk/mdm/model/vo/ivt/OutboundVO.java

@@ -302,6 +302,8 @@ public class OutboundVO{
     private List<Map<String, Object>> staffList;
 
 
+
+
     private static final long serialVersionUID = 1L;
 
 }

+ 17 - 4
src/main/java/com/dk/mdm/service/ivt/InboundReturnService.java

@@ -98,7 +98,7 @@ public class InboundReturnService extends BaseService<Inbound> {
                     ErrorCodeEnum.INBOUND_CANNOT_BE_EMPTY.getMessage());
         }
         //查询明细
-        List<InboundItemResponse> inboundItemResponselist = inboundItemMapper.selectByInboundReturnCond(new InboundItemQuery().setIntoId(intoId));
+        List<InboundItemResponse> inboundItemResponselist = inboundItemMapper.selectByInboundReturnCond(new InboundItemQuery().setIntoId(intoId).setFlgValid(true));
         inboundResponse.setGoodsList(inboundItemResponselist);
         return ResponseResultUtil.success(inboundResponse);
     }
@@ -217,9 +217,6 @@ public class InboundReturnService extends BaseService<Inbound> {
                 .setReturnQty(purchaseReturnQty.add(inboundVO.getReturnAmt()))
                 .setReturnAmt(purchaseReturnAmt.add(inboundVO.getReturnQty()))
         );
-
-
-
         //校验明细
         if(inboundVO.getItemList() != null &&  inboundVO.getItemList().size() > 0){
             for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
@@ -275,6 +272,22 @@ public class InboundReturnService extends BaseService<Inbound> {
             }
         }
 
+        //删除 采退入库明细
+        if(inboundVO.getDeleteItemList() != null  && inboundVO.getDeleteItemList().size() > 0){
+            for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
+                if (inboundItemVO.getItemId() != null) {
+                    //修改 采退明细 状态
+                    InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+                    inboundItem.setFlgValid(false);
+                    //修改
+                    inboundItemMapper.update(inboundItem,
+                            new UpdateWrapper<InboundItem>().lambda()
+                                    .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
+                    );
+                }
+            }
+        }
+
         //修改采退总单
         Inbound inbound = new Inbound();
         inbound.setIntoId(inboundVO.getIntoId());

+ 5 - 32
src/main/java/com/dk/mdm/service/ivt/inbound/InboundCheckService.java

@@ -3,6 +3,7 @@ package com.dk.mdm.service.ivt.inbound;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.dk.common.exception.BaseBusinessException;
 import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.infrastructure.enums.ErrorCodeEnum;
 import com.dk.common.mapper.BaseMapper;
@@ -62,10 +63,9 @@ public class InboundCheckService extends BaseService<Inbound> {
 	private InventoryService inventoryService;
 
 
-
 	/**
-	 * @desc   : 盘盈入库新建
-	 * @date   : 2024/3/7 14:13
+	 * @desc : 盘盈入库新建
+	 * @date : 2024/3/7 14:13
 	 * 入库中数量/金额  已入库数量/金额  由调用方传入
 	 * @author : 寇珊珊
 	 */
@@ -90,7 +90,7 @@ public class InboundCheckService extends BaseService<Inbound> {
 
 		//region  总单
 		//获取 id/单号
-		Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.INVENTORYPROFITINBOUND.getName(),false);
+		Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.INVENTORYPROFITINBOUND.getName(), false);
 		inboundVO.setIntoId(codeMap.get("outId").toString()).
 				setIntoNo(codeMap.get("outNote").toString());
 		//入库类型
@@ -112,7 +112,7 @@ public class InboundCheckService extends BaseService<Inbound> {
 		//region 明细
 		//校验明细
 		if (inboundVO.getItemList().size() == 0) {
-			return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+			throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
 					ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
 		}
 		for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
@@ -154,31 +154,4 @@ public class InboundCheckService extends BaseService<Inbound> {
 		return ResponseResultUtil.success(inboundVO);
 	}
 
-
-	/**
-	 * @desc : 入库状态通用(目前本页面)
-	 * @date : 2024/3/9 8:59
-	 * @author : 寇珊珊
-	 */
-	public String setIntoStatus(BigDecimal intoingQty, BigDecimal intoQty) {
-		//入库状态
-		String intoStatus = null;
-		//已入库数量>0 入库中数量>0
-		if (intoQty.compareTo(BigDecimal.ZERO) >= 0 && intoingQty.compareTo(BigDecimal.ZERO) > 0 ) {
-			//入库中
-			intoStatus = Constant.IntoStatus.RUKUZHONG.getName();
-		}
-		//已入库数量=0 入库中数量=0
-		else if (intoQty.compareTo(BigDecimal.ZERO) == 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
-			//待入库
-			intoStatus = Constant.IntoStatus.DAIRUKU.getName();
-		}
-		//已入库数量>0 入库中数量=0
-		else if (intoQty.compareTo(BigDecimal.ZERO) >0 && intoingQty.compareTo(BigDecimal.ZERO)==0) {
-			//已入库
-			intoStatus = Constant.IntoStatus.YIRUKU.getName();
-		}
-		return intoStatus;
-	}
-	
 }

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

@@ -162,7 +162,7 @@ public class InboundOtherService extends BaseService<Inbound> {
 		//region 明细
 		//校验明细
 		if (inboundVO.getItemList().size() == 0) {
-			return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+			throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
 					ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
 		}
 		for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
@@ -423,7 +423,7 @@ public class InboundOtherService extends BaseService<Inbound> {
 		//region 编辑明细
 		//校验明细
 		if (inboundVO.getItemList().size() == 0) {
-			return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+			throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
 					ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
 		}
 		for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
@@ -435,8 +435,8 @@ public class InboundOtherService extends BaseService<Inbound> {
 			if (inboundItemVO.getIntoId() != null) {
 				InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
 				//region 校验数量是否超出
-				if (inboundItemVO.getIntoingQty().compareTo(inboundItemResponse.getIntoQty()) > 0) {
-					return ResponseResultUtil.error(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getCode(),
+				if (inboundItemVO.getIntoingQty().compareTo(inboundItemResponse.getIntoingQty()) > 0) {
+					throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getCode(),
 							ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getMessage());
 				}
 				//endregion

+ 34 - 10
src/main/java/com/dk/mdm/service/ivt/inbound/InboundPurchaseReturnService.java

@@ -176,7 +176,7 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
         //region 明细
         //校验明细
         if (inboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
@@ -256,8 +256,17 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
             //region 修改明细
             List<InboundItemVO> itemList = inboundVO.getItemList();
             for (InboundItemVO inboundItemVO : itemList) {
+
+                //region  不能新建
+                if(inboundItemVO.getSPurItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
                 //根据id查询
                 InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
+
                 //region 将库存需要的参数赋值
                 inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
                 inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_RETURN.getValue());
@@ -317,7 +326,14 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
             //region 修改明细
             List<InboundItemVO> itemList = inboundVO.getItemList();
             for (InboundItemVO inboundItemVO : itemList) {
-                //赋值
+                //region  不能新建
+                if(inboundItemVO.getSPurItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
+                //region 赋值明细
                 InboundItem inboundItem = new InboundItem();
                 inboundItem.setItemId(inboundItemVO.getItemId());
                 inboundItem.setIntoingQty(inboundItemVO.getIntoingQty());
@@ -327,6 +343,7 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
                         new UpdateWrapper<InboundItem>().lambda()
                                 .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
                 );
+                //endregion
             }
             //endregion
             //region  修改入库总单
@@ -460,15 +477,22 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
         //region 编辑明细
         //校验明细
         if (inboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+            //region  不能新建
+            if(inboundItemVO.getSPurItemId()==null){
+                throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                        ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+            }
+            //endregion
+
             //查询原单
             InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
             //region 校验数量是否超出
-            if (inboundItemVO.getIntoingQty().compareTo(inboundItemResponse.getIntoQty()) > 0) {
-                return ResponseResultUtil.error(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getCode(),
+            if (inboundItemVO.getIntoingQty().compareTo(inboundItemResponse.getIntoingQty()) > 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getCode(),
                         ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getMessage());
             }
             //endregion
@@ -639,8 +663,8 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
     public String setIntoStatus(BigDecimal intoingQty, BigDecimal intoQty) {
         //入库状态+
         String intoStatus = null;
-        //已入库数量>0 入库中数量>0
-        if (intoQty.compareTo(BigDecimal.ZERO) >= 0 && intoingQty.compareTo(BigDecimal.ZERO) > 0) {
+        //已入库数量<=0 入库中数量<0
+        if (intoQty.compareTo(BigDecimal.ZERO) <= 0 && intoingQty.compareTo(BigDecimal.ZERO) < 0) {
             //入库中
             intoStatus = Constant.IntoStatus.RUKUZHONG.getName();
         }
@@ -649,8 +673,8 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
             //待入库
             intoStatus = Constant.IntoStatus.DAIRUKU.getName();
         }
-        //已入库数量>0 入库中数量=0
-        else if (intoQty.compareTo(BigDecimal.ZERO) > 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
+        //已入库数量<0 入库中数量=0
+        else if (intoQty.compareTo(BigDecimal.ZERO) < 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
             //已入库
             intoStatus = Constant.IntoStatus.YIRUKU.getName();
         }
@@ -669,7 +693,7 @@ public class InboundPurchaseReturnService extends BaseService<Inbound> {
         InboundResponse inboundResponse = inboundMapper.selectMessageByOtherQuery(new InboundQuery().setIntoId(id).setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName()));
         //单据不存在
         if (inboundResponse == null) {
-            return ResponseResultUtil.error(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_INBOUND_QUANTITY.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_INBOUND_QUANTITY.getCode(),
                     ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_INBOUND_QUANTITY.getMessage());
         }
         dataInfo.put("data", inboundResponse);

+ 26 - 4
src/main/java/com/dk/mdm/service/ivt/inbound/InboundPurchaseService.java

@@ -208,7 +208,7 @@ public class InboundPurchaseService extends BaseService<Inbound> {
         //region 明细
         //校验明细
         if (inboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
@@ -322,6 +322,14 @@ public class InboundPurchaseService extends BaseService<Inbound> {
             for (InboundItemVO inboundItemVO : itemList) {
                 //根据id查询
                 InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
+
+                //region  不能新建
+                if(inboundItemVO.getSPurItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
                 //region 将库存需要的参数赋值
                 inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
                 inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
@@ -410,6 +418,14 @@ public class InboundPurchaseService extends BaseService<Inbound> {
             for (InboundItemVO inboundItemVO : itemList) {
                 //根据id查询 获取到还未进行修改的数据
                 InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
+
+                //region  不能新建
+                if(inboundItemVO.getSPurItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
                 //赋值
                 InboundItem inboundItem = new InboundItem();
                 inboundItem.setItemId(inboundItemVO.getItemId());
@@ -636,15 +652,21 @@ public class InboundPurchaseService extends BaseService<Inbound> {
         //region 编辑明细
         //校验明细
         if (inboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+            //region  不能新建
+            if(inboundItemVO.getSPurItemId()==null){
+                throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                        ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+            }
+            //endregion
             //入库明细根据id查询
             InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
             //region 校验数量是否超出
-            if (inboundItemVO.getIntoingQty().compareTo(inboundItemResponse.getIntoQty()) > 0) {
-                return ResponseResultUtil.error(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getCode(),
+            if (inboundItemVO.getIntoingQty().compareTo(inboundItemResponse.getIntoingQty()) > 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getCode(),
                         ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getMessage());
             }
             //endregion

+ 108 - 0
src/main/java/com/dk/mdm/service/ivt/outbound/OutCommon.java

@@ -0,0 +1,108 @@
+package com.dk.mdm.service.ivt.outbound;
+
+import com.dk.common.exception.BaseBusinessException;
+import com.dk.common.infrastructure.constant.Constant;
+import com.dk.common.infrastructure.enums.ErrorCodeEnum;
+import com.dk.common.response.ResponseCodeEnum;
+import com.dk.mdm.mapper.mst.CustomerMapper;
+import com.dk.mdm.mapper.sale.MultiOwnerMapper;
+import com.dk.mdm.model.pojo.mst.Customer;
+import com.dk.mdm.model.pojo.sale.MultiOwner;
+import com.dk.mdm.model.vo.ivt.OutboundVO;
+import com.dk.mdm.service.common.CommonService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @desc   : 新建客户,业务归属共通
+ * @date   : 2024/3/29 11:30
+ * @author : 寇珊珊
+ */
+@Service
+public class OutCommon {
+
+    @Autowired
+    private CommonService commonService;
+
+    @Autowired
+    private CustomerMapper customerMapper;
+
+    @Autowired
+    private MultiOwnerMapper multiOwnerMapper;
+
+
+    /**
+     * @desc   : 新建客户
+     * @date   : 2024/3/27 9:28
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public OutboundVO insertCustomer(OutboundVO outboundVO) {
+        // 如果没有客户id,要新建
+        if (outboundVO.getCusId() == null) {
+            List<Customer> listCustomer = customerMapper.selectByCond(new Customer().setCpId(outboundVO.getCpId()).setCusPhone(outboundVO.getCusPhone()));
+            // 如果客户电话已存在
+            if (listCustomer.size() > 0) {
+                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_CUSPHONE.getMessage());
+            }
+            // 创建客户,获取编码和主键UuId
+            Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.CUSTOMER.getName(), true);
+            Customer customer = new Customer();
+            customer.setCusId(codeMap.get("outId").toString()).setCusCode(codeMap.get("outNote").toString()).setCusName(outboundVO.getCusName())
+                    .setCusPhone(outboundVO.getCusPhone()).setAddressArea(outboundVO.getAddressArea()).setAddressName(outboundVO.getAddressName())
+                    .setAddressNo(outboundVO.getAddressNo()).setAddressGcj02(outboundVO.getAddressGcj02()).setAddressFull(outboundVO.getAddressFull())
+                    .setContactName(outboundVO.getContactName()).setContactPhone(outboundVO.getContactPhone()).setCusFrom(outboundVO.getCusFrom())
+                    .setChannelId(outboundVO.getSalesChannel()).setOrgId(outboundVO.getOrgId()).setStaffId(outboundVO.getStaffId())
+                    .setReportStaff(outboundVO.getMakeStaff()).setSaleStatus(Constant.SaleStatus.CHENGJIAO.getName()).setCpId(outboundVO.getCpId());
+            customerMapper.insert(customer);
+            outboundVO.setCusId(customer.getCusId());
+        }
+
+        return outboundVO;
+    }
+
+    /**
+     * @desc   : 新建多业务归属
+     * @date   : 2024/3/27 9:33
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void insertMultiOwner(OutboundVO outboundVO){
+        // 业务部门业绩保存
+        if (outboundVO.getOrgList() != null && outboundVO.getOrgList().size() > 0) {
+            for (Map<String, Object> map : outboundVO.getOrgList()) {
+                MultiOwner multiOwner = new MultiOwner();
+                multiOwner.setOrderId(outboundVO.getOutId()).setOwnerId(map.get("orgId").toString())
+                        .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(outboundVO.getCpId());
+                if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
+                    multiOwner.setOwnerType(Constant.OwnerType.Z_ORG.getName());
+                } else {
+                    multiOwner.setOwnerType(Constant.OwnerType.C_ORG.getName());
+                }
+                multiOwnerMapper.insert(multiOwner);
+            }
+        }
+
+        // 业务员业绩保存
+        if (outboundVO.getStaffList() != null && outboundVO.getStaffList().size() > 0) {
+            for (Map<String, Object> map : outboundVO.getStaffList()) {
+                MultiOwner multiOwner = new MultiOwner();
+                multiOwner.setOrderId(outboundVO.getOutId()).setOwnerId(map.get("staffId").toString())
+                        .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(outboundVO.getCpId());
+                if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
+                    multiOwner.setOwnerType(Constant.OwnerType.Z_STAFF.getName());
+                } else {
+                    multiOwner.setOwnerType(Constant.OwnerType.C_STAFF.getName());
+                }
+                multiOwnerMapper.insert(multiOwner);
+            }
+        }
+
+    }
+
+}

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

@@ -3,6 +3,7 @@ package com.dk.mdm.service.ivt.outbound;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.dk.common.exception.BaseBusinessException;
 import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.infrastructure.enums.ErrorCodeEnum;
 import com.dk.common.mapper.BaseMapper;
@@ -15,7 +16,6 @@ import com.dk.mdm.mapper.ivt.OutboundItemMapper;
 import com.dk.mdm.mapper.ivt.OutboundMapper;
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
-import com.dk.mdm.model.vo.ivt.InOutRecordVO;
 import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundVO;
 import com.dk.mdm.service.common.CommonService;
@@ -25,7 +25,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -111,7 +110,7 @@ public class OutboundCheckService extends BaseService<Outbound> {
         //region 明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
@@ -153,31 +152,4 @@ public class OutboundCheckService extends BaseService<Outbound> {
         return ResponseResultUtil.success(outboundVO);
     }
 
-
-    /**
-     * @desc : 出库状态通用(目前本页面)
-     * @date : 2024/3/9 8:59
-     * @author : 寇珊珊
-     */
-    public String setOutStatus(BigDecimal outingQty, BigDecimal outQty) {
-        //出库状态
-        String outStatus = null;
-        //已出库数量<0 出库中数量<0
-        if (outQty.compareTo(BigDecimal.ZERO) <= 0 && outingQty.compareTo(BigDecimal.ZERO) < 0) {
-            //出库中
-            outStatus = Constant.OutStatus.CHUKUZHONG.getName();
-        }
-        //出入库数量=0 出库中数量=0
-        else if (outQty.compareTo(BigDecimal.ZERO) == 0 && outingQty.compareTo(BigDecimal.ZERO) == 0) {
-            //待出库
-            outStatus = Constant.OutStatus.DAICHUKU.getName();
-        }
-        //已出库数量<0 出库中数量=0
-        else if (outQty.compareTo(BigDecimal.ZERO) < 0 && outingQty.compareTo(BigDecimal.ZERO) == 0) {
-            //已出库
-            outStatus = Constant.OutStatus.YICHUKU.getName();
-        }
-        return outStatus;
-    }
-
 }

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

@@ -1,6 +1,7 @@
 package com.dk.mdm.service.ivt.outbound;
 
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.dk.common.exception.BaseBusinessException;
 import com.dk.common.infrastructure.annotaiton.Pagination;
 import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.infrastructure.enums.ErrorCodeEnum;
@@ -159,7 +160,7 @@ public class OutboundOtherService extends BaseService<Outbound> {
         //region 明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
@@ -231,6 +232,7 @@ public class OutboundOtherService extends BaseService<Outbound> {
             for (OutboundItemVO outboundItemVO : itemList) {
                 //根据id查询
                 OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
+
                 //region 将库存需要的参数赋值
                 outboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
                 outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
@@ -284,7 +286,7 @@ public class OutboundOtherService extends BaseService<Outbound> {
             //region 修改明细
             List<OutboundItemVO> itemList = outboundVO.getItemList();
             for (OutboundItemVO outboundItemVO : itemList) {
-                //赋值
+                //region 赋值明细
                 OutboundItem outboundItem = new OutboundItem();
                 outboundItem.setItemId(outboundItemVO.getItemId());
                 outboundItem.setOutingQty(outboundItemVO.getOutingQty());
@@ -294,6 +296,7 @@ public class OutboundOtherService extends BaseService<Outbound> {
                         new UpdateWrapper<OutboundItem>().lambda()
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
+                //endregion
             }
             //endregion
             //region  修改出库总单
@@ -415,15 +418,15 @@ public class OutboundOtherService extends BaseService<Outbound> {
         //region 编辑明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
             //查询原单
             OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
             //region 校验数量是否超出
-            if(outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutQty()) > 0){
-                return ResponseResultUtil.error(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(),
+            if(outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutingQty()) > 0){
+                throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(),
                         ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getMessage());
             }
             //endregion
@@ -597,38 +600,11 @@ public class OutboundOtherService extends BaseService<Outbound> {
      * @date : 2024/3/9 8:59
      * @author : 寇珊珊
      */
-    public String setIntoStatus(BigDecimal intoingQty, BigDecimal intoQty) {
-        //出库状态
-        String intoStatus = null;
-        //已出库数量>0 出库中数量>0
-        if (intoQty.compareTo(BigDecimal.ZERO) >= 0 && intoingQty.compareTo(BigDecimal.ZERO) > 0) {
-            //出库中
-            intoStatus = Constant.IntoStatus.RUKUZHONG.getName();
-        }
-        //已出库数量=0 出库中数量=0
-        else if (intoQty.compareTo(BigDecimal.ZERO) == 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
-            //待出库
-            intoStatus = Constant.IntoStatus.DAIRUKU.getName();
-        }
-        //已出库数量>0 出库中数量=0
-        else if (intoQty.compareTo(BigDecimal.ZERO) > 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
-            //已出库
-            intoStatus = Constant.IntoStatus.YIRUKU.getName();
-        }
-        return intoStatus;
-    }
-
-
-    /**
-     * @desc : 出库状态通用(目前本页面)
-     * @date : 2024/3/9 8:59
-     * @author : 寇珊珊
-     */
     public String setOutStatus(BigDecimal outingQty, BigDecimal outQty) {
         //出库状态
         String outStatus = null;
         //已出库数量<0 出库中数量<0
-        if (outQty.compareTo(BigDecimal.ZERO) <= 0 && outingQty.compareTo(BigDecimal.ZERO) < 0) {
+        if (outQty.compareTo(BigDecimal.ZERO) >= 0 && outingQty.compareTo(BigDecimal.ZERO) < 0) {
             //出库中
             outStatus = Constant.OutStatus.CHUKUZHONG.getName();
         }
@@ -638,7 +614,7 @@ public class OutboundOtherService extends BaseService<Outbound> {
             outStatus = Constant.OutStatus.DAICHUKU.getName();
         }
         //已出库数量<0 出库中数量=0
-        else if (outQty.compareTo(BigDecimal.ZERO) < 0 && outingQty.compareTo(BigDecimal.ZERO) == 0) {
+        else if (outQty.compareTo(BigDecimal.ZERO) > 0 && outingQty.compareTo(BigDecimal.ZERO) == 0) {
             //已出库
             outStatus = Constant.OutStatus.YICHUKU.getName();
         }
@@ -657,7 +633,7 @@ public class OutboundOtherService extends BaseService<Outbound> {
         OutboundResponse outboundResponse = outboundMapper.selectMessageByOtherQuery(new OutboundQuery().setOutId(id).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName()));
         //单据不存在
         if (outboundResponse == null) {
-            return ResponseResultUtil.error(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getCode(),
                     ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getMessage());
         }
         dataInfo.put("data", outboundResponse);

+ 41 - 118
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java

@@ -89,13 +89,10 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
     private InventoryService inventoryService;
 
     @Autowired
-    private CustomerMapper customerMapper;
-    
-    @Autowired
-    private MultiOwnerMapper multiOwnerMapper;
+    private AccountService  accountService;
 
     @Autowired
-    private AccountService  accountService;
+    private  OutCommon outCommon;
     
 
     /**
@@ -107,7 +104,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
     public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO) {
         //region 如果没有客户id,要新建
         if (outboundVO.getCusId() == null) {
-            outboundVO = this.insertCustomer(outboundVO);
+            outboundVO = outCommon.insertCustomer(outboundVO);
         }
         //endregion
 
@@ -160,7 +157,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region  新建多业务归属
-        this.insertMultiOwner(outboundVO);
+        outCommon.insertMultiOwner(outboundVO);
         //endregion
 
         //region 销售退货
@@ -199,7 +196,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //region 明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
@@ -287,75 +284,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
     }
 
     /**
-     * @desc   : 新建客户
-     * @date   : 2024/3/27 9:28
-     * @author : 寇珊珊
-     */
-    @Transactional(rollbackFor = {Exception.class})
-    public OutboundVO insertCustomer(OutboundVO outboundVO) {
-        // 如果没有客户id,要新建
-        if (outboundVO.getCusId() == null) {
-            List<Customer> listCustomer = customerMapper.selectByCond(new Customer().setCpId(outboundVO.getCpId()).setCusPhone(outboundVO.getCusPhone()));
-            // 如果客户电话已存在
-            if (listCustomer.size() > 0) {
-                throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ISEXISTS_CUSPHONE.getMessage());
-            }
-            // 创建客户,获取编码和主键UuId
-            Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.CUSTOMER.getName(), true);
-            Customer customer = new Customer();
-            customer.setCusId(codeMap.get("outId").toString()).setCusCode(codeMap.get("outNote").toString()).setCusName(outboundVO.getCusName())
-                    .setCusPhone(outboundVO.getCusPhone()).setAddressArea(outboundVO.getAddressArea()).setAddressName(outboundVO.getAddressName())
-                    .setAddressNo(outboundVO.getAddressNo()).setAddressGcj02(outboundVO.getAddressGcj02()).setAddressFull(outboundVO.getAddressFull())
-                    .setContactName(outboundVO.getContactName()).setContactPhone(outboundVO.getContactPhone()).setCusFrom(outboundVO.getCusFrom())
-                    .setChannelId(outboundVO.getSalesChannel()).setOrgId(outboundVO.getOrgId()).setStaffId(outboundVO.getStaffId())
-                    .setReportStaff(outboundVO.getMakeStaff()).setSaleStatus(Constant.SaleStatus.CHENGJIAO.getName()).setCpId(outboundVO.getCpId());
-            customerMapper.insert(customer);
-            outboundVO.setCusId(customer.getCusId());
-        }
-
-        return outboundVO;
-    }
-
-    /**
-     * @desc   : 新建多业务归属
-     * @date   : 2024/3/27 9:33
-     * @author : 寇珊珊
-     */
-    @Transactional(rollbackFor = {Exception.class})
-    public void insertMultiOwner(OutboundVO outboundVO){
-        // 业务部门业绩保存
-        if (outboundVO.getOrgList() != null && outboundVO.getOrgList().size() > 0) {
-            for (Map<String, Object> map : outboundVO.getOrgList()) {
-                MultiOwner multiOwner = new MultiOwner();
-                multiOwner.setOrderId(outboundVO.getOutId()).setOwnerId(map.get("orgId").toString())
-                        .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(outboundVO.getCpId());
-                if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
-                    multiOwner.setOwnerType(Constant.OwnerType.Z_ORG.getName());
-                } else {
-                    multiOwner.setOwnerType(Constant.OwnerType.C_ORG.getName());
-                }
-                multiOwnerMapper.insert(multiOwner);
-            }
-        }
-
-        // 业务员业绩保存
-        if (outboundVO.getStaffList() != null && outboundVO.getStaffList().size() > 0) {
-            for (Map<String, Object> map : outboundVO.getStaffList()) {
-                MultiOwner multiOwner = new MultiOwner();
-                multiOwner.setOrderId(outboundVO.getOutId()).setOwnerId(map.get("staffId").toString())
-                        .setAllocationRatio(new BigDecimal(map.get("allocationRatio").toString())).setCpId(outboundVO.getCpId());
-                if (Boolean.parseBoolean(map.get("ownerFlag").toString())) {
-                    multiOwner.setOwnerType(Constant.OwnerType.Z_STAFF.getName());
-                } else {
-                    multiOwner.setOwnerType(Constant.OwnerType.C_STAFF.getName());
-                }
-                multiOwnerMapper.insert(multiOwner);
-            }
-        }
-
-    }
-    
-    /**
      * @desc : 销售出库编辑
      * @date : 2024/3/25 16:25
      * @author : 寇珊珊
@@ -382,6 +310,14 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             for (OutboundItemVO outboundItemVO : itemList) {
                 //根据id查询
                 OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
+
+                //region  不能新建
+                if(outboundItemVO.getSOrderItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
                 //region 将库存需要的参数赋值
                 outboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
                 outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
@@ -411,8 +347,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     //根据id查询
                     OrderItem orderItem = new OrderItem();
                     orderItem.setItemId(outboundItemVO.getFromItemId());
-                    orderItem.setOutQty(outboundItemVO.getOutQty().negate().add(outboundItemResponse.getOutingQty()));
-                    orderItem.setOutAmt(outboundItemVO.getOutAmt().negate().add(outboundItemResponse.getOutingAmt()));
+                    orderItem.setOutQty(outboundItemResponse.getOutQty().negate().add(outboundItemVO.getOutingQty()));
+                    orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate().add(outboundItemVO.getOutingAmt()));
                     int countRow = orderItemMapper.updateById(orderItem);
                     //数量超出
                     if (countRow == 0) {
@@ -470,7 +406,15 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             for (OutboundItemVO outboundItemVO : itemList) {
                 //根据id查询 获取到还未进行修改的数据
                 OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
-                //赋值
+
+                //region  不能新建
+                if(outboundItemVO.getSOrderItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
+                //region 赋值明细
                 OutboundItem outboundItem = new OutboundItem();
                 outboundItem.setItemId(outboundItemResponse.getItemId());
                 outboundItem.setOutingQty(outboundItemResponse.getOutingQty());
@@ -480,6 +424,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                         new UpdateWrapper<OutboundItem>().lambda()
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
+                //endregion
+
                 //region  销售明细
                 if (outboundItemVO.getFromItemId() != null) {
                     //根据id查询
@@ -572,8 +518,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     //根据id查询
                     OrderItem orderItem = new OrderItem();
                     orderItem.setItemId(outboundItemResponse.getFromItemId());
-                    orderItem.setOutQty(BigDecimal.ZERO);
-                    orderItem.setOutAmt(BigDecimal.ZERO);
+                    orderItem.setOutQty(outboundItemResponse.getOutQty().negate());
+                    orderItem.setOutAmt(outboundItemResponse.getOutAmt().negate());
                     int countRow = orderItemMapper.updateById(orderItem);
                     //数量超出
                     if (countRow == 0) {
@@ -597,8 +543,8 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //region 修改销售总单
             Order order = new Order();
             order.setOrderId(outboundResponse.getFromId());
-            order.setOutQty(BigDecimal.ZERO);
-            order.setOutAmt(BigDecimal.ZERO);
+            order.setOutQty(outboundResponse.getOutQty().negate());
+            order.setOutAmt(outboundResponse.getOutAmt().negate());
             //修改
             int countRow = orderMapper.updateById(order);
             //数量超出
@@ -655,7 +601,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             }
             //endregion
 
-            //endregion
             //region  修改出库总单
             Outbound outbound = new Outbound();
             outbound.setOutId(outboundResponse.getOutId());
@@ -666,7 +611,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
                     new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId, UUID.fromString(outbound.getOutId()))
             );
             //endregion
-            //endregion
+
             //region 修改销售总单
             Order order = new Order();
             order.setOrderId(outboundResponse.getFromId());
@@ -701,15 +646,21 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //region 编辑明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
+            //region  不能新建
+            if(outboundItemVO.getSOutItemId()==null){
+                throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                        ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+            }
+            //endregion
             //明细根据id查询
             OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
             //region 校验数量是否超出
-            if (outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutQty()) > 0) {
-                return ResponseResultUtil.error(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(),
+            if (outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutingQty()) > 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(),
                         ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getMessage());
             }
             //endregion
@@ -986,34 +937,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         return ResponseResultUtil.success();
     }
 
-
-    /**
-     * @desc : 入库状态通用(目前本页面)
-     * @date : 2024/3/9 8:59
-     * @author : 寇珊珊
-     */
-    public String setIntoStatus(BigDecimal intoingQty, BigDecimal intoQty) {
-        //入库状态
-        String intoStatus = null;
-        //已出库数量>0 出库中数量>0
-        if (intoQty.compareTo(BigDecimal.ZERO) >= 0 && intoingQty.compareTo(BigDecimal.ZERO) > 0) {
-            //出库中
-            intoStatus = Constant.IntoStatus.RUKUZHONG.getName();
-        }
-        //已出库数量=0 出库中数量=0
-        else if (intoQty.compareTo(BigDecimal.ZERO) == 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
-            //待入库
-            intoStatus = Constant.IntoStatus.DAIRUKU.getName();
-        }
-        //已出库数量>0 出库中数量=0
-        else if (intoQty.compareTo(BigDecimal.ZERO) > 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
-            //已出库
-            intoStatus = Constant.IntoStatus.YIRUKU.getName();
-        }
-        return intoStatus;
-    }
-
-
     /**
      * @desc : 出库状态通用(目前本页面)
      * @date : 2024/3/9 8:59
@@ -1052,7 +975,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         OutboundResponse outboundResponse = outboundMapper.selectMessageByOtherQuery(new OutboundQuery().setOutId(id).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName()));
         //单据不存在
         if (outboundResponse == null) {
-            return ResponseResultUtil.error(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getCode(),
                     ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getMessage());
         }
         dataInfo.put("data", outboundResponse);

+ 228 - 12
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleReturnService.java

@@ -1,6 +1,7 @@
 package com.dk.mdm.service.ivt.outbound;
 
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.dk.common.exception.BaseBusinessException;
 import com.dk.common.infrastructure.annotaiton.Pagination;
 import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.infrastructure.enums.ErrorCodeEnum;
@@ -14,12 +15,20 @@ import com.dk.mdm.infrastructure.convert.ivt.OutboundItemConvert;
 import com.dk.mdm.mapper.common.CommonMapper;
 import com.dk.mdm.mapper.ivt.OutboundItemMapper;
 import com.dk.mdm.mapper.ivt.OutboundMapper;
+import com.dk.mdm.mapper.sale.OrderItemMapper;
+import com.dk.mdm.mapper.sale.OrderMapper;
+import com.dk.mdm.model.pojo.ivt.InboundItem;
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
+import com.dk.mdm.model.pojo.sale.Order;
+import com.dk.mdm.model.pojo.sale.OrderItem;
 import com.dk.mdm.model.query.ivt.OutboundItemQuery;
 import com.dk.mdm.model.query.ivt.OutboundQuery;
 import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import com.dk.mdm.model.response.ivt.OutboundResponse;
+import com.dk.mdm.model.response.sale.OrderItemResponse;
+import com.dk.mdm.model.response.sale.OrderResponse;
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundItemVO;
 import com.dk.mdm.model.vo.ivt.OutboundVO;
 import com.dk.mdm.service.common.CommonService;
@@ -34,6 +43,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 
 /**
@@ -73,6 +83,140 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
     @Autowired
     private AccountService accountService;
 
+    @Autowired
+    private OrderMapper orderMapper;
+
+    @Autowired
+    private OrderItemMapper orderItemMapper;
+
+    @Autowired
+    private OutCommon outCommon;
+
+
+    /**
+     * @desc : 修改原总单数据(订单,出库单)
+     * posNegFlag :正负标识  true:正数,false:负数
+     * 默认传值过来的是负数
+     * @date : 2024/3/29 10:43
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void updatePrimaryTotal(OutboundVO outboundVO, Boolean posNegFlag) {
+        //region 原入库单
+        Map<String, List<OutboundItemVO>> outboundItemVOListOutPri = outboundVO.getItemList().stream().collect(Collectors.groupingBy(OutboundItemVO::getSOutId));
+        for (String str : outboundItemVOListOutPri.keySet()) {
+            List<OutboundItemVO> outboundItemList = outboundItemVOListOutPri.get(str);
+            //region 汇总退货数量 金额
+            BigDecimal returnSumQty = outboundItemList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            //endregion
+            //查询原单
+            OutboundResponse outboundResponse = outboundMapper.selectById(str);
+            //校验数据
+            if (returnSumQty.compareTo(outboundResponse.getOutQty()) > 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getCode(),
+                        ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getMessage());
+            }
+            Outbound outboundPri = new Outbound();
+            outboundPri.setOutId(str);
+            if (posNegFlag) {
+                outboundPri.setReturnQty(returnSumQty.negate());
+                outboundPri.setReturnAmt(returnSumAmt.negate());
+            } else {
+                outboundPri.setReturnQty(returnSumQty);
+                outboundPri.setReturnAmt(returnSumAmt);
+            }
+            outboundMapper.updateReturnMessage(outboundPri);
+        }
+        //endregion
+
+        //region 原销售订单
+        Map<String, List<OutboundItemVO>> outboundItemVOListOrderPri = outboundVO.getItemList().stream().collect(Collectors.groupingBy(OutboundItemVO::getSOrderId));
+        for (String str : outboundItemVOListOrderPri.keySet()) {
+            List<OutboundItemVO> outboundItemList = outboundItemVOListOrderPri.get(str);
+            //region 汇总退货数量 金额
+            BigDecimal returnSumQty = outboundItemList.stream().map(OutboundItemVO::getOutingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+            BigDecimal returnSumAmt = outboundItemList.stream().map(OutboundItemVO::getOutingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+            //endregion
+            //查询原单
+            OrderResponse orderResponse = orderMapper.selectById(str);
+            //校验数据
+            if (returnSumQty.compareTo(orderResponse.getOutQty()) > 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getCode(),
+                        ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getMessage());
+            }
+            Order orderPri = new Order();
+            orderPri.setOrderId(str);
+            if (posNegFlag) {
+                orderPri.setReturnQty(returnSumQty.negate());
+                orderPri.setReturnAmt(returnSumAmt.negate());
+            } else {
+                orderPri.setReturnQty(returnSumQty);
+                orderPri.setReturnAmt(returnSumAmt);
+            }
+            orderMapper.updateReturnMessage(orderPri);
+        }
+        //endregion
+    }
+
+    /**
+     * @desc : 修改原明细(订单,出库)
+     * posNegFlag :正负标识  true:正数,false:负数
+     * 默认传值过来的是负数
+     * @date : 2024/3/29 10:46
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void updatePrimaryDetail(OutboundItemVO outboundItemVO, Boolean posNegFlag) {
+        //region  反写出库明细
+        if (outboundItemVO.getSOutItemId() != null) {
+            OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getSOutItemId());
+            //region  校验可退数量
+            if (outboundItemResponse.getOutQty().compareTo(outboundItemVO.getOutQty()) < 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getCode(),
+                        ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getMessage());
+            }
+            //endregion
+            //region  赋值修改
+            OutboundItem outboundItemPri = new OutboundItem();
+            outboundItemPri.setItemId(outboundItemVO.getSOutItemId());
+            if (posNegFlag) {
+                outboundItemPri.setReturnQty(outboundItemVO.getOutingQty().negate());
+                outboundItemPri.setReturnAmt(outboundItemVO.getOutingAmt().negate());
+            } else {
+                outboundItemPri.setReturnQty(outboundItemVO.getOutingQty());
+                outboundItemPri.setReturnAmt(outboundItemVO.getOutingAmt());
+            }
+            outboundItemMapper.updateReturnMessage(outboundItemPri);
+            //endregion
+        }
+        //endregion
+
+        //region  反写订单明细
+        if (outboundItemVO.getSOrderItemId() != null) {
+            OrderItemResponse orderItemResponse = orderItemMapper.selectById(outboundItemVO.getSOrderItemId());
+            //region  校验可退数量
+            if (orderItemResponse.getOutQty().compareTo(outboundItemVO.getOutQty()) < 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getCode(),
+                        ErrorCodeEnum.OUTBOUND_ITEM_RETURN_QTY_ERROR.getMessage());
+            }
+            //endregion
+            //region  赋值修改
+            OrderItem orderItem = new OrderItem();
+            orderItem.setItemId(outboundItemVO.getSOutItemId());
+            if (posNegFlag) {
+                orderItem.setReturnQty(outboundItemVO.getOutingQty().negate());
+                orderItem.setReturnAmt(outboundItemVO.getOutingAmt().negate());
+            } else {
+                orderItem.setReturnQty(outboundItemVO.getOutingQty());
+                orderItem.setReturnAmt(outboundItemVO.getOutingAmt());
+            }
+            orderItemMapper.updateReturnMessage(orderItem);
+            //endregion
+        }
+        //endregion
+    }
+
 
     /**
      * @desc : 销售退货出库新建
@@ -81,6 +225,13 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
      */
     @Transactional(rollbackFor = {Exception.class})
     public ResponseResultVO<?> saleReturnOutboundInsert(OutboundVO outboundVO) {
+
+        //region 如果没有客户id,要新建
+        if (outboundVO.getCusId() == null) {
+            outboundVO = outCommon.insertCustomer(outboundVO);
+        }
+        //endregion
+
         //region  查询当前公司的系统参数  自动办理信息  并赋值
         Map<String, Object> map = new HashMap<>();
         map.put("cpId", outboundVO.getCpId());
@@ -94,6 +245,10 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         }
         //endregion
 
+        //region 原入库单  原销售订单
+        this.updatePrimaryTotal(outboundVO, true);
+        //endregion
+
         //region  总单
         //获取 id/单号
         Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.PURCASERETURNINBOUND.getName(), false);
@@ -123,16 +278,19 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                     .setOutAmt(BigDecimal.ZERO)
             ;
         }
-
         //实体转换
         Outbound outbound = outboundConvert.convertToPo(outboundVO);
         outboundMapper.insert(outbound);
         //endregion
 
+        //region  新建多业务归属
+        outCommon.insertMultiOwner(outboundVO);
+        //endregion
+
         //region 明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
@@ -140,6 +298,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
             outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.SALE_RETURN.getValue());
             //endregion
+            //region  新建明细
             //总单id
             outboundItemVO.setOutId(outboundVO.getOutId());
             //出库类型
@@ -166,10 +325,13 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             outboundItemMapper.insert(outboundItem);
             //endregion
 
+            //region  反写出库明细 反写订单明细
+            this.updatePrimaryDetail(outboundItemVO, true);
+            //endregion
         }
         //endregion
 
-        //region  已出库  账款
+        //region  账款
         if (Constant.OutStatus.YICHUKU.getName().equals(outboundVO.getOutStatus())) {
             accountService.accReceivable(outboundVO.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
         }
@@ -208,11 +370,23 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             }
             //endregion
 
+            //region  反写出库总单 反写订单总单
+            this.updatePrimaryTotal(outboundVO, false);
+            //endregion
+
             //region 修改明细
             List<OutboundItemVO> itemList = outboundVO.getItemList();
             for (OutboundItemVO outboundItemVO : itemList) {
                 //根据id查询
                 OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
+
+                //region  不能新建
+                if(outboundItemVO.getSOrderItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
                 //region 将库存需要的参数赋值
                 outboundItemVO.setInventoryType(Constant.InventoryType.OUTBOUND.getName());
                 outboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.SALE_RETURN.getValue());
@@ -224,7 +398,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                 outboundItemVO.setOutAmt(outboundItemVO.getOutAmt());
                 //endregion
 
-                //赋值
+                //region 明细赋值
                 OutboundItem outboundItem = new OutboundItem();
                 outboundItem.setItemId(outboundItemVO.getItemId());
                 outboundItem.setOutQty(outboundItemVO.getOutingQty());
@@ -236,6 +410,11 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                         new UpdateWrapper<OutboundItem>().lambda()
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
+                //endregion
+
+                //region  反写出库明细 反写订单明细
+                this.updatePrimaryDetail(outboundItemVO, false);
+                //endregion
             }
             //endregion
 
@@ -270,7 +449,14 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             //region 修改明细
             List<OutboundItemVO> itemList = outboundVO.getItemList();
             for (OutboundItemVO outboundItemVO : itemList) {
-                //赋值
+                //region  不能新建
+                if(outboundItemVO.getSOrderItemId()==null){
+                    throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                            ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+                }
+                //endregion
+
+                //region 赋值明细
                 OutboundItem outboundItem = new OutboundItem();
                 outboundItem.setItemId(outboundItemVO.getItemId());
                 outboundItem.setOutingQty(outboundItemVO.getOutingQty());
@@ -280,6 +466,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                         new UpdateWrapper<OutboundItem>().lambda()
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
+                //endregion
             }
             //endregion
             //region  修改出库总单
@@ -321,6 +508,11 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
             }
             //endregion
 
+            //region  反写出库总单 反写订单总单
+            OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
+            this.updatePrimaryTotal(outboundVO, false);
+            //endregion
+
             //region 修改明细
             for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
                 //region 将库存需要的参数赋值
@@ -330,7 +522,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                 outboundItemResponse.setOutAmt(outboundItemResponse.getOutAmt().negate());
                 //endregion
 
-                //赋值
+                //region 赋值明细
                 OutboundItem outboundItem = new OutboundItem();
                 outboundItem.setItemId(outboundItemResponse.getItemId());
                 outboundItem.setFlgValid(false);
@@ -339,6 +531,12 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                         new UpdateWrapper<OutboundItem>().lambda()
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
+                //endregion
+
+                //region  反写出库明细 反写订单明细
+                OutboundItemVO outboundItemVO = outboundItemConvert.convertResToVO(outboundItemResponse);
+                this.updatePrimaryDetail(outboundItemVO, false);
+                //endregion
             }
             //endregion
 
@@ -369,9 +567,15 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         //region 自动办理参数false  出库中编辑
         //自动办理标识为false 并且 自动办理参数为false  出库中
         if (!outboundResponse.getFlgAutoHandle() && Constant.FlgHandleSetting.FALSE.getValue().equals(outboundResponse.getFlgHandleSetting())) {
+
+            //region  反写出库总单 反写订单总单
+            OutboundVO outboundVO = outboundConvert.convertResToVO(outboundResponse);
+            this.updatePrimaryTotal(outboundVO, false);
+            //endregion
+
             //region 修改明细
             for (OutboundItemResponse outboundItemResponse : outboundItemResponseList) {
-                //赋值
+                //region 赋值明细
                 OutboundItem outboundItem = new OutboundItem();
                 outboundItem.setItemId(outboundItemResponse.getItemId());
                 outboundItem.setOutingQty(BigDecimal.ZERO);
@@ -381,6 +585,12 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
                         new UpdateWrapper<OutboundItem>().lambda()
                                 .eq(OutboundItem::getItemId, UUID.fromString(outboundItem.getItemId()))
                 );
+                //endregion
+
+                //region  反写出库明细 反写订单明细
+                OutboundItemVO outboundItemVO = outboundItemConvert.convertResToVO(outboundItemResponse);
+                this.updatePrimaryDetail(outboundItemVO, false);
+                //endregion
             }
             //endregion
 
@@ -415,15 +625,22 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         //region 编辑明细
         //校验明细
         if (outboundVO.getItemList().size() == 0) {
-            return ResponseResultUtil.error(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
                     ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
         }
         for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
+            //region  不能新建
+            if(outboundItemVO.getSOrderItemId()==null){
+                throw new BaseBusinessException(ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getCode(),
+                        ErrorCodeEnum.ITEMS_THAT_ARE_NOT_AVAILABLE_HANDLE.getMessage());
+            }
+            //endregion
+
             //查询原单
             OutboundItemResponse outboundItemResponse = outboundItemMapper.selectById(outboundItemVO.getItemId());
             //region 校验数量是否超出
-            if (outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutQty()) > 0) {
-                return ResponseResultUtil.error(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(),
+            if (outboundItemVO.getOutingQty().compareTo(outboundItemResponse.getOutingQty()) > 0) {
+                throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getCode(),
                         ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITYIN_THE_WAREHOUSE.getMessage());
             }
             //endregion
@@ -491,7 +708,6 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
         );
         //endregion
 
-
         //region 入账
         accountService.reversePayable(outboundResponse.getOutId(), Constant.InventoryDocCode.OUTBOUND.getTableName());
         //endregion
@@ -717,7 +933,7 @@ public class OutboundSaleReturnService extends BaseService<Outbound> {
 //        OutboundResponse outboundResponse = outboundMapper.selectMessageByOtherQuery(new OutboundQuery().setOutId(id).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName()));
 //        //单据不存在
 //        if (outboundResponse == null) {
-//            return ResponseResultUtil.error(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getCode(),
+//            throw new BaseBusinessException(ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getCode(),
 //                    ErrorCodeEnum.THERE_ORDER_IS_NOT_CAN_OUTBOUND_QUANTITY.getMessage());
 //        }
 //        dataInfo.put("data", outboundResponse);

+ 4 - 4
src/main/java/com/dk/mdm/service/mac/AccountService.java

@@ -264,8 +264,8 @@ public class AccountService extends BaseService<Account> {
             }
 
             accountItemForUpdate = accountItemMapper.selectByIdForUpdate(outbound.getReceivableId());
-            // 当前单据已核销
-            if (accountItemForUpdate.getAmtShould().compareTo(accountItemForUpdate.getAmtResidue()) != 0) {
+            // 如果核销金额不为0,说明当前单据已核销
+            if (accountItemForUpdate.getAmtHandle().compareTo(BigDecimal.ZERO) != 0) {
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISHANDLE.getMessage());
             }
 
@@ -359,8 +359,8 @@ public class AccountService extends BaseService<Account> {
             }
 
             accountItemForUpdate = accountItemMapper.selectByIdForUpdate(inbound.getReceivableId());
-            // 当前单据已核销
-            if (accountItemForUpdate.getAmtShould().compareTo(accountItemForUpdate.getAmtResidue()) != 0) {
+            // 如果核销金额不为0,说明当前单据已核销
+            if (accountItemForUpdate.getAmtHandle().compareTo(BigDecimal.ZERO) != 0) {
                 throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISHANDLE.getMessage());
             }
 

+ 11 - 11
src/main/java/com/dk/mdm/service/mac/RecPayService.java

@@ -119,7 +119,7 @@ public class RecPayService extends BaseService<RecPay> {
         List<RecPayItemResponse> recPayItem = recPayItemMapper.selectByCond(new RecPayItemQuery().setRpId(id));
         result.put("recPayItem", recPayItem);
 
-        // 收款明细
+        // 应收核销明细
         List<RecPayHandleItemResponse> recPayHandleItem = recPayHandleItemMapper.selectByCond(new RecPayHandleItemQuery().setRpId(id));
         result.put("recPayHandleItem", recPayHandleItem);
 
@@ -357,7 +357,7 @@ public class RecPayService extends BaseService<RecPay> {
     }
 
     /**
-     * @desc : 新建应收收款(收款+冲应收)
+     * @desc : 新建应收核销(收款+核销应收)
      * @author : 付斌
      * @date : 2023/1/9 10:49
      */
@@ -434,15 +434,15 @@ public class RecPayService extends BaseService<RecPay> {
                 // 账款明细的核销金额和优惠金额
                 AccountItem accountItemForUpdate = accountItemMapper.selectByIdForUpdate(recPayHandleItem.getAccItemId());
                 AccountItem accountItemUpdate = new AccountItem();
-                // 核销金额加优惠金额,超出应收金额
-                if (accountItemForUpdate.getAmtResidue().compareTo(recPayHandleItem.getAmtReceivableHandle().add(recPayHandleItem.getAmtWaive())) == -1) {
+                // 核销金额,超出剩余应收金额
+                if (accountItemForUpdate.getAmtResidue().compareTo(recPayHandleItem.getAmtReceivableHandle()) == -1) {
                     throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.AMT_HANDLE_NO_LESS_AMT_SHOULD.getMessage());
                 }
                 accountItemUpdate.setAmtHandle(accountItemForUpdate.getAmtHandle().add(recPayHandleItem.getAmtReceivableHandle()))
                         .setAmtWaive(accountItemForUpdate.getAmtWaive().add(recPayHandleItem.getAmtWaive()))
                         .setItemId(recPayHandleItem.getAccItemId());
-                // 剩余金额 = 应收金额-应收收款金额-优惠金额
-                accountItemUpdate.setAmtResidue(accountItemForUpdate.getAmtShould().subtract(accountItemUpdate.getAmtHandle()).subtract(accountItemUpdate.getAmtWaive()));
+                // 剩余金额 = 应收金额-应收收款金额
+                accountItemUpdate.setAmtResidue(accountItemForUpdate.getAmtShould().subtract(accountItemUpdate.getAmtHandle()));
                 accountItemService.updateByUuid(accountItemUpdate);
             }
 
@@ -460,8 +460,8 @@ public class RecPayService extends BaseService<RecPay> {
             accountUpdate.setReceivableHandle(accountForUpdate.getReceivableHandle().add(recPayHandleItemVO.getAmtReceivableHandle()))// 总应收收款金额
                     .setReceivableWaive(accountForUpdate.getReceivableWaive().add(recPayHandleItemVO.getAmtWaive()))//  总应收优惠金额
                     .setObjectId(accountForUpdate.getObjectId());
-            // 剩余应收 = 总应收账款-总应收收款金额-总应收优惠金额
-            accountUpdate.setReceivableResidue(accountForUpdate.getReceivable().subtract(accountUpdate.getReceivableHandle()).subtract(accountUpdate.getReceivableWaive()));
+            // 剩余应收 = 总应收账款-总应收收款金额
+            accountUpdate.setReceivableResidue(accountForUpdate.getReceivable().subtract(accountUpdate.getReceivableHandle()));
             // 可退金额 = 总收款金额-总应收收款金额+总应收优惠金额
             accountUpdate.setReceiptResidue(accountForUpdate.getReceipt().subtract(accountUpdate.getReceivableHandle()).add(accountUpdate.getReceivableWaive()));
 
@@ -507,14 +507,14 @@ public class RecPayService extends BaseService<RecPay> {
             accountItemService.updateByUuid(accountItemUpdate);
         }
 
-        // 把总帐上的钱加回来 todo
+        // 把总帐上的钱加回来
         Account accountForUpdate = accountMapper.selectByIdForUpdate(recPayForUpdate.getObjectId());
         Account accountUpdate = new Account();
         accountUpdate.setReceivableHandle(accountForUpdate.getReceivableHandle().subtract(recPayForUpdate.getSumAmtReceivableHandle()))// 总应收收款金额
                 .setReceivableWaive(accountForUpdate.getReceivableWaive().subtract(recPayForUpdate.getSumWaiveAmt()))//  总应收优惠金额
                 .setObjectId(accountForUpdate.getObjectId());
-        // 剩余应收 = 总应收账款-总应收收款金额-总应收优惠金额
-        accountUpdate.setReceivableResidue(accountForUpdate.getReceivable().subtract(accountUpdate.getReceivableHandle()).subtract(accountUpdate.getReceivableWaive()));
+        // 剩余应收 = 总应收账款-总应收收款金额
+        accountUpdate.setReceivableResidue(accountForUpdate.getReceivable().subtract(accountUpdate.getReceivableHandle()));
         // 可退金额 = 总收款金额-总应收收款金额+总应收优惠金额
         accountUpdate.setReceiptResidue(accountForUpdate.getReceipt().subtract(accountUpdate.getReceivableHandle()).add(accountUpdate.getReceivableWaive()));