diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialParametersController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialParametersController.java index cfdb2553..46b679d2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialParametersController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialParametersController.java @@ -148,4 +148,11 @@ public class MaterialParametersController { public ResponseEntity getSeries() { return new ResponseEntity<>(materialParametersService.getSeries(), HttpStatus.OK); } + + @PostMapping("/sync") + @Log("同步") + @ApiOperation("同步-产品系列") + public ResponseEntity sync(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(materialParametersService.sync(whereJson),HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialParametersService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialParametersService.java index 039c2ae4..df7e4ab4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialParametersService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialParametersService.java @@ -85,4 +85,10 @@ public interface MaterialParametersService { * 查询基础分类-产品系列 */ JSONArray getSeries(); + + /** + * 同步 + * @param whereJson / + */ + JSONObject sync(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialParametersServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialParametersServiceImpl.java index 2adf3a68..c8b53499 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialParametersServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialParametersServiceImpl.java @@ -5,6 +5,7 @@ package org.nl.wms.basedata.master.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; @@ -20,6 +21,7 @@ import org.nl.wms.basedata.master.service.MaterialParametersService; import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.master.service.dto.MaterialParametersDto; import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; +import org.nl.wms.basedata.pdm.service.impl.WastecchangeServiceImpl; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.nl.wql.util.WqlUtil; @@ -318,4 +320,149 @@ public class MaterialParametersServiceImpl implements MaterialParametersService return resultJSONArray; } + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject sync(JSONObject whereJson) { + /* + * 1.PG粉碳平衡修正 + * 2.软废碳平衡修正 + */ + WQLObject productMstTab = WQLObject.getWQLObject("MD_PD_ProductBOM"); // 产品bom单主表 + WQLObject productDtlTab = WQLObject.getWQLObject("MD_PD_ProductBOMDtl"); // 产品bom单明细表 + WQLObject wasTab = WQLObject.getWQLObject("PDM_BI_WasteCChange"); // 软废碳平衡修正表 + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表 + WQLObject extTab = WQLObject.getWQLObject("MD_ME_ProducMaterialExt"); // 成品物料扩展信息表 + + JSONObject result = new JSONObject(); + + // 1.判断此物料是PG粉还是RF + boolean is_pgf = materialbaseService.isAlongMaterType(MaterOptTypeEnum.PGF.getCode(), whereJson.getString("material_id"), null); + boolean is_rf = materialbaseService.isAlongMaterType(MaterOptTypeEnum.RF.getCode(), whereJson.getString("material_id"), null); + + String material_id = whereJson.getString("material_id"); + JSONObject jsonMater = materTab.query("material_id = '" + material_id + "'").uniqueResult(0); + JSONObject jsonExtMater = extTab.query("material_id = '" + material_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonExtMater)) throw new BadRequestException("此PGF扩展属性不存在"); + + if (is_pgf) { + /* + * PG粉碳平衡修正: + * 1.查询此PG粉产品bom明细表第一个碳化钨 + * 2.查询此碳化钨 软废碳平衡修正表获得全部软废类型的值 + * 3.查询软废:物料表,软废编码 = PG粉编码 + '-CF' + * 4.依次修改16种软废类型的碳平衡 + * 软废碳平衡=pg粉碳平衡+CF修正值 + */ + + // 1.查询此物料的产品bom明细表中第一个出现的碳化钨 + // 查主表 + JSONObject jsonProductMst = productMstTab.query("material_id = '" + material_id + "' and is_used = '1' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonProductMst)) throw new BadRequestException("此产品没有创建bom单或者已删除、未启用"); + // 查明细 + JSONArray productDtlArr = productDtlTab.query("bom_id = '" + jsonProductMst.getString("bom_id") + "' order by seqno ASC").getResultJSONArray(0); + if (ObjectUtil.isEmpty(productDtlArr)) throw new BadRequestException("此产品bom单暂无明细"); + + // 找出第一个碳化钨 + String thw_material_id = ""; + for (int i = 0; i < productDtlArr.size(); i++) { + JSONObject jsonProductDtl = productDtlArr.getJSONObject(i); + boolean is_thw = materialbaseService.isAlongMaterType(MaterOptTypeEnum.THW.getCode(), jsonProductDtl.getString("material_id"), null); + + if (is_thw) { + thw_material_id = jsonProductDtl.getString("material_id"); + break; + } + } + + // 2.查询此碳化钨 软废碳平衡修正表获得全部软废类型的值 并转化成数组(便于处理数据) + JSONObject jsonThwMater = materTab.query("material_id = '" + thw_material_id + "'").uniqueResult(0); + JSONObject jsonWas = wasTab.query("material_id = '" + thw_material_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonWas)) throw new BadRequestException("此碳化钨软废修正数据不存在:"+jsonThwMater.getString("material_code")); + + // 将此碳化钨的软废类型转化为数组 + JSONArray wasArr = new WastecchangeServiceImpl().contentShift(jsonWas); + + // 3.查询软废:物料表,软废编码 = PG粉编码 + '-CF' (以软废类型CF为例) + for (int j = 0; j < wasArr.size(); j++) { + JSONObject jsonWasDtl = wasArr.getJSONObject(j); + + String rf_type_code = jsonMater.getString("material_code") +"-"+jsonWasDtl.getString("name"); + JSONObject jsonRfMater = materTab.query("material_code = '" + rf_type_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonRfMater)) { + // 4.依次修改16种软废类型的碳平衡: 软废碳平衡=pg粉碳平衡+CF修正值 + JSONObject jsonRfExt = extTab.query("material_id = '" + jsonRfMater.getString("material_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonRfExt)) throw new BadRequestException("此软废扩展信息不存在:"+rf_type_code); + + double rf_c_balance = NumberUtil.add(jsonExtMater.getDoubleValue("c_balance"), jsonWasDtl.getDoubleValue("value")); + jsonRfExt.put("c_balance", String.valueOf(rf_c_balance)); + extTab.update(jsonRfExt); + } + } + result.put("c_balance", ""); + } + + if (is_rf) { + /* + * 软废粉碳平衡修正: + * 1.找PG粉:查物料表: PG粉编码 = 此软废编码去掉最后一个'-'和后面的内容 + * 2.找碳化钨:此PG粉产品BOM明细第一个碳化钨 + * 3.找修正值:废类型为编码最后'-'后的内容 :如JZ16-P-A2-20-JY : 软废类型就是 JY + * 查此碳化钨的软废修正表对应的软废类型:软废碳平衡=pg粉碳平衡+此软废修正值 + * 4.最后将计算后的值返回给页面 + */ + + // 1.找PG粉:查物料表: PG粉编码 = 此软废编码去掉最后一个'-'和后面的内容 + String pg_material_code = jsonMater.getString("material_code").substring(0, jsonMater.getString("material_code").lastIndexOf("-")); + JSONObject jsonPgfMater = materTab.query("material_code = '" + pg_material_code + "'").uniqueResult(0); + + // 2.找碳化钨:此PG粉产品BOM明细第一个碳化钨 + // 查主表 + JSONObject jsonProductMst = productMstTab.query("material_id = '" + jsonPgfMater.getString("material_id") + "' and is_used = '1' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonProductMst)) throw new BadRequestException("此产品没有创建bom单或者已删除、未启用"+pg_material_code); + // 查明细 + JSONArray productDtlArr = productDtlTab.query("bom_id = '" + jsonProductMst.getString("bom_id") + "' order by seqno ASC").getResultJSONArray(0); + if (ObjectUtil.isEmpty(productDtlArr)) throw new BadRequestException("此产品bom单暂无明细"+pg_material_code); + + // 找出第一个碳化钨 + String thw_material_id = ""; + for (int i = 0; i < productDtlArr.size(); i++) { + JSONObject jsonProductDtl = productDtlArr.getJSONObject(i); + boolean is_thw = materialbaseService.isAlongMaterType(MaterOptTypeEnum.THW.getCode(), jsonProductDtl.getString("material_id"), null); + + if (is_thw) { + thw_material_id = jsonProductDtl.getString("material_id"); + break; + } + + } + + // 3.找修正值:废类型为编码最后'-'后的内容 + JSONObject jsonThwMater = materTab.query("material_id = '" + thw_material_id + "'").uniqueResult(0); + JSONObject jsonWas = wasTab.query("material_id = '" + thw_material_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonWas)) throw new BadRequestException("此碳化钨软废修正数据不存在:"+jsonThwMater.getString("material_name")); + + // 将此碳化钨的软废类型转化为数组 + JSONArray wasArr = new WastecchangeServiceImpl().contentShift(jsonWas); + + String rf_type_code = jsonMater.getString("material_code").substring(jsonMater.getString("material_code").lastIndexOf("-")+1,jsonMater.getString("material_code").length()); + double value = 0; + for (int j = 0; j < wasArr.size(); j++) { + JSONObject jsonWasDtl = wasArr.getJSONObject(j); + + if (StrUtil.equals(rf_type_code, jsonWasDtl.getString("name"))) { + value = jsonWasDtl.getDoubleValue("value"); + break; + } + } + + // 软废碳平衡=pg粉碳平衡+此软废修正值 + JSONObject jsonPgfExt = extTab.query("material_id = '" + jsonPgfMater.getString("material_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPgfExt)) throw new BadRequestException("此PG粉扩展属性不存在:"+pg_material_code); + + double c_balance = NumberUtil.add(jsonPgfExt.getDoubleValue("c_balance"), value); + result.put("c_balance", String.valueOf(c_balance)); + } + return result; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/upkeep/wql/EM_BIDEVICEMAINTENANCE001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/upkeep/wql/EM_BIDEVICEMAINTENANCE001.wql index 24af805d..ae1e137c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/upkeep/wql/EM_BIDEVICEMAINTENANCE001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/upkeep/wql/EM_BIDEVICEMAINTENANCE001.wql @@ -197,7 +197,7 @@ mst.is_delete = '0' AND file.is_delete = '0' AND mst.maint_object = '02' - AND mst.invstatus not in ('01') + AND mst.invstatus in ('02','03') OPTION 输入.device_code <> "" (file.device_code like 输入.device_code or @@ -369,7 +369,7 @@ mst.is_delete = '0' AND file.is_delete = '0' AND mst.maint_object = '01' - AND mst.invstatus not in ('01') + AND mst.invstatus in ('02','03') OPTION 输入.device_code <> "" (file.device_code like 输入.device_code or diff --git a/mes/qd/src/api/wms/basedata/master/materialparameters.js b/mes/qd/src/api/wms/basedata/master/materialparameters.js index b1d2186b..dae88d59 100644 --- a/mes/qd/src/api/wms/basedata/master/materialparameters.js +++ b/mes/qd/src/api/wms/basedata/master/materialparameters.js @@ -55,4 +55,12 @@ export function getSeries() { }) } -export default { add, edit, del, save, queryMaterialParam, getUploadTemplate, getSeries } +export function sync(data) { + return request({ + url: 'api/MaterialParameters/sync', + method: 'post', + data + }) +} + +export default { add, edit, del, save, queryMaterialParam, getUploadTemplate, getSeries, sync } diff --git a/mes/qd/src/views/wms/basedata/master/materialParameters/view/CpDialog.vue b/mes/qd/src/views/wms/basedata/master/materialParameters/view/CpDialog.vue index 04e9bb4d..a4a16f4a 100644 --- a/mes/qd/src/views/wms/basedata/master/materialParameters/view/CpDialog.vue +++ b/mes/qd/src/views/wms/basedata/master/materialParameters/view/CpDialog.vue @@ -214,6 +214,7 @@ + 同步 @@ -328,6 +329,7 @@ export default { dialogUpload: false, PicDialog: false, serieseList: [], + sync_flg: false, prules: { is_auto_open: [ { required: true, message: '不能为空', trigger: 'blur' } @@ -471,6 +473,22 @@ export default { }, submitUpload() { const flag = this.$refs.upload.submit() + }, + sync() { + const data = this.formData + this.sync_flg = true + crudMaterialparameters.sync(data).then(res => { + debugger + if (res.c_balance === '') { + this.crud.notify('同步成功', CRUD.NOTIFICATION_TYPE.SUCCESS) + } else { + this.formData.c_balance = res.c_balance + this.crud.notify('同步成功,请确认', CRUD.NOTIFICATION_TYPE.SUCCESS) + } + this.sync_flg = false + }).catch(() => { + this.sync_flg = false + }) } } }