Redeem 1 rok pred
rodič
commit
9e7465049c

+ 1 - 1
pom.xml

@@ -6,7 +6,7 @@
 
     <groupId>org.example</groupId>
     <artifactId>dil-ams-api</artifactId>
-    <version>1.3</version>
+    <version>1.4</version>
 
     <parent>
         <groupId>org.springframework.boot</groupId>

+ 22 - 1
src/main/java/com/steerinfo/dil/controller/OyeWarehouseController.java

@@ -2,6 +2,7 @@ package com.steerinfo.dil.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
+import com.steerinfo.dil.mapper.AmsSaleMaterialMapper;
 import com.steerinfo.dil.mapper.RmsReceivePlaceMapper;
 import com.steerinfo.dil.model.RmsReceivePlace;
 import com.steerinfo.dil.service.impl.OyeWarehouseServiceImpl;
@@ -42,6 +43,9 @@ public class OyeWarehouseController extends BaseRESTfulController {
     @Resource
     OyeWarehouseServiceImpl oyeWarehouseService;
 
+    @Resource
+    AmsSaleMaterialMapper amsSaleMaterialMapper;
+
     @ApiOperation("新增欧冶具体库房")
     @PostMapping("/insertOyeWarehouse")
     public RESTfulResult insertOyeWarehouse(@RequestBody Map<String,Object> map) {
@@ -79,6 +83,14 @@ public class OyeWarehouseController extends BaseRESTfulController {
         try {
             // 成功
             int result = oyeWarehouseService.addTransPlan(mapValue);
+            Map<String,Object> compareMap = amsSaleMaterialMapper.getCompareMap(result);
+            BigDecimal orderMaterialNumber = DataChange.dataToBigDecimal(compareMap.get("orderMaterialNumber"));
+            BigDecimal materialNumber= DataChange.dataToBigDecimal(compareMap.get("materialNumber"));
+            if (orderMaterialNumber.compareTo(materialNumber) > 0) {
+                //删除销售订单
+                amsSaleMaterialMapper.updateSaleStatus(result);
+                return failed(mapValue.get("receiveName") + "超出库存数量,系统删除,请重新输入");
+            }
             return success(result);
         } catch (Exception e) {
             // 失败
@@ -107,7 +119,16 @@ public class OyeWarehouseController extends BaseRESTfulController {
             ) {
                 saleOrderNo = map.get("saleOrderNo").toString();
                 count++;
-                oyeWarehouseService.addTransPlan(map);
+                int saleOrderId = oyeWarehouseService.addTransPlan(map);
+                Map<String,Object> compareMap = amsSaleMaterialMapper.getCompareMap(saleOrderId);
+                BigDecimal orderMaterialNumber = DataChange.dataToBigDecimal(compareMap.get("orderMaterialNumber"));
+                BigDecimal materialNumber= DataChange.dataToBigDecimal(compareMap.get("materialNumber"));
+                if (orderMaterialNumber.compareTo(materialNumber) > 0) {
+                    //删除销售订单
+                    amsSaleMaterialMapper.updateSaleStatus(saleOrderId);
+                    return failed(map.get("receiveName") + "超出库存数量,系统删除,请重新输入");
+                }
+                //根据销售订单ID再去查询汇总一遍
             }
         } catch (Exception e) {
             System.out.println(e);

+ 6 - 0
src/main/java/com/steerinfo/dil/mapper/AmsSaleMaterialMapper.java

@@ -60,4 +60,10 @@ public interface AmsSaleMaterialMapper extends IBaseMapper<AmsSaleMaterial, BigD
 
     BigDecimal selectWarehouseId(BigDecimal saleMaterialId);
 
+    BigDecimal selectInventoryId(Map<String, Object> searchInventoryMap);
+
+    Map<String, Object> getCompareMap(int saleOrderId);
+
+    int updateSaleStatus(int saleOrderId);
+
 }

+ 2 - 0
src/main/java/com/steerinfo/dil/mapper/AmsSaleOrderMapper.java

@@ -240,4 +240,6 @@ public interface AmsSaleOrderMapper extends IBaseMapper<AmsSaleOrder, BigDecimal
 
     String getPlaceAddress(BigDecimal saleOrderMaterialId);
 
+    int updateFluStatus(Map<String, Object> approveMap);
+
 }

+ 58 - 40
src/main/java/com/steerinfo/dil/service/impl/OyeWarehouseServiceImpl.java

@@ -143,8 +143,52 @@ public class OyeWarehouseServiceImpl implements IOyeWarehouseService {
         AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
         // 遍历每一行
         for (Map<String, Object> map : mapList) {
-            if(!getRealTimeInfo(map)) {
-                throw new Exception("超出实时库存数量,请调整后再次输入");
+            // 物资
+            BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
+            // 钢材米数
+            BigDecimal steelMeters = DataChange.dataToBigDecimal(map.get("meterNumber"));
+            if (materialId == null || materialId.intValue() == 0) {
+                String name = (String) map.get("materialName");
+                String specification = (String) map.get("materialSpecification");
+                String model = (String) map.get("materialModel");
+                Map<String,Object> materialMap = new HashMap<>();
+                materialMap.put("name",name);
+                materialMap.put("specification",specification);
+                if (model == null || model.equals("") || model.equals("null")) {
+                    model = null;
+                }
+                materialMap.put("model",model);
+                materialId = amsSaleOrderMapper.findMaterialId(materialMap);
+                if (materialId == null) {
+                    throw new Exception("您输入的物资:" + name + specification + model + "不存在!!");
+                }
+            }
+            Object inboundWarehouseObject = map.get("inboundWarehouse");
+            if (inboundWarehouseObject == null || inboundWarehouseObject.equals("")) {
+                throw new Exception("出库库房为空!");
+            }
+            String inboundWarehouse = inboundWarehouseObject.toString();
+            Map<String, Object> searchInventoryMap = new HashMap<>();
+            searchInventoryMap.put("materialId",materialId);
+            searchInventoryMap.put("saleArea",saleRemark);
+            searchInventoryMap.put("receiveId",receiveId);
+            searchInventoryMap.put("meter",steelMeters);
+            searchInventoryMap.put("inboundWarehouse",inboundWarehouse);
+            BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId"));
+            if (inventoryId == null || inventoryId.intValue() == 0) {
+                try {
+                    inventoryId = amsSaleMaterialMapper.selectInventoryId(searchInventoryMap);
+                    if(inventoryId == null) {
+                        throw new Exception("无法匹配实时库存,请检查输入参数");
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    throw new Exception("无法匹配实时库存,请检查输入参数");
+                }
+            }
+            map.put("inventoryId",inventoryId);
+            if (!getRealTimeInfo(map)) {
+                throw new Exception("超出实时库存数量,无法通过");
             }
             /*
              车序号表
@@ -254,24 +298,7 @@ public class OyeWarehouseServiceImpl implements IOyeWarehouseService {
             /*
             销售订单物资表
              */
-            // 物资
-            BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
-            if (materialId == null || materialId.intValue() == 0) {
-                String name = (String) map.get("materialName");
-                String specification = (String) map.get("materialSpecification");
-                String model = (String) map.get("materialModel");
-                Map<String,Object> materialMap = new HashMap<>();
-                materialMap.put("name",name);
-                materialMap.put("specification",specification);
-                if (model == null || model.equals("") || model.equals("null")) {
-                    model = null;
-                }
-                materialMap.put("model",model);
-                materialId = amsSaleOrderMapper.findMaterialId(materialMap);
-                if (materialId == null) {
-                    throw new Exception("您输入的物资:" + name + specification + model + "不存在!!");
-                }
-            }
+
             Integer materialCount = amsSaleMaterialMapper.getMaterialCount(materialId);
             RmsMaterial rmsMaterial = new RmsMaterial();
             rmsMaterial.setMaterialId(materialId);
@@ -284,8 +311,7 @@ public class OyeWarehouseServiceImpl implements IOyeWarehouseService {
             BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
             // 物资名称
             Object materialName = map.get("materialName");
-            // 钢材米数
-            BigDecimal steelMeters = DataChange.dataToBigDecimal(map.get("meterNumber"));
+
             // 判断物资是否是盘螺或盘元/盘圆
             if (materialName != null && (materialName.toString().contains("盘螺") || materialName.toString().contains("盘元") || materialName.toString().contains("盘圆"))) {
                 amsSaleMaterial.setSteelMeter(null);
@@ -295,18 +321,6 @@ public class OyeWarehouseServiceImpl implements IOyeWarehouseService {
             }
             // 是否磅重销售(0:磅重;1:理重)
             BigDecimal isPoundSale = DataChange.dataToBigDecimal(map.get("isPound"));
-
-            BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId"));
-            //if (inventoryId == null || inventoryId.intValue() == 0) {
-            //    if (map.get("inboundWarehouseName") == null || "".equals(map.get("inboundWarehouseName"))) {
-            //        throw new Exception("库房名称为必填");
-            //    }
-            //    Map<Object, Object> excelMap = new HashMap<>();
-            //    excelMap.put("materialId",materialId);
-            //    excelMap.put("inboundWarehouseName",map.get("inboundWarehouseName"));
-            //    excelMap.put("meter",steelMeters);
-            //    excelMap.put("singleWeight",map.get())
-            //}
             // 销售订单物资表主键
             BigDecimal saleMaterialId = amsSaleMaterialMapper.selectMaxId();
             amsSaleMaterial.setSaleMaterialId(saleMaterialId);
@@ -357,17 +371,17 @@ public class OyeWarehouseServiceImpl implements IOyeWarehouseService {
         for (Map<String,Object> approveMap : mapList) {
             if (DataChange.dataToBigDecimal(approveMap.get("orderStatus")).intValue() == 4) {
                 try {
-                    Boolean flag = getRealTimeInfo(approveMap);
-                    if(flag) {
-                        i += amsSaleOrderMapper.approveTransPlan(approveMap);
-                    }else{
-                        continue;
-                    }
+                    i += amsSaleOrderMapper.approveTransPlan(approveMap);
                 } catch (Exception e) {
                     e.printStackTrace();
                     continue;
                 }
             }
+            if(DataChange.dataToBigDecimal(approveMap.get("deleted")).intValue() == 1) {
+                //删除
+                i += amsSaleOrderMapper.updateFluStatus(approveMap);
+                //i += amsSaleOrderMapper.approveTransPlan(approveMap);
+            }
         }
         return "共提交" + j + "条" + "单据;成功" + i + "条";
     }
@@ -375,13 +389,17 @@ public class OyeWarehouseServiceImpl implements IOyeWarehouseService {
     //根据销售订单子表ID,判断待出库的一个数量
     public synchronized Boolean getRealTimeInfo(Map<String,Object> map) throws Exception {
         BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId"));
+        //获取下单数量
         BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
         //根据库存ID,统计所有未装但已制订计划的正常单据
+        //获取未装物资数量
         BigDecimal unloadMaterialNumber = amsSaleMaterialMapper.getRealTimeUnloadNumber(inventoryId);
+        //
         BigDecimal realTimeMaterialNumber = amsSaleMaterialMapper.getRealTimeMaterialNumber(inventoryId);
         if (realTimeMaterialNumber.intValue() == 0) {
             throw new Exception("该实时库存无数量,无法下单");
         }
+        System.out.println(realTimeMaterialNumber.subtract(unloadMaterialNumber));
         if (realTimeMaterialNumber.subtract(unloadMaterialNumber).compareTo(materialNumber) >= 0) {
             return true;
         }

+ 53 - 1
src/main/resources/com/steerinfo/dil/mapper/AmsSaleMaterialMapper.xml

@@ -977,7 +977,7 @@
       AND ASM.SALE_WAREHOUSE = to_char(#{inventoryId})
       AND ASO.SALE_TYPE = 50
       AND ASM.SALE_MATERIAL_ID NOT IN (
-          SELECT OOR.SALE_MATERIAL_ID FROM OYE_OUTBOUND_RESULT OOR WHERE OOR.INVENTORY_ID = #{inventoryId}
+          SELECT NVL(OOR.SALE_MATERIAL_ID,0) FROM OYE_OUTBOUND_RESULT OOR WHERE OOR.INVENTORY_ID = #{inventoryId}
       )
     </select>
   <select id="getRealTimeMaterialNumber" resultType="java.math.BigDecimal" parameterType="decimal">
@@ -994,4 +994,56 @@
     AND ASM.SALE_MATERIAL_ID = #{saleMaterialId}
     FETCH NEXT 1 ROWS ONLY
   </select>
+  <select id="selectInventoryId" resultType="java.math.BigDecimal" parameterType="java.util.Map">
+    SELECT ORI.INVENTORY_ID FROM OYE_REALTIME_INVENTORY ORI
+    <where>
+      ORI.INBOUND_AREA = '欧冶库'
+      <if test="meter != null">
+        AND NVL(ORI.METER,0) = NVL(#{meter},0)
+      </if>
+      <if test="receiveId != null">
+        AND ORI.CONSIGNEE_ID = #{receiveId}
+      </if>
+      <if test="saleArea != null">
+        AND ORI.sale_area = #{saleArea}
+      </if>
+      <if test="materialId != null">
+        AND ORI.material_Id = #{materialId}
+      </if>
+      <if test="singleWeight != null">
+        AND ORI.single_Weight = #{singleWeight}
+      </if>
+      <if test="singleWeight != null">
+        AND ORI.single_Weight = #{singleWeight}
+      </if>
+      <if test="inboundWarehouse != null">
+        AND ORI.inbound_Warehouse = #{inboundWarehouse}
+      </if>
+    </where>
+  </select>
+  <select id="getCompareMap" resultType="java.util.Map">
+    SELECT
+      tt."orderMaterialNumber" "orderMaterialNumber",
+      ORI.MATERIAL_NUMBER "materialNumber"
+    FROM
+      (
+        SELECT
+          SUM( ASM.MATERIAL_NUMBER ) "orderMaterialNumber",
+          ASM.SALE_WAREHOUSE "inventoryId"
+        FROM
+          AMS_SALE_ORDER ASO
+            LEFT JOIN AMS_SALE_MATERIAL ASM ON ASM.SALE_ORDER_ID = ASO.SALE_ORDER_ID
+        WHERE
+          ASO.SALE_ORDER_ID = #{saleOrderId}
+        GROUP BY
+          ASM.SALE_WAREHOUSE
+      ) TT
+        LEFT JOIN OYE_REALTIME_INVENTORY ORI ON ORI.INVENTORY_ID = tt."inventoryId"
+  </select>
+  <update id="updateSaleStatus">
+    UPDATE AMS_SALE_ORDER ASO
+    SET ASO.DELETED = 1,
+        ASO.INSERT_UPDATE_REMARK = '超出实时库存数量,系统自动删除'
+    WHERE ASO.SALE_ORDER_ID = #{saleOrderId}
+  </update>
 </mapper>

+ 21 - 1
src/main/resources/com/steerinfo/dil/mapper/AmsSaleOrderMapper.xml

@@ -5077,6 +5077,7 @@
     RM.MATERIAL_SPECIFICATION "materialSpecification",
     RM.MATERIAL_MODEL "materialModel",
     ASM.MATERIAL_NUMBER "materialNumber",
+    ASM.SALE_MATERIAL_ID "saleMaterialId",
     RM.MATERIAL_SPECIFICATION || RM.MATERIAL_MODEL "specificationModel",
     RM.MATERIAL_NAME || RM.MATERIAL_SPECIFICATION || RM.MATERIAL_MODEL "nameSpecificationModel",
     RRA.ADDRESS_PROVINCE || RRA.ADDRESS_DISTRICT || RRA.ADDRESS_TOWN ||
@@ -5096,7 +5097,8 @@
     ORI.MATERIAL_NUMBER "inventoryMaterialNumber",
     ORI.THEORY_WEIGHT   "inventoryTheoryWeight",
     ORI.SINGLE_WEIGHT   "singleWeight",
-    ORI.METER           "meter"
+    ORI.METER           "meter",
+    NVL(TT."unloadMaterialNumber",0) "unloadMaterialNumber"
     FROM AMS_SALE_ORDER a_s_order
     LEFT JOIN RMS_SHIPPER r_shipper
     ON a_s_order.SHIPPER_ID = r_shipper.SHIPPER_ID
@@ -5118,6 +5120,19 @@
     ON R_SALER.SALER_ID = a_s_order.SALER_ID
     LEFT JOIN OYE_REALTIME_INVENTORY ORI
     ON ORI.INVENTORY_ID = ASM.SALE_WAREHOUSE
+    LEFT JOIN
+    (SELECT NVL(SUM(ASM.MATERIAL_NUMBER),0) "unloadMaterialNumber",ASM.SALE_WAREHOUSE "inventoryId" FROM AMS_SALE_MATERIAL ASM
+    LEFT JOIN AMS_SALE_ORDER ASO ON ASO.SALE_ORDER_ID = ASM.SALE_ORDER_ID
+    WHERE ASO.DELETED = 0
+    AND ASM.SALE_MATERIAL_ID IS NOT NULL
+    AND ASM.DELETED IS NULL
+    AND ASO.SALE_TYPE = 50
+    AND ASM.SALE_MATERIAL_ID NOT IN (
+    SELECT NVL(OOR.SALE_MATERIAL_ID,0) FROM OYE_OUTBOUND_RESULT OOR
+    )
+    GROUP BY ASM.SALE_WAREHOUSE
+    ) TT
+    on tt."inventoryId" = ORI.INVENTORY_ID
     WHERE a_s_order.SALE_ORDER_STATUS = #{orderStatus}
     AND a_s_order.DELETED = 0
     AND ASM.DELETED IS NULL
@@ -5215,6 +5230,11 @@
     ON RRP.PLACE_ID = ASOM.SALE_SHIPPING_ADDRESS_ID
     WHERE ASOM.SALE_ORDER_MATERIAL_ID = #{saleOrderMaterialId}
   </select>
+  <update id="updateFluStatus">
+    UPDATE AMS_SALE_MATERIAL ASM
+    SET ASM.DELETED = 1
+    WHERE ASM.SALE_MATERIAL_ID = #{saleMaterialId}
+  </update>
 
 
 </mapper>