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