Prechádzať zdrojové kódy

入库(其他入库,采购入库,销售退货入库)新建,办理,撤销

koushanshan 2 rokov pred
rodič
commit
bf17bb3b43

+ 2 - 0
src/main/java/com/dk/mdm/controller/ivt/InboundController.java

@@ -8,6 +8,7 @@ import com.dk.common.service.BaseService;
 import com.dk.mdm.model.query.ivt.InboundQuery;
 import com.dk.mdm.model.response.ivt.InboundResponse;
 
+import com.dk.mdm.model.vo.ivt.InboundVO;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -43,4 +44,5 @@ public class InboundController{
     public ResponseResultVO<PageList<InboundResponse>> selectInboundAndItem(@RequestBody InboundQuery inboundQuery) {
         return inboundService.selectInboundAndItem(inboundQuery);
     }
+
 }

+ 93 - 0
src/main/java/com/dk/mdm/controller/ivt/InboundOtherController.java

@@ -0,0 +1,93 @@
+package com.dk.mdm.controller.ivt;
+
+
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.query.ivt.InboundQuery;
+import com.dk.mdm.model.response.ivt.InboundResponse;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+import com.dk.mdm.service.ivt.InboundOtherService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Api(tags = "其他入库单API接口")
+@RestController
+@RequestMapping("/ivt/inbound_other")
+public class InboundOtherController {
+
+    public BaseService<Inbound> getService() {
+        return inboundOtherService;
+    }
+
+    @Autowired
+    private InboundOtherService inboundOtherService;
+
+
+
+
+    /**
+     * @desc   : 条件查询
+     * @date   : 2024/3/7 14:09
+     * @author : 寇珊珊
+     */
+    @ApiOperation(value = "条件查询", notes = "条件查询")
+    @PostMapping({"select_inbound_and_item"})
+    public ResponseResultVO<PageList<InboundResponse>> selectInboundAndItem(@RequestBody InboundQuery inboundQuery) {
+        return inboundOtherService.selectInboundAndItem(inboundQuery);
+    }
+
+
+    /**
+     * @desc   : 其他入库新建
+     * @date   : 2024/3/7 14:00
+     * @author : 寇珊珊
+     */
+    @ApiOperation(
+            value = "其他入库新建",
+            notes = "其他入库新建"
+    )
+    @PostMapping({"other_inbound_insert"})
+    public ResponseResultVO<?> otherInboundInsert(@RequestBody InboundVO inboundVO) {
+        return inboundOtherService.otherInboundInsert(inboundVO);
+    }
+
+
+    /**
+     * @desc   : 其他入库办理
+     * @date   : 2024/3/7 15:34
+     * @author : 寇珊珊
+     */
+    @ApiOperation(
+            value = "其他入库办理",
+            notes = "其他入库办理"
+    )
+    @PostMapping({"other_handle_inbound"})
+    public ResponseResultVO<?> otherHandleInbound(@RequestBody InboundVO inboundVO) {
+        return inboundOtherService.otherHandleInbound(inboundVO);
+    }
+
+
+
+    /**
+     * @desc   : 其它入库撤销
+     * @date   : 2024/3/7 17:06
+     * @author : 寇珊珊
+     */
+    @ApiOperation(
+            value = "其它入库撤销",
+            notes = "其它入库撤销"
+    )
+    @PostMapping({"other_inbound_cancel"})
+    public ResponseResultVO<?> otherInboundCancel(@RequestBody InboundVO inboundVO) {
+        return inboundOtherService.otherInboundCancel(inboundVO);
+    }
+
+}

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

@@ -0,0 +1,80 @@
+package com.dk.mdm.controller.ivt;
+
+
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.query.ivt.InboundQuery;
+import com.dk.mdm.model.response.ivt.InboundResponse;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+import com.dk.mdm.service.ivt.InboundOtherService;
+import com.dk.mdm.service.ivt.InboundPurchaseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Api(tags = "采购入库单API接口")
+@RestController
+@RequestMapping("/ivt/inbound_purchase")
+public class InboundPurchaseController {
+
+    public BaseService<Inbound> getService() {
+        return inheritedPurchaseService;
+    }
+
+    @Autowired
+    private InboundPurchaseService inheritedPurchaseService;
+
+
+
+
+    /**
+     * @desc   : 条件查询
+     * @date   : 2024/3/7 14:09
+     * @author : 寇珊珊
+     */
+    @ApiOperation(value = "条件查询", notes = "条件查询")
+    @PostMapping({"select_inbound_and_item"})
+    public ResponseResultVO<PageList<InboundResponse>> selectInboundAndItem(@RequestBody InboundQuery inboundQuery) {
+        return inheritedPurchaseService.selectInboundAndItem(inboundQuery);
+    }
+
+
+
+    /**
+     * @desc   : 采购入库办理
+     * @date   : 2024/3/7 15:34
+     * @author : 寇珊珊
+     */
+    @ApiOperation(
+            value = "采购入库办理",
+            notes = "采购入库办理"
+    )
+    @PostMapping({"purchase_handle_inbound"})
+    public ResponseResultVO<?> purchaseHandleInbound(@RequestBody InboundVO inboundVO) {
+        return inheritedPurchaseService.purchaseHandleInbound(inboundVO);
+    }
+
+
+
+    /**
+     * @desc   : 采购入库撤销
+     * @date   : 2024/3/7 17:06
+     * @author : 寇珊珊
+     */
+    @ApiOperation(
+            value = "采购入库撤销",
+            notes = "采购入库撤销"
+    )
+    @PostMapping({"purchase_inbound_cancel"})
+    public ResponseResultVO<?> purchaseInboundCancel(@RequestBody InboundVO inboundVO) {
+        return inheritedPurchaseService.purchaseInboundCancel(inboundVO);
+    }
+
+}

+ 78 - 0
src/main/java/com/dk/mdm/controller/ivt/InboundSaleReturnController.java

@@ -0,0 +1,78 @@
+package com.dk.mdm.controller.ivt;
+
+
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.query.ivt.InboundQuery;
+import com.dk.mdm.model.response.ivt.InboundResponse;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+import com.dk.mdm.service.ivt.InboundPurchaseService;
+import com.dk.mdm.service.ivt.InboundSaleReturnService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Api(tags = "销售退货入库单API接口")
+@RestController
+@RequestMapping("/ivt/inbound_sale_return")
+public class InboundSaleReturnController {
+
+    public BaseService<Inbound> getService() {
+        return inboundSaleReturnService;
+    }
+
+    @Autowired
+    private InboundSaleReturnService inboundSaleReturnService;
+
+
+
+    /**
+     * @desc   : 条件查询
+     * @date   : 2024/3/7 14:09
+     * @author : 寇珊珊
+     */
+    @ApiOperation(value = "条件查询", notes = "条件查询")
+    @PostMapping({"select_inbound_and_item"})
+    public ResponseResultVO<PageList<InboundResponse>> selectInboundAndItem(@RequestBody InboundQuery inboundQuery) {
+        return inboundSaleReturnService.selectInboundAndItem(inboundQuery);
+    }
+
+
+    /**
+     * @desc   : 销售退货入库办理
+     * @date   : 2024/3/7 15:34
+     * @author : 寇珊珊
+     */
+    @ApiOperation(
+            value = "销售退货入库办理",
+            notes = "销售退货入库办理"
+    )
+    @PostMapping({"sale_return_handle_inbound"})
+    public ResponseResultVO<?> saleReturnHandleInbound(@RequestBody InboundVO inboundVO) {
+        return inboundSaleReturnService.saleReturnHandleInbound(inboundVO);
+    }
+
+
+
+    /**
+     * @desc   : 销售退货入库撤销
+     * @date   : 2024/3/7 17:06
+     * @author : 寇珊珊
+     */
+    @ApiOperation(
+            value = "销售退货入库撤销",
+            notes = "销售退货入库撤销"
+    )
+    @PostMapping({"sale_return_inbound_cancel"})
+    public ResponseResultVO<?> saleReturnInboundCancel(@RequestBody InboundVO inboundVO) {
+        return inboundSaleReturnService.saleReturnInboundCancel(inboundVO);
+    }
+
+}

+ 23 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/InboundConvert.java

@@ -0,0 +1,23 @@
+package com.dk.mdm.infrastructure.convert.ivt;
+
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.pojo.ivt.IntoReturn;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+import com.dk.mdm.model.vo.ivt.IntoReturnVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : 入库实体类型转换
+ * @date   : 2024/3/7 14:30
+ * @author : 寇珊珊
+ */
+@Mapper(componentModel = "spring")
+public interface InboundConvert {
+
+    /**
+     * @desc   : VO转pojo
+     * @date   : 2024/3/7 14:31
+     * @author : 寇珊珊
+     */
+    Inbound convertToPo(InboundVO inboundVO);
+}

+ 23 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/InboundItemConvert.java

@@ -0,0 +1,23 @@
+package com.dk.mdm.infrastructure.convert.ivt;
+
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.pojo.ivt.InboundItem;
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : 入库明细实体类型转换
+ * @date   : 2024/3/7 14:30
+ * @author : 寇珊珊
+ */
+@Mapper(componentModel = "spring")
+public interface InboundItemConvert {
+
+    /**
+     * @desc   : VO转pojo
+     * @date   : 2024/3/7 14:31
+     * @author : 寇珊珊
+     */
+    InboundItem convertToPo(InboundItemVO inboundItemVO);
+}

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

