diff --git a/mes/hd/nladmin-system/pom.xml b/mes/hd/nladmin-system/pom.xml index c846b38c..fb8fdf0b 100644 --- a/mes/hd/nladmin-system/pom.xml +++ b/mes/hd/nladmin-system/pom.xml @@ -44,12 +44,12 @@ easyword 1.1.4 - + net.dreamlu diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/em/service/impl/EquipmentfileServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/em/service/impl/EquipmentfileServiceImpl.java index fbcb60d4..011805dd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/em/service/impl/EquipmentfileServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/em/service/impl/EquipmentfileServiceImpl.java @@ -172,6 +172,9 @@ public class EquipmentfileServiceImpl implements EquipmentfileService { String nowStatus = jsonMst.getString("status"); HashMap map = new HashMap<>(); if ("10".equals(status)) {//启用 + if (!"11,00".contains(nowStatus)) { + throw new BadRequestException("只有停用、生成状态才可启用!"); + } if (StrUtil.isEmpty(jsonMst.getString("device_bom_id"))) { throw new BadRequestException("设备BOM不能为空!"); } @@ -200,7 +203,9 @@ public class EquipmentfileServiceImpl implements EquipmentfileService { EM_BI_DeviceLifeCycle.insert(jo2); } else if ("11".equals(status)) {//禁用 map.put("status", "11"); - + if (!"10".contains(nowStatus)) { + throw new BadRequestException("只有启用状态才可停用!"); + } JSONObject jo2 = new JSONObject(); jo2.put("devicechangedtl_id", IdUtil.getSnowflake(1, 1).nextId()); jo2.put("devicerecord_id", jsonMst.getString("devicerecord_id")); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java index 56df23d8..1750a679 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/AutoformulaServiceImpl.java @@ -592,36 +592,11 @@ public class AutoformulaServiceImpl implements AutoformulaService { if(bomdlts_Cr3C2.size()==1){//只配库存明细时 //假设碳粉重量为W JSONObject bomdlt_Cr3C2 = bomdlts_Cr3C2.getJSONObject(0); - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); - //解得碳粉重量 - double C = ((c_balance/100.0)*X22p-X22p*(X22/100.0))/(1-X22/100.0); - if(C<0){ - throw new BadRequestException("加碳粉为负数,当前配粉无解!"); - } - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //碳化钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","0"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; - bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); + + AtomicReference Z_sum = new AtomicReference<>(0.0); //计算不需要移库的添加剂(抑制剂) yzj_map.forEach((key,tjj_map_jo)->{ //获取添加剂id @@ -639,50 +614,89 @@ public class AutoformulaServiceImpl implements AutoformulaService { //质保书含量比 double value = tjj_finished.getDouble("value"); //当前含量重量 - double finished = bom_ivt_qty*value/100.0; + double finished = X22p*value/100.0; //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - yzj_map.put(tjj_material_id,tjj_map_jo); + Z_sum.set(Z_sum.get() + finished); } }); - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); - //判断已含添加剂与需配添加剂大小 - yzj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty= 0){ + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); } - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } - }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); + bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); + //计算不需要移库的添加剂(抑制剂) + yzj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty*value/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + yzj_map.put(tjj_material_id,tjj_map_jo); + } + }); + //判断已含添加剂与需配添加剂大小 + yzj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty Z_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + boolean flag = true; //设X21p减=0,解方程 if(flag){ - // X22p减 =产品碳平衡*(X11p+X12p+X21p+X22p)-总碳/(1- X22碳含量) - //C=X22p减 - //X22p减=产品碳平衡*(X11p+X12p+X21p+X22p)+ X22p减*X22碳含量-CT1 - double C = ((c_balance/100.0)*CT1_weight-CT1)/(1-X22/100.0); - if(C<0){ + // X22p减=[产品碳平衡*(X11p+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21)* X21碳含量+(X22p)* X22碳含量+Z已总)]/(1-X22碳含量) + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-(CT1+Z_sum.get()))/(1-X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ flag = false; - }else if(C>=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; - if(bom_ivt_qty<0){ + }else{ + //解得钨粉重量 + double C = X22_jian + Z_sum.get(); + if(C<0){ flag = false; - }else{ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - + }else if(C>=0){ bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); if(bom_ivt_qty<=0){ @@ -770,9 +795,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { } }); } - - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 yzj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -791,59 +813,37 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); } - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); } } - } } if(!flag){ //设X22p减=X22p,解方程 - //X21p减*=产品碳平衡*(X11p+X12p+X21p+X22p)-(X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-X22p/(1- X21碳含量) + // X21p减=[产品碳平衡*(X11p+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量+Z已总+X22p)]/(1-X21碳含量) + double X21_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get()) - (CT1-X22c) - X22p-Z_sum.get())/(1-X21/100.0); - // - //X21p减=[产品碳平衡*(X11p+X12p+X21p+X22p)-( X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p)]/ (1-X21碳含量) - double X21_jian = ((c_balance/100.0)*CT1_weight - (CT1-X22c) - X22p)/(1-X21/100.0); - if(X21_jian<0){ - throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); - } //解得钨粉重量 - double C = X22p + X21_jian; + double C = X22p + X21_jian + Z_sum.get(); if(C<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); + throw new BadRequestException("加碳粉为负数,当前配粉无解!"); }else if(C>=0){ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); //更新碳化钨配粉重量 double bom_ivt_qty = X21p-X21_jian; if(bom_ivt_qty<0){ @@ -883,8 +883,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { } }); } - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 yzj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -903,24 +901,23 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); } - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); } } } @@ -935,29 +932,46 @@ public class AutoformulaServiceImpl implements AutoformulaService { double X22 = FactoryWarranty.getDouble("is_tan"); //该批次配粉重量 double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); + + AtomicReference Z_sum = new AtomicReference<>(0.0); + //计算不需要移库的添加剂(抑制剂) + yzj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = X22p*value/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + //解得钨粉重量 - double W = X22p - (c_balance/100.0)*X22p/(X22/100.0); - if(W<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); - } - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); + double X22_jian = X22p - (c_balance/100.0)*(X22p+Z_sum.get())/(X22/100.0); //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-W; + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<=0){ + throw new BadRequestException("碳化钨为非正数,当前配粉无解!"); + } bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); //计算不需要移库的添加剂 yzj_map.forEach((key,tjj_map_jo)->{ //获取添加剂id @@ -998,8 +1012,29 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("is_active","1"); tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); + total_sum.set(total_sum.get() + need_qty-finished_qty); } }); + double W = new_qty - total_sum.get(); + if(W<0){ + throw new BadRequestException("加钨粉为负数,当前配粉无解!"); + } + if(W>0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } }else{//大于等于2条库存明细时 //最后一个为X22p JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); @@ -1022,126 +1057,59 @@ public class AutoformulaServiceImpl implements AutoformulaService { double X21c = X21p*X21/100.0; + + AtomicReference Z_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + boolean flag = true; //设X21p减=0,解方程 if(flag){ - // X22p减 = [X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+(X22p)* X22碳含量-产品碳平衡*(X11p+X12p+X21p+X22p)]/X22碳含量 - double W = (CT1 - (c_balance/100.0)*CT1_weight)/(X22/100.0); - if(W<0){ + //X22p减 = [(X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p* X22碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X22碳含量 + double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight+Z_sum.get()))/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ flag = false; - }else if(W>=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-W; - if(bom_ivt_qty<0){ - flag = false; - }else{ - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); - - bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - } - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double value = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*value/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - yzj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - //判断已含添加剂与需配添加剂大小 - yzj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty=0){ - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); - //更新碳化钨配粉重量 - double bom_ivt_qty = X21p-X21_jian; - bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); - if(bom_ivt_qty<0){ - throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); - } - bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + }else{ + bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); } - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + //循环碳化钨 for(int i=0;i0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); + } + } + } + if(!flag){ + //设X22p减=X22p,解方程 + //X21p减 =[( X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X21碳含量 + double X21_jian = ((CT1-X22c) - (c_balance/100.0)*(CT1_weight+ Z_sum.get()))/(X21/100.0); + if(X21_jian<0){ + throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); + } + //更新碳化钨配粉重量 + double bom_ivt_qty = X21p-X21_jian; + bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); + if(bom_ivt_qty<0){ + throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); + } + bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + } + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double value = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + yzj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + yzj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); + //钨分类id + W_weight.put("material_id","1503644362234531840"); + W_weight.put("material_name","钨粉"); + W_weight.put("material_code","09030103"); + W_weight.put("material_type","02"); + W_weight.put("is_need_move","0"); + W_weight.put("is_need_manage","1"); + W_weight.put("is_rf_xl","0"); + W_weight.put("ivt_level","01"); + W_weight.put("is_active","1"); + W_weight.put("quality_scode","01"); + cw_list.add(W_weight); } } } @@ -1550,28 +1639,58 @@ public class AutoformulaServiceImpl implements AutoformulaService { double X22 = FactoryWarranty.getDouble("is_tan"); //该批次配粉重量 double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); - //解得碳粉重量 - double C = ((c_balance/100.0)*X22p-X22p*(X22/100.0))/(1-X22/100.0); + + AtomicReference Z_sum = new AtomicReference<>(0.0); + //计算不需要移库的添加剂(抑制剂) + tjj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value_jo = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = X22p*value_jo/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + //解得碳粉重量 X22p减=[产品碳平衡*(X22p+Z已总)-Z已总- (X22p)* X22碳含量]/(1- X22碳含量) + double X22_jian = ((c_balance/100.0)*(X22p+ Z_sum.get())- Z_sum.get() -X22p*(X22/100.0))/(1-X22/100.0); + + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty < 0){ + throw new BadRequestException("碳化钨配粉结果为负数,当前配粉无解!"); + } + double C = X22_jian + Z_sum.get(); + if(C<0){ throw new BadRequestException("加碳粉为负数,当前配粉无解!"); } - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //碳化钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //碳化钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + } bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); //计算不需要移库的添加剂 @@ -1597,8 +1716,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map.put(tjj_material_id,tjj_map_jo); } }); - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 tjj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -1616,13 +1733,334 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("is_active","1"); tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); - if(finished_qty>0){ - W.set(W.get() + finished_qty); - } } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); + }else{//大于等于2条库粗你明细时 + //最后一个为X22p + JSONObject bomdlt_Cr3C2_X22p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-1); + //倒数第二为X21p + JSONObject bomdlt_Cr3C2_X21p = bomdlts_Cr3C2.getJSONObject(bomdlts_Cr3C2.size()-2); + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 + double X22p = bomdlt_Cr3C2_X22p.getDouble("bom_ivt_qty"); + + double X22c = X22p*X22/100.0; + //获取碳含量 + JSONObject FactoryWarranty_X21 = bomdlts_plan_map.get(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + //该批次含碳比 + double X21 = FactoryWarranty_X21.getDouble("is_tan"); + //该批次配粉重量 + double X21p = bomdlt_Cr3C2_X21p.getDouble("bom_ivt_qty"); + + double X21c = X21p*X21/100.0; + + AtomicReference Z_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value_jo = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value_jo/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + + boolean flag = true; + //设X21p减=0,解方程 + if(flag){ + // X22p减=[产品碳平衡*(X11p+X12p+X21p+X22p+Z已总) - (X11p* X11碳含量+X12p* X12碳含量+(X21)* X21碳含量+(X22p)* X22碳含量+Z已总)]/(1-X22碳含量) + double X22_jian = ((c_balance/100.0)*(CT1_weight+Z_sum.get())-(CT1+Z_sum.get()))/(1-X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ + flag = false; + }else{ + //解得钨粉重量 + double C = X22_jian + Z_sum.get(); + if(C<0){ + flag = false; + }else if(C>=0){ + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + } + bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + } + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty=0){ + //更新碳化钨配粉重量 + double bom_ivt_qty = X21p-X21_jian; + if(bom_ivt_qty<0){ + throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); + } + if(C>0){ + JSONObject C_weight = new JSONObject(); + C_weight.put("formula_qty",C); + //钨分类id + C_weight.put("material_id","1503644362788179968"); + C_weight.put("material_name","碳粉"); + C_weight.put("material_code","09030104"); + C_weight.put("material_type","02"); + C_weight.put("is_need_move","0"); + C_weight.put("is_need_manage","1"); + C_weight.put("is_tan","100"); + C_weight.put("is_rf_xl","1"); + C_weight.put("ivt_level","01"); + C_weight.put("is_active","1"); + C_weight.put("quality_scode","01"); + cw_list.add(C_weight); + } + + bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + if(bom_ivt_qty<=0){ + bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + } + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qtyCT2){//需配钨粉 + if(bomdlts_Cr3C2.size()==1){//只配库存明细时 + //假设钨粉重量为W + JSONObject bomdlt_Cr3C2 = bomdlts_Cr3C2.getJSONObject(0); + //获取碳含量 + JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); + //该批次含碳比 + double X22 = FactoryWarranty.getDouble("is_tan"); + //该批次配粉重量 + double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); + AtomicReference Z_sum = new AtomicReference<>(0.0); + //计算不需要移库的添加剂(抑制剂) + tjj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value_jo = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = X22p*value_jo/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + + //解得钨粉重量 + double X22_jian = X22p - (c_balance/100.0)*(X22p+Z_sum.get())/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<=0){ + throw new BadRequestException("碳化钨为非正数,当前配粉无解!"); + } + bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + + //计算不需要移库的添加剂 + tjj_map.forEach((key,tjj_map_jo)->{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) + .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty0){ + JSONObject W_weight = new JSONObject(); + W_weight.put("formula_qty",W); //钨分类id W_weight.put("material_id","1503644362234531840"); W_weight.put("material_name","钨粉"); @@ -1658,149 +2096,57 @@ public class AutoformulaServiceImpl implements AutoformulaService { double X21c = X21p*X21/100.0; + AtomicReference Z_sum = new AtomicReference<>(0.0); + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //质保书含量比 + double value_jo = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*value_jo/100.0; + //累计各碳化钨中已含添加剂重量 + Z_sum.set(Z_sum.get() + finished); + } + }); + } + boolean flag = true; //设X21p减=0,解方程 if(flag){ - // X22p减 =产品碳平衡*(X11p+X12p+X21p+X22p)-总碳/(1- X22碳含量) - double C = ((c_balance/100.0)*CT1_weight-CT1)/(1-X22/100.0); - if(C<0){ + //X22p减 = [(X11p* X11碳含量+X12p* X12碳含量+X21p* X21碳含量+X22p* X22碳含量)-产品碳平衡*(X11p+X12p+X21p+X22p+Z已总)]/X22碳含量 + double X22_jian = (CT1 - (c_balance/100.0)*(CT1_weight+Z_sum.get()))/(X22/100.0); + //更新碳化钨配粉重量 + double bom_ivt_qty = X22p-X22_jian; + if(bom_ivt_qty<0){ flag = false; - }else if(C>=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-C; - if(bom_ivt_qty<0){ - flag = false; - }else{ - - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - - bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - } - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - JSONObject W_weight = new JSONObject(); - AtomicReference W = new AtomicReference<>(0.0); - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty0){ - W.set(W.get() + finished_qty); - } - }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); - } - } - } - } - if(!flag){ - //设X22p减=X22p,解方程 - //X21p减*=产品碳平衡*(X11p+X12p+X21p+X22p)-(X11p* X11碳含量+X12p* X12碳含量+(X21p)* X21碳含量)-X22p/(1- X21碳含量) - double X21_jian = ((c_balance/100.0)*CT1_weight - (CT1-X22c) - X22p)/(1-X21/100.0); - if(X21_jian<0){ - throw new BadRequestException("碳化钨减掉结果为负数,当前配粉无解!"); - } - //解得钨粉重量 - double C = X22p + X21_jian; - if(C<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); - }else if(C>=0){ - JSONObject C_weight = new JSONObject(); - C_weight.put("formula_qty",C); - //钨分类id - C_weight.put("material_id","1503644362788179968"); - C_weight.put("material_name","碳粉"); - C_weight.put("material_code","09030104"); - C_weight.put("material_type","02"); - C_weight.put("is_need_move","0"); - C_weight.put("is_need_manage","1"); - C_weight.put("is_tan","100"); - C_weight.put("is_rf_xl","1"); - C_weight.put("ivt_level","01"); - C_weight.put("is_active","1"); - C_weight.put("quality_scode","01"); - cw_list.add(C_weight); - //更新碳化钨配粉重量 - double bom_ivt_qty = X21p-X21_jian; - bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); - if(bom_ivt_qty<0){ - throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); - } - bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); + }else{ + bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); + bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); + bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); } - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); + + //统计除钨以外其他总重 + AtomicReference total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); //循环碳化钨 for(int i=0;i W = new AtomicReference<>(0.0); //判断已含添加剂与需配添加剂大小 tjj_map.forEach((key,tjj_map_now)->{ //需配添加剂重量 @@ -1848,139 +2192,14 @@ public class AutoformulaServiceImpl implements AutoformulaService { tjj_map_now.put("is_active","1"); tjj_map_now.put("quality_scode","01"); yzj_list.add(tjj_map_now); - } - if(finished_qty>0){ - W.set(W.get() + finished_qty); + total_sum.set(total_sum.get() + need_qty-finished_qty); } }); - if(W.get() > 0){ - W_weight.put("formula_qty",W.get()); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); - } - } - } - } - }else if(CT1>CT2){//需配钨粉 - if(bomdlts_Cr3C2.size()==1){//只配库存明细时 - //假设钨粉重量为W - JSONObject bomdlt_Cr3C2 = bomdlts_Cr3C2.getJSONObject(0); - //获取碳含量 - JSONObject FactoryWarranty = bomdlts_plan_map.get(bomdlt_Cr3C2.getString("stockrecord_id")); - //该批次含碳比 - double X22 = FactoryWarranty.getDouble("is_tan"); - //该批次配粉重量 - double X22p = bomdlt_Cr3C2.getDouble("bom_ivt_qty"); - //解得钨粉重量 - double W = X22p - (c_balance/100.0)*X22p/(X22/100.0); - if(W<0){ - throw new BadRequestException("加钨粉为负数,当前配粉无解!"); - } - JSONObject W_weight = new JSONObject(); - W_weight.put("formula_qty",W); - //钨分类id - W_weight.put("material_id","1503644362234531840"); - W_weight.put("material_name","钨粉"); - W_weight.put("material_code","09030103"); - W_weight.put("material_type","02"); - W_weight.put("is_need_move","0"); - W_weight.put("is_need_manage","1"); - W_weight.put("is_rf_xl","0"); - W_weight.put("ivt_level","01"); - W_weight.put("is_active","1"); - W_weight.put("quality_scode","01"); - cw_list.add(W_weight); - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-W; - bomdlt_Cr3C2.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2.getString("stockrecord_id"),bomdlt_Cr3C2); - //计算不需要移库的添加剂 - tjj_map.forEach((key,tjj_map_jo)->{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",bomdlt_Cr3C2.getString("material_id")) - .addParam("pcsn",bomdlt_Cr3C2.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty=0){ - //更新碳化钨配粉重量 - double bom_ivt_qty = X22p-W; - if(bom_ivt_qty<0){ - flag = false; - }else{ + double W = new_qty - total_sum.get(); + /* if(W<0){ + throw new BadRequestException("加钨粉为负数,当前配粉无解!"); + }*/ + if(W>0){ JSONObject W_weight = new JSONObject(); W_weight.put("formula_qty",W); //钨分类id @@ -1995,74 +2214,90 @@ public class AutoformulaServiceImpl implements AutoformulaService { W_weight.put("is_active","1"); W_weight.put("quality_scode","01"); cw_list.add(W_weight); - - bomdlt_Cr3C2_X22p.put("bom_ivt_qty",bom_ivt_qty); - bomdlts_plan_map.put(bomdlt_Cr3C2_X22p.getString("stockrecord_id"),bomdlt_Cr3C2_X22p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - } - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty total_sum = new AtomicReference<>(0.0); + + bomdlts_plan_map.forEach((key,bomdlts_plan_now)->{ + //需配添加剂重量 + double bom_ivt_qty_now = NumberUtil.round(bomdlts_plan_now.getDouble("bom_ivt_qty"),3).doubleValue(); + total_sum.set(total_sum.get() + bom_ivt_qty_now); + }); + + //循环碳化钨 + for(int i=0;i{ + //获取添加剂id + String tjj_material_id = tjj_map_jo.getString("material_id"); + JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") + .addParam("material_id",jo.getString("material_id")) + .addParam("pcsn",jo.getString("pcsn")) + .addParam("item_material_id",tjj_material_id) + .addParam("flag","5") + .process() + .uniqueResult(0); + if(tjj_finished!=null){ + //已配重量 + double finished_qty = tjj_map_jo.getDouble("finished_qty"); + //质保书含量比 + double is_tan = tjj_finished.getDouble("value"); + //当前含量重量 + double finished = bom_ivt_qty_jo*is_tan/100.0; + //累计各碳化钨中已含添加剂重量 + tjj_map_jo.put("finished_qty",finished_qty+finished); + tjj_map.put(tjj_material_id,tjj_map_jo); + } + }); + } + //判断已含添加剂与需配添加剂大小 + tjj_map.forEach((key,tjj_map_now)->{ + //需配添加剂重量 + double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); + //当前添加剂已配 + double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); + //已配小于需配 + if(finished_qty=0){ + } + if(W>0){ JSONObject W_weight = new JSONObject(); W_weight.put("formula_qty",W); //钨分类id @@ -2077,64 +2312,6 @@ public class AutoformulaServiceImpl implements AutoformulaService { W_weight.put("is_active","1"); W_weight.put("quality_scode","01"); cw_list.add(W_weight); - //更新碳化钨配粉重量 - double bom_ivt_qty = X21p-X21_jian; - bomdlt_Cr3C2_X21p.put("bom_ivt_qty",bom_ivt_qty); - if(bom_ivt_qty<0){ - throw new BadRequestException("碳化钨倒数第二条配粉结果为负数,当前配粉无解!"); - } - bomdlts_plan_map.put(bomdlt_Cr3C2_X21p.getString("stockrecord_id"),bomdlt_Cr3C2_X21p); - if(bom_ivt_qty<=0){ - bomdlts_plan_map.remove(bomdlt_Cr3C2_X21p.getString("stockrecord_id")); - } - bomdlts_plan_map.remove(bomdlt_Cr3C2_X22p.getString("stockrecord_id")); - //循环碳化钨 - for(int i=0;i{ - //获取添加剂id - String tjj_material_id = tjj_map_jo.getString("material_id"); - JSONObject tjj_finished = WQL.getWO("QPF_AUTOFORMULA01") - .addParam("material_id",jo.getString("material_id")) - .addParam("pcsn",jo.getString("pcsn")) - .addParam("item_material_id",tjj_material_id) - .addParam("flag","5") - .process() - .uniqueResult(0); - if(tjj_finished!=null){ - //已配重量 - double finished_qty = tjj_map_jo.getDouble("finished_qty"); - //质保书含量比 - double is_tan = tjj_finished.getDouble("value"); - //当前含量重量 - double finished = bom_ivt_qty_jo*is_tan/100.0; - //累计各碳化钨中已含添加剂重量 - tjj_map_jo.put("finished_qty",finished_qty+finished); - tjj_map.put(tjj_material_id,tjj_map_jo); - } - }); - } - //判断已含添加剂与需配添加剂大小 - tjj_map.forEach((key,tjj_map_now)->{ - //需配添加剂重量 - double need_qty = NumberUtil.round(tjj_map_now.getDouble("need_qty"),3).doubleValue(); - //当前添加剂已配 - double finished_qty = NumberUtil.round(tjj_map_now.getDouble("finished_qty"),3).doubleValue(); - //已配小于需配 - if(finished_qty(HttpStatus.OK); } + + @GetMapping("/downloadWord") + @Log("下载word") + @ApiOperation("下载word") + public ResponseEntity downloadWord(@RequestParam Map whereJson, HttpServletResponse response) { + deviceScrapService.downloadWord(whereJson,response); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DeviceScrapService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DeviceScrapService.java index df5867e7..497dde52 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DeviceScrapService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DeviceScrapService.java @@ -4,6 +4,7 @@ package org.nl.wms.sb.run.service; import com.alibaba.fastjson.JSONObject; import org.springframework.data.domain.Pageable; +import javax.servlet.http.HttpServletResponse; import java.util.Map; /** @@ -27,4 +28,10 @@ public interface DeviceScrapService { * @param whereJson 参数 */ void scrap(JSONObject whereJson); + + /** + * 下载word + * @param whereJson 参数 + */ + void downloadWord(Map whereJson, HttpServletResponse response); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/dto/DownloadWordDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/dto/DownloadWordDto.java new file mode 100644 index 00000000..05fb5952 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/dto/DownloadWordDto.java @@ -0,0 +1,44 @@ +package org.nl.wms.sb.run.service.dto; + +import com.sushengren.easyword.annotation.WordProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DownloadWordDto implements Serializable { + + @WordProperty("资产名称") + private String assets_name; + + @WordProperty("资产编码") + private String assets_code; + + @WordProperty("规格型号") + private String device_spec; + + @WordProperty("出厂编码") + private String leavefactory_number; + + @WordProperty("出厂日期") + private String leavefactory_date; + + @WordProperty("原值") + private String oraginal_value; + + @WordProperty("净额") + private String net_amount; + + @WordProperty("资产所在单位") + private String belong_dept; + + @WordProperty("资产使用人") + private String user_name; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DeviceScrapServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DeviceScrapServiceImpl.java index 6a41e8d3..ba383079 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DeviceScrapServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DeviceScrapServiceImpl.java @@ -8,17 +8,26 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; +import com.sushengren.easyword.EasyWord; +import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.service.impl.ParamServiceImpl; import org.nl.utils.SecurityUtils; +import org.nl.utils.SpringContextHolder; import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.sb.run.service.DeviceScrapService; +import org.nl.wms.sb.run.service.dto.DownloadWordDto; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.nl.wql.util.WqlUtil; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; @@ -74,11 +83,22 @@ public class DeviceScrapServiceImpl implements DeviceScrapService { WQLObject fileTab = WQLObject.getWQLObject("EM_BI_EquipmentFile"); WQLObject lifeTab = WQLObject.getWQLObject("EM_BI_DeviceLifeCycle"); + WQLObject mainTab = WQLObject.getWQLObject("EM_BI_DeviceMaintenanceMst"); // 设备保养单 + WQLObject reTab = WQLObject.getWQLObject("EM_BI_DeviceRepairMst"); // 设备维修单 // 更新设备档案表状态为报废 JSONObject json = fileTab.query("devicerecord_id ='" + devicerecord_id + "' and is_delete = '0'").uniqueResult(0); if (ObjectUtil.isEmpty(json)) throw new BootstrapMethodError("档案已被删除"); + String status = json.getString("status"); + if (StrUtil.equals(status, "11")) { + // 需完成保养单或者维修单 + JSONObject jsonMain = mainTab.query("devicerecord_id = '" + devicerecord_id + "' and is_delete = '0' and invstatus = '99'").uniqueResult(0); + JSONObject jsonRe = reTab.query("devicerecord_id = '" + devicerecord_id + "' and is_delete = '0' and invstatus = '99'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonMain) || ObjectUtil.isEmpty(jsonRe)) { + throw new BadRequestException("保养单或维修单未完成"); + } + } json.put("status", "90"); json.put("update_optid", currentUserId); json.put("update_optname", nickName); @@ -98,4 +118,46 @@ public class DeviceScrapServiceImpl implements DeviceScrapService { jsonLife.put("create_time",DateUtil.now()); lifeTab.insert(jsonLife); } + + @Override + public void downloadWord(Map whereJson, HttpServletResponse response) { + try { + WQLObject fileTab = WQLObject.getWQLObject("EM_BI_EquipmentFile"); + WQLObject deptTab = WQLObject.getWQLObject("sys_dept"); + + String devicerecord_id = MapUtil.getStr(whereJson, "devicerecord_id"); + JSONObject jsonFile = fileTab.query("devicerecord_id = '" + devicerecord_id + "'").uniqueResult(0); + + String belong_deptid = jsonFile.getString("belong_deptid"); + JSONObject jsonDept = new JSONObject(); + if (ObjectUtil.isNotEmpty(belong_deptid)) { + jsonDept = deptTab.query("dept_id = '"+belong_deptid+"'").uniqueResult(0); + } + + // 设置浏览器导出word格式文件 + response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + // 设置文件名和字符集 + String fileName = URLEncoder.encode(jsonFile.getString("device_name")+"报废表", "UTF-8"); + response.setHeader("Content-Disposition", "attachment; filename*=UTf-8''"+fileName+".docx"); + // 处理数据 + DownloadWordDto data = DownloadWordDto.builder() + .assets_name(jsonFile.getString("assets_name")) + .assets_code(jsonFile.getString("assets_code")) + .device_spec(jsonFile.getString("device_spec")) + .leavefactory_number(jsonFile.getString("leavefactory_number")) + .leavefactory_date(jsonFile.getString("leavefactory_date")) + .oraginal_value(jsonFile.getString("oraginal_value")) + .net_amount(jsonFile.getString("net_amount")) + .belong_dept(jsonDept.getString("name")) + .user_name(jsonFile.getString("user_name")).build(); + // 获取本地模板 + String path = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("DEVICE_WORD_PATH").getValue(); + // 下载 + File file = new File(path); + EasyWord.of(file).doWrite(data).toOutputStream(response.getOutputStream()); + } catch (Exception e) { + System.out.println(e.getMessage()); + throw new BadRequestException("下载异常"); + } + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java index 71cf4b7d..4ef06435 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java @@ -111,6 +111,10 @@ public class DevicerunrecordServiceImpl implements DevicerunrecordService { String run_date = whereJson.getString("run_date"); JSONObject jsonFile = WQLObject.getWQLObject("EM_BI_EquipmentFile").query("devicerecord_id = '" + devicerecord_id + "'").uniqueResult(0); + String status = jsonFile.getString("status"); + if (!"10,11,20,30,40".contains(status)) { + throw new BadRequestException("此设备不能填报"); + } double run_times = whereJson.getDoubleValue("run_times"); //生产时间 double prepare_times = whereJson.getDoubleValue("prepare_times");//准备时间 @@ -185,6 +189,9 @@ public class DevicerunrecordServiceImpl implements DevicerunrecordService { json.put("oee_value", 0); } tab.update(json); + String run_date = json.getString("run_date"); + JSONArray jsonMst = tab.query("devicerecord_id = '" + devicerecord_id + "' and run_date = '" + run_date + "'").getResultJSONArray(0); + if (jsonMst.size() > 1) throw new BadRequestException("填报信息已存在"); } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesafetyqtyqueryServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesafetyqtyqueryServiceImpl.java index 2e4830ec..38fa8973 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesafetyqtyqueryServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesafetyqtyqueryServiceImpl.java @@ -47,10 +47,12 @@ public class DevicesafetyqtyqueryServiceImpl implements DevicesafetyqtyqueryServ String class_idStr = (String) whereJson.get("class_idStr"); String material_code = MapUtil.getStr(whereJson, "material_code"); String type = MapUtil.getStr(whereJson, "type"); + String is_all = MapUtil.getStr(whereJson, "is_all"); HashMap map = new HashMap<>(); map.put("flag", "1"); map.put("type",type); + map.put("is_all",is_all); if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", "%"+material_code+"%"); //处理物料当前节点的所有子节点 if (!StrUtil.isEmpty(material_type_id)) { @@ -61,15 +63,7 @@ public class DevicesafetyqtyqueryServiceImpl implements DevicesafetyqtyqueryServ String classIds = classstandardService.getAllChildIdStr(class_idStr); map.put("classIds", classIds); } - JSONObject json = WQL.getWO("EM_DEVICESAFETQTYQUERY001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.material_id DESC"); - - JSONArray content = json.getJSONArray("content"); - for (int i = 0; i < content.size(); i++) { - JSONObject jsonObject = content.getJSONObject(i); - if (ObjectUtil.isEmpty(jsonObject.getString("safe_ivt_up"))) jsonObject.put("safe_ivt_up","99999999"); - if (ObjectUtil.isEmpty(jsonObject.getString("safe_ivt_down"))) jsonObject.put("safe_ivt_down","0"); - } - json.put("content",content); + JSONObject json = WQL.getWO("EM_DEVICESAFETQTYQUERY001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "a.material_id DESC"); return json; } @@ -156,10 +150,12 @@ public class DevicesafetyqtyqueryServiceImpl implements DevicesafetyqtyqueryServ String class_idStr = (String) whereJson.get("class_idStr"); String material_code = MapUtil.getStr(whereJson, "material_code"); String type = MapUtil.getStr(whereJson, "type"); + String is_all = MapUtil.getStr(whereJson, "is_all"); HashMap map = new HashMap<>(); map.put("flag", "1"); map.put("type",type); + map.put("is_all",is_all); if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", "%"+material_code+"%"); //处理物料当前节点的所有子节点 if (!StrUtil.isEmpty(material_type_id)) { @@ -172,12 +168,6 @@ public class DevicesafetyqtyqueryServiceImpl implements DevicesafetyqtyqueryServ } JSONArray rows = WQL.getWO("EM_DEVICESAFETQTYQUERY001").addParamMap(map).process().getResultJSONArray(0); - for (int i = 0; i < rows.size(); i++) { - JSONObject jsonObject = rows.getJSONObject(i); - if (ObjectUtil.isEmpty(jsonObject.getString("safe_ivt_up"))) jsonObject.put("safe_ivt_up","99999999"); - if (ObjectUtil.isEmpty(jsonObject.getString("safe_ivt_down"))) jsonObject.put("safe_ivt_down","0"); - } - List> list = new ArrayList<>(); for (int i = 0; i < rows.size(); i++) { JSONObject jo = rows.getJSONObject(i); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICESAFETQTYQUERY001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICESAFETQTYQUERY001.wql index 76f59ec4..5ec610af 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICESAFETQTYQUERY001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICESAFETQTYQUERY001.wql @@ -17,6 +17,7 @@ 输入.classIds TYPEAS f_string 输入.material_code TYPEAS s_string 输入.type TYPEAS s_string + 输入.is_all TYPEAS s_string [临时表] @@ -43,43 +44,72 @@ IF 输入.flag = "1" PAGEQUERY - SELECT - mater.material_code, - mater.material_name, - MAX( class.class_name ) AS class_name, - MAX( saivt.safe_ivt_up ) AS safe_ivt_up, - MAX( saivt.safe_ivt_down ) AS safe_ivt_down, - sum(ivt.ivt_qty) AS ivt_qty, - MAX(ivt.qty_unit_name) AS qty_unit_name - FROM - EM_BI_DeviceSparePartIvt ivt - LEFT JOIN ST_IVT_MaterialSafeIvt saivt ON saivt.material_id = ivt.material_id - LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id - LEFT JOIN md_pb_classstandard class ON mater.material_type_id = class.class_id - WHERE - 1=1 - OPTION 输入.classIds <> "" - class.class_id in 输入.classIds - ENDOPTION + SELECT + a.material_id, + a.material_code, + a.material_name, + a.class_name, + a.safe_ivt_up, + a.safe_ivt_down, + a.ivt_qty, + a.qty_unit_name + FROM + ( + SELECT + mater.material_id, + mater.material_code, + mater.material_name, + class.class_name, + ( + CASE + WHEN fivt.safe_ivt_up is null THEN 99999999 ELSE fivt.safe_ivt_up + END + ) AS safe_ivt_up, + ( + CASE + WHEN fivt.safe_ivt_down is null THEN 0 ELSE fivt.safe_ivt_down + END + ) AS safe_ivt_down, + ( + CASE + WHEN pivt.ivt_qty is null THEN 0 ELSE pivt.ivt_qty + END + ) AS ivt_qty, + unit.unit_name AS qty_unit_name + FROM + md_me_materialbase mater + LEFT JOIN md_pb_classstandard class ON mater.material_type_id = class.class_id + LEFT JOIN ST_IVT_MaterialSafeIvt fivt ON fivt.material_id = mater.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mater.base_unit_id + LEFT JOIN ( + SELECT + SUM(ivt.ivt_qty) AS ivt_qty, + ivt.material_id + FROM + EM_BI_DeviceSparePartIvt ivt + WHERE + 1=1 + group by ivt.material_id + ) pivt ON pivt.material_id = mater.material_id + WHERE + 1=1 - OPTION 输入.material_code <> "" - (mater.material_code like 输入.material_code or - mater.material_name like 输入.material_code) - ENDOPTION + OPTION 输入.classIds <> "" + class.class_id in 输入.classIds + ENDOPTION - OPTION 输入.type = "01" - ivt.ivt_qty > saivt.safe_ivt_up - ENDOPTION + OPTION 输入.material_code <> "" + (mater.material_code like 输入.material_code or + mater.material_name like 输入.material_code) + ENDOPTION + ) AS a - OPTION 输入.type = "02" - ivt.ivt_qty < saivt.safe_ivt_down - ENDOPTION + WHERE + 1=1 - OPTION 输入.type = "03" - saivt.safe_ivt_up <= ivt.ivt_qty <= saivt.safe_ivt_up - ENDOPTION - - group by ivt.material_id + OPTION 输入.is_all <> "0" + a.safe_ivt_down > a.ivt_qty or a.ivt_qty > a.safe_ivt_up + ENDOPTION ENDSELECT ENDPAGEQUERY diff --git a/mes/qd/src/views/wms/basedata/em/equipmentfile/index.vue b/mes/qd/src/views/wms/basedata/em/equipmentfile/index.vue index 41fefff2..001f6715 100644 --- a/mes/qd/src/views/wms/basedata/em/equipmentfile/index.vue +++ b/mes/qd/src/views/wms/basedata/em/equipmentfile/index.vue @@ -407,7 +407,7 @@ export default { if (!'00,11'.includes(rows[i].status)) { this.sub_flag = true } - if (!'00,10'.includes(rows[i].status)) { + if (!'10'.includes(rows[i].status)) { this.dissub_flag = true } if (rows.length !== 1) { @@ -477,12 +477,12 @@ export default { LODOP.PRINT_INIT('') LODOP.SET_PRINT_PAGESIZE(1, '80mm', '60mm', '') LODOP.ADD_PRINT_RECT('1mm', '3mm', '74mm', '54mm', 0, 1) - LODOP.SET_PRINT_STYLE('FontSize', 9) + LODOP.SET_PRINT_STYLE('FontSize', 12) LODOP.SET_PRINT_STYLE('Bold', 1) - LODOP.ADD_PRINT_BARCODE('10mm', '15mm', '60mm', '20mm', '128A', data.device_code) - LODOP.ADD_PRINT_TEXT('35mm', '15mm', '80mm', '15mm', '设备编码:' + data.device_code + '') - LODOP.ADD_PRINT_TEXT('40mm', '15mm', '80mm', '15mm', '设备名称:' + data.device_name + '') - LODOP.ADD_PRINT_TEXT('45mm', '15mm', '80mm', '15mm', '型号:' + data.device_model + '') + LODOP.ADD_PRINT_BARCODE('10mm', '12mm', '60mm', '20mm', '128A', data.device_code) + LODOP.ADD_PRINT_TEXT('34mm', '12mm', '80mm', '15mm', '设备编码:' + data.device_code + '') + LODOP.ADD_PRINT_TEXT('42mm', '12mm', '80mm', '15mm', '设备名称:' + data.device_name + '') + LODOP.ADD_PRINT_TEXT('49mm', '12mm', '80mm', '15mm', '设备型号:' + data.device_model + '') LODOP.PRINT()// 打印 this.crud.notify('打印成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.toQuery() diff --git a/mes/qd/src/views/wms/ql/factorywarranty/index.vue b/mes/qd/src/views/wms/ql/factorywarranty/index.vue index 975fadac..a32aea64 100644 --- a/mes/qd/src/views/wms/ql/factorywarranty/index.vue +++ b/mes/qd/src/views/wms/ql/factorywarranty/index.vue @@ -120,7 +120,7 @@ {{ scope.row.inspection_code }} - + @@ -136,9 +136,9 @@ - + - +