From 38629b873b056a498fa1ae39bdfb91be70eb154a Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 27 Sep 2022 16:31:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../run/rest/DevicerunrecordController.java | 9 ++ .../run/service/DevicerunrecordService.java | 8 + .../impl/DevicerunrecordServiceImpl.java | 114 ++++++++++++-- .../wms/sb/run/wql/EM_DEVICERUNRECORD001.wql | 49 ++++++ mes/qd/src/api/wms/sb/devicerunrecord.js | 10 +- .../wms/sb/run/devicerunrecord/PaDialog.vue | 141 ++++++++++++++++++ .../wms/sb/run/devicerunrecord/index.vue | 107 +++++++++++-- 7 files changed, 413 insertions(+), 25 deletions(-) create mode 100644 mes/qd/src/views/wms/sb/run/devicerunrecord/PaDialog.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/rest/DevicerunrecordController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/rest/DevicerunrecordController.java index 19ce3aaf..e8e30bcc 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/rest/DevicerunrecordController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/rest/DevicerunrecordController.java @@ -66,4 +66,13 @@ public class DevicerunrecordController { devicerunrecordService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + + @PostMapping("/submit") + @Log("填报") + @ApiOperation("填报") + public ResponseEntity submit(@RequestBody JSONObject whereJson) { + devicerunrecordService.submit(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DevicerunrecordService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DevicerunrecordService.java index 2d12f6da..c7f50c7c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DevicerunrecordService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/DevicerunrecordService.java @@ -71,4 +71,12 @@ public interface DevicerunrecordService { * @param ids / */ void deleteAll(Long[] ids); + + + /** + * 填报 + * + * @param whereJson / + */ + void submit(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java index cd2ee714..699f23f8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/service/impl/DevicerunrecordServiceImpl.java @@ -2,12 +2,16 @@ package org.nl.wms.sb.run.service.impl; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import lombok.RequiredArgsConstructor; import org.nl.exception.BadRequestException; +import org.nl.modules.system.service.DeptService; +import org.nl.utils.PageUtil; +import org.nl.utils.SpringContextHolder; import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.sb.run.service.DevicerunrecordService; import org.nl.wms.sb.run.service.dto.DevicerunrecordDto; @@ -18,9 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Pageable; import java.math.BigDecimal; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; @@ -46,16 +48,16 @@ public class DevicerunrecordServiceImpl implements DevicerunrecordService { @Override public Map queryAll(Map whereJson, Pageable page) { + DeptService deptService = SpringContextHolder.getBean(DeptService.class); + String material_type_id = MapUtil.getStr(whereJson, "material_type_id"); String class_idStr = MapUtil.getStr(whereJson, "class_idStr"); - String begin_time = MapUtil.getStr(whereJson, "begin_time"); - String end_time = MapUtil.getStr(whereJson, "end_time"); + String begin_time = MapUtil.getStr(whereJson, "begin_time").substring(0,10); + String end_time = MapUtil.getStr(whereJson, "end_time").substring(0,10); String device_code = MapUtil.getStr(whereJson, "device_code"); HashMap map = new HashMap<>(); - map.put("flag", "1"); - map.put("begin_time", begin_time); - map.put("end_time", end_time); + map.put("flag", "2"); if (ObjectUtil.isNotEmpty(device_code)) map.put("device_code","%"+device_code+"%"); //处理物料当前节点的所有子节点 if (!StrUtil.isEmpty(material_type_id)) { @@ -66,7 +68,40 @@ public class DevicerunrecordServiceImpl implements DevicerunrecordService { String classIds = classstandardService.getAllChildIdStr(class_idStr); map.put("classIds", classIds); } - JSONObject json = WQL.getWO("EM_DEVICERUNRECORD001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "file.device_code ASC,run.run_date ASC"); + // 归属部门 + String dept_id = MapUtil.getStr(whereJson, "dept_id"); + if (!StrUtil.isEmpty(dept_id)) { + String deptIds = deptService.getChildIdStr(Long.parseLong(dept_id)); + map.put("deptIds", deptIds); + } + + ArrayList objects = new ArrayList<>(); + + Date begin_date = DateUtil.parse(begin_time); + Date end_date = DateUtil.parse(end_time); + long betweenDay = DateUtil.between(begin_date, end_date, DateUnit.DAY); + + if (betweenDay == 0) { + // 如果是某天则直接查 + map.put("run_date", begin_time); + JSONArray arr = WQL.getWO("EM_DEVICERUNRECORD001").addParamMap(map).process().getResultJSONArray(0); + objects.addAll(arr); + } else { + // 如果不是则根据日期递增循环查出 然后合并 + for (int i = 0; i <= betweenDay; i++) { + String day_time = DateUtil.offsetDay(begin_date, i).toString().substring(0,10); + map.put("run_date",day_time); + JSONArray arr = WQL.getWO("EM_DEVICERUNRECORD001").addParamMap(map).process().getResultJSONArray(0); + objects.addAll(arr); + } + } + + // 组织分页查询并返回 + Map json = PageUtil.toPage( + PageUtil.toPage(page.getPageNumber(), page.getPageSize(), objects), + objects.size() + ); + return json; } @@ -158,6 +193,12 @@ public class DevicerunrecordServiceImpl implements DevicerunrecordService { public void update(JSONObject whereJson) { WQLObject tab = WQLObject.getWQLObject("EM_BI_DeviceRunRecord"); String devicerecord_id = whereJson.getString("devicerecord_id"); + String runrecord_id = whereJson.getString("runrecord_id"); + + JSONObject jsonObject = tab.query("runrecord_id = '" + runrecord_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonObject)) { + throw new BadRequestException("请先填报"); + } JSONObject jsonFile = WQLObject.getWQLObject("EM_BI_EquipmentFile").query("devicerecord_id = '" + devicerecord_id + "'").uniqueResult(0); @@ -203,4 +244,59 @@ public class DevicerunrecordServiceImpl implements DevicerunrecordService { } } + @Override + @Transactional(rollbackFor = Exception.class) + public void submit(JSONObject whereJson) { + WQLObject tab = WQLObject.getWQLObject("EM_BI_DeviceRunRecord"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + String devicerecord_id = whereJson.getString("devicerecord_id"); + String run_date = whereJson.getString("run_date"); + + JSONObject jsonFile = WQLObject.getWQLObject("EM_BI_EquipmentFile").query("devicerecord_id = '" + devicerecord_id + "'").uniqueResult(0); + String status = jsonFile.getString("status"); + if (!"10,11,20,30,40".contains(status)) { + throw new BadRequestException("此设备不能填报"); + } + + double run_times = whereJson.getDoubleValue("run_times"); //生产时间 + double prepare_times = whereJson.getDoubleValue("prepare_times");//准备时间 + double error_times = whereJson.getDoubleValue("error_times"); //故障时间 + double adjust_times = whereJson.getDoubleValue("adjust_times"); //工装调整时间 + double product_qty = whereJson.getDoubleValue("product_qty"); //生产总量 + double nok_qty = whereJson.getDoubleValue("nok_qty"); //不合格数 + double theory_beat = jsonFile.getDoubleValue("theory_beat"); // 理论节拍 + + JSONObject jsonMst = tab.query("devicerecord_id = '" + devicerecord_id + "' and run_date = '" + run_date + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonMst)) throw new BadRequestException("填报信息已存在"); + + JSONObject json = new JSONObject(); + json.put("runrecord_id", IdUtil.getSnowflake(1,1).nextId()); + json.put("devicerecord_id", whereJson.get("devicerecord_id")); + json.put("run_date", whereJson.getString("run_date")); + json.put("run_times", whereJson.get("run_times")); + json.put("prepare_times", whereJson.get("prepare_times")); + json.put("error_times", whereJson.get("error_times")); + json.put("adjust_times", whereJson.get("adjust_times")); + json.put("product_qty", whereJson.get("product_qty")); + json.put("nok_qty", whereJson.get("nok_qty")); + json.put("remark", whereJson.getString("remark")); + json.put("create_id", currentUserId); + json.put("create_name", nickName); + json.put("create_time", now); + // 计算OEE指标 + try { + BigDecimal div = NumberUtil.div(NumberUtil.sub(run_times, prepare_times, error_times, adjust_times), NumberUtil.sub(run_times, prepare_times, adjust_times)); + BigDecimal div1 = NumberUtil.div(NumberUtil.mul(div, theory_beat, product_qty), NumberUtil.sub(run_times, prepare_times, error_times, adjust_times)); + BigDecimal oee_value = NumberUtil.mul(div1, NumberUtil.div(NumberUtil.sub(product_qty, nok_qty), product_qty)); + json.put("oee_value", oee_value); + } catch (Exception e) { + json.put("oee_value", 0); + } + tab.insert(json); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/wql/EM_DEVICERUNRECORD001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/wql/EM_DEVICERUNRECORD001.wql index 93e360df..773e9490 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/wql/EM_DEVICERUNRECORD001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/run/wql/EM_DEVICERUNRECORD001.wql @@ -18,6 +18,8 @@ 输入.device_code TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string + 输入.run_date TYPEAS s_string + 输入.deptIds TYPEAS f_string [临时表] @@ -77,5 +79,52 @@ ENDPAGEQUERY ENDIF + IF 输入.flag = "2" + QUERY + SELECT + file.devicerecord_id, + file.device_code, + file.device_name, + file.extend_code, + class.class_name, + 输入.run_date AS run_date, + run.runrecord_id, + run.run_times, + run.prepare_times, + run.error_times, + run.adjust_times, + run.product_qty, + run.nok_qty, + run.oee_value, + run.remark, + run.create_name, + run.create_time, + d1.name AS dept_name + FROM + EM_BI_EquipmentFile file + LEFT JOIN EM_BI_DeviceRunRecord run ON file.devicerecord_id = run.devicerecord_id AND 输入.run_date = run.run_date + LEFT JOIN md_pb_classstandard class ON file.material_type_id = class.class_id + LEFT JOIN sys_dept d1 ON file.use_groupid = d1.dept_id + WHERE + file.is_delete = '0' + AND file.status not in ('90','91') + + OPTION 输入.device_code <> "" + (file.device_code like 输入.device_code or + file.device_name like 输入.device_code) + ENDOPTION + + OPTION 输入.classIds <> "" + class.class_id in 输入.classIds + ENDOPTION + + OPTION 输入.deptIds <> "" + d1.dept_id in 输入.deptIds + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + diff --git a/mes/qd/src/api/wms/sb/devicerunrecord.js b/mes/qd/src/api/wms/sb/devicerunrecord.js index 4c7749ff..942a6020 100644 --- a/mes/qd/src/api/wms/sb/devicerunrecord.js +++ b/mes/qd/src/api/wms/sb/devicerunrecord.js @@ -24,4 +24,12 @@ export function edit(data) { }) } -export default { add, edit, del } +export function submit(data) { + return request({ + url: 'api/devicerunrecord/submit', + method: 'post', + data + }) +} + +export default { add, edit, del, submit } diff --git a/mes/qd/src/views/wms/sb/run/devicerunrecord/PaDialog.vue b/mes/qd/src/views/wms/sb/run/devicerunrecord/PaDialog.vue new file mode 100644 index 00000000..498585a0 --- /dev/null +++ b/mes/qd/src/views/wms/sb/run/devicerunrecord/PaDialog.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/mes/qd/src/views/wms/sb/run/devicerunrecord/index.vue b/mes/qd/src/views/wms/sb/run/devicerunrecord/index.vue index f5101b44..177ca5fe 100644 --- a/mes/qd/src/views/wms/sb/run/devicerunrecord/index.vue +++ b/mes/qd/src/views/wms/sb/run/devicerunrecord/index.vue @@ -12,7 +12,7 @@ label-suffix=":" > - + + + + - + + + 填报 + + - - - + - + @@ -112,13 +131,22 @@ - - - - + + + + + + + + + + + + + - + @@ -148,11 +177,14 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css' import crudMaterialbase from '@/api/wms/basedata/master/materialbase' import DateRangePicker from '@/components/DateRangePicker' import DeviceDialog from '@/views/wms/sb/upkeep/devicemaintenanceplan/DeviceDialog' +import { getDepts } from '@/api/system/dept' +import PaDialog from '@/views/wms/sb/run/devicerunrecord/PaDialog' +const start = new Date() const defaultForm = { runrecord_id: null, device_code: null, devicerecord_id: null, run_date: null, run_times: null, prepare_times: null, error_times: null, adjust_times: null, product_qty: null, nok_qty: null, oee_value: null, remark: null, create_id: null, create_name: null, create_time: null } export default { name: 'Devicerunrecord', - components: { pagination, crudOperation, rrOperation, udOperation, Treeselect, DateRangePicker, DeviceDialog }, + components: { pagination, crudOperation, rrOperation, udOperation, Treeselect, DateRangePicker, DeviceDialog, PaDialog }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -162,20 +194,27 @@ export default { sort: 'runrecord_id,desc', crudMethod: { ...crudDevicerunrecord }, optShow: { - add: true, + add: false, edit: false, del: false, download: false, reset: true + }, + query: { + createTime: [start.daysAgo(0), new Date()] } }) }, data() { return { + open: true, classes: [], class_idStr: null, materOpt_code: '23', + depts: [], deviceDialog: false, + openParam: null, + addPaDialog: false, permission: { }, rules: { @@ -194,14 +233,20 @@ export default { crudMaterialbase.getMaterOptType(param).then(res => { this.class_idStr = res.class_idStr this.crud.query.class_idStr = this.class_idStr - this.crud.toQuery() this.queryClassId() }) + this.getDepts() }, methods: { // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { - return true + debugger + if (this.open) { + this.open = false + return false + } else { + return true + } }, hand(value) { this.crud.toQuery() @@ -240,6 +285,38 @@ export default { tableChanged2(row) { this.form.devicerecord_id = row.devicerecord_id this.form.device_code = row.device_code + }, + // 获取弹窗内部门数据 + loadDepts({ action, parentNode, callback }) { + if (action === LOAD_CHILDREN_OPTIONS) { + getDepts({ enabled: true, pid: parentNode.id }).then(res => { + parentNode.children = res.content.map(function(obj) { + if (obj.hasChildren) { + obj.children = null + } + return obj + }) + setTimeout(() => { + callback() + }, 200) + }) + } + }, + getDepts() { + getDepts({ enabled: true }).then(res => { + this.depts = res.content.map(function(obj) { + if (obj.hasChildren) { + obj.children = null + } + return obj + }) + }) + }, + addPa() { + const _selectData = this.$refs.table.selection + const data = _selectData[0] + this.openParam = data + this.addPaDialog = true } } }