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

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

zhoux 1 год назад
Родитель
Сommit
635589773b
34 измененных файлов с 612 добавлено и 125 удалено
  1. 1 15
      src/main/java/com/dk/mdm/controller/ivt/outBound/OutboundSaleOrderController.java
  2. 15 0
      src/main/java/com/dk/mdm/controller/mst/GoodsSkuController.java
  3. 30 1
      src/main/java/com/dk/mdm/mapper/ivt/InboundItemMapper.xml
  4. 5 1
      src/main/java/com/dk/mdm/mapper/ivt/InventoryMapper.xml
  5. 7 0
      src/main/java/com/dk/mdm/mapper/mst/GoodsBrandMapper.java
  6. 13 0
      src/main/java/com/dk/mdm/mapper/mst/GoodsBrandMapper.xml
  7. 7 0
      src/main/java/com/dk/mdm/mapper/mst/GoodsCategoryMapper.java
  8. 12 0
      src/main/java/com/dk/mdm/mapper/mst/GoodsCategoryMapper.xml
  9. 9 0
      src/main/java/com/dk/mdm/mapper/mst/GoodsSeriesMapper.java
  10. 28 1
      src/main/java/com/dk/mdm/mapper/mst/GoodsSeriesMapper.xml
  11. 18 9
      src/main/java/com/dk/mdm/mapper/mst/GoodsSkuMapper.xml
  12. 9 0
      src/main/java/com/dk/mdm/mapper/mst/UnitMapper.java
  13. 30 1
      src/main/java/com/dk/mdm/mapper/mst/UnitMapper.xml
  14. 3 0
      src/main/java/com/dk/mdm/model/pojo/ivt/InboundItem.java
  15. 60 25
      src/main/java/com/dk/mdm/model/pojo/mst/GoodsSku.java
  16. 1 1
      src/main/java/com/dk/mdm/model/pojo/sale/Order.java
  17. 1 1
      src/main/java/com/dk/mdm/model/pojo/sale/OrderItem.java
  18. 20 0
      src/main/java/com/dk/mdm/model/query/ivt/InboundItemQuery.java
  19. 2 0
      src/main/java/com/dk/mdm/model/query/ivt/InventoryQuery.java
  20. 7 2
      src/main/java/com/dk/mdm/model/query/mst/GoodsSkuQuery.java
  21. 7 0
      src/main/java/com/dk/mdm/model/response/ivt/InboundItemResponse.java
  22. 9 0
      src/main/java/com/dk/mdm/model/response/ivt/InventoryResponse.java
  23. 7 0
      src/main/java/com/dk/mdm/model/response/mst/GoodsSkuResponse.java
  24. 1 1
      src/main/java/com/dk/mdm/model/response/sale/OrderItemResponse.java
  25. 1 1
      src/main/java/com/dk/mdm/model/response/sale/OrderResponse.java
  26. 3 0
      src/main/java/com/dk/mdm/model/vo/ivt/InboundItemVO.java
  27. 3 0
      src/main/java/com/dk/mdm/model/vo/ivt/OutboundItemVO.java
  28. 8 1
      src/main/java/com/dk/mdm/model/vo/mst/GoodsSkuVO.java
  29. 1 1
      src/main/java/com/dk/mdm/model/vo/sale/OrderItemVO.java
  30. 6 0
      src/main/java/com/dk/mdm/model/vo/sale/OrderVO.java
  31. 38 8
      src/main/java/com/dk/mdm/service/ivt/inventory/InventoryService.java
  32. 116 46
      src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java
  33. 131 9
      src/main/java/com/dk/mdm/service/mst/GoodsSkuService.java
  34. 3 1
      src/main/java/com/dk/mdm/service/sale/OrderService.java

+ 1 - 15
src/main/java/com/dk/mdm/controller/ivt/outBound/OutboundSaleOrderController.java

