Redeem 1 năm trước cách đây
mục cha
commit
5e65f0b1c3

+ 1 - 1
pom.xml

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

+ 24 - 0
src/main/java/com/steerinfo/dil/controller/OyeResultController.java

@@ -162,6 +162,30 @@ public class OyeResultController extends BaseRESTfulController {
     }
 
 
+    @ApiOperation("划分实时库存")
+    @PostMapping("updateInsertRealTime")
+    public RESTfulResult updateInsertRealTime(@RequestBody Map<String,Object> map) {
+        String result = null ;
+        try {
+            result = oyeResultService.updateInsertRealTime(map);
+            return success(result);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return failed(e.getMessage());
+        }
+    }
+
+    @ApiOperation("定制报表数据,收发存")
+    @PostMapping("receiveSendReport")
+    public RESTfulResult receiveSendReport(@RequestBody Map<String,Object> map) {
+        String startTime =  map.get("startTime").toString();
+        String endTime =  map.get("endTime").toString();
+        DataChange.queryDataByDateTime(startTime, endTime, map, sdfDateTime);//根据时间段查询数据
+        //分页查询数据
+        List<Map<String, Object>> columnList = oyeResultService.receiveSendReport(map);
+
+        return success(columnList);
+    }
 
 
 

+ 8 - 0
src/main/java/com/steerinfo/dil/mapper/OyeInboundResultMapper.java

@@ -23,4 +23,12 @@ public interface OyeInboundResultMapper extends IBaseMapper<OyeInboundResult, Bi
 
     int updateOrderStatus(BigDecimal orderId);
 
+    BigDecimal getPlaceId(String inboundWarehouse);
+
+    int updateAddressPlace(Map<String, Object> mapValue);
+
+    String selectReceiptResultId(BigDecimal orderId);
+
+    int updateOOOrderStatus(BigDecimal orderId);
+
 }

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

@@ -24,4 +24,6 @@ public interface OyeRealtimeInventoryMapper extends IBaseMapper<OyeRealtimeInven
 
     Map<String, Object> seleOtmsParams(BigDecimal orderId);
 
+    List<Map<String,Object>> receiveSendReport(Map<String, Object> map);
+
 }

+ 107 - 3
src/main/java/com/steerinfo/dil/service/impl/OyeResultServiceImpl.java

@@ -78,7 +78,7 @@ public class OyeResultServiceImpl implements IOyeResultService {
             BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
             BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
             BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
-            BigDecimal singleWeight = theoryWeight.divide(materialNumber);
+            BigDecimal singleWeight = theoryWeight.divide(materialNumber,4,BigDecimal.ROUND_HALF_UP);
             BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
             oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId());
             oyeInboundResult.setSaleArea(map.get("saleArea").toString());
@@ -117,8 +117,23 @@ public class OyeResultServiceImpl implements IOyeResultService {
                 OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map);
                 oyeRealtimeInventoriesUpdate.add(oyeRealtimeInventory);
             }
-            // 修改运单状态
+            if (!map.get("place").equals(map.get("inboundWarehouse"))) {
+                //如果收货地址与place,则需要修改收货地址
+                BigDecimal newPlaceId = oyeInboundResultMapper.getPlaceId(map.get("inboundWarehouse").toString());
+                //修改收货地址
+                Map<String, Object> addressMap = new HashMap<>();
+                addressMap.put("newPlaceId",newPlaceId);
+                addressMap.put("placeId",DataChange.dataToBigDecimal(map.get("placeId")));
+                addressMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId")));
+                oyeInboundResultMapper.updateAddressPlace(addressMap);
+            }
+            //判断该运单有没有签收实绩
+            String receiptAddress = oyeInboundResultMapper.selectReceiptResultId(DataChange.dataToBigDecimal(map.get("orderId")));
+            if(receiptAddress != null) {
+                oyeInboundResultMapper.updateOOOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
+            }
             oyeInboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