@@ -2,13 +2,33 @@ package com.dk.mdm.mapper.ivt;
 
 import com.dk.mdm.model.pojo.ivt.InboundItem;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.query.ivt.InboundItemQuery;
+import com.dk.mdm.model.response.ivt.InboundItemResponse;
+import com.dk.mdm.model.response.ivt.InboundResponse;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
 *  入库明细 Mapper
 */
 @Repository
 public interface InboundItemMapper extends BaseMapper<InboundItem>{
-	
+
+    /**
+     * @desc   : 条件查询
+     * @date   : 2024/3/7 17:28
+     * @author : 寇珊珊
+     */
+    List<InboundItemResponse> selectByCond(InboundItemQuery inboundItemQuery);
+
+    /**
+     * @desc   : 根据id查询
+     * @date   : 2024/3/9 9:14
+     * @author : 寇珊珊
+     */
+    InboundResponse selectById(@Param("itemId") String itemId);
+
 }
 

+ 63 - 82
src/main/java/com/dk/mdm/mapper/ivt/InboundItemMapper.xml

@@ -8,6 +8,15 @@
         item_id, into_id, into_type, from_id, from_item_id, item_index, sku_id, price_into, non_std_code, into_status, intoing_qty, intoing_amt, into_qty, into_amt, return_qty, return_amt, remarks, inv_id, cost_price, cost_amt, out_qty, inv_qty, flg_valid, cp_id, op_create_time, op_create_user_id, op_update_time, op_update_user_id, op_app_code, op_timestamp, op_db_user
     </sql>
 
+    <!-- response通用查询列 -->
+    <sql id="Base_Column_List_Response">
+        tpii.item_id, tpii.into_id, tpii.into_type, tpii.from_id, tpii.from_item_id, tpii.item_index, tpii.sku_id, tpii.price_into,
+        tpii.non_std_code, tpii.into_status, tpii.intoing_qty, tpii.intoing_amt, tpii.into_qty, tpii.into_amt, tpii.return_qty,
+        tpii.return_amt, tpii.remarks, tpii.inv_id, tpii.cost_price, tpii.cost_amt, tpii.out_qty, tpii.inv_qty, tpii.flg_valid,
+        tpii.cp_id
+    </sql>
+
+
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.ivt.InboundItem">
         <id column="item_id" property="itemId"/>
@@ -43,98 +52,70 @@
                 <result column="op_db_user" property="opDbUser"/>
     </resultMap>
 
+
+    <!-- response查询映射结果 -->
+    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.ivt.InboundItemResponse">
+        <id column="item_id" property="itemId"/>
+        <result column="into_id" property="intoId" typeHandler="UuidTypeHandler"/>
+        <result column="into_type" property="intoType"/>
+        <result column="from_id" property="fromId" typeHandler="UuidTypeHandler"/>
+        <result column="from_item_id" property="fromItemId" typeHandler="UuidTypeHandler"/>
+        <result column="item_index" property="itemIndex"/>
+        <result column="sku_id" property="skuId" typeHandler="UuidTypeHandler"/>
+        <result column="price_into" property="priceInto"/>
+        <result column="non_std_code" property="nonStdCode"/>
+        <result column="into_status" property="intoStatus"/>
+        <result column="intoing_qty" property="intoingQty"/>
+        <result column="intoing_amt" property="intoingAmt"/>
+        <result column="into_qty" property="intoQty"/>
+        <result column="into_amt" property="intoAmt"/>
+        <result column="return_qty" property="returnQty"/>
+        <result column="return_amt" property="returnAmt"/>
+        <result column="remarks" property="remarks"/>
+        <result column="inv_id" property="invId" typeHandler="UuidTypeHandler"/>
+        <result column="cost_price" property="costPrice"/>
+        <result column="cost_amt" property="costAmt"/>
+        <result column="out_qty" property="outQty"/>
+        <result column="inv_qty" property="invQty"/>
+        <result column="flg_valid" property="flgValid"/>
+        <result column="cp_id" property="cpId"/>
+    </resultMap>
+
     <!-- 通用条件列 -->
     <sql id="Condition">
         <where>
             <if test="intoId != null and intoId != ''">
-                AND into_id = #{intoId}
+                AND tpii.into_id = #{intoId}
             </if>
             <if test="intoType != null and intoType != ''">
-                AND into_type = #{intoType}
+                AND tpii.into_type = #{intoType}
             </if>
             <if test="fromId != null and fromId != ''">
-                AND from_id = #{fromId}
+                AND tpii.from_id = #{fromId}
             </if>
             <if test="fromItemId != null and fromItemId != ''">
-                AND from_item_id = #{fromItemId}
+                AND tpii.from_item_id = #{fromItemId}
             </if>
             <if test="itemIndex != null">
-                AND item_index = #{itemIndex}
+                AND tpii.item_index = #{itemIndex}
             </if>
             <if test="skuId != null and skuId != ''">
-                AND sku_id = #{skuId}
+                AND tpii.sku_id = #{skuId}
             </if>
             <if test="priceInto != null">
-                AND price_into = #{priceInto}
+                AND tpii.price_into = #{priceInto}
             </if>
             <if test="nonStdCode != null and nonStdCode != ''">
-                AND non_std_code = #{nonStdCode}
-            </if>
-            <if test="intoStatus != null and intoStatus != ''">
-                AND into_status = #{intoStatus}
-            </if>
-            <if test="intoingQty != null">
-                AND intoing_qty = #{intoingQty}
-            </if>
-            <if test="intoingAmt != null">
-                AND intoing_amt = #{intoingAmt}
-            </if>
-            <if test="intoQty != null">
-                AND into_qty = #{intoQty}
-            </if>
-            <if test="intoAmt != null">
-                AND into_amt = #{intoAmt}
-            </if>
-            <if test="returnQty != null">
-                AND return_qty = #{returnQty}
-            </if>
-            <if test="returnAmt != null">
-                AND return_amt = #{returnAmt}
-            </if>
-            <if test="remarks != null and remarks != ''">
-                AND remarks = #{remarks}
+                AND tpii.non_std_code = #{nonStdCode}
             </if>
             <if test="invId != null and invId != ''">
-                AND inv_id = #{invId}
-            </if>
-            <if test="costPrice != null">
-                AND cost_price = #{costPrice}
-            </if>
-            <if test="costAmt != null">
-                AND cost_amt = #{costAmt}
-            </if>
-            <if test="outQty != null">
-                AND out_qty = #{outQty}
-            </if>
-            <if test="invQty != null">
-                AND inv_qty = #{invQty}
+                AND tpii.inv_id = #{invId}
             </if>
             <if test="flgValid != null">
-                AND flg_valid = #{flgValid}
+                AND tpii.flg_valid = #{flgValid}
             </if>
             <if test="cpId != null">
-                AND cp_id = #{cpId}
-            </if>
-            <if test="opCreateTime != null">
-                AND op_create_time = #{opCreateTime}
-            </if>
-            <if test="opCreateUserId != null and opCreateUserId != ''">
-                AND op_create_user_id = #{opCreateUserId}
-            </if>
-            <if test="opUpdateTime != null">
-                AND op_update_time = #{opUpdateTime}
-            </if>
-            <if test="opUpdateUserId != null and opUpdateUserId != ''">
-                AND op_update_user_id = #{opUpdateUserId}
-            </if>
-            <if test="opAppCode != null and opAppCode != ''">
-                AND op_app_code = #{opAppCode}
-            </if>
-            <if test="opTimestamp != null">
-                AND op_timestamp = #{opTimestamp}
-            </if>
-            <if test="opDbUser != null and opDbUser != ''">
-                AND op_db_user = #{opDbUser}
+                AND tpii.cp_id = #{cpId}
             </if>
         </where>
     </sql>
@@ -147,53 +128,53 @@
         </foreach>
     </sql>
 
-    <!-- 查询表t_psi_inbound_item,(条件查询+分页)列表 -->
+    <!-- 查询表dkic_b.t_psi_inbound_item,(条件查询+分页)列表 -->
     <select id="selectByCond" resultMap="BaseResultMap">
         SELECT
         <include refid="Base_Column_List"/>
-        FROM t_psi_inbound_item
+        FROM dkic_b.t_psi_inbound_item tpii
         <include refid="Condition"/>
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
             limit #{end} offset #{start}
         </if>
     </select>
 
-    <!-- 查询表t_psi_inbound_item,(条件查询)个数 -->
+    <!-- 查询表dkic_b.t_psi_inbound_item,(条件查询)个数 -->
     <select id="countByCond" resultType="Long">
         SELECT
         count(1)
-        FROM t_psi_inbound_item
+        FROM dkic_b.t_psi_inbound_item tpii
         <include refid="Condition"/>
     </select>
 
-    <!-- 根据主键查询表t_psi_inbound_item的一行数据 -->
-    <select id="selectById" resultMap="BaseResultMap">
+    <!-- 根据主键查询表dkic_b.t_psi_inbound_item的一行数据 -->
+    <select id="selectById" resultMap="BaseResultMapResponse">
         SELECT
-        <include refid="Base_Column_List"/>
-        FROM t_psi_inbound_item
-        WHERE item_id = #{itemId}::uuid
+        <include refid="Base_Column_List_Response"/>
+        FROM dkic_b.t_psi_inbound_item tpii
+        WHERE tpii.item_id = #{itemId}::uuid
     </select>
 
