From 1ee2332fa0ea9e5cdfd01c66441814882d413dcb Mon Sep 17 00:00:00 2001 From: zds <2388969634@qq.com> Date: Fri, 18 Nov 2022 11:16:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/pa/rest/PerformancemstController.java | 8 +++ .../wms/pa/service/PerformancemstService.java | 7 +++ .../impl/PerformancemstServiceImpl.java | 18 +++++++ .../wms/pa/wql/QL_TEST_PERFORMANCEMST01.wql | 2 +- .../src/main/java/org/nl/wms/pa/wql/pa.xls | Bin 163328 -> 150016 bytes .../service/impl/ReceivemstServiceImpl.java | 45 ++++++++-------- .../main/java/org/nl/wms/ql/wql/QL_ERP.wql | 16 ++++++ .../impl/StatisticalReportServiceImpl.java | 50 +++++++++++------- .../views/wms/pa/performance/AddDialog.vue | 7 ++- .../views/wms/pa/workloadreview/AddDialog.vue | 15 +++--- .../src/views/wms/pa/workloadreview/index.vue | 2 +- .../wms/sb/repair/devicerepairplan/index.vue | 6 +-- 12 files changed, 120 insertions(+), 56 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/rest/PerformancemstController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/rest/PerformancemstController.java index 19c86707..63b1dc29 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/rest/PerformancemstController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/rest/PerformancemstController.java @@ -44,6 +44,14 @@ public class PerformancemstController { return new ResponseEntity<>(performancemstService.queryAll(whereJson,page),HttpStatus.OK); } + @GetMapping("/query2") + @Log("查询工作量汇报") + @ApiOperation("查询工作量汇报") + //@PreAuthorize("@el.check('performancemst:list')") + public ResponseEntity query2(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(performancemstService.queryAll2(whereJson,page),HttpStatus.OK); + } + @GetMapping("/workloadstat") @Log("工作量统计数据") @ApiOperation("工作量统计数据") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/PerformancemstService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/PerformancemstService.java index a771546b..52c41e22 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/PerformancemstService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/PerformancemstService.java @@ -24,6 +24,13 @@ public interface PerformancemstService { * @return Map */ Map queryAll(Map whereJson, Pageable page); + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll2(Map whereJson, Pageable page); /** * 查询所有数据不分页 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/impl/PerformancemstServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/impl/PerformancemstServiceImpl.java index 12b7998d..13a4b257 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/impl/PerformancemstServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/service/impl/PerformancemstServiceImpl.java @@ -61,6 +61,20 @@ public class PerformancemstServiceImpl implements PerformancemstService { return json; } + @Override + public Map queryAll2(Map whereJson, Pageable page) { + String assessor_id = (String) whereJson.get("assessor_id"); + String assessor_date = (String) whereJson.get("assessor_date"); + HashMap map = new HashMap<>(); + map.put("flag", "1"); + if (ObjectUtil.isNotEmpty(assessor_id)) { + map.put("assessor_id", "%" + assessor_id + "%"); + } + map.put("assessor_date", assessor_date); + JSONObject json = WQL.getWO("QL_TEST_PERFORMANCEMST01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mst.update_time desc"); + return json; + } + @Override public List queryAll(Map whereJson) { WQLObject wo = WQLObject.getWQLObject("ql_test_performancemst"); @@ -126,6 +140,7 @@ public class PerformancemstServiceImpl implements PerformancemstService { jsonDtl.put("item_name", json.getString("item_name")); if (ObjectUtil.isEmpty(json.getString("workload"))) throw new BadRequestException("工作量不能为空!"); jsonDtl.put("workload", json.getString("workload")); + jsonDtl.put("workload_audit", json.getString("workload_audit")); //算出每行的分数 BigDecimal num = NumberUtil.mul(json.getString("single_score"), json.getString("workload")); jsonDtl.put("score", NumberUtil.round(num, 2)); @@ -171,6 +186,7 @@ public class PerformancemstServiceImpl implements PerformancemstService { jsonDtl.put("item_name", json.getString("item_name")); if (ObjectUtil.isEmpty(json.getString("workload"))) throw new BadRequestException("工作量不能为空!"); jsonDtl.put("workload", json.getString("workload")); + jsonDtl.put("workload_audit", json.getString("workload_audit")); //算出每行的分数 BigDecimal num = NumberUtil.mul(json.getString("single_score"), json.getString("workload")); jsonDtl.put("score", NumberUtil.round(num, 2)); @@ -186,6 +202,7 @@ public class PerformancemstServiceImpl implements PerformancemstService { String now = DateUtil.now(); WQLObject wo = WQLObject.getWQLObject("ql_test_performancemst"); + WQLObject ql_test_performancedtl = WQLObject.getWQLObject("ql_test_performancedtl"); for (Long performance_id : ids) { JSONObject param = new JSONObject(); param.put("performance_id", String.valueOf(performance_id)); @@ -194,6 +211,7 @@ public class PerformancemstServiceImpl implements PerformancemstService { param.put("update_optname", nickName); param.put("update_time", now); wo.update(param); + ql_test_performancedtl.delete("performance_id='"+String.valueOf(performance_id)+"'"); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/wql/QL_TEST_PERFORMANCEMST01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/wql/QL_TEST_PERFORMANCEMST01.wql index 34dbef2c..3f609aab 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/wql/QL_TEST_PERFORMANCEMST01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/wql/QL_TEST_PERFORMANCEMST01.wql @@ -219,7 +219,7 @@ IF 输入.flag = "9" QUERY SELECT - sum (IFNULL(dtl.workload,0)) AS num, + sum (IFNULL(dtl.workload_audit,0)) AS num, mst.assessor_id FROM QL_TEST_PerformanceMst mst diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/wql/pa.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pa/wql/pa.xls index 6182adad9fc9badefa556efd01193243c42f365b..c712df550e8bf632fdd6ccb853d4b97dd177b2d2 100644 GIT binary patch delta 44047 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 param = new HashMap<>(); + param.put("material_id", String.valueOf(material_id)); + boolean is_YL = materialBaseService.isAlongMaterType(MaterOptTypeEnum.YL.getCode(), material_id, null); + boolean is_FL = materialBaseService.isAlongMaterType(MaterOptTypeEnum.FL.getCode(), material_id, null); + boolean is_BCP = materialBaseService.isAlongMaterType(MaterOptTypeEnum.BCP.getCode(), material_id, null); + if (is_YL) param.put("inspection_type", "10"); + if (is_FL) param.put("inspection_type", "20"); + if (is_BCP) param.put("inspection_type", "30"); + param.put("pcsn", MapUtil.getStr(whereJson, "pcsn")); + param.put("source_bill_id", MapUtil.getStr(whereJson, "receivedtl_id")); + param.put("source_bill_code", MapUtil.getStr(whereJson, "receive_code")); + param.put("source_bill_type", MapUtil.getStr(whereJson, "receive_type")); + param.put("source_bill_table", "PCS_RC_ReceiveDtl"); + param.put("source_bill_table_pk", ""); + param.put("base_bill_id", jsonReMst.get("source_id")); + param.put("base_bill_type", jsonReMst.get("source_type")); + inspectionsheetmstService.create(param); + }else{ + throw new BadRequestException("质检单已存在,不允许重复插入!"); + } if (ObjectUtil.isEmpty(jsonFactMst)) { JSONObject jsonMater = WQLObject.getWQLObject("md_me_materialbase").query("material_id = '" + material_id + "'").uniqueResult(0); JSONObject jsonUnit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + jsonMater.getString("base_unit_id") + "'").uniqueResult(0); @@ -527,29 +549,6 @@ public class ReceivemstServiceImpl implements ReceivemstService { }else{ throw new BadRequestException("厂家质保书已存在,不允许重复插入!"); } - if (ObjectUtil.isEmpty(jsonMst)) { - //插入质检单 - HashMap param = new HashMap<>(); - param.put("material_id", String.valueOf(material_id)); - boolean is_YL = materialBaseService.isAlongMaterType(MaterOptTypeEnum.YL.getCode(), material_id, null); - boolean is_FL = materialBaseService.isAlongMaterType(MaterOptTypeEnum.FL.getCode(), material_id, null); - boolean is_BCP = materialBaseService.isAlongMaterType(MaterOptTypeEnum.BCP.getCode(), material_id, null); - if (is_YL) param.put("inspection_type", "10"); - if (is_FL) param.put("inspection_type", "20"); - if (is_BCP) param.put("inspection_type", "30"); - param.put("pcsn", MapUtil.getStr(whereJson, "pcsn")); - param.put("source_bill_id", MapUtil.getStr(whereJson, "receivedtl_id")); - param.put("source_bill_code", MapUtil.getStr(whereJson, "receive_code")); - param.put("source_bill_type", MapUtil.getStr(whereJson, "receive_type")); - param.put("source_bill_table", "PCS_RC_ReceiveDtl"); - param.put("source_bill_table_pk", ""); - param.put("base_bill_id", jsonReMst.get("source_id")); - param.put("base_bill_type", jsonReMst.get("source_type")); - inspectionsheetmstService.create(param); - }else{ - throw new BadRequestException("质检单已存在,不允许重复插入!"); - } - } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql index 7919a969..516b41e6 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_ERP.wql @@ -103,3 +103,19 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + sum(QTY_ZT) AS notqty + FROM + PURCHASE_CONTRACT_VIEW + where + STATUSFLAG = '3' + AND DEL_FLAG = '0' + OPTION 输入.ext_id <> "" + ITEM_ID = 输入.ext_id + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java index b14ed506..e162c32e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/statistics/service/impl/StatisticalReportServiceImpl.java @@ -92,6 +92,7 @@ public class StatisticalReportServiceImpl implements StatisticalReportService { @Override public Map materPlanQuery(Map whereJson) { + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料信息表 String begin_time = MapUtil.getStr(whereJson, "begin_time"); String end_time = MapUtil.getStr(whereJson, "end_time"); String org_id = MapUtil.getStr(whereJson, "org_id"); @@ -150,44 +151,55 @@ public class StatisticalReportServiceImpl implements StatisticalReportService { need_qty = dtlJa_map.get(material_id); } - jo1.put(material_id, String.format("%.3f", now_ivt)); + jo1.put(material_id, String.format("%.2f", now_ivt)); double canuse_num = now_ivt; //已开单重量 - jo22.put(material_id, String.format("%.3f", need_qty)); + jo22.put(material_id, String.format("%.2f", need_qty)); //2、排产需求量(未开工的工令重量+排产未生成工令日计划重量)根据bom计算需要多少原料库存重量: JSONObject nedd_mater = WQL.getWO("statistical_report_query_01").addParam("flag", "6").addParam("material_id", material_id).addParam("begin_time", begin_time).addParam("end_time", end_time).addParam("org_id", org_id).process().uniqueResult(0); double bom_qty = 0; if (ObjectUtil.isNotEmpty(nedd_mater)) { bom_qty = nedd_mater.getDoubleValue("qty"); } - jo2.put(material_id, String.format("%.3f", bom_qty)); - - //3、待检入库量:sum(此物料未确认的到货单的单据数-入库数) - JSONObject num_jo = WQL.getWO("statistical_report_query_01").addParam("flag", "7").addParam("material_id", material_id).process().uniqueResult(0); + jo2.put(material_id, String.format("%.2f", bom_qty)); //3、待检入库量:sum(此物料未确认的到货单的单据数-入库数) JSONObject noin_jo = WQL.getWO("statistical_report_query_01").addParam("flag", "77").addParam("material_id", material_id).process().uniqueResult(0); - //合同在途 - double notqty = 0; //待检+未入库数量 double noin_qty = 0; + if (ObjectUtil.isNotEmpty(noin_jo)) { + noin_qty = noin_jo.getDoubleValue("noin_qty"); + } + jo4.put(material_id, String.format("%.2f", noin_qty)); + + + // 合同在途1.将wms物料id转换成本erp物料id + JSONObject jsonMater = materTab.query("material_id = '" + material_id + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonMater)) { + throw new BadRequestException("此物料" + material_id + "在mes系统不存在"); + } + if (StrUtil.isEmpty(jsonMater.getString("ext_id"))) { + throw new BadRequestException("此物料" + material_id + "在mes系统不存在erp物料外键"); + } + // 2.根据物料、批次查询erp系统中是否存在此批次的理化报告 + JSONObject map = new JSONObject(); + map.put("flag", "4"); + map.put("ext_id", jsonMater.getString("ext_id")); + JSONObject num_jo = WQL.getWO("QL_ERP").addParamMap(map).setDbname("dataSource1").process().uniqueResult(0); + + //合同在途 + double notqty = 0; if (ObjectUtil.isNotEmpty(num_jo)) { notqty = num_jo.getDoubleValue("notqty"); if (notqty < 0) { notqty = 0; } } - if (ObjectUtil.isNotEmpty(noin_jo)) { - noin_qty = noin_jo.getDoubleValue("noin_qty"); - } - jo4.put(material_id, String.format("%.3f", noin_qty)); - - //4、合同在途:订单量-到货量 - jo6.put(material_id, String.format("%.3f", notqty)); + jo6.put(material_id, String.format("%.2f", notqty)); //5、库/需差额量 :库存现存量-排产需求量 - jo3.put(material_id, String.format("%.3f", (canuse_num - bom_qty))); + jo3.put(material_id, String.format("%.2f", (canuse_num - bom_qty))); //7、最低储备定额:物料的安全库存量下限 JSONObject safe_jo = WQLObject.getWQLObject("ST_IVT_MaterialSafeIvt").query("material_id = '" + material_id + "'").uniqueResult(0); @@ -195,11 +207,11 @@ public class StatisticalReportServiceImpl implements StatisticalReportService { if (ObjectUtil.isNotEmpty(safe_jo)) { safe_qty = safe_jo.getDoubleValue("safe_ivt_down"); } - jo7.put(material_id, String.format("%.3f", safe_qty)); + jo7.put(material_id, String.format("%.2f", safe_qty)); //8、采购缺口:库存+待检+在途+最低储备-排产量 double buy_qty = (canuse_num + noin_qty + notqty) - (bom_qty + safe_qty); - jo8.put(material_id, String.format("%.3f", buy_qty)); + jo8.put(material_id, String.format("%.2f", buy_qty)); //6、覆盖日期:物料库存可坚持到哪一天:库存现存量减每天需求量,哪天<0,取前一天 if (canuse_num<0){ @@ -254,7 +266,7 @@ public class StatisticalReportServiceImpl implements StatisticalReportService { JSONObject dtl = bom_dtl.getJSONObject(j); double standard_rate = dtl.getDoubleValue("standard_rate"); double qty = standard_rate * row.getDoubleValue("product_weight") * 0.01; - row.put(dtl.getString("material_id"), String.format("%.3f", qty)); + row.put(dtl.getString("material_id"), String.format("%.2f", qty)); } rows.add(row); } diff --git a/mes/qd/src/views/wms/pa/performance/AddDialog.vue b/mes/qd/src/views/wms/pa/performance/AddDialog.vue index 781e625c..35bc400e 100644 --- a/mes/qd/src/views/wms/pa/performance/AddDialog.vue +++ b/mes/qd/src/views/wms/pa/performance/AddDialog.vue @@ -98,6 +98,7 @@ /> + @@ -217,6 +218,7 @@ export default { } }) if (same_mater) { + item.workload_audit = 0 this.form.tableData.splice(-1, 0, item) } }) @@ -224,7 +226,7 @@ export default { }, delOne(index, rows) { // 将总分值减去每行的总分 - var num = parseFloat(this.form.total_score) - parseFloat(rows[index].single_score) * parseFloat(rows[index].workload) + var num = parseFloat(this.form.total_score) - parseFloat(rows[index].single_score) * parseFloat(rows[index].workload_audit) this.form.total_score = num.toFixed(2) rows.splice(index, 1) this.form.num = this.form.tableData.length @@ -232,8 +234,9 @@ export default { change(val, row, index) { // 将每行的算出来的分值相加 let all = 0 + row.workload_audit = val this.form.tableData.forEach((item) => { - all = all + parseFloat(item.workload) * parseFloat(item.single_score) + all = all + parseFloat(item.workload_audit) * parseFloat(item.single_score) }) this.form.total_score = all.toFixed(2) }, diff --git a/mes/qd/src/views/wms/pa/workloadreview/AddDialog.vue b/mes/qd/src/views/wms/pa/workloadreview/AddDialog.vue index b0d3fc83..18644ccc 100644 --- a/mes/qd/src/views/wms/pa/workloadreview/AddDialog.vue +++ b/mes/qd/src/views/wms/pa/workloadreview/AddDialog.vue @@ -83,9 +83,10 @@ - + + @@ -214,7 +215,7 @@ export default { }, delOne(index, rows) { // 将总分值减去每行的总分 - var num = parseFloat(this.form.total_score) - parseFloat(rows[index].single_score) * parseFloat(rows[index].workload) + var num = parseFloat(this.form.total_score) - parseFloat(rows[index].single_score) * parseFloat(rows[index].workload_audit) this.form.total_score = num.toFixed(2) rows.splice(index, 1) this.form.num = this.form.tableData.length @@ -225,17 +226,17 @@ export default { const numRe = new RegExp(numReg) if (!numRe.test(val)) { this.crud.notify('请输入不小于0的数字', CRUD.NOTIFICATION_TYPE.INFO) - row.workload = 0 + row.workload_audit = 0 } else { - if (row.workload === '') { - row.workload = 0 + if (row.workload_audit === '') { + row.workload_audit = 0 } } this.form.tableData.splice(index, 1, row) // 将每行的算出来的分值相加 let all = 0 this.form.tableData.forEach((item) => { - all = all + parseFloat(item.workload) * parseFloat(item.single_score) + all = all + parseFloat(item.workload_audit) * parseFloat(item.single_score) }) this.form.total_score = all.toFixed(2) }, diff --git a/mes/qd/src/views/wms/pa/workloadreview/index.vue b/mes/qd/src/views/wms/pa/workloadreview/index.vue index a64a7490..cc56ec17 100644 --- a/mes/qd/src/views/wms/pa/workloadreview/index.vue +++ b/mes/qd/src/views/wms/pa/workloadreview/index.vue @@ -89,7 +89,7 @@ export default { cruds() { return CRUD({ title: '工作量汇报', - url: 'api/performancemst', + url: 'api/performancemst/query2', idField: 'performance_id', sort: 'performance_id,desc', crudMethod: { ...crudPerformancemst }, diff --git a/mes/qd/src/views/wms/sb/repair/devicerepairplan/index.vue b/mes/qd/src/views/wms/sb/repair/devicerepairplan/index.vue index 7522e5e0..2ab7ac73 100644 --- a/mes/qd/src/views/wms/sb/repair/devicerepairplan/index.vue +++ b/mes/qd/src/views/wms/sb/repair/devicerepairplan/index.vue @@ -129,9 +129,9 @@ - - - + + +