@@ -44,21 +44,7 @@ public class OutboundSaleOrderController {
     )
     @PostMapping({"outbound_insert"})
     public ResponseResultVO<?> saleOrderOutboundInsert(@Valid @RequestBody OutboundVO outboundVO) {
-        return outboundSaleOrderService.saleOrderOutboundInsert(outboundVO);
-    }
-
-    /**
-     * @desc :  销售出库新建和收款
-     * @date : 2024/3/18 15:22
-     * @author : 王英杰
-     */
-    @ApiOperation(
-            value = "销售出库新建",
-            notes = "销售出库新建"
-    )
-    @PostMapping({"outbound_insert_collection"})
-    public ResponseResultVO<?> saleOrderOutboundInsertCollection(@Valid @RequestBody OutboundVO outboundVO) {
-        return outboundSaleOrderService.saleOrderOutboundInsertCollection(outboundVO);
+        return outboundSaleOrderService.saleOrderOutboundInsert(outboundVO,false);
     }
 
     /**

+ 15 - 0
src/main/java/com/dk/mdm/controller/mst/GoodsSkuController.java

@@ -2,6 +2,7 @@ package com.dk.mdm.controller.mst;
 
 import com.dk.common.model.pojo.PageList;
 import com.dk.common.response.ResponseResultVO;
+import com.dk.common.util.ExcelUtils;
 import com.dk.mdm.model.pojo.mst.GoodsSku;
 import com.dk.common.service.BaseService;
 import com.dk.mdm.model.query.mst.GoodsSkuQuery;
@@ -9,10 +10,15 @@ import com.dk.mdm.model.response.mst.GoodsSkuResponse;
 import com.dk.mdm.model.vo.mst.GoodsSkuVO;
 import com.dk.mdm.model.vo.mst.SupplierVo;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import io.swagger.annotations.Api;
 import com.dk.mdm.service.mst.GoodsSkuService;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 @Api(tags = "商品档案API接口")
 @RestController
@@ -88,4 +94,13 @@ public class GoodsSkuController{
     public ResponseResultVO<?> insert(@RequestBody GoodsSkuVO goodsSkuVO) {
         return goodsSkuService.insert(goodsSkuVO);
     }
+
+
+    @ApiOperation(value = "导入", notes = "导入")
+    @PostMapping("import/{cpId}")
+    public ResponseResultVO<String > importList(MultipartFile file, HttpServletResponse response , @PathVariable Integer cpId) {
+        List<GoodsSku> list = ExcelUtils.importExcel(file, 1, 1, GoodsSku.class);
+       return goodsSkuService.importSKU(list,response,cpId);
+    }
+
 }

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

@@ -23,7 +23,7 @@
         sys.f_remove_zero(tpii.out_qty) as out_qty, sys.f_remove_zero(tpii.inv_qty) as inv_qty, tpii.flg_valid,
         tpii.cp_id,tpii.s_into_id,tpii.s_into_item_id,tpii.s_pur_id,tpii.s_pur_item_id,
         tpii.intoing_box,tpii.intoing_piece,tpii.into_box,tpii.into_piece,
-        tpii.unit_id,tpii.sub_unit_id,tpii.pack_box
+        tpii.unit_id,tpii.sub_unit_id,tpii.pack_box,tpii.flg_cost_check
     </sql>
 
 
@@ -118,6 +118,9 @@
         <result column="seriesName" property="seriesName"/>
         <result column="intoStatusName" property="intoStatusName"/>
         <result column="flg_sub_unit" property="flgSubUnit"/>
+        <result column="intoTypeName" property="intoTypeName"/>
+        <result column="flg_cost_check" property="flgCostCheck"/>
+        <result column="flgCostCheckName" property="flgCostCheckName"/>
     </resultMap>
 <!--    退货用-->
     <resultMap id="BaseResultMapReturnResponse" type="com.dk.mdm.model.response.ivt.InboundItemResponse">
@@ -601,7 +604,11 @@
         ,tmw.wh_name AS "whName"
         ,tpid.into_date AS "intoDate"
         ,sys.f_get_name_i18n(tdk.kind_name_i18n, #{i18n}) AS  "intoStatusName"
+        ,sys.f_get_name_i18n(tdk1.kind_name_i18n, #{i18n}) AS  "intoTypeName"
         ,tmgss.series_name AS "seriesName"
+        ,case when tpii.flg_cost_check is null then '未核对'
+        when tpii.flg_cost_check = true then '已核对'
+        else '未核对' end as "flgCostCheckName"
         ,sys.f_remove_zero(tpiv.inv_qty)  as inv_qty
         ,(select ul.decimal_places from  dkic_b.t_mst_unit ul where tpii.unit_id = ul.unit_id) as "decimalPlaces"
         FROM dkic_b.t_psi_inbound_item tpii
@@ -616,6 +623,9 @@
         left join dkic_b.t_mst_warehouse tmw on tmw.wh_id = tpii.wh_id
         Left join dkic_b.t_mst_supplier tmp on tpid.sup_id = tmp.sup_id
         LEFT JOIN sys.t_data_kind tdk   ON tdk.kind_code = tpid.into_status
+        LEFT JOIN sys.t_data_kind tdk1   ON tdk1.kind_code = tpii.into_type
+        LEFT JOIN dkic_b.t_mst_staff tmss   ON tmss.staff_id = tpid.staff_id
+        LEFT JOIN dkic_b.t_mst_org tmo   ON tmo.org_id = tpid.org_id
         <where>
             tpii.flg_valid
             and tpii.into_qty &lt;&gt; 0
@@ -640,6 +650,25 @@
             <if test="cpId != null">
                 AND tpii.cp_id = #{cpId}
             </if>
+            <if test="intoTypeName != null">
+                AND sys.f_get_name_i18n(tdk1.kind_name_i18n, #{i18n}) LIKE concat('%',my_ex.likequery(#{intoTypeName}),'%')
+            </if>
+            <if test="supName != null">
+                AND tmp.sup_name LIKE concat('%',my_ex.likequery(#{supName}),'%')
+            </if>
+            <if test="viewNoCostDocuments !=null and viewNoCostDocuments == true">
+                AND tpii.flg_cost_check = false
+            </if>
+            <if test="staffName !=null">
+                AND tmss.staff_name  LIKE concat('%',my_ex.likequery(#{staffName}),'%')
+            </if>
+            <if test="orgName !=null">
+                AND tmo.org_name  LIKE concat('%',my_ex.likequery(#{orgName}),'%')
+            </if>
+            <if test="intoStatusList != null and intoStatusList.size()>0">
+                AND tpii.into_status =
+                any(#{intoStatusList, typeHandler= StringListTypeHandler})
+            </if>
             <if test="searchText !=null">
                 AND  (tpid.into_no LIKE concat('%',my_ex.likequery(#{searchText}), '%')    OR   tmgs.sku_name LIKE concat('%',my_ex.likequery(#{searchText}),'%')   OR   tmgs.sku_code LIKE concat('%',my_ex.likequery(#{searchText}),'%'))
             </if>

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

@@ -57,7 +57,7 @@
                 <result column="cp_id" property="cpId"/>
                 <result column="sku_code" property="skuCode"/>
                 <result column="sku_name" property="skuName"/>
-                  <result column="sku_spec" property="skuSpec"/>
+                <result column="sku_spec" property="skuSpec"/>
                 <result column="sku_model" property="skuModel"/>
                 <result column="brand_name" property="brandName"/>
                 <result column="short_name" property="shortName"/>
@@ -75,6 +75,8 @@
         <result column="seriesName" property="seriesName"/>
         <result column="catName" property="catName"/>
         <result column="price_other" property="priceOther"/>
+        <result column="warning_upper_limit" property="warningUpperLimit"/>
+        <result column="warning_lower_limit" property="warningLowerLimit"/>
         <result column="sku_images" property="skuImages" typeHandler="JsonTypeHandler"/>
         <result column="decimalPlaces" property="decimalPlaces"/>
     </resultMap>
@@ -165,6 +167,8 @@
         ,tmgs.sku_images
         ,tmgs.unit_id
         ,tmgs.sub_unit_id
+        ,tmgs.warning_upper_limit
+        ,tmgs.warning_lower_limit
         ,tmgs.pack_box
         ,tmu.unit_name    AS "unitName"
         ,subtmu.unit_name AS "subUnitName"

+ 7 - 0
src/main/java/com/dk/mdm/mapper/mst/GoodsBrandMapper.java

@@ -32,5 +32,12 @@ public interface GoodsBrandMapper extends BaseMapper<GoodsBrand>{
 
     Integer saveSupplierBrand(String supId,String brandId);
 
+    /**
+     * @desc   : 根据名称查ID
+     * @author : 常皓宁
+     * @date   : 2024/6/12 8:38
+     */
+    GoodsBrandResponse selectByUuId(GoodsBrandQuery goodsBrandQuery);
+
 }
 

+ 13 - 0
src/main/java/com/dk/mdm/mapper/mst/GoodsBrandMapper.xml