+            // 修改运单状态
             OyeInboundResults.add(oyeInboundResult);
         }
         oyeInboundResultMapper.batchInsert(OyeInboundResults);
@@ -176,7 +191,7 @@ public class OyeResultServiceImpl implements IOyeResultService {
             oyeOutboundResult.setInsertTime(new Date());
             map.put("singleWeight",singleWeight);
             //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在
-            BigDecimal inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map);
+            BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId"));
             oyeOutboundResult.setInventoryId(inventoryId);
             map.put("inventoryId",inventoryId);
             map.put("flag",2);
@@ -265,4 +280,93 @@ public class OyeResultServiceImpl implements IOyeResultService {
         tmstruckWeightBatch.setBatchRemark("出库生成批次");
         return tmstruckWeightBatch;
     }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public String updateInsertRealTime(Map<String, Object> map) throws Exception{
+        // 划分实时库存数据
+        // 针对原先的库存,需要进行出库;针对划分后的库存需要进行入库;先出后入;
+        // 创建出库需要的数据;
+        Map<String, Object> jiChuMap = new HashMap<>();
+        jiChuMap.put("inventoryId",map.get("inventoryId"));
+        OyeOutboundResult oyeOutboundResult = new OyeOutboundResult();
+        oyeOutboundResult.setId(oyeOutboundResultMapper.getResultId());
+        BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
+        BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
+        BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
+        if(materialNumber == null || materialNumber.intValue() == 0) {
+            throw new Exception("物资件数错误");
+        }
+        BigDecimal singleWeight = DataChange.dataToBigDecimal(map.get("singleWeight"));
+        BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter"));
+        oyeOutboundResult.setSaleArea(map.get("oldSaleArea").toString());
+        oyeOutboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
+        oyeOutboundResult.setInboundArea(map.get("inboundArea").toString());
+        oyeOutboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
+        //更新制单日期
+        oyeOutboundResult.setMeter(meter);
+        oyeOutboundResult.setMaterialId(materialId);
+        oyeOutboundResult.setTheoryWeight(theoryWeight);
+        oyeOutboundResult.setSingleWeight(singleWeight);
+        oyeOutboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
+        oyeOutboundResult.setMaterialNumber(materialNumber);
+        oyeOutboundResult.setInsertUsername(map.get("userName") + "");
+        oyeOutboundResult.setInsertTime(new Date());
+        oyeOutboundResult.setInventoryId(DataChange.dataToBigDecimal(map.get("inventoryId")));
+        oyeOutboundResult.setMaterialNumber(DataChange.dataToBigDecimal(map.get("materialNumber")));
+        oyeOutboundResult.setTheoryWeight(DataChange.dataToBigDecimal(map.get("theoryWeight")));
+        oyeOutboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
+        Map<String, Object> outBoundMap = new HashMap<>();
+        outBoundMap.put("inventoryId",map.get("inventoryId"));
+        outBoundMap.put("materialNumber",oyeOutboundResult.getMaterialNumber());
+        outBoundMap.put("netWeight",oyeOutboundResult.getNetWeight());
+        outBoundMap.put("theoryWeight",oyeOutboundResult.getTheoryWeight());
+        outBoundMap.put("flag",2);
+        OyeRealtimeInventory oyeRealtimeInventoryOut = updateRealTimeInventory(outBoundMap);
+        // 创建入库需要的数据
+        OyeInboundResult oyeInboundResult = new OyeInboundResult();
+        oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId());
+        oyeInboundResult.setSaleArea(map.get("saleArea").toString());
+        oyeInboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId")));
+        oyeInboundResult.setInboundArea(map.get("inboundArea").toString());
+        oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
+        oyeInboundResult.setMeter(meter);
+        oyeInboundResult.setMaterialId(materialId);
+        oyeInboundResult.setTheoryWeight(theoryWeight);
+        oyeInboundResult.setSingleWeight(singleWeight);
+        oyeInboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight")));
+        oyeInboundResult.setMaterialNumber(materialNumber);
+        oyeInboundResult.setInsertUsername(map.get("userName") + "");
+        oyeInboundResult.setInsertTime(new Date());
+        map.put("singleWeight",singleWeight);
+        OyeRealtimeInventory oyeRealtimeInventoryInsert = null;
+        OyeRealtimeInventory oyeRealtimeInventoryUpdate = null;
+        //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在
+        BigDecimal inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map);
+        if (inventoryId == null) {
+            //新增实时库存
+            map.put("flag",1);
+            oyeRealtimeInventoryInsert = insertRealTimeInventory(map);
+            oyeInboundResult.setInventoryId(oyeRealtimeInventoryInsert.getInventoryId());
+        }else{
+            map.put("inventoryId",inventoryId);
+            map.put("flag",1);
+            oyeRealtimeInventoryUpdate = updateRealTimeInventory(map);
+        }
+        if (oyeRealtimeInventoryInsert != null) {
+            oyeRealtimeInventoryMapper.insertSelective(oyeRealtimeInventoryInsert);
+        }
+        if (oyeRealtimeInventoryUpdate != null) {
+            oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryUpdate);
+        }
+        oyeInboundResultMapper.insertSelective(oyeInboundResult);
+        oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryOut);
+        oyeOutboundResultMapper.insertSelective(oyeOutboundResult);
+        return "操作成功";
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public List<Map<String, Object>> receiveSendReport(Map<String, Object> map) {
+        return oyeRealtimeInventoryMapper.receiveSendReport(map);
+    }
 }

