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 e4a04832..faaa504c 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 @@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -39,6 +40,8 @@ public class AutoformulaServiceImpl implements AutoformulaService { result = this.autoCalculationBy01(json); }else if("02".equals(formula_type)){//改配模式 result = this.autoCalculationBy02(json); + }else if("03".equals(formula_type)){//合批模式 + result = this.autoCalculationBy03(json); } return result; } @@ -49,9 +52,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { * @return */ JSONObject autoCalculationBy01(JSONObject json){ - WQLObject st_ivt_structivt = WQLObject.getWQLObject("st_ivt_structivt"); - WQLObject MD_PD_ProductMaterialSet = WQLObject.getWQLObject("MD_PD_ProductMaterialSet"); - WQLObject MD_ME_ProductMaterialExt = WQLObject.getWQLObject("md_me_producmaterialext"); //是否二次投料 String is_again_put = json.getString("is_again_put"); //工令 @@ -118,6 +118,32 @@ public class AutoformulaServiceImpl implements AutoformulaService { yzj_list = ret.getJSONArray("yzj_list"); cw_list = ret.getJSONArray("cw_list"); }else{ + //获取add_rate + Map add_rate_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("add_rate"); + } + )); + + //获取net_rate + Map net_rate_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("net_rate"); + } + )); + 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)) { @@ -128,48 +154,43 @@ public class AutoformulaServiceImpl implements AutoformulaService { if("1".equals(value)){ value_is_active = "1"; } + + String allmaterialId = " "; + if (ObjectUtil.isNotEmpty(MaterialSets)){ + allmaterialId = "(\""+MaterialSets.stream().map(o -> ((JSONObject) o).getString("set_material_id")).collect(Collectors.joining("\",\""))+"\")"; + } + //获取库存集合 JSONArray ivts = new JSONArray(); - for(int i=0;i= sum_ivt_qty){ - jo.put("can_qty",sum_ivt_qty); - }else{ - jo.put("can_qty",can_qty); - } - //纯粉系数 - jo.put("net_rate",net_rate); - ivts.add(jo); + JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("mater_ids",allmaterialId) + .addParam("is_active",value_is_active) + .addParam("quality_scode","02") + .addParam("workorder_id",workorder_id) + .addParam("flag","22") + .process().getResultJSONArray(0); + for(int j=0;j= sum_ivt_qty){ + jo.put("can_qty",sum_ivt_qty); + }else{ + jo.put("can_qty",can_qty); } + //纯粉系数 + jo.put("net_rate",net_rate); + ivts.add(jo); } if(ivts.size()!=0){ //软废纯粉库存总量 @@ -1588,7 +1609,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { //定义返回值 JSONObject ret = new JSONObject(); WQLObject MD_PD_ProductMaterialSet = WQLObject.getWQLObject("MD_PD_ProductMaterialSet"); - WQLObject MD_ME_ProductMaterialExt = WQLObject.getWQLObject("md_me_producmaterialext"); WQLObject MD_PD_FormingMaterial = WQLObject.getWQLObject("MD_PD_FormingMaterial"); //是否二次投料 String is_again_put = json.getString("is_again_put"); @@ -1639,6 +1659,46 @@ public class AutoformulaServiceImpl implements AutoformulaService { if(MaterialSets.size() == 0){ throw new BadRequestException("产品"+material_code+"未配置新料模式可配粉软废信息!"); } + + //获取add_rate + Map add_rate_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("add_rate"); + } + )); + + //获取net_rate + Map net_rate_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("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"); + } + )); + //获取库存集合 JSONArray ivts = new JSONArray(); @@ -1662,19 +1722,13 @@ public class AutoformulaServiceImpl implements AutoformulaService { .addParam("quality_scode","02") .addParam("flag","22") .process().getResultJSONArray(0); - double add_rate = MaterialSet.getDouble("add_rate"); + for(int j=0;j add_rate_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("add_rate"); + } + )); + + //获取net_rate + Map net_rate_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("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)) { @@ -2944,35 +3033,36 @@ public class AutoformulaServiceImpl implements AutoformulaService { if("1".equals(value)){ value_is_active = "1"; } + String allmaterialId = " "; + if (ObjectUtil.isNotEmpty(MaterialSets)){ + allmaterialId = "(\""+MaterialSets.stream().map(o -> ((JSONObject) o).getString("set_material_id")).collect(Collectors.joining("\",\""))+"\")"; + } //获取库存集合 JSONArray ivts = new JSONArray(); - for(int i=0;i= sum_ivt_qty){ - jo.put("can_qty",sum_ivt_qty); - }else{ - jo.put("can_qty",can_qty); - } + JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("mater_ids",allmaterialId) + .addParam("is_active",value_is_active) + .addParam("quality_scode","02") + .addParam("workorder_id",workorder_id) + .addParam("flag","22") + .process().getResultJSONArray(0); + for(int j=0;j= sum_ivt_qty){ + jo.put("can_qty",sum_ivt_qty); + }else{ + jo.put("can_qty",can_qty); } + ivts.add(jo); } if(ivts.size()!=0){ //软废纯粉库存总量 @@ -2991,14 +3081,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { if(can_left_qty <=0){ continue; } - JSONObject ProductMaterialExt = MD_ME_ProductMaterialExt.query("material_id='"+ivt_material_id+"'").uniqueResult(0); - if(ProductMaterialExt ==null){ - throw new BadRequestException("软废"+ivt.getString("material_code")+" "+ivt.getString("material_name")+"未配置成品物料扩展信息!"); - } - double net_rate = ProductMaterialExt.getDouble("net_rate"); - if(net_rate==0){ - throw new BadRequestException("软废"+ivt.getString("material_code")+" "+ivt.getString("material_name")+"未配置纯粉系数!"); - } + double net_rate = net_rate_map.get(ivt_material_id); if(can_qty <= can_left_qty){ can_qty = can_qty; can_jo.put("can_left_qty",can_left_qty-can_qty); @@ -3217,9 +3300,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { JSONObject autoCalculationBy02_ruanfei(JSONObject json){ //定义返回值 JSONObject ret = new JSONObject(); - WQLObject st_ivt_structivt = WQLObject.getWQLObject("st_ivt_structivt"); WQLObject MD_PD_ProductMaterialSet = WQLObject.getWQLObject("MD_PD_ProductMaterialSet"); - WQLObject MD_ME_ProductMaterialExt = WQLObject.getWQLObject("md_me_producmaterialext"); WQLObject MD_PD_FormingMaterial = WQLObject.getWQLObject("MD_PD_FormingMaterial"); //是否二次投料 String is_again_put = json.getString("is_again_put"); @@ -3268,7 +3349,7 @@ public class AutoformulaServiceImpl implements AutoformulaService { .addParam("flag","7") .process().getResultJSONArray(0); if(MaterialSets.size() == 0){ - throw new BadRequestException("产品"+material_code+"未配置新料模式可配粉软废信息!"); + throw new BadRequestException("产品"+material_code+"未配置改配模式可配粉软废信息!"); } 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); @@ -3280,6 +3361,44 @@ public class AutoformulaServiceImpl implements AutoformulaService { if("1".equals(value)){ value_is_active = "1"; } + //获取add_rate + Map add_rate_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("add_rate"); + } + )); + + //获取net_rate + Map net_rate_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("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"); + } + )); //获取库存集合 JSONArray ivts = new JSONArray(); for(int i=0;i rf_plan_map = new HashMap(); + + if(waste_limit_up!=0){//添加软废 + //R下 + double waste_limit_down_weight = workorder_qty * waste_limit_down/100.0; + //获取可分配的软废集合 + JSONArray MaterialSets = + WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",material_id) + .addParam("set_type","02") + .addParam("material_code","%"+material_code+"%") + .addParam("flag","8") + .process().getResultJSONArray(0); + if(MaterialSets.size() == 0){ + throw new BadRequestException("产品"+material_code+"未配置合批模式可配粉软废信息!"); + }else{ + //获取add_rate + Map add_rate_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("add_rate"); + } + )); + + //获取net_rate + Map net_rate_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("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)) { + throw new BadRequestException("是否开启软废限制系统参数查询失败!"); + } + String value = param.getString("value"); + String value_is_active = ""; + if("1".equals(value)){ + value_is_active = "1"; + } + + String allmaterialId = " "; + if (ObjectUtil.isNotEmpty(MaterialSets)){ + allmaterialId = "(\""+MaterialSets.stream().map(o -> ((JSONObject) o).getString("set_material_id")).collect(Collectors.joining("\",\""))+"\")"; + } + //获取库存集合 + JSONArray ivts = new JSONArray(); + JSONArray now_ivts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("mater_ids",allmaterialId) + .addParam("is_active",value_is_active) + .addParam("quality_scode","02") + .addParam("workorder_id",workorder_id) + .addParam("flag","9") + .process().getResultJSONArray(0); + + for(int j=0;j= sum_ivt_qty){ + jo.put("can_qty",sum_ivt_qty); + }else{ + jo.put("can_qty",can_qty); + } + ivts.add(jo); + } + if(ivts.size()!=0){ + //软废纯粉库存总量 + double rf_ivts = 0; + JSONArray ivts_new = new JSONArray(); + for(int i=0;i=waste_limit_down_weight){//软废库存足够 + JSONObject ret = this.autoCalculationBy03_ruanfei(json); + 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+"配粉开单失败,软废库存不足!"); + } + }else{ + throw new BadRequestException("产品"+material_code+"配粉开单失败,软废库存不足!"); + } + } + + } + /*12、分别返回主桶、副桶配粉物料: + 单次投料:主桶:新料+软废+成型剂; + 二次投料:主桶:新料+成型剂;副桶:各软废 + 其中:软废还要返回各成型剂含量*/ + //主桶 + 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) -> { + //转成JSON对象中保存的值类型 + double a = Double.parseDouble(o1.getString("seqno")); + double b = Double.parseDouble(o2.getString("seqno")); + // 如果a, b数据类型为int,可直接 return a - b ;(升序,降序为 return b - a;) + if (a > b) { //降序排列,升序改成a>b + return 1; + } else if(a == b) { + return 0; + } else { + return -1; + } + }); + xl_list = JSONArray.parseArray(JSON.toJSONString(list)); + + xl_list.forEach((value)->{ + JSONObject jo = (JSONObject) value; + jo.put("bucket_type","01"); + tableDtl.add(jo); + }); + } + rf_list.forEach((value)->{ + JSONObject jo = (JSONObject) value; + jo.put("bucket_type","01"); + tableDtl.add(jo); + }); + yzj_list.forEach((value)->{ + JSONObject jo = (JSONObject) value; + jo.put("is_need_manage","1"); + jo.put("bucket_type","01"); + tableDtl.add(jo); + }); + cw_list.forEach((value)->{ + JSONObject jo = (JSONObject) value; + jo.put("bucket_type","01"); + tableDtl.add(jo); + }); + cxj_list.forEach((value)->{ + JSONObject jo = (JSONObject) value; + jo.put("bucket_type","01"); + tableDtl.add(jo); + }); + JSONArray dtl_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)){//碳化钨新料 + + //获取修正值 + double change_qty = this.getWCChange(jo.getString("material_id"),jo.getString("pcsn")); + jo.put("change_qty",change_qty); + //获取碳含量 + 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"); + } + dtl_new.add(jo); + } + JSONObject result = new JSONObject(); + result.put("tabledis",tabledis); + result.put("tableDtl",dtl_new); + return result; + } + + + /** + * 合批含软废 + * @param json + * @return + */ + JSONObject autoCalculationBy03_ruanfei(JSONObject json){ + //定义返回值 + JSONObject ret = new JSONObject(); + //工令 + String workorder_id = json.getString("workorder_id"); + //软废下限 + double waste_limit_down = json.getDouble("waste_limit_down"); + //软废上限 + double waste_limit_up = 100.0; + //总重 + double workorder_qty = json.getDouble("workorder_qty"); + //成品碳平衡 + double c_balance = json.getDouble("c_balance"); + //成品物料id + String material_id = json.getString("material_id"); + //成品物料编码 + String material_code = json.getString("material_code"); + //需配软废集合 + JSONArray rf_list = new JSONArray(); + //需配新料集合 + JSONArray xl_list = new JSONArray(); + //new + JSONArray rf_list2 = new JSONArray(); + //需配成型剂集合 + JSONArray cxj_list = new JSONArray(); + //需抑制剂剂集合 + JSONArray yzj_list = new JSONArray(); + //需补碳粉钨粉集合 + JSONArray cw_list = new JSONArray(); + //new + JSONArray xl_list2 = new JSONArray(); + //需分配新料重量 + double new_qty = workorder_qty; + //纯粉重量 + double net_qty = workorder_qty; + //1.需添加软废 + //R下 + double waste_limit_down_weight = workorder_qty * waste_limit_down/100.0; + + //rf最高开单重量 + HashMap rf_plan_map = new HashMap(); + //获取可分配的软废集合 + JSONArray MaterialSets = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",material_id) + .addParam("set_type","02") + .addParam("material_code","%"+material_code+"%") + .addParam("flag","8") + .process().getResultJSONArray(0); + if(MaterialSets.size() == 0){ + throw new BadRequestException("产品"+material_code+"未配置合批模式可配粉软废信息!"); + } + 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)) { + throw new BadRequestException("是否开启软废限制系统参数查询失败!"); + } + String value = param.getString("value"); + String value_is_active = ""; + if("1".equals(value)){ + value_is_active = "1"; + } + + double cw_limit_down = 0; + JSONObject param2 = wo_param.query("is_active='1' and is_delete='0' and code='CW_LIMIT_DOWN'").uniqueResult(0); + if (ObjectUtil.isEmpty(param2)) { + throw new BadRequestException("合批配碳/钨下限 系统参数查询失败!"); + } + cw_limit_down = param2.getDouble("value"); + + + //获取add_rate + Map add_rate_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("add_rate"); + } + )); + + //获取net_rate + Map net_rate_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("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"); + } + )); + + //获取库存集合 + JSONArray ivts = new JSONArray(); + for(int i=0;i= sum_ivt_qty){ + jo.put("can_qty",sum_ivt_qty); + }else{ + jo.put("can_qty",can_qty); + } + ivts.add(jo); + } + } + if(ivts.size()!=0){ + //1.计算配粉所需重量环节 + JSONArray bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",material_id) + .addParam("is_need_manage","1") + .addParam("flag","1") + .process().getResultJSONArray(0); + if(bomdlts.size() == 0 ){ + throw new BadRequestException("当前成品"+material_code+" "+json.getString("material_name")+",bom异常!"); + } + //各bom明细配粉开单需重量 + HashMap bomdlts_need_map = new HashMap(); + //软废Map + HashMap rf_map = new HashMap(); + //各批次碳化钨配粉开单重量 + JSONArray bomdlts_Cr3C2 = new JSONArray(); + //各碳化乌含量百比分之和 + double sum_Cr3C2 = 0; + for(int i=0;i=waste_limit_down_weight){ + //需配软废总重 + double rf_total_weight = 0; + //需配软废纯粉总重 + double rf_net_total_weight = 0; + outer: + for(int i=0;i doubles = new ArrayList(); + doubles.add(ivt_qty); + doubles.add(can_left_qty); + //doubles集合 + HashMap doubles_map = new HashMap(); + //获取软废Bom + JSONArray rf_bomdlts = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",rf_material_id) + .addParam("is_need_manage","1") + .addParam("flag","1") + .process().getResultJSONArray(0); + if(rf_bomdlts.size()==0){ + throw new BadRequestException("物料"+ivt_new.getString("material_code")+" "+ivt_new.getString("material_name")+"未配置物料bom!"); + } + //该软废碳化钨总含量 + double rf_Cr3C2 = 0.0; + //b、若Y1、X1、X2…中有等于0的,R2中含量>0,则跳过此软废,进行下一软废计算; + for(int j=0;j{ + String fi_bomdtl_material_id = fi_bomdtl.getString("material_id"); + //获取软废bom明细对应含量 + double fi_bomdtl_standard_rate = fi_bomdtl.getDouble("standard_rate"); + //R1p*纯粉系数*h1 + double now_qty = rf_up_formula_qty*(net_rate/100.0)*(fi_bomdtl_standard_rate/100.0); + //更新产品所需物料的所需重量 + JSONObject bomdlt = bomdlts_need_map.get(fi_bomdtl_material_id); + double left_qty = bomdlt.getDouble("left_qty"); + left_qty = NumberUtil.round(left_qty,3).doubleValue(); + if(left_qty{ + 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;i0){ + continue; + } + double ivt_qty = now_ivt.getDouble("sum_ivt_qty"); + ivt_qty = NumberUtil.roundDown(ivt_qty,3).doubleValue(); + if(ivt_qty <=0 || ivt_qty<0.01){ + continue; + } + if(left_qty0){ + throw new BadRequestException("物料"+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); + } + }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); + + 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{ + //若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")) + .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_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减=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")); + } + //计算非碳化钨需补重量 + 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); + } + }); + }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); + } + } + }); + //R3p减=W补+Y1补+Z1补+ Z2补 + double W_bu = NumberUtil.round(R3p_jian - sum_bu.get(),3).doubleValue(); + if(W_bu<=0) { + if (rf_list.size() == 1) { + throw new BadRequestException("无解!"); + } else { + flag = false;//进入设R3p减=R3p,解方程 + } + }else{ + //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; + now_bomdtl.put("formula_qty",Y1p); + now_bomdtl.put("need_qty",Y1p); + now_bomdtl.put("is_flag","-1"); + bomdlts_need_map.put(key,now_bomdtl); + } + } + }); + // R3p=R3p-R3p减/ R3纯粉系数 + double r3_formula_qty = R3p.getDouble("formula_qty"); + r3_formula_qty = NumberUtil.round(r3_formula_qty - R3p_jian/(R3p.getDouble("net_rate")/100.0),3).doubleValue(); + R3p.put("formula_qty",r3_formula_qty); + rf_map.put(R3p.getString("stockrecord_id"),R3p); + if(r3_formula_qty<=0){ + rf_map.remove(R3p.getString("stockrecord_id")); + } + + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } + } + } + //R3p减=R3p + if(!flag){ + //R2的bom碳化钨含量 + double rf2_Cr3C2 = R2p.getDouble("rf_Cr3C2")/100.0; + //R2碳平衡 + double is_tan2 = R2p.getDouble("is_tan")/100.0; + //R3p减 + double R3p_jian = R3p.getDouble("formula_qty"); + //R3p减*R3的bom碳化钨含量*R3碳平衡=CT1-CT2 + double R2p_jian = (CT1-CT2-R3p_jian*rf3_Cr3C2*is_tan3)/rf2_Cr3C2/is_tan2; + //bj_bomdlts_map中所有需补重量和 + AtomicReference sum_bu = new AtomicReference<>(0.0); + //计算非碳化钨需补重量 + bj_bomdlts_map.forEach((key,bj_bomdlt)->{ + //大于等于为共有 + if(bj_bomdlt>=2){ + //获取成品当前bomdtl + JSONObject now_bomdtl = bomdlts_need_map.get(key); + //获取需配重量 + double Y1p = now_bomdtl.getDouble("need_qty"); + if(rf3_bomdlts_map.containsKey(key)){ + //获取软废当前bomdtl + JSONObject rf_bomdtl = rf3_bomdlts_map.get(key); + //获取软废Y1含量 + double standard_rate = rf_bomdtl.getDouble("standard_rate"); + //Y1补=R3p减*Y1含量 + double Y1_bu = R3p_jian *(standard_rate/100.0); + sum_bu.set(sum_bu.get() + Y1_bu); + } + + 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); + } + } + }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; + } + double ivt_qty = now_ivt.getDouble("sum_ivt_qty"); + ivt_qty = NumberUtil.roundDown(ivt_qty,3).doubleValue(); + if(ivt_qty<=0 || ivt_qty<0.01){ + continue; + } + if(left_qty0){ + throw new BadRequestException("物料"+bomdlts_plan.getString("material_code")+" "+bomdlts_plan.getString("material_name")+",新料库存不足!"); + } + }else{ + bomdlts_plan.put("is_rf_xl","1"); + bomdlts_plan.put("material_type","01"); + bomdlts_plan.put("ivt_level","01"); + bomdlts_plan.put("is_active","1"); + bomdlts_plan.put("quality_scode","01"); + xl_list3.add(bomdlts_plan); + } + } + }); + //除了is_flag为-1的在上面代码已重新分配过,其他直接加入 xl_list3 + for(int i=0;i 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); + ret.put("xl_list",xl_list2); + ret.put("cxj_list",cxj_list); + ret.put("yzj_list",yzj_list); + ret.put("cw_list",cw_list); + return ret; + } + /** * 按纯新料模式,单次投料 * @param map diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/wql/QPF_AUTOFORMULA01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/wql/QPF_AUTOFORMULA01.wql index 931abd1a..0490dceb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/wql/QPF_AUTOFORMULA01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/wql/QPF_AUTOFORMULA01.wql @@ -30,6 +30,7 @@ 输入.set_type TYPEAS s_string 输入.set_material_id TYPEAS s_string 输入.material_type_id TYPEAS f_string + 输入.mater_ids TYPEAS f_string [临时表] @@ -184,6 +185,9 @@ OPTION 输入.material_id <> "" structivt.material_id = 输入.material_id ENDOPTION + OPTION 输入.mater_ids <> "" + structivt.material_id in 输入.mater_ids + ENDOPTION OPTION 输入.is_active <> "" structivt.is_active = 输入.is_active ENDOPTION @@ -196,7 +200,7 @@ OPTION 输入.is_pure <> "" stockmaterialext.is_pure = 输入.is_pure ENDOPTION - ORDER BY structivt.material_id,structivt.ivt_level desc,structivt.pcsn, structivt.sum_qty desc + ORDER BY structivt.material_id,structivt.ivt_level desc, structivt.pcsn, structivt.sum_qty desc ENDSELECT ENDQUERY ENDIF @@ -330,12 +334,14 @@ QUERY SELECT ProductMaterialSet.*, + producmaterialext.net_rate, + producmaterialext.c_balance, classstandard.class_code FROM MD_PD_ProductMaterialSet ProductMaterialSet - left join md_me_materialbase materialbase on materialbase.material_id = ProductMaterialSet.set_material_id - LEFT JOIN md_pb_classstandard classstandard ON classstandard.class_id = materialbase.material_type_id - LEFT JOIN md_me_producmaterialext producmaterialext ON producmaterialext.material_id = materialbase.material_id + inner join md_me_materialbase materialbase on materialbase.material_id = ProductMaterialSet.set_material_id + inner JOIN md_pb_classstandard classstandard ON classstandard.class_id = materialbase.material_type_id + inner JOIN md_me_producmaterialext producmaterialext ON producmaterialext.material_id = materialbase.material_id WHERE 1 = 1 and producmaterialext.net_rate>0 @@ -354,3 +360,128 @@ ENDQUERY ENDIF + IF 输入.flag = "8" + QUERY + SELECT + ProductMaterialSet.*, + producmaterialext.net_rate, + producmaterialext.c_balance, + classstandard.class_code + FROM + MD_PD_ProductMaterialSet ProductMaterialSet + inner join md_me_materialbase materialbase on materialbase.material_id = ProductMaterialSet.set_material_id + inner JOIN md_pb_classstandard classstandard ON classstandard.class_id = materialbase.material_type_id + inner JOIN md_me_producmaterialext producmaterialext ON producmaterialext.material_id = materialbase.material_id + WHERE + 1 = 1 + and producmaterialext.net_rate>0 + and ProductMaterialSet.add_rate>0 + OPTION 输入.material_id <> "" + ProductMaterialSet.material_id = 输入.material_id + ENDOPTION + OPTION 输入.set_material_id <> "" + ProductMaterialSet.set_material_id = 输入.set_material_id + ENDOPTION + OPTION 输入.set_type <> "" + ProductMaterialSet.set_type = 输入.set_type + ENDOPTION + OPTION 输入.material_code <> "" + materialbase.material_code like 输入.material_code + ENDOPTION + order by classstandard.class_code,materialbase.material_code + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "9" + QUERY + SELECT + structivt.*, + mb.material_name, + mb.material_code, + mb.material_type_id, + stockmaterialext.is_need_move, + CASE + WHEN FormulaDtl3.used__qty > 0 THEN + structivt.sum_qty - FormulaDtl3.used__qty ELSE structivt.sum_qty + END AS sum_ivt_qty + FROM + ( + SELECT + SUM( ivt.canuse_qty ) AS sum_qty, + ivt.qty_unit_id, + ivt.qty_unit_name, + ivt.material_id, + ivt.pcsn, + ivt.is_active, + ivt.ivt_level, + ivt.quality_scode + FROM + st_ivt_structivt ivt + GROUP BY + ivt.material_id, + ivt.pcsn, + ivt.is_active, + ivt.ivt_level, + ivt.quality_scode, + ivt.qty_unit_id, + ivt.qty_unit_name + ) structivt + LEFT JOIN md_me_materialbase mb ON mb.material_id = structivt.material_id + LEFT JOIN md_me_stockmaterialext stockmaterialext ON mb.material_id = stockmaterialext.material_id + LEFT JOIN ( + SELECT + SUM( FormulaDtl2.formula_qty - FormulaDtl2.put_qty ) AS used__qty, + FormulaDtl2.material_id, + FormulaDtl2.pcsn, + FormulaDtl2.is_active, + FormulaDtl2.ivt_level, + FormulaDtl2.quality_scode + FROM + PDM_BI_FormulaDtl FormulaDtl2 + LEFT JOIN PDM_BI_Formula Formula2 ON FormulaDtl2.formula_id = Formula2.formula_id + WHERE + 1 = 1 + AND FormulaDtl2.STATUS <> '99' + OPTION 输入.workorder_id <> "" + Formula2.workorder_id <> 输入.workorder_id + ENDOPTION + GROUP BY + FormulaDtl2.material_id, + FormulaDtl2.pcsn, + FormulaDtl2.is_active, + FormulaDtl2.ivt_level, + FormulaDtl2.quality_scode + ) FormulaDtl3 ON ( + FormulaDtl3.material_id = structivt.material_id + AND FormulaDtl3.pcsn = structivt.pcsn + AND FormulaDtl3.is_active = structivt.is_active + AND FormulaDtl3.ivt_level = structivt.ivt_level + AND FormulaDtl3.quality_scode = structivt.quality_scode + ) + WHERE + 1 = 1 + AND structivt.sum_qty > 0 + OPTION 输入.material_id <> "" + structivt.material_id = 输入.material_id + ENDOPTION + OPTION 输入.mater_ids <> "" + structivt.material_id in 输入.mater_ids + ENDOPTION + OPTION 输入.is_active <> "" + structivt.is_active = 输入.is_active + ENDOPTION + OPTION 输入.quality_scode <> "" + structivt.quality_scode = 输入.quality_scode + ENDOPTION + OPTION 输入.prior_level <> "" + structivt.ivt_level <= 输入.prior_level + ENDOPTION + OPTION 输入.is_pure <> "" + stockmaterialext.is_pure = 输入.is_pure + ENDOPTION + ORDER BY structivt.material_id,structivt.ivt_level desc, sum_ivt_qty + ENDSELECT + ENDQUERY + ENDIF + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql index 01c4bfbc..d297dc59 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql @@ -17,6 +17,7 @@ 输入.ext_id TYPEAS s_string 输入.material_id TYPEAS s_string 输入.pcsn TYPEAS s_string + 输入.mater_ids TYPEAS f_string [临时表] @@ -155,6 +156,9 @@ OPTION 输入.material_id <> "" PURCHASE.ITEM_ID = 输入.material_id ENDOPTION + OPTION 输入.mater_ids <> "" + PURCHASE.ITEM_ID in 输入.mater_ids + ENDOPTION GROUP BY PURCHASE.ITEM_ID,PURCHASE.VBILLCODE, PURCHASE.ITEM_CODE, PURCHASE.ITEM_NAME ENDSELECT ENDQUERY diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java index ef52fa5a..b26ce381 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java @@ -493,10 +493,20 @@ public class StatisticalReportServiceImpl implements StatisticalReportService { ext_id = mater_jo.getString("ext_id"); } } + //获取物料ids + JSONArray maters = WQL.getWO("statistical_report_query_02") + .addParam("flag", "3") + .process().getResultJSONArray(0); + + String allmaterialId = " "; + if (ObjectUtil.isNotEmpty(maters)){ + allmaterialId = "(\""+maters.stream().map(o -> ((JSONObject) o).getString("ext_id")).collect(Collectors.joining("\",\""))+"\")"; + } JSONArray ja = WQL.getWO("QL_ERP") .setDbname("dataSource1") .addParam("flag", "6") .addParam("material_id", ext_id) + .addParam("mater_ids", allmaterialId) .process().getResultJSONArray(0); return ja; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/wql/statistical_report_query_02.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/wql/statistical_report_query_02.wql index 73abfe05..08cf09da 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/wql/statistical_report_query_02.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/wql/statistical_report_query_02.wql @@ -67,6 +67,7 @@ INNER JOIN md_me_materialbase mater ON structivt.material_id = mater.material_id WHERE structivt.quality_scode = '01' + AND mater.material_type_id IN ( '1503644361664106496', '1503644361697660928', '1503644362192588800', '1503644362234531840', '1503644362788179968', '1503644362838511616' ) OPTION 输入.material_id <> "" structivt.material_id = 输入.material_id ENDOPTION @@ -94,6 +95,7 @@ mst.is_delete = '0' AND mst.STATUS <> '99' AND dtl.STATUS <> '99' + AND mater.material_type_id IN ( '1503644361664106496', '1503644361697660928', '1503644362192588800', '1503644362234531840', '1503644362788179968', '1503644362838511616' ) OPTION 输入.material_id <> "" dtl.material_id = 输入.material_id ENDOPTION @@ -108,6 +110,7 @@ mb.material_id, mb.material_name, mb.material_code, + mb.ext_id, class.parent_class_id, ( CASE diff --git a/mes/qd/src/views/wms/pf/initformula/DivDialog.vue b/mes/qd/src/views/wms/pf/initformula/DivDialog.vue index 43422f26..e39a3629 100644 --- a/mes/qd/src/views/wms/pf/initformula/DivDialog.vue +++ b/mes/qd/src/views/wms/pf/initformula/DivDialog.vue @@ -43,7 +43,7 @@ :controls="false" :precision="3" :min="1" - disabled + :disabled="type3" style="width: 210px" /> @@ -432,6 +432,7 @@ export default { structshow5: false, struct2type: '', button1: true, + type3: true, button2: true, button3: true, tableDtl: [], @@ -647,6 +648,11 @@ export default { } else { this.button3 = true } + if (row === '03') { + this.type3 = false + } else { + this.type3 = true + } }, storChange2(row) { if (this.form.is_again_put === '1' && this.form.formula_type === '00') { diff --git a/mes/qd/src/views/wms/statistics/materPlan/StructIvt2.vue b/mes/qd/src/views/wms/statistics/materPlan/StructIvt2.vue index 8834a92e..1e508ec7 100644 --- a/mes/qd/src/views/wms/statistics/materPlan/StructIvt2.vue +++ b/mes/qd/src/views/wms/statistics/materPlan/StructIvt2.vue @@ -42,8 +42,11 @@ @@ -104,6 +107,7 @@ export default { report.query4().then(res => { this.XLList = res }) + this.MyQuery2() }, /** * 接受父组件传值 @@ -136,6 +140,43 @@ export default { this.fullscreenLoading = false }) }, + getSummaries(param) { + const { columns, data } = param + const sums = [] + columns.forEach((column, index) => { + if (index === 0) { + sums[index] = '合计' + return + } + const values = data.map(item => Number(item[column.property])) + if (column.property === 'receive_qty') { + const total = values.reduce((prev, curr) => { + const value = Number(curr) + if (!isNaN(value)) { + return prev + curr + } else { + return prev + } + }, 0) + sums[index] = parseFloat(total).toFixed(3) + sums[index] + } + + if (column.property === 'noin_qty') { + const total = values.reduce((prev, curr) => { + const value = Number(curr) + if (!isNaN(value)) { + return prev + curr + } else { + return prev + } + }, 0) + sums[index] = parseFloat(total).toFixed(3) + sums[index] + } + }) + return sums + }, MyQuery2() { this.fullscreenLoading = true report.query2(this.queryrow).then(res => { diff --git a/mes/qd/src/views/wms/statistics/materPlan/StructIvt3.vue b/mes/qd/src/views/wms/statistics/materPlan/StructIvt3.vue index cd385ec5..958f7155 100644 --- a/mes/qd/src/views/wms/statistics/materPlan/StructIvt3.vue +++ b/mes/qd/src/views/wms/statistics/materPlan/StructIvt3.vue @@ -42,8 +42,11 @@ @@ -103,6 +106,7 @@ export default { report.query4().then(res => { this.XLList = res }) + this.MyQuery2() }, /** * 接受父组件传值 @@ -135,6 +139,43 @@ export default { this.fullscreenLoading = false }) }, + getSummaries(param) { + const { columns, data } = param + const sums = [] + columns.forEach((column, index) => { + if (index === 0) { + sums[index] = '合计' + return + } + const values = data.map(item => Number(item[column.property])) + if (column.property === 'sumqty') { + const total = values.reduce((prev, curr) => { + const value = Number(curr) + if (!isNaN(value)) { + return prev + curr + } else { + return prev + } + }, 0) + sums[index] = parseFloat(total).toFixed(3) + sums[index] + } + + if (column.property === 'notqty') { + const total = values.reduce((prev, curr) => { + const value = Number(curr) + if (!isNaN(value)) { + return prev + curr + } else { + return prev + } + }, 0) + sums[index] = parseFloat(total).toFixed(3) + sums[index] + } + }) + return sums + }, MyQuery2() { this.fullscreenLoading = true report.query3(this.queryrow).then(res => { diff --git a/mes/qd/src/views/wms/statistics/materPlan/StructIvt4.vue b/mes/qd/src/views/wms/statistics/materPlan/StructIvt4.vue index ef7343f9..fbf6a2da 100644 --- a/mes/qd/src/views/wms/statistics/materPlan/StructIvt4.vue +++ b/mes/qd/src/views/wms/statistics/materPlan/StructIvt4.vue @@ -42,8 +42,11 @@ @@ -100,6 +103,7 @@ export default { report.query4().then(res => { this.XLList = res }) + this.MyQuery2() }, /** * 接受父组件传值 @@ -132,6 +136,30 @@ export default { this.fullscreenLoading = false }) }, + getSummaries(param) { + const { columns, data } = param + const sums = [] + columns.forEach((column, index) => { + if (index === 0) { + sums[index] = '合计' + return + } + const values = data.map(item => Number(item[column.property])) + if (column.property === 'qty') { + const total = values.reduce((prev, curr) => { + const value = Number(curr) + if (!isNaN(value)) { + return prev + curr + } else { + return prev + } + }, 0) + sums[index] = parseFloat(total).toFixed(3) + sums[index] + } + }) + return sums + }, MyQuery2() { this.fullscreenLoading = true report.query1(this.queryrow).then(res => {