@@ -207,4 +207,17 @@
         values (#{supId}::uuid,
                 #{brandId}::uuid)
     </insert>
+
+
+    <!-- 根据名称查ID -->
+    <select id="selectByUuId" resultMap="BaseResultMapResponse">
+        SELECT brand_id
+        FROM dkic_b.t_mst_goods_brand
+        WHERE
+        cp_id = #{cpId}
+        AND flg_valid = TRUE
+        <if test="brandName != null and brandName != ''">
+            AND brand_name = #{brandName}
+        </if>
+    </select>
 </mapper>

+ 7 - 0
src/main/java/com/dk/mdm/mapper/mst/GoodsCategoryMapper.java

@@ -56,6 +56,13 @@ public interface GoodsCategoryMapper extends BaseMapper<GoodsCategory> {
      */
     Integer disableBachByParentId(String id);
 
+    /**
+     * @desc   : 根据名称查ID
+     * @author : 常皓宁
+     * @date   : 2024/6/12 8:38
+     */
+    GoodsCategoryResponse selectByUuId(GoodsCategoryQuery goodsCategoryQuery);
+
 
 }
 

+ 12 - 0
src/main/java/com/dk/mdm/mapper/mst/GoodsCategoryMapper.xml

@@ -256,4 +256,16 @@
             AND cat_name = #{catName}
         </if>
     </select>
+
+    <!-- 根据名称查ID -->
+    <select id="selectByUuId" resultMap="BaseResultMapResponse">
+        SELECT cat_id
+        FROM dkic_b.t_mst_goods_category
+        WHERE
+        cp_id = #{cpId}
+        AND flg_valid = TRUE
+        <if test="catName != null and catName != ''">
+            AND cat_name = #{catName}
+        </if>
+    </select>
 </mapper>

+ 9 - 0
src/main/java/com/dk/mdm/mapper/mst/GoodsSeriesMapper.java

@@ -5,8 +5,10 @@ import com.dk.mdm.model.pojo.mst.GoodsSeries;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.query.mst.GoodsBrandQuery;
 import com.dk.mdm.model.query.mst.GoodsSeriesQuery;
+import com.dk.mdm.model.query.mst.UnitQuery;
 import com.dk.mdm.model.response.mst.GoodsBrandResponse;
 import com.dk.mdm.model.response.mst.GoodsSeriesResponse;
+import com.dk.mdm.model.response.mst.UnitResponse;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -36,6 +38,13 @@ public interface GoodsSeriesMapper extends BaseMapper<GoodsSeries>{
      */
     Long countByCond(GoodsSeriesQuery goodsSeriesQuery);
 
+    /**
+     * @desc   : 根据名称查ID
+     * @author : 常皓宁
+     * @date   : 2024/6/12 8:38
+     */
+    GoodsSeriesResponse selectByUuId(GoodsSeriesQuery goodsSeriesQuery);
+
 
 }
 

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

@@ -27,6 +27,23 @@
         <result column="op_db_user" property="opDbUser"/>
     </resultMap>
 
+    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.mst.GoodsSeriesResponse">
+        <id column="series_id" property="seriesId"/>
+        <result column="series_code" property="seriesCode"/>
+        <result column="series_name" property="seriesName"/>
+        <result column="display_no" property="displayNo"/>
+        <result column="remarks" property="remarks"/>
+        <result column="flg_valid" property="flgValid"/>
+        <result column="cp_id" property="cpId"/>
+        <result column="op_create_time" property="opCreateTime" typeHandler="TimestampTypeHandler"/>
+        <result column="op_create_user_id" property="opCreateUserId" typeHandler="UuidTypeHandler"/>
+        <result column="op_update_time" property="opUpdateTime" typeHandler="TimestampTypeHandler"/>
+        <result column="op_update_user_id" property="opUpdateUserId" typeHandler="UuidTypeHandler"/>
+        <result column="op_app_code" property="opAppCode"/>
+        <result column="op_timestamp" property="opTimestamp" typeHandler="TimestampTypeHandler"/>
+        <result column="op_db_user" property="opDbUser"/>
+    </resultMap>
+
     <!-- 通用条件列 -->
     <sql id="Condition">
         <where>
@@ -188,6 +205,16 @@
         </if>
     </select>
 
-
+    <!-- 根据名称查ID -->
+    <select id="selectByUuId" resultMap="BaseResultMapResponse">
+        SELECT series_id
+        FROM dkic_b.t_mst_goods_series
+        WHERE
+        cp_id = #{cpId}
+        AND flg_valid = TRUE
+        <if test="seriesName != null and seriesName != ''">
+            AND series_name = #{seriesName}
+        </if>
+    </select>
 
 </mapper>

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

@@ -8,7 +8,7 @@
         sku_id, sku_code, sku_name, sku_model, brand_id, category_id, unit_id, sub_unit_id, conversion_factor
         , series_id, sku_spec, price_purchase, price_standard, price_wholesale, price_limited, price_other,sku_images
         , 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
+        , op_app_code, op_timestamp, op_db_user, warning_upper_limit, warning_lower_limit
     </sql>
 
     <!-- 通用查询映射结果 -->
@@ -30,18 +30,20 @@
                 <result column="price_limited" property="priceLimited"/>
                 <result column="price_other" property="priceOther"/>
                 <result column="sku_images" property="skuImages" typeHandler="JsonTypeHandler"/>
+                <result column="warning_lower_limit" property="warningLowerLimit"/>
+                <result column="warning_upper_limit" property="warningUpperLimit"/>
                 <result column="remarks" property="remarks"/>
-        <result column="flg_valid" property="flgValid"/>
-        <result column="flg_sub_unit" property="flgSubUnit"/>
-        <result column="flg_opening_inv" property="flgOpeningInv"/>
-        <result column="flg_price" property="flgPrice"/>
+                <result column="flg_valid" property="flgValid"/>
+                <result column="flg_sub_unit" property="flgSubUnit"/>
+                <result column="flg_opening_inv" property="flgOpeningInv"/>
+                <result column="flg_price" property="flgPrice"/>
                 <result column="cp_id" property="cpId"/>
-            <result column="op_create_time" property="opCreateTime" typeHandler="TimestampTypeHandler"/>
+                <result column="op_create_time" property="opCreateTime" typeHandler="TimestampTypeHandler"/>
                 <result column="op_create_user_id" property="opCreateUserId" typeHandler="UuidTypeHandler"/>
-            <result column="op_update_time" property="opUpdateTime" typeHandler="TimestampTypeHandler"/>
+                <result column="op_update_time" property="opUpdateTime" typeHandler="TimestampTypeHandler"/>
                 <result column="op_update_user_id" property="opUpdateUserId" typeHandler="UuidTypeHandler"/>
                 <result column="op_app_code" property="opAppCode"/>
-            <result column="op_timestamp" property="opTimestamp" typeHandler="TimestampTypeHandler"/>
+                <result column="op_timestamp" property="opTimestamp" typeHandler="TimestampTypeHandler"/>
                 <result column="op_db_user" property="opDbUser"/>
         <result column="decimalPlaces" property="decimalPlaces"/>
     </resultMap>
@@ -49,7 +51,8 @@
     <sql id="Base_Column_List_JOIN">
         tmgs.price_other,tmgs.sku_id, tmgs.sku_code, tmgs.sku_name, tmgs.sku_model, tmgs.brand_id, tmgs.category_id, tmgs.unit_id, tmgs.sub_unit_id,
               tmgs.conversion_factor, tmgs.series_id, tmgs.sku_spec, tmgs.price_purchase, tmgs.price_standard,
-           tmgs.pack_box,   tmgs.price_wholesale, tmgs.price_limited, tmgs.price_other,tmgs.sku_images, tmgs.remarks, tmgs.flg_valid, tmgs.flg_sub_unit,  tmgs.flg_opening_inv,  tmgs.flg_price,  tmgs.cp_id
+           tmgs.pack_box,   tmgs.price_wholesale, tmgs.price_limited, tmgs.price_other,tmgs.sku_images, tmgs.remarks, tmgs.flg_valid, tmgs.flg_sub_unit,  tmgs.flg_opening_inv,  tmgs.flg_price,  tmgs.cp_id,
+        tmgs.warning_lower_limit, tmgs.warning_upper_limit
     </sql>
     <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.mst.GoodsSkuResponse">
         <id column="sku_id" property="skuId"/>
@@ -87,6 +90,8 @@
         <result column="decimalPlaces" property="decimalPlaces"/>
         <result column="intoing_box" property="box" />
         <result column="intoing_piece" property="piece" />
+        <result column="warning_lower_limit" property="warningLowerLimit"/>
+        <result column="warning_upper_limit" property="warningUpperLimit"/>
     </resultMap>
 
     <!-- 通用条件列 -->
@@ -290,6 +295,8 @@
             remarks,
             cp_id,
             op_app_code,
+            warning_lower_limit,
+            warning_upper_limit
         </trim>
         )
         values
@@ -314,6 +321,8 @@
                 #{item.remarks},
                 #{item.cpId},
                 #{item.opAppCode},
+                #{item.warningLowerLimit},
+                #{item.warningUpperLimit}
             </trim>
             )
         </foreach>

+ 9 - 0
src/main/java/com/dk/mdm/mapper/mst/UnitMapper.java

@@ -2,8 +2,10 @@ package com.dk.mdm.mapper.mst;
 
 import com.dk.mdm.model.pojo.mst.Unit;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.query.mst.GoodsCategoryQuery;
 import com.dk.mdm.model.query.mst.UnitQuery;
 import com.dk.mdm.model.response.mst.GoodsBrandResponse;
+import com.dk.mdm.model.response.mst.GoodsCategoryResponse;
 import com.dk.mdm.model.response.mst.UnitResponse;
 import org.springframework.stereotype.Repository;
 
@@ -28,6 +30,13 @@ public interface UnitMapper extends BaseMapper<Unit>{
      */
     Long countByCond(UnitQuery UnitQuery);
 
+    /**
+     * @desc   : 根据名称查ID
+     * @author : 常皓宁
+     * @date   : 2024/6/12 8:38
+     */
+    UnitResponse selectByUuId(UnitQuery unitQuery);
+
 
 }
 

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