+ 35 - 0
src/main/resources/com/steerinfo/dil/mapper/OyeInboundResultMapper.xml

@@ -837,6 +837,7 @@
            OIR.MATERIAL_NUMBER  "materialNumber",
            OIR.THEORY_WEIGHT    "theoryWeight",
            OIR.NET_WEIGHT       "netWeight",
+           TWB.BATCH_NET_WEIGHT "orderNetWeight",
            OIR.SALE_NO          "saleNo",
            OIR.SALE_AREA        "saleArea",
            OIR.INVENTORY_ID     "inventoryId",
@@ -856,6 +857,8 @@
            LEFT JOIN RMS_MATERIAL RM on OIR.MATERIAL_ID = RM.MATERIAL_ID
            LEFT JOIN RMS_CONSIGNEE RC on OIR.CONSIGNEE_ID = RC.CONSIGNEE_ID
            LEFT JOIN OMSTRUCK_ORDER OO on OIR.ORDER_ID = OO.ORDER_ID
+           LEFT JOIN AMS_SALE_MATERIAL ASM ON ASM.SALE_MATERIAL_ID = OIR.SALE_MATERIAL_ID
+           LEFT JOIN TMSTRUCK_WEIGHT_BATCH TWB ON TWB.WEIGHT_BATCH_ID = ASM.WEIGHT_BATCH_ID
            <where>
            <if test="oneDate != null">
               and to_date(#{oneDate}, 'yyyy-mm-dd hh24:mi:ss') &lt;= OIR.INSERT_TIME
@@ -897,4 +900,36 @@
     SET ORDER_STATUS = '已入库'
     WHERE ORDER_ID = #{orderId}
   </update>
+  <select id="getPlaceId" resultType="java.math.BigDecimal">
+    SELECT RRP.PLACE_ID FROM RMS_RECEIVE_PLACE RRP
+    LEFT JOIN RMS_RECEIVE_ADDRESS RRA
+    ON RRA.ADDRESS_ID = RRP.ADDRESS_ID
+    WHERE RRP.ADDRESS_DELIVERY_ADDRESS = #{inboundWarehouse}
+    AND RRA.INSERT_UPDATE_REMARK = '厂外库'
+    FETCH NEXT 1 ROWS ONLY
+  </select>
+  <update id="updateAddressPlace">
+    UPDATE  AMS_SALE_ORDER_MATERIAL ASOM
+    SET ASOM.SALE_SHIPPING_ADDRESS_ID = #{newPlaceId},
+        ASOM.HISTORY_SHIPPING_ADDRESS_ID = #{placeId},
+        ASOM.INSERT_UPDATE_REMARK = '入库修改地址'
+    WHERE ASOM.SALE_ORDER_MATERIAL_ID = (
+        SELECT ASTM.SALE_ORDER_MATERIAL_ID FROM AMS_SALE_TRUCKNO_MATERIAL ASTM
+        WHERE ASTM.MATERIAL_ID = #{saleMaterialId}
+      )
+  </update>
+  <select id="selectReceiptResultId" resultType="java.lang.String">
+    SELECT TRR.RESULT_ARRIVAL_ADDRESS
+    FROM TMSTRUCK_TOTAL_RESULT TTR
+    LEFT JOIN TMStRUCK_RECEIPT_RESULT TRR
+    ON TTR.RESULT_TOTAL_ID = TRR.RESULT_TOTAL_ID
+    WHERE TTR.ORDER_ID = #{orderId}
+    fetch next 1 rows only
+  </select>
+  <update id="updateOOOrderStatus">
+    UPDATE OMSTRUCK_ORDER OO
+    SET OO.ORDER_STATUS = 2
+    WHERE OO.ORDER_ID = #{orderId}
+  </update>
+
 </mapper>

+ 94 - 0
src/main/resources/com/steerinfo/dil/mapper/OyeRealtimeInventoryMapper.xml

@@ -685,6 +685,7 @@
     ORI.INBOUND_WAREHOUSE "inboundWarehouse",
     ORI.INBOUND_AREA     "inboundArea",
     ORI.INSERT_TIME      "insertTime",
+    ORI.UPDATE_TIME      "updateTime",
     RC.CONSIGNEE_ID      "consigneeId",
     RC.CONSIGNEE_COMPANY_NAME    "consigneeName",
     RM.MATERIAL_NAME "materialName",
@@ -793,5 +794,98 @@
              FETCH NEXT 1 ROWS ONLY
            )
     </select>
