diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java index 7b02a159..629ca585 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java @@ -164,10 +164,12 @@ public class AutoformulaServiceImpl implements AutoformulaService { JSONArray ivts = new JSONArray(); JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") .addParam("mater_ids",allmaterialId) + .addParam("product_material_id",material_id) + .addParam("set_type","01") .addParam("is_active",value_is_active) .addParam("quality_scode","02") .addParam("workorder_id",workorder_id) - .addParam("flag","22") + .addParam("flag","23") .process().getResultJSONArray(0); for(int j=0;j Z_sum = new AtomicReference<>(0.0); - AtomicReference Z_sum_per = new AtomicReference<>(0.0); - //计算不需要移库的添加剂(抑制剂) - yzj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = X22p*value/100.0; - - //累计各碳化钨中已含添加剂重量百分比 - Z_sum_per.set(Z_sum_per.get() + value/100.0); - //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); - } - }); - - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); - //X22p减=(产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已)/(1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量) - - double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get()); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty < 0){ - throw new BadRequestException("碳化钨配粉结果为负数,当前配粉无解!"); - } - double C = X22_jian + bom_ivt_qty*Z_sum_per.get(); - if(C < 0){ - throw new BadRequestException("补碳结果为负数,当前配粉无解!"); - }else if(C >= 0){ - bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); + AtomicReference Z_sum = new AtomicReference<>(0.0); + AtomicReference Z_sum_per = new AtomicReference<>(0.0); //计算不需要移库的添加剂(抑制剂) yzj_map.forEach((key,tjj_map_jo)->{ //获取添加剂id @@ -688,123 +648,323 @@ public class AutoformulaServiceImpl implements AutoformulaService { .process() .uniqueResult(0); if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); //质保书含量比 double value = tjj_finished.getDouble("value"); //当前含量重量 - double finished = bom_ivt_qty*value/100.0; + double finished = X22p*value/100.0; + + //累计各碳化钨中已含添加剂重量百分比 + Z_sum_per.set(Z_sum_per.get() + value/100.0); //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - yzj_map.put(tjj_material_id,tjj_map_jo); + Z_sum.set(Z_sum.get() + finished); } }); - //判断已含添加剂与需配添加剂大小 - yzj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty0){ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); + + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //X22p减=(产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已)/(1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量) + + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get()); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty < 0){ + throw new BadRequestException("碳化钨配粉结果为负数,当前配粉无解!"); } - - } - } - //大于等于2条库粗你明细时 - else{ - //最后一个为X22p - JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); - //倒数第二为X21p - JSONObject bomdlt_Cr3C2_X21p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-2); - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); - //该批次配粉重量 - double X22p = bomdlt_Cr3C2_X22p.getDouble("bom_ivt_qty"); - - double X22c = X22p*X22/100.0; - //获取碳含量 - JSONObject FactoryWarranty_X21 = bomdlts_plan_map.get(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); - //该批次含碳比 - double X21 = FactoryWarranty_X21.getDouble("is_tan"); - //该批次配粉重量 - double X21p = bomdlt_Cr3C2_X21p.getDouble("bom_ivt_qty"); - - double X21c = X21p*X21/100.0; - - boolean flag = true; - //设X21p减=0,解方程 - if(flag){ - AtomicReference Z_sum = new AtomicReference<>(0.0); - AtomicReference Z_sum_per = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;i= 0){ + bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); + //计算不需要移库的添加剂(抑制剂) yzj_map.forEach((key,tjj_map_jo)->{ //获取添加剂id String tjj_material_id = tjj_map_jo.getString("material_id"); JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) .addParam("item_material_id",tjj_material_id) .addParam("flag","5") .process() .uniqueResult(0); if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); //质保书含量比 double value = tjj_finished.getDouble("value"); //当前含量重量 - double finished = bom_ivt_qty_jo*value/100.0; - //累计各碳化钨中已含添加剂重量百分比 - if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ - Z_sum_per.set(Z_sum_per.get() + value/100.0); - } + double finished = bom_ivt_qty*value/100.0; //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); + tjj_map_jo.put("finished_qty",finished_qty+finished); + yzj_map.put(tjj_material_id,tjj_map_jo); } }); + //判断已含添加剂与需配添加剂大小 + yzj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + } + } - //X22p减=(产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已)/(1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量) - double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get()); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty<0){ - flag = false; - }else{ - //解得钨粉重量 - double C = X22_jian; + } + //大于等于2条库粗你明细时 + else{ + //最后一个为X22p + JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); + //倒数第二为X21p + JSONObject bomdlt_Cr3C2_X21p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-2); + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 + double X22p = bomdlt_Cr3C2_X22p.getDouble("bom_ivt_qty"); + + double X22c = X22p*X22/100.0; + //获取碳含量 + JSONObject FactoryWarranty_X21 = bomdlts_plan_map.get(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + //该批次含碳比 + double X21 = FactoryWarranty_X21.getDouble("is_tan"); + //该批次配粉重量 + double X21p = bomdlt_Cr3C2_X21p.getDouble("bom_ivt_qty"); + + double X21c = X21p*X21/100.0; + + boolean flag = true; + //设X21p减=0,解方程 + if(flag){ + AtomicReference Z_sum = new AtomicReference<>(0.0); + AtomicReference Z_sum_per = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量百分比 + if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ + Z_sum_per.set(Z_sum_per.get() + value/100.0); + } + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + //X22p减=(产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已)/(1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量) + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get()); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ + flag = false; + }else{ + //解得钨粉重量 + double C = X22_jian; + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = finalBom_ivt_qty_jo *value/100.0; + //累计各碳化钨中已含添加剂重量 + total_sum.set(total_sum.get()+finished); + } + }); + } + C = C + total_sum.get(); + if(C<0){ + flag = false; + }else if(C>=0){ + bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + } + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + yzj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + + //判断已含添加剂与需配添加剂大小 + yzj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + total_sum.set(total_sum.get()+C); + } + } + } + } + if(!flag){ + AtomicReference Z_sum = new AtomicReference<>(0.0); + AtomicReference Z22_sum_per = new AtomicReference<>(0.0); + AtomicReference Z21_sum_per = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量百分比 + if(stockrecord_id.equals(bomdlt_Cr3C2_X21p.getString("stockrecord_id"))){ + Z21_sum_per.set(Z21_sum_per.get() + value/100.0); + } + if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ + Z22_sum_per.set(Z22_sum_per.get() + value/100.0); + } + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + //设X22p减=X22p,解方程 + // X21p减=[产品碳平衡*(X11p+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量+Z已总+X22p)]/(1-X21碳含量) + //X21p减=[(CT1_weight+z_sum已-X22p含抑制剂总和)*产品碳平衡-( CT1-X22p* X22碳含量+X22p)-(z_sum已-X22p含抑制剂总和)]/(1-X21碳含量-X21p抑制剂总含量+X21p抑制剂总含量*产品碳平衡) + + double X21_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get()-Z22_sum_per.get()) - (CT1+X22p-X22p*X22c/100.0) -(Z_sum.get()-Z22_sum_per.get()))/(1-X21/100.0-Z21_sum_per.get() +Z21_sum_per.get()*(c_balance/100.0)); + + //更新碳化钨配粉重量 + double bom_ivt_qty = X21p-X21_jian; //统计除钨以外其他总重 AtomicReference total_sum = new AtomicReference<>(0.0); //循环碳化钨 @@ -813,6 +973,9 @@ public class AutoformulaServiceImpl implements AutoformulaService { String stockrecord_id = jo.getString("stockrecord_id"); double bom_ivt_qty_jo = jo.getDouble("bom_ivt_qty"); if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ + continue; + } + if(stockrecord_id.equals(bomdlt_Cr3C2_X21p.getString("stockrecord_id"))){ bom_ivt_qty_jo = bom_ivt_qty; } //计算不需要移库的添加剂 @@ -828,26 +991,29 @@ public class AutoformulaServiceImpl implements AutoformulaService { .process() .uniqueResult(0); if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); //质保书含量比 double value = tjj_finished.getDouble("value"); //当前含量重量 double finished = finalBom_ivt_qty_jo *value/100.0; //累计各碳化钨中已含添加剂重量 - total_sum.set(total_sum.get()+finished); + total_sum.set(total_sum.get() + finished); } }); } - C = C + total_sum.get(); + //解得钨粉重量 + double C = X22p + X21_jian+total_sum.get(); if(C<0){ - flag = false; + throw new BadRequestException("加碳粉为负数,当前配粉无解!"); }else if(C>=0){ - bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + if(bom_ivt_qty<0){ + throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); } + bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + } + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); //循环碳化钨 for(int i=0;i{ //需配添加剂重量 @@ -913,27 +1078,31 @@ public class AutoformulaServiceImpl implements AutoformulaService { C_weight.put("is_active","1"); C_weight.put("quality_scode","01"); cw_list.add(C_weight); - total_sum.set(total_sum.get()+C); } } } } - if(!flag){ - AtomicReference Z_sum = new AtomicReference<>(0.0); - AtomicReference Z22_sum_per = new AtomicReference<>(0.0); - AtomicReference Z21_sum_per = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;iCT2){ + if(bomdlts_Cr3C2.size()==1){//只配库存明细时 + //假设钨粉重量为W + JSONObject bomdlt_Cr3C2 = bomdlts_Cr3C2.getJSONObject(0); + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 + double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); + + AtomicReference Z_sum = new AtomicReference<>(0.0); + //计算不需要移库的添加剂(抑制剂) yzj_map.forEach((key,tjj_map_jo)->{ //获取添加剂id String tjj_material_id = tjj_map_jo.getString("material_id"); JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) .addParam("item_material_id",tjj_material_id) .addParam("flag","5") .process() @@ -942,325 +1111,21 @@ public class AutoformulaServiceImpl implements AutoformulaService { //质保书含量比 double value = tjj_finished.getDouble("value"); //当前含量重量 - double finished = bom_ivt_qty_jo*value/100.0; - //累计各碳化钨中已含添加剂重量百分比 - if(stockrecord_id.equals(bomdlt_Cr3C2_X21p.getString("stockrecord_id"))){ - Z21_sum_per.set(Z21_sum_per.get() + value/100.0); - } - if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ - Z22_sum_per.set(Z22_sum_per.get() + value/100.0); - } + double finished = X22p*value/100.0; //累计各碳化钨中已含添加剂重量 Z_sum.set(Z_sum.get() + finished); } }); - } - //设X22p减=X22p,解方程 - // X21p减=[产品碳平衡*(X11p+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量+Z已总+X22p)]/(1-X21碳含量) - //X21p减=[(CT1_weight+z_sum已-X22p含抑制剂总和)*产品碳平衡-( CT1-X22p* X22碳含量+X22p)-(z_sum已-X22p含抑制剂总和)]/(1-X21碳含量-X21p抑制剂总含量+X21p抑制剂总含量*产品碳平衡) - - double X21_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get()-Z22_sum_per.get()) - (CT1+X22p-X22p*X22c/100.0) -(Z_sum.get()-Z22_sum_per.get()))/(1-X21/100.0-Z21_sum_per.get() +Z21_sum_per.get()*(c_balance/100.0)); - - //更新碳化钨配粉重量 - double bom_ivt_qty = X21p-X21_jian; - //统计除钨以外其他总重 - AtomicReference total_sum = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = finalBom_ivt_qty_jo *value/100.0; - //累计各碳化钨中已含添加剂重量 - total_sum.set(total_sum.get() + finished); - } - }); - } - //解得钨粉重量 - double C = X22p + X21_jian+total_sum.get(); - if(C<0){ - throw new BadRequestException("加碳粉为负数,当前配粉无解!"); - }else if(C>=0){ - if(bom_ivt_qty<0){ - throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); - } - bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + // X21p减=[(X21p)* X21碳含量+软废含碳量-产品碳平衡*(X21p+软废碳化钨)]/X21碳含量 + //解得钨粉重量 + double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight)) / (X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + throw new BadRequestException("碳化钨为非正数,当前配粉无解!"); } - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*value/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - yzj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - //判断已含添加剂与需配添加剂大小 - yzj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty0){ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - } - } - } - } - }else - //需配钨粉 - if(CT1>CT2){ - if(bomdlts_Cr3C2.size()==1){//只配库存明细时 - //假设钨粉重量为W - JSONObject bomdlt_Cr3C2 = bomdlts_Cr3C2.getJSONObject(0); - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); - //该批次配粉重量 - double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); - - AtomicReference Z_sum = new AtomicReference<>(0.0); - //计算不需要移库的添加剂(抑制剂) - yzj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = X22p*value/100.0; - //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); - } - }); - // X21p减=[(X21p)* X21碳含量+软废含碳量-产品碳平衡*(X21p+软废碳化钨)]/X21碳含量 - //解得钨粉重量 - double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight)) / (X22/100.0); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty<=0){ - throw new BadRequestException("碳化钨为非正数,当前配粉无解!"); - } - bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); - //统计除钨以外其他总重 - AtomicReference total_sum = new AtomicReference<>(0.0); - - bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ - //需配添加剂重量 - double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); - total_sum.set(total_sum.get() + bom_ivt_qty_now); - }); - //计算不需要移库的添加剂 - yzj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty*value/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - yzj_map.put(tjj_material_id,tjj_map_jo); - } - }); - //判断已含添加剂与需配添加剂大小 - yzj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty0){ - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); - } - }else{//大于等于2条库存明细时 - //最后一个为X22p - JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); - //倒数第二为X21p - JSONObject bomdlt_Cr3C2_X21p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-2); - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); - //该批次配粉重量 - double X22p = bomdlt_Cr3C2_X22p.getDouble("bom_ivt_qty"); - - double X22c = X22p*X22/100.0; - //获取碳含量 - JSONObject FactoryWarranty_X21 = bomdlts_plan_map.get(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); - //该批次含碳比 - double X21 = FactoryWarranty_X21.getDouble("is_tan"); - //该批次配粉重量 - double X21p = bomdlt_Cr3C2_X21p.getDouble("bom_ivt_qty"); - - double X21c = X21p*X21/100.0; - - - AtomicReference Z_sum = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*value/100.0; - //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); - } - }); - } - - boolean flag = true; - //设X21p减=0,解方程 - if(flag){ - //X22p减 = [(X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p* X22碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X22碳含量 - double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight))/(X22/100.0); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty<0){ - flag = false; - }else{ - bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - } - + bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); //统计除钨以外其他总重 AtomicReference total_sum = new AtomicReference<>(0.0); @@ -1269,35 +1134,29 @@ public class AutoformulaServiceImpl implements AutoformulaService { double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); total_sum.set(total_sum.get() + bom_ivt_qty_now); }); - - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*value/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - yzj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } + //计算不需要移库的添加剂 + yzj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty*value/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + yzj_map.put(tjj_material_id,tjj_map_jo); + } + }); //判断已含添加剂与需配添加剂大小 yzj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -1318,11 +1177,10 @@ public class AutoformulaServiceImpl implements AutoformulaService { total_sum.set(total_sum.get() + need_qty-finished_qty); } }); - double W = new_qty - total_sum.get(); - /* if(W<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); - }*/ + /* if(W<0){ + throw new BadRequestException("加钨粉为负数,当前配粉无解!"); + }*/ if(W>0){ JSONObject W_weight = new JSONObject(); W_weight.put("formula_qty",W); @@ -1339,109 +1197,253 @@ public class AutoformulaServiceImpl implements AutoformulaService { W_weight.put("quality_scode","01"); cw_list.add(W_weight); } - } - } - if(!flag){ - //设X22p减=X22p,解方程 - //X21p减 =[( X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X21碳含量 - double X21_jian = ((CT1-X22c) - (c_balance/100.0)*(CT1_weight))/(X21/100.0); - if(X21_jian<0){ - throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); - } - //更新碳化钨配粉重量 - double bom_ivt_qty = X21p-X21_jian; - bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); - if(bom_ivt_qty<0){ - throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); - } - bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); - } - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + }else{//大于等于2条库存明细时 + //最后一个为X22p + JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); + //倒数第二为X21p + JSONObject bomdlt_Cr3C2_X21p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-2); + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 + double X22p = bomdlt_Cr3C2_X22p.getDouble("bom_ivt_qty"); + + double X22c = X22p*X22/100.0; + //获取碳含量 + JSONObject FactoryWarranty_X21 = bomdlts_plan_map.get(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + //该批次含碳比 + double X21 = FactoryWarranty_X21.getDouble("is_tan"); + //该批次配粉重量 + double X21p = bomdlt_Cr3C2_X21p.getDouble("bom_ivt_qty"); + + double X21c = X21p*X21/100.0; - //统计除钨以外其他总重 - AtomicReference total_sum = new AtomicReference<>(0.0); - - bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ - //需配添加剂重量 - double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); - total_sum.set(total_sum.get() + bom_ivt_qty_now); - }); - - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*value/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - yzj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - //判断已含添加剂与需配添加剂大小 - yzj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty Z_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); } - }); - double W = new_qty - total_sum.get(); + boolean flag = true; + //设X21p减=0,解方程 + if(flag){ + //X22p减 = [(X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p* X22碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X22碳含量 + double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight))/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ + flag = false; + }else{ + bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + } + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + yzj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + yzj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } + } + } + if(!flag){ + //设X22p减=X22p,解方程 + //X21p减 =[( X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X21碳含量 + double X21_jian = ((CT1-X22c) - (c_balance/100.0)*(CT1_weight))/(X21/100.0); + if(X21_jian<0){ + throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); + } + //更新碳化钨配粉重量 + double bom_ivt_qty = X21p-X21_jian; + bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); + if(bom_ivt_qty<0){ + throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); + } + bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + } + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + yzj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + yzj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); + if(W>0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } + } } } - } - } //3.计算成型剂 JSONArray bomdlts2 = WQL.getWO("QPF_AUTOFORMULA01") .addParam("material_id",material_id) @@ -1607,10 +1609,12 @@ public class AutoformulaServiceImpl implements AutoformulaService { for(int i=0;i Z_sum = new AtomicReference<>(0.0); - AtomicReference Z_sum_per = new AtomicReference<>(0.0); - //计算不需要移库的添加剂(抑制剂) - tjj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double tjj_finished_value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = X22p*tjj_finished_value/100.0; - - //累计各碳化钨中已含添加剂重量百分比 - Z_sum_per.set(Z_sum_per.get() + tjj_finished_value/100.0); - //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); - } - }); - //X22p减=(产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已)/(1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量) - - double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get()); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty < 0){ - throw new BadRequestException("碳化钨配粉结果为负数,当前配粉无解!"); - } - double C = X22_jian + bom_ivt_qty*Z_sum_per.get(); - if(C < 0){ - throw new BadRequestException("补碳结果为负数,当前配粉无解!"); - } - bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); - //计算不需要移库的添加剂 - tjj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - - if(C>0){ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //碳化钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - } - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty Z_sum = new AtomicReference<>(0.0); AtomicReference Z_sum_per = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double tjj_finished_value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*tjj_finished_value/100.0; - //累计各碳化钨中已含添加剂重量百分比 - if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ - Z_sum_per.set(Z_sum_per.get() + tjj_finished_value/100.0); - } - //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); - } - }); - } + //计算不需要移库的添加剂(抑制剂) + tjj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double tjj_finished_value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = X22p*tjj_finished_value/100.0; + + //累计各碳化钨中已含添加剂重量百分比 + Z_sum_per.set(Z_sum_per.get() + tjj_finished_value/100.0); + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); //X22p减=(产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已)/(1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量) + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get()); //更新碳化钨配粉重量 double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty<0){ - flag = false; - }else{ - //解得钨粉重量 - double C = X22_jian; + if(bom_ivt_qty < 0){ + throw new BadRequestException("碳化钨配粉结果为负数,当前配粉无解!"); + } + double C = X22_jian + bom_ivt_qty*Z_sum_per.get(); + if(C < 0){ + throw new BadRequestException("补碳结果为负数,当前配粉无解!"); + } + bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); + //计算不需要移库的添加剂 + tjj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //碳化钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + } + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty Z_sum = new AtomicReference<>(0.0); + AtomicReference Z_sum_per = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double tjj_finished_value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*tjj_finished_value/100.0; + //累计各碳化钨中已含添加剂重量百分比 + if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ + Z_sum_per.set(Z_sum_per.get() + tjj_finished_value/100.0); + } + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + //X22p减=(产品碳平衡*(Z_sum已+CT1_weight)-CT1-Z_sum已)/(1- X22碳含量- X22Z1含量+产品碳平衡*X22Z1含量) + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-CT1-Z_sum.get())/(1-X22/100.0-Z_sum_per.get()+(c_balance/100.0)*Z_sum_per.get()); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ + flag = false; + }else{ + //解得钨粉重量 + double C = X22_jian; + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double tjj_finished_value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = finalBom_ivt_qty_jo *tjj_finished_value/100.0; + //累计各碳化钨中已含添加剂重量 + total_sum.set(total_sum.get()+finished); + } + }); + } + C = C + total_sum.get(); + if(C<0){ + flag = false; + }else if(C>=0){ + bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + } + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //碳化钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + total_sum.set(total_sum.get() + C); + } + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty Z_sum = new AtomicReference<>(0.0); + AtomicReference Z22_sum_per = new AtomicReference<>(0.0); + AtomicReference Z21_sum_per = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double tjj_finished_value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*tjj_finished_value/100.0; + //累计各碳化钨中已含添加剂重量百分比 + if(stockrecord_id.equals(bomdlt_Cr3C2_X21p.getString("stockrecord_id"))){ + Z21_sum_per.set(Z21_sum_per.get() + tjj_finished_value/100.0); + } + if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ + Z22_sum_per.set(Z22_sum_per.get() + tjj_finished_value/100.0); + } + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + //设X22p减=X22p,解方程 + //X21p减=[(CT1_weight+z_sum已-X22p含抑制剂总和)*产品碳平衡-( CT1-X22p* X22碳含量+X22p)-(z_sum已-X22p含抑制剂总和)]/(1-X21碳含量-X21p抑制剂总含量+X21p抑制剂总含量*产品碳平衡) + + double X21_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get()-Z22_sum_per.get()) - (CT1+X22p-X22p*X22c/100.0) -(Z_sum.get()-Z22_sum_per.get()))/(1-X21/100.0-Z21_sum_per.get() +Z21_sum_per.get()*(c_balance/100.0)); + + //更新碳化钨配粉重量 + double bom_ivt_qty = X21p-X21_jian; //统计除钨以外其他总重 AtomicReference total_sum = new AtomicReference<>(0.0); //循环碳化钨 @@ -2102,6 +2260,9 @@ public class AutoformulaServiceImpl implements AutoformulaService { String stockrecord_id = jo.getString("stockrecord_id"); double bom_ivt_qty_jo = jo.getDouble("bom_ivt_qty"); if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ + continue; + } + if(stockrecord_id.equals(bomdlt_Cr3C2_X21p.getString("stockrecord_id"))){ bom_ivt_qty_jo = bom_ivt_qty; } //计算不需要移库的添加剂 @@ -2122,19 +2283,24 @@ public class AutoformulaServiceImpl implements AutoformulaService { //当前含量重量 double finished = finalBom_ivt_qty_jo *tjj_finished_value/100.0; //累计各碳化钨中已含添加剂重量 - total_sum.set(total_sum.get()+finished); + total_sum.set(total_sum.get() + finished); } }); } - C = C + total_sum.get(); + //解得钨粉重量 + double C = X22p + X21_jian+total_sum.get(); if(C<0){ - flag = false; + throw new BadRequestException("加碳粉为负数,当前配粉无解!"); }else if(C>=0){ - bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + if(bom_ivt_qty<0){ + throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); } + bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + } + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); //循环碳化钨 for(int i=0;i{ @@ -2204,345 +2369,50 @@ public class AutoformulaServiceImpl implements AutoformulaService { } } } - if(!flag){ - AtomicReference Z_sum = new AtomicReference<>(0.0); - AtomicReference Z22_sum_per = new AtomicReference<>(0.0); - AtomicReference Z21_sum_per = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;iCT2){ + //只配库存明细时 + if(bomdlts_Cr3C2.size()==1){ + //假设钨粉重量为W + JSONObject bomdlt_Cr3C2 = bomdlts_Cr3C2.getJSONObject(0); + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 + double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); + AtomicReference Z_sum = new AtomicReference<>(0.0); + //计算不需要移库的添加剂(抑制剂) tjj_map.forEach((key,tjj_map_jo)->{ //获取添加剂id String tjj_material_id = tjj_map_jo.getString("material_id"); JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) .addParam("item_material_id",tjj_material_id) .addParam("flag","5") .process() .uniqueResult(0); if(tjj_finished!=null){ //质保书含量比 - double tjj_finished_value = tjj_finished.getDouble("value"); + double value_jo = tjj_finished.getDouble("value"); //当前含量重量 - double finished = bom_ivt_qty_jo*tjj_finished_value/100.0; - //累计各碳化钨中已含添加剂重量百分比 - if(stockrecord_id.equals(bomdlt_Cr3C2_X21p.getString("stockrecord_id"))){ - Z21_sum_per.set(Z21_sum_per.get() + tjj_finished_value/100.0); - } - if(stockrecord_id.equals(bomdlt_Cr3C2_X22p.getString("stockrecord_id"))){ - Z22_sum_per.set(Z22_sum_per.get() + tjj_finished_value/100.0); - } + double finished = X22p*value_jo/100.0; //累计各碳化钨中已含添加剂重量 Z_sum.set(Z_sum.get() + finished); } }); - } - //设X22p减=X22p,解方程 - //X21p减=[(CT1_weight+z_sum已-X22p含抑制剂总和)*产品碳平衡-( CT1-X22p* X22碳含量+X22p)-(z_sum已-X22p含抑制剂总和)]/(1-X21碳含量-X21p抑制剂总含量+X21p抑制剂总含量*产品碳平衡) - - double X21_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get()-Z22_sum_per.get()) - (CT1+X22p-X22p*X22c/100.0) -(Z_sum.get()-Z22_sum_per.get()))/(1-X21/100.0-Z21_sum_per.get() +Z21_sum_per.get()*(c_balance/100.0)); - - //更新碳化钨配粉重量 - double bom_ivt_qty = X21p-X21_jian; - //统计除钨以外其他总重 - AtomicReference total_sum = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double tjj_finished_value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = finalBom_ivt_qty_jo *tjj_finished_value/100.0; - //累计各碳化钨中已含添加剂重量 - total_sum.set(total_sum.get() + finished); - } - }); - } - //解得钨粉重量 - double C = X22p + X21_jian+total_sum.get(); - if(C<0){ - throw new BadRequestException("加碳粉为负数,当前配粉无解!"); - }else if(C>=0){ - if(bom_ivt_qty<0){ - throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); - } - bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + // X21p减= [(X21p)* X21碳含量+软废含碳量-产品碳平衡*(X21p+软废碳化钨)]/X21碳含量 + //解得钨粉重量 + double X22_jian =(CT1 - (c_balance/100.0)*(CT1_weight))/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); - } - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - - if(C>0){ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //碳化钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - } - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qtyCT2){ - //只配库存明细时 - if(bomdlts_Cr3C2.size()==1){ - //假设钨粉重量为W - JSONObject bomdlt_Cr3C2 = bomdlts_Cr3C2.getJSONObject(0); - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); - //该批次配粉重量 - double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); - AtomicReference Z_sum = new AtomicReference<>(0.0); - //计算不需要移库的添加剂(抑制剂) - tjj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double value_jo = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = X22p*value_jo/100.0; - //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); - } - }); - // X21p减= [(X21p)* X21碳含量+软废含碳量-产品碳平衡*(X21p+软废碳化钨)]/X21碳含量 - //解得钨粉重量 - double X22_jian =(CT1 - (c_balance/100.0)*(CT1_weight))/(X22/100.0); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty<=0){ - throw new BadRequestException("碳化钨为非正数,当前配粉无解!"); - } - bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); - - //统计除钨以外其他总重 - AtomicReference total_sum = new AtomicReference<>(0.0); - - bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ - //需配添加剂重量 - double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); - total_sum.set(total_sum.get() + bom_ivt_qty_now); - }); - - //计算不需要移库的添加剂 - tjj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty0){ - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); - } - }else{//大于等于2条库粗你明细时 - //最后一个为X22p - JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); - //倒数第二为X21p - JSONObject bomdlt_Cr3C2_X21p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-2); - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); - //该批次配粉重量 - double X22p = bomdlt_Cr3C2_X22p.getDouble("bom_ivt_qty"); - - double X22c = X22p*X22/100.0; - //获取碳含量 - JSONObject FactoryWarranty_X21 = bomdlts_plan_map.get(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); - //该批次含碳比 - double X21 = FactoryWarranty_X21.getDouble("is_tan"); - //该批次配粉重量 - double X21p = bomdlt_Cr3C2_X21p.getDouble("bom_ivt_qty"); - - double X21c = X21p*X21/100.0; - - AtomicReference Z_sum = new AtomicReference<>(0.0); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //质保书含量比 - double value_jo = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*value_jo/100.0; - //累计各碳化钨中已含添加剂重量 - Z_sum.set(Z_sum.get() + finished); - } - }); - } - - boolean flag = true; - //设X21p减=0,解方程 - if(flag){ - //X22p减 = [(X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p* X22碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X22碳含量 - double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight))/(X22/100.0); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-X22_jian; - if(bom_ivt_qty<0){ - flag = false; - }else{ - bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + throw new BadRequestException("碳化钨为非正数,当前配粉无解!"); } + bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); //统计除钨以外其他总重 AtomicReference total_sum = new AtomicReference<>(0.0); @@ -2552,34 +2422,30 @@ public class AutoformulaServiceImpl implements AutoformulaService { double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); total_sum.set(total_sum.get() + bom_ivt_qty_now); }); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } + + //计算不需要移库的添加剂 + tjj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); //判断已含添加剂与需配添加剂大小 tjj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -2617,104 +2483,242 @@ public class AutoformulaServiceImpl implements AutoformulaService { W_weight.put("quality_scode","01"); cw_list.add(W_weight); } - } - } - if(!flag){ - //设X22p减=X22p,解方程 - //X21p减 =[( X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X21碳含量 - double X21_jian = ((CT1-X22c) - (c_balance/100.0)*(CT1_weight))/(X21/100.0); - if(X21_jian<0){ - throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); - } - //更新碳化钨配粉重量 - double bom_ivt_qty = X21p-X21_jian; - bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); - if(bom_ivt_qty<0){ - throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); - } - bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); - } - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + }else{//大于等于2条库粗你明细时 + //最后一个为X22p + JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); + //倒数第二为X21p + JSONObject bomdlt_Cr3C2_X21p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-2); + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 + double X22p = bomdlt_Cr3C2_X22p.getDouble("bom_ivt_qty"); - //统计除钨以外其他总重 - AtomicReference total_sum = new AtomicReference<>(0.0); + double X22c = X22p*X22/100.0; + //获取碳含量 + JSONObject FactoryWarranty_X21 = bomdlts_plan_map.get(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + //该批次含碳比 + double X21 = FactoryWarranty_X21.getDouble("is_tan"); + //该批次配粉重量 + double X21p = bomdlt_Cr3C2_X21p.getDouble("bom_ivt_qty"); - bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ - //需配添加剂重量 - double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); - total_sum.set(total_sum.get() + bom_ivt_qty_now); - }); + double X21c = X21p*X21/100.0; - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty Z_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value_jo = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value_jo/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + + boolean flag = true; + //设X21p减=0,解方程 + if(flag){ + //X22p减 = [(X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p* X22碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X22碳含量 + double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight))/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ + flag = false; + }else{ + bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + } + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } + } + } + if(!flag){ + //设X22p减=X22p,解方程 + //X21p减 =[( X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X21碳含量 + double X21_jian = ((CT1-X22c) - (c_balance/100.0)*(CT1_weight))/(X21/100.0); + if(X21_jian<0){ + throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); + } + //更新碳化钨配粉重量 + double bom_ivt_qty = X21p-X21_jian; + bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); + if(bom_ivt_qty<0){ + throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); + } + bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + } + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } } - }); - double W = new_qty - total_sum.get(); - if(W>0){ - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); } } - } - } //3.计算成型剂 //若为二次投料 if("1".equals(is_again_put)){ @@ -2935,9 +2939,11 @@ public class AutoformulaServiceImpl implements AutoformulaService { JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") .addParam("mater_ids",allmaterialId) .addParam("is_active",value_is_active) + .addParam("product_material_id",material_id) + .addParam("set_type","02") .addParam("quality_scode","02") .addParam("workorder_id",workorder_id) - .addParam("flag","22") + .addParam("flag","23") .process().getResultJSONArray(0); for(int j=0;j0){ - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",NumberUtil.round(Wp,6).doubleValue()); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); + //B、若有软废,先加钨Wp=桶重量 - (R1p*R1纯粉系数+ R2p*R2纯粉系数…) - (Y1p+X1p+X2p…) + //只配库存明细时 + if(rf_list.size()!=0){ + double W = net_qty; + //桶重量 - (R1p*R1纯粉系数+ R2p*R2纯粉系数…) + for(int i=0;i0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",NumberUtil.round(Wp,6).doubleValue()); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } - if(Cp>0){ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",Cp); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - } - }else{ - //若Cp>Wp - //解方程组 - //获取最后一个配粉软废R3p - JSONObject R3p = rf_list.getJSONObject(rf_list.size()-1); - //获取倒数第二个配粉软废R2p - JSONObject R2p = new JSONObject(); - if(rf_list.size() > 1){ - R2p = rf_list.getJSONObject(rf_list.size()-2); - } - //获取R3p软废Bom - JSONArray rf3_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",R3p.getString("material_id")) - .addParam("is_need_manage","1") - .addParam("flag","1") - .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) - .process().getResultJSONArray(0); - //获取R2p软废Bom - JSONArray rf2_bomdlts = new JSONArray(); - if(rf_list.size() > 1){ - rf2_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",R2p.getString("material_id")) + if(Cp>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",Cp); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + } + }else{ + //若Cp>Wp + //解方程组 + //获取最后一个配粉软废R3p + JSONObject R3p = rf_list.getJSONObject(rf_list.size()-1); + //获取倒数第二个配粉软废R2p + JSONObject R2p = new JSONObject(); + if(rf_list.size() > 1){ + R2p = rf_list.getJSONObject(rf_list.size()-2); + } + //获取R3p软废Bom + JSONArray rf3_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",R3p.getString("material_id")) .addParam("is_need_manage","1") .addParam("flag","1") .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) .process().getResultJSONArray(0); - } - //获取成品Bom - JSONArray cp_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",material_id) - .addParam("is_need_manage","1") - .addParam("flag","1") - .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) - .process().getResultJSONArray(0); - //软废rf2_bomdlts 对应map - HashMap rf2_bomdlts_map = new HashMap(); - //软废rf3_bomdlts 对应map - HashMap rf3_bomdlts_map = new HashMap(); - //成品cp_bomdlts 对应map - HashMap cp_bomdlts_map = new HashMap(); - //并集map - HashMap bj_bomdlts_map = new HashMap(); - for(int i=0;i 1){ + rf2_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",R2p.getString("material_id")) + .addParam("is_need_manage","1") + .addParam("flag","1") + .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) + .process().getResultJSONArray(0); } - } - for(int i=0;i sum_YZ = new AtomicReference<>(0.0); - //计算Y1含量+Z1含量+Z2含量之和 - bj_bomdlts_map.forEach((key,bj_bomdlt)->{ - //大于等于为共有 - if(bj_bomdlt>=2){ - //获取成品当前bomdtl - JSONObject now_bomdtl = bomdlts_need_map.get(key); - //获取需配重量 - double Y1p = now_bomdtl.getDouble("need_qty"); - if(rf3_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate")/100.0; - sum_YZ.set(sum_YZ.get() + standard_rate); - } + //获取成品Bom + JSONArray cp_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",material_id) + .addParam("is_need_manage","1") + .addParam("flag","1") + .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) + .process().getResultJSONArray(0); + //软废rf2_bomdlts 对应map + HashMap rf2_bomdlts_map = new HashMap(); + //软废rf3_bomdlts 对应map + HashMap rf3_bomdlts_map = new HashMap(); + //成品cp_bomdlts 对应map + HashMap cp_bomdlts_map = new HashMap(); + //并集map + HashMap bj_bomdlts_map = new HashMap(); + for(int i=0;i{ + } + for(int i=0;i sum_YZ = new AtomicReference<>(0.0); + //计算Y1含量+Z1含量+Z2含量之和 + bj_bomdlts_map.forEach((key,bj_bomdlt)->{ //大于等于为共有 if(bj_bomdlt>=2){ //获取成品当前bomdtl @@ -3867,442 +3843,474 @@ public class AutoformulaServiceImpl implements AutoformulaService { JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); //获取软废Y1含量 double standard_rate = rf_bomdtl.getDouble("standard_rate")/100.0; - //Y1补=R3p减*Y1含量 - double Y1_bu = finalR3p_jian *standard_rate; - //Y12p=Y12p+Y1补 - Y1p = Y1p + Y1_bu; - now_bomdtl.put("formula_qty",Y1p); - now_bomdtl.put("need_qty",Y1p); - now_bomdtl.put("is_flag","-1"); - bomdlts_need_map.put(key,now_bomdtl); + sum_YZ.set(sum_YZ.get() + standard_rate); } } }); - // R3p=R3p-R3p减/ R3纯粉系数 - double r3_formula_qty = R3p.getDouble("formula_qty"); - r3_formula_qty = NumberUtil.round(r3_formula_qty - R3p_jian/(R3p.getDouble("net_rate")/100.0),6).doubleValue(); - R3p.put("formula_qty",r3_formula_qty); - rf_map.put(R3p.getString("stockrecord_id"),R3p); - if(r3_formula_qty<=0){ - rf_map.remove(R3p.getString("stockrecord_id")); - } - if(C_bu>0){ - //Wp=Wp+W补 - Cp = Cp + C_bu; - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",Cp); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - } - } - } - //R3p减=R3p - if(!flag){ - //R3p减 - double R3p_jian = R3p.getDouble("formula_qty"); - //bj_bomdlts_map中所有含量和 - AtomicReference sum_he = new AtomicReference<>(0.0); - //bj_bomdlts_map中所有含量*R3p - AtomicReference sum_he_R3p = new AtomicReference<>(0.0); - //计算非碳化钨需补重量 - bj_bomdlts_map.forEach((key,bj_bomdlt)->{ - //大于等于为共有 - if(bj_bomdlt>=2){ - //获取成品当前bomdtl - JSONObject now_bomdtl = bomdlts_need_map.get(key); - //获取需配重量 - double Y1p = now_bomdtl.getDouble("need_qty"); - if(rf3_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate")/100.0; - sum_he.set(sum_he.get() + standard_rate); - //Y1补=R3p减*Y1含量 - double Y1_bu = R3p.getDouble("formula_qty") * standard_rate; - sum_he_R3p.set(sum_he_R3p.get() + Y1_bu); + // R3p减=C缺/[1-(R3的bom碳化钨含量*R3碳平衡+Y1含量+Z1含量+Z2含量)] + double R3p_jian = C_que/(1.0-(rf3_Cr3C2*is_tan3+sum_YZ.get())); + + R3p_jian = NumberUtil.round(R3p_jian,6).doubleValue(); + + //C补=R3p减*R3的bom碳化钨含量*R3碳平衡+C缺 + double C_bu = R3p_jian*rf3_Cr3C2*is_tan3+C_que; + if(C_bu<=0) { + if (rf_list.size() == 1) { + throw new BadRequestException("无解!"); + } else { + flag = false;//进入设R3p减=R3p,解方程 + } + }else{ + //计算非碳化钨需补重量 + double finalR3p_jian = R3p_jian; + bj_bomdlts_map.forEach((key, bj_bomdlt)->{ + //大于等于为共有 + if(bj_bomdlt>=2){ + //获取成品当前bomdtl + JSONObject now_bomdtl = bomdlts_need_map.get(key); + //获取需配重量 + double Y1p = now_bomdtl.getDouble("need_qty"); + if(rf3_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate")/100.0; + //Y1补=R3p减*Y1含量 + double Y1_bu = finalR3p_jian *standard_rate; + //Y12p=Y12p+Y1补 + Y1p = Y1p + Y1_bu; + now_bomdtl.put("formula_qty",Y1p); + now_bomdtl.put("need_qty",Y1p); + now_bomdtl.put("is_flag","-1"); + bomdlts_need_map.put(key,now_bomdtl); + } + } + }); + // R3p=R3p-R3p减/ R3纯粉系数 + double r3_formula_qty = R3p.getDouble("formula_qty"); + r3_formula_qty = NumberUtil.round(r3_formula_qty - R3p_jian/(R3p.getDouble("net_rate")/100.0),6).doubleValue(); + R3p.put("formula_qty",r3_formula_qty); + rf_map.put(R3p.getString("stockrecord_id"),R3p); + if(r3_formula_qty<=0){ + rf_map.remove(R3p.getString("stockrecord_id")); + } + if(C_bu>0){ + //Wp=Wp+W补 + Cp = Cp + C_bu; + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",Cp); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); } } - }); - //除数 - double sub1 = R3p_jian*rf3_Cr3C2*is_tan3+C_que+ sum_he_R3p.get(); - //被除数 - double sub2 = 1.0 - (sum_he.get() + rf2_Cr3C2*is_tan2); - /** - * R2p减 = - * (R3p*R3的bom碳化钨含量*R3碳平衡 + C缺+ R3p*Y1含量 + R3p*Z1含量 + R3p*Z2含量 - R3p)/ - * (1-(Z2含量+Y1含量+Z1含量+R2的bom碳化钨含量*R2碳平衡)) - */ - double R2p_jian = sub1/sub2; - //计算非碳化钨需补重量 - bj_bomdlts_map.forEach((key,bj_bomdlt)->{ - //大于等于为共有 - if(bj_bomdlt>=2){ - //获取成品当前bomdtl - JSONObject now_bomdtl = bomdlts_need_map.get(key); - //获取需配重量 - double Y1p = now_bomdtl.getDouble("need_qty"); - if(rf3_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate"); - //Y1补=R3p减*Y1含量 - double Y1_bu = R3p_jian *(standard_rate/100.0); - //Y12p=Y12p+Y1补 - Y1p = Y1p + Y1_bu; + } + //R3p减=R3p + if(!flag){ + //R3p减 + double R3p_jian = R3p.getDouble("formula_qty"); + //bj_bomdlts_map中所有含量和 + AtomicReference sum_he = new AtomicReference<>(0.0); + //bj_bomdlts_map中所有含量*R3p + AtomicReference sum_he_R3p = new AtomicReference<>(0.0); + //计算非碳化钨需补重量 + bj_bomdlts_map.forEach((key,bj_bomdlt)->{ + //大于等于为共有 + if(bj_bomdlt>=2){ + //获取成品当前bomdtl + JSONObject now_bomdtl = bomdlts_need_map.get(key); + //获取需配重量 + double Y1p = now_bomdtl.getDouble("need_qty"); + if(rf3_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate")/100.0; + sum_he.set(sum_he.get() + standard_rate); + //Y1补=R3p减*Y1含量 + double Y1_bu = R3p.getDouble("formula_qty") * standard_rate; + sum_he_R3p.set(sum_he_R3p.get() + Y1_bu); + } } + }); + //除数 + double sub1 = R3p_jian*rf3_Cr3C2*is_tan3+C_que+ sum_he_R3p.get(); + //被除数 + double sub2 = 1.0 - (sum_he.get() + rf2_Cr3C2*is_tan2); + /** + * R2p减 = + * (R3p*R3的bom碳化钨含量*R3碳平衡 + C缺+ R3p*Y1含量 + R3p*Z1含量 + R3p*Z2含量 - R3p)/ + * (1-(Z2含量+Y1含量+Z1含量+R2的bom碳化钨含量*R2碳平衡)) + */ + double R2p_jian = sub1/sub2; + //计算非碳化钨需补重量 + bj_bomdlts_map.forEach((key,bj_bomdlt)->{ + //大于等于为共有 + if(bj_bomdlt>=2){ + //获取成品当前bomdtl + JSONObject now_bomdtl = bomdlts_need_map.get(key); + //获取需配重量 + double Y1p = now_bomdtl.getDouble("need_qty"); + if(rf3_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate"); + //Y1补=R3p减*Y1含量 + double Y1_bu = R3p_jian *(standard_rate/100.0); + //Y12p=Y12p+Y1补 + Y1p = Y1p + Y1_bu; + } - if(rf2_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf2_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate"); - //Y1补=R3p减*Y1含量 - double Y1_bu = R2p_jian *(standard_rate/100.0); - //Y12p=Y12p+Y1补 - Y1p = Y1p + Y1_bu; - } - now_bomdtl.put("formula_qty",Y1p); - now_bomdtl.put("need_qty",Y1p); - now_bomdtl.put("is_flag","-1"); - bomdlts_need_map.put(key,now_bomdtl); - } - }); - // R3p=R3p-R3p减/ R3纯粉系数 - double r3_formula_qty = R3p.getDouble("formula_qty"); - r3_formula_qty = NumberUtil.round(r3_formula_qty - r3_formula_qty/(R3p.getDouble("net_rate")/100.0),6).doubleValue(); - R3p.put("formula_qty",r3_formula_qty); - rf_map.put(R3p.getString("stockrecord_id"),R3p); - if(r3_formula_qty<=0){ - rf_map.remove(R3p.getString("stockrecord_id")); - } - // R2p=R2p-R2p减/ R2纯粉系数 - double r2_formula_qty = R2p.getDouble("formula_qty"); - r2_formula_qty = NumberUtil.round(r2_formula_qty - R2p_jian/(R2p.getDouble("net_rate")/100.0),6).doubleValue(); - R2p.put("formula_qty",r2_formula_qty); - rf_map.put(R2p.getString("stockrecord_id"),R2p); - if(r2_formula_qty<=0){ - rf_map.remove(R2p.getString("stockrecord_id")); - } - //C补=R3p减*R3的bom碳化钨含量*R3碳平衡+ R2p减*R2的bom碳化钨含量*R2碳平衡+C缺 - double C_bu = R3p_jian*rf3_Cr3C2*is_tan3 + R2p_jian*rf2_Cr3C2*is_tan2 + C_que; - //W补= R3p减*R3的bom碳化钨含量 - if(C_bu<=0) { - throw new BadRequestException("无解!"); - }else{ - if(C_bu>0){ - //Wp=Wp+W补 - Cp = Cp + C_bu; - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",Cp); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - } - } - } - } - }else{ - throw new BadRequestException("满足条件的软废为0,请按新料模式配粉!"); - } - - }else - //需配钨粉 - if(CT1>CT2){ - //B、若有软废,先加钨Wp=桶重量 - (R1p*R1纯粉系数+ R2p*R2纯粉系数…) - (Y1p+X1p+X2p…) - if(rf_list.size()!=0){ - double W = net_qty; - //桶重量 - (R1p*R1纯粉系数+ R2p*R2纯粉系数…) - for(int i=0;i 1){ - R2p = rf_list.getJSONObject(rf_list.size()-2); - } - //获取R3p软废Bom - JSONArray rf3_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",R3p.getString("material_id")) - .addParam("is_need_manage","1") - .addParam("flag","1") - .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) - .process().getResultJSONArray(0); - //获取R2p软废Bom - JSONArray rf2_bomdlts = new JSONArray(); - if(rf_list.size() > 1){ - rf2_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",R2p.getString("material_id")) - .addParam("is_need_manage","1") - .addParam("flag","1") - .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) - .process().getResultJSONArray(0); - } - //获取成品Bom - JSONArray cp_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",material_id) - .addParam("is_need_manage","1") - .addParam("flag","1") - .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) - .process().getResultJSONArray(0); - //软废rf2_bomdlts 对应map - HashMap rf2_bomdlts_map = new HashMap(); - //软废rf3_bomdlts 对应map - HashMap rf3_bomdlts_map = new HashMap(); - //成品cp_bomdlts 对应map - HashMap cp_bomdlts_map = new HashMap(); - //并集map - HashMap bj_bomdlts_map = new HashMap(); - for(int i=0;i sum_bu = new AtomicReference<>(0.0); - //计算非碳化钨需补重量 - bj_bomdlts_map.forEach((key,bj_bomdlt)->{ - //大于等于为共有 - if(bj_bomdlt>=2){ - //获取成品当前bomdtl - JSONObject now_bomdtl = bomdlts_need_map.get(key); - //获取需配重量 - double Y1p = now_bomdtl.getDouble("need_qty"); - if(rf3_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate"); - //Y1补=R3p减*Y1含量 - double Y1_bu = R3p_jian *(standard_rate/100.0); - sum_bu.set(sum_bu.get() + Y1_bu); - } - } - }); - //R3p减=W补+Y1补+Z1补+ Z2补 - double W_bu = NumberUtil.round(R3p_jian - sum_bu.get(),3).doubleValue(); - if(W_bu<=0) { - if (rf_list.size() == 1) { - throw new BadRequestException("无解!"); - } else { - flag = false;//进入设R3p减=R3p,解方程 - } - }else{ - //计算非碳化钨需补重量 - bj_bomdlts_map.forEach((key,bj_bomdlt)->{ - //大于等于为共有 - if(bj_bomdlt>=2){ - //获取成品当前bomdtl - JSONObject now_bomdtl = bomdlts_need_map.get(key); - //获取需配重量 - double Y1p = now_bomdtl.getDouble("need_qty"); - if(rf3_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate"); - //Y1补=R3p减*Y1含量 - double Y1_bu = R3p_jian *(standard_rate/100.0); - //Y12p=Y12p+Y1补 - Y1p = Y1p + Y1_bu; + if(rf2_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf2_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate"); + //Y1补=R3p减*Y1含量 + double Y1_bu = R2p_jian *(standard_rate/100.0); + //Y12p=Y12p+Y1补 + Y1p = Y1p + Y1_bu; + } now_bomdtl.put("formula_qty",Y1p); now_bomdtl.put("need_qty",Y1p); now_bomdtl.put("is_flag","-1"); bomdlts_need_map.put(key,now_bomdtl); } + }); + // R3p=R3p-R3p减/ R3纯粉系数 + double r3_formula_qty = R3p.getDouble("formula_qty"); + r3_formula_qty = NumberUtil.round(r3_formula_qty - r3_formula_qty/(R3p.getDouble("net_rate")/100.0),6).doubleValue(); + R3p.put("formula_qty",r3_formula_qty); + rf_map.put(R3p.getString("stockrecord_id"),R3p); + if(r3_formula_qty<=0){ + rf_map.remove(R3p.getString("stockrecord_id")); + } + // R2p=R2p-R2p减/ R2纯粉系数 + double r2_formula_qty = R2p.getDouble("formula_qty"); + r2_formula_qty = NumberUtil.round(r2_formula_qty - R2p_jian/(R2p.getDouble("net_rate")/100.0),6).doubleValue(); + R2p.put("formula_qty",r2_formula_qty); + rf_map.put(R2p.getString("stockrecord_id"),R2p); + if(r2_formula_qty<=0){ + rf_map.remove(R2p.getString("stockrecord_id")); + } + //C补=R3p减*R3的bom碳化钨含量*R3碳平衡+ R2p减*R2的bom碳化钨含量*R2碳平衡+C缺 + double C_bu = R3p_jian*rf3_Cr3C2*is_tan3 + R2p_jian*rf2_Cr3C2*is_tan2 + C_que; + //W补= R3p减*R3的bom碳化钨含量 + if(C_bu<=0) { + throw new BadRequestException("无解!"); + }else{ + if(C_bu>0){ + //Wp=Wp+W补 + Cp = Cp + C_bu; + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",Cp); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + } } - }); - // R3p=R3p-R3p减/ R3纯粉系数 - double r3_formula_qty = R3p.getDouble("formula_qty"); - r3_formula_qty = NumberUtil.round(r3_formula_qty - R3p_jian/(R3p.getDouble("net_rate")/100.0),3).doubleValue(); - R3p.put("formula_qty",r3_formula_qty); - rf_map.put(R3p.getString("stockrecord_id"),R3p); - if(r3_formula_qty<=0){ - rf_map.remove(R3p.getString("stockrecord_id")); } - //Wp=Wp+W补 - W = W + W_bu; - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); } + }else{ + throw new BadRequestException("满足条件的软废为0,请按新料模式配粉!"); } - //R3p减=R3p - if(!flag){ - //R2的bom碳化钨含量 - double rf2_Cr3C2 = R2p.getDouble("rf_Cr3C2")/100.0; - //R2碳平衡 - double is_tan2 = R2p.getDouble("is_tan")/100.0; - //R3p减 - double R3p_jian = R3p.getDouble("formula_qty"); - //R3p减*R3的bom碳化钨含量*R3碳平衡=CT1-CT2 - double R2p_jian = (CT1-CT2-R3p_jian*rf3_Cr3C2*is_tan3)/rf2_Cr3C2/is_tan2; - //bj_bomdlts_map中所有需补重量和 - AtomicReference sum_bu = new AtomicReference<>(0.0); - //计算非碳化钨需补重量 - bj_bomdlts_map.forEach((key,bj_bomdlt)->{ - //大于等于为共有 - if(bj_bomdlt>=2){ - //获取成品当前bomdtl - JSONObject now_bomdtl = bomdlts_need_map.get(key); - //获取需配重量 - double Y1p = now_bomdtl.getDouble("need_qty"); - if(rf3_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate"); - //Y1补=R3p减*Y1含量 - double Y1_bu = R3p_jian *(standard_rate/100.0); - sum_bu.set(sum_bu.get() + Y1_bu); - //Y12p=Y12p+Y1补 - Y1p = Y1p + Y1_bu; - } - if(rf2_bomdlts_map.containsKey(key)){ - //获取软废当前bomdtl - JSONObject rf_bomdtl = rf2_bomdlts_map.get(key); - //获取软废Y1含量 - double standard_rate = rf_bomdtl.getDouble("standard_rate"); - //Y1补=R3p减*Y1含量 - double Y1_bu = R2p_jian *(standard_rate/100.0); - sum_bu.set(sum_bu.get() + Y1_bu); - //Y12p=Y12p+Y1补 - Y1p = Y1p + Y1_bu; - } - now_bomdtl.put("formula_qty",Y1p); - now_bomdtl.put("need_qty",Y1p); - now_bomdtl.put("is_flag","-1"); - bomdlts_need_map.put(key,now_bomdtl); + }else + //需配钨粉 + if(CT1>CT2){ + //B、若有软废,先加钨Wp=桶重量 - (R1p*R1纯粉系数+ R2p*R2纯粉系数…) - (Y1p+X1p+X2p…) + if(rf_list.size()!=0){ + double W = net_qty; + //桶重量 - (R1p*R1纯粉系数+ R2p*R2纯粉系数…) + for(int i=0;i 1){ + R2p = rf_list.getJSONObject(rf_list.size()-2); + } + //获取R3p软废Bom + JSONArray rf3_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",R3p.getString("material_id")) + .addParam("is_need_manage","1") + .addParam("flag","1") + .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) + .process().getResultJSONArray(0); + //获取R2p软废Bom + JSONArray rf2_bomdlts = new JSONArray(); + if(rf_list.size() > 1){ + rf2_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",R2p.getString("material_id")) + .addParam("is_need_manage","1") + .addParam("flag","1") + .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) + .process().getResultJSONArray(0); + } + //获取成品Bom + JSONArray cp_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",material_id) + .addParam("is_need_manage","1") + .addParam("flag","1") + .addParam("nots",MaterOptTypeEnum.THW.getClass_idStr()) + .process().getResultJSONArray(0); + //软废rf2_bomdlts 对应map + HashMap rf2_bomdlts_map = new HashMap(); + //软废rf3_bomdlts 对应map + HashMap rf3_bomdlts_map = new HashMap(); + //成品cp_bomdlts 对应map + HashMap cp_bomdlts_map = new HashMap(); + //并集map + HashMap bj_bomdlts_map = new HashMap(); + for(int i=0;i sum_bu = new AtomicReference<>(0.0); + //计算非碳化钨需补重量 + bj_bomdlts_map.forEach((key,bj_bomdlt)->{ + //大于等于为共有 + if(bj_bomdlt>=2){ + //获取成品当前bomdtl + JSONObject now_bomdtl = bomdlts_need_map.get(key); + //获取需配重量 + double Y1p = now_bomdtl.getDouble("need_qty"); + if(rf3_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate"); + //Y1补=R3p减*Y1含量 + double Y1_bu = R3p_jian *(standard_rate/100.0); + sum_bu.set(sum_bu.get() + Y1_bu); + } + } + }); + //R3p减=W补+Y1补+Z1补+ Z2补 + double W_bu = NumberUtil.round(R3p_jian - sum_bu.get(),3).doubleValue(); + if(W_bu<=0) { + if (rf_list.size() == 1) { + throw new BadRequestException("无解!"); + } else { + flag = false;//进入设R3p减=R3p,解方程 + } + }else{ + //计算非碳化钨需补重量 + bj_bomdlts_map.forEach((key,bj_bomdlt)->{ + //大于等于为共有 + if(bj_bomdlt>=2){ + //获取成品当前bomdtl + JSONObject now_bomdtl = bomdlts_need_map.get(key); + //获取需配重量 + double Y1p = now_bomdtl.getDouble("need_qty"); + if(rf3_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate"); + //Y1补=R3p减*Y1含量 + double Y1_bu = R3p_jian *(standard_rate/100.0); + //Y12p=Y12p+Y1补 + Y1p = Y1p + Y1_bu; + now_bomdtl.put("formula_qty",Y1p); + now_bomdtl.put("need_qty",Y1p); + now_bomdtl.put("is_flag","-1"); + bomdlts_need_map.put(key,now_bomdtl); + } + } + }); + // R3p=R3p-R3p减/ R3纯粉系数 + double r3_formula_qty = R3p.getDouble("formula_qty"); + r3_formula_qty = NumberUtil.round(r3_formula_qty - R3p_jian/(R3p.getDouble("net_rate")/100.0),3).doubleValue(); + R3p.put("formula_qty",r3_formula_qty); + rf_map.put(R3p.getString("stockrecord_id"),R3p); + if(r3_formula_qty<=0){ + rf_map.remove(R3p.getString("stockrecord_id")); + } + //Wp=Wp+W补 + W = W + W_bu; + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } + } + //R3p减=R3p + if(!flag){ + //R2的bom碳化钨含量 + double rf2_Cr3C2 = R2p.getDouble("rf_Cr3C2")/100.0; + //R2碳平衡 + double is_tan2 = R2p.getDouble("is_tan")/100.0; + //R3p减 + double R3p_jian = R3p.getDouble("formula_qty"); + //R3p减*R3的bom碳化钨含量*R3碳平衡=CT1-CT2 + double R2p_jian = (CT1-CT2-R3p_jian*rf3_Cr3C2*is_tan3)/rf2_Cr3C2/is_tan2; + //bj_bomdlts_map中所有需补重量和 + AtomicReference sum_bu = new AtomicReference<>(0.0); + //计算非碳化钨需补重量 + bj_bomdlts_map.forEach((key,bj_bomdlt)->{ + //大于等于为共有 + if(bj_bomdlt>=2){ + //获取成品当前bomdtl + JSONObject now_bomdtl = bomdlts_need_map.get(key); + //获取需配重量 + double Y1p = now_bomdtl.getDouble("need_qty"); + if(rf3_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate"); + //Y1补=R3p减*Y1含量 + double Y1_bu = R3p_jian *(standard_rate/100.0); + sum_bu.set(sum_bu.get() + Y1_bu); + //Y12p=Y12p+Y1补 + Y1p = Y1p + Y1_bu; + } + + if(rf2_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf2_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate"); + //Y1补=R3p减*Y1含量 + double Y1_bu = R2p_jian *(standard_rate/100.0); + sum_bu.set(sum_bu.get() + Y1_bu); + //Y12p=Y12p+Y1补 + Y1p = Y1p + Y1_bu; + } + now_bomdtl.put("formula_qty",Y1p); + now_bomdtl.put("need_qty",Y1p); + now_bomdtl.put("is_flag","-1"); + bomdlts_need_map.put(key,now_bomdtl); + } + }); + //R3p减=W补+Y1补+Z1补+ Z2补 + double W_bu = NumberUtil.round(R3p_jian + R2p_jian - sum_bu.get(),3).doubleValue(); + if(W_bu<=0) { + throw new BadRequestException("无解!"); + } + // R3p=R3p-R3p减/ R3纯粉系数 + double r3_formula_qty = R3p.getDouble("formula_qty"); + r3_formula_qty = NumberUtil.round(r3_formula_qty - r3_formula_qty/(R3p.getDouble("net_rate")/100.0),3).doubleValue(); + R3p.put("formula_qty",r3_formula_qty); + rf_map.put(R3p.getString("stockrecord_id"),R3p); + if(r3_formula_qty<=0){ + rf_map.remove(R3p.getString("stockrecord_id")); + } + // R2p=R2p-R2p减/ R2纯粉系数 + double r2_formula_qty = R2p.getDouble("formula_qty"); + r2_formula_qty = NumberUtil.round(r2_formula_qty - R2p_jian/(R2p.getDouble("net_rate")/100.0),3).doubleValue(); + R2p.put("formula_qty",r2_formula_qty); + rf_map.put(R2p.getString("stockrecord_id"),R2p); + if(r2_formula_qty<=0){ + rf_map.remove(R2p.getString("stockrecord_id")); + } + //Wp=Wp+W补 + W = W + W_bu; + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } + }else{//若软废为0,则按新料模式配钨粉 + throw new BadRequestException("满足条件的软废为0,请按新料模式配粉!"); } - // R3p=R3p-R3p减/ R3纯粉系数 - double r3_formula_qty = R3p.getDouble("formula_qty"); - r3_formula_qty = NumberUtil.round(r3_formula_qty - r3_formula_qty/(R3p.getDouble("net_rate")/100.0),3).doubleValue(); - R3p.put("formula_qty",r3_formula_qty); - rf_map.put(R3p.getString("stockrecord_id"),R3p); - if(r3_formula_qty<=0){ - rf_map.remove(R3p.getString("stockrecord_id")); - } - // R2p=R2p-R2p减/ R2纯粉系数 - double r2_formula_qty = R2p.getDouble("formula_qty"); - r2_formula_qty = NumberUtil.round(r2_formula_qty - R2p_jian/(R2p.getDouble("net_rate")/100.0),3).doubleValue(); - R2p.put("formula_qty",r2_formula_qty); - rf_map.put(R2p.getString("stockrecord_id"),R2p); - if(r2_formula_qty<=0){ - rf_map.remove(R2p.getString("stockrecord_id")); - } - //Wp=Wp+W补 - W = W + W_bu; - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); } - }else{//若软废为0,则按新料模式配钨粉 - throw new BadRequestException("满足条件的软废为0,请按新料模式配粉!"); - } - } //3.计算成型剂 JSONArray bomdlts2 = WQL.getWO("QPF_AUTOFORMULA01") .addParam("material_id",material_id) @@ -4399,76 +4407,76 @@ public class AutoformulaServiceImpl implements AutoformulaService { }else //额外补料部分 if(bomdlts_plan.getString("is_flag").equals("-1")){ - String bomdtl_material_id = bomdlts_plan.getString("material_id"); - double left_qty = bomdlts_plan.getDouble("formula_qty"); - left_qty = NumberUtil.round(left_qty,3).doubleValue(); - String is_need_move = bomdlts_plan.getString("is_need_move"); - String prior_level = bomdlts_plan.getString("prior_level"); - if (StrUtil.isEmpty(prior_level)) { - prior_level = "03"; - } - if(is_need_move.equals("1")){ - //二次分配新料库存 - JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdtl_material_id) - .addParam("quality_scode","01") - .addParam("is_active","1") - .addParam("prior_level",prior_level) - .addParam("workorder_id",workorder_id) - .addParam("flag","22") - .process().getResultJSONArray(0); - for(int i=0;i0){ - continue; + for(int i=0;i0){ + continue; + } + double ivt_qty = now_ivt.getDouble("sum_ivt_qty"); + ivt_qty = NumberUtil.roundDown(ivt_qty,3).doubleValue(); + if(ivt_qty<=0 || ivt_qty<0.01){ + continue; + } + if(left_qty0){ + throw new BadRequestException("物料"+bomdlts_plan.getString("material_code")+" "+bomdlts_plan.getString("material_name")+",新料库存不足!"); } + }else{ + bomdlts_plan.put("is_rf_xl","1"); + bomdlts_plan.put("material_type","01"); + bomdlts_plan.put("ivt_level","01"); + bomdlts_plan.put("is_active","1"); + bomdlts_plan.put("quality_scode","01"); + xl_list3.add(bomdlts_plan); } - if(left_qty>0){ - throw new BadRequestException("物料"+bomdlts_plan.getString("material_code")+" "+bomdlts_plan.getString("material_name")+",新料库存不足!"); - } - }else{ - bomdlts_plan.put("is_rf_xl","1"); - bomdlts_plan.put("material_type","01"); - bomdlts_plan.put("ivt_level","01"); - bomdlts_plan.put("is_active","1"); - bomdlts_plan.put("quality_scode","01"); - xl_list3.add(bomdlts_plan); } - } }); //除了is_flag为-1的在上面代码已重新分配过,其他直接加入 xl_list3 for(int i=0;i "" structivt.ivt_level <= 输入.prior_level ENDOPTION + OPTION 输入.set_prior_level <> "" + structivt.ivt_level = 输入.set_prior_level + ENDOPTION OPTION 输入.is_pure <> "" stockmaterialext.is_pure = 输入.is_pure ENDOPTION @@ -205,6 +210,102 @@ ENDQUERY ENDIF + IF 输入.flag = "23" + QUERY + SELECT + structivt.*, + mb.material_name, + mb.material_code, + mb.material_type_id, + stockmaterialext.is_need_move, + CASE + + WHEN FormulaDtl3.used__qty > 0 THEN + structivt.sum_qty - FormulaDtl3.used__qty ELSE structivt.sum_qty + END AS sum_ivt_qty + FROM + ( + SELECT + SUM( ivt.canuse_qty ) AS sum_qty, + ivt.qty_unit_id, + ivt.qty_unit_name, + ivt.material_id, + ivt.pcsn, + ivt.is_active, + ivt.ivt_level, + ivt.quality_scode + FROM + st_ivt_structivt ivt + INNER JOIN ( + SELECT * FROM md_pd_productmaterialset ms WHERE ms.material_id = 输入.product_material_id AND ms.set_type = 输入.set_type + ) a ON ivt.material_id = a.set_material_id AND ivt.ivt_level = a.set_prior_level + GROUP BY + ivt.material_id, + ivt.pcsn, + ivt.is_active, + ivt.ivt_level, + ivt.quality_scode, + ivt.qty_unit_id, + ivt.qty_unit_name + ) structivt + LEFT JOIN md_me_materialbase mb ON mb.material_id = structivt.material_id + LEFT JOIN md_me_stockmaterialext stockmaterialext ON mb.material_id = stockmaterialext.material_id + LEFT JOIN ( + SELECT + SUM( FormulaDtl2.formula_qty - FormulaDtl2.put_qty ) AS used__qty, + FormulaDtl2.material_id, + FormulaDtl2.pcsn, + FormulaDtl2.is_active, + FormulaDtl2.ivt_level, + FormulaDtl2.quality_scode + FROM + PDM_BI_FormulaDtl FormulaDtl2 + LEFT JOIN PDM_BI_Formula Formula2 ON FormulaDtl2.formula_id = Formula2.formula_id + WHERE + 1 = 1 + AND FormulaDtl2.STATUS <> '99' + OPTION 输入.workorder_id <> "" + Formula2.workorder_id <> 输入.workorder_id + ENDOPTION + GROUP BY + FormulaDtl2.material_id, + FormulaDtl2.pcsn, + FormulaDtl2.is_active, + FormulaDtl2.ivt_level, + FormulaDtl2.quality_scode + ) FormulaDtl3 ON ( + FormulaDtl3.material_id = structivt.material_id + AND FormulaDtl3.pcsn = structivt.pcsn + AND FormulaDtl3.is_active = structivt.is_active + AND FormulaDtl3.ivt_level = structivt.ivt_level + AND FormulaDtl3.quality_scode = structivt.quality_scode + ) + WHERE + 1 = 1 + AND structivt.sum_qty > 0 + OPTION 输入.material_id <> "" + structivt.material_id = 输入.material_id + ENDOPTION + OPTION 输入.mater_ids <> "" + structivt.material_id in 输入.mater_ids + ENDOPTION + OPTION 输入.is_active <> "" + structivt.is_active = 输入.is_active + ENDOPTION + OPTION 输入.quality_scode <> "" + structivt.quality_scode = 输入.quality_scode + ENDOPTION + OPTION 输入.prior_level <> "" + structivt.ivt_level <= 输入.prior_level + ENDOPTION + OPTION 输入.is_pure <> "" + stockmaterialext.is_pure = 输入.is_pure + ENDOPTION + ORDER BY structivt.material_id,structivt.ivt_level desc, structivt.pcsn, structivt.sum_qty desc + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "3" QUERY SELECT @@ -477,6 +578,9 @@ OPTION 输入.prior_level <> "" structivt.ivt_level <= 输入.prior_level ENDOPTION + OPTION 输入.set_prior_level <> "" + structivt.ivt_level = 输入.set_prior_level + ENDOPTION OPTION 输入.is_pure <> "" stockmaterialext.is_pure = 输入.is_pure ENDOPTION @@ -485,3 +589,98 @@ ENDQUERY ENDIF + IF 输入.flag = "92" + QUERY + SELECT + structivt.*, + mb.material_name, + mb.material_code, + mb.material_type_id, + stockmaterialext.is_need_move, + CASE + WHEN FormulaDtl3.used__qty > 0 THEN + structivt.sum_qty - FormulaDtl3.used__qty ELSE structivt.sum_qty + END AS sum_ivt_qty + FROM + ( + SELECT + SUM( ivt.canuse_qty ) AS sum_qty, + ivt.qty_unit_id, + ivt.qty_unit_name, + ivt.material_id, + ivt.pcsn, + ivt.is_active, + ivt.ivt_level, + ivt.quality_scode + FROM + st_ivt_structivt ivt + INNER JOIN ( + SELECT * FROM md_pd_productmaterialset ms WHERE ms.material_id = 输入.product_material_id AND ms.set_type = 输入.set_type + ) a ON ivt.material_id = a.set_material_id AND ivt.ivt_level = a.set_prior_level + GROUP BY + ivt.material_id, + ivt.pcsn, + ivt.is_active, + ivt.ivt_level, + ivt.quality_scode, + ivt.qty_unit_id, + ivt.qty_unit_name + ) structivt + LEFT JOIN md_me_materialbase mb ON mb.material_id = structivt.material_id + LEFT JOIN md_me_stockmaterialext stockmaterialext ON mb.material_id = stockmaterialext.material_id + LEFT JOIN ( + SELECT + SUM( FormulaDtl2.formula_qty - FormulaDtl2.put_qty ) AS used__qty, + FormulaDtl2.material_id, + FormulaDtl2.pcsn, + FormulaDtl2.is_active, + FormulaDtl2.ivt_level, + FormulaDtl2.quality_scode + FROM + PDM_BI_FormulaDtl FormulaDtl2 + LEFT JOIN PDM_BI_Formula Formula2 ON FormulaDtl2.formula_id = Formula2.formula_id + WHERE + 1 = 1 + AND FormulaDtl2.STATUS <> '99' + OPTION 输入.workorder_id <> "" + Formula2.workorder_id <> 输入.workorder_id + ENDOPTION + GROUP BY + FormulaDtl2.material_id, + FormulaDtl2.pcsn, + FormulaDtl2.is_active, + FormulaDtl2.ivt_level, + FormulaDtl2.quality_scode + ) FormulaDtl3 ON ( + FormulaDtl3.material_id = structivt.material_id + AND FormulaDtl3.pcsn = structivt.pcsn + AND FormulaDtl3.is_active = structivt.is_active + AND FormulaDtl3.ivt_level = structivt.ivt_level + AND FormulaDtl3.quality_scode = structivt.quality_scode + ) + WHERE + 1 = 1 + AND structivt.sum_qty > 0 + OPTION 输入.material_id <> "" + structivt.material_id = 输入.material_id + ENDOPTION + OPTION 输入.mater_ids <> "" + structivt.material_id in 输入.mater_ids + ENDOPTION + OPTION 输入.is_active <> "" + structivt.is_active = 输入.is_active + ENDOPTION + OPTION 输入.quality_scode <> "" + structivt.quality_scode = 输入.quality_scode + ENDOPTION + OPTION 输入.prior_level <> "" + structivt.ivt_level <= 输入.prior_level + ENDOPTION + OPTION 输入.is_pure <> "" + stockmaterialext.is_pure = 输入.is_pure + ENDOPTION + ORDER BY structivt.material_id,structivt.ivt_level desc, sum_ivt_qty + ENDSELECT + ENDQUERY + ENDIF +