-    <!-- 根据主键锁定表t_psi_inbound_item的一行数据 -->
+    <!-- 根据主键锁定表dkic_b.t_psi_inbound_item的一行数据 -->
     <select id="selectByIdForUpdate" resultMap="BaseResultMap">
         SELECT
         <include refid="Base_Column_List"/>
-        FROM t_psi_inbound_item
+        FROM dkic_b.t_psi_inbound_item
         WHERE item_id = #{itemId}
         for update
     </select>
 
-    <!-- 根据主键锁定表t_psi_inbound_item的多行数据 -->
+    <!-- 根据主键锁定表dkic_b.t_psi_inbound_item的多行数据 -->
     <select id="selectByIdsForUpdate" resultMap="BaseResultMap">
         SELECT
         <include refid="Base_Column_List"/>
-        FROM t_psi_inbound_item
+        FROM dkic_b.t_psi_inbound_item
         <include refid="idsForeach"/>
         for update
     </select>
 
     <insert id="insertBatch">
-        insert into t_psi_inbound_item
+        insert into dkic_b.t_psi_inbound_item
         (
         <trim suffixOverrides=",">
             into_id,

+ 13 - 2
src/main/java/com/dk/mdm/mapper/ivt/InboundMapper.java

@@ -1,9 +1,11 @@
 package com.dk.mdm.mapper.ivt;
 
-import com.dk.mdm.model.pojo.ivt.Inbound;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.pojo.ivt.Inbound;
 import com.dk.mdm.model.query.ivt.InboundQuery;
+import com.dk.mdm.model.response.ivt.InboundResponse;
 import com.dk.mdm.model.response.mst.DictionaryDataResponse;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -29,6 +31,15 @@ public interface InboundMapper extends BaseMapper<Inbound>{
      * @date : 2024/2/26 10:36
      */
     Long selectInboundAndItemCountByCond(InboundQuery inboundQuery);
-	
+
+
+    /**
+     * @desc   : 根据id查询
+     * @date   : 2024/3/9 9:14
+     * @author : 寇珊珊
+     */
+    InboundResponse selectById(@Param("intoId") String intoId);
+
+
 }
 

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

@@ -6,11 +6,26 @@
     <!-- 通用查询列 -->
     <sql id="Base_Column_List">
         into_id
-        , into_no, into_type, from_id, from_no, org_id, staff_id, cus_id, sup_id, into_status, intoing_qty, intoing_amt, into_qty, into_amt, return_qty, return_amt, into_date, remarks, annex_paths, make_staff, make_time, receivable_id, payable_id, flg_valid, cp_id, op_create_time, op_create_user_id, op_update_time, op_update_user_id, op_app_code, op_timestamp, op_db_user
+        , into_no, into_type, from_id, from_no, org_id, staff_id, cus_id, sup_id,
+        into_status, intoing_qty, intoing_amt, into_qty, into_amt, return_qty,
+        return_amt, into_date, remarks, annex_paths, make_staff, make_time,
+        receivable_id, payable_id, flg_valid, cp_id, op_create_time, op_create_user_id,
+        op_update_time, op_update_user_id, op_app_code, op_timestamp, op_db_user,wh_id
     </sql>
 
+
+    <!-- response通用查询列 -->
+    <sql id="Base_Column_List_Response">
+        tpi.into_id, tpi.into_no, tpi.into_type, tpi.from_id, tpi.from_no, tpi.org_id, tpi.staff_id,
+        tpi.cus_id, tpi.sup_id, tpi.into_status, tpi.intoing_qty, tpi.intoing_amt, tpi.into_qty,
+        tpi.into_amt, tpi.return_qty, tpi.return_amt, tpi.into_date, tpi.remarks, tpi.annex_paths,
+        tpi.make_staff, tpi.make_time, tpi.receivable_id, tpi.payable_id, tpi.flg_valid, tpi.cp_id,
+        tpi.wh_id
+    </sql>
+
+
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.dk.mdm.model.response.ivt.InboundResponse">
+    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.ivt.Inbound">
         <id column="into_id" property="intoId"/>
         <result column="into_no" property="intoNo"/>
         <result column="into_type" property="intoType"/>
@@ -45,6 +60,34 @@
         <result column="op_db_user" property="opDbUser"/>
     </resultMap>
 
+    <!-- response查询映射结果 -->
+    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.ivt.InboundResponse">
+        <id column="into_id" property="intoId"/>
+        <result column="into_no" property="intoNo"/>
+        <result column="into_type" property="intoType"/>
+        <result column="from_id" property="fromId" typeHandler="UuidTypeHandler"/>
+        <result column="from_no" property="fromNo"/>
+        <result column="org_id" property="orgId" typeHandler="UuidTypeHandler"/>
+        <result column="staff_id" property="staffId" typeHandler="UuidTypeHandler"/>
+        <result column="cus_id" property="cusId" typeHandler="UuidTypeHandler"/>
+        <result column="sup_id" property="supId" typeHandler="UuidTypeHandler"/>
+        <result column="into_status" property="intoStatus"/>
+        <result column="intoing_qty" property="intoingQty"/>
+        <result column="intoing_amt" property="intoingAmt"/>
+        <result column="into_qty" property="intoQty"/>
+        <result column="into_amt" property="intoAmt"/>
+        <result column="return_qty" property="returnQty"/>
+        <result column="return_amt" property="returnAmt"/>
+        <result column="into_date" property="intoDate" typeHandler="TimestampTypeHandler"/>
+        <result column="remarks" property="remarks"/>
+        <result column="annex_paths" property="annexPaths" typeHandler="JsonTypeHandler"/>
+        <result column="make_staff" property="makeStaff" typeHandler="UuidTypeHandler"/>
+        <result column="make_time" property="makeTime" typeHandler="TimestampTypeHandler"/>
+        <result column="receivable_id" property="receivableId" typeHandler="UuidTypeHandler"/>
+        <result column="payable_id" property="payableId" typeHandler="UuidTypeHandler"/>
+        <result column="flg_valid" property="flgValid"/>
+        <result column="cp_id" property="cpId"/>
+    </resultMap>
 
 
 
@@ -247,36 +290,9 @@
             <if test="supId != null and supId != ''">
                 AND tpi.sup_id = #{supId}::uuid
             </if>
-            <if test="intoStatus != null and intoStatus != ''">
-                AND tpi.into_status = #{intoStatus}
-            </if>
-            <if test="intoingQty != null">
-                AND tpi.intoing_qty = #{intoingQty}
-            </if>
-            <if test="intoingAmt != null">
-                AND tpi.intoing_amt = #{intoingAmt}
-            </if>
-            <if test="intoQty != null">
-                AND tpi.into_qty = #{intoQty}
-            </if>
-            <if test="intoAmt != null">
-                AND tpi.into_amt = #{intoAmt}
-            </if>
-            <if test="returnQty != null">
-                AND tpi.return_qty = #{returnQty}
-            </if>
-            <if test="returnAmt != null">
-                AND tpi.return_amt = #{returnAmt}
-            </if>
             <if test="intoDate != null">
                 AND tpi.into_date = #{intoDate}
             </if>
-            <if test="remarks != null and remarks != ''">
-                AND tpi.remarks = #{remarks}
-            </if>
-            <if test="annexPaths != null and annexPaths != ''">
-                AND tpi.annex_paths = #{annexPaths}
-            </if>
             <if test="makeStaff != null and makeStaff != ''">
                 AND tpi.make_staff = #{makeStaff}
             </if>
@@ -308,9 +324,9 @@
     </sql>
 
     <!-- 查询表t_psi_inbound,(条件查询+分页)列表 -->
-    <select id="selectByCond" resultMap="BaseResultMap">
+    <select id="selectByCond" resultMap="BaseResultMapResponse">
         SELECT
-        <include refid="Base_Column_List"/>
+        <include refid="Base_Column_List_Response"/>
         FROM dkic_b.t_psi_inbound
         <include refid="Condition"/>
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
@@ -327,11 +343,11 @@
     </select>
 
     <!-- 根据主键查询表t_psi_inbound的一行数据 -->
-    <select id="selectById" resultMap="BaseResultMap">
+    <select id="selectById" resultMap="BaseResultMapResponse">
         SELECT
-        <include refid="Base_Column_List"/>
-        FROM dkic_b.t_psi_inbound
-        WHERE into_id = #{intoId}::uuid
+        <include refid="Base_Column_List_Response"/>
+        FROM dkic_b.t_psi_inbound tpi
+        WHERE tpi.into_id = #{intoId}::uuid
     </select>
 
     <!-- 根据主键锁定表t_psi_inbound的一行数据 -->
@@ -477,4 +493,5 @@
         FROM dkic_b.t_psi_inbound tpi
         <include refid="Condition_Join"/>
     </select>
+
 </mapper>

+ 8 - 0
src/main/java/com/dk/mdm/mapper/pur/PurchaseItemMapper.java

@@ -3,6 +3,7 @@ package com.dk.mdm.mapper.pur;
 import com.dk.mdm.model.pojo.pur.PurchaseItem;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.pur.PurchaseItemQuery;
+import com.dk.mdm.model.response.ivt.InboundResponse;
 import com.dk.mdm.model.response.pur.PurchaseItemResponse;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -29,6 +30,13 @@ public interface PurchaseItemMapper extends BaseMapper<PurchaseItem>{
     Long countByCond(PurchaseItemQuery purchaseItemQuery);
 
     int deleteById(@Param("id") String id);
+
+    /**
+     * @desc   : 根据id查询
+     * @date   : 2024/3/9 9:14
+     * @author : 寇珊珊
+     */
+    PurchaseItemResponse selectById(@Param("itemId") String itemId);
 	
 }
 

+ 35 - 8
src/main/java/com/dk/mdm/mapper/pur/PurchaseItemMapper.xml

@@ -8,7 +8,8 @@
         item_id, pur_id, item_index, sku_id, item_qty, price_std, amt_std, price_pur, item_amt, price_discount, non_std_code, into_status, intoing_qty, intoing_amt, into_qty, into_amt, return_qty, return_amt, remarks, flg_valid, cp_id, op_create_time, op_create_user_id, op_update_time, op_update_user_id, op_app_code, op_timestamp, op_db_user
     </sql>
 
-    <sql id="Base_Column_List_1">
+    <!-- Response通用查询列 -->
+    <sql id="Base_Column_List_Response">
         tppi.item_id,
         tppi.pur_id,
         tppi.item_index,
@@ -40,7 +41,7 @@
     </sql>
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.dk.mdm.model.response.pur.PurchaseItemResponse">
+    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.pur.PurchaseItem">
         <id column="item_id" property="itemId"/>
                 <result column="pur_id" property="purId" typeHandler="UuidTypeHandler"/>
                 <result column="item_index" property="itemIndex"/>
@@ -71,6 +72,32 @@
                 <result column="op_db_user" property="opDbUser"/>
     </resultMap>
 
+    <!-- Response通用查询映射结果 -->
+    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.pur.PurchaseItemResponse">
+        <id column="item_id" property="itemId"/>
+        <result column="pur_id" property="purId" typeHandler="UuidTypeHandler"/>
+        <result column="item_index" property="itemIndex"/>
+        <result column="sku_id" property="skuId" typeHandler="UuidTypeHandler"/>
+        <result column="item_qty" property="itemQty"/>
+        <result column="price_std" property="priceStd"/>
+        <result column="amt_std" property="amtStd"/>
+        <result column="price_pur" property="pricePur"/>
+        <result column="item_amt" property="itemAmt"/>
+        <result column="price_discount" property="priceDiscount"/>
+        <result column="non_std_code" property="nonStdCode"/>
+        <result column="into_status" property="intoStatus"/>
+        <result column="intoing_qty" property="intoingQty"/>
+        <result column="intoing_amt" property="intoingAmt"/>
+        <result column="into_qty" property="intoQty"/>
+        <result column="into_amt" property="intoAmt"/>
+        <result column="return_qty" property="returnQty"/>
+        <result column="return_amt" property="returnAmt"/>
+        <result column="remarks" property="remarks"/>
+        <result column="flg_valid" property="flgValid"/>
+        <result column="cp_id" property="cpId"/>
+    </resultMap>
+
+
     <!-- 通用条件列 -->
     <sql id="Condition">
         <where>
@@ -254,9 +281,9 @@
     </sql>
 
     <!-- 查询表dkic_b.t_psi_purchase_item,(条件查询+分页)列表 -->
-    <select id="selectByCond" resultMap="BaseResultMap">
+    <select id="selectByCond" resultMap="BaseResultMapResponse">
         SELECT
-        <include refid="Base_Column_List_1"/>
+        <include refid="Base_Column_List_Response"/>
         ,tmgs.sku_code  as "skuCode"
         ,tmgs.sku_model as "skuModel"
         ,tmgs.sku_name  as "skuName"
@@ -277,11 +304,11 @@
     </select>
 
     <!-- 根据主键查询表dkic_b.t_psi_purchase_item的一行数据 -->
-    <select id="selectById" resultMap="BaseResultMap">
+    <select id="selectById" resultMap="BaseResultMapResponse">
         SELECT
-        <include refid="Base_Column_List"/>
-        FROM dkic_b.t_psi_purchase_item
-        WHERE item_id = #{itemId}::uuid
+        <include refid="Base_Column_List_Response"/>
+        FROM dkic_b.t_psi_purchase_item tppi
+        WHERE tppi.item_id = #{itemId}::uuid
     </select>
 
     <!-- 根据主键锁定表dkic_b.t_psi_purchase_item的一行数据 -->

+ 8 - 0
src/main/java/com/dk/mdm/model/pojo/ivt/Inbound.java

@@ -316,6 +316,14 @@ public class Inbound extends PageInfo<Inbound> implements Serializable {
     private String opDbUser;
 
 
+
+    @Excel(name = "入库仓库")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    @ApiModelProperty(value = "入库仓库")
+    private String whId;
+
+
+
     /*
      * 相关属性
      * @TableField(exist = false)

+ 7 - 0
src/main/java/com/dk/mdm/model/response/ivt/InboundResponse.java

@@ -321,6 +321,13 @@ public class InboundResponse extends PageInfo<InboundResponse> implements Serial
     private String opDbUser;
 
 
+    @Excel(name = "入库仓库")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    @ApiModelProperty(value = "入库仓库")
+    private String whId;
+
+
+
     /*
      * 相关属性
      * @TableField(exist = false)

+ 26 - 0
src/main/java/com/dk/mdm/model/vo/ivt/InboundVO.java

@@ -24,6 +24,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  *  入库单
@@ -320,6 +321,14 @@ public class InboundVO extends PageInfo<InboundVO> implements Serializable {
     private String opDbUser;
 
 
+
+
+    @Excel(name = "入库仓库")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    @ApiModelProperty(value = "入库仓库")
+    private String whId;
+
+
     /*
      * 相关属性
      * @TableField(exist = false)
@@ -331,6 +340,23 @@ public class InboundVO extends PageInfo<InboundVO> implements Serializable {
      */
 
 
+    /**
+     * 自动入库标识
+     */
+    @ApiModelProperty(value = "自动入库标识")
+    private Boolean automaticFlg;
+
+    @ApiModelProperty(value = "明细")
+    private List<InboundItemVO> itemList;
+
+    @ApiModelProperty(value = "大编辑标识")
+    private Boolean allEdit;
+
+    @ApiModelProperty(value = "删除明细")
+    private List<InboundItemVO> deleteItemList;
+
+
+
     private static final long serialVersionUID = 1L;
 
 }

+ 313 - 0
src/main/java/com/dk/mdm/service/ivt/InboundOtherService.java

@@ -0,0 +1,313 @@
+package com.dk.mdm.service.ivt;
+
+import com.dk.common.infrastructure.annotaiton.Pagination;
+import com.dk.common.infrastructure.constant.Constant;
+import com.dk.common.infrastructure.enums.ErrorCodeEnum;
+import com.dk.common.mapper.BaseMapper;
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultUtil;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import com.dk.mdm.infrastructure.convert.ivt.InboundConvert;
+import com.dk.mdm.infrastructure.convert.ivt.InboundItemConvert;
+import com.dk.mdm.mapper.ivt.InboundItemMapper;
+import com.dk.mdm.mapper.ivt.InboundMapper;
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.pojo.ivt.InboundItem;
+import com.dk.mdm.model.query.ivt.InboundItemQuery;
+import com.dk.mdm.model.query.ivt.InboundQuery;
+import com.dk.mdm.model.response.ivt.InboundItemResponse;
+import com.dk.mdm.model.response.ivt.InboundResponse;
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+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/7 14:11
+ * @author : 寇珊珊
+ */
+@Service
+@Transactional
+public class InboundOtherService extends BaseService<Inbound> {
+
+	@Override
+	public BaseMapper<Inbound> getRepository() {
+		return inboundMapper;
+	}
+
+	@Autowired
+	private InboundMapper inboundMapper;
+
+	@Autowired
+	private InboundConvert inboundConvert;
+
+	@Autowired
+	private InboundItemMapper inboundItemMapper;
+
+	@Autowired
+	private InboundItemConvert inboundItemConvert;
+
+	@Autowired
+	private CommonService commonService;
+
+
+	/**
+	 * @desc   : 条件查询
+	 * @date   : 2024/3/7 14:12
+	 * @author : 寇珊珊
+	 */
+	@Pagination
+	public ResponseResultVO<PageList<InboundResponse>> selectInboundAndItem(InboundQuery inboundQuery) {
+		return super.mergeListWithCount(inboundQuery, inboundMapper.selectInboundAndItem(inboundQuery),
+				inboundMapper.selectInboundAndItemCountByCond(inboundQuery));
+	}
+
+
+	/**
+	 * @desc   : 其他入库新建
+	 * @date   : 2024/3/7 14:13
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> otherInboundInsert(InboundVO inboundVO) {
+		//region  总单
+		//获取 id/单号
+		Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUND.getName(),false);
+		inboundVO.setIntoId(codeMap.get("outId").toString()).
+				setIntoNo(codeMap.get("outNote").toString());
+		//入库类型
+		inboundVO.setIntoType(Constant.IntoType.OTHER.getName());
+		//自动入库标识
+		if (inboundVO.getAutomaticFlg()) {
+			//已入库
+			inboundVO.setIntoStatus(Constant.IntoStatus.YIRUKU.getName());
+		} else {
+			//入库中
+			inboundVO.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
+		}
+		//入库状态等于已入库 更新合计入库数量/金额 = 入库中数量/入库中金额
+		if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
+			inboundVO.setIntoQty(inboundVO.getIntoingQty())
+					.setIntoAmt(inboundVO.getIntoingAmt());
+		}
+		//实体转换
+		Inbound inbound = inboundConvert.convertToPo(inboundVO);
+		inboundMapper.insert(inbound);
+		//endregion
+
+		//region 明细
+		//校验明细
+		if (inboundVO.getItemList().size() == 0) {
+			return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+					ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+		}
+		for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+			Map<String , Object> map = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUNDITEM.getName(),true);
+			//明细id
+			inboundItemVO.setItemId(map.get("outId").toString());
+			//总单id
+			inboundItemVO.setIntoId(inboundVO.getIntoId());
+			//入库类型
+			inboundItemVO.setIntoType(inboundVO.getIntoType());
+			//入库状态等于已入库 更新合计入库数量/金额 = 入库中数量/入库中金额
+			if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
+				inboundItemVO.setIntoQty(inboundItemVO.getIntoingQty())
+						.setIntoAmt(inboundItemVO.getIntoingAmt());
+			}
+			//成本单价
+			inboundItemVO.setCostPrice(inboundItemVO.getCostPrice());
+			//成本金额
+			inboundItemVO.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP));
+			//库存数量  已入库-出库
+			inboundItemVO.setInvQty(inboundItemVO.getReturnQty().subtract(inboundItemVO.getOutQty()));
+			//入库状态
+			inboundItemVO.setIntoStatus(inboundVO.getIntoStatus());
+			//实体转换
+			InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+			inboundItemMapper.insert(inboundItem);
+		}
+		//endregion
+
+		//todo 如果是已入库 调用库存  后续写库存这里补上
+		//region 库存
+
+
+		//endregion
+
+
+		return ResponseResultUtil.success(inboundVO);
+	}
+
+
+
+	/**
+	 * @desc   : 其他入库办理
+	 * @date   : 2024/3/7 15:47
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> otherHandleInbound(InboundVO inboundVO) {
+		//大编辑标识
+		if (inboundVO.getAllEdit() != null && inboundVO.getAllEdit()) {
+			//region 编辑明细
+			//校验明细
+			if (inboundVO.getItemList().size() == 0) {
+				return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+						ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+			}
+			for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+				if (inboundItemVO.getIntoId() != null) {
+					//编辑明细
+					inboundItemVO.setCostPrice(inboundItemVO.getPriceInto())
+							.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
+							.setIntoQty(inboundItemVO.getIntoingQty())
+							.setIntoAmt(inboundItemVO.getIntoingAmt());
+					//入库状态
+					String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
+					inboundItemVO.setIntoStatus(intoStatus);
+					//实体转换
+					InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+					//修改
+					inboundItemMapper.updateById(inboundItem);
+				}
+				//endregion
+
+				//region 新建明细
+				else {
+					Map<String , Object> map = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUNDITEM.getName(),true);
+					inboundItemVO
+							.setItemId(map.get("outId").toString())
+							.setIntoQty(inboundItemVO.getIntoingQty())
+							.setIntoAmt(inboundItemVO.getIntoingAmt())
+							.setIntoId(inboundVO.getIntoId())
+							.setCostPrice(inboundItemVO.getPriceInto())
+							.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
+							.setIntoType(Constant.IntoType.OTHER.getName());
+					//入库状态
+					String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
+					inboundItemVO.setIntoStatus(intoStatus);
+					//实体转换
+					InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+					//新建
+					inboundItemMapper.insert(inboundItem);
+				}
+			}
+			//endregion
+
+			//region 删除明细
+			if (inboundVO.getDeleteItemList() != null) {
+				for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
+					if (inboundItemVO.getItemId() != null) {
+						InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+						inboundItem.setFlgValid(false);
+						inboundItemMapper.updateById(inboundItem);
+					}
+				}
+			}
+			//endregion
+
+			//region 编辑总单
+			BigDecimal sumIntoQty = inboundVO.getItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+			BigDecimal sumIntoAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+			inboundVO.setIntoQty(sumIntoQty);
+			inboundVO.setIntoAmt(sumIntoAmt);
+			//已入库数量==入库中数量   入库完成
+			if(sumIntoQty.compareTo(inboundVO.getIntoQty())==0){
+				//已入库
+				inboundVO.setIntoStatus(Constant.IntoStatus.YIRUKU.getName());
+			} else {
+				//入库中
+				inboundVO.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
+			}
+			//实体转换
+			Inbound inbound = inboundConvert.convertToPo(inboundVO);
+			//修改
+			super.update(inbound);
+			//endregion
+
+			//todo 如果是已入库 调用库存  后续写库存这里补上
+			//region 修改库存
+
+			//endregion
+		}
+		return ResponseResultUtil.success(inboundVO);
+	}
+
+
+	/**
+	 * @desc   : 其它入库撤销
+	 * @date   : 2024/3/7 17:06
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> otherInboundCancel(InboundVO inboundVO) {
+		//region 总单数据信息
+		InboundResponse inboundResponse = inboundMapper.selectById(inboundVO.getIntoId());
+		Inbound inbound = new Inbound();
+		inbound.setIntoId(inboundResponse.getIntoId())
+				.setIntoDate(null)
+				.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName())
+				.setIntoQty(BigDecimal.ZERO)
+				.setIntoAmt(BigDecimal.ZERO);
+		inboundMapper.updateById(inbound);
+		//endregion
+
+		//region 明细数据
+		InboundItemQuery inboundItemQuery = new InboundItemQuery().setIntoId(inbound.getIntoId());
+		//根据总单查明细
+		List<InboundItemResponse> orderEntryItemResponsesList = inboundItemMapper.selectByCond(inboundItemQuery);
+		for (InboundItemResponse inboundItemResponse : orderEntryItemResponsesList) {
+			InboundItem inboundItem = new InboundItem();
+			inboundItem.setIntoId(inbound.getIntoId())
+					.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName())
+					.setIntoQty(BigDecimal.ZERO)
+					.setIntoAmt(BigDecimal.ZERO)
+					.setItemId(inboundItemResponse.getItemId());
+			inboundItemMapper.updateById(inboundItem);
+		}
+		//endregion
+
+		//region 修改库存
+
+		//endregion
+
+		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.RUKUZHONG.getName();
+		}
+		return intoStatus;
+	}
+	
+}

+ 407 - 0
src/main/java/com/dk/mdm/service/ivt/InboundPurchaseService.java

@@ -0,0 +1,407 @@
+package com.dk.mdm.service.ivt;
+
+import com.dk.common.infrastructure.annotaiton.Pagination;
+import com.dk.common.infrastructure.constant.Constant;
+import com.dk.common.infrastructure.enums.ErrorCodeEnum;
+import com.dk.common.mapper.BaseMapper;
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultUtil;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import com.dk.mdm.infrastructure.convert.ivt.InboundConvert;
+import com.dk.mdm.infrastructure.convert.ivt.InboundItemConvert;
+import com.dk.mdm.mapper.ivt.InboundItemMapper;
+import com.dk.mdm.mapper.ivt.InboundMapper;
+import com.dk.mdm.mapper.pur.PurchaseItemMapper;
+import com.dk.mdm.mapper.pur.PurchaseMapper;
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.pojo.ivt.InboundItem;
+import com.dk.mdm.model.pojo.pur.Purchase;
+import com.dk.mdm.model.pojo.pur.PurchaseItem;
+import com.dk.mdm.model.query.ivt.InboundItemQuery;
+import com.dk.mdm.model.query.ivt.InboundQuery;
+import com.dk.mdm.model.query.pur.PurchaseItemQuery;
+import com.dk.mdm.model.response.ivt.InboundItemResponse;
+import com.dk.mdm.model.response.ivt.InboundResponse;
+import com.dk.mdm.model.response.pur.PurchaseItemResponse;
+import com.dk.mdm.model.response.pur.PurchaseResponse;
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+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/7 14:11
+ * @author : 寇珊珊
+ */
+@Service
+@Transactional
+public class InboundPurchaseService extends BaseService<Inbound> {
+
+	@Override
+	public BaseMapper<Inbound> getRepository() {
+		return inboundMapper;
+	}
+
+	@Autowired
+	private InboundMapper inboundMapper;
+
+	@Autowired
+	private InboundConvert inboundConvert;
+
+	@Autowired
+	private InboundItemMapper inboundItemMapper;
+
+	@Autowired
+	private InboundItemConvert inboundItemConvert;
+
+	@Autowired
+	private PurchaseMapper purchaseMapper;
+
+	@Autowired
+	private PurchaseItemMapper purchaseItemMapper;
+
+	@Autowired
+	private CommonService commonService;
+
+
+
+
+	/**
+	 * @desc   : 条件查询
+	 * @date   : 2024/3/7 14:12
+	 * @author : 寇珊珊
+	 */
+	@Pagination
+	public ResponseResultVO<PageList<InboundResponse>> selectInboundAndItem(InboundQuery inboundQuery) {
+		return super.mergeListWithCount(inboundQuery, inboundMapper.selectInboundAndItem(inboundQuery),
+				inboundMapper.selectInboundAndItemCountByCond(inboundQuery));
+	}
+
+
+	/**
+	 * @desc   : 采购入库新建
+	 * @date   : 2024/3/7 14:13
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> purchaseInboundInsert(InboundVO inboundVO) {
+		//region  总单
+		//获取 id/单号
+		Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUND.getName(),false);
+		inboundVO.setIntoId(codeMap.get("outId").toString()).
+				setIntoNo(codeMap.get("outNote").toString());
+		//入库类型
+		inboundVO.setIntoType(Constant.IntoType.SALE.getName());
+		//入库状态  待入库
+		inboundVO.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName());
+		//实体转换
+		Inbound inbound = inboundConvert.convertToPo(inboundVO);
+		inboundMapper.insert(inbound);
+		//endregion
+
+		//region 明细
+		//校验明细
+		if (inboundVO.getItemList().size() == 0) {
+			return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+					ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+		}
+		for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+			Map<String , Object> map = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUNDITEM.getName(),true);
+			//明细id
+			inboundItemVO.setItemId(map.get("outId").toString());
+			//总单id
+			inboundItemVO.setIntoId(inboundVO.getIntoId());
+			//入库类型
+			inboundItemVO.setIntoType(inboundVO.getIntoType());
+			//成本单价
+			inboundItemVO.setCostPrice(inboundItemVO.getCostPrice());
+			//成本金额
+			inboundItemVO.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP));
+			//库存数量  已入库-出库
+			inboundItemVO.setInvQty(inboundItemVO.getReturnQty().subtract(inboundItemVO.getOutQty()));
+			//入库状态
+			inboundItemVO.setIntoStatus(inboundVO.getIntoStatus());
+			//实体转换
+			InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+			inboundItemMapper.insert(inboundItem);
+		}
+		//endregion
+
+		//todo 如果是已入库 调用库存  后续写库存这里补上
+		//region 库存
+
+
+		//endregion
+
+
+		return ResponseResultUtil.success(inboundVO);
+	}
+
+
+
+	/**
+	 * @desc   : 采购入库办理
+	 * @date   : 2024/3/7 15:47
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> purchaseHandleInbound(InboundVO inboundVO) {
+		//大编辑标识
+		if (inboundVO.getAllEdit() != null && inboundVO.getAllEdit()) {
+			//region 编辑明细
+			//校验明细
+			if (inboundVO.getItemList().size() == 0) {
+				return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+						ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+			}
+			for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+				if (inboundItemVO.getIntoId() != null) {
+
+					//编辑明细
+					inboundItemVO.setCostPrice(inboundItemVO.getPriceInto())
+							.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
+							.setIntoQty(inboundItemVO.getIntoingQty())
+							.setIntoAmt(inboundItemVO.getIntoingAmt());
+					//入库状态
+					String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
+					inboundItemVO.setIntoStatus(intoStatus);
+					//实体转换
+					InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+					//修改
+					inboundItemMapper.updateById(inboundItem);
+				}
+				//endregion
+				//region 新建明细
+				else {
+					Map<String , Object> map = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUNDITEM.getName(),true);
+					inboundItemVO
+							.setItemId(map.get("outId").toString())
+							.setIntoQty(inboundItemVO.getIntoingQty())
+							.setIntoAmt(inboundItemVO.getIntoingAmt())
+							.setIntoId(inboundVO.getIntoId())
+							.setCostPrice(inboundItemVO.getPriceInto())
+							.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
+							.setIntoType(Constant.IntoType.SALE.getName());
+					//入库状态
+					String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
+					inboundItemVO.setIntoStatus(intoStatus);
+					//实体转换
+					InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+					//新建
+					inboundItemMapper.insert(inboundItem);
+				}
+				//region  采购
+				//采购明细
+				if(inboundItemVO.getFromItemId()!=null){
+					PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
+					PurchaseItem  purchaseItem = new PurchaseItem();
+					purchaseItem.setItemId(purchaseItemResponse.getItemId());
+					purchaseItem.setIntoingQty(purchaseItemResponse.getIntoingQty().subtract(inboundItemVO.getIntoQty()));
+					purchaseItem.setIntoingAmt(purchaseItemResponse.getIntoingAmt().subtract(inboundItemVO.getIntoAmt()));
+					purchaseItem.setIntoQty(purchaseItemResponse.getIntoQty().add(inboundItemVO.getIntoQty()));
+					purchaseItem.setIntoAmt(purchaseItemResponse.getIntoAmt().add(inboundItemVO.getIntoAmt()));
+					//入库状态
+					String intoStatus = this.setIntoStatus(purchaseItem.getIntoingQty(), purchaseItem.getIntoQty());
+					purchaseItem.setIntoStatus(intoStatus);
+					purchaseItemMapper.updateById(purchaseItem);
+				}
+				//endregion
+			}
+			//endregion
+
+			//region 删除明细
+			BigDecimal sumDelIntoQty = BigDecimal.ZERO;
+			BigDecimal sumDelIntoAmt = BigDecimal.ZERO;
+			if (inboundVO.getDeleteItemList() != null) {
+				 sumDelIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+				 sumDelIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+				for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
+					if (inboundItemVO.getItemId() != null) {
+						InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+						inboundItem.setFlgValid(false);
+						inboundItemMapper.updateById(inboundItem);
+					}
+					//region  采购
+					if(inboundVO.getFromId()!=null){
+						//region 采购订单明细
+						List<PurchaseItemResponse> purchaseItemResponses = purchaseItemMapper.selectByCond(new PurchaseItemQuery().setPurId(inboundVO.getFromId()));
+						for (PurchaseItemResponse purchaseItemResponse : purchaseItemResponses) {
+							PurchaseItem  purchaseItem = new PurchaseItem();
+							purchaseItem.setItemId(purchaseItemResponse.getItemId());
+							purchaseItem.setIntoingQty(purchaseItemResponse.getIntoingQty().add(purchaseItemResponse.getIntoQty()));
+							purchaseItem.setIntoingAmt(purchaseItemResponse.getIntoingAmt().add(purchaseItemResponse.getIntoAmt()));
+							purchaseItem.setIntoQty(BigDecimal.ZERO);
+							purchaseItem.setIntoingAmt(BigDecimal.ZERO);
+							//入库状态
+							String intoStatus = this.setIntoStatus(purchaseItem.getIntoingQty(), purchaseItem.getIntoQty());
+							purchaseItem.setIntoStatus(intoStatus);
+							purchaseItemMapper.updateById(purchaseItem);
+						}
+						//endregion
+					}
+					//endregion
+
+				}
+			}
+			//endregion
+
+			//region 编辑总单
+			BigDecimal sumIntoQty = inboundVO.getItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+			BigDecimal sumIntoAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+			inboundVO.setIntoQty(sumIntoQty);
+			inboundVO.setIntoAmt(sumIntoAmt);
+			//已入库数量==入库中数量   入库完成
+			if(sumIntoQty.compareTo(inboundVO.getIntoQty())==0){
+				//已入库
+				inboundVO.setIntoStatus(Constant.IntoStatus.YIRUKU.getName());
+			} else {
+				//入库中
+				inboundVO.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
+			}
+			//实体转换
+			Inbound inbound = inboundConvert.convertToPo(inboundVO);
+			//修改
+			super.update(inbound);
+			//endregion
+
+			//region  修改采购订单
+			if(inboundVO.getFromId()!=null){
+				PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
+				Purchase  purchase = new Purchase();
+				purchase.setPurId(purchaseResponse.getPurId());
+				purchase.setIntoQty(purchaseResponse.getIntoQty().subtract(sumIntoQty.add(sumDelIntoQty)));
+				purchase.setIntoAmt(purchaseResponse.getIntoAmt().subtract(sumIntoAmt.add(sumDelIntoAmt)));
+				purchase.setIntoingQty(purchaseResponse.getIntoingQty().add(sumIntoQty).subtract(sumDelIntoQty));
+				purchase.setIntoingAmt(purchaseResponse.getIntoingAmt().add(sumIntoAmt).subtract(sumDelIntoAmt));
+				//入库状态
+				String intoStatus = this.setIntoStatus(purchase.getIntoingQty(), purchase.getIntoQty());
+				purchase.setIntoStatus(intoStatus);
+				//修改
+				purchaseMapper.updateById(purchase);
+			}
+			//endregion
+
+			//todo 如果是已入库 调用库存  后续写库存这里补上
+			//region 修改库存
+
+			//endregion
+		}
+		return ResponseResultUtil.success(inboundVO);
+	}
+
+
+	/**
+	 * @desc   : 采购入库撤销
+	 * @date   : 2024/3/7 17:06
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> purchaseInboundCancel(InboundVO inboundVO) {
+		//region 查询入库总单数据信息
+		InboundResponse inboundResponse = inboundMapper.selectById(inboundVO.getIntoId());
+		//endregion
+
+		//region 修改订单数据信息
+		if (inboundVO.getFromId() != null) {
+			PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundResponse.getFromId());
+			Purchase purchase = new Purchase();
+			purchase.setPurId(inboundResponse.getFromId());
+			purchase.setIntoQty(purchaseResponse.getIntoQty().subtract(inboundResponse.getIntoQty()));
+			purchase.setIntoAmt(purchaseResponse.getIntoAmt().subtract(inboundResponse.getIntoAmt()));
+			purchase.setIntoingQty(purchaseResponse.getIntoingQty().add(inboundResponse.getIntoQty()));
+			purchase.setIntoingAmt(purchaseResponse.getIntoingAmt().add(inboundResponse.getIntoAmt()));
+			//入库状态
+			String intoStatus = this.setIntoStatus(purchase.getIntoingQty(), purchase.getIntoQty());
+			purchase.setIntoStatus(intoStatus);
+			purchaseMapper.updateById(purchase);
+		}
+		//endregion
+
+		//region 修改总单数据信息
+		Inbound inbound = new Inbound();
+		inbound.setIntoId(inboundVO.getIntoId());
+		inbound.setIntoDate(null);
+		inbound.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
+		inbound.setIntoQty(BigDecimal.ZERO);
+		inbound.setIntoAmt(BigDecimal.ZERO);
+		inboundMapper.updateById(inbound);
+		//endregion
+
+		//region 明细数据
+		//根据总单id查明细
+		List<InboundItemResponse> orderEntryItemResponsesList = inboundItemMapper.selectByCond(new InboundItemQuery().setIntoId(inbound.getIntoId()));
+		for (InboundItemResponse inboundItemResponse : orderEntryItemResponsesList) {
+			//region 修改采购明细数据信息
+			if(inboundItemResponse.getFromItemId()!=null){
+				//查询
+				PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
+				PurchaseItem  purchaseItem = new PurchaseItem();
+				purchaseItem.setItemId(purchaseItemResponse.getItemId());
+				purchaseItem.setIntoQty(purchaseItemResponse.getIntoQty().subtract(inboundItemResponse.getIntoQty()));
+				purchaseItem.setIntoAmt(purchaseItemResponse.getIntoAmt().subtract(inboundItemResponse.getIntoAmt()));
+				purchaseItem.setIntoingQty(purchaseItemResponse.getIntoingQty().add(inboundItemResponse.getIntoQty()));
+				purchaseItem.setIntoingAmt(purchaseItemResponse.getIntoingAmt().add(inboundItemResponse.getIntoAmt()));
+				//入库状态
+				String intoStatus= this.setIntoStatus(purchaseItem.getIntoingQty(), purchaseItem.getIntoQty());
+				purchaseItem.setIntoStatus(intoStatus);
+			}
+			//endregion
+
+			//region修改入库明细信息
+			InboundItem inboundItem = new InboundItem();
+			inboundItem.setIntoId(inbound.getIntoId())
+					.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName())
+					.setIntoQty(BigDecimal.ZERO)
+					.setIntoAmt(BigDecimal.ZERO)
+					.setItemId(inboundItemResponse.getItemId());
+			inboundItemMapper.updateById(inboundItem);
+			//endregion
+		}
+		//endregion
+
+
+		//todo 调用库存  后续写库存这里补上
+		//region 修改库存
+
+		//endregion
+
+		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.RUKUZHONG.getName();
+		}
+		return intoStatus;
+	}
+	
+}

+ 419 - 0
src/main/java/com/dk/mdm/service/ivt/InboundSaleReturnService.java

@@ -0,0 +1,419 @@
+package com.dk.mdm.service.ivt;
+
+import com.dk.common.infrastructure.annotaiton.Pagination;
+import com.dk.common.infrastructure.constant.Constant;
+import com.dk.common.infrastructure.enums.ErrorCodeEnum;
+import com.dk.common.mapper.BaseMapper;
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultUtil;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.common.service.BaseService;
+import com.dk.mdm.infrastructure.convert.ivt.InboundConvert;
+import com.dk.mdm.infrastructure.convert.ivt.InboundItemConvert;
+import com.dk.mdm.mapper.ivt.InboundItemMapper;
+import com.dk.mdm.mapper.ivt.InboundMapper;
+import com.dk.mdm.mapper.pur.PurchaseItemMapper;
+import com.dk.mdm.mapper.pur.PurchaseMapper;
+import com.dk.mdm.model.pojo.ivt.Inbound;
+import com.dk.mdm.model.pojo.ivt.InboundItem;
+import com.dk.mdm.model.pojo.pur.Purchase;
+import com.dk.mdm.model.pojo.pur.PurchaseItem;
+import com.dk.mdm.model.query.ivt.InboundItemQuery;
+import com.dk.mdm.model.query.ivt.InboundQuery;
+import com.dk.mdm.model.query.pur.PurchaseItemQuery;
+import com.dk.mdm.model.response.ivt.InboundItemResponse;
+import com.dk.mdm.model.response.ivt.InboundResponse;
+import com.dk.mdm.model.response.pur.PurchaseItemResponse;
+import com.dk.mdm.model.response.pur.PurchaseResponse;
+import com.dk.mdm.model.vo.ivt.InboundItemVO;
+import com.dk.mdm.model.vo.ivt.InboundVO;
+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/7 14:11
+ * @author : 寇珊珊
+ */
+@Service
+@Transactional
+public class InboundSaleReturnService extends BaseService<Inbound> {
+
+	@Override
+	public BaseMapper<Inbound> getRepository() {
+		return inboundMapper;
+	}
+
+	@Autowired
+	private InboundMapper inboundMapper;
+
+	@Autowired
+	private InboundConvert inboundConvert;
+
+	@Autowired
+	private InboundItemMapper inboundItemMapper;
+
+	@Autowired
+	private InboundItemConvert inboundItemConvert;
+
+	@Autowired
+	private PurchaseMapper purchaseMapper;
+
+	@Autowired
+	private PurchaseItemMapper purchaseItemMapper;
+
+	@Autowired
+	private CommonService commonService;
+
+
+
+	/**
+	 * @desc   : 条件查询
+	 * @date   : 2024/3/7 14:12
+	 * @author : 寇珊珊
+	 */
+	@Pagination
+	public ResponseResultVO<PageList<InboundResponse>> selectInboundAndItem(InboundQuery inboundQuery) {
+		return super.mergeListWithCount(inboundQuery, inboundMapper.selectInboundAndItem(inboundQuery),
+				inboundMapper.selectInboundAndItemCountByCond(inboundQuery));
+	}
+
+
+
+
+	/**
+	 * @desc   : 销售退货入库新建
+	 * @date   : 2024/3/7 14:13
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> saleReturnInboundInsert(InboundVO inboundVO) {
+		//region  总单
+		//获取 id/单号
+		Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUND.getName(),false);
+		inboundVO.setIntoId(codeMap.get("outId").toString()).
+				setIntoNo(codeMap.get("outNote").toString());
+		//入库类型
+		inboundVO.setIntoType(Constant.IntoType.PURRETURN.getName());
+		//入库状态  待入库
+		inboundVO.setIntoStatus(Constant.IntoStatus.DAIRUKU.getName());
+		//退货数量
+		inboundVO.setReturnQty(inboundVO.getIntoingQty());
+		//退货金额
+		inboundVO.setReturnAmt(inboundVO.getIntoingAmt());
+		//实体转换
+		Inbound inbound = inboundConvert.convertToPo(inboundVO);
+		inboundMapper.insert(inbound);
+		//endregion
+
+		//region 明细
+		//校验明细
+		if (inboundVO.getItemList().size() == 0) {
+			return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+					ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+		}
+		for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+			Map<String , Object> map = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUNDITEM.getName(),true);
+			//明细id
+			inboundItemVO.setItemId(map.get("outId").toString());
+			//总单id
+			inboundItemVO.setIntoId(inboundVO.getIntoId());
+			//入库类型
+			inboundItemVO.setIntoType(inboundVO.getIntoType());
+			//入库状态等于已入库 更新合计入库数量/金额 = 入库中数量/入库中金额
+			if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
+				inboundItemVO.setIntoQty(inboundItemVO.getIntoingQty())
+						.setIntoAmt(inboundItemVO.getIntoingAmt());
+			}
+			//成本单价
+			inboundItemVO.setCostPrice(inboundItemVO.getCostPrice());
+			//成本金额
+			inboundItemVO.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP));
+			//库存数量  已入库-出库
+			inboundItemVO.setInvQty(inboundItemVO.getIntoQty().subtract(inboundItemVO.getOutQty()));
+			//入库状态
+			inboundItemVO.setIntoStatus(inboundVO.getIntoStatus());
+			//退货数量
+			inboundItemVO.setReturnQty(inboundItemVO.getIntoingQty());
+			//退货金额
+			inboundItemVO.setReturnAmt(inboundItemVO.getIntoingAmt());
+			//实体转换
+			InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+			inboundItemMapper.insert(inboundItem);
+		}
+		//endregion
+
+		//todo 如果是已入库 调用库存  后续写库存这里补上
+		//region 库存
+
+
+		//endregion
+
+
+		return ResponseResultUtil.success(inboundVO);
+	}
+
+
+	/**
+	 * @desc   : 销售退货入库办理
+	 * @date   : 2024/3/7 15:47
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> saleReturnHandleInbound(InboundVO inboundVO) {
+		//大编辑标识
+		if (inboundVO.getAllEdit() != null && inboundVO.getAllEdit()) {
+			//region 编辑明细
+			//校验明细
+			if (inboundVO.getItemList().size() == 0) {
+				return ResponseResultUtil.error(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
+						ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
+			}
+			for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
+				if (inboundItemVO.getIntoId() != null) {
+					//编辑明细
+					inboundItemVO.setCostPrice(inboundItemVO.getPriceInto())
+							.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
+							.setIntoQty(inboundItemVO.getIntoingQty())
+							.setIntoAmt(inboundItemVO.getIntoingAmt());
+					//入库状态
+					String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
+					inboundItemVO.setIntoStatus(intoStatus);
+					//实体转换
+					InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+					//修改
+					inboundItemMapper.updateById(inboundItem);
+				}
+				//endregion
+				//region 新建明细
+				else {
+					Map<String , Object> map = commonService.getUniqueNoteCode(Constant.docNameConstant.OTHERINBOUNDITEM.getName(),true);
+					inboundItemVO
+							.setItemId(map.get("outId").toString())
+							.setIntoQty(inboundItemVO.getIntoingQty())
+							.setIntoAmt(inboundItemVO.getIntoingAmt())
+							.setIntoId(inboundVO.getIntoId())
+							.setCostPrice(inboundItemVO.getPriceInto())
+							.setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
+							.setIntoType(Constant.IntoType.PURRETURN.getName());
+					//入库状态
+					String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
+					inboundItemVO.setIntoStatus(intoStatus);
+					//实体转换
+					InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+					//新建
+					inboundItemMapper.insert(inboundItem);
+				}
+				//region  销售退货
+				//销售退货明细
+				if(inboundItemVO.getFromItemId()!=null){
+					PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
+					PurchaseItem  purchaseItem = new PurchaseItem();
+					purchaseItem.setItemId(purchaseItemResponse.getItemId());
+					purchaseItem.setIntoingQty(purchaseItemResponse.getIntoingQty().subtract(inboundItemVO.getIntoQty()));
+					purchaseItem.setIntoingAmt(purchaseItemResponse.getIntoingAmt().subtract(inboundItemVO.getIntoAmt()));
+					purchaseItem.setIntoQty(purchaseItemResponse.getIntoQty().add(inboundItemVO.getIntoQty()));
+					purchaseItem.setIntoAmt(purchaseItemResponse.getIntoAmt().add(inboundItemVO.getIntoAmt()));
+					//入库状态
+					String intoStatus = this.setIntoStatus(purchaseItem.getIntoingQty(), purchaseItem.getIntoQty());
+					purchaseItem.setIntoStatus(intoStatus);
+					purchaseItemMapper.updateById(purchaseItem);
+				}
+				//endregion
+			}
+			//endregion
+
+			//region 删除明细
+			BigDecimal sumDelIntoQty = BigDecimal.ZERO;
+			BigDecimal sumDelIntoAmt = BigDecimal.ZERO;
+			if (inboundVO.getDeleteItemList() != null) {
+				 sumDelIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+				 sumDelIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+				for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
+					if (inboundItemVO.getItemId() != null) {
+						InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
+						inboundItem.setFlgValid(false);
+						inboundItemMapper.updateById(inboundItem);
+					}
+					//region  销售退货
+					if(inboundVO.getFromId()!=null){
+						//region 销售退货订单明细
+						List<PurchaseItemResponse> purchaseItemResponses = purchaseItemMapper.selectByCond(new PurchaseItemQuery().setPurId(inboundVO.getFromId()));
+						for (PurchaseItemResponse purchaseItemResponse : purchaseItemResponses) {
+							PurchaseItem  purchaseItem = new PurchaseItem();
+							purchaseItem.setItemId(purchaseItemResponse.getItemId());
+							purchaseItem.setIntoingQty(purchaseItemResponse.getIntoingQty().add(purchaseItemResponse.getIntoQty()));
+							purchaseItem.setIntoingAmt(purchaseItemResponse.getIntoingAmt().add(purchaseItemResponse.getIntoAmt()));
+							purchaseItem.setIntoQty(BigDecimal.ZERO);
+							purchaseItem.setIntoingAmt(BigDecimal.ZERO);
+							//入库状态
+							String intoStatus = this.setIntoStatus(purchaseItem.getIntoingQty(), purchaseItem.getIntoQty());
+							purchaseItem.setIntoStatus(intoStatus);
+							purchaseItemMapper.updateById(purchaseItem);
+						}
+						//endregion
+					}
+					//endregion
+
+				}
+			}
+			//endregion
+
+			//region 编辑总单
+			BigDecimal sumIntoQty = inboundVO.getItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
+			BigDecimal sumIntoAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
+			inboundVO.setIntoQty(sumIntoQty);
+			inboundVO.setIntoAmt(sumIntoAmt);
+			//已入库数量==入库中数量   入库完成
+			if(sumIntoQty.compareTo(inboundVO.getIntoQty())==0){
+				//已入库
+				inboundVO.setIntoStatus(Constant.IntoStatus.YIRUKU.getName());
+			} else {
+				//入库中
+				inboundVO.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
+			}
+			//实体转换
+			Inbound inbound = inboundConvert.convertToPo(inboundVO);
+			//修改
+			super.update(inbound);
+			//endregion
+
+			//region  修改销售退货订单
+			if(inboundVO.getFromId()!=null){
+				PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
+				Purchase  purchase = new Purchase();
+				purchase.setPurId(purchaseResponse.getPurId());
+				purchase.setIntoQty(purchaseResponse.getIntoQty().subtract(sumIntoQty.add(sumDelIntoQty)));
+				purchase.setIntoAmt(purchaseResponse.getIntoAmt().subtract(sumIntoAmt.add(sumDelIntoAmt)));
+				purchase.setIntoingQty(purchaseResponse.getIntoingQty().add(sumIntoQty).subtract(sumDelIntoQty));
+				purchase.setIntoingAmt(purchaseResponse.getIntoingAmt().add(sumIntoAmt).subtract(sumDelIntoAmt));
+				//入库状态
+				String intoStatus = this.setIntoStatus(purchase.getIntoingQty(), purchase.getIntoQty());
+				purchase.setIntoStatus(intoStatus);
+				//修改
+				purchaseMapper.updateById(purchase);
+			}
+			//endregion
+
+			//todo 如果是已入库 调用库存  后续写库存这里补上
+			//region 修改库存
+
+			//endregion
+		}
+		return ResponseResultUtil.success(inboundVO);
+	}
+
+
+	/**
+	 * @desc   : 销售退货入库撤销
+	 * @date   : 2024/3/7 17:06
+	 * @author : 寇珊珊
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> saleReturnInboundCancel(InboundVO inboundVO) {
+		//region 查询入库总单数据信息
+		InboundResponse inboundResponse = inboundMapper.selectById(inboundVO.getIntoId());
+		//endregion
+
+		//region 修改订单数据信息
+		if (inboundVO.getFromId() != null) {
+			PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundResponse.getFromId());
+			Purchase purchase = new Purchase();
+			purchase.setPurId(inboundResponse.getFromId());
+			purchase.setIntoQty(purchaseResponse.getIntoQty().subtract(inboundResponse.getIntoQty()));
+			purchase.setIntoAmt(purchaseResponse.getIntoAmt().subtract(inboundResponse.getIntoAmt()));
+			purchase.setIntoingQty(purchaseResponse.getIntoingQty().add(inboundResponse.getIntoQty()));
+			purchase.setIntoingAmt(purchaseResponse.getIntoingAmt().add(inboundResponse.getIntoAmt()));
+			//入库状态
+			String intoStatus = this.setIntoStatus(purchase.getIntoingQty(), purchase.getIntoQty());
+			purchase.setIntoStatus(intoStatus);
+			purchaseMapper.updateById(purchase);
+		}
+		//endregion
+
+		//region 修改总单数据信息
+		Inbound inbound = new Inbound();
+		inbound.setIntoId(inboundVO.getIntoId());
+		inbound.setIntoDate(null);
+		inbound.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
+		inbound.setIntoQty(BigDecimal.ZERO);
+		inbound.setIntoAmt(BigDecimal.ZERO);
+		inboundMapper.updateById(inbound);
+		//endregion
+
+		//region 明细数据
+		//根据总单id查明细
+		List<InboundItemResponse> orderEntryItemResponsesList = inboundItemMapper.selectByCond(new InboundItemQuery().setIntoId(inbound.getIntoId()));
+		for (InboundItemResponse inboundItemResponse : orderEntryItemResponsesList) {
+			//region 修改销售退货明细数据信息
+			if(inboundItemResponse.getFromItemId()!=null){
+				//查询
+				PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
+				PurchaseItem  purchaseItem = new PurchaseItem();
+				purchaseItem.setItemId(purchaseItemResponse.getItemId());
+				purchaseItem.setIntoQty(purchaseItemResponse.getIntoQty().subtract(inboundItemResponse.getIntoQty()));
+				purchaseItem.setIntoAmt(purchaseItemResponse.getIntoAmt().subtract(inboundItemResponse.getIntoAmt()));
+				purchaseItem.setIntoingQty(purchaseItemResponse.getIntoingQty().add(inboundItemResponse.getIntoQty()));
+				purchaseItem.setIntoingAmt(purchaseItemResponse.getIntoingAmt().add(inboundItemResponse.getIntoAmt()));
+				//入库状态
+				String intoStatusItem = this.setIntoStatus(purchaseItem.getIntoingQty(), purchaseItem.getIntoQty());
+				purchaseItem.setIntoStatus(intoStatusItem);
+			}
+			//endregion
+
+			//region修改入库明细信息
+			InboundItem inboundItem = new InboundItem();
+			inboundItem.setIntoId(inbound.getIntoId())
+					.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName())
+					.setIntoQty(BigDecimal.ZERO)
+					.setIntoAmt(BigDecimal.ZERO)
+					.setItemId(inboundItemResponse.getItemId());
+			inboundItemMapper.updateById(inboundItem);
+			//endregion
+		}
+		//endregion
+
+
+		//todo 调用库存  后续写库存这里补上
+		//region 修改库存
+
+		//endregion
+
+		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.RUKUZHONG.getName();
+		}
+		return intoStatus;
+	}
+	
+}