+  <select id="receiveSendReport" resultType="java.util.Map">
+    SELECT
+      "companyName",
+      "saleArea",
+      "inboundWarehouse",
+      "materialName",
+      "materialSpe",
+      "materialModel",
+      sum( "inboundMaterialNumber" ) "inboundMaterialNumber",
+      sum( "inboundMaterialWeight" ) "inboundMaterialWeight",
+      sum( "outboundMaterialNumber" ) "outboundMaterialNumber",
+      sum( "outboundMaterialWeight" ) "outboundMaterialWeight",
+      NVL( sum( OIR.MATERIAL_NUMBER ), 0 ) "currentInboundMaterialNumber",
+      NVL( SUM( OOR.MATERIAL_NUMBER ), 0 ) "currentOutboundMaterialNumber",
+      NVL( SUM( OIR.THEORY_WEIGHT ), 0 ) "currentInboundTheoryWeight",
+      NVL( SUM( OOR.THEORY_WEIGHT ), 0 ) "currentOutboundTheoryWeight",
+      sum( "materialNumber" ) "materialNumber",
+      sum( "materialWeight" ) "materialWeight"
+    FROM
+      (
+        SELECT
+          NVL( SUM( ORI.MATERIAL_NUMBER ), 0 ) "materialNumber",
+          NVL( SUM( ORI.THEORY_WEIGHT ), 0 ) "materialWeight",
+          RC.CONSIGNEE_COMPANY_NAME "companyName",
+          ORI.SALE_AREA "saleArea",
+          ORI.INBOUND_WAREHOUSE "inboundWarehouse",
+          NVL( SUM( OIR.MATERIAL_NUMBER ), 0 ) "inboundMaterialNumber",
+          NVL( SUM( OIR.THEORY_WEIGHT ), 0 ) "inboundMaterialWeight",
+          NVL( SUM( OOR.MATERIAL_NUMBER ), 0 ) "outboundMaterialNumber",
+          NVL( SUM( OOR.THEORY_WEIGHT ), 0 ) "outboundMaterialWeight",
+          ORI.INVENTORY_ID "inventoryId",
+          RM.MATERIAL_NAME "materialName",
+          RM.MATERIAL_SPECIFICATION "materialSpe",
+          RM.MATERIAL_MODEL "materialModel"
+        FROM
+          OYE_REALTIME_INVENTORY ORI
+            LEFT JOIN OYE_INBOUND_RESULT OIR ON OIR.INVENTORY_ID = ORI.INVENTORY_ID
+            LEFT JOIN OYE_OUTBOUND_RESULT OOR ON OOR.INVENTORY_ID = ORI.INVENTORY_ID
+            LEFT JOIN RMS_CONSIGNEE RC ON RC.CONSIGNEE_ID = ORI.CONSIGNEE_ID
+            LEFT JOIN RMS_MATERIAL RM ON RM.MATERIAL_ID = ORI.MATERIAL_ID
+        GROUP BY
+          ORI.INVENTORY_ID,
+          RC.CONSIGNEE_COMPANY_NAME,
+          ORI.SALE_AREA,
+          ORI.INBOUND_WAREHOUSE,
+          RM.MATERIAL_NAME,
+          RM.MATERIAL_SPECIFICATION,
+          RM.MATERIAL_MODEL
+      ) TT
+        LEFT JOIN OYE_INBOUND_RESULT OIR ON OIR.INVENTORY_ID = TT."inventoryId"
+        <if test="oneDate != null">
+          and to_date(#{oneDate}, 'yyyy-mm-dd hh24:mi:ss') &lt; = OIR.INSERT_TIME
+        </if>
+        <if test="startDate != null">
+          and to_date(#{startDate}, 'yyyy-mm-dd hh24:mi:ss') &lt;=  OIR.INSERT_TIME
+          and to_date(#{endDate}, 'yyyy-mm-dd hh24:mi:ss') >=  OIR.INSERT_TIME
+        </if>
+        LEFT JOIN OYE_OUTBOUND_RESULT OOR ON OOR.INVENTORY_ID = TT."inventoryId"
+        <if test="oneDate != null">
+          and to_date(#{oneDate}, 'yyyy-mm-dd hh24:mi:ss') &lt; = OOR.INSERT_TIME
+        </if>
+        <if test="startDate != null">
+          and to_date(#{startDate}, 'yyyy-mm-dd hh24:mi:ss') &lt;=  OOR.INSERT_TIME
+          and to_date(#{endDate}, 'yyyy-mm-dd hh24:mi:ss') >=  OOR.INSERT_TIME
+        </if>
+    <where>
+      <if test="companyName != null and companyName != ''">
+        AND  "companyName" LIKE '%${companyName}%'
+      </if>
+      <if test="saleArea != null and saleArea != ''">
+        AND "saleArea" LIKE '%${saleArea}%'
+      </if>
+      <if test="inboundWarehouse != null and inboundWarehouse != ''">
+        AND "inboundWarehouse" LIKE '%${inboundWarehouse}%'
+      </if>
+      <if test="materialName != null and materialName != ''">
+        AND "materialName" LIKE '%${materialName}%'
+      </if>
+      <if test="materialSpe != null and materialSpe != ''">
+        AND "materialSpe" LIKE '%${materialSpe}%'
+      </if>
+      <if test="materialModel != null and materialModel != ''">
+        AND "materialModel" LIKE '%${materialModel}%'
+      </if>
+    </where>
+    GROUP BY
+      TT."companyName",
+      TT."saleArea",
+      TT."inboundWarehouse",
+      "materialName",
+      "materialSpe",
+      "materialModel"
+  </select>
 
 </mapper>

+ 1 - 1
src/main/resources/log4j.properties

@@ -1,5 +1,5 @@
 ## LOG4J配置
-log4j.rootCategory=INFO,file, RUNNING,errorfile
+log4j.rootCategory=INFO,file, RUNNING,errorfile,stdout
 ## 控制台输出
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout