소스 검색

冻结功能

songyang 2 년 전
부모
커밋
7077e8abce

+ 21 - 0
src/main/java/com/dk/mdm/controller/ivt/FreezeController.java

@@ -9,6 +9,7 @@ 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 com.dk.mdm.model.vo.sale.OrderVO;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -63,5 +64,25 @@ public class FreezeController{
         return freezeService.insert(freezeVO);
     }
 
+    /**
+     * @desc   : 通过ID查询解冻数据
+     * @author : 宋扬
+     * @date   : 2024/3/19 16:31
+     */
+    @ApiOperation(value = "获取解冻信息", notes = "获取解冻信息")
+    @PostMapping({"get_freeze_for_update/{id}"})
+    public ResponseResultVO getFreezeForUpdate(@PathVariable String id) {
+        return freezeService.getFreezeForUpdate(id);
+    }
 
+    /**
+     * @desc   : 解冻
+     * @author : 宋扬
+     * @date   : 2024/3/20 8:55
+     */
+    @ApiOperation(value = "解冻", notes = "解冻")
+    @PostMapping({"update"})
+    public ResponseResultVO<?> update(@RequestBody FreezeVO freezeVO) {
+        return freezeService.update(freezeVO);
+    }
 }

+ 2 - 1
src/main/java/com/dk/mdm/controller/ivt/FreezeItemController.java

@@ -7,6 +7,8 @@ import com.dk.common.controller.BaseController;
 import com.dk.common.service.BaseService;
 import com.dk.mdm.model.query.ivt.FreezeItemQuery;
 import com.dk.mdm.model.response.ivt.FreezeItemResponse;
+import com.dk.mdm.model.vo.ivt.FreezeItemVO;
+import com.dk.mdm.model.vo.ivt.FreezeVO;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -41,5 +43,4 @@ public class FreezeItemController{
     public ResponseResultVO<PageList<FreezeItemResponse>> selectByCond(@RequestBody FreezeItemQuery freezeItemQuery) {
         return freezeItemService.selectByCond(freezeItemQuery);
     }
-
 }

+ 14 - 0
src/main/java/com/dk/mdm/mapper/ivt/FreezeItemMapper.java

@@ -24,6 +24,13 @@ public interface FreezeItemMapper extends BaseMapper<FreezeItem>{
     List<FreezeItemResponse> selectByCond(FreezeItemQuery freezeItemQuery);
 
     /**
+     * @desc   : 根据Id进行查询
+     * @author : 宋扬
+     * @date   : 2024/3/19 16:15
+     */
+    FreezeItemResponse selectById(String id);
+
+    /**
      * @desc   : 根据商品ID和仓库ID查询库存信息
      * @author : 宋扬
      * @date   : 2024/3/15 15:57
@@ -43,5 +50,12 @@ public interface FreezeItemMapper extends BaseMapper<FreezeItem>{
     * @date   : 2024/3/18 17:09
     */
     Long countByCond(FreezeItemQuery freezeItemQuery);
+
+    /**
+     * @desc   : 减少库存冻结量
+     * @author : 宋扬
+     * @date   : 2024/3/20 11:07
+     */
+    int updateInvUnFreezeQty(FreezeItemVO freezeItemVO);
 }
 

+ 30 - 37
src/main/java/com/dk/mdm/mapper/ivt/FreezeItemMapper.xml

@@ -5,7 +5,8 @@
     <!-- 通用设置 -->
     <!-- 通用查询列 -->
     <sql id="Base_Column_List">
-        item_id, freeze_id, item_index, sku_id, freeze_qty, unfreeze_qty, surplus_qty, remarks, inv_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
+        item.item_id, item.freeze_id, item.item_index, item.sku_id, item.freeze_qty, item.unfreeze_qty, item.surplus_qty, item.remarks, item.inv_id, item.flg_valid
+        ,item.cp_id, sku.sku_code, sku.sku_name, sku.sku_model,brand.short_name,wh.wh_name
     </sql>
 
     <!-- 通用查询映射结果 -->
@@ -34,55 +35,34 @@
     <sql id="Condition">
         <where>
             <if test="freezeId != null and freezeId != ''">
-                AND freeze_id = #{freezeId}::uuid
+                AND item.freeze_id = #{freezeId}::uuid
             </if>
             <if test="itemIndex != null">
-                AND item_index = #{itemIndex}
+                AND item.item_index = #{itemIndex}
             </if>
             <if test="skuId != null and skuId != ''">
-                AND sku_id = #{skuId}
+                AND item.sku_id = #{skuId}
             </if>
             <if test="freezeQty != null">
-                AND freeze_qty = #{freezeQty}
+                AND item.freeze_qty = #{freezeQty}
             </if>
             <if test="unfreezeQty != null">
-                AND unfreeze_qty = #{unfreezeQty}
+                AND item.unfreeze_qty = #{unfreezeQty}
             </if>
             <if test="surplusQty != null">
-                AND surplus_qty = #{surplusQty}
+                AND item.surplus_qty = #{surplusQty}
             </if>
             <if test="remarks != null and remarks != ''">
-                AND remarks = #{remarks}
+                AND item.remarks = #{remarks}
             </if>
             <if test="invId != null and invId != ''">
-                AND inv_id = #{invId}
+                AND item.inv_id = #{invId}
             </if>
             <if test="flgValid != null">
-                AND flg_valid = #{flgValid}
+                AND item.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 item.cp_id = #{cpId}
             </if>
         </where>
     </sql>
@@ -91,7 +71,11 @@
     <select id="selectByCond" resultMap="BaseResultMap">
         SELECT
         <include refid="Base_Column_List"/>
-        FROM dkic_b.t_psi_freeze_item
+        FROM dkic_b.t_psi_freeze_item AS item
+        LEFT JOIN dkic_b.t_mst_goods_sku AS sku ON item.sku_id=sku.sku_id
+        LEFT JOIN dkic_b.t_psi_inventory AS inv ON inv.inv_id=item.inv_id
+        LEFT JOIN dkic_b.t_mst_warehouse AS wh ON wh.wh_id=inv.wh_id
+        LEFT JOIN dkic_b.t_mst_goods_brand AS brand ON brand.brand_id=sku.brand_id
         <include refid="Condition"/>
     </select>
 
@@ -99,16 +83,18 @@
     <select id="countByCond" resultType="Long">
         SELECT
         count(1)
-        FROM dkic_b.t_psi_freeze_item
+        FROM dkic_b.t_psi_freeze_item AS item
         <include refid="Condition"/>
     </select>
 
     <!-- 根据主键查询表t_psi_freeze_item的一行数据 -->
     <select id="selectById" resultMap="BaseResultMap">
         SELECT
-        <include refid="Base_Column_List"/>
-        FROM dkic_b.t_psi_freeze_item
-        WHERE item_id = #{itemId}::uuid
+            item.item_id, item.freeze_id, item.item_index, item.sku_id, item.freeze_qty, item.unfreeze_qty
+             , item.surplus_qty, item.remarks, item.inv_id, item.flg_valid,item.cp_id
+        FROM dkic_b.t_psi_freeze_item AS item
+        WHERE item.item_id = #{itemId}::uuid
+        for update
     </select>
 
     <!-- 根据商品ID和仓库ID查询库存信息-->
@@ -127,4 +113,11 @@
         where inv_id = #{invId} ::uuid
     </update>
 
+    <!-- 根据库存ID修改库存表里的冻结量-->
+    <update id="updateInvUnFreezeQty">
+        update dkic_b.t_psi_inventory
+        set freeze_qty = freeze_qty - #{unfreezeQty}
+        where inv_id = #{invId} ::uuid
+    </update>
+
 </mapper>

+ 38 - 42
src/main/java/com/dk/mdm/mapper/ivt/FreezeMapper.xml

