Browse Source

添加冻结功能

songyang 2 năm trước cách đây
mục cha
commit
a6d4741309

+ 56 - 4
src/main/java/com/dk/mdm/controller/ivt/FreezeController.java

@@ -1,17 +1,26 @@
 package com.dk.mdm.controller.ivt;
 package com.dk.mdm.controller.ivt;
 
 
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseResultVO;
 import com.dk.mdm.model.pojo.ivt.Freeze;
 import com.dk.mdm.model.pojo.ivt.Freeze;
-import com.dk.common.controller.BaseController;
 import com.dk.common.service.BaseService;
 import com.dk.common.service.BaseService;
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.dk.mdm.model.query.ivt.FreezeQuery;
+import com.dk.mdm.model.response.ivt.FreezeItemResponse;
+import com.dk.mdm.model.response.ivt.FreezeResponse;
+import com.dk.mdm.model.vo.ivt.FreezeVO;
+import com.dk.mdm.model.vo.mst.SupplierVo;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RestController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import com.dk.mdm.service.ivt.FreezeService;
 import com.dk.mdm.service.ivt.FreezeService;
 
 
+import java.util.List;
+import java.util.Map;
+
 @Api(tags = "冻结单API接口")
 @Api(tags = "冻结单API接口")
 @RestController
 @RestController
-@RequestMapping("/freeze")
+@RequestMapping("/ivt/freeze")
 public class FreezeController{
 public class FreezeController{
 
 
     public BaseService<Freeze> getService() {
     public BaseService<Freeze> getService() {
@@ -21,4 +30,47 @@ public class FreezeController{
     @Autowired
     @Autowired
     private FreezeService freezeService;
     private FreezeService freezeService;
 
 
+    /**
+     * @desc : 条件查询
+     * @author : 宋扬
+     * @date : 2023/2/29 10:36
+     */
+    @ApiOperation(value = "分页、关联、条件查询", notes = "分页、关联、条件查询")
+    @PostMapping({"list_by"})
+    public ResponseResultVO<PageList<FreezeResponse>> selectByCond(@RequestBody FreezeQuery freezeQuery) {
+        return freezeService.selectByCond(freezeQuery);
+    }
+
+    /**
+     * @desc   : 通过ID查询
+     * @author : 宋扬
+     * @date   : 2024/3/13 16:01
+     */
+    @PostMapping({"/{id}"})
+    public ResponseResultVO selectById(@PathVariable String id) {
+        return freezeService.selectById(id);
+    }
+
+    /**
+     * @desc   : 查询明细信息
+     * @author : 宋扬
+     * @date   : 2024/3/13 16:01
+     */
+    @PostMapping({"select_freezeItem_by_id/{id}"})
+    public List<FreezeItemResponse> selectFreezeItemById(@PathVariable String id) {
+        return freezeService.selectFreezeItemById(id);
+    }
+
+    /**
+     * @desc   : 新建冻结单
+     * @author : 宋扬
+     * @date   : 2024/3/15 10:26f
+     */
+    @ApiOperation(value = "新建冻结单", notes = "新建冻结单")
+    @PostMapping({"insert"})
+    public ResponseResultVO<?> insert(@RequestBody FreezeVO freezeVO) {
+        return freezeService.insert(freezeVO);
+    }
+
+
 }
 }

+ 22 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/FreezeConvert.java

@@ -0,0 +1,22 @@
+package com.dk.mdm.infrastructure.convert.ivt;
+
+import com.dk.mdm.model.pojo.ivt.Freeze;
+import com.dk.mdm.model.vo.ivt.FreezeVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : Staff转换类
+ * @author : admin
+ * @date   : 2023/1/9 10:37
+ */
+@Mapper(componentModel = "spring")
+public interface FreezeConvert {
+
+    /**
+     * @desc   : 转换vo为pojo
+     * @author : admin
+     * @date   : 2023/1/9 10:37
+     */
+    Freeze convertToPo(FreezeVO freezeVO);
+
+}

+ 24 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/FreezeItemConvert.java

@@ -0,0 +1,24 @@
+package com.dk.mdm.infrastructure.convert.ivt;
+
+import com.dk.mdm.model.pojo.ivt.Freeze;
+import com.dk.mdm.model.pojo.ivt.FreezeItem;
+import com.dk.mdm.model.vo.ivt.FreezeItemVO;
+import com.dk.mdm.model.vo.ivt.FreezeVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : Staff转换类
+ * @author : admin
+ * @date   : 2023/1/9 10:37
+ */
+@Mapper(componentModel = "spring")
+public interface FreezeItemConvert {
+
+    /**
+     * @desc   : 转换vo为pojo
+     * @author : admin
+     * @date   : 2023/1/9 10:37
+     */
+    FreezeItem convertToPo(FreezeItemVO freezeItemVO);
+
+}

+ 18 - 1
src/main/java/com/dk/mdm/mapper/ivt/FreezeItemMapper.java

@@ -2,13 +2,30 @@ package com.dk.mdm.mapper.ivt;
 
 
 import com.dk.mdm.model.pojo.ivt.FreezeItem;
 import com.dk.mdm.model.pojo.ivt.FreezeItem;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.query.ivt.FreezeItemQuery;
+import com.dk.mdm.model.response.ivt.FreezeItemResponse;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
+import java.util.List;
+
 /**
 /**
 *  冻结单明细 Mapper
 *  冻结单明细 Mapper
 */
 */
 @Repository
 @Repository
 public interface FreezeItemMapper extends BaseMapper<FreezeItem>{
 public interface FreezeItemMapper extends BaseMapper<FreezeItem>{
-	
+
+    /**
+     * @desc   : 查询冻结信息
+     * @author : 宋扬
+     * @date   : 2024/3/15 16:42
+     */
+    List<FreezeItemResponse> selectByCond(FreezeItemQuery freezeItemQuery);
+
+    /**
+     * @desc   : 根据商品ID和仓库ID查询库存信息
+     * @author : 宋扬
+     * @date   : 2024/3/15 15:57
+     */
+    FreezeItemResponse selectInvById(String Id);
 }
 }
 
 

+ 9 - 60
src/main/java/com/dk/mdm/mapper/ivt/FreezeItemMapper.xml

@@ -9,7 +9,7 @@
     </sql>
     </sql>
 
 
     <!-- 通用查询映射结果 -->
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.ivt.FreezeItem">
+    <resultMap id="BaseResultMap" type="com.dk.mdm.model.response.ivt.FreezeItemResponse">
         <id column="item_id" property="itemId"/>
         <id column="item_id" property="itemId"/>
                 <result column="freeze_id" property="freezeId" typeHandler="UuidTypeHandler"/>
                 <result column="freeze_id" property="freezeId" typeHandler="UuidTypeHandler"/>
                 <result column="item_index" property="itemIndex"/>
                 <result column="item_index" property="itemIndex"/>
@@ -87,19 +87,11 @@
         </where>
         </where>
     </sql>
     </sql>
 
 
-    <sql id="idsForeach">
-        <!-- 根据主键itemId批量操作 -->
-        WHERE item_id in
-        <foreach collection="ids" index="index" item="item" separator="," open="(" close=")">
-            #{item}
-        </foreach>
-    </sql>
-
     <!-- 查询表t_psi_freeze_item,(条件查询+分页)列表 -->
     <!-- 查询表t_psi_freeze_item,(条件查询+分页)列表 -->
     <select id="selectByCond" resultMap="BaseResultMap">
     <select id="selectByCond" resultMap="BaseResultMap">
         SELECT
         SELECT
         <include refid="Base_Column_List"/>
         <include refid="Base_Column_List"/>
-        FROM t_psi_freeze_item
+        FROM dkic_b.t_psi_freeze_item
         <include refid="Condition"/>
         <include refid="Condition"/>
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
             limit #{end} offset #{start}
             limit #{end} offset #{start}
@@ -110,7 +102,7 @@
     <select id="countByCond" resultType="Long">
     <select id="countByCond" resultType="Long">
         SELECT
         SELECT
         count(1)
         count(1)
-        FROM t_psi_freeze_item
+        FROM dkic_b.t_psi_freeze_item
         <include refid="Condition"/>
         <include refid="Condition"/>
     </select>
     </select>
 
 
@@ -118,60 +110,17 @@
     <select id="selectById" resultMap="BaseResultMap">
     <select id="selectById" resultMap="BaseResultMap">
         SELECT
         SELECT
         <include refid="Base_Column_List"/>
         <include refid="Base_Column_List"/>
-        FROM t_psi_freeze_item
+        FROM dkic_b.t_psi_freeze_item
         WHERE item_id = #{itemId}::uuid
         WHERE item_id = #{itemId}::uuid
     </select>
     </select>
 
 
-    <!-- 根据主键锁定表t_psi_freeze_item的一行数据 -->
-    <select id="selectByIdForUpdate" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM t_psi_freeze_item
-        WHERE item_id = #{itemId}
-        for update
-    </select>
 
 
-    <!-- 根据主键锁定表t_psi_freeze_item的多行数据 -->
-    <select id="selectByIdsForUpdate" resultMap="BaseResultMap">
+    <!-- 根据商品ID和仓库ID查询库存信息-->
+    <select id="selectInvById" resultMap="BaseResultMap">
         SELECT
         SELECT
-        <include refid="Base_Column_List"/>
-        FROM t_psi_freeze_item
-        <include refid="idsForeach"/>
+            inv.inv_qty,inv.freeze_qty,inv.usable_qty,inv.outing_qty
+        FROM dkic_b.t_psi_inventory AS inv
+        WHERE  inv.inv_id=#{invId}
         for update
         for update
     </select>
     </select>
-
-    <insert id="insertBatch">
-        insert into t_psi_freeze_item
-        (
-        <trim suffixOverrides=",">
-            freeze_id,
-            item_index,
-            sku_id,
-            freeze_qty,
-            unfreeze_qty,
-            surplus_qty,
-            remarks,
-            inv_id,
-            cp_id,
-            op_app_code,
-        </trim>
-        )
-        values
-        <foreach collection="list" index="index" item="item" separator=",">
-            (
-            <trim suffixOverrides=",">
-                #{item.freezeId}::uuid,
-                #{item.itemIndex},
-                #{item.skuId}::uuid,
-                #{item.freezeQty},
-                #{item.unfreezeQty},
-                #{item.surplusQty},
-                #{item.remarks},
-                #{item.invId}::uuid,
-                #{item.cpId},
-                #{item.opAppCode},
-            </trim>
-            )
-        </foreach>
-    </insert>
 </mapper>
 </mapper>

+ 29 - 1
src/main/java/com/dk/mdm/mapper/ivt/FreezeMapper.java

@@ -2,13 +2,41 @@ package com.dk.mdm.mapper.ivt;
 
 
 import com.dk.mdm.model.pojo.ivt.Freeze;
 import com.dk.mdm.model.pojo.ivt.Freeze;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.query.ivt.FreezeQuery;
+import com.dk.mdm.model.query.mst.MoneyAccountQuery;
+import com.dk.mdm.model.response.ivt.FreezeResponse;
+import com.dk.mdm.model.response.mst.MoneyAccountResponse;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
+import java.util.List;
+
 /**
 /**
 *  冻结单 Mapper
 *  冻结单 Mapper
 */
 */
 @Repository
 @Repository
 public interface FreezeMapper extends BaseMapper<Freeze>{
 public interface FreezeMapper extends BaseMapper<Freeze>{
-	
+
+    /**
+     * @desc   : 根据条件进行查询
+     * @author : 宋扬
+     * @date   : 2024/3/13 10:42
+     */
+    List<FreezeResponse> selectByCond(FreezeQuery freezeQuery);
+
+    /**
+     * @desc   : 根据条件进行查询(数量)
+     * @author : 宋扬
+     * @date   : 2024/3/13 10:42
+     */
+    Long countByCond(FreezeQuery freezeQuery);
+
+    /**
+     * @desc   : 根据Id进行查询
+     * @author : 宋扬
+     * @date   : 2024-03-13 9:25
+     */
+    FreezeResponse selectById(String id);
+
+
 }
 }
 
 

+ 4 - 68
src/main/java/com/dk/mdm/mapper/ivt/FreezeMapper.xml

@@ -9,7 +9,7 @@
     </sql>
     </sql>
 
 
     <!-- 通用查询映射结果 -->
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.dk.mdm.model.pojo.ivt.Freeze">
+    <resultMap id="BaseResultMap" type="com.dk.mdm.model.response.ivt.FreezeResponse">
         <id column="freeze_id" property="freezeId"/>
         <id column="freeze_id" property="freezeId"/>
                 <result column="freeze_no" property="freezeNo"/>
                 <result column="freeze_no" property="freezeNo"/>
                 <result column="cus_id" property="cusId" typeHandler="UuidTypeHandler"/>
                 <result column="cus_id" property="cusId" typeHandler="UuidTypeHandler"/>
@@ -99,19 +99,11 @@
         </where>
         </where>
     </sql>
     </sql>
 
 
-    <sql id="idsForeach">
-        <!-- 根据主键freezeId批量操作 -->
-        WHERE freeze_id in
-        <foreach collection="ids" index="index" item="item" separator="," open="(" close=")">
-            #{item}
-        </foreach>
-    </sql>
-
     <!-- 查询表t_psi_freeze,(条件查询+分页)列表 -->
     <!-- 查询表t_psi_freeze,(条件查询+分页)列表 -->
     <select id="selectByCond" resultMap="BaseResultMap">
     <select id="selectByCond" resultMap="BaseResultMap">
         SELECT
         SELECT
         <include refid="Base_Column_List"/>
         <include refid="Base_Column_List"/>
-        FROM t_psi_freeze
+        FROM dkic_b.t_psi_freeze
         <include refid="Condition"/>
         <include refid="Condition"/>
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
             limit #{end} offset #{start}
             limit #{end} offset #{start}
@@ -122,7 +114,7 @@
     <select id="countByCond" resultType="Long">
     <select id="countByCond" resultType="Long">
         SELECT
         SELECT
         count(1)
         count(1)
-        FROM t_psi_freeze
+        FROM dkic_b.t_psi_freeze
         <include refid="Condition"/>
         <include refid="Condition"/>
     </select>
     </select>
 
 
@@ -130,66 +122,10 @@
     <select id="selectById" resultMap="BaseResultMap">
     <select id="selectById" resultMap="BaseResultMap">
         SELECT
         SELECT
         <include refid="Base_Column_List"/>
         <include refid="Base_Column_List"/>
-        FROM t_psi_freeze
+        FROM dkic_b.t_psi_freeze
         WHERE freeze_id = #{freezeId}::uuid
         WHERE freeze_id = #{freezeId}::uuid
     </select>
     </select>
 
 
-    <!-- 根据主键锁定表t_psi_freeze的一行数据 -->
-    <select id="selectByIdForUpdate" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM t_psi_freeze
-        WHERE freeze_id = #{freezeId}
-        for update
-    </select>
 
 
-    <!-- 根据主键锁定表t_psi_freeze的多行数据 -->
-    <select id="selectByIdsForUpdate" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"/>
-        FROM t_psi_freeze
-        <include refid="idsForeach"/>
-        for update
-    </select>
 
 
-    <insert id="insertBatch">
-        insert into t_psi_freeze
-        (
-        <trim suffixOverrides=",">
-            freeze_no,
-            cus_id,
-            org_id,
-            staff_id,
-            freeze_status,
-            freeze_date,
-            auto_unfreeze_date,
-            sum_quantity,
-            remarks,
-            make_staff,
-            make_time,
-            cp_id,
-            op_app_code,
-        </trim>
-        )
-        values
-        <foreach collection="list" index="index" item="item" separator=",">
-            (
-            <trim suffixOverrides=",">
-                #{item.freezeNo},
-                #{item.cusId}::uuid,
-                #{item.orgId}::uuid,
-                #{item.staffId}::uuid,
-                #{item.freezeStatus},
-                #{item.freezeDate},
-                #{item.autoUnfreezeDate},
-                #{item.sumQuantity},
-                #{item.remarks},
-                #{item.makeStaff}::uuid,
-                #{item.makeTime},
-                #{item.cpId},
-                #{item.opAppCode},
-            </trim>
-            )
-        </foreach>
-    </insert>
 </mapper>
 </mapper>

+ 209 - 0
src/main/java/com/dk/mdm/model/query/ivt/FreezeItemQuery.java

@@ -0,0 +1,209 @@
+package com.dk.mdm.model.query.ivt;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.*;
+import com.dk.common.infrastructure.annotaiton.ExportTitle;
+import com.dk.common.infrastructure.handler.TimestampTypeHandler;
+import com.dk.common.infrastructure.handler.UuidTypeHandler;
+import com.dk.common.model.pojo.PageInfo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ *  冻结单明细
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@ExportTitle("冻结单明细")
+@TableName(value = "t_psi_freeze_item", autoResultMap = true)
+@ApiModel(value="实体类:冻结单明细", description="表名:t_psi_freeze_item")
+public class FreezeItemQuery extends PageInfo<FreezeItemQuery> implements Serializable {
+
+    /*
+     * 数据库字段
+     */
+
+    /**
+     * 明细ID
+     */
+    @TableId(value = "item_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "明细ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String itemId;
+
+
+    /**
+     * 冻结ID
+     */
+    @Excel(name = "冻结ID")
+    @ApiModelProperty(value = "冻结ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String freezeId;
+
+
+    /**
+     * 商品顺序
+     */
+    @Excel(name = "商品顺序")
+    @ApiModelProperty(value = "商品顺序")
+    private Integer itemIndex;
+
+
+    /**
+     * 商品ID
+     */
+    @Excel(name = "商品ID")
+    @ApiModelProperty(value = "商品ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String skuId;
+
+
+    /**
+     * 冻结数量
+     */
+    @Excel(name = "冻结数量")
+    @ApiModelProperty(value = "冻结数量")
+    private BigDecimal freezeQty;
+
+
+    /**
+     * 解冻数量
+     */
+    @Excel(name = "解冻数量")
+    @ApiModelProperty(value = "解冻数量")
+    private BigDecimal unfreezeQty;
+
+
+    /**
+     * 剩余冻结量
+     */
+    @Excel(name = "剩余冻结量")
+    @ApiModelProperty(value = "剩余冻结量")
+    private BigDecimal surplusQty;
+
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+
+    /**
+     * 库存ID
+     */
+    @Excel(name = "库存ID")
+    @ApiModelProperty(value = "库存ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String invId;
+
+
+    /**
+     * 有效标识 (1:正常 0:停用)
+     */
+    @Excel(name = "有效标识 (1:正常 0:停用)")
+    @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
+    private Boolean flgValid;
+
+
+    /**
+     * 企业ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Excel(name = "企业ID")
+    @ApiModelProperty(value = "企业ID")
+    private Integer cpId;
+
+
+    /**
+     * 创建时间 (触发器自动处理)
+     */
+    @Excel(name = "创建时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "创建时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opCreateTime;
+
+
+    /**
+     * 创建用户 (触发器自动处理)
+     */
+    @Excel(name = "创建用户 (触发器自动处理)")
+    @ApiModelProperty(value = "创建用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opCreateUserId;
+
+
+    /**
+     * 修改时间 (触发器自动处理)
+     */
+    @Excel(name = "修改时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "修改时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opUpdateTime;
+
+
+    /**
+     * 修改用户 (触发器自动处理)
+     */
+    @Excel(name = "修改用户 (触发器自动处理)")
+    @ApiModelProperty(value = "修改用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opUpdateUserId;
+
+
+    /**
+     * 数据操作应用 (触发器自动处理)
+     */
+    @Excel(name = "数据操作应用 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作应用 (触发器自动处理)")
+    private String opAppCode;
+
+
+    /**
+     * 数据时间戳 (触发器自动处理)
+     */
+    @Excel(name = "数据时间戳 (触发器自动处理)")
+    @ApiModelProperty(value = "数据时间戳 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opTimestamp;
+
+
+    /**
+     * 数据操作数据库用户 (触发器自动处理)
+     */
+    @Excel(name = "数据操作数据库用户 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
+    private String opDbUser;
+
+
+    /*
+     * 相关属性
+     * @TableField(exist = false)
+     */
+
+    /*
+     * 关联属性 + 查询条件
+     * @TableField(exist = false)
+     */
+
+
+    private static final long serialVersionUID = 1L;
+
+}

+ 244 - 0
src/main/java/com/dk/mdm/model/response/ivt/FreezeItemResponse.java

@@ -0,0 +1,244 @@
+package com.dk.mdm.model.response.ivt;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.*;
+import com.dk.common.infrastructure.annotaiton.ExportTitle;
+import com.dk.common.infrastructure.handler.TimestampTypeHandler;
+import com.dk.common.infrastructure.handler.UuidTypeHandler;
+import com.dk.common.model.pojo.PageInfo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ *  冻结单明细
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@ExportTitle("冻结单明细")
+@TableName(value = "t_psi_freeze_item", autoResultMap = true)
+@ApiModel(value="实体类:冻结单明细", description="表名:t_psi_freeze_item")
+public class FreezeItemResponse extends PageInfo<FreezeItemResponse> implements Serializable {
+
+    /*
+     * 数据库字段
+     */
+
+    /**
+     * 明细ID
+     */
+    @TableId(value = "item_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "明细ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String itemId;
+
+
+    /**
+     * 冻结ID
+     */
+    @Excel(name = "冻结ID")
+    @ApiModelProperty(value = "冻结ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String freezeId;
+
+
+    /**
+     * 商品顺序
+     */
+    @Excel(name = "商品顺序")
+    @ApiModelProperty(value = "商品顺序")
+    private Integer itemIndex;
+
+
+    /**
+     * 商品ID
+     */
+    @Excel(name = "商品ID")
+    @ApiModelProperty(value = "商品ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String skuId;
+
+
+    /**
+     * 冻结数量
+     */
+    @Excel(name = "冻结数量")
+    @ApiModelProperty(value = "冻结数量")
+    private BigDecimal freezeQty;
+
+
+    /**
+     * 解冻数量
+     */
+    @Excel(name = "解冻数量")
+    @ApiModelProperty(value = "解冻数量")
+    private BigDecimal unfreezeQty;
+
+
+    /**
+     * 剩余冻结量
+     */
+    @Excel(name = "剩余冻结量")
+    @ApiModelProperty(value = "剩余冻结量")
+    private BigDecimal surplusQty;
+
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+
+    /**
+     * 库存ID
+     */
+    @Excel(name = "库存ID")
+    @ApiModelProperty(value = "库存ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String invId;
+
+
+    /**
+     * 有效标识 (1:正常 0:停用)
+     */
+    @Excel(name = "有效标识 (1:正常 0:停用)")
+    @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
+    private Boolean flgValid;
+
+
+    /**
+     * 企业ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Excel(name = "企业ID")
+    @ApiModelProperty(value = "企业ID")
+    private Integer cpId;
+
+
+    /**
+     * 创建时间 (触发器自动处理)
+     */
+    @Excel(name = "创建时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "创建时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opCreateTime;
+
+
+    /**
+     * 创建用户 (触发器自动处理)
+     */
+    @Excel(name = "创建用户 (触发器自动处理)")
+    @ApiModelProperty(value = "创建用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opCreateUserId;
+
+
+    /**
+     * 修改时间 (触发器自动处理)
+     */
+    @Excel(name = "修改时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "修改时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opUpdateTime;
+
+
+    /**
+     * 修改用户 (触发器自动处理)
+     */
+    @Excel(name = "修改用户 (触发器自动处理)")
+    @ApiModelProperty(value = "修改用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opUpdateUserId;
+
+
+    /**
+     * 数据操作应用 (触发器自动处理)
+     */
+    @Excel(name = "数据操作应用 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作应用 (触发器自动处理)")
+    private String opAppCode;
+
+
+    /**
+     * 数据时间戳 (触发器自动处理)
+     */
+    @Excel(name = "数据时间戳 (触发器自动处理)")
+    @ApiModelProperty(value = "数据时间戳 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opTimestamp;
+
+
+    /**
+     * 数据操作数据库用户 (触发器自动处理)
+     */
+    @Excel(name = "数据操作数据库用户 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
+    private String opDbUser;
+
+    /**
+     * 库存数量
+     */
+    @Excel(name = "库存数量")
+    @ApiModelProperty(value = "库存数量")
+    private BigDecimal invQty;
+
+    /**
+     * 库存冻结数量
+     */
+    @Excel(name = "库存冻结数量")
+    @ApiModelProperty(value = "库存冻结数量")
+    private BigDecimal invFreezeQty;
+
+    /**
+     * 库存可售量
+     */
+    @Excel(name = "库存可售量")
+    @ApiModelProperty(value = "库存可售量")
+    private BigDecimal usableQty;
+
+    /**
+     * 库存出库中数量
+     */
+    @Excel(name = "库存出库中数量")
+    @ApiModelProperty(value = "库存出库中数量")
+    private BigDecimal outingQty;
+
+    /**
+     * 商品名称
+     */
+    @Excel(name = "商品名称")
+    @ApiModelProperty(value = "商品名称")
+    private String skuName;
+
+
+    /*
+     * 相关属性
+     * @TableField(exist = false)
+     */
+
+    /*
+     * 关联属性 + 查询条件
+     * @TableField(exist = false)
+     */
+
+
+    private static final long serialVersionUID = 1L;
+
+}

+ 209 - 0
src/main/java/com/dk/mdm/model/vo/ivt/FreezeItemVO.java

@@ -0,0 +1,209 @@
+package com.dk.mdm.model.vo.ivt;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.*;
+import com.dk.common.infrastructure.annotaiton.ExportTitle;
+import com.dk.common.infrastructure.handler.TimestampTypeHandler;
+import com.dk.common.infrastructure.handler.UuidTypeHandler;
+import com.dk.common.model.pojo.PageInfo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ *  冻结单明细
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@ExportTitle("冻结单明细")
+@TableName(value = "t_psi_freeze_item", autoResultMap = true)
+@ApiModel(value="实体类:冻结单明细", description="表名:t_psi_freeze_item")
+public class FreezeItemVO extends PageInfo<FreezeItemVO> implements Serializable {
+
+    /*
+     * 数据库字段
+     */
+
+    /**
+     * 明细ID
+     */
+    @TableId(value = "item_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "明细ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String itemId;
+
+
+    /**
+     * 冻结ID
+     */
+    @Excel(name = "冻结ID")
+    @ApiModelProperty(value = "冻结ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String freezeId;
+
+
+    /**
+     * 商品顺序
+     */
+    @Excel(name = "商品顺序")
+    @ApiModelProperty(value = "商品顺序")
+    private Integer itemIndex;
+
+
+    /**
+     * 商品ID
+     */
+    @Excel(name = "商品ID")
+    @ApiModelProperty(value = "商品ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String skuId;
+
+
+    /**
+     * 冻结数量
+     */
+    @Excel(name = "冻结数量")
+    @ApiModelProperty(value = "冻结数量")
+    private BigDecimal freezeQty;
+
+
+    /**
+     * 解冻数量
+     */
+    @Excel(name = "解冻数量")
+    @ApiModelProperty(value = "解冻数量")
+    private BigDecimal unfreezeQty;
+
+
+    /**
+     * 剩余冻结量
+     */
+    @Excel(name = "剩余冻结量")
+    @ApiModelProperty(value = "剩余冻结量")
+    private BigDecimal surplusQty;
+
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+
+    /**
+     * 库存ID
+     */
+    @Excel(name = "库存ID")
+    @ApiModelProperty(value = "库存ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String invId;
+
+
+    /**
+     * 有效标识 (1:正常 0:停用)
+     */
+    @Excel(name = "有效标识 (1:正常 0:停用)")
+    @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
+    private Boolean flgValid;
+
+
+    /**
+     * 企业ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Excel(name = "企业ID")
+    @ApiModelProperty(value = "企业ID")
+    private Integer cpId;
+
+
+    /**
+     * 创建时间 (触发器自动处理)
+     */
+    @Excel(name = "创建时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "创建时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opCreateTime;
+
+
+    /**
+     * 创建用户 (触发器自动处理)
+     */
+    @Excel(name = "创建用户 (触发器自动处理)")
+    @ApiModelProperty(value = "创建用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opCreateUserId;
+
+
+    /**
+     * 修改时间 (触发器自动处理)
+     */
+    @Excel(name = "修改时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "修改时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opUpdateTime;
+
+
+    /**
+     * 修改用户 (触发器自动处理)
+     */
+    @Excel(name = "修改用户 (触发器自动处理)")
+    @ApiModelProperty(value = "修改用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opUpdateUserId;
+
+
+    /**
+     * 数据操作应用 (触发器自动处理)
+     */
+    @Excel(name = "数据操作应用 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作应用 (触发器自动处理)")
+    private String opAppCode;
+
+
+    /**
+     * 数据时间戳 (触发器自动处理)
+     */
+    @Excel(name = "数据时间戳 (触发器自动处理)")
+    @ApiModelProperty(value = "数据时间戳 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opTimestamp;
+
+
+    /**
+     * 数据操作数据库用户 (触发器自动处理)
+     */
+    @Excel(name = "数据操作数据库用户 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
+    private String opDbUser;
+
+
+    /*
+     * 相关属性
+     * @TableField(exist = false)
+     */
+
+    /*
+     * 关联属性 + 查询条件
+     * @TableField(exist = false)
+     */
+
+
+    private static final long serialVersionUID = 1L;
+
+}

+ 245 - 0
src/main/java/com/dk/mdm/model/vo/ivt/FreezeVO.java

@@ -0,0 +1,245 @@
+package com.dk.mdm.model.vo.ivt;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.*;
+import com.dk.common.infrastructure.annotaiton.ExportTitle;
+import com.dk.common.infrastructure.handler.TimestampTypeHandler;
+import com.dk.common.infrastructure.handler.UuidTypeHandler;
+import com.dk.common.model.pojo.PageInfo;
+import com.dk.mdm.model.vo.sale.OrderItemVO;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *  冻结单
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@ExportTitle("冻结单")
+@TableName(value = "t_psi_freeze", autoResultMap = true)
+@ApiModel(value="实体类:冻结单", description="表名:t_psi_freeze")
+public class FreezeVO extends PageInfo<FreezeVO> implements Serializable {
+
+    /*
+     * 数据库字段
+     */
+
+    /**
+     * 冻结ID
+     */
+    @TableId(value = "freeze_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "冻结ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String freezeId;
+
+
+    /**
+     * 冻结单号
+     */
+    @Excel(name = "冻结单号")
+    @ApiModelProperty(value = "冻结单号")
+    private String freezeNo;
+
+
+    /**
+     * 客户ID
+     */
+    @Excel(name = "客户ID")
+    @ApiModelProperty(value = "客户ID")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String cusId;
+
+
+    /**
+     * 部门
+     */
+    @Excel(name = "部门")
+    @ApiModelProperty(value = "部门")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String orgId;
+
+
+    /**
+     * 员工
+     */
+    @Excel(name = "员工")
+    @ApiModelProperty(value = "员工")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String staffId;
+
+
+    /**
+     * 冻结状态 (【系统字典】(全部冻结,部分解冻,全部解冻))
+     */
+    @Excel(name = "冻结状态 (【系统字典】(全部冻结,部分解冻,全部解冻))")
+    @ApiModelProperty(value = "冻结状态 (【系统字典】(全部冻结,部分解冻,全部解冻))")
+    private String freezeStatus;
+
+
+    /**
+     * 冻结日期
+     */
+    @Excel(name = "冻结日期")
+    @ApiModelProperty(value = "冻结日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime freezeDate;
+
+
+    /**
+     * 自动解冻日期
+     */
+    @Excel(name = "自动解冻日期")
+    @ApiModelProperty(value = "自动解冻日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime autoUnfreezeDate;
+
+
+    /**
+     * 商品总数量
+     */
+    @Excel(name = "商品总数量")
+    @ApiModelProperty(value = "商品总数量")
+    private BigDecimal sumQuantity;
+
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+
+
+    /**
+     * 制单员
+     */
+    @Excel(name = "制单员")
+    @ApiModelProperty(value = "制单员")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String makeStaff;
+
+
+    /**
+     * 制单时间
+     */
+    @Excel(name = "制单时间")
+    @ApiModelProperty(value = "制单时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime makeTime;
+
+
+    /**
+     * 有效标识 (1:正常 0:停用)
+     */
+    @Excel(name = "有效标识 (1:正常 0:停用)")
+    @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
+    private Boolean flgValid;
+
+
+    /**
+     * 企业ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Excel(name = "企业ID")
+    @ApiModelProperty(value = "企业ID")
+    private Integer cpId;
+
+
+    /**
+     * 创建时间 (触发器自动处理)
+     */
+    @Excel(name = "创建时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "创建时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opCreateTime;
+
+
+    /**
+     * 创建用户 (触发器自动处理)
+     */
+    @Excel(name = "创建用户 (触发器自动处理)")
+    @ApiModelProperty(value = "创建用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opCreateUserId;
+
+
+    /**
+     * 修改时间 (触发器自动处理)
+     */
+    @Excel(name = "修改时间 (触发器自动处理)", format = "yyyy-MM-dd HH:mm:ss", width = 20)
+    @ApiModelProperty(value = "修改时间 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opUpdateTime;
+
+
+    /**
+     * 修改用户 (触发器自动处理)
+     */
+    @Excel(name = "修改用户 (触发器自动处理)")
+    @ApiModelProperty(value = "修改用户 (触发器自动处理)")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String opUpdateUserId;
+
+
+    /**
+     * 数据操作应用 (触发器自动处理)
+     */
+    @Excel(name = "数据操作应用 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作应用 (触发器自动处理)")
+    private String opAppCode;
+
+
+    /**
+     * 数据时间戳 (触发器自动处理)
+     */
+    @Excel(name = "数据时间戳 (触发器自动处理)")
+    @ApiModelProperty(value = "数据时间戳 (触发器自动处理)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @TableField(typeHandler = TimestampTypeHandler.class)
+    private LocalDateTime opTimestamp;
+
+
+    /**
+     * 数据操作数据库用户 (触发器自动处理)
+     */
+    @Excel(name = "数据操作数据库用户 (触发器自动处理)")
+    @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
+    private String opDbUser;
+
+
+    @ApiModelProperty(value = "明细")
+    private List<FreezeItemVO> itemList;
+
+    /*
+     * 相关属性
+     * @TableField(exist = false)
+     */
+
+    /*
+     * 关联属性 + 查询条件
+     * @TableField(exist = false)
+     */
+
+
+    private static final long serialVersionUID = 1L;
+
+}

+ 10 - 0
src/main/java/com/dk/mdm/service/ivt/FreezeItemService.java

@@ -20,4 +20,14 @@ public class FreezeItemService extends BaseService<FreezeItem> {
 	@Autowired
 	@Autowired
 	private FreezeItemMapper freezeItemMapper;
 	private FreezeItemMapper freezeItemMapper;
 
 
+	/**
+	 * @desc   : 重写主键
+	 * @author : 宋扬
+	 * @date   : 2023/3/13 10:39
+	 */
+	@Override
+	public String getPrimaryKey() {
+		return "item_id";
+	}
+
 }
 }

+ 119 - 0
src/main/java/com/dk/mdm/service/ivt/FreezeService.java

@@ -1,12 +1,43 @@
 package com.dk.mdm.service.ivt;
 package com.dk.mdm.service.ivt;
 
 
+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;
+import com.dk.common.model.pojo.PageList;
+import com.dk.common.response.ResponseCodeEnum;
+import com.dk.common.response.ResponseResultUtil;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.mdm.infrastructure.convert.ivt.FreezeConvert;
+import com.dk.mdm.infrastructure.convert.ivt.FreezeItemConvert;
+import com.dk.mdm.infrastructure.convert.mst.SupplierConvert;
+import com.dk.mdm.infrastructure.convert.sale.OrderItemConvert;
+import com.dk.mdm.mapper.ivt.FreezeItemMapper;
+import com.dk.mdm.mapper.sale.OrderItemMapper;
 import com.dk.mdm.model.pojo.ivt.Freeze;
 import com.dk.mdm.model.pojo.ivt.Freeze;
 import com.dk.mdm.mapper.ivt.FreezeMapper;
 import com.dk.mdm.mapper.ivt.FreezeMapper;
 import com.dk.common.service.BaseService;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.pojo.ivt.FreezeItem;
+import com.dk.mdm.model.pojo.mst.Supplier;
+import com.dk.mdm.model.pojo.sale.OrderItem;
+import com.dk.mdm.model.query.ivt.FreezeItemQuery;
+import com.dk.mdm.model.query.ivt.FreezeQuery;
+import com.dk.mdm.model.response.ivt.FreezeItemResponse;
+import com.dk.mdm.model.response.ivt.FreezeResponse;
+import com.dk.mdm.model.vo.ivt.FreezeItemVO;
+import com.dk.mdm.model.vo.ivt.FreezeVO;
+import com.dk.mdm.model.vo.mst.SupplierVo;
+import com.dk.mdm.model.vo.sale.OrderItemVO;
+import com.dk.mdm.service.common.CommonService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 
 @Service
 @Service
 @Transactional
 @Transactional
@@ -20,4 +51,92 @@ public class FreezeService extends BaseService<Freeze> {
 	@Autowired
 	@Autowired
 	private FreezeMapper freezeMapper;
 	private FreezeMapper freezeMapper;
 
 
+	@Autowired
+	private FreezeItemMapper freezeItemMapper;
+
+	@Autowired
+	private FreezeConvert freezeConvert;
+
+	@Autowired
+	private CommonService commonService;
+
+	@Autowired
+	private FreezeItemConvert freezeItemConvert;
+
+
+
+	/**
+	 * @desc   : 重写主键
+	 * @author : 宋扬
+	 * @date   : 2023/3/13 10:39
+	 */
+	@Override
+	public String getPrimaryKey() {
+		return "freeze_id";
+	}
+
+	/**
+	 * @desc   : 条件查询
+	 * @author : 宋扬
+	 * @date   : 2023/2/29 10:40
+	 */
+	@Pagination
+	public ResponseResultVO<PageList<FreezeResponse>> selectByCond(FreezeQuery freezeQuery) {
+		return super.mergeListWithCount(freezeQuery, freezeMapper.selectByCond(freezeQuery),
+				freezeMapper.countByCond(freezeQuery));
+	}
+
+	/**
+	 * @desc   : 查询明细数据
+	 * @author : 宋扬
+	 * @date   : 2024/3/13 16:05
+	 */
+	@Pagination
+	public List<FreezeItemResponse> selectFreezeItemById(String id) {
+		return freezeItemMapper.selectByCond(new FreezeItemQuery().setFreezeId(id));
+	}
+
+	/**
+	 * @desc   : 新建冻结单
+	 * @author : 宋扬
+	 * @date   : 2024/3/15 10:33
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<?> insert(FreezeVO freezeVO) {
+		// 转化实体
+		Freeze freeze = freezeConvert.convertToPo(freezeVO);
+		try {
+			// 判断库存量和冻结量
+			if (freezeVO.getItemList() != null && freezeVO.getItemList().size() > 0) {
+				for (FreezeItemVO freezeItemVO : freezeVO.getItemList()) {
+					FreezeItemResponse freezeItem = freezeItemMapper.selectInvById(freezeItemVO.getInvId());
+					// 库存可售量不能小于冻结量
+					if (freezeItem.getUnfreezeQty().compareTo(freezeItemVO.getFreezeQty() ) == -1){
+						throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FREEZEQTY_NO_LESS_USABLEQTY.getMessage());
+					}
+				}
+			}
+
+			Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.Freeze.getName(), true);
+			freeze.setFreezeId(codeMap.get("outId").toString());
+			freeze.setFreezeNo(codeMap.get("outNote").toString());  //插入冻结表的实体
+			super.insert(freeze);// 先插入自己的冻结单
+
+			// 插入冻结明细
+			if (freezeVO.getItemList() != null && freezeVO.getItemList().size() > 0) {
+				for (FreezeItemVO freezeItemVO : freezeVO.getItemList()) {
+					FreezeItem freezeItem = freezeItemConvert.convertToPo(freezeItemVO);
+					freezeItemMapper.insert(freezeItem);
+				}
+			}
+
+			return ResponseResultUtil.success();
+		} catch (Exception e) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 手动回滚事务
+
+			return ResponseResultUtil.error("保存失败");
+		}
+
+	}
+
 }
 }