From 90469ea6ae8996a9ea5d193f7c86b56c8f9f6072 Mon Sep 17 00:00:00 2001 From: zhangzhiqiang Date: Wed, 17 May 2023 17:36:40 +0800 Subject: [PATCH] =?UTF-8?q?add:=E4=BF=AE=E6=94=B9=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../备份st/IvtChangeTypeEnum.java | 31 ++ .../备份st/StoreIvtServiceImpl.java | 298 ++++++++++++++++++ .../service/MaterialsafeivtService.java | 67 ++++ .../service/StructrelamaterialService.java | 69 ++++ .../service/StructrelavehicletypeService.java | 73 +++++ .../service/dto/MaterialsafeivtDto.java | 40 +++ .../备份st/service/dto/SectattrDto.java | 116 +++++++ .../备份st/service/dto/StorattrDto.java | 107 +++++++ .../备份st/service/dto/StructattrDto.java | 146 +++++++++ .../备份st/service/dto/StructivtDto.java | 66 ++++ .../service/dto/StructrelamaterialDto.java | 32 ++ .../service/dto/StructrelavehicletypeDto.java | 64 ++++ .../impl/MaterialsafeivtServiceImpl.java | 157 +++++++++ .../impl/StructrelamaterialServiceImpl.java | 177 +++++++++++ .../StructrelavehicletypeServiceImpl.java | 187 +++++++++++ .../masterdata_manage/备份st/wql/QLK01.wql | 226 +++++++++++++ .../备份st/wql/QST_IVT_MATERIALSAFE.wql | 85 +++++ .../备份st/wql/QST_IVT_MATERIALSET.wql | 78 +++++ .../wql/ST_Structrelavehicletype_01.wql | 86 +++++ .../masterdata_manage/备份st/wql/stivt.xls | Bin 0 -> 225792 bytes .../impl/ProduceshiftorderServiceImpl.java | 1 - .../product_manage/ReportRecordStatus.java | 21 ++ .../ProduceshiftorderController.java | 10 +- .../IPdmProduceWorkorderService.java | 7 +- .../IPdmProduceWorkorderrecordService.java | 16 + .../dao/PdmProduceWorkorderrecord.java | 148 +++++++++ .../workorder/dao/WorkorderRecord.java | 107 +++++++ .../PdmProduceWorkorderrecordMapper.java | 16 + .../xml/PdmProduceWorkorderrecordMapper.xml | 5 + .../impl/IPdmProduceWorkorderServiceImpl.java | 31 ++ .../PdmProduceWorkorderrecordServiceImpl.java | 20 ++ .../service/ql/dto/OptionRecordQuery.java | 29 ++ .../product_manage/workorder/reportDialog.vue | 174 ++++++++++ 33 files changed, 2685 insertions(+), 5 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/stivt.xls create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/ReportRecordStatus.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorderrecord.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/WorkorderRecord.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/ql/dto/OptionRecordQuery.java create mode 100644 mes/qd/src/views/wms/product_manage/workorder/reportDialog.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java new file mode 100644 index 00000000..99dc952f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java @@ -0,0 +1,31 @@ +package org.nl.wms.masterdata_manage.备份st; + +/** + * // 11-扣减可用; 12-增加可用; + * // 21-减库存; 22-加库存; 23-同时加; 24-同时减 + */ +public enum IvtChangeTypeEnum { + SUB_CAN_USE("扣减可用数", 11), + ADD_CAN_USE("增加用数", 12), + + SUB_IVT("扣减库存", 21), + ADD_IVT("增加库存", 22), + ADD_IVT_AND_CAN_USE("同时加库存和可用", 23), + SUB_IVT_AND_CAN_USE("同时减库存和可用", 24); + + private final String name; + private final int index; + + IvtChangeTypeEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public String getName() { + return name; + } + + public int getIndex() { + return index; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java new file mode 100644 index 00000000..6405a5d4 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java @@ -0,0 +1,298 @@ +package org.nl.wms.masterdata_manage.备份st; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.common.exception.BadRequestException; + import org.nl.common.utils.SecurityUtils; +import org.nl.modules.wql.core.bean.WQLObject; + + +import java.math.BigDecimal; + +/** + * Title: Test.java Description: 一、入库 单据审核,可用数、库存数加上。 取消审核,可用数、库存数减掉 二、出库 + * 单据分配,可用数减掉 取消分配,可用数加回 单据审核,库存数减掉 取消审核,库存数加回 + * + * @author ldjun + * @created 2020年7月23日 下午2:23:04 + */ +public class StoreIvtServiceImpl { + /** + * @discription 添加仓储变动记录 + * @author ldjun + * @created 2020年5月12日 下午12:54:42 + */ + public void addIvtFlow(JSONObject disObj, IvtChangeTypeEnum changeType) { + String struct_id = disObj.getString("struct_id"); + JSONObject pointObj = WQLObject.getWQLObject("sch_base_point").query("point_id ='" + struct_id + "'").uniqueResult(0); + String vehicle_code = disObj.getString("vehicle_code"); + if (StrUtil.isEmpty(struct_id)) { + throw new BadRequestException("仓位标识不能为空!"); + } + String change_qty = disObj.getString("change_qty"); + if (StrUtil.isEmpty(change_qty)) { + change_qty = "0"; + } + if (StrUtil.equals("0", change_qty)) { + throw new BadRequestException("变动量不能都为0!"); + } + JSONObject param = new JSONObject(); + param.put("change_id", IdUtil.getSnowflake(1, 1).nextId()); + param.put("struct_id", struct_id); + param.put("struct_code",pointObj.getString("point_code")); + param.put("struct_name",pointObj.getString("point_name")); + param.put("material_id", disObj.getString("material_id")); + param.put("pcsn", disObj.getString("pcsn")); + //先默认写死,只有一个仓库 + param.put("stor_id", "1528627995269533696"); + param.put("change_type_scode",changeType.getIndex()); + + param.put("inv_id", disObj.getString("bill_id")); + param.put("bill_code", disObj.getString("bill_code")); + param.put("bill_type_scode", disObj.getString("bill_type_scode")); + param.put("qty_unit_id", disObj.getString("qty_unit_id")); + param.put("change_time", DateUtil.now()); + param.put("change_qty", change_qty); + param.put("change_person_id", SecurityUtils.getCurrentUserId()); + param.put("change_person_name", SecurityUtils.getCurrentNickName()); + + + param.put("change_type", changeType.getIndex()); + param.put("workprocedure_id", disObj.getString("workprocedure_id")); + param.put("is_full", disObj.getString("is_full")); + + + // 仓位库存变动记录表【ST_IVT_StructIvtFlow】 + WQLObject ivtFlowTab = WQLObject.getWQLObject("ST_IVT_StructIvtFlow"); + ivtFlowTab.insert(param); + // 根据变动记录改变仓位库存 + param.put("vehicle_code", vehicle_code); + param.put("stewing_time", disObj.getString("stewing_time")); + param.put("producetask_id", disObj.getString("producetask_id")); + this.changeInventory(param, changeType); + } + + /** + * @param param + * @discription 扣减可用数 + * @author ldjun + * @created 2020年5月12日 上午8:52:44 + */ + private void changeInventory(JSONObject param, IvtChangeTypeEnum changeType) { + WQLObject stackIvtTab = WQLObject.getWQLObject("ST_IVT_StructIvt"); + String struct_id = param.getString("struct_id"); + String vehicle_code = param.getString("vehicle_code"); + String stewing_time = param.getString("stewing_time"); + String producetask_id = param.getString("producetask_id"); + String struct_name = param.getString("struct_name"); + String struct_code = param.getString("struct_code"); + if (StrUtil.isEmpty(struct_id)) { + throw new BadRequestException("仓位标识不能为空!"); + } + + String material_id = param.getString("material_id"); + // 拼接查询条件参数 + String whereArgs = "struct_id = '" + struct_id + "' and material_id = '" + material_id + "'"; + JSONObject stackIvtObj = stackIvtTab.query(whereArgs).uniqueResult(0); + + // 需变动的数量 + String change_qty = param.getString("change_qty"); + + // 变动类型 + // 11-扣减可用; 12-增加可用; 13-刷新可用 + // 21-减库存; 22-加库存; 23-同时加; 24-同时减 + // 31-加待入; 32-减待入 33减库存可用数可以为0 34同时减(库存和数量) 考虑负数 35 加库存 考虑负数 + if (stackIvtObj == null) {// 说明该货位上还没有该物料,直接插入记录即可 + JSONObject json = new JSONObject(); + json.put("stockrecord_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("struct_id", param.getString("struct_id")); + json.put("struct_name", param.getString("struct_name")); + json.put("material_id", param.getString("material_id")); + + json.put("pcsn", param.getString("pcsn")); + json.put("qty_unit_id", param.getString("qty_unit_id")); + json.put("instorage_time", DateUtil.now()); + + json.put("canuse_qty", "0"); + json.put("frozen_qty", "0"); + json.put("ivt_qty", "0"); + json.put("warehousing_qty", "0"); + json.put("qc_qty", "0"); + + // 11-扣减可用; 12-增加可用; + // 21-减库存; 22-加库存; 23-同时加(可用和库存); 24-同时减(可用和库存) + // 31-加待入; 32-减待入 + switch (changeType.getIndex()) { + case 11: // 扣减可用重量和数量 + break; + + case 12: + break; + case 13: + break; + case 21: + break; + case 22: + json.put("ivt_qty", change_qty); + break; + case 23: + json.put("ivt_qty", change_qty); + json.put("canuse_qty", change_qty); + break; + case 24:// 同时减 + // 语句 + break; + case 31:// 加待入 + // 语句 + break; + case 32:// 减待入 + // 语句 + break; + default: // 可选 + throw new BadRequestException("变动类型不正确!"); + } + json.put("vehicle_code", vehicle_code); + json.put("stewing_time", stewing_time); + json.put("producetask_id", producetask_id); + json.put("struct_code", struct_code); + json.put("struct_name", struct_name); + json.put("barcode", param.getString("barcode")); + json.put("workprocedure_id", param.getString("workprocedure_id")); + String is_full = param.getString("is_full"); + if (StrUtil.isEmpty(is_full)) { + is_full = "1"; + } + json.put("is_full", is_full); + + stackIvtTab.insert(json); + } + // 对应的货位上有物料,需判断数量重量相关字段是否符合实际逻辑,符合时更新相应记录 + if (stackIvtObj != null) { + // 变动前可用数量 + String before_canuse_qty = stackIvtObj.getString("canuse_qty"); + // 变动前冻结数量 + String before_frozen_qty = stackIvtObj.getString("frozen_qty"); + // 变动前库存数量 + String before_ivt_qty = stackIvtObj.getString("ivt_qty"); + // 变动前待入数量 + String before_warehousing_qty = stackIvtObj.getString("warehousing_qty"); + // 变动前待检数量 + String before_qc_qty = stackIvtObj.getString("qc_qty"); + + // 变动后可用数量 + BigDecimal after_canuse_qty = new BigDecimal(0); + // 变动后冻结数量 + BigDecimal after_frozen_qty = new BigDecimal(0); + // 变动后库存数量 + BigDecimal after_ivt_qty = new BigDecimal(0); + // 变动后待入数量 + BigDecimal after_warehousing_qty = new BigDecimal(0); + // 变动后待检数量 + BigDecimal after_qc_qty = new BigDecimal(0); + + // 判断是否减为0 + boolean is_sub0 = false; + switch (changeType.getIndex()) { + case 11: // 扣减可用重量和数量 + // 变动后可用数量 + after_canuse_qty = NumberUtil.sub(before_canuse_qty, change_qty); + if (after_canuse_qty.doubleValue() < 0) { + throw new BadRequestException("可用数量不足,无法操作!"); + } + stackIvtObj.put("canuse_qty", after_canuse_qty); + break; + case 12:// 12-增加可用重量和数量; + // 变动后可用数量 + after_canuse_qty = NumberUtil.add(before_canuse_qty, change_qty); + stackIvtObj.put("canuse_qty", after_canuse_qty); + break; + case 13:// 刷新可用数量和重量 + // 语句 + break; + case 21:// 减库存 + // 变动后库存数量 + after_ivt_qty = NumberUtil.sub(before_ivt_qty, change_qty); + if (after_ivt_qty.doubleValue() < 0) { + throw new BadRequestException("可用数量不足,无法操作!"); + } + if (after_ivt_qty.doubleValue() <= 0) { + is_sub0 = true; + } + stackIvtObj.put("ivt_qty", after_ivt_qty); + break; + case 33:// 减库存 + after_ivt_qty = NumberUtil.sub(before_ivt_qty, change_qty); + if (after_ivt_qty.doubleValue() < 0) { + throw new BadRequestException("库存数量不足,无法操作!"); + } + if (after_ivt_qty.doubleValue() <= 0) { + is_sub0 = true; + } + stackIvtObj.put("ivt_qty", after_ivt_qty); + break; + case 22:// 加库存重量和数量 + // 变动后库存数量 + after_ivt_qty = NumberUtil.add(before_ivt_qty, change_qty); + stackIvtObj.put("ivt_qty", after_ivt_qty); + break; + case 23:// 同时加(可用和库存) + // 变动后可用数量 + after_canuse_qty = NumberUtil.add(before_canuse_qty, change_qty); + stackIvtObj.put("canuse_qty", after_canuse_qty); + + // 变动后库存数量 + after_ivt_qty = NumberUtil.add(before_ivt_qty, change_qty); + stackIvtObj.put("ivt_qty", after_ivt_qty); + // 语句 + break; + case 24:// 同时减(库存和数量) + // 变动后可用数量 + after_canuse_qty = NumberUtil.sub(before_canuse_qty, change_qty); + if (after_canuse_qty.doubleValue() < 0) { + throw new BadRequestException("可用数量不足,无法操作!"); + } + stackIvtObj.put("canuse_qty", after_canuse_qty); + + // 变动后库存数量 + after_ivt_qty = NumberUtil.sub(before_ivt_qty, change_qty); + if (after_ivt_qty.doubleValue() < 0) { + throw new BadRequestException("可用数量不足,无法操作!"); + } + if (after_ivt_qty.doubleValue() <= 0) { + is_sub0 = true; + } + stackIvtObj.put("ivt_qty", after_ivt_qty); + // 语句 + + break; + case 31:// 加待入 + // 语句 + break; + case 32:// 减待入 + // 语句 + break; + default: // 可选 + throw new BadRequestException("变动类型不正确!"); + } + + + // 库存减为0,删除该记录 + if (is_sub0) { + // 出完货以后更新载具号为空 + JSONObject structObj = new JSONObject(); + structObj.put("storagevehicle_code", ""); + structObj.put("struct_id", stackIvtObj.getString("struct_id")); + stackIvtTab.delete(whereArgs); + + } else {//更新 + stackIvtObj.put("vehicle_code", vehicle_code); + stackIvtTab.update(stackIvtObj, whereArgs); + } + + } + + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java new file mode 100644 index 00000000..dfe421d1 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java @@ -0,0 +1,67 @@ + +package org.nl.wms.masterdata_manage.备份st.service; + +import org.nl.wms.masterdata_manage.备份st.service.dto.MaterialsafeivtDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author zhouz +* @date 2021-12-10 +**/ +public interface MaterialsafeivtService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param material_id ID + * @return Materialsafeivt + */ + MaterialsafeivtDto findById(Long material_id); + + /** + * 根据编码查询 + * @param code code + * @return Materialsafeivt + */ + MaterialsafeivtDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(MaterialsafeivtDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(MaterialsafeivtDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + void insertSafe(Map whereJson); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java new file mode 100644 index 00000000..94ed18ef --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java @@ -0,0 +1,69 @@ + +package org.nl.wms.masterdata_manage.备份st.service; + +import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelamaterialDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author zhouz +* @date 2021-12-09 +**/ +public interface StructrelamaterialService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param material_type_id ID + * @return Structrelamaterial + */ + StructrelamaterialDto findById(Long material_type_id); + + /** + * 根据编码查询 + * @param code code + * @return Structrelamaterial + */ + StructrelamaterialDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(StructrelamaterialDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(StructrelamaterialDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + void insertSet(Map whereJson); + + void delSet(Map whereJson); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java new file mode 100644 index 00000000..7989f745 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java @@ -0,0 +1,73 @@ + +package org.nl.wms.masterdata_manage.备份st.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelavehicletypeDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-04-27 +**/ +public interface StructrelavehicletypeService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param relation_id ID + * @return Structrelavehicletype + */ + StructrelavehicletypeDto findById(String relation_id); + + /** + * 根据编码查询 + * @param code code + * @return Structrelavehicletype + */ + StructrelavehicletypeDto findByCode(String code); + + + /** + * 创建 + * @param param / + */ + void create(JSONObject param); + + /** + * 编辑 + * @param param / + */ + void update(JSONObject param); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(String[] ids); + + /** + * 查询仓位 + * @return + */ + JSONArray getStruct(); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java new file mode 100644 index 00000000..c14f7dbd --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java @@ -0,0 +1,40 @@ +package org.nl.wms.masterdata_manage.备份st.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author zhouz +* @date 2021-12-10 +**/ +@Data +public class MaterialsafeivtDto implements Serializable { + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long stor_id; + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long material_id; + + private BigDecimal safe_ivt_down; + + private BigDecimal safe_ivt_up; + + private Long qty_unit_id; + + private String qty_unit_name; + + private Long set_id; + + private String set_name; + + private String set_time; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java new file mode 100644 index 00000000..fca16eb6 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java @@ -0,0 +1,116 @@ +package org.nl.wms.masterdata_manage.备份st.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author zhouz +* @date 2021-12-09 +**/ +@Data +public class SectattrDto implements Serializable { + + /** 库区标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long sect_id; + + /** 库区编码 */ + private String sect_code; + + /** 库区名称 */ + private String sect_name; + + /** 库区简称 */ + private String simple_name; + + /** 库区类型 */ + private String sect_type_attr; + + /** 仓库标识 */ + private Long stor_id; + + /** 仓库名称 */ + private String stor_name; + + /** 仓库类型 */ + private String stor_type; + + /** 容量 */ + private BigDecimal capacity; + + /** 宽度 */ + private BigDecimal width; + + /** 高度 */ + private BigDecimal height; + + /** 深度 */ + private BigDecimal zdepth; + + /** 起始X坐标 */ + private BigDecimal xqty; + + /** 起始Y坐标 */ + private BigDecimal yqty; + + /** 起始Z坐标 */ + private BigDecimal zqty; + + /** 负责人 */ + private String sect_manager_name; + + /** 负责人电话 */ + private String mobile_no; + + /** 备注 */ + private String remark; + + /** 创建人 */ + private String create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人姓名 */ + private String update_name; + + /** 修改时间 */ + private String update_time; + + /** 是否删除 */ + private String is_delete; + + /** 背景色 */ + private String back_ground_color; + + /** 前景色 */ + private String front_ground_color; + + /** 背景图片 */ + private String back_ground_pic; + + /** 字体显示方向 */ + private String font_direction_scode; + + /** 所在楼层 */ + private BigDecimal floor_no; + + /** 是否启用 */ + private String is_used; + + /** 外部标识 */ + private String ext_id; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java new file mode 100644 index 00000000..1c9e06a8 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java @@ -0,0 +1,107 @@ +package org.nl.wms.masterdata_manage.备份st.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author zhouz +* @date 2021-12-08 +**/ +@Data +public class StorattrDto implements Serializable { + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long stor_id; + + /** 仓库编码 */ + private String stor_code; + + /** 仓库名称 */ + private String stor_name; + + /** 简称 */ + private String simple_name; + + /** 容量 */ + private BigDecimal stor_capacity; + + /** 总面积(㎡) */ + private BigDecimal total_area; + + /** 仓库性质 */ + private String stor_type_scode; + + private String is_virtualstore; + + private String is_semi_finished; + + private String is_materialstore; + + private String is_productstore; + + private String is_reversed; + + private String is_mvout_auto_cfm; + + private String is_mvin_auto_cfm; + + private String area; + + /** 地址 */ + private String storea_ddress; + + /** 负责人 */ + private String principal; + + /** 联系电话 */ + private String office_phone; + + private String mobile_no; + + /** 备注 */ + private String remark; + + private BigDecimal order_index; + + private String whstate_scode; + + /** 是否启用 */ + private String is_used; + + private String base_class_id; + + private String create_id; + + private String create_name; + + private String create_time; + + private String update_id; + + private String update_name; + + private String update_time; + + private Long sysownerid; + + private Long sysdeptid; + + private Long syscompanyid; + + private String is_delete; + + private String ext_id; + + private String depart_name; + + private String company_name; + + private String is_attachment; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java new file mode 100644 index 00000000..9f67aeb4 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java @@ -0,0 +1,146 @@ +package org.nl.wms.masterdata_manage.备份st.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author zhouz +* @date 2021-12-09 +**/ +@Data +public class StructattrDto implements Serializable { + + /** 仓位标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long struct_id; + + /** 仓位编码 */ + private String struct_code; + + /** 仓位名称 */ + private String struct_name; + + /** 仓位简称 */ + private String simple_name; + + /** 库区标识 */ + private Long sect_id; + + /** 库区编码 */ + private String sect_code; + + /** 库区名称 */ + private String sect_name; + + /** 仓库标识 */ + private Long stor_id; + + /** 仓库编码 */ + private String stor_code; + + /** 仓库名称 */ + private String stor_name; + + /** 仓库类型 */ + private String stor_type; + + /** 容量 */ + private BigDecimal capacity; + + /** 宽度 */ + private BigDecimal width; + + /** 高度 */ + private BigDecimal height; + + /** 深度 */ + private BigDecimal zdepth; + + /** 承受重量 */ + private BigDecimal weight; + + /** 起始X坐标 */ + private BigDecimal xqty; + + /** 起始Y坐标 */ + private BigDecimal yqty; + + /** 起始Z坐标 */ + private BigDecimal zqty; + + /** 是否临时仓位 */ + private String is_tempstruct; + + /** 创建人 */ + private String create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人姓名 */ + private String update_name; + + /** 修改时间 */ + private String update_time; + + /** 是否删除 */ + private String is_delete; + + /** 背景色 */ + private String back_ground_color; + + /** 前景色 */ + private String front_ground_color; + + /** 背景图片 */ + private String back_ground_pic; + + /** 字体显示方向 */ + private String font_direction_scode; + + /** 是否启用 */ + private String is_used; + + /** 是否判断高度 */ + private String is_zdepth; + + /** 存储载具标识 */ + private Long storagevehicle_id; + + /** 存储载具号 */ + private String storagevehicle_code; + + /** 存储载具类型 */ + private String storagevehicle_type; + + /** 是否空载具 */ + private String is_emptyvehicle; + + /** 载具数量 */ + private BigDecimal storagevehicle_qty; + + /** 锁定类型 */ + private String lock_type; + + /** 物料高度类型 */ + private String material_height_type; + + /** 外部标识 */ + private String ext_id; + + /** 备注 */ + private String remark; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java new file mode 100644 index 00000000..5ea1bfc1 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java @@ -0,0 +1,66 @@ +package org.nl.wms.masterdata_manage.备份st.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import java.util.Date; + + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author geng by +* @date 2022-06-02 +**/ +@Data +public class StructivtDto implements Serializable { + + /** 库存记录标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long stockrecord_id; + + /** 仓位标识 */ + private Long struct_id; + + /** 仓位编码 */ + private String struct_code; + + /** 仓位名称 */ + private String struct_name; + + /** 工序标识 */ + private Long workprocedure_id; + + /** 物料标识 */ + private Long material_id; + + /** 品质类型 */ + private String quality_scode; + + /** 批次 */ + private String pcsn; + + /** 可用数 */ + private BigDecimal canuse_qty; + + /** 冻结数 */ + private BigDecimal frozen_qty; + + /** 库存数 */ + private BigDecimal ivt_qty; + + /** 待入数 */ + private BigDecimal warehousing_qty; + + /** 计量单位标识 */ + private Long qty_unit_id; + + /** 入库时间 */ + private Date instorage_time; + + /** 销售单标识 */ + private Long sale_id; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java new file mode 100644 index 00000000..bb21ad08 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java @@ -0,0 +1,32 @@ +package org.nl.wms.masterdata_manage.备份st.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import java.util.Date; + + +import java.io.Serializable; + +/** +* @description / +* @author zhouz +* @date 2021-12-09 +**/ +@Data +public class StructrelamaterialDto implements Serializable { + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long sect_id; + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long material_type_id; + + private Long set_id; + + private String set_name; + + private Date set_time; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java new file mode 100644 index 00000000..c848b4d3 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java @@ -0,0 +1,64 @@ +package org.nl.wms.masterdata_manage.备份st.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author geng by + * @description / + * @date 2022-04-27 + **/ +@Data +public class StructrelavehicletypeDto implements Serializable { + + /** + * 关系标识 + */ + private String relation_id; + + /** + * 仓位标识 + */ + private String struct_id; + + /** + * 载具类型 + */ + private String vehicle_type; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 是否已删除 + */ + private String is_delete; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java new file mode 100644 index 00000000..aad7705b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java @@ -0,0 +1,157 @@ + +package org.nl.wms.masterdata_manage.备份st.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; + import org.nl.common.utils.SecurityUtils; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.masterdata_manage.备份master.service.ClassstandardService; +import org.nl.wms.masterdata_manage.备份st.service.MaterialsafeivtService; +import org.nl.wms.masterdata_manage.备份st.service.dto.MaterialsafeivtDto; + +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author zhouz + * @description 服务实现 + * @date 2021-12-10 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class MaterialsafeivtServiceImpl implements MaterialsafeivtService { + private final ClassstandardService classstandardService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = (String) whereJson.get("search"); + String class_idStr = (String) whereJson.get("class_idStr"); + HashMap map = new HashMap<>(); + if (!StrUtil.isEmpty(search)) { + //处理转义字符 + if (search.contains("\\")) search = search.replace("\\", "\\\\\\"); + map.put("search", "%" + search + "%"); + } + String material_type_id = (String) whereJson.get("material_type_id"); + //处理物料当前节点的所有子节点 + if (!StrUtil.isEmpty(material_type_id)) { + map.put("material_type_id", material_type_id); + String classIds = classstandardService.getChildIdStr(material_type_id); + map.put("classIds", classIds); + } else if (ObjectUtil.isNotEmpty(class_idStr)) { + String classIds = classstandardService.getAllChildIdStr(class_idStr); + map.put("classIds", classIds); + } + + map.put("flag", "1"); + map.put("stor_id", MapUtil.getStr(whereJson, "stor_id")); + JSONObject jo = WQL.getWO("QST_IVT_MATERIALSAFE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "set_time desc"); + return jo; + } + + @Override + public void insertSafe(Map whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String stor_id = (String) whereJson.get("stor_id"); + ArrayList rows = (ArrayList) whereJson.get("rows"); + for (int i = 0; i < rows.size(); i++) { + HashMap row = rows.get(i); + WQLObject.getWQLObject("ST_IVT_MaterialSafeIvt").delete("stor_id = '" + stor_id + "' AND material_id = '" + row.get("material_id") + "'"); + JSONObject jo = new JSONObject(); + jo.put("stor_id", stor_id); + jo.put("safe_ivt_down", row.get("safe_ivt_down")); + jo.put("material_id", row.get("material_id")); + jo.put("safe_ivt_up", "999999"); + jo.put("qty_unit_id", row.get("qty_unit_id")); + jo.put("qty_unit_name", row.get("qty_unit_name")); + jo.put("set_id", currentUserId + ""); + jo.put("set_name", nickName); + jo.put("set_time", DateUtil.now()); + WQLObject.getWQLObject("ST_IVT_MaterialSafeIvt").insert(jo); + } + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(MaterialsafeivtDto.class); + return list; + } + + @Override + public MaterialsafeivtDto findById(Long material_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); + JSONObject json = wo.query("material_id =" + material_id + "").uniqueResult(0); + final MaterialsafeivtDto obj = json.toJavaObject(MaterialsafeivtDto.class); + return obj; + } + + @Override + public MaterialsafeivtDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + final MaterialsafeivtDto obj = json.toJavaObject(MaterialsafeivtDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(MaterialsafeivtDto dto) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(MaterialsafeivtDto dto) { + MaterialsafeivtDto entity = this.findById(dto.getMaterial_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + + WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); + for (Long material_id : ids) { + JSONObject param = new JSONObject(); + param.put("material_id", String.valueOf(material_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", DateUtil.now()); + wo.update(param); + } + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java new file mode 100644 index 00000000..49e1cf03 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java @@ -0,0 +1,177 @@ + +package org.nl.wms.masterdata_manage.备份st.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; + import org.nl.common.utils.SecurityUtils; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.masterdata_manage.备份master.service.ClassstandardService; +import org.nl.wms.masterdata_manage.备份st.service.StructrelamaterialService; +import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelamaterialDto; + +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Date; +/** + * @author zhouz + * @description 服务实现 + * @date 2021-12-09 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class StructrelamaterialServiceImpl implements StructrelamaterialService { + private final ClassstandardService classstandardService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = (String) whereJson.get("search"); + HashMap map = new HashMap<>(); + if (!StrUtil.isEmpty(search)) { + map.put("search", "%" + search + "%"); + } + map.put("flag", "1"); + map.put("stor_id", (String) whereJson.get("stor_id")); + map.put("sect_id", (String) whereJson.get("sect_id")); + String material_type_id = (String) whereJson.get("material_type_id"); + String class_idStr = (String) whereJson.get("class_idStr"); + //处理物料当前节点的所有子节点 + if (!StrUtil.isEmpty(material_type_id)) { + map.put("material_type_id", material_type_id); + String classIds = classstandardService.getChildIdStr(material_type_id); + map.put("classIds", classIds); + } else if (ObjectUtil.isNotEmpty(class_idStr)) { + String classIds = classstandardService.getAllChildIdStr(class_idStr); + map.put("classIds", classIds); + } + JSONObject jo = WQL.getWO("QST_IVT_MATERIALSET").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "set_time desc"); + return jo; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(StructrelamaterialDto.class); + return list; + } + + @Override + public StructrelamaterialDto findById(Long material_type_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); + JSONObject json = wo.query("material_type_id =" + material_type_id + "").uniqueResult(0); + final StructrelamaterialDto obj = json.toJavaObject(StructrelamaterialDto.class); + return obj; + } + + @Override + public StructrelamaterialDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + final StructrelamaterialDto obj = json.toJavaObject(StructrelamaterialDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(StructrelamaterialDto dto) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + + dto.setMaterial_type_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setSet_name(nickName); + dto.setSet_time(new Date()); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(StructrelamaterialDto dto) { + StructrelamaterialDto entity = this.findById(dto.getMaterial_type_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); + for (Long material_type_id : ids) { + JSONObject param = new JSONObject(); + param.put("material_type_id", String.valueOf(material_type_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", DateUtil.now()); + wo.update(param); + } + } + + @Override + public void insertSet(Map whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + WQLObject mater = WQLObject.getWQLObject("ST_IVT_StructRelaMaterial"); + String sect_id = (String) whereJson.get("sect_id"); + ArrayList class_rows = (ArrayList) whereJson.get("class_rows"); + for (int i = 0; i < class_rows.size(); i++) { + HashMap class_row = class_rows.get(i); + JSONObject material_set = mater.query("sect_id = '" + sect_id + "' AND material_type_id = '" + class_row.get("class_id") + "'") + .uniqueResult(0); + if (material_set != null) { + HashMap update_map = new HashMap<>(); + update_map.put("set_id", currentUserId + ""); + update_map.put("set_name", nickName); + update_map.put("set_time", DateUtil.now()); + mater.update(update_map, "sect_id = '" + sect_id + "' AND material_type_id = '" + class_row.get("class_id") + "'"); + } else { + JSONObject jo = new JSONObject(); + jo.put("sect_id", sect_id); + jo.put("material_type_id", class_row.get("class_id")); + jo.put("set_id", currentUserId + ""); + jo.put("set_name", nickName); + jo.put("set_time", DateUtil.now()); + mater.insert(jo); + } + } + } + + @Override + public void delSet(Map whereJson) { + String sect_id = (String) whereJson.get("sect_id"); + String material_type_id = (String) whereJson.get("material_type_id"); + WQLObject.getWQLObject("ST_IVT_StructRelaMaterial").delete("sect_id = '" + sect_id + "' AND material_type_id = '" + material_type_id + "'"); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java new file mode 100644 index 00000000..2cbeafe1 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java @@ -0,0 +1,187 @@ + +package org.nl.wms.masterdata_manage.备份st.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.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + import org.nl.common.utils.SecurityUtils; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.masterdata_manage.备份st.service.StructrelavehicletypeService; +import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelavehicletypeDto; + +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * @author geng by + * @description 服务实现 + * @date 2022-04-27 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class StructrelavehicletypeServiceImpl implements StructrelavehicletypeService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = MapUtil.getStr(whereJson, "search"); + JSONObject map = new JSONObject(); + map.put("flag", "2"); + if (ObjectUtil.isNotEmpty(search)) { + map.put("search", "%" + search + "%"); + } + JSONObject json = WQL.getWO("ST_Structrelavehicletype_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "view_vehicleType.struct_code"); + WQLObject wo = WQLObject.getWQLObject("sys_dict_detail"); + JSONArray content = json.getJSONArray("content"); + JSONArray newContent = new JSONArray(); + for (int i = 0; i < content.size(); i++) { + JSONObject jsonObject = content.getJSONObject(i); + String vehicle_type = jsonObject.getString("vehicle_type"); + String[] vehicle_types = new String[0]; + if (StrUtil.isNotEmpty(vehicle_type)){ + vehicle_types = vehicle_type.split(","); + } + String typeNames = ""; + if (vehicle_types.length > 0){ + for (int j = 0; j < vehicle_types.length; j++) { + JSONObject type = wo.query("value = '" + vehicle_types[j] + "' and name = 'storagevehicle_type'").uniqueResult(0); + String typeName = type.getString("label"); + if (vehicle_types.length - 1 != j) { + typeNames = typeNames + typeName + ","; + } + if (vehicle_types.length - 1 == j) { + typeNames = typeNames + typeName; + } + } + } + jsonObject.put("is_edit","0"); + jsonObject.put("vehicle_type_name", typeNames); + jsonObject.put("vehicle_type", vehicle_types); + newContent.add(jsonObject); + } + json.put("content", newContent); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(StructrelavehicletypeDto.class); + return null; + } + + @Override + public StructrelavehicletypeDto findById(String relation_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); + JSONObject json = wo.query("relation_id = '" + relation_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(StructrelavehicletypeDto.class); + } + return null; + } + + @Override + public StructrelavehicletypeDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(StructrelavehicletypeDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(JSONObject param) { + String struct_id = param.getString("struct_id"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); + JSONArray vehicle_types = param.getJSONArray("vehicle_type"); + for (int i = 0; i < vehicle_types.size(); i++) { + param.put("relation_id", String.valueOf(IdUtil.getSnowflake(1, 1).nextId())); + param.put("struct_id", struct_id); + param.put("vehicle_type", vehicle_types.get(i)); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", DateUtil.now()); + param.put("create_id", currentUserId); + param.put("create_name", nickName); + param.put("create_time", DateUtil.now()); + wo.insert(param); + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject param) { + String struct_id = param.getString("struct_id"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); + + wo.delete("struct_id = '" + struct_id + "'"); + JSONArray vehicle_types = param.getJSONArray("vehicle_type"); + if (vehicle_types.size() == 0){ + param.put("relation_id", String.valueOf(IdUtil.getSnowflake(1, 1).nextId())); + param.put("struct_id", struct_id); + param.put("vehicle_type", null); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", DateUtil.now()); + param.put("create_id", currentUserId); + param.put("create_name", nickName); + param.put("create_time", DateUtil.now()); + wo.insert(param); + return; + } + for (int i = 0; i < vehicle_types.size(); i++) { + param.put("relation_id", String.valueOf(IdUtil.getSnowflake(1, 1).nextId())); + param.put("struct_id", struct_id); + param.put("vehicle_type", vehicle_types.get(i)); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", DateUtil.now()); + param.put("create_id", currentUserId); + param.put("create_name", nickName); + param.put("create_time", DateUtil.now()); + wo.insert(param); + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); + for (String struct_id : ids) { + wo.delete("struct_id = '" + struct_id + "'"); + } + } + + @Override + public JSONArray getStruct() { + JSONObject map = new JSONObject(); + map.put("flag", "1"); + JSONArray json = WQL.getWO("ST_Structrelavehicletype_01").addParamMap(map).process().getResultJSONArray(0); + return json; + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql new file mode 100644 index 00000000..2ba88dab --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql @@ -0,0 +1,226 @@ +[交易说明] + 交易名: 将海亮的物料导入mysql + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.processroute_uuid TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + * + FROM + MD_PB_BaseData_ClassInfo classinfot + LEFT JOIN MD_PB_BaseData_ClassStandard standard ON classinfot.class_uuid = standard.class_uuid + LEFT JOIN MD_ME_MaterialBase material ON material.material_uuid = classinfot.base_data_uuid + left join MD_ME_MaterialExt ext on ext.material_uuid = material.material_uuid + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + MD_PB_BaseData_ClassStandard class + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + * + FROM + ST_IVT_BSREALSTORATTR + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + * + FROM + ST_IVT_SECTATTR + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + * + FROM + ST_IVT_STRUCTATTR + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + * + FROM + ST_IVT_StorageVehicleInfo + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "7" + QUERY + SELECT + * + FROM + wdk_sysparam + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "8" + QUERY + SELECT + * + FROM + IF_CacheLine_Position + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "9" + QUERY + SELECT + * + FROM + st_cacheline_position + ENDSELECT + ENDQUERY + ENDIF + +IF 输入.flag = "10" + QUERY + SELECT + mb.*, + class.class_code, + class.class_name + FROM + md_me_materialbase mb + LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id + WHERE + mb.is_delete = '0' + AND 1 = 1 + AND class.class_id IN ( '1528555445302726656', '1528555443906023424', '1528555445080428544' ) + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "11" + QUERY + SELECT + mb.*, + class.class_code, + class.class_name + FROM + md_me_materialbase mb + LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id + WHERE + mb.is_delete = '0' + AND 1 = 1 + AND class.class_id IN ( '1528555444031852544', '1528555444778438656', '1528555444291899392' ) + ENDSELECT + ENDQUERY +ENDIF + + +IF 输入.flag = "12" + QUERY + SELECT + * + FROM + PDM_BI_WorkshopMaterialCorr + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "13" + QUERY + SELECT + * + FROM + PDM_BI_SemiMaterialCorr + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "14" + QUERY + SELECT + * + FROM + PDM_BI_WorkshopMaterialCorr corr + LEFT JOIN PF_PB_SysDicInfo sys ON sys.sysdic_code = corr.materialprocess_series + AND sys.sysdic_type = 'IF_WCS_DEVICESERIES' + ENDSELECT + ENDQUERY +ENDIF + + + +IF 输入.flag = "15" + QUERY + SELECT + * + FROM + PDM_BI_ProduceProcessRoute route + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "16" + QUERY + SELECT + * + FROM + PDM_BI_ProduceProcessRoute route + LEFT JOIN PDM_BI_ProduceProcessRouteDtl dtl ON route.processroute_uuid = dtl.processroute_uuid + route.processroute_uuid = 输入.processroute_uuid + order by workprocedure_number + ENDSELECT + ENDQUERY +ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql new file mode 100644 index 00000000..0dd25798 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql @@ -0,0 +1,85 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + 输入.classIds TYPEAS f_string + 输入.stor_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + (case when stor.stor_id is null THEN '' else stor.stor_id end) AS stor_id, + (case when stor.stor_code is null then 'yclk01' else stor.stor_code end) stor_code, + (case when stor.stor_name is null then '原料库' else stor.stor_name end) stor_name, + (case when safe.safe_ivt_down is null then 0 else safe.safe_ivt_down end) safe_ivt_down, + mb.material_code, + mb.material_name, + mb.base_unit_id, + mb.material_id, + mb.base_unit_id AS qty_unit_id, + safe.set_name, + safe.set_time, + unit.unit_name AS qty_unit_name + FROM + md_me_materialbase mb + LEFT JOIN st_ivt_materialsafeivt safe ON safe.material_id = mb.material_id + LEFT JOIN st_ivt_bsrealstorattr stor ON stor.stor_id = safe.stor_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mb.base_unit_id + LEFT JOIN md_pb_classstandard class ON class.class_id =mb.material_type_id + WHERE + 1=1 + OPTION 输入.classIds <> "" + mb.material_type_id in 输入.classIds + ENDOPTION + OPTION 输入.stor_id <> "" + stor.stor_id = 输入.stor_id + ENDOPTION + OPTION 输入.search <> "" + ( + mb.material_code like 输入.search + OR + mb.material_name like 输入.search + ) + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql new file mode 100644 index 00000000..3eff3c77 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql @@ -0,0 +1,78 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + 输入.stor_id TYPEAS s_string + 输入.sect_id TYPEAS s_string + 输入.classIds TYPEAS f_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + se.sect_code, + se.sect_name, + class.class_code, + class.class_name, + sm.* + FROM + st_ivt_structrelamaterial sm + INNER JOIN st_ivt_sectattr se ON se.sect_id = sm.sect_id + INNER JOIN md_pb_classstandard class ON class.class_id = sm.material_type_id + OPTION 输入.search <> "" + ( + class.class_code like 输入.search + OR + class.class_name like 输入.search + ) + ENDOPTION + OPTION 输入.stor_id <> "" + se.stor_id = 输入.stor_id + ENDOPTION + OPTION 输入.sect_id <> "" + se.sect_id = 输入.sect_id + ENDOPTION + OPTION 输入.classIds <> "" + class.class_id in 输入.classIds + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql new file mode 100644 index 00000000..d7e77197 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql @@ -0,0 +1,86 @@ +[交易说明] + 交易名: 仓位载具类型查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + * + FROM + st_ivt_structattr + WHERE + is_delete = '0' and struct_id not in( + select distinct struct_id from st_ivt_structrelavehicletype + ) + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + * + FROM + ( + SELECT + any_value ( vehicleType.struct_id ) AS struct_id, + any_value ( vehicleType.create_id ) AS create_id, + any_value ( vehicleType.create_name ) AS create_name, + any_value ( vehicleType.create_time ) AS create_time, + any_value ( vehicleType.update_optname ) AS update_optname, + any_value ( struct.struct_code ) AS struct_code, + any_value ( vehicleType.update_time ) AS update_time, + any_value ( struct.struct_name ) AS struct_name, + any_value ( GROUP_CONCAT( vehicleType.vehicle_type ) ) AS vehicle_type + FROM + ST_IVT_StructRelaVehicleType vehicleType + LEFT JOIN st_ivt_structattr struct ON vehicleType.struct_id = struct.struct_id + GROUP BY + vehicleType.struct_id + ) AS view_vehicleType + WHERE + 1 = 1 + OPTION 输入.search <> "" + (view_vehicleType.struct_code like 输入.search or + view_vehicleType.struct_name like 输入.search) + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/stivt.xls new file mode 100644 index 0000000000000000000000000000000000000000..60278aafb1d86c3ff281b8895bc17adbb2d5914d GIT binary patch literal 225792 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 AQ2+n{ literal 0 HcmV?d00001 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java index 4156111b..db0c60de 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java @@ -339,7 +339,6 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService{ WQLObject.getWQLObject("pdm_produce_workorder").update(MapOf.of("workorder_id", workorder_id, "workorder_status", WorkerOrderEnum.SEND.getCode(), "update_id", SecurityUtils.getCurrentUserId(), "update_name", SecurityUtils.getCurrentNickName(), "update_time", DateUtil.now())); Map resp = wmsToAcsService.order(array); //TODO:记录表记录操作 - return RestBusinessTemplate.execute(() -> resp); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/ReportRecordStatus.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/ReportRecordStatus.java new file mode 100644 index 00000000..b201d2f7 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/ReportRecordStatus.java @@ -0,0 +1,21 @@ +package org.nl.wms.product_manage; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/* + * @author ZZQ + * @Date 2023/5/17 12:26 + */ +@AllArgsConstructor +@Getter +public enum ReportRecordStatus { + + CREATE("1","生成"), + REPORT("2","报工"), + FINISH("3","审核完成"); + + private String code; + private String desc; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java index c43e54ba..cb6bbbeb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/ProduceshiftorderController.java @@ -11,6 +11,7 @@ import org.nl.common.utils.api.ResultCode; import org.nl.modules.common.exception.BizCoreException; import org.nl.wms.mps.service.ProduceshiftorderService; import org.nl.wms.mps.service.dto.DeviceDto; +import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; @@ -33,20 +34,22 @@ import java.util.Map; public class ProduceshiftorderController{ private final ProduceshiftorderService produceshiftorderService; private final IPdmProduceWorkorderService iPdmProduceWorkorderService; + private final IPdmBiDeviceService pdmBiDeviceService; @PostMapping("/getDevice") @Log("根据登录用户设备下拉") @ApiOperation("根据登录用户设备下拉") public ResponseEntity getDevice(@RequestBody JSONObject param) { + //从设备拉去 return new ResponseEntity<>(produceshiftorderService.getDevice(param), HttpStatus.OK); } @PostMapping("/getTable") @Log("获取工单生产记录") @ApiOperation("获取工单生产记录") - //@PreAuthorize("@el.check('produceshiftorder:list')") public ResponseEntity getTable(@RequestBody JSONObject param) { + return new ResponseEntity<>(produceshiftorderService.getTable(param), HttpStatus.OK); } @@ -80,14 +83,15 @@ public class ProduceshiftorderController{ @Log("看板报工") @ApiOperation("看板报工") public ResponseEntity saveReport(@RequestBody JSONObject param) { - return new ResponseEntity<>(produceshiftorderService.saveReport(param), HttpStatus.OK); + return new ResponseEntity<>(iPdmProduceWorkorderService.report(param), HttpStatus.OK); } @PostMapping("/finish") @Log("看板强制完成") @ApiOperation("看板强制完成") public ResponseEntity finish(@RequestBody JSONObject param) { - return new ResponseEntity<>(produceshiftorderService.finish(param), HttpStatus.OK); + iPdmProduceWorkorderService.finish(param); + return new ResponseEntity<>(HttpStatus.OK); } @PostMapping("/getReportWork") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java index 58d5af34..6bb5e166 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java @@ -108,6 +108,11 @@ public interface IPdmProduceWorkorderService extends IService + * 生产设备报工记录表 服务类 + *

+ * + * @author generator + * @since 2023-05-16 + */ +public interface IPdmProduceWorkorderrecordService extends IService { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorderrecord.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorderrecord.java new file mode 100644 index 00000000..e6dfd78a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorderrecord.java @@ -0,0 +1,148 @@ +package org.nl.wms.product_manage.service.workorder.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

+ * 生产设备报工记录表 + *

+ * + * @author generator + * @since 2023-05-17 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("pdm_produce_workorderrecord") +public class PdmProduceWorkorderrecord implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 工单生产记录标识 + */ + @TableId(value = "macoperate_id") + private String macoperate_id; + + /** + * 工单编号 + */ + private String workorder_id; + + /** + * 班次类型 + */ + private String shift_type_scode; + + /** + * 工序标识 + */ + private String workprocedure_id; + + /** + * 生产区域 + */ + private String product_area; + + /** + * 生产设备编码 + */ + private String device_code; + + /** + * 操作工标识 + */ + private String produce_person_id; + + /** + * 电气期初数量 + */ + private BigDecimal dq_init_qty; + + /** + * 人员期初数量 + */ + private BigDecimal person_init_qty; + + /** + * 电气报工数量 + */ + private BigDecimal dq_report_qty; + + /** + * 人员报工数量 + */ + private BigDecimal person_report_qty; + + /** + * 电气期末数量 + */ + private BigDecimal dq_finish_qty; + + /** + * 人员期末数量 + */ + private BigDecimal person_finish_qty; + + /** + * 开工时间 + */ + private String operatetime_start; + + /** + * 完工时间 + */ + private String operatetime_end; + + /** + * 顺序号 + */ + private Integer seq_number; + + /** + * 主表:计划数量-报工总 + */ + private BigDecimal needproduct_qty; + + /** + * 主表:计划数量-报工总 + */ + private BigDecimal report_qty; + + /** + * 报废,不记录报工数 + */ + private BigDecimal nok_qty; + + /** + * 报修数不记录报工数 + */ + private BigDecimal repare_qty; + + /** + * 报工状态生成报工审核123 + */ + private String report_status; + + /** + * 审核人 + */ + private String confirm_id; + + private String confirm_name; + + private String confirm_time; + + /** + * 校验状态唯一性 + */ + private String md5; + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/WorkorderRecord.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/WorkorderRecord.java new file mode 100644 index 00000000..e35dabd5 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/WorkorderRecord.java @@ -0,0 +1,107 @@ +package org.nl.wms.product_manage.service.workorder.dao; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; + +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 生产设备报工记录表 + *

+ * + * @author generator + * @since 2023-05-16 + */ +@Data +@TableName("pdm_produce_workorderrecord") +@Builder +public class WorkorderRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 工单生产记录标识 + */ + private Long macoperate_id; + + /** + * 工单编号 + */ + private String workorder_id; + + /** + * 班次类型 + */ + private String shift_type_scode; + + /** + * 工序标识 + */ + private String workprocedure_id; + + /** + * 生产区域 + */ + private String product_area; + + /** + * 生产设备编码 + */ + private String device_code; + + /** + * 操作工标识 + */ + private String produce_person_id; + + /** + * 电气期初数量 + */ + private BigDecimal dq_init_qty; + + /** + * 人员期初数量 + */ + private BigDecimal person_init_qty; + + /** + * 电气报工数量 + */ + private BigDecimal dq_report_qty; + + /** + * 人员报工数量 + */ + private BigDecimal person_report_qty; + + /** + * 电气期末数量 + */ + private BigDecimal dq_finish_qty; + + /** + * 人员期末数量 + */ + private BigDecimal person_finish_qty; + + /** + * 开工时间 + */ + private String operatetime_start; + + /** + * 完工时间 + */ + private String operatetime_end; + + /** + * 顺序号 + */ + private BigDecimal seq_number; + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java new file mode 100644 index 00000000..7fb66f71 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.product_manage.service.workorder.dao.mapper; + +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 生产设备报工记录表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-16 + */ +public interface PdmProduceWorkorderrecordMapper extends BaseMapper { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml new file mode 100644 index 00000000..ac1a9b89 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java index 29dd6483..709a0f1a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java @@ -28,6 +28,7 @@ import org.nl.wms.masterdata_manage.master.service.classstandard.IMdPbClassstand import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; import org.nl.wms.mps.service.WorkOrderImportEnum; +import org.nl.wms.mps.service.dto.ProduceshiftorderDto; import org.nl.wms.product_manage.ReportRecordStatus; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; @@ -631,4 +632,34 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl resp = wmsToAcsService.replaceDevice(array); + String status = String.valueOf(resp.get("status")); + String message = (String) resp.get("message"); + if(!status.equals("200")) { + throw new BadRequestException(message); + } + } + //this.update(produceshiftorderDto); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java new file mode 100644 index 00000000..06bac38a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java @@ -0,0 +1,20 @@ +package org.nl.wms.product_manage.service.workorder.impl; + +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; +import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper; +import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 生产设备报工记录表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-16 + */ +@Service +public class PdmProduceWorkorderrecordServiceImpl extends ServiceImpl implements IPdmProduceWorkorderrecordService { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/ql/dto/OptionRecordQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/ql/dto/OptionRecordQuery.java new file mode 100644 index 00000000..68b6b13a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/ql/dto/OptionRecordQuery.java @@ -0,0 +1,29 @@ +package org.nl.wms.system_manage.service.ql.dto; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.system_manage.service.dept.dao.SysDept; +import org.nl.wms.system_manage.service.ql.dao.PdmQlOption; + +import java.util.List; + +/* + * @author ZZQ + * @Date 2022/12/15 4:20 下午 + */ +@Data +public class OptionRecordQuery extends BaseQuery { + + private String orderno; + /** + * 检测类型 + */ + private String type; + + private String bussclass; + + +} diff --git a/mes/qd/src/views/wms/product_manage/workorder/reportDialog.vue b/mes/qd/src/views/wms/product_manage/workorder/reportDialog.vue new file mode 100644 index 00000000..6be062fa --- /dev/null +++ b/mes/qd/src/views/wms/product_manage/workorder/reportDialog.vue @@ -0,0 +1,174 @@ + + + + +