From 645cf8cfe509058b4b662cde0afae8cb9fe54f1d Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 28 Jun 2022 15:57:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E4=BB=B6=E5=BA=93=E5=AD=98=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rest/DevicesparepartivtController.java | 78 ++++++++ .../service/DevicesparepartivtService.java | 76 ++++++++ .../service/dto/DevicesparepartivtDto.java | 57 ++++++ .../impl/DevicesparepartivtServiceImpl.java | 175 ++++++++++++++++++ .../nl/wms/sb/stat/wql/EM_DEVICEIVT001.wql | 109 +++++++++++ mes/qd/src/api/wms/sb/devicesparepartivt.js | 27 +++ .../wms/sb/stat/deviceivtquery/index.vue | 154 +++++++++++++++ .../views/wms/statistics/ivtQuery/index.vue | 6 +- 8 files changed, 679 insertions(+), 3 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/rest/DevicesparepartivtController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/DevicesparepartivtService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/dto/DevicesparepartivtDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesparepartivtServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICEIVT001.wql create mode 100644 mes/qd/src/api/wms/sb/devicesparepartivt.js create mode 100644 mes/qd/src/views/wms/sb/stat/deviceivtquery/index.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/rest/DevicesparepartivtController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/rest/DevicesparepartivtController.java new file mode 100644 index 00000000..8f49f01e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/rest/DevicesparepartivtController.java @@ -0,0 +1,78 @@ + +package org.nl.wms.sb.stat.rest; + + +import org.nl.wms.sb.stat.service.DevicesparepartivtService; +import org.nl.wms.sb.stat.service.dto.DevicesparepartivtDto; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.nl.annotation.Log; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; + +import java.io.IOException; +import java.util.Map; + +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletResponse; + +/** + * @author Liuxy + * @date 2022-06-28 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "备件库存查询管理") +@RequestMapping("/api/devicesparepartivt") +@Slf4j +public class DevicesparepartivtController { + + private final DevicesparepartivtService devicesparepartivtService; + + @GetMapping + @Log("查询备件库存查询") + @ApiOperation("查询备件库存查询") + //@PreAuthorize("@el.check('devicesparepartivt:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(devicesparepartivtService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增备件库存查询") + @ApiOperation("新增备件库存查询") + //@PreAuthorize("@el.check('devicesparepartivt:add')") + public ResponseEntity create(@Validated @RequestBody DevicesparepartivtDto dto) { + devicesparepartivtService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改备件库存查询") + @ApiOperation("修改备件库存查询") + //@PreAuthorize("@el.check('devicesparepartivt:edit')") + public ResponseEntity update(@Validated @RequestBody DevicesparepartivtDto dto) { + devicesparepartivtService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除备件库存查询") + @ApiOperation("删除备件库存查询") + //@PreAuthorize("@el.check('devicesparepartivt:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + devicesparepartivtService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @ApiOperation("导出数据") + @GetMapping(value = "/download") + public void download(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { + devicesparepartivtService.download(whereJson, response); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/DevicesparepartivtService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/DevicesparepartivtService.java new file mode 100644 index 00000000..aabbfb0e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/DevicesparepartivtService.java @@ -0,0 +1,76 @@ + +package org.nl.wms.sb.stat.service; + +import org.nl.wms.sb.stat.service.dto.DevicesparepartivtDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-06-28 + **/ +public interface DevicesparepartivtService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param stockrecord_id ID + * @return Devicesparepartivt + */ + DevicesparepartivtDto findById(Long stockrecord_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Devicesparepartivt + */ + DevicesparepartivtDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(DevicesparepartivtDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(DevicesparepartivtDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + void download(Map whereJson, HttpServletResponse response) throws IOException; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/dto/DevicesparepartivtDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/dto/DevicesparepartivtDto.java new file mode 100644 index 00000000..ae9c7d07 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/dto/DevicesparepartivtDto.java @@ -0,0 +1,57 @@ +package org.nl.wms.sb.stat.service.dto; + +import lombok.Data; + import java.math.BigDecimal; +import java.io.Serializable; + import com.fasterxml.jackson.databind.annotation.JsonSerialize; + import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +/** +* @description / +* @author Liuxy +* @date 2022-06-28 +**/ +@Data +public class DevicesparepartivtDto implements Serializable { + + /** 库存记录标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long stockrecord_id; + + /** 备件唯一标识 */ + private String sparepart_only_id; + + /** 物料标识 */ + private Long material_id; + + /** 批次 */ + private String pcsn; + + /** 仓库标识 */ + private Long stor_id; + + /** 仓库名称 */ + private String stor_name; + + /** 仓位标识 */ + private Long struct_id; + + /** 仓位编码 */ + private String struct_code; + + /** 仓位名称 */ + private String struct_name; + + /** 库存数 */ + private BigDecimal ivt_qty; + + /** 数量计量单位标识 */ + private Long qty_unit_id; + + /** 数量计量单位名称 */ + private String qty_unit_name; + + /** 入库时间 */ + private String instorage_time; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesparepartivtServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesparepartivtServiceImpl.java new file mode 100644 index 00000000..6a7f1cae --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/service/impl/DevicesparepartivtServiceImpl.java @@ -0,0 +1,175 @@ + +package org.nl.wms.sb.stat.service.impl; + + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import lombok.RequiredArgsConstructor; +import org.nl.exception.BadRequestException; +import org.nl.utils.FileUtil; +import org.nl.wms.sb.stat.service.DevicesparepartivtService; +import org.nl.wms.sb.stat.service.dto.DevicesparepartivtDto; +import org.nl.wql.WQL; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.springframework.data.domain.Pageable; + +import java.io.IOException; +import java.util.*; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.utils.SecurityUtils; +import org.nl.wql.core.bean.ResultBean; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.util.WqlUtil; +import lombok.extern.slf4j.Slf4j; +import cn.hutool.core.util.ObjectUtil; + +import javax.servlet.http.HttpServletResponse; + +/** + * @author Liuxy + * @description 服务实现 + * @date 2022-06-28 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class DevicesparepartivtServiceImpl implements DevicesparepartivtService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String material_code = MapUtil.getStr(whereJson, "material_code"); + String is_all = MapUtil.getStr(whereJson, "is_all"); + + HashMap map = new HashMap<>(); + if (ObjectUtil.isEmpty(is_all) || StrUtil.equals(is_all, "0")) { + map.put("flag", "1"); + } else { + map.put("flag", "2"); + } + map.put("stor_id", MapUtil.getStr(whereJson,"stor_id")); + map.put("sect_id", MapUtil.getStr(whereJson,"sect_id")); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", "%"+material_code+"%"); + JSONObject json = WQL.getWO("EM_DEVICEIVT001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.material_id DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("em_bi_devicesparepartivt"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(DevicesparepartivtDto.class); + return null; + } + + @Override + public DevicesparepartivtDto findById(Long stockrecord_id) { + WQLObject wo = WQLObject.getWQLObject("em_bi_devicesparepartivt"); + JSONObject json = wo.query("stockrecord_id = '" + stockrecord_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DevicesparepartivtDto.class); + } + return null; + } + + @Override + public DevicesparepartivtDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("em_bi_devicesparepartivt"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DevicesparepartivtDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(DevicesparepartivtDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + dto.setStockrecord_id(IdUtil.getSnowflake(1, 1).nextId()); + + WQLObject wo = WQLObject.getWQLObject("em_bi_devicesparepartivt"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(DevicesparepartivtDto dto) { + DevicesparepartivtDto entity = this.findById(dto.getStockrecord_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("em_bi_devicesparepartivt"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("em_bi_devicesparepartivt"); + for (Long stockrecord_id : ids) { + JSONObject param = new JSONObject(); + param.put("stockrecord_id", String.valueOf(stockrecord_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + public void download(Map whereJson, HttpServletResponse response) throws IOException { + String material_code = MapUtil.getStr(whereJson, "material_code"); + String is_all = MapUtil.getStr(whereJson, "is_all"); + + HashMap map = new HashMap<>(); + if (ObjectUtil.isEmpty(is_all) || StrUtil.equals(is_all, "0")) { + map.put("flag", "1"); + } else { + map.put("flag", "2"); + } + map.put("stor_id", MapUtil.getStr(whereJson,"stor_id")); + map.put("sect_id", MapUtil.getStr(whereJson,"sect_id")); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", "%"+material_code+"%"); + JSONArray rows = WQL.getWO("EM_DEVICEIVT001").addParamMap(map).process().getResultJSONArray(0); + + List> list = new ArrayList<>(); + for (int i = 0; i < rows.size(); i++) { + JSONObject jo = rows.getJSONObject(i); + Map dtl_map = new LinkedHashMap<>(); + dtl_map.put("库区编码", jo.getString("sect_code")); + dtl_map.put("库区名称", jo.getString("sect_name")); + dtl_map.put("物料编码", jo.getString("material_code")); + dtl_map.put("物料名称", jo.getString("material_name")); + dtl_map.put("型号", jo.getString("material_model")); + dtl_map.put("技术规格", jo.getString("material_spec")); + dtl_map.put("批次", jo.getString("pcsn")); + dtl_map.put("库存数", jo.getString("ivt_qty")); + dtl_map.put("单位", jo.getString("qty_unit_name")); + dtl_map.put("入库时间", jo.getString("instorage_time")); + list.add(dtl_map); + } + FileUtil.downloadExcel(list, response); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICEIVT001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICEIVT001.wql new file mode 100644 index 00000000..c42b8a94 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/stat/wql/EM_DEVICEIVT001.wql @@ -0,0 +1,109 @@ +[交易说明] + 交易名: 备件库存分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.stor_id TYPEAS s_string + 输入.sect_id TYPEAS s_string + 输入.material_code TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + MAX(struct.sect_code) AS sect_code, + MAX(struct.sect_name) AS sect_name, + me.material_code, + me.material_name, + me.material_spec, + me.material_model, + ivt.pcsn, + sum(ivt.ivt_qty) AS ivt_qty, + MAX(ivt.qty_unit_name) AS qty_unit_name, + MAX(ivt.instorage_time) AS instorage_time + FROM + EM_BI_DeviceSparePartIvt ivt + LEFT JOIN ST_IVT_StructAttr struct ON ivt.struct_id = struct.struct_id + LEFT JOIN MD_ME_MaterialBase me ON me.material_id = ivt.material_id + WHERE 1=1 + OPTION 输入.stor_id <> "" + struct.stor_id = 输入.stor_id + ENDOPTION + OPTION 输入.sect_id <> "" + struct.sect_id = 输入.sect_id + ENDOPTION + + OPTION 输入.material_code <> "" + (me.material_name like 输入.material_code or + me.material_code like 输入.material_code) + ENDOPTION + + group by ivt.material_id,ivt.pcsn + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + struct.sect_code, + struct.sect_name, + me.material_code, + me.material_name, + me.material_spec, + me.material_model, + ivt.* + FROM + EM_BI_DeviceSparePartIvt ivt + LEFT JOIN ST_IVT_StructAttr struct ON ivt.struct_id = struct.struct_id + LEFT JOIN MD_ME_MaterialBase me ON me.material_id = ivt.material_id + WHERE 1=1 + OPTION 输入.stor_id <> "" + struct.stor_id = 输入.stor_id + ENDOPTION + OPTION 输入.sect_id <> "" + struct.sect_id = 输入.sect_id + ENDOPTION + + OPTION 输入.material_code <> "" + (me.material_name like 输入.material_code or + me.material_code like 输入.material_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/mes/qd/src/api/wms/sb/devicesparepartivt.js b/mes/qd/src/api/wms/sb/devicesparepartivt.js new file mode 100644 index 00000000..8af194f8 --- /dev/null +++ b/mes/qd/src/api/wms/sb/devicesparepartivt.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/devicesparepartivt', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/devicesparepartivt/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/devicesparepartivt', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/mes/qd/src/views/wms/sb/stat/deviceivtquery/index.vue b/mes/qd/src/views/wms/sb/stat/deviceivtquery/index.vue new file mode 100644 index 00000000..e12c655e --- /dev/null +++ b/mes/qd/src/views/wms/sb/stat/deviceivtquery/index.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/mes/qd/src/views/wms/statistics/ivtQuery/index.vue b/mes/qd/src/views/wms/statistics/ivtQuery/index.vue index 71d81ad2..a5efcd42 100644 --- a/mes/qd/src/views/wms/statistics/ivtQuery/index.vue +++ b/mes/qd/src/views/wms/statistics/ivtQuery/index.vue @@ -236,9 +236,9 @@ export default { } }, created() { - crudSectattr.getSect().then(res => { - this.sects = res.content - }) + // crudSectattr.getSect().then(res => { + // this.sects = res.content + // }) crudSectattr.getSect({ 'is_materialstore': '1' }).then(res => { this.sects = res.content })