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 56df23d8..1750a679 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 @@ -592,36 +592,11 @@ public class AutoformulaServiceImpl implements AutoformulaService { 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"); - //解得碳粉重量 - double C = ((c_balance/100.0)*X22p-X22p*(X22/100.0))/(1-X22/100.0); - if(C<0){ - throw new BadRequestException("加碳粉为负数,当前配粉无解!"); - } - 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","0"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; - 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); //计算不需要移库的添加剂(抑制剂) yzj_map.forEach((key,tjj_map_jo)->{ //获取添加剂id @@ -639,50 +614,89 @@ public class AutoformulaServiceImpl implements AutoformulaService { //质保书含量比 double value = tjj_finished.getDouble("value"); //当前含量重量 - double finished = bom_ivt_qty*value/100.0; + double finished = X22p*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); } }); - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); - //判断已含添加剂与需配添加剂大小 - 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= 0){ + 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); } - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } - }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); - //钨分类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); + 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",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_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); + } + }); + } + boolean flag = true; //设X21p减=0,解方程 if(flag){ - // X22p减 =产品碳平衡*(X11p+X12p+X21p+X22p)-总碳/(1- X22碳含量) - //C=X22p减 - //X22p减=产品碳平衡*(X11p+X12p+X21p+X22p)+ X22p减*X22碳含量-CT1 - double C = ((c_balance/100.0)*CT1_weight-CT1)/(1-X22/100.0); - if(C<0){ + // X22p减=[产品碳平衡*(X11p+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21)* X21碳含量+(X22p)* X22碳含量+Z已总)]/(1-X22碳含量) + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-(CT1+Z_sum.get()))/(1-X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ flag = false; - }else if(C>=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; - if(bom_ivt_qty<0){ + }else{ + //解得钨粉重量 + double C = X22_jian + Z_sum.get(); + if(C<0){ flag = false; - }else{ - 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(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){ @@ -770,9 +795,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { } }); } - - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 yzj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -791,59 +813,37 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); } - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); //钨分类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); + 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); } } - } } if(!flag){ //设X22p减=X22p,解方程 - //X21p减*=产品碳平衡*(X11p+X12p+X21p+X22p)-(X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-X22p/(1- X21碳含量) + // X21p减=[产品碳平衡*(X11p+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量+Z已总+X22p)]/(1-X21碳含量) + double X21_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get()) - (CT1-X22c) - X22p-Z_sum.get())/(1-X21/100.0); - // - //X21p减=[产品碳平衡*(X11p+X12p+X21p+X22p)-( X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p)]/ (1-X21碳含量) - double X21_jian = ((c_balance/100.0)*CT1_weight - (CT1-X22c) - X22p)/(1-X21/100.0); - if(X21_jian<0){ - throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); - } //解得钨粉重量 - double C = X22p + X21_jian; + double C = X22p + X21_jian + Z_sum.get(); if(C<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); + throw new BadRequestException("加碳粉为负数,当前配粉无解!"); }else 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); //更新碳化钨配粉重量 double bom_ivt_qty = X21p-X21_jian; if(bom_ivt_qty<0){ @@ -883,8 +883,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { } }); } - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 yzj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -903,24 +901,23 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); } - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); //钨分类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); + 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); } } } @@ -935,29 +932,46 @@ public class AutoformulaServiceImpl implements AutoformulaService { 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); + } + }); + //解得钨粉重量 - double W = X22p - (c_balance/100.0)*X22p/(X22/100.0); - if(W<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); - } - 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 X22_jian = X22p - (c_balance/100.0)*(X22p+Z_sum.get())/(X22/100.0); //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-W; + 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 @@ -998,8 +1012,29 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("is_active","1"); tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); + 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){ + 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); @@ -1022,126 +1057,59 @@ public class AutoformulaServiceImpl implements AutoformulaService { 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)]/X22碳含量 - double W = (CT1 - (c_balance/100.0)*CT1_weight)/(X22/100.0); - if(W<0){ + //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+Z_sum.get()))/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ flag = false; - }else if(W>=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-W; - if(bom_ivt_qty<0){ - flag = false; - }else{ - 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); - - 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_qty=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); - //更新碳化钨配粉重量 - 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); + }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_X21p.getString("stockrecord_id")); + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.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;i0){ + 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+ Z_sum.get()))/(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); } } } @@ -1550,28 +1639,58 @@ public class AutoformulaServiceImpl implements AutoformulaService { double X22 = FactoryWarranty.getDouble("is_tan"); //该批次配粉重量 double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); - //解得碳粉重量 - double C = ((c_balance/100.0)*X22p-X22p*(X22/100.0))/(1-X22/100.0); + + 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); + } + }); + //解得碳粉重量 X22p减=[产品碳平衡*(X22p+Z已总)-Z已总- (X22p)* X22碳含量]/(1- X22碳含量) + double X22_jian = ((c_balance/100.0)*(X22p+ Z_sum.get())- Z_sum.get() -X22p*(X22/100.0))/(1-X22/100.0); + + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty < 0){ + throw new BadRequestException("碳化钨配粉结果为负数,当前配粉无解!"); + } + double C = X22_jian + Z_sum.get(); + if(C<0){ throw new BadRequestException("加碳粉为负数,当前配粉无解!"); } - 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); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; + 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); + } bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); //计算不需要移库的添加剂 @@ -1597,8 +1716,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map.put(tjj_material_id,tjj_map_jo); } }); - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 tjj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -1616,13 +1733,334 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("is_active","1"); tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); + }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+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21)* X21碳含量+(X22p)* X22碳含量+Z已总)]/(1-X22碳含量) + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-(CT1+Z_sum.get()))/(1-X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ + flag = false; + }else{ + //解得钨粉重量 + double C = X22_jian + Z_sum.get(); + if(C<0){ + flag = false; + }else if(C>=0){ + 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); + } + 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); + } + }); + } + //判断已含添加剂与需配添加剂大小 + 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=0){ + //更新碳化钨配粉重量 + double bom_ivt_qty = X21p-X21_jian; + if(bom_ivt_qty<0){ + throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); + } + 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); + } + + 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{ + //获取添加剂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_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); + } + }); + + //解得钨粉重量 + double X22_jian = X22p - (c_balance/100.0)*(X22p+Z_sum.get())/(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","钨粉"); @@ -1658,149 +2096,57 @@ public class AutoformulaServiceImpl implements AutoformulaService { 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+X12p+X21p+X22p)-总碳/(1- X22碳含量) - double C = ((c_balance/100.0)*CT1_weight-CT1)/(1-X22/100.0); - if(C<0){ + //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+Z_sum.get()))/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ flag = false; - }else if(C>=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; - if(bom_ivt_qty<0){ - flag = false; - }else{ - - 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); - - 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); - } - }); - } - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); - //判断已含添加剂与需配添加剂大小 - 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){ - W.set(W.get() + finished_qty); - } - }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); - //钨分类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+X12p+X21p+X22p)-(X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-X22p/(1- X21碳含量) - double X21_jian = ((c_balance/100.0)*CT1_weight - (CT1-X22c) - X22p)/(1-X21/100.0); - if(X21_jian<0){ - throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); - } - //解得钨粉重量 - double C = X22p + X21_jian; - if(C<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); - }else 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); - //更新碳化钨配粉重量 - 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); + }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_X21p.getString("stockrecord_id")); + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.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 W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 tjj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -1848,139 +2192,14 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("is_active","1"); tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); - } - if(finished_qty>0){ - W.set(W.get() + finished_qty); + total_sum.set(total_sum.get() + need_qty-finished_qty); } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); - //钨分类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 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"); - //解得钨粉重量 - double W = X22p - (c_balance/100.0)*X22p/(X22/100.0); - if(W<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); - } - 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 bom_ivt_qty = X22p-W; - 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); - } - }); - //判断已含添加剂与需配添加剂大小 - 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=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-W; - if(bom_ivt_qty<0){ - flag = false; - }else{ + double W = new_qty - total_sum.get(); + /* if(W<0){ + throw new BadRequestException("加钨粉为负数,当前配粉无解!"); + }*/ + if(W>0){ JSONObject W_weight = new JSONObject(); W_weight.put("formula_qty",W); //钨分类id @@ -1995,74 +2214,90 @@ public class AutoformulaServiceImpl implements AutoformulaService { W_weight.put("is_active","1"); W_weight.put("quality_scode","01"); cw_list.add(W_weight); - - 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); - } - }); - } - //判断已含添加剂与需配添加剂大小 - 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 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_qty=0){ + } + if(W>0){ JSONObject W_weight = new JSONObject(); W_weight.put("formula_qty",W); //钨分类id @@ -2077,64 +2312,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { W_weight.put("is_active","1"); W_weight.put("quality_scode","01"); cw_list.add(W_weight); - //更新碳化钨配粉重量 - 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")); - //循环碳化钨 - 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