chen há 2 anos atrás
pai
commit
2071e3f7f0

+ 8 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/openApi/mapper/PurchaseWarehousingMapper.java

@@ -196,14 +196,20 @@ public interface PurchaseWarehousingMapper extends BaseMapper<PurchaseWarehousin
      * @param map
      * @return
      */
-    Integer getCurrentStockCount(@Param("map")Map<String,Object> map);
+    Map<String,Object> getCurrentStockCount(@Param("map")Map<String,Object> map);
 
     /**
-     * 修改现存量的数量
+     * 修改现存量的数量 相加
      * @param map
      */
     void updateCurrentStock(@Param("map")Map<String,Object> map);
 
+    /**
+     * 修改现存量的数量 相减
+     * @param map
+     */
+    void updateCurrentStockSubtract(@Param("map")Map<String,Object> map);
+
     /**
      * 根据订单号获取采购主表信息
      * @param cPOID

+ 43 - 11
jeecg-boot-module-system/src/main/java/org/jeecg/modules/openApi/mapper/xml/PurchaseWarehousingMapper.xml

@@ -40,7 +40,9 @@
         dVeriDate,
         dnverifytime,
         cDefine13,
-        ipurorderid
+        ipurorderid,
+        iExchRate,
+        cExch_Name
         )
         VALUES
         (
@@ -65,13 +67,15 @@
         #{RdRecord01.cSource},
         0,
         0,
-        '陈创',
+        #{RdRecord01.cMaker},
         CONVERT(varchar,GETDATE(),20),
-        '陈创',
+        #{RdRecord01.cHandler},
         CONVERT(varchar,GETDATE(),23),
         CONVERT(varchar,GETDATE(),20),
         #{RdRecord01.cOrderCode},
-        #{RdRecord01.ipurorderid}
+        #{RdRecord01.ipurorderid},
+        #{RdRecord01.iExchRate},
+        #{RdRecord01.cExch_Name}
         )
     </insert>
 
@@ -171,7 +175,12 @@
         cFree10,
         cBatchProperty2,
         cBatchProperty8,
-        cBatchProperty9
+        cBatchProperty9,
+        iOriTaxCost,
+        iOriCost,
+        iOriMoney,
+        iTax,
+        ioriSum
         )
         VALUES
         (
@@ -221,7 +230,12 @@
         #{map.cFree10},
         #{map.cBatchProperty2},
         #{map.cBatchProperty8},
-        #{map.cBatchProperty9}
+        #{map.cBatchProperty9},
+        #{map.iOriTaxCost},
+        #{map.iOriCost},
+        #{map.iOriMoney},
+        #{map.iTax},
+        #{map.ioriSum}
         )
     </insert>
 
@@ -327,7 +341,7 @@
     </select>
 
     <update id="updatePodetailsfreceivedqty" parameterType="java.util.HashMap">
-        update PO_Podetails set freceivedqty=#{map.freceivedqty} where ID=#{map.ID}
+        update PO_Podetails set iReceivedQTY=#{map.iReceivedQTY} where ID=#{map.ID}
     </update>
 
     <select id="getOMMODetails" parameterType="java.lang.String" resultType="java.util.HashMap">
@@ -742,9 +756,8 @@
         update VoucherHistory set cNumber=#{cNumber} where CardNumber=#{cardNumber}
     </update>
 
-    <select id="getCurrentStockCount" resultType="java.lang.Integer" parameterType="java.util.HashMap">
-        SELECT COUNT
-                   ( * )
+    <select id="getCurrentStockCount" resultType="java.util.HashMap" parameterType="java.util.HashMap">
+        SELECT  *
         FROM
             CurrentStock
         WHERE
@@ -763,8 +776,27 @@
           AND isnull(cFree10,'') = #{map.cFree10}
     </select>
 
+
     <update id="updateCurrentStock" parameterType="java.util.HashMap">
-        update CurrentStock set iQuantity=iQuantity+#{map.iQuantity}
+        update CurrentStock set iQuantity=iQuantity+#{map.iQuantity},fAvaQuantity=fAvaQuantity+#{map.iQuantity}
+        WHERE
+            cWhCode = #{map.cWhCode}
+          AND cInvCode = #{map.cInvCode}
+          AND isnull(cBatch,'') = #{map.cBatch}
+          AND isnull(cFree1,'') = #{map.cFree1}
+          AND isnull(cFree2,'') = #{map.cFree2}
+          AND isnull(cFree3,'') = #{map.cFree3}
+          AND isnull(cFree4,'') = #{map.cFree4}
+          AND isnull(cFree5,'') = #{map.cFree5}
+          AND isnull(cFree6,'') = #{map.cFree6}
+          AND isnull(cFree7,'') = #{map.cFree7}
+          AND isnull(cFree8,'') = #{map.cFree8}
+          AND isnull(cFree9,'') = #{map.cFree9}
+          AND isnull(cFree10,'') = #{map.cFree10}
+    </update>
+
+    <update id="updateCurrentStockSubtract" parameterType="java.util.HashMap">
+        update CurrentStock set iQuantity=iQuantity-#{map.iQuantity},fAvaQuantity=fAvaQuantity-#{map.iQuantity}
         WHERE
             cWhCode = #{map.cWhCode}
           AND cInvCode = #{map.cInvCode}

+ 134 - 55
jeecg-boot-module-system/src/main/java/org/jeecg/modules/openApi/service/impl/PurchaseWarehousingServiceImpl.java

@@ -93,7 +93,7 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
 
                 System.out.println(map.get("ID"));
                 //获取最大code
-                String cCode=oConvertUtils.addOne(this.baseMapper.getMaxCode("cCode","RdRecord01","dDate"));
+                String cCode=oConvertUtils.addOne(this.baseMapper.getMaxCode("cCode","RdRecord01","dnmaketime"));
 
                 if(cCode!=null){
                     map.put("cCode",cCode);
@@ -101,6 +101,8 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                 }else{
                     throw new RuntimeException("获取入库单号失败");
                 }
+                map.put("cMaker","陈创");
+                map.put("cHandler","陈创");
                 //日期
                 Long longtime=Long.valueOf(String.valueOf(map.get("dDate")));
                 String formatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(longtime));
@@ -117,10 +119,11 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                     map.put("cRdCode","11");
                     map.put("cPTCode","01");
                     map.put("cSource","采购订单");
-                    //获取汇率
+                    //获取汇率、币种
                     Map<String,Object> PO_PomainMap=this.baseMapper.getPO_PomainBycPOID(String.valueOf(map.get("cOrderCode")));
                     if(PO_PomainMap!=null){
                         map.put("iExchRate",getDecimalNew(String.valueOf(PO_PomainMap.get("nflat"))).doubleValue());
+                        map.put("cExch_Name",PO_PomainMap.get("cexch_name"));
                     }else{
                         throw new RuntimeException("采购订单没有匹配的订单号");
                     }
@@ -129,10 +132,11 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                     map.put("cRdCode","12");
                     map.put("cPTCode","01");
                     map.put("cSource","委外订单");
-                    //获取汇率
+                    //获取汇率、币种
                     Map<String,Object> OM_MOmainMap=this.baseMapper.getOM_MOmainBycCode(String.valueOf(map.get("cOrderCode")));
                     if(OM_MOmainMap!=null){
                         map.put("iExchRate",getDecimalNew(String.valueOf(OM_MOmainMap.get("nflat"))).doubleValue());
+                        map.put("cExch_Name",OM_MOmainMap.get("cexch_name"));
                     }else{
                         throw new RuntimeException("委外订单没有匹配的订单号");
                     }
@@ -171,6 +175,22 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                     throw new RuntimeException("供应商编码不能为空");
                 }
 
+                //判断接收方是否有只值 宁波森语 马菲羊 森语集团
+                boolean iscVenCodeReceiver=false;
+                if(map.get("cVenCodeReceiver")!=null&&!String.valueOf(map.get("cVenCodeReceiver")).equals("")){
+                    //根据接收方获取供应商信息
+                    Map<String,Object> mapVenCode= this.baseMapper.getWhCodeByVenCode(String.valueOf(map.get("cVenCodeReceiver")));
+                    if(mapVenCode!=null){
+                        String cVenAbbName=String.valueOf(mapVenCode.get("cVenAbbName"));//供应商简称
+                        //判断是否外部供应商  外部则进入下一波做调拨单 非则不做
+                        if(!cVenAbbName.equals("宁波森语")&&!cVenAbbName.equals("马菲羊")&&!cVenAbbName.equals("森语集团")){
+                            iscVenCodeReceiver=true;
+                        }
+                    }else{
+                        throw new RuntimeException("未能找到接收方信息");
+                    }
+                }
+
 
                 //子表
                 List<Map<String,Object>> itemList=new ArrayList<>();
@@ -181,12 +201,12 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                     for(Map<String,Object> itemMap:itemList){
                         //获取P号
                         if(itemMap.get("cBatch")==null||String.valueOf(itemMap.get("cBatch")).equals("")){
-                            message=message+"第"+rowId+"缺少批号;";
+                            message=message+"第"+rowId+"缺少批号;";
                         }
                         //获取子表最大id
                         Map<String,Integer> pkMapChild = callGetUAMaxPK2("rd",accID);
                         if(pkMap.get("iChildId")==null){
-                            message=message+"第"+rowId+"获取入库单子表ID失败;";
+                            message=message+"第"+rowId+"获取入库单子表ID失败;";
                             throw new RuntimeException("获取入库单子表ID失败");
                         }
                         itemMap.put("AutoID",pkMapChild.get("iChildId"));
@@ -214,20 +234,38 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                                 Map<String,Object> mapPOPodetails= this.baseMapper.getPOPodetails(rowmId);
 
                                 if(mapPOPodetails!=null){
+
+
                                     map.put("ipurorderid",mapPOPodetails.get("POID"));
+                                    //获取订单行的价格字段
+                                    getCost(itemMap,mapPOPodetails);
                                     //获取订单行的自定义项数据
                                     getcFree(itemMap,mapPOPodetails);
-                                    //回写入库数量到采购订单行
-                                    BigDecimal freceivedqty=getDecimalNew(String.valueOf(mapPOPodetails.get("freceivedqty"))).add(getDecimalNew(String.valueOf(itemMap.get("iQuantity"))));
+                                    itemMap.put("cWhCode",map.get("cWhCode"));//获取仓库 供回写现存量用
+                                    //回写到货数量到采购订单行
+                                    //如果是红字入库则相减
+                                    BigDecimal iReceivedQTY=new BigDecimal("0.0");
+                                    if(map.get("cVouchType").toString().equals("1")){
+                                        iReceivedQTY=getDecimalNew(String.valueOf(mapPOPodetails.get("iReceivedQTY"))).subtract(getDecimalNew(String.valueOf(itemMap.get("iQuantity"))));
+                                        //回写到现存量 如果不是调拨业务则入库单需要回写现存量 如果是调拨单 那么只要在调拨或者其他入库的时候回写现存量
+                                        if(iscVenCodeReceiver==false){
+                                            message=message+"第"+rowId+"行"+saveCurrentStock(itemMap,"2");
+                                        }
+                                    }else{//篮字则相加
+                                        iReceivedQTY=getDecimalNew(String.valueOf(mapPOPodetails.get("iReceivedQTY"))).add(getDecimalNew(String.valueOf(itemMap.get("iQuantity"))));
+                                        //回写到现存量 如果不是调拨业务则入库单需要回写现存量 如果是调拨单 那么只要在调拨或者其他入库的时候回写现存量
+                                        if(iscVenCodeReceiver==false){
+                                            saveCurrentStock(itemMap,"1");
+                                        }
+                                    }
                                     Map<String,Object> mapFreceivedqty=new HashMap<>();
-                                    mapFreceivedqty.put("freceivedqty",freceivedqty);//入库数量
+                                    mapFreceivedqty.put("iReceivedQTY",iReceivedQTY);//到货数量
                                     mapFreceivedqty.put("ID",rowmId);//订单行id
                                     //回写到采购订单对应行
                                     this.baseMapper.updatePodetailsfreceivedqty(mapFreceivedqty);
                                     //回写到现存量
-                                    itemMap.put("cWhCode",map.get("cWhCode"));//获取仓库
-                                    //回写到现存量
-                                    saveCurrentStock(itemMap);
+
+
 //                                        Integer isCount= this.baseMapper.getCurrentStockCount(itemMap);
 //                                        if(isCount!=null&&isCount>0){
 //
@@ -240,10 +278,10 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                                         message=message+saveAA_BatchProperty(map,itemMap,mapPOPodetails);
                                     }
                                 }else{
-                                    message=message+"第"+rowId+"未找到对应的采购订单行;";
+                                    message=message+"第"+rowId+"未找到对应的采购订单行;";
                                 }
                             }else{
-                                message=message+"第"+rowId+"缺少采购订单行id;";
+                                message=message+"第"+rowId+"缺少采购订单行id;";
                             }
                         }else{//委外入库
 
@@ -258,18 +296,33 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                                 //获取订单行数据
                                 Map<String,Object> mapOMMODetails=this.baseMapper.getOMMODetails(rowmId);
                                 if(mapOMMODetails!=null){
+                                    //获取订单行的价格字段
+                                    getCost(itemMap,mapOMMODetails);
                                     //获取订单的自定义数据
                                     getcFree(itemMap,mapOMMODetails);
+                                    itemMap.put("cWhCode",map.get("cWhCode"));//获取仓库
                                     //回写入库数量到委外订单行
-                                    BigDecimal freceivedqty=getDecimalNew(String.valueOf(mapOMMODetails.get("iReceivedQTY"))).add(getDecimalNew(String.valueOf(itemMap.get("iQuantity"))));
+                                    //如果是红字入库则相减
+                                    BigDecimal iReceivedQTY=new BigDecimal("0.0");
+                                    if(map.get("cVouchType").toString().equals("1")){
+                                        iReceivedQTY=getDecimalNew(String.valueOf(mapOMMODetails.get("iReceivedQTY"))).subtract(getDecimalNew(String.valueOf(itemMap.get("iQuantity"))));
+                                        //回写到现存量 如果不是调拨业务则入库单需要回写现存量 如果是调拨单 那么只要在调拨或者其他入库的时候回写现存量
+                                        if(iscVenCodeReceiver==false) {
+                                            message=message+"第"+rowId+"行"+saveCurrentStock(itemMap,"2");
+                                        }
+                                    }else{//蓝字则相加
+                                        iReceivedQTY=getDecimalNew(String.valueOf(mapOMMODetails.get("iReceivedQTY"))).add(getDecimalNew(String.valueOf(itemMap.get("iQuantity"))));
+                                        //回写到现存量 如果不是调拨业务则入库单需要回写现存量 如果是调拨单 那么只要在调拨或者其他入库的时候回写现存量
+                                        if(iscVenCodeReceiver==false) {
+                                            saveCurrentStock(itemMap,"1");
+                                        }
+                                    }
                                     Map<String,Object> mapFreceivedqty=new HashMap<>();
-                                    mapFreceivedqty.put("iReceivedQTY",freceivedqty);//入库数量
+                                    mapFreceivedqty.put("iReceivedQTY",iReceivedQTY);//入库数量
                                     mapFreceivedqty.put("ID",rowmId);//订单行id
                                     //回写到委外订单对应行
                                     this.baseMapper.updateOMMODetailsfreceivedqty(mapFreceivedqty);
-                                    //回写到现存量
-                                    itemMap.put("cWhCode",map.get("cWhCode"));//获取仓库
-                                    saveCurrentStock(itemMap);
+
 //                                        Integer isCount= this.baseMapper.getCurrentStockCount(itemMap);
 //                                        if(isCount!=null&&isCount>0){
 //                                            //修改现存量
@@ -306,51 +359,61 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                 }
                 this.baseMapper.saveRdRecord01One(map);
                 //调拨单
-                //判断接收方是否有只值 宁波森语 马菲羊 森语集团
-                if(map.get("cVenCodeReceiver")!=null&&!String.valueOf(map.get("cVenCodeReceiver")).equals("")){
-                    //根据接收方获取供应商信息
-                    Map<String,Object> mapVenCode= this.baseMapper.getWhCodeByVenCode(String.valueOf(map.get("cVenCodeReceiver")));
-                    if(mapVenCode!=null){
-                        String cVenAbbName=String.valueOf(mapVenCode.get("cVenAbbName"));//供应商简称
-                        //判断是否外部供应商  外部则进入下一波做调拨单 非则不做
-                        if(!cVenAbbName.equals("宁波森语")&&!cVenAbbName.equals("马菲羊")&&!cVenAbbName.equals("森语集团")){
-                            //保存调拨单
-                            saveTransVouch(map,itemList);
-                        }
-                    }else{
-                        throw new RuntimeException("未能找到接收方信息");
-                    }
+
+                if(iscVenCodeReceiver){
+                    //保存调拨单
+                    saveTransVouch(map,itemList);
                 }
+
             }
         }
     }
 
     //回写现存量
-    public void saveCurrentStock(Map<String,Object> itemMap){
-        //修改现存量
-        //查询SCM_ITEM是否存在
-        Map<String,Object> SCM_ITEMMap=this.baseMapper.getSCM_ITEM(itemMap);
-        String itemId="";
-        if(SCM_ITEMMap!=null){
-            //存在则进行获取id
-            itemId=String.valueOf(SCM_ITEMMap.get("Id"));
-        }else{//没找到则进行新增
-            itemId=oConvertUtils.addOne(getMaxId("Id","SCM_ITEM"));
+    public String saveCurrentStock(Map<String,Object> itemMap,String type){
+        String message="";
+        //现存量增加
+        if(type.equals("1")){
+            //修改现存量
+            //查询SCM_ITEM是否存在
+            Map<String,Object> SCM_ITEMMap=this.baseMapper.getSCM_ITEM(itemMap);
+            String itemId="";
+            if(SCM_ITEMMap!=null){
+                //存在则进行获取id
+                itemId=String.valueOf(SCM_ITEMMap.get("Id"));
+            }else{//没找到则进行新增
+                itemId=oConvertUtils.addOne(getMaxId("Id","SCM_ITEM"));
 //            itemMap.put("SCMITEMId",itemId);
-            this.baseMapper.saveSCM_ITEM(itemMap);
-        }
-        //查询现存量是否存在
+                this.baseMapper.saveSCM_ITEM(itemMap);
+            }
+            //查询现存量是否存在
 //                                            Map<String,Object> CurrentStockMap=this.baseMapper.getCurrentStock(itemMap);
-        Integer isCount= this.baseMapper.getCurrentStockCount(itemMap);
-        if(isCount!=null&&isCount>0){
-            //存在则修改
-            this.baseMapper.updateCurrentStock(itemMap);
-        }else{
-            //不存在则新增
-            itemMap.put("ItemId",itemId);
-            itemMap.put("currentStockAutoID",oConvertUtils.addOne(getMaxId("AutoID","CurrentStock")));
-            this.baseMapper.insertCurrentStock(itemMap);
+            Map<String,Object> currentStockMap= this.baseMapper.getCurrentStockCount(itemMap);
+            if(currentStockMap!=null){
+                //存在则修改
+                this.baseMapper.updateCurrentStock(itemMap);
+            }else{
+                //不存在则新增
+                itemMap.put("ItemId",itemId);
+                itemMap.put("currentStockAutoID",oConvertUtils.addOne(getMaxId("AutoID","CurrentStock")));
+                this.baseMapper.insertCurrentStock(itemMap);
+            }
+        }else if(type.equals("2")){
+            //现存量减少
+            //查询现存量是否存在
+            Map<String,Object> currentStockMap= this.baseMapper.getCurrentStockCount(itemMap);
+            if(currentStockMap!=null){
+                BigDecimal currentiQuantity=getDecimalNew(String.valueOf(currentStockMap.get("iQuantity")));
+                //小于则进行报错
+                if(currentiQuantity.doubleValue()<=0.0){
+                    message="现存量小于等于0不能被冲销";
+                }else{
+                    //存在则修改
+                    this.baseMapper.updateCurrentStockSubtract(itemMap);
+                }
+            }
         }
+        return message;
     }
 
     //新增AA_BatchProperty
@@ -409,6 +472,16 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
         itemMap.put("cFree8",setNull(mapPOPodetails.get("cFree8")));
         itemMap.put("cFree9",setNull(mapPOPodetails.get("cFree9")));
         itemMap.put("cFree10",setNull(mapPOPodetails.get("cFree10")));
+
+    }
+
+    //采购入库获取订单的价格相关字段
+    public void getCost(Map<String,Object> itemMap,Map<String,Object> mapPOPodetails){
+        itemMap.put("iOriTaxCost",mapPOPodetails.get("iTaxPrice"));//原币含税单价
+        itemMap.put("iOriCost",mapPOPodetails.get("iUnitPrice"));//原币无税单价
+        itemMap.put("iOriMoney",mapPOPodetails.get("iMoney"));//原币无税金额
+        itemMap.put("iTax",mapPOPodetails.get("iTax"));//税额
+        itemMap.put("ioriSum",mapPOPodetails.get("iSum"));//原币价税合计
     }
 
     //获取批次属性赋值
@@ -504,7 +577,7 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
         //获取主表最大ID
         transVouchMao.put("ID",oConvertUtils.addOne(getMaxId("ID","TransVouch")));
         //获取最大编码
-        transVouchMao.put("cTVCode",oConvertUtils.addOne(this.baseMapper.getMaxCode("cTVCode","TransVouch","dTVDate")));
+        transVouchMao.put("cTVCode",oConvertUtils.addOne(this.baseMapper.getMaxCode("cTVCode","TransVouch","dnmaketime")));
         //修改最大编码
         this.baseMapper.updateVoucherHistoryCNumber(oConvertUtils.maxNumber(String.valueOf(transVouchMao.get("cTVCode"))),"0304");
         //单据日期
@@ -666,6 +739,9 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                 getcFree(RdRecords09Map,transVouchsMap);
                 //获取批次属性
                 getcBatchProperty(RdRecords09Map,transVouchsMap);
+                //回写现存量
+//                RdRecords09Map.put("cWhCode",RdRecord09Map.get("cWhCode"));
+//                saveCurrentStock(RdRecords09Map,"2");
                 this.baseMapper.saveRdRecords09(RdRecords09Map);
             }
         }
@@ -702,6 +778,9 @@ public class PurchaseWarehousingServiceImpl extends ServiceImpl<PurchaseWarehous
                 getcFree(RdRecords08Map,transVouchsMap);
                 //获取批次属性
                 getcBatchProperty(RdRecords08Map,transVouchsMap);
+                //回写现存量
+                RdRecords08Map.put("cWhCode",RdRecord08Map.get("cWhCode"));
+                saveCurrentStock(RdRecords08Map,"1");
                 this.baseMapper.saveRdRecords08(RdRecords08Map);
             }
         }