@@ -27,6 +27,25 @@
                 <result column="op_db_user" property="opDbUser"/>
     </resultMap>
 
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMapResponse" type="com.dk.mdm.model.response.mst.UnitResponse">
+        <id column="unit_id" property="unitId"/>
+        <result column="unit_code" property="unitCode"/>
+        <result column="unit_name" property="unitName"/>
+        <result column="decimal_places" property="decimalPlaces"/>
+        <result column="display_no" property="displayNo"/>
+        <result column="remarks" property="remarks"/>
+        <result column="flg_valid" property="flgValid"/>
+        <result column="cp_id" property="cpId"/>
+        <result column="op_create_time" property="opCreateTime" typeHandler="TimestampTypeHandler"/>
+        <result column="op_create_user_id" property="opCreateUserId" typeHandler="UuidTypeHandler"/>
+        <result column="op_update_time" property="opUpdateTime" typeHandler="TimestampTypeHandler"/>
+        <result column="op_update_user_id" property="opUpdateUserId" typeHandler="UuidTypeHandler"/>
+        <result column="op_app_code" property="opAppCode"/>
+        <result column="op_timestamp" property="opTimestamp" typeHandler="TimestampTypeHandler"/>
+        <result column="op_db_user" property="opDbUser"/>
+    </resultMap>
+
     <!-- 通用条件列 -->
     <sql id="Condition">
         <where>
@@ -184,6 +203,16 @@
         </if>
     </select>
 
-
+    <!-- 根据名称查ID -->
+    <select id="selectByUuId" resultMap="BaseResultMapResponse">
+        SELECT unit_id
+        FROM dkic_b.t_mst_unit
+        WHERE
+        cp_id = #{cpId}
+        AND flg_valid = TRUE
+        <if test="unitName != null and unitName != ''">
+            AND unit_name = #{unitName}
+        </if>
+    </select>
 
 </mapper>

+ 3 - 0
src/main/java/com/dk/mdm/model/pojo/ivt/InboundItem.java

@@ -380,6 +380,9 @@ public class InboundItem extends PageInfo<InboundItem> implements Serializable {
     @TableField(exist = false)
     private Integer decimalPlaces;
 
+    @ApiModelProperty(value = "成本核对标识")
+    private Boolean flgCostCheck;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 60 - 25
src/main/java/com/dk/mdm/model/pojo/mst/GoodsSku.java

@@ -35,6 +35,13 @@ import java.time.LocalDateTime;
 @ApiModel(value="实体类:商品档案", description="表名:t_mst_goods_sku")
 public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
 
+    /**
+     * 错误信息
+     */
+    @Excel(name = "错误提示")
+    @ApiModelProperty(value = "错误提示")
+    private String errorMessage;
+
     /*
      * 数据库字段
      */
@@ -50,25 +57,21 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 辅助单位标识
      */
-    @Excel(name = "辅助单位标识")
     @ApiModelProperty(value = "辅助单位标识")
     private Boolean flgSubUnit;
     /**
      * 期初库存标识
      */
-    @Excel(name = "期初库存标识")
     @ApiModelProperty(value = "期初库存标识")
     private Boolean flgOpeningInv;
     /**
      * 价格体系标识
      */
-    @Excel(name = "价格体系标识")
     @ApiModelProperty(value = "价格体系标识")
     private Boolean flgPrice;
     /**
      * 包装
      */
-    @Excel(name = "包装")
     @ApiModelProperty(value = "包装")
     private BigDecimal packBox;
     /**
@@ -79,12 +82,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     private String skuCode;
 
     /**
-     * 批发价
-     */
-    @Excel(name = "其他价格")
-    @ApiModelProperty(value = "其他价格")
-    private BigDecimal priceOther;
-    /**
      * 商品名称
      */
     @Excel(name = "商品名称")
@@ -101,18 +98,55 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
 
 
     /**
-     * 商品品牌
+     * 品牌名称
      */
     @Excel(name = "商品品牌")
     @ApiModelProperty(value = "商品品牌")
     @TableField(typeHandler = UuidTypeHandler.class)
+    private String brandName;
+
+    /**
+     * 商品种类
+     */
+    @Excel(name = "商品种类")
+    @ApiModelProperty(value = "商品种类")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String categoryName;
+
+    /**
+     * 计量单位
+     */
+    @Excel(name = "计量单位")
+    @ApiModelProperty(value = "计量单位")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String unitName;
+
+    /**
+     * 辅助单位
+     */
+    @Excel(name = "辅助单位")
+    @ApiModelProperty(value = "辅助单位")
+    @TableField(typeHandler = UuidTypeHandler.class)
+    private String subUnitName;
+
+    /**
+     * 商品系列
+     */
+    @Excel(name = "商品系列")
+    @ApiModelProperty(value = "商品系列")
+    private String seriesName;
+
+    /**
+     * 商品品牌
+     */
+    @ApiModelProperty(value = "商品品牌")
+    @TableField(typeHandler = UuidTypeHandler.class)
     private String brandId;
 
 
     /**
      * 商品种类
      */
-    @Excel(name = "商品种类")
     @ApiModelProperty(value = "商品种类")
     @TableField(typeHandler = UuidTypeHandler.class)
     private String categoryId;
@@ -121,7 +155,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 计量单位
      */
-    @Excel(name = "计量单位")
     @ApiModelProperty(value = "计量单位")
     @TableField(typeHandler = UuidTypeHandler.class)
     private String unitId;
@@ -130,7 +163,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 辅助单位
      */
-    @Excel(name = "辅助单位")
     @ApiModelProperty(value = "辅助单位")
     @TableField(typeHandler = UuidTypeHandler.class)
     private String subUnitId;
@@ -147,7 +179,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 商品系列
      */
-    @Excel(name = "商品系列")
     @ApiModelProperty(value = "商品系列")
     @TableField(typeHandler = UuidTypeHandler.class)
     private String seriesId;
@@ -192,13 +223,19 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     @ApiModelProperty(value = "销售限价")
     private BigDecimal priceLimited;
 
+    /**
+     * 其他价
+     */
+    @Excel(name = "其他价")
+    @ApiModelProperty(value = "其他价")
+    private BigDecimal priceOther;
+
 
 
 
     /**
      * 商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)
      */
-    @Excel(name = "商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)")
     @ApiModelProperty(value = "商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)")
     @TableField(typeHandler = JsonTypeHandler.class)
     private JSONArray skuImages;
@@ -215,7 +252,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 有效标识 (1:正常 0:停用)
      */
-    @Excel(name = "有效标识 (1:正常 0:停用)")
     @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
     private Boolean flgValid;
 
@@ -223,7 +259,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 企业ID
      */
-    @Excel(name = "企业ID")
     @ApiModelProperty(value = "企业ID")
     @TableField(fill = FieldFill.INSERT)
     private Integer cpId;
@@ -232,7 +267,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 创建时间 (触发器自动处理)
      */
-    @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)
@@ -242,7 +276,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 创建用户 (触发器自动处理)
      */
-    @Excel(name = "创建用户 (触发器自动处理)")
     @ApiModelProperty(value = "创建用户 (触发器自动处理)")
     @TableField(typeHandler = UuidTypeHandler.class)
     private String opCreateUserId;
@@ -251,7 +284,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 修改时间 (触发器自动处理)
      */
-    @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)
@@ -261,7 +293,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 修改用户 (触发器自动处理)
      */
-    @Excel(name = "修改用户 (触发器自动处理)")
     @ApiModelProperty(value = "修改用户 (触发器自动处理)")
     @TableField(typeHandler = UuidTypeHandler.class)
     private String opUpdateUserId;
@@ -270,7 +301,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 数据操作应用 (触发器自动处理)
      */
-    @Excel(name = "数据操作应用 (触发器自动处理)")
     @ApiModelProperty(value = "数据操作应用 (触发器自动处理)")
     private String opAppCode;
 
@@ -278,7 +308,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 数据时间戳 (触发器自动处理)
      */
-    @Excel(name = "数据时间戳 (触发器自动处理)")
     @ApiModelProperty(value = "数据时间戳 (触发器自动处理)")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @TableField(typeHandler = TimestampTypeHandler.class)
@@ -288,7 +317,6 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 数据操作数据库用户 (触发器自动处理)
      */
-    @Excel(name = "数据操作数据库用户 (触发器自动处理)")
     @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
     private String opDbUser;
 
@@ -309,6 +337,13 @@ public class GoodsSku extends PageInfo<GoodsSku> implements Serializable {
      * @TableField(exist = false)
      */
 
+    @Excel(name = "警戒下限")
+    @ApiModelProperty(value = "警戒下限")
+    private Long warningLowerLimit;
+
+    @Excel(name = "警戒上限")
+    @ApiModelProperty(value = "警戒上限")
+    private Long warningUpperLimit;
 
     private static final long serialVersionUID = 1L;
 

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

@@ -356,7 +356,7 @@ public class Order extends PageInfo<Order> implements Serializable {
 
     @Excel(name = "折扣")
     @ApiModelProperty(value = "折扣")
-    private String discount;
+    private BigDecimal discount;
 
     @Excel(name = "自动办理标识")
     @ApiModelProperty(value = "自动办理标识")

+ 1 - 1
src/main/java/com/dk/mdm/model/pojo/sale/OrderItem.java

@@ -280,7 +280,7 @@ public class OrderItem extends PageInfo<OrderItem> implements Serializable {
      */
     @Excel(name = "折扣")
     @ApiModelProperty(value = "折扣")
-    private String discount;
+    private BigDecimal discount;
 
     private static final long serialVersionUID = 1L;
 

+ 20 - 0
src/main/java/com/dk/mdm/model/query/ivt/InboundItemQuery.java

@@ -13,6 +13,7 @@ import lombok.experimental.Accessors;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  *  入库明细
@@ -307,6 +308,25 @@ public class InboundItemQuery extends PageInfo<InboundItemQuery>  {
     private String searchText;
 
 
+    @ApiModelProperty(value = "入库类型")
+    private String intoTypeName;
+
+
+    @ApiModelProperty(value = "成本核对标识")
+    private Boolean flgCostCheck;
+
+    @ApiModelProperty(value = "仅查询未核对")
+    private Boolean viewNoCostDocuments;
+
+    @ApiModelProperty(value = "员工")
+    private String staffName;
+
+    @ApiModelProperty(value = "部门")
+    private String orgName;
+
+    @ApiModelProperty(value = "入库状态")
+    private List<String> intoStatusList;
+
     private static final long serialVersionUID = 1L;
 
 }

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

@@ -152,6 +152,8 @@ public class InventoryQuery extends PageInfo<InventoryQuery>{
     private String desc;
 
     private Boolean invQtyFlag;
+
+    private Boolean winning;
     /*
      * 相关属性
      * @TableField(exist = false)

+ 7 - 2
src/main/java/com/dk/mdm/model/query/mst/GoodsSkuQuery.java

@@ -179,7 +179,6 @@ public class GoodsSkuQuery extends PageInfo<GoodsSku> implements Serializable {
     /**
      * 商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)
      */
-    @Excel(name = "商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)")
     @ApiModelProperty(value = "商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)")
     @TableField(typeHandler = JsonTypeHandler.class)
     private JSONArray skuImages;
@@ -286,7 +285,6 @@ public class GoodsSkuQuery extends PageInfo<GoodsSku> implements Serializable {
      * @author : 宋扬
      * @date   : 2024/3/2 9:31
      */
-    @Excel(name = "有效标识 (1:正常 0:停用)")
     @ApiModelProperty(value = "有效标识 (1:正常 0:停用)")
     private List<Boolean> flgValidList;
 
@@ -309,6 +307,13 @@ public class GoodsSkuQuery extends PageInfo<GoodsSku> implements Serializable {
      * @TableField(exist = false)
      */
 
+    @Excel(name = "警戒下限")
+    @ApiModelProperty(value = "警戒下限")
+    private Long warningLowerLimit;
+
+    @Excel(name = "警戒上限")
+    @ApiModelProperty(value = "警戒上限")
+    private Long warningUpperLimit;
 
     private static final long serialVersionUID = 1L;
 

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

@@ -519,6 +519,13 @@ public class InboundItemResponse  {
     @TableField(exist = false)
     private Integer decimalPlaces;
 
+    @ApiModelProperty(value = "入库类型")
+    private String intoTypeName;
+
+    @ApiModelProperty(value = "成本核对标识")
+    private Boolean flgCostCheck;
+    private String flgCostCheckName;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 9 - 0
src/main/java/com/dk/mdm/model/response/ivt/InventoryResponse.java

@@ -285,6 +285,15 @@ public class InventoryResponse {
     @TableField(exist = false)
     private Integer decimalPlaces;
 
+    // 警戒上限
+    private Long warningUpperLimit;
+    // 警戒下限
+    private Long warningLowerLimit;
+
+    /**
+     * 库存预警消息
+     * */
+    private String warningMsg;
 
     private static final long serialVersionUID = 1L;
 

+ 7 - 0
src/main/java/com/dk/mdm/model/response/mst/GoodsSkuResponse.java

@@ -387,6 +387,13 @@ public class GoodsSkuResponse implements Serializable {
      * @TableField(exist = false)
      */
 
+    @Excel(name = "警戒下限")
+    @ApiModelProperty(value = "警戒下限")
+    private Long warningLowerLimit;
+
+    @Excel(name = "警戒上限")
+    @ApiModelProperty(value = "警戒上限")
+    private Long warningUpperLimit;
 
     private static final long serialVersionUID = 1L;
 

+ 1 - 1
src/main/java/com/dk/mdm/model/response/sale/OrderItemResponse.java

@@ -416,7 +416,7 @@ public class OrderItemResponse extends PageInfo<OrderItemResponse> implements Se
      */
     @Excel(name = "折扣")
     @ApiModelProperty(value = "折扣")
-    private String discount;
+    private BigDecimal discount;
 
     private static final long serialVersionUID = 1L;
 

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

@@ -416,7 +416,7 @@ public class OrderResponse extends PageInfo<OrderResponse> implements Serializab
 
     @Excel(name = "折扣")
     @ApiModelProperty(value = "折扣")
-    private String discount;
+    private BigDecimal discount;
 
     @ApiModelProperty(value = "自动办理标识")
     private Boolean flgAutoHandle;

+ 3 - 0
src/main/java/com/dk/mdm/model/vo/ivt/InboundItemVO.java

@@ -275,6 +275,9 @@ public class InboundItemVO  {
     @TableField(typeHandler = UuidTypeHandler.class)
     private String outId;
 
+    @ApiModelProperty(value = "成本核对标识")
+    private Boolean flgCostCheck;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 3 - 0
src/main/java/com/dk/mdm/model/vo/ivt/OutboundItemVO.java

@@ -310,6 +310,9 @@ public class OutboundItemVO {
     @TableField(typeHandler = UuidTypeHandler.class)
     private String whId;
 
+    @ApiModelProperty(value = "不够库存数量----新建出库中数量")
+    private BigDecimal notEnoughInventoryQty;
+
 
 
 

+ 8 - 1
src/main/java/com/dk/mdm/model/vo/mst/GoodsSkuVO.java

@@ -215,7 +215,6 @@ public class GoodsSkuVO implements Serializable {
     /**
      * 商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)
      */
-    @Excel(name = "商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)")
     @ApiModelProperty(value = "商品图片 (index(显示顺序)、name(文件名)、path(路径)、type(类型)、time(上传时间)...)")
     @TableField(typeHandler = JsonTypeHandler.class)
     private JSONArray skuImages;
@@ -337,6 +336,14 @@ public class GoodsSkuVO implements Serializable {
      * @TableField(exist = false)
      */
 
+    @Excel(name = "警戒下限")
+    @ApiModelProperty(value = "警戒下限")
+    private Long warningLowerLimit;
+
+    @Excel(name = "警戒上限")
+    @ApiModelProperty(value = "警戒上限")
+    private Long warningUpperLimit;
+
 
     private static final long serialVersionUID = 1L;
 

+ 1 - 1
src/main/java/com/dk/mdm/model/vo/sale/OrderItemVO.java

@@ -283,7 +283,7 @@ public class OrderItemVO extends PageInfo<OrderItemVO> implements Serializable {
      * 折扣
      */
     @ApiModelProperty(value = "折扣")
-    private String discount;
+    private BigDecimal discount;
 
 
 

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

@@ -380,12 +380,18 @@ public class OrderVO extends PageInfo<OrderVO> implements Serializable {
     @ApiModelProperty(value = "自动办理标识")
     private Boolean flgAutoHandle;
 
+    @ApiModelProperty(value = "自动办理参数")
+    private Boolean flgHandleSetting;
+
     @ApiModelProperty(value = "实际金额")
     private BigDecimal factAmt;
 
     @ApiModelProperty(value = "优惠金额")
     private BigDecimal discAmt;
 
+    @ApiModelProperty(value = "折扣")
+    private BigDecimal discount;
+
     private static final long serialVersionUID = 1L;
 
 }

+ 38 - 8
src/main/java/com/dk/mdm/service/ivt/inventory/InventoryService.java

@@ -101,7 +101,34 @@ public class InventoryService extends BaseService<Inventory> {
      */
     @Pagination
     public ResponseResultVO<PageList<InventoryResponse>> selectByCond(InventoryQuery inboundQuery) {
-        return super.mergeListWithCount(inboundQuery, inventoryMapper.selectByCond(inboundQuery), inventoryMapper.countByCond(inboundQuery));
+
+        ResponseResultVO<PageList<InventoryResponse>> pageListResponseResultVO = super.mergeListWithCount(inboundQuery, inventoryMapper.selectByCond(inboundQuery), inventoryMapper.countByCond(inboundQuery));
+        if (inboundQuery.getWinning()!=null && inboundQuery.getWinning() == true){
+            PageList<InventoryResponse> data = pageListResponseResultVO.getData();
+            List<InventoryResponse> list = data.getList();
+            List<InventoryResponse> newList = list.stream().filter(item ->
+                    (
+                            item.getWarningLowerLimit()!= 0
+                            || item.getWarningUpperLimit() != 0)
+                            && (item.getInvQty().longValue()>item.getWarningLowerLimit()
+                            || item.getInvQty().longValue()>item.getWarningUpperLimit())
+                    ).collect(Collectors.toList());
+            newList.forEach(item -> {
+                int invQty = item.getInvQty().intValue();
+                Long warningLowerLimit = item.getWarningLowerLimit();
+                Long warningUpperLimit = item.getWarningUpperLimit();
+                if (invQty > warningLowerLimit){
+                    item.setWarningMsg("超出警戒上限");
+                }
+                if (invQty > warningUpperLimit){
+                    item.setWarningMsg("超出警戒下限");
+                }
+            });
+            data.setList(newList);
+            pageListResponseResultVO.setData(data);
+        }
+
+        return pageListResponseResultVO;
     }
 
 
@@ -154,13 +181,16 @@ public class InventoryService extends BaseService<Inventory> {
         //endregion
         //赋值
         for (InOutRecordVO inOutRecordVO : inOutRecordVOList) {
-            //负数标识1 可以
-            if (Constant.FlgAutoHandleStringType.ONE.getValue().equals(flgHandleSetting)) {
-                inOutRecordVO.setCanNegativeFlag(true);
-            }
-            //不可以
-            else{
-                inOutRecordVO.setCanNegativeFlag(false);
+            //如果可以为负数标识为空或者false 那就赋值系统参数的
+            if(inOutRecordVO.getCanNegativeFlag() == null || !inOutRecordVO.getCanNegativeFlag()){
+                //负数标识1 可以
+                if (Constant.FlgAutoHandleStringType.ONE.getValue().equals(flgHandleSetting)) {
+                    inOutRecordVO.setCanNegativeFlag(true);
+                }
+                //不可以
+                else{
+                    inOutRecordVO.setCanNegativeFlag(false);
+                }
             }
             //业务单据
             inOutRecordVO.setBiznisType(Constant.InventoryDocCode.OUTBOUND.getTableName());

+ 116 - 46
src/main/java/com/dk/mdm/service/ivt/outbound/OutboundSaleOrderService.java

@@ -16,10 +16,7 @@ import com.dk.mdm.infrastructure.convert.ivt.InboundItemConvert;
 import com.dk.mdm.infrastructure.convert.ivt.OutboundConvert;
 import com.dk.mdm.infrastructure.convert.ivt.OutboundItemConvert;
 import com.dk.mdm.mapper.common.CommonMapper;
-import com.dk.mdm.mapper.ivt.InboundItemMapper;
-import com.dk.mdm.mapper.ivt.InboundMapper;
-import com.dk.mdm.mapper.ivt.OutboundItemMapper;
-import com.dk.mdm.mapper.ivt.OutboundMapper;
+import com.dk.mdm.mapper.ivt.*;
 import com.dk.mdm.mapper.mst.CustomerMapper;
 import com.dk.mdm.mapper.sale.MultiOwnerMapper;
 import com.dk.mdm.mapper.sale.OrderItemMapper;
@@ -34,20 +31,19 @@ import com.dk.mdm.model.pojo.pur.PurchaseItem;
 import com.dk.mdm.model.pojo.sale.MultiOwner;
 import com.dk.mdm.model.pojo.sale.Order;
 import com.dk.mdm.model.pojo.sale.OrderItem;
+import com.dk.mdm.model.query.ivt.InventoryQuery;
 import com.dk.mdm.model.query.ivt.OutboundItemQuery;
 import com.dk.mdm.model.query.ivt.OutboundQuery;
 import com.dk.mdm.model.query.sale.OrderQuery;
 import com.dk.mdm.model.response.ivt.InboundResponse;
+import com.dk.mdm.model.response.ivt.InventoryResponse;
 import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import com.dk.mdm.model.response.ivt.OutboundResponse;
 import com.dk.mdm.model.response.pur.PurchaseItemResponse;
 import com.dk.mdm.model.response.pur.PurchaseResponse;
 import com.dk.mdm.model.response.sale.OrderItemResponse;
 import com.dk.mdm.model.response.sale.OrderResponse;
-import com.dk.mdm.model.vo.ivt.InboundItemVO;
-import com.dk.mdm.model.vo.ivt.InboundVO;
-import com.dk.mdm.model.vo.ivt.OutboundItemVO;
-import com.dk.mdm.model.vo.ivt.OutboundVO;
+import com.dk.mdm.model.vo.ivt.*;
 import com.dk.mdm.model.vo.mac.RecPayVO;
 import com.dk.mdm.service.common.CommonService;
 import com.dk.mdm.service.ivt.inventory.InventoryService;
@@ -126,6 +122,99 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
     @Autowired
     private ReceiptService receiptService;
+
+    @Autowired
+    private InventoryMapper inventoryMapper;
+
+
+    /*****************************************先判断库存*****************************************/
+
+
+    /**
+     * @desc   : 校验库存是否存在
+     * @date   : 2024/6/11 10:55
+     * @author : 寇珊珊
+     */
+    @Transactional(
+            rollbackFor = {Exception.class}
+    )
+    public InventoryResponse checkInventoryExist(OutboundItemVO outboundItemVO) {
+        //存在标识
+        //根据sku,仓库,非标号查询
+        InventoryResponse inventoryResponse = null;
+        if (outboundItemVO.getSkuId() != null) {
+            inventoryResponse = inventoryMapper.selectByOther(new InventoryQuery()
+                    .setSkuId(outboundItemVO.getSkuId())
+                    .setWhId(outboundItemVO.getWhId())
+                    .setNonStdCode(outboundItemVO.getNonStdCode()));
+        }
+        //库存不存在
+        if(inventoryResponse ==null){
+            //当前出库商品中在库存中不存在
+            throw new BaseBusinessException(ErrorCodeEnum.SKU_IS_NOT_IN_INVENTORY.getCode(),
+                    ErrorCodeEnum.SKU_IS_NOT_IN_INVENTORY.getMessage());
+        }
+        return inventoryResponse;
+    }
+    
+    /**
+     * @desc   : 先查库存后出库
+     * @date   : 2024/6/11 9:30
+     * @author : 寇珊珊
+     */
+    @Transactional(rollbackFor = {Exception.class})
+    public void inventoryOUtBond(OutboundVO outboundVO) {
+        //region 校验明细
+        if (outboundVO.getItemList().size() == 0) {
+            throw new BaseBusinessException(ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getCode(),
+                    ErrorCodeEnum.OUTBOUND_ITEM_NOT_EXIST.getMessage());
+        }
+        //endregion
+        //可以负库存  不用交验库存直接走负库存逻辑
+        if (outboundVO.getFlgHandleSetting()) {
+            for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
+                //可以输入负数出库标识
+                outboundItemVO.setCanNegativeFlag(true);
+            }
+            //销售出库新建
+            this.saleOrderOutboundInsert(outboundVO,true);
+        }
+        //先查库存锁表看能出库的数量有多少   可出库数量建一张已出库的单子并扣减库存,剩下的数量建一张出库中的单子
+        else {
+            //过滤外协品
+            for (OutboundItemVO outboundItemVO : outboundVO.getItemList()) {
+                //商品id不为空才校验库存    因为为空是外协品
+                if(outboundItemVO.getSkuId()!=null){
+                    //查询库存是否存在
+                    InventoryResponse inventoryResponse = this.checkInventoryExist(outboundItemVO);
+                    BigDecimal invQty = inventoryResponse.getInvQty().subtract(outboundItemVO.getOutingQty());
+                    // (库存量  大于等于  本次出库数量不用做任何处理)
+                    //库存量 小于  本次出库数量
+                    if (invQty.compareTo(BigDecimal.ZERO) < 0) {
+                        outboundItemVO.setOutingQty(inventoryResponse.getInvQty());
+                        //不够库存数量----新建出库中数量
+                        outboundItemVO.setNotEnoughInventoryQty(invQty.abs());
+                    }
+                }
+            }
+            //region  过滤出不够出库的每条明细数量  ------新建出库中数据
+            List<OutboundItemVO> outboundIngList = outboundVO.getItemList().stream().filter(it -> it.getNotEnoughInventoryQty()!=null && it.getNotEnoughInventoryQty().compareTo(BigDecimal.ZERO)>0).collect(Collectors.toList());
+            if(outboundIngList != null && outboundIngList.size()>0){
+                outboundVO.setFlgAutoHandle(false);
+                outboundVO.setItemList(outboundIngList);
+                //销售出库新建
+                this.saleOrderOutboundInsert(outboundVO,true);
+            }
+            //endregion
+
+            //region  库存够扣减的明细  -----------新建已出库数据并扣减库存
+            //销售出库新建
+            this.saleOrderOutboundInsert(outboundVO,true);
+            //endregion
+        }
+    }
+    /*****************************************先判断库存*****************************************/
+
     /**
      * @desc : 删除外协品生产外协入库单
      * @date : 2024/5/10 10:31
@@ -262,25 +351,28 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
 
     /**
      * @desc : 销售出库新建
+     * orderTransmitFlag :订单传递过来的
      * @date : 2024/3/7 14:13
      * @author : 寇珊珊
      */
     @Transactional(rollbackFor = {Exception.class})
-    public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO) {
+    public ResponseResultVO<?> saleOrderOutboundInsert(OutboundVO outboundVO,Boolean orderTransmitFlag) {
         //region 如果没有客户id,要新建
-        outboundVO = outCommon.insertCustomer(outboundVO);
+//        outboundVO = outCommon.insertCustomer(outboundVO);
         //endregion
 
-        //region  查询当前公司的系统参数  自动办理信息  并赋值
-        Map<String, Object> map = new HashMap<>();
-        map.put("cpId", outboundVO.getCpId());
-        map.put("code", Constant.SystemConstant.IVT_001.getValue());
-        //自动办理标识
-        String flgHandleSetting = commonMapper.getSettingValue(map);
-        //自动办理标识为1 自动办理入库
-        if (Constant.FlgAutoHandleStringType.ONE.getValue().equals(flgHandleSetting)) {
-            outboundVO.setFlgHandleSetting(Constant.FlgHandleSetting.TRUE.getValue());
-            outboundVO.setFlgAutoHandle(Constant.FlgAutoHandle.TRUE.getValue());
+        //region 查询当前公司的系统参数  自动办理信息  并赋值
+        if(!orderTransmitFlag){
+            Map<String, Object> map = new HashMap<>();
+            map.put("cpId", outboundVO.getCpId());
+            map.put("code", Constant.SystemConstant.IVT_001.getValue());
+            //自动办理标识
+            String flgHandleSetting = commonMapper.getSettingValue(map);
+            //自动办理标识为1 自动办理入库
+            if (Constant.FlgAutoHandleStringType.ONE.getValue().equals(flgHandleSetting)) {
+                outboundVO.setFlgHandleSetting(Constant.FlgHandleSetting.TRUE.getValue());
+                outboundVO.setFlgAutoHandle(Constant.FlgAutoHandle.TRUE.getValue());
+            }
         }
         //endregion
 
@@ -320,12 +412,12 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
         //endregion
 
         //region  新建多业务归属
-        outCommon.insertMultiOwner(outboundVO);
+//        outCommon.insertMultiOwner(outboundVO);
         //endregion
 
         //region 销售订单
         if (outboundVO.getFromId() != null) {
-            //赋值  (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
+            //赋值  (这里重写了更新方法,数量在更新方法中有数据库原始数量+本次数量)
             Order order = new Order();
             order.setOrderId(outboundVO.getFromId());
             //根据id查询
@@ -473,30 +565,6 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
     }
 
     /**
-     * @desc : 销售出库新建>>>收款
-     * @date : 2024/3/7 14:13
-     * @author : 寇珊珊
-     */
-    @Transactional(rollbackFor = {Exception.class})
-    public ResponseResultVO<?> saleOrderOutboundInsertCollection(OutboundVO outboundVO) {
-        //新建销售出库
-        saleOrderOutboundInsert(outboundVO);
-        //新建收款退款
-        RecPayVO recPayVO = new RecPayVO();
-        recPayVO.setObjectId(outboundVO.getObjectId());
-        recPayVO.setCusPhone(outboundVO.getCusPhone());
-        recPayVO.setOrgId(outboundVO.getOrgId());
-        recPayVO.setStaffId(outboundVO.getStaffId());
-        recPayVO.setAccDate(outboundVO.getAccDate());
-        recPayVO.setMakeStaff(outboundVO.getMakeStaff());
-        recPayVO.setRpType(outboundVO.getRpType());
-        recPayVO.setSumAmtRec(outboundVO.getSumAmtRec());
-        recPayVO.setItemList(outboundVO.getItemListRecPayItemVO());
-        receiptService.insertReceipt(recPayVO);
-        return ResponseResultUtil.success();
-    }
-
-    /**
      * @desc : 销售出库编辑
      * @date : 2024/3/25 16:25
      * @author : 寇珊珊
@@ -526,6 +594,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             }
         }
         //endregion
+
         //region 大编辑
         else {
             // region 更新客户信息
@@ -890,6 +959,7 @@ public class OutboundSaleOrderService extends BaseService<Outbound> {
             //endregion
         }
         //endregion
+
         return ResponseResultUtil.success(outboundVO);
     }
 

+ 131 - 9
src/main/java/com/dk/mdm/service/mst/GoodsSkuService.java

@@ -1,23 +1,26 @@
 package com.dk.mdm.service.mst;
 
+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.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
+import com.dk.common.util.ExcelUtils;
 import com.dk.mdm.infrastructure.convert.mst.GoodsSkuConvert;
 import com.dk.mdm.infrastructure.util.AuthUtils;
+import com.dk.mdm.mapper.mst.*;
+import com.dk.mdm.model.pojo.mst.GoodsBrand;
+import com.dk.mdm.model.pojo.mst.GoodsCategory;
 import com.dk.mdm.model.pojo.mst.GoodsSku;
-import com.dk.mdm.mapper.mst.GoodsSkuMapper;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
 import com.dk.mdm.model.pojo.mst.Role;
 import com.dk.mdm.model.query.mac.OtherReceivableItemQuery;
-import com.dk.mdm.model.query.mst.GoodsSkuQuery;
-import com.dk.mdm.model.query.mst.RoleQuery;
+import com.dk.mdm.model.query.mst.*;
 import com.dk.mdm.model.response.mac.OtherReceivableItemResponse;
-import com.dk.mdm.model.response.mst.GoodsSkuResponse;
-import com.dk.mdm.model.response.mst.RoleResponse;
+import com.dk.mdm.model.response.mst.*;
 import com.dk.mdm.model.vo.ivt.InOutRecordVO;
 import com.dk.mdm.model.vo.ivt.InboundItemVO;
 import com.dk.mdm.model.vo.ivt.InboundVO;
@@ -26,17 +29,20 @@ import com.dk.mdm.model.vo.mst.RoleVo;
 import com.dk.mdm.service.common.CommonService;
 import com.dk.mdm.service.ivt.inbound.InboundCheckService;
 import com.dk.mdm.service.ivt.inventory.InventoryService;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PathVariable;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 @Transactional
@@ -59,6 +65,19 @@ public class GoodsSkuService extends BaseService<GoodsSku> {
 
 	@Autowired
 	InventoryService inventoryService;
+
+	@Autowired
+	private GoodsBrandMapper goodsBrandMapper;
+
+	@Autowired
+	private GoodsCategoryMapper	goodsCategoryMapper;
+
+	@Autowired
+	private UnitMapper unitMapper;
+
+	@Autowired
+	private GoodsSeriesMapper goodsSeriesMapper;
+
  /**
      * @desc   : 重写组件
      * @author : 王英杰
@@ -153,4 +172,107 @@ public class GoodsSkuService extends BaseService<GoodsSku> {
 		return ResponseResultUtil.success();
 	}
 
+	/**
+	 * @desc   : 导入
+	 * @author : 常皓宁
+	 * @date   : 2024/6/7 11:41
+	 */
+	@Transactional(rollbackFor = {Exception.class})
+	public ResponseResultVO<String> importSKU(List<GoodsSku> list, HttpServletResponse response,@PathVariable Integer cpId) {
+		List<GoodsSku> messageList = new ArrayList<>();
+		Workbook workbook = null;
+		Boolean importMessage = false;
+		//规则校验
+		for (GoodsSku goodsSku : list) {
+			goodsSku.setCpId(cpId);
+			goodsSku.setErrorMessage("");
+			//TODO 校验规则
+			//品牌
+			if (goodsSku.getBrandName()!=null ||goodsSku.getBrandName()!= "") {
+				String brandName = goodsSku.getBrandName();
+				GoodsBrandResponse goodsBrandResponse = goodsBrandMapper.selectByUuId(new GoodsBrandQuery().setBrandName(brandName).setCpId(goodsSku.getCpId()));
+				if(goodsBrandResponse == null){
+					goodsSku.setErrorMessage("1.商品品牌填写错误");
+					importMessage = true;
+				}else{
+					goodsSku.setBrandId(goodsBrandResponse.getBrandId());
+				}
+			}
+			//种类
+			if (goodsSku.getCategoryName()!=null ||goodsSku.getCategoryName()!= "") {
+				String CatagoryName = goodsSku.getCategoryName();
+				GoodsCategoryResponse goodsCategoryResponse = goodsCategoryMapper.selectByUuId(new GoodsCategoryQuery().setCatName(CatagoryName).setCpId(goodsSku.getCpId()));
+				if(goodsCategoryResponse == null){
+					goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "2.商品种类填写错误");
+					importMessage = true;
+				}else{
+					goodsSku.setCategoryId(goodsCategoryResponse.getCatId());
+				}
+			}
+			//计量单位
+			if (goodsSku.getUnitName()!=null ||goodsSku.getUnitName()!= "") {
+				String unintName = goodsSku.getUnitName();
+				UnitResponse unitResponse = unitMapper.selectByUuId(new UnitQuery().setUnitName(unintName).setCpId(goodsSku.getCpId()));
+				if(unitResponse == null){
+					goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "3.计量单位填写错误");
+					importMessage = true;
+				}else{
+					goodsSku.setUnitId(unitResponse.getUnitId());
+				}
+			}
+			//辅助单位
+			if (goodsSku.getSubUnitName()!=null ||goodsSku.getSubUnitName()!= "") {
+				String subUnintName = goodsSku.getSubUnitName();
+				UnitResponse unitResponse = unitMapper.selectByUuId(new UnitQuery().setUnitName(subUnintName).setCpId(goodsSku.getCpId()));
+				if(unitResponse == null){
+					goodsSku.setErrorMessage(goodsSku.getErrorMessage()  + "4.辅助单位填写错误");
+					importMessage = true;
+				}else{
+					goodsSku.setSubUnitId(unitResponse.getUnitId());
+				}
+			}
+			//商品系列
+			if (goodsSku.getSeriesName()!=null ||goodsSku.getSeriesName()!= "") {
+				String seriesName = goodsSku.getSeriesName();
+				GoodsSeriesResponse goodsSeriesResponse = goodsSeriesMapper.selectByUuId(new GoodsSeriesQuery().setSeriesName(seriesName).setCpId(goodsSku.getCpId()));
+				if(goodsSeriesResponse == null){
+					goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "5.商品系列填写错误");
+					importMessage = true;
+				}else{
+					goodsSku.setSubUnitId(goodsSeriesResponse.getSeriesId());
+				}
+			}
+			messageList.add(goodsSku);
+		}
+
+
+		//导出错误提示
+		if (importMessage) {
+			workbook = ExcelUtils.exportExcelUrl(messageList, "错误数据反馈", "错误数据反馈", GoodsSku.class, "错误数据反馈" + ".xls", response);
+			UUID uuid = UUID.randomUUID();
+			String randomUUIDString = uuid.toString();
+			//TODO 导出文件位置
+			String fileName = "D:/练习/" + randomUUIDString;
+			File outputFile = new File(fileName);
+			//创建文件夹
+			if (!outputFile.exists()) {
+				outputFile.mkdir();
+			}
+			File uploadFile = new File(fileName, "错误数据反馈.xls");
+			try (FileOutputStream fos = new FileOutputStream(uploadFile)) {
+				workbook.write(fos);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			return ResponseResultUtil.error(-300,"D:/练习/" + randomUUIDString + "/错误数据反馈.xls");
+		}
+		else{
+			//插入数据
+			for (GoodsSku goodsSku : messageList) {
+				super.insert(goodsSku);
+			}
+			return ResponseResultUtil.success();
+		}
+	}
+
 }

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

@@ -375,7 +375,9 @@ public class OrderService extends BaseService<Order> {
             outboundVO.setOutDate(LocalDate.now());
             outboundVO.setOutingQty(orderVO.getSumQuantity());
             outboundVO.setOutingAmt(orderVO.getSumAmount());
-            outboundSaleOrderService.saleOrderOutboundInsert(outboundVO);
+            outboundVO.setFlgAutoHandle(orderVO.getFlgAutoHandle());
+            outboundVO.setFlgHandleSetting(orderVO.getFlgHandleSetting());
+            outboundSaleOrderService.inventoryOUtBond(outboundVO);
         }
 
         return ResponseResultUtil.success();