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 faaa504c..e78d38b0 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 @@ -262,8 +262,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { 其中:软废还要返回各成型剂含量*/ //主桶 JSONArray tableDtl = new JSONArray(); - //副桶 - JSONArray tabledis = new JSONArray(); if(xl_list!=null){ List list = JSONObject.parseArray(xl_list.toJSONString(), JSONObject.class); Collections.sort(list, (JSONObject o1, JSONObject o2) -> { @@ -288,11 +286,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { }); } //二次投料 if("1".equals(is_again_put)){ - rf_list.forEach((value)->{ - JSONObject jo = (JSONObject) value; - jo.put("bucket_type","02"); - tabledis.add(jo); - }); yzj_list.forEach((value)->{ JSONObject jo = (JSONObject) value; jo.put("is_need_manage","1"); @@ -435,108 +428,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { } dtl_new.add(jo); } - - JSONArray tabledis_new = new JSONArray(); - for(int i=0;i bomdlts_map = new HashMap(); - bomdlts_map.put("09030102",0.0); - bomdlts_map.put("CXJ001",0.0); - bomdlts_map.put("CXJ003",0.0); - bomdlts_map.put("CXJ004",0.0); - bomdlts_map.put("CXJ005",0.0); - bomdlts_map.put("CXJ006",0.0); - bomdlts_map.put("CXJ007",0.0); - bomdlts_map.put("CXJ008",0.0); - bomdlts_map.put("CXJ002",0.0); - for(int j=0;j{ - if(bomdlts2_now>0){ - jo.put("is_"+key,bomdlts2_now+""); - } - }); - }else if(StrUtil.isNotEmpty(material_type_id) && MaterOptTypeEnum.THW.getClass_idStr().contains(material_type_id)){//碳化钨新料 - //获取碳含量 - JSONObject FactoryWarranty = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("flag","3") - .process() - .uniqueResult(0); - if(FactoryWarranty==null){ - jo.put("is_tan","0"); - }else{ - //含碳比 - double value = FactoryWarranty.getDouble("value"); - //更新含碳比 - jo.put("is_tan",value); - } - //获取碳化铬 - JSONObject FactoryWarranty2 = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("dtlmaterial_id","CJZB00021") - .addParam("pcsn",jo.getString("pcsn")) - .addParam("flag","33") - .process() - .uniqueResult(0); - if(FactoryWarranty2==null){ - jo.put("is_CJZB00021","0"); - }else{ - //含碳比 - double value = FactoryWarranty2.getDouble("value"); - //更新含碳比 - jo.put("is_CJZB00021",value); - } - //获取碳化钒 - JSONObject FactoryWarranty3 = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("dtlmaterial_id","CJZB00020") - .addParam("pcsn",jo.getString("pcsn")) - .addParam("flag","33") - .process() - .uniqueResult(0); - if(FactoryWarranty3==null){ - jo.put("is_CJZB00020","0"); - }else{ - //含碳比 - double value = FactoryWarranty3.getDouble("value"); - //更新含碳比 - jo.put("is_CJZB00020",value); - } - }else if(MaterOptTypeEnum.GF.getClass_idStr().contains(jo.getString("material_id")) ||(StrUtil.isNotEmpty(material_type_id) && MaterOptTypeEnum.GF.getClass_idStr().contains(material_type_id))){//钴粉新料 - //如果该物料是钴粉 - jo.put("is_09030102","100"); - }else if(MaterOptTypeEnum.TF.getClass_idStr().contains(jo.getString("material_id")) ||(StrUtil.isNotEmpty(material_type_id) && MaterOptTypeEnum.TF.getClass_idStr().contains(material_type_id))){//C粉新料 - //如果该物料是c粉 - jo.put("is_tan","100"); - } - tabledis_new.add(jo); - } JSONObject result = new JSONObject(); - result.put("tabledis",tabledis_new); result.put("tableDtl",dtl_new); return result; } @@ -3136,8 +3028,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { 其中:软废还要返回各成型剂含量*/ //主桶 JSONArray tableDtl = new JSONArray(); - //副桶 - JSONArray tabledis = new JSONArray(); if(xl_list!=null){ List list = JSONObject.parseArray(xl_list.toJSONString(), JSONObject.class); Collections.sort(list, (JSONObject o1, JSONObject o2) -> { @@ -3286,7 +3176,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { dtl_new.add(jo); } JSONObject result = new JSONObject(); - result.put("tabledis",tabledis); result.put("tableDtl",dtl_new); return result; } @@ -3416,15 +3305,19 @@ public class AutoformulaServiceImpl implements AutoformulaService { JSONObject jo = now_ivts.getJSONObject(j); double can_qty = net_qty*add_rate/100.0; JSONObject jo2 = new JSONObject(); - jo2.put("can_qty",can_qty); - jo2.put("can_left_qty",can_qty); + String ivt_material_id = jo.getString("material_id"); + double net_rate = net_rate_map.get(ivt_material_id); + + double net_can_qty = can_qty/(net_rate/100.0); + jo2.put("can_qty",net_can_qty); + jo2.put("can_left_qty",net_can_qty); rf_plan_map.put(set_material_id,jo2); double sum_ivt_qty = jo.getDouble("sum_ivt_qty"); - if(can_qty >= sum_ivt_qty){ + if(net_can_qty >= sum_ivt_qty){ jo.put("can_qty",sum_ivt_qty); }else{ - jo.put("can_qty",can_qty); + jo.put("can_qty",net_can_qty); } ivts.add(jo); } @@ -4656,6 +4549,8 @@ public class AutoformulaServiceImpl implements AutoformulaService { //纯粉重量 double net_qty = workorder_qty; + double chunfen_qty = -1; + //rf最高开单重量 HashMap rf_plan_map = new HashMap(); @@ -4698,19 +4593,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { return item.getDouble("net_rate"); } )); - - //获取c_balance - Map c_balance_map = MaterialSets.stream().filter(Objects::nonNull) - .collect(Collectors.toMap( - object -> { - JSONObject item = (JSONObject) object; - return item.getString("set_material_id"); - }, - object -> { - JSONObject item = (JSONObject) object; - return item.getDouble("c_balance"); - } - )); WQLObject wo_param = WQLObject.getWQLObject("sys_param"); JSONObject param = wo_param.query("is_active='1' and is_delete='0' and code='IS_LIMIT_RF'").uniqueResult(0); if (ObjectUtil.isEmpty(param)) { @@ -4789,16 +4671,17 @@ public class AutoformulaServiceImpl implements AutoformulaService { } if(rf_ivts>=waste_limit_down_weight){//软废库存足够 JSONObject ret = this.autoCalculationBy03_ruanfei(json); + chunfen_qty = ret.getDouble("chunfen_qty"); rf_list = ret.getJSONArray("rf_list"); xl_list = ret.getJSONArray("xl_list"); cxj_list = ret.getJSONArray("cxj_list"); yzj_list = ret.getJSONArray("yzj_list"); cw_list = ret.getJSONArray("cw_list"); }else{ - throw new BadRequestException("产品"+material_code+"配粉开单失败,软废库存不足!"); + throw new BadRequestException("软废库存纯粉重量为"+NumberUtil.round(rf_ivts,3).doubleValue()+"公斤,不足下限!"); } }else{ - throw new BadRequestException("产品"+material_code+"配粉开单失败,软废库存不足!"); + throw new BadRequestException("软废库存纯粉重量为0公斤,不足下限!"); } } @@ -4809,8 +4692,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { 其中:软废还要返回各成型剂含量*/ //主桶 JSONArray tableDtl = new JSONArray(); - //副桶 - JSONArray tabledis = new JSONArray(); if(xl_list!=null){ List list = JSONObject.parseArray(xl_list.toJSONString(), JSONObject.class); Collections.sort(list, (JSONObject o1, JSONObject o2) -> { @@ -4959,8 +4840,8 @@ public class AutoformulaServiceImpl implements AutoformulaService { dtl_new.add(jo); } JSONObject result = new JSONObject(); - result.put("tabledis",tabledis); result.put("tableDtl",dtl_new); + result.put("chunfen_qty",chunfen_qty); return result; } @@ -4973,6 +4854,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { JSONObject autoCalculationBy03_ruanfei(JSONObject json){ //定义返回值 JSONObject ret = new JSONObject(); + ret.put("chunfen_qty","-1"); //工令 String workorder_id = json.getString("workorder_id"); //软废下限 @@ -5096,15 +4978,19 @@ public class AutoformulaServiceImpl implements AutoformulaService { JSONObject jo = now_ivts.getJSONObject(j); double can_qty = net_qty*add_rate/100.0; JSONObject jo2 = new JSONObject(); - jo2.put("can_qty",can_qty); - jo2.put("can_left_qty",can_qty); + String ivt_material_id = jo.getString("material_id"); + double net_rate = net_rate_map.get(ivt_material_id); + + double net_can_qty = NumberUtil.roundDown(can_qty/(net_rate/100.0),4).doubleValue(); + jo2.put("can_qty",net_can_qty); + jo2.put("can_left_qty",net_can_qty); rf_plan_map.put(set_material_id,jo2); double sum_ivt_qty = jo.getDouble("sum_ivt_qty"); - if(can_qty >= sum_ivt_qty){ + if(net_can_qty >= sum_ivt_qty){ jo.put("can_qty",sum_ivt_qty); }else{ - jo.put("can_qty",can_qty); + jo.put("can_qty",net_can_qty); } ivts.add(jo); } @@ -5173,7 +5059,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { for(int i=0;i{ - String bomdtl_material_id = bomdlt.getString("material_id"); - double left_qty = bomdlt.getDouble("left_qty"); - left_qty = NumberUtil.round(left_qty,3).doubleValue(); - String is_need_move = bomdlt.getString("is_need_move"); - //获取Y1、X1、X2….剩余>0的物料 - if(left_qty>0){ - if(is_need_move.equals("1")){ - String prior_level = bomdlt.getString("prior_level"); - if (StrUtil.isEmpty(prior_level)) { - prior_level = "03"; - } - JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdtl_material_id) - .addParam("quality_scode","01") - .addParam("prior_level",prior_level) - .addParam("is_active","1") - .addParam("workorder_id",workorder_id) - .addParam("flag","22") - .process().getResultJSONArray(0); - boolean flag = false; - for(int i=0;i sum_chunfen = new AtomicReference<>(0.0); + for(int i=0;i{ + String bomdtl_material_id = bomdlt.getString("material_id"); + double left_qty = bomdlt.getDouble("left_qty"); + left_qty = NumberUtil.roundDown(left_qty,4).doubleValue(); + String is_need_move = bomdlt.getString("is_need_move"); + //获取Y1、X1、X2….剩余>0的物料 + if(left_qty>0){ + if(is_need_move.equals("1")){ + String prior_level = bomdlt.getString("prior_level"); + if (StrUtil.isEmpty(prior_level)) { + prior_level = "03"; + } + JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdtl_material_id) + .addParam("quality_scode","01") + .addParam("prior_level",prior_level) + .addParam("is_active","1") + .addParam("workorder_id",workorder_id) + .addParam("flag","22") .process().getResultJSONArray(0); - if(is_tjj.size()>0){ - 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){ + continue; } - break; - }else{ - flag = true; - now_ivt.put("is_flag","1"); - now_ivt.put("formula_qty",ivt_qty); - now_ivt.put("bom_ivt_qty",ivt_qty); - now_ivt.put("seqno",bomdlt.getString("seqno")); - now_ivt.put("material_type","01"); - now_ivt.put("need_sum_qty",bomdlt.getString("need_sum_qty")); - now_ivt.put("is_need_move",bomdlt.getString("is_need_move")); - now_ivt.put("is_need_manage","1"); - left_qty = NumberUtil.round(left_qty - ivt_qty,3).doubleValue(); - finalXl_list.add(now_ivt); - //如果该物料是碳化钨 - if(MaterOptTypeEnum.THW.getClass_idStr().contains(now_ivt.getString("material_type_id"))){ - bomdlts_Cr3C2.add(now_ivt); + double ivt_qty = now_ivt.getDouble("sum_ivt_qty"); + ivt_qty = NumberUtil.roundDown(ivt_qty,4).doubleValue(); + if(ivt_qty <=0 || ivt_qty<0.01){ + continue; + } + if(left_qty0){ - throw new BadRequestException("物料"+bomdlt.getString("material_code")+" "+bomdlt.getString("material_name")+",新料库存不足!"); - } - if(flag){ + if(left_qty>0){ + throw new BadRequestException("物料"+bomdlt.getString("material_code")+" "+bomdlt.getString("material_name")+",新料库存不足!"); + } + if(flag){ + bomdlt.put("is_flag","1"); + } + bomdlt.put("need_qty", bomdlt.getDouble("left_qty")); + bomdlt.put("formula_qty", bomdlt.getDouble("left_qty")); + bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); + }else{ + bomdlt.put("need_qty", bomdlt.getDouble("left_qty")); + bomdlt.put("formula_qty", bomdlt.getDouble("left_qty")); + bomdlt.put("is_need_manage","1"); + bomdlt.put("ivt_level","01"); bomdlt.put("is_flag","1"); + bomdlt.put("is_active","1"); + bomdlt.put("quality_scode","01"); + bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); } - bomdlt.put("need_qty", bomdlt.getDouble("left_qty")); - bomdlt.put("formula_qty", bomdlt.getDouble("left_qty")); - bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); }else{ - bomdlt.put("need_qty", bomdlt.getDouble("left_qty")); - bomdlt.put("formula_qty", bomdlt.getDouble("left_qty")); - bomdlt.put("is_need_manage","1"); - bomdlt.put("ivt_level","01"); - bomdlt.put("is_flag","1"); - bomdlt.put("is_active","1"); - bomdlt.put("quality_scode","01"); + bomdlt.put("need_qty", "0"); + bomdlt.put("formula_qty", "0"); + // + bomdlt.put("is_flag","0"); bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); } - }else{ - bomdlt.put("need_qty", "0"); - bomdlt.put("formula_qty", "0"); - // - bomdlt.put("is_flag","0"); - bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); - } - }); - xl_list = finalXl_list; - //计算(碳化钨+软废)总碳 - double CT1 = 0; - //碳化钨总碳 - for(int i=0;i{ - //获取Y1、X1、X2….剩余>0的物料 - bomdlt.put("need_qty", "0"); - bomdlt.put("formula_qty", "0"); - // - bomdlt.put("is_flag","0"); - bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); }); - xl_list = new JSONArray(); - }else - //需配碳粉 - if(CT10){ - if(Cp > cw_limit_down){ - 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); + xl_list = finalXl_list; + //计算(碳化钨+软废)总碳 + double CT1 = 0; + //碳化钨总碳 + for(int i=0;i0){ - if(Wp > cw_limit_down){ - 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); + //获取修正值 + double change_qty = this.getWCChange(bomdlt_Cr3C2.getString("material_id"),bomdlt_Cr3C2.getString("pcsn")); + is_tan = is_tan + change_qty; + if(is_tan<0){ + throw new BadRequestException("物料"+bomdlt_Cr3C2.getString("material_code")+" "+bomdlt_Cr3C2.getString("material_name")+"修正后含碳量不能为负数:"+is_tan+"!"); + } + //总碳 + CT1 = CT1 + bom_ivt_qty*is_tan/100.0; + //更新含碳比 + bomdlt_Cr3C2.put("is_tan",is_tan); + bomdlts_need_map.put(bomdlt_Cr3C2.getString("material_id"),bomdlt_Cr3C2); + } + //软废总碳 + for(int i=0;i{ + //获取Y1、X1、X2….剩余>0的物料 + bomdlt.put("need_qty", "0"); + bomdlt.put("formula_qty", "0"); + // + bomdlt.put("is_flag","0"); + bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); + }); + xl_list = new JSONArray(); + }else + //需配碳粉 + if(CT10){ + if(Cp > cw_limit_down){ + 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 Wp = NumberUtil.round(W-Cp,6).doubleValue(); + if(Wp>0){ + if(Wp > cw_limit_down){ + 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); + } } + }else{ + //用新料补足剩余部分 + bomdlts_need_map.forEach((key,bomdlt)->{ + //获取Y1、X1、X2….剩余>0的物料 + bomdlt.put("need_qty", "0"); + bomdlt.put("formula_qty", "0"); + // + bomdlt.put("is_flag","0"); + bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); + }); + xl_list = new JSONArray(); } - }else{ - //用新料补足剩余部分 - bomdlts_need_map.forEach((key,bomdlt)->{ - //获取Y1、X1、X2….剩余>0的物料 - bomdlt.put("need_qty", "0"); - bomdlt.put("formula_qty", "0"); - // - bomdlt.put("is_flag","0"); - bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); - }); - xl_list = new JSONArray(); } - } - }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")) + }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 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_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); + 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); + } + } + }); + // 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{ + if(C_bu>0){ + //Wp=Wp+W补 + Cp = Cp + C_bu; + if(Cp > cw_limit_down){ + //计算非碳化钨需补重量 + 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")); + } + //Wp=Wp+W补 + 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{ + //用新料补足剩余部分 + bomdlts_need_map.forEach((key,bomdlt)->{ + //获取Y1、X1、X2….剩余>0的物料 + bomdlt.put("need_qty", "0"); + bomdlt.put("formula_qty", "0"); + // + bomdlt.put("is_flag","0"); + bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); + }); + xl_list = new JSONArray(); + } } } - }); - // R3p减=C缺/[1-(R3的bom碳化钨含量*R3碳平衡+Y1含量+Z1含量+Z2含量)] - double R3p_jian = C_que/(1.0-(rf3_Cr3C2*is_tan3+sum_YZ.get())); + } + //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; - 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) { + //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 { - flag = false;//进入设R3p减=R3p,解方程 - } - }else{ - if(C_bu>0){ - //Wp=Wp+W补 - Cp = Cp + C_bu; - if(Cp > cw_limit_down){ - //计算非碳化钨需补重量 - 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; + }else{ + if(C_bu>0){ + //Wp=Wp+W补 + Cp = Cp + C_bu; + if(Cp > cw_limit_down){ + 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 - 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")); + } + //计算非碳化钨需补重量 + 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 - 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")); + }); + }else{ + //用新料补足剩余部分 + bomdlts_need_map.forEach((key,bomdlt)->{ + //获取Y1、X1、X2….剩余>0的物料 + bomdlt.put("need_qty", "0"); + bomdlt.put("formula_qty", "0"); + // + bomdlt.put("is_flag","0"); + bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); + }); + xl_list = new JSONArray(); } - //Wp=Wp+W补 - 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{ + } + } + } + } + }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(),4).doubleValue(); + if(W_bu<=0) { + if (rf_list.size() == 1) { + throw new BadRequestException("无解!"); + } else { + flag = false;//进入设R3p减=R3p,解方程 + } + }else{ + //Wp=Wp+W补 + W = W + W_bu; + if(W <= cw_limit_down){ //用新料补足剩余部分 bomdlts_need_map.forEach((key,bomdlt)->{ //获取Y1、X1、X2….剩余>0的物料 @@ -5701,91 +5889,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); }); xl_list = new JSONArray(); - } - } - } - } - //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; - - //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; - if(Cp > cw_limit_down){ - 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 - 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")); - } + }else{ //计算非碳化钨需补重量 bj_bomdlts_map.forEach((key,bj_bomdlt)->{ //大于等于为共有 @@ -5803,177 +5907,85 @@ public class AutoformulaServiceImpl implements AutoformulaService { 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); } - - 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); } }); - }else{ - //用新料补足剩余部分 - bomdlts_need_map.forEach((key,bomdlt)->{ - //获取Y1、X1、X2….剩余>0的物料 - bomdlt.put("need_qty", "0"); - bomdlt.put("formula_qty", "0"); - // - bomdlt.put("is_flag","0"); - bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); - }); - xl_list = new JSONArray(); - } - } - } - } - } - }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); + 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减=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) { + } + //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); + } + + 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); + } + } + }); + //R3p减=W补+Y1补+Z1补+ Z2补 + double W_bu = NumberUtil.round(R3p_jian + R2p_jian - sum_bu.get(),4).doubleValue(); + if(W_bu<=0) { throw new BadRequestException("无解!"); - } else { - flag = false;//进入设R3p减=R3p,解方程 } - }else{ //Wp=Wp+W补 W = W + W_bu; if(W <= cw_limit_down){ @@ -6005,21 +6017,40 @@ public class AutoformulaServiceImpl implements AutoformulaService { 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); } + + 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 - R3p_jian/(R3p.getDouble("net_rate")/100.0),3).doubleValue(); + r3_formula_qty = NumberUtil.round(r3_formula_qty - r3_formula_qty/(R3p.getDouble("net_rate")/100.0),4).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),4).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")); + } JSONObject W_weight = new JSONObject(); W_weight.put("formula_qty",W); @@ -6037,259 +6068,135 @@ public class AutoformulaServiceImpl implements AutoformulaService { cw_list.add(W_weight); } } + }else{//若软废为0,则按新料模式配钨粉 + 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); - } - - 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); - } - } - }); - //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("无解!"); - } - //Wp=Wp+W补 - W = W + W_bu; - if(W <= cw_limit_down){ - //用新料补足剩余部分 - bomdlts_need_map.forEach((key,bomdlt)->{ - //获取Y1、X1、X2….剩余>0的物料 - bomdlt.put("need_qty", "0"); - bomdlt.put("formula_qty", "0"); - // - bomdlt.put("is_flag","0"); - bomdlts_need_map.put(bomdlt.getString("material_id"),bomdlt); - }); - xl_list = new JSONArray(); - }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),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")); - } - - 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); - } + } + //处理新料 + JSONArray xl_list3 = new JSONArray(); + //重新分配总需配库存 + bomdlts_need_map.forEach((key,bomdlts_plan)->{ + //不用添加新料的部分 + if(bomdlts_plan.getString("is_flag").equals("0")){ + bomdlts_plan.put("formula_qty","0"); + bomdlts_plan.put("is_rf_xl","1"); + bomdlts_plan.put("material_type","01"); + bomdlts_plan.put("is_rf_xl","0"); + xl_list3.add(bomdlts_plan); + }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,4).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"; } - }else{//若软废为0,则按新料模式配钨粉 - throw new BadRequestException("满足条件的软废库存为0,请按其他模式配粉!"); - } - } - //处理新料 - JSONArray xl_list3 = new JSONArray(); - //重新分配总需配库存 - bomdlts_need_map.forEach((key,bomdlts_plan)->{ - //不用添加新料的部分 - if(bomdlts_plan.getString("is_flag").equals("0")){ - bomdlts_plan.put("formula_qty","0"); - bomdlts_plan.put("is_rf_xl","1"); - bomdlts_plan.put("material_type","01"); - bomdlts_plan.put("is_rf_xl","0"); - xl_list3.add(bomdlts_plan); - }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","9") - .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,4).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 xl_list_map = new HashMap(); + + for(int i=0;i{ + finalXl_list1.add(bomdlts_plan); + }); + xl_list2 = finalXl_list1; + JSONArray finalRf_list = rf_list2; + rf_map.forEach((key, bomdlts_plan)->{ + finalRf_list.add(bomdlts_plan); + }); + rf_list2 = finalRf_list; } - //汇总新料库存 - HashMap xl_list_map = new HashMap(); - - for(int i=0;i{ - xl_list2.add(bomdlts_plan); - }); - rf_map.forEach((key,bomdlts_plan)->{ - rf_list2.add(bomdlts_plan); - }); } } ret.put("rf_list",rf_list2); @@ -6347,7 +6254,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { result = this.autoCalculationBy01(workorder); JSONArray tableDtl = result.getJSONArray("tableDtl"); //副桶 - JSONArray tabledis = result.getJSONArray("tabledis"); + JSONArray tabledis = new JSONArray(); workorder.put("tabledis",tabledis); workorder.put("tableDtl",tableDtl); workorder.put("remark","自动开单"); diff --git a/mes/qd/src/views/wms/pf/initformula/DivDialog.vue b/mes/qd/src/views/wms/pf/initformula/DivDialog.vue index e39a3629..c86f3d5b 100644 --- a/mes/qd/src/views/wms/pf/initformula/DivDialog.vue +++ b/mes/qd/src/views/wms/pf/initformula/DivDialog.vue @@ -80,6 +80,7 @@ style="width: 210px" placeholder="是否二次投料" class="filter-item" + disabled @change="storChange2" > - @@ -439,6 +431,7 @@ export default { mstrow: {}, tabledis: [], XLList: [], + chunfen_qty: '0', form: { waste_limit_down: 0, waste_limit_uo: 0 }, form2: { total_qty1: '0', @@ -480,6 +473,7 @@ export default { this.button1 = true this.button2 = false } + this.form.is_again_put = '0' if (this.form.is_again_put === '1' && this.form.formula_type === '00') { this.button3 = false } else { @@ -498,7 +492,7 @@ export default { } this.tableDtl.splice(i, 1, row) } - this.tabledis = res.tabledis + /* this.tabledis = res.tabledis this.form2.total_qty2 = 0 this.form2.add_qty2 = 0 for (let i = 0; i < this.tabledis.length; i++) { @@ -510,7 +504,7 @@ export default { this.form2.add_qty2 = this.form2.add_qty2 + parseFloat(row.formula_qty) } this.tabledis.splice(i, 1, row) - } + }*/ }) }, moveUp(index, item) { @@ -1099,39 +1093,106 @@ export default { } }, autoCalculation() { - this.fullscreenLoading = true - autoformula.autoCalculation(this.form).then(res => { - this.crud.notify('自动计算成功!') - this.tableDtl = res.tableDtl - this.form2.total_qty1 = 0 - this.form2.add_qty1 = 0 - for (let i = 0; i < this.tableDtl.length; i++) { - const row = this.tableDtl[i] - row.edit = true - if (row.is_need_manage === '1') { - this.form2.total_qty1 = this.form2.total_qty1 + parseFloat(row.formula_qty) + if (this.form.formula_type === '03') { + this.fullscreenLoading = true + autoformula.autoCalculation(this.form).then(res => { + this.crud.notify('自动计算成功!') + this.chunfen_qty = res.chunfen_qty + this.fullscreenLoading = false + if ((parseFloat(this.chunfen_qty) > 0) && (parseFloat(this.chunfen_qty) < parseFloat(this.form.workorder_qty))) { + this.$confirm('软废纯粉重量为' + parseFloat(this.chunfen_qty) + '公斤,不足工令重量,是否继续?') + .then(_ => { + this.form.workorder_qty = parseFloat(this.chunfen_qty) + this.fullscreenLoading = true + autoformula.autoCalculation(this.form).then(res => { + this.crud.notify('自动计算成功!') + this.tableDtl = res.tableDtl + this.form2.total_qty1 = 0 + this.form2.add_qty1 = 0 + for (let i = 0; i < this.tableDtl.length; i++) { + const row = this.tableDtl[i] + row.edit = true + if (row.is_need_manage === '1') { + this.form2.total_qty1 = this.form2.total_qty1 + parseFloat(row.formula_qty) + } else { + this.form2.add_qty1 = this.form2.add_qty1 + parseFloat(row.formula_qty) + } + this.tableDtl.splice(i, 1, row) + } + /* this.tabledis = res.tabledis + this.form2.total_qty2 = 0 + this.form2.add_qty2 = 0 + for (let i = 0; i < this.tabledis.length; i++) { + const row = this.tabledis[i] + row.edit = true + if (row.is_need_manage === '1') { + this.form2.total_qty2 = this.form2.total_qty2 + parseFloat(row.formula_qty) + } else { + this.form2.add_qty2 = this.form2.add_qty2 + parseFloat(row.formula_qty) + } + this.tabledis.splice(i, 1, row) + }*/ + this.fullscreenLoading = false + }).catch(() => { + this.fullscreenLoading = false + }) + }) + .catch(_ => { + }) } else { - this.form2.add_qty1 = this.form2.add_qty1 + parseFloat(row.formula_qty) + this.tableDtl = res.tableDtl + this.form2.total_qty1 = 0 + this.form2.add_qty1 = 0 + for (let i = 0; i < this.tableDtl.length; i++) { + const row = this.tableDtl[i] + row.edit = true + if (row.is_need_manage === '1') { + this.form2.total_qty1 = this.form2.total_qty1 + parseFloat(row.formula_qty) + } else { + this.form2.add_qty1 = this.form2.add_qty1 + parseFloat(row.formula_qty) + } + this.tableDtl.splice(i, 1, row) + } + this.fullscreenLoading = false } - this.tableDtl.splice(i, 1, row) - } - this.tabledis = res.tabledis - this.form2.total_qty2 = 0 - this.form2.add_qty2 = 0 - for (let i = 0; i < this.tabledis.length; i++) { - const row = this.tabledis[i] - row.edit = true - if (row.is_need_manage === '1') { - this.form2.total_qty2 = this.form2.total_qty2 + parseFloat(row.formula_qty) - } else { - this.form2.add_qty2 = this.form2.add_qty2 + parseFloat(row.formula_qty) + }).catch(() => { + this.fullscreenLoading = false + }) + } else { + this.fullscreenLoading = true + autoformula.autoCalculation(this.form).then(res => { + this.crud.notify('自动计算成功!') + this.tableDtl = res.tableDtl + this.form2.total_qty1 = 0 + this.form2.add_qty1 = 0 + for (let i = 0; i < this.tableDtl.length; i++) { + const row = this.tableDtl[i] + row.edit = true + if (row.is_need_manage === '1') { + this.form2.total_qty1 = this.form2.total_qty1 + parseFloat(row.formula_qty) + } else { + this.form2.add_qty1 = this.form2.add_qty1 + parseFloat(row.formula_qty) + } + this.tableDtl.splice(i, 1, row) } - this.tabledis.splice(i, 1, row) - } - this.fullscreenLoading = false - }).catch(() => { - this.fullscreenLoading = false - }) + /* this.tabledis = res.tabledis + this.form2.total_qty2 = 0 + this.form2.add_qty2 = 0 + for (let i = 0; i < this.tabledis.length; i++) { + const row = this.tabledis[i] + row.edit = true + if (row.is_need_manage === '1') { + this.form2.total_qty2 = this.form2.total_qty2 + parseFloat(row.formula_qty) + } else { + this.form2.add_qty2 = this.form2.add_qty2 + parseFloat(row.formula_qty) + } + this.tabledis.splice(i, 1, row) + }*/ + this.fullscreenLoading = false + }).catch(() => { + this.fullscreenLoading = false + }) + } }, submit() { if (this.tableDtl.length === 0) {