@@ -5,7 +5,11 @@
     <!-- 通用设置 -->
     <!-- 通用查询列 -->
     <sql id="Base_Column_List">
-        freeze_id, freeze_no, cus_id, org_id, staff_id, freeze_status, freeze_date, auto_unfreeze_date, sum_quantity, remarks, make_staff, make_time, 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
+        fre.freeze_id,fre.freeze_no,fre.cus_id,fre.org_id,fre.staff_id
+        ,sys.f_get_name_i18n(tdk.kind_name_i18n,'zh_CN' ) AS "freezeStatusName"
+        ,fre.freeze_date,fre.auto_unfreeze_date ,fre.sum_quantity, fre.remarks, fre.make_staff
+        , fre.make_time, fre.flg_valid,fre.cp_id,cus.cus_phone
+        ,cus.cus_name,staff.staff_name,org.org_name,mstaff.staff_name AS "makeStaffName"
     </sql>
 
     <!-- 通用查询映射结果 -->
@@ -37,64 +41,46 @@
     <sql id="Condition">
         <where>
             <if test="freezeNo != null and freezeNo != ''">
-                AND freeze_no = #{freezeNo}
+                AND fre.freeze_no LIKE concat('%',my_ex.likequery(#{freezeNo}),'%')
             </if>
             <if test="cusId != null and cusId != ''">
-                AND cus_id = #{cusId}
+                AND fre.cus_id = #{cusId}
             </if>
             <if test="orgId != null and orgId != ''">
-                AND org_id = #{orgId}
+                AND fre.org_id = #{orgId}
             </if>
             <if test="staffId != null and staffId != ''">
-                AND staff_id = #{staffId}
+                AND fre.staff_id = #{staffId}
             </if>
             <if test="freezeStatus != null and freezeStatus != ''">
-                AND freeze_status = #{freezeStatus}
+                AND fre.freeze_status = #{freezeStatus}
             </if>
             <if test="freezeDate != null">
-                AND freeze_date = #{freezeDate}
+                AND fre.freeze_date = #{freezeDate}
             </if>
             <if test="autoUnfreezeDate != null">
-                AND auto_unfreeze_date = #{autoUnfreezeDate}
-            </if>
-            <if test="sumQuantity != null">
-                AND sum_quantity = #{sumQuantity}
+                AND fre.auto_unfreeze_date = #{autoUnfreezeDate}
             </if>
             <if test="remarks != null and remarks != ''">
-                AND remarks = #{remarks}
-            </if>
-            <if test="makeStaff != null and makeStaff != ''">
-                AND make_staff = #{makeStaff}
-            </if>
-            <if test="makeTime != null">
-                AND make_time = #{makeTime}
-            </if>
-            <if test="flgValid != null">
-                AND flg_valid = #{flgValid}
+                AND fre.remarks = #{remarks}
             </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}
+                AND fre.cp_id = #{cpId}
             </if>
-            <if test="opUpdateTime != null">
-                AND op_update_time = #{opUpdateTime}
+            <if test="flgValidList != null and flgValidList.size>0">
+                AND fre.flg_valid  =any(#{flgValidList, typeHandler=BooleanListTypeHandler})
             </if>
-            <if test="opUpdateUserId != null and opUpdateUserId != ''">
-                AND op_update_user_id = #{opUpdateUserId}
+            <if test="orgIdList != null and orgIdList.size>0">
+                AND fre.org_id = any(#{orgIdList, typeHandler=UuidListTypeHandler})
             </if>
-            <if test="opAppCode != null and opAppCode != ''">
-                AND op_app_code = #{opAppCode}
+            <if test="staffIdList != null and staffIdList.size>0">
+                AND fre.staff_id = any(#{staffIdList, typeHandler=UuidListTypeHandler})
             </if>
-            <if test="opTimestamp != null">
-                AND op_timestamp = #{opTimestamp}
+            <if test="cusName != null and cusName != ''">
+                AND cus.cus_name LIKE concat('%',my_ex.likequery(#{cusName}),'%')
             </if>
-            <if test="opDbUser != null and opDbUser != ''">
-                AND op_db_user = #{opDbUser}
+            <if test="freezeStatusList != null and freezeStatusList.size() > 0">
+                AND fre.freeze_status = any(#{freezeStatusList, typeHandler=UuidListTypeHandler})
             </if>
         </where>
     </sql>
@@ -103,7 +89,12 @@
     <select id="selectByCond" resultMap="BaseResultMap">
         SELECT
         <include refid="Base_Column_List"/>
-        FROM dkic_b.t_psi_freeze
+        FROM dkic_b.t_psi_freeze AS fre
+        lEFT JOIN dkic_b.t_mst_customer AS cus ON cus.cus_id=fre.cus_id
+        lEFT JOIN dkic_b.t_mst_staff AS staff ON  staff.staff_id=fre.staff_id
+        lEFT JOIN dkic_b.t_mst_org AS org ON org.org_id=fre.org_id
+        lEFT JOIN dkic_b.t_mst_staff AS mstaff ON mstaff.staff_id=fre.make_staff
+        LEFT JOIN sys.t_data_kind AS tdk   ON tdk.kind_code = fre.freeze_status
         <include refid="Condition"/>
         <if test="pageSize != null and currentPage != null and pageSize != 0 and currentPage != 0">
             limit #{end} offset #{start}
@@ -114,7 +105,7 @@
     <select id="countByCond" resultType="Long">
         SELECT
         count(1)
-        FROM dkic_b.t_psi_freeze
+        FROM dkic_b.t_psi_freeze AS fre
         <include refid="Condition"/>
     </select>
 
@@ -122,8 +113,13 @@
     <select id="selectById" resultMap="BaseResultMap">
         SELECT
         <include refid="Base_Column_List"/>
-        FROM dkic_b.t_psi_freeze
-        WHERE freeze_id = #{freezeId}::uuid
+        FROM dkic_b.t_psi_freeze AS fre
+        lEFT JOIN dkic_b.t_mst_customer AS cus ON cus.cus_id=fre.cus_id
+        lEFT JOIN dkic_b.t_mst_staff AS staff ON  staff.staff_id=fre.staff_id
+        lEFT JOIN dkic_b.t_mst_org AS org ON org.org_id=fre.org_id
+        lEFT JOIN dkic_b.t_mst_staff AS mstaff ON mstaff.staff_id=fre.make_staff
+        LEFT JOIN sys.t_data_kind AS tdk   ON tdk.kind_code = fre.freeze_status
+        WHERE fre.freeze_id = #{freezeId}::uuid
     </select>
 
 

+ 3 - 2
src/main/java/com/dk/mdm/model/pojo/ivt/Freeze.java

@@ -18,6 +18,7 @@ import io.swagger.annotations.ApiModelProperty;
 import com.alibaba.fastjson.JSONObject;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 import java.time.LocalDateTime;
 
@@ -96,7 +97,7 @@ public class Freeze extends PageInfo<Freeze> implements Serializable {
     @ApiModelProperty(value = "冻结日期")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @TableField(typeHandler = TimestampTypeHandler.class)
-    private LocalDateTime freezeDate;
+    private LocalDate freezeDate;
 
 
     /**
@@ -106,7 +107,7 @@ public class Freeze extends PageInfo<Freeze> implements Serializable {
     @ApiModelProperty(value = "自动解冻日期")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @TableField(typeHandler = TimestampTypeHandler.class)
-    private LocalDateTime autoUnfreezeDate;
+    private LocalDate autoUnfreezeDate;
 
 
     /**

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

@@ -192,7 +192,6 @@ public class FreezeItemQuery extends PageInfo<FreezeItemQuery> implements Serial
     @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
     private String opDbUser;
 
-
     /*
      * 相关属性
      * @TableField(exist = false)

+ 40 - 8
src/main/java/com/dk/mdm/model/query/ivt/FreezeQuery.java

@@ -17,7 +17,9 @@ import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  *  冻结单
@@ -95,7 +97,7 @@ public class FreezeQuery extends PageInfo<FreezeQuery> implements Serializable {
     @ApiModelProperty(value = "冻结日期")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @TableField(typeHandler = TimestampTypeHandler.class)
-    private LocalDateTime freezeDate;
+    private LocalDate freezeDate;
 
 
     /**
@@ -105,7 +107,7 @@ public class FreezeQuery extends PageInfo<FreezeQuery> implements Serializable {
     @ApiModelProperty(value = "自动解冻日期")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @TableField(typeHandler = TimestampTypeHandler.class)
-    private LocalDateTime autoUnfreezeDate;
+    private LocalDate autoUnfreezeDate;
 
 
     /**
@@ -224,16 +226,46 @@ public class FreezeQuery extends PageInfo<FreezeQuery> implements Serializable {
     private String opDbUser;
 
 
-    /*
-     * 相关属性
-     * @TableField(exist = false)
+    /**
+     * @desc   : 有效标识List
+     * @author : 宋扬
+     * @date   : 2024/3/19 10:37
      */
+    @Excel(name = "有效标识 (1:正常 0:停用)")
+    @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
+    private List<Boolean> flgValidList;
 
-    /*
-     * 关联属性 + 查询条件
-     * @TableField(exist = false)
+    /**
+     * @desc   : 组织名称
+     * @author : 宋扬
+     * @date   : 2024/3/19 10:44
+     */
+    @ApiModelProperty(value = "组织名称")
+    private List<String> orgIdList;
+
+    /**
+     * @desc   : 员工
+     * @author : 宋扬
+     * @date   : 2024/3/19 10:46
      */
+    @ApiModelProperty(value = "员工姓名")
+    private List<String> staffIdList;
 
+    /**
+     * @desc   : 客户名称
+     * @author : 宋扬
+     * @date   : 2024/3/19 10:46
+     */
+    @ApiModelProperty(value = "客户名称")
+    private String cusName;
+
+    /**
+     * @desc   : 冻结状态
+     * @author : 宋扬
+     * @date   : 2024/3/19 11:08
+     */
+    @ApiModelProperty(value = "冻结状态")
+    private List<String> freezeStatusList;
 
     private static final long serialVersionUID = 1L;
 

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

@@ -227,6 +227,33 @@ public class FreezeItemResponse extends PageInfo<FreezeItemResponse> implements
     @ApiModelProperty(value = "商品名称")
     private String skuName;
 
+    /**
+     * 商品编码
+     */
+    @Excel(name = "商品编码")
+    @ApiModelProperty(value = "商品编码")
+    private String skuCode;
+
+    /**
+     * 商品型号
+     */
+    @Excel(name = "商品型号")
+    @ApiModelProperty(value = "商品型号")
+    private String skuModel;
+
+    /**
+     * 品牌简称
+     */
+    @Excel(name = "品牌简称")
+    @ApiModelProperty(value = "品牌简称")
+    private String shortName;
+
+    /**
+     * 仓库名称
+     */
+    @Excel(name = "仓库名称")
+    @ApiModelProperty(value = "仓库名称")
+    private String whName;
 
     /*
      * 相关属性

+ 38 - 6
src/main/java/com/dk/mdm/model/response/ivt/FreezeResponse.java

@@ -222,16 +222,48 @@ public class FreezeResponse extends PageInfo<FreezeResponse> implements Serializ
     @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
     private String opDbUser;
 
+    /**
+     * 冻结状态
+     */
+    @Excel(name = "冻结状态")
+    @ApiModelProperty(value = "冻结状态")
+    private String freezeStatusName;
 
-    /*
-     * 相关属性
-     * @TableField(exist = false)
+
+    /**
+     * 组织部门
      */
+    @Excel(name = "组织部门")
+    @ApiModelProperty(value = "组织部门")
+    private String orgName;
 
-    /*
-     * 关联属性 + 查询条件
-     * @TableField(exist = false)
+    /**
+     * 业务员
+     */
+    @Excel(name = "业务员")
+    @ApiModelProperty(value = "业务员")
+    private String staffName;
+
+    /**
+     * 客户名称
+     */
+    @Excel(name = "客户名称")
+    @ApiModelProperty(value = "客户名称")
+    private String cusName;
+
+    /**
+     * 客户电话
+     */
+    @Excel(name = "客户电话")
+    @ApiModelProperty(value = "客户电话")
+    private String cusPhone;
+
+    /**
+     * 制单人
      */
+    @Excel(name = "制单人")
+    @ApiModelProperty(value = "制单人")
+    private String makeStaffName;
 
 
     private static final long serialVersionUID = 1L;

+ 5 - 4
src/main/java/com/dk/mdm/model/vo/ivt/FreezeVO.java

@@ -18,6 +18,7 @@ import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -95,9 +96,9 @@ public class FreezeVO extends PageInfo<FreezeVO> implements Serializable {
      */
     @Excel(name = "冻结日期")
     @ApiModelProperty(value = "冻结日期")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @TableField(typeHandler = TimestampTypeHandler.class)
-    private LocalDateTime freezeDate;
+    private LocalDate freezeDate;
 
 
     /**
@@ -105,9 +106,9 @@ public class FreezeVO extends PageInfo<FreezeVO> implements Serializable {
      */
     @Excel(name = "自动解冻日期")
     @ApiModelProperty(value = "自动解冻日期")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @TableField(typeHandler = TimestampTypeHandler.class)
-    private LocalDateTime autoUnfreezeDate;
+    private LocalDate autoUnfreezeDate;
 
 
     /**

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

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
+
 @Service
 @Transactional
 public class FreezeItemService extends BaseService<FreezeItem> {
@@ -44,5 +45,4 @@ public class FreezeItemService extends BaseService<FreezeItem> {
 	public ResponseResultVO<PageList<FreezeItemResponse>> selectByCond(FreezeItemQuery freezeItemQuery) {
 		return super.mergeListWithCount(freezeItemMapper, freezeItemMapper.selectByCond(freezeItemQuery), freezeItemMapper.countByCond(freezeItemQuery));
 	}
-
 }

+ 69 - 1
src/main/java/com/dk/mdm/service/ivt/FreezeService.java

@@ -1,5 +1,6 @@
 package com.dk.mdm.service.ivt;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.dk.common.exception.BaseBusinessException;
 import com.dk.common.infrastructure.annotaiton.Pagination;
 import com.dk.common.infrastructure.constant.Constant;
@@ -16,21 +17,34 @@ import com.dk.mdm.mapper.ivt.FreezeMapper;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.pojo.ivt.FreezeItem;
+import com.dk.mdm.model.pojo.sale.Order;
+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.query.sale.OrderItemQuery;
 import com.dk.mdm.model.response.ivt.FreezeItemResponse;
 import com.dk.mdm.model.response.ivt.FreezeResponse;
+import com.dk.mdm.model.response.sale.OrderItemResponse;
+import com.dk.mdm.model.response.sale.OrderResponse;
 import com.dk.mdm.model.vo.ivt.FreezeItemVO;
 import com.dk.mdm.model.vo.ivt.FreezeVO;
+import com.dk.mdm.model.vo.sale.OrderItemVO;
+import com.dk.mdm.model.vo.sale.OrderVO;
 import com.dk.mdm.service.common.CommonService;
+import com.dk.mdm.service.sale.OrderItemService;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
+import java.util.stream.Collectors;
 
 @Service
 @Transactional
@@ -56,6 +70,8 @@ public class FreezeService extends BaseService<Freeze> {
 	@Autowired
 	private FreezeItemConvert freezeItemConvert;
 
+	@Autowired
+	private FreezeItemService freezeItemService;
 
 
 	/**
@@ -101,7 +117,7 @@ public class FreezeService extends BaseService<Freeze> {
 			}
 			Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.Freeze.getName(), true);
 			// 获取冻结状态 获取冻结日期(当前日期) 插入冻结表的实体
-			freeze.setFreezeStatus(Constant.FreezeStatusType.ALLFREEZE.getName()).setFreezeDate(LocalDateTime.now())
+			freeze.setFreezeStatus(Constant.FreezeStatusType.ALLFREEZE.getName()).setFreezeDate(LocalDate.now())
 					.setCusId(freezeVO.getCusId()).setMakeStaff(freezeVO.getMakeStaff()).setOrgId(freezeVO.getOrgId())
 					.setAutoUnfreezeDate(freezeVO.getAutoUnfreezeDate()).setMakeTime(LocalDateTime.now())
 					.setStaffId(freezeVO.getStaffId()).setFreezeId(codeMap.get("outId").toString()).setCpId(freezeVO.getCpId())
@@ -128,4 +144,56 @@ public class FreezeService extends BaseService<Freeze> {
 
 	}
 
+	/**
+	 * @desc   : 获取冻结单信息(解冻用)
+	 * @author : 宋扬
+	 * @date   : 2024/3/19 15:29
+	 */
+	public ResponseResultVO<?> getFreezeForUpdate(String id) {
+		Map<String, Object> dataInfo = new HashMap<>();
+		FreezeResponse freezeResponse = freezeMapper.selectById(id);
+		dataInfo.put("data", freezeResponse);
+		// 商品明细
+		List<FreezeItemResponse> freezeItem = freezeItemMapper.selectByCond(new FreezeItemQuery().setFreezeId(id));
+		dataInfo.put("dataItem", freezeItem);
+		return ResponseResultUtil.success(dataInfo);
+	}
+
+	/**
+	 * @desc   : 解冻
+	 * @author : 宋扬
+	 * @date   : 2024/3/20 8:57
+	 */
+	@Transactional(
+			rollbackFor = {Exception.class}
+	)
+	public ResponseResultVO<?> update(FreezeVO freezeVO) {
+		// 明细实体(避免并发,需要再查一遍)
+		FreezeItemResponse freezeItemForUpdate;
+		// 转化实体
+		Freeze freeze = freezeConvert.convertToPo(freezeVO);
+		// 赋值全部解冻
+		String freezeStatus=Constant.FreezeStatusType.ALLUNFREEZE.getName();
+		// 解冻
+		for (FreezeItemVO freezeItemVO : freezeVO.getItemList()) {
+			// 查询锁表
+			freezeItemForUpdate = freezeItemMapper.selectById(freezeItemVO.getItemId());
+			FreezeItem freezeItem = freezeItemConvert.convertToPo(freezeItemVO);
+			// 修改冻结单明细解冻量
+			freezeItemService.updateByUuid(freezeItem);
+			// 修改库存冻结量
+			freezeItemMapper.updateInvUnFreezeQty(freezeItemVO);
+			// 根据冻结量和剩余冻结量判断冻结主表的部分解冻
+			if(!freezeItem.getSurplusQty().equals(freezeItem.getFreezeQty()))
+			{
+				freezeStatus=Constant.FreezeStatusType.PARTUNFREEZE.getName();
+			}
+		}
+		// 赋值冻结表状态和ID
+		freeze.setFreezeId(freezeVO.getFreezeId()).setFreezeStatus(freezeStatus);
+		// 更新主表冻结状态
+		return ResponseResultUtil.success(super.update(freeze, new UpdateWrapper<Freeze>().lambda().eq(Freeze::getFreezeId,
+				UUID.fromString(freeze.getFreezeId()))));
+	}
+
 }