diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java index 92e4e59d..a7968439 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/pda/pdm/service/impl/PdmWorkTaskServiceImpl.java @@ -18,7 +18,9 @@ import org.nl.pda.pdm.service.PdmWorkTaskService; import org.nl.pda.st.vehicle.service.impl.EmptyVehicleServiceImpl; import org.nl.utils.SecurityUtils; import org.nl.utils.SpringContextHolder; +import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.st.core.task.InTask; import org.nl.wms.st.vehicle.task.ProductTask; @@ -44,6 +46,8 @@ public class PdmWorkTaskServiceImpl implements PdmWorkTaskService { private WmsToAcsService wmsToAcsService; @Autowired private ClassstandardService classstandardService; + @Autowired + private MaterialbaseService materialbaseService; @Override public Map queryWorkTask(Map jsonObject) { @@ -805,6 +809,9 @@ public class PdmWorkTaskServiceImpl implements PdmWorkTaskService { @Override @Transactional(rollbackFor = Exception.class) public Map issueQM(Map jsonObject) { + WQLObject formDtlTab = WQLObject.getWQLObject("pdm_bi_formuladtl"); // 配方明细表 + WQLObject materExtTab = WQLObject.getWQLObject("MD_ME_ProducMaterialExt"); // 成品扩展属性表 + if (ObjectUtil.isEmpty(jsonObject)) { throw new PdaRequestException("传入参数不能为空!"); } @@ -866,7 +873,55 @@ public class PdmWorkTaskServiceImpl implements PdmWorkTaskService { data2.put("code", para.getString("ext_name")); data2.put("value", row.getString("value")); //预磨1酒精设定值:开单重量*工艺参数"预磨1酒精设定值(改为比例)" - double masterbucket_qty = form_jo.getDoubleValue("masterbucket_qty"); +// double masterbucket_qty = form_jo.getDoubleValue("masterbucket_qty"); + + /* + 计算开单重量: + 配方明细中【是否需要配粉】为是的和,其中若为软废,需要乘以物料扩展属性的纯粉系数 + */ + // 1. 找出所有明细 + List jsonDtlAll = formDtlTab.query("formula_id = '" + form_jo.getString("formula_id") + "' and is_need_manage = '1'").getResultJSONArray(0).toJavaList(JSONObject.class); + + if (ObjectUtil.isEmpty(jsonDtlAll)) throw new BadRequestException("开单重量异常,请检查!"); + + // 2.过滤出是物料的 + List jsonDtlAll_mater = jsonDtlAll.stream() + .filter(item -> item.getString("material_type").equals("01")) + .collect(Collectors.toList()); + + // 3.计算物料分类重量 + double class_qty = jsonDtlAll.stream() + .filter(item -> item.getString("material_type").equals("02")) + .collect(Collectors.summarizingDouble(item -> item.getDoubleValue("formula_qty"))) + .getSum(); + + String masterbucket_qty1 = String.valueOf(class_qty); + try { + for (JSONObject jsonDtl : jsonDtlAll_mater) { + String formula_qty = jsonDtl.getString("formula_qty"); + + // 判断是否是软废 + boolean is_rf = materialbaseService.isAlongMaterType(MaterOptTypeEnum.RF.getCode(), jsonDtl.getString("material_id"), null); + + if (is_rf) { + // 软废:重量*纯粉系数 + String net_rate = materExtTab.query("material_id ='" + jsonDtl.getString("material_id") + "'").uniqueResult(0).getString("net_rate"); + + // 软废纯粉计算 + String rf_qty = NumberUtil.mul(formula_qty, NumberUtil.div(net_rate, "100").toString()).toString(); + + masterbucket_qty1 = NumberUtil.add(masterbucket_qty1,rf_qty).toString(); + } else { + // 直接相加 + masterbucket_qty1 = NumberUtil.add(masterbucket_qty1,formula_qty).toString(); + } + + } + } catch (Exception e) { + throw new BadRequestException("计算有误:"+e.getMessage()); + } + double masterbucket_qty = Double.valueOf(masterbucket_qty1); + if (para.getString("para_code").equals("QM006")) { QM006_qty = NumberUtil.round(data2.getDoubleValue("value") * 0.01 * masterbucket_qty, 3); data2.put("value", NumberUtil.round(data2.getDoubleValue("value") * 0.01 * masterbucket_qty, 3)); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WastecchangeServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WastecchangeServiceImpl.java index d9ec493d..8e7c8a38 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WastecchangeServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WastecchangeServiceImpl.java @@ -94,7 +94,14 @@ public class WastecchangeServiceImpl implements WastecchangeService { } map.put("class_ids", MaterOptTypeEnum.THW.getClass_idStr()); - JSONObject allmaterialIds = WQL.getWO("PDM_WASTECCHANGE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mater.material_code"); + // 判断工艺是否为空 + if (ObjectUtil.isEmpty(tech_type)) { + map.put("is_emp", "1"); + } else { + map.put("is_emp", "2"); + } + + JSONObject allmaterialIds = WQL.getWO("PDM_WASTECCHANGE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_code"); JSONArray array = allmaterialIds.getJSONArray("content"); //label:name;value:code List rfType = SpringContextHolder.getBean(DictDetailRepository.class).findByDictName("MD_MATERIAL_WASTE_TYPE"); @@ -141,6 +148,8 @@ public class WastecchangeServiceImpl implements WastecchangeService { @Override @Transactional(rollbackFor = Exception.class) public void update(JSONObject form) { + WQLObject wasTab = WQLObject.getWQLObject("pdm_bi_wastecchange"); + List rfType = SpringContextHolder.getBean(DictDetailRepository.class).findByDictName("MD_MATERIAL_WASTE_TYPE").stream().map(DictDetail::getValue).collect(Collectors.toList()); JSONObject allData = new JSONObject(); for (String key : rfType) { @@ -150,7 +159,24 @@ public class WastecchangeServiceImpl implements WastecchangeService { form.put("create_name",SecurityUtils.getNickName()); form.put("create_time",DateUtil.now()); form.put("alldata",allData); - WQLObject.getWQLObject("pdm_bi_wastecchange").update(form); + + JSONObject json = wasTab.query("material_id = '" + form.getString("material_id") + "' and tech_type = '" + form.getString("tech_type") + "'").uniqueResult(0); + + if (ObjectUtil.isEmpty(json)) { + form.put("change_id", IdUtil.getSnowflake(1, 1).nextId()); + wasTab.insert(form); + + if (form.getString("tech_type").equals("01")) { + form.put("tech_type","02"); + } else { + form.put("tech_type","01"); + } + + form.put("change_id", IdUtil.getSnowflake(1, 1).nextId()); + wasTab.insert(form); + } else { + wasTab.update(form); + } } @Override @@ -195,6 +221,8 @@ public class WastecchangeServiceImpl implements WastecchangeService { // 2.找软废 String tech_type = whereJson.getString("tech_type"); + if (ObjectUtil.isEmpty(tech_type)) throw new BadRequestException("工艺类型不能为空!"); + for (int i = 0; i < rf_arr.size(); i++) { JSONObject json_rf_type = rf_arr.getJSONObject(i); // 校验修正值必须为 -0.5 ~ 0.5 之间 或者为 99 @@ -247,7 +275,6 @@ public class WastecchangeServiceImpl implements WastecchangeService { } } // 3.更新软废碳平衡修正表 - this.update(whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/wal/PDM_WASTECCHANGE.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/wal/PDM_WASTECCHANGE.wql index 81c5afa7..e587ba22 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/wal/PDM_WASTECCHANGE.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/wal/PDM_WASTECCHANGE.wql @@ -17,6 +17,7 @@ 输入.material_code TYPEAS s_string 输入.class_ids TYPEAS f_string 输入.material_id TYPEAS s_string + 输入.is_emp TYPEAS s_string 输入.code TYPEAS s_string 输入.tech_type TYPEAS s_string 输入.materialIds TYPEAS f_string @@ -70,6 +71,15 @@ OPTION 输入.tech_type <> "" chan.tech_type = 输入.tech_type ENDOPTION + + OPTION 输入.is_emp = "1" + IFNULL(chan.tech_type,'') = '' + ENDOPTION + + OPTION 输入.is_emp = "2" + IFNULL(chan.tech_type,'') <> '' + ENDOPTION + ENDSELECT ENDPAGEQUERY ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/FormulaServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/FormulaServiceImpl.java index 0bc36576..6b3fcbd9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/FormulaServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pf/service/impl/FormulaServiceImpl.java @@ -53,6 +53,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -757,6 +758,7 @@ public class FormulaServiceImpl implements FormulaService { String formula_id = MapUtil.getStr(whereJson, "formula_id"); WQLObject formMstTab = WQLObject.getWQLObject("PDM_BI_Formula"); // 配方主表 + WQLObject formDtlTab = WQLObject.getWQLObject("pdm_bi_formuladtl"); // 配方明细表 WQLObject workTab = WQLObject.getWQLObject("PDM_BI_WorkOrder"); // 工令表 WQLObject deptTab = WQLObject.getWQLObject("sys_dept"); // 部门表 WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表 @@ -828,7 +830,54 @@ public class FormulaServiceImpl implements FormulaService { oneMap.put("para_name", json92jj.getString("para_name")); } } - String masterbucket_qty = jsonMst.getString("masterbucket_qty"); // 开单重量 + + /* + 计算开单重量: + 配方明细中【是否需要配粉】为是的和,其中若为软废,需要乘以物料扩展属性的纯粉系数 + */ + // 1. 找出所有明细 + List jsonDtlAll = formDtlTab.query("formula_id = '" + formula_id + "' and is_need_manage = '1'").getResultJSONArray(0).toJavaList(JSONObject.class); + + if (ObjectUtil.isEmpty(jsonDtlAll)) throw new BadRequestException("开单重量异常,请检查!"); + + // 2.过滤出是物料的 + List jsonDtlAll_mater = jsonDtlAll.stream() + .filter(row -> row.getString("material_type").equals("01")) + .collect(Collectors.toList()); + + // 3.计算物料分类重量 + double class_qty = jsonDtlAll.stream() + .filter(row -> row.getString("material_type").equals("02")) + .collect(Collectors.summarizingDouble(row -> row.getDoubleValue("formula_qty"))) + .getSum(); + + String masterbucket_qty = String.valueOf(class_qty); + try { + for (JSONObject jsonDtl : jsonDtlAll_mater) { + String formula_qty = jsonDtl.getString("formula_qty"); + + // 判断是否是软废 + boolean is_rf = materialbaseService.isAlongMaterType(MaterOptTypeEnum.RF.getCode(), jsonDtl.getString("material_id"), null); + + if (is_rf) { + // 软废:重量*纯粉系数 + String net_rate = materExtTab.query("material_id ='" + jsonDtl.getString("material_id") + "'").uniqueResult(0).getString("net_rate"); + + // 软废纯粉计算 + String rf_qty = NumberUtil.mul(formula_qty, NumberUtil.div(net_rate, "100").toString()).toString(); + + masterbucket_qty = NumberUtil.add(masterbucket_qty,rf_qty).toString(); + } else { + // 直接相加 + masterbucket_qty = NumberUtil.add(masterbucket_qty,formula_qty).toString(); + } + + } + } catch (Exception e) { + throw new BadRequestException("计算有误:"+e.getMessage()); + } + +// String masterbucket_qty = jsonMst.getString("masterbucket_qty"); // 开单重量 JSONObject jsonQM13 = paraTab.query("material_id = '" + material_id + "' and para_code = 'QM013'").uniqueResult(0); JSONObject jsonQM14 = paraTab.query("material_id = '" + material_id + "' and para_code = 'QM014'").uniqueResult(0); JSONObject jsonPW02 = paraTab.query("material_id = '" + material_id + "' and para_code = 'PW002'").uniqueResult(0); diff --git a/mes/qd/src/views/wms/basedata/master/bagrecord/insertAndPrintDialog.vue b/mes/qd/src/views/wms/basedata/master/bagrecord/insertAndPrintDialog.vue index 0eb4f241..31389354 100644 --- a/mes/qd/src/views/wms/basedata/master/bagrecord/insertAndPrintDialog.vue +++ b/mes/qd/src/views/wms/basedata/master/bagrecord/insertAndPrintDialog.vue @@ -6,6 +6,7 @@ width="450px" :before-close="handleClose" destroy-on-close + :close-on-click-modal="false" @close="close" > @@ -33,7 +34,7 @@ - + @@ -41,11 +42,11 @@ - + - + @@ -136,6 +137,14 @@ export default { // 根据单据号查询调用接口获取压制订单内信息 crudBagrecord.blurQueryMater({ 'bill_code': val }).then(res => { this.materialList = res.data + + if (this.materialList.length === 0) { + this.form1.material_code = null + this.form1.pcsn = null + } else { + this.form1.material_code = this.materialList[0].item_code + this.form1.pcsn = this.materialList[0].batch_seq + } }) }, changePcsn(val) { diff --git a/mes/qd/src/views/wms/basedata/pdm/wastecchange/index.vue b/mes/qd/src/views/wms/basedata/pdm/wastecchange/index.vue index 94880125..c2542445 100644 --- a/mes/qd/src/views/wms/basedata/pdm/wastecchange/index.vue +++ b/mes/qd/src/views/wms/basedata/pdm/wastecchange/index.vue @@ -354,8 +354,7 @@ export default { del: false, download: false, reset: true - }, - query: { tech_type: '02' } + } }) }, data() { @@ -392,6 +391,7 @@ export default { this.form.tableData.splice(index, 1, row) // 通过splice 替换数据 触发视图更新 }, confirm(row) { + row.tech_type = this.query.tech_type this.confirm_flg = true crudWastecchange.confirm(row).then(res => { this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)