From 3bfab9fc89d2c2cfbe92867b4fac1128c5ad4def Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 13 Apr 2023 10:43:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=B8=B4=E6=9C=9F=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/stat/rest/PastIvtQueryController.java | 73 ++++ .../wms/stat/service/PastIvtQueryService.java | 59 ++++ .../service/impl/PastIvtQueryServiceImpl.java | 186 ++++++++++ .../nl/wms/stat/wql/ST_IVT_PASTIVTQUERY.wql | 146 ++++++++ .../src/views/wms/stat/pastivt/index.vue | 318 ++++++++++++++++++ .../views/wms/stat/pastivt/pastivtquery.js | 27 ++ 6 files changed, 809 insertions(+) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/PastIvtQueryController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/stat/service/PastIvtQueryService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/PastIvtQueryServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_PASTIVTQUERY.wql create mode 100644 lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue create mode 100644 lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/PastIvtQueryController.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/PastIvtQueryController.java new file mode 100644 index 000000000..726e6e039 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/PastIvtQueryController.java @@ -0,0 +1,73 @@ + +package org.nl.wms.stat.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.stat.service.InBillQueryService; +import org.nl.wms.stat.service.PastIvtQueryService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Map; + +/** + * @author Liuxy + * @date 2023-04-12 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "临期库存查询") +@RequestMapping("/api/pastivt") +@Slf4j +public class PastIvtQueryController { + + private final PastIvtQueryService pastIvtQueryService; + + @GetMapping + @Log("查询") + @ApiOperation("查询") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(pastIvtQueryService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增") + @ApiOperation("新增") + public ResponseEntity create(@Validated @RequestBody JSONObject dto) { + pastIvtQueryService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改") + @ApiOperation("修改") + public ResponseEntity update(@Validated @RequestBody JSONObject dto) { + pastIvtQueryService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除") + @ApiOperation("删除") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + pastIvtQueryService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("导出数据") + @ApiOperation("导出数据") + @GetMapping(value = "/download") + public void download(@RequestParam Map map, HttpServletResponse response) throws IOException { + pastIvtQueryService.download(map, response); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/PastIvtQueryService.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/PastIvtQueryService.java new file mode 100644 index 000000000..1c53abfd5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/PastIvtQueryService.java @@ -0,0 +1,59 @@ + +package org.nl.wms.stat.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.service.dto.PointDto; +import org.springframework.data.domain.Pageable; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * @description 服务接口 + * @author Liuxy + * @date 2023-04-12 + **/ +public interface PastIvtQueryService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 创建 + * + * @param dto / + */ + void create(JSONObject dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(JSONObject dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + void download(Map map, HttpServletResponse response) throws IOException; +} \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/PastIvtQueryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/PastIvtQueryServiceImpl.java new file mode 100644 index 000000000..dcf2f212a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/PastIvtQueryServiceImpl.java @@ -0,0 +1,186 @@ +package org.nl.wms.stat.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +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.common.utils.FileUtil; +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.sch.service.dto.PointDto; +import org.nl.wms.stat.service.OutBillQueryService; +import org.nl.wms.stat.service.PastIvtQueryService; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务实现 + * @date 2023-04-12 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class PastIvtQueryServiceImpl implements PastIvtQueryService { + + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + String sect_id = MapUtil.getStr(whereJson, "sect_id"); + String sid_day = MapUtil.getStr(whereJson, "sid_day"); // 超期天数 + String material_code = MapUtil.getStr(whereJson, "material_code"); + String package_box_sn = MapUtil.getStr(whereJson, "package_box_sn"); + String container_name = MapUtil.getStr(whereJson, "container_name"); + String sap_pcsn = MapUtil.getStr(whereJson, "sap_pcsn"); + String date_of_production = MapUtil.getStr(whereJson, "date_of_production"); // 制造完成日期 + String date_of_FG_inbound = MapUtil.getStr(whereJson, "date_of_FG_inbound"); // 入库日期 + String sale_order_name = MapUtil.getStr(whereJson, "sale_order_name");// 订单号 + String customer_name = MapUtil.getStr(whereJson, "customer_name"); // 客户编码 + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("stor_id",stor_id); + map.put("sect_id",sect_id); + map.put("sid_day",sid_day); + map.put("begin_time",begin_time); + map.put("end_time",end_time); + map.put("date_of_production",date_of_production); + map.put("date_of_FG_inbound",date_of_FG_inbound); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code","%"+material_code+"%"); + if (ObjectUtil.isNotEmpty(package_box_sn)) map.put("package_box_sn","%"+package_box_sn+"%"); + if (ObjectUtil.isNotEmpty(container_name)) map.put("container_name","%"+container_name+"%"); + if (ObjectUtil.isNotEmpty(sap_pcsn)) map.put("sap_pcsn","%"+sap_pcsn+"%"); + if (ObjectUtil.isNotEmpty(sale_order_name)) map.put("sale_order_name","%"+sale_order_name+"%"); + if (ObjectUtil.isNotEmpty(customer_name)) map.put("customer_name","%"+customer_name+"%"); + + JSONObject json = WQL.getWO("ST_IVT_PASTIVTQUERY").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "sub.package_box_sn ASC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(PointDto.class); + return list; + } + + @Override + public void create(JSONObject dto) { + + } + + @Override + public void update(JSONObject dto) { + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + for (Long point_id : ids) { + JSONObject param = new JSONObject(); + param.put("point_id", String.valueOf(point_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 stor_id = MapUtil.getStr(whereJson, "stor_id"); + String sect_id = MapUtil.getStr(whereJson, "sect_id"); + String sid_day = MapUtil.getStr(whereJson, "sid_day"); // 超期天数 + String material_code = MapUtil.getStr(whereJson, "material_code"); + String package_box_sn = MapUtil.getStr(whereJson, "package_box_sn"); + String container_name = MapUtil.getStr(whereJson, "container_name"); + String sap_pcsn = MapUtil.getStr(whereJson, "sap_pcsn"); + String date_of_production = MapUtil.getStr(whereJson, "date_of_production"); // 制造完成日期 + String date_of_FG_inbound = MapUtil.getStr(whereJson, "date_of_FG_inbound"); // 入库日期 + String sale_order_name = MapUtil.getStr(whereJson, "sale_order_name");// 订单号 + String customer_name = MapUtil.getStr(whereJson, "customer_name"); // 客户编码 + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("stor_id",stor_id); + map.put("sect_id",sect_id); + map.put("sid_day",sid_day); + map.put("begin_time",begin_time); + map.put("end_time",end_time); + map.put("date_of_production",date_of_production); + map.put("date_of_FG_inbound",date_of_FG_inbound); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code","%"+material_code+"%"); + if (ObjectUtil.isNotEmpty(package_box_sn)) map.put("package_box_sn","%"+package_box_sn+"%"); + if (ObjectUtil.isNotEmpty(container_name)) map.put("container_name","%"+container_name+"%"); + if (ObjectUtil.isNotEmpty(sap_pcsn)) map.put("sap_pcsn","%"+sap_pcsn+"%"); + if (ObjectUtil.isNotEmpty(sale_order_name)) map.put("sale_order_name","%"+sale_order_name+"%"); + if (ObjectUtil.isNotEmpty(customer_name)) map.put("customer_name","%"+customer_name+"%"); + + JSONArray resultJSONArray = WQL.getWO("ST_IVT_PASTIVTQUERY").addParamMap(map).process().getResultJSONArray(0); + + List> list = new ArrayList<>(); + for (int i = 0; i < resultJSONArray.size(); i++) { + JSONObject json = resultJSONArray.getJSONObject(i); + Map mp = new LinkedHashMap<>(); + + mp.put("仓库", json.getString("stor_name")); + mp.put("库区", json.getString("sect_name")); + mp.put("仓位", json.getString("struct_code")); + mp.put("木箱码", json.getString("package_box_sn")); + mp.put("箱内子卷数量", json.getString("quanlity_in_box")); + mp.put("客户编码", json.getString("customer_name")); + mp.put("客户名称", json.getString("customer_description")); + mp.put("销售订单及行号", json.getString("sale_order_name")); + mp.put("子卷号", json.getString("pcsn")); + mp.put("sap批次", json.getString("sap_pcsn")); + mp.put("产品编码", json.getString("product_name")); + mp.put("产品描述", json.getString("product_description")); + mp.put("产品规格(幅宽)", json.getString("width")); + mp.put("产品厚度", json.getString("thickness")); + mp.put("单位面积质量", json.getString("mass_per_unit_area")); + mp.put("净重", json.getString("canuse_qty")); + mp.put("长度", json.getString("length")); + mp.put("制造完成日期", json.getString("date_of_production")); + mp.put("入库日期", json.getString("date_of_fg_inbound")); + mp.put("木箱自身重量", json.getString("box_weight")); + mp.put("保质期", json.getString("quality_guaran_period")); + mp.put("子卷的悟性值1", json.getString("un_plan_product_property1")); + mp.put("子卷的悟性值2", json.getString("un_plan_product_property2")); + mp.put("子卷的悟性值3", json.getString("un_plan_product_property3")); + mp.put("木箱料号", json.getString("box_type")); + mp.put("长", json.getString("box_length")); + mp.put("宽", json.getString("box_width")); + mp.put("高", json.getString("box_high")); + mp.put("备注", json.getString("remark")); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_PASTIVTQUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_PASTIVTQUERY.wql new file mode 100644 index 000000000..d602190da --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_PASTIVTQUERY.wql @@ -0,0 +1,146 @@ +[交易说明] + 交易名: 临期库存查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.stor_id TYPEAS s_string + 输入.sect_id TYPEAS s_string + 输入.sid_day TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.package_box_sn TYPEAS s_string + 输入.container_name TYPEAS s_string + 输入.sap_pcsn TYPEAS s_string + 输入.date_of_production TYPEAS s_string + 输入.date_of_FG_inbound TYPEAS s_string + 输入.sale_order_name TYPEAS s_string + 输入.customer_name TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + attr.stor_name, + attr.sect_name, + attr.struct_code, + sub.package_box_sn, + sub.quanlity_in_box, + sub.customer_name, + sub.customer_description, + sub.sale_order_name, + ivt.pcsn, + sub.sap_pcsn, + sub.product_name, + sub.product_description, + sub.width, + sub.thickness, + sub.mass_per_unit_area, + ivt.canuse_qty, + sub.length, + sub.date_of_production, + sub.date_of_FG_inbound, + sub.box_weight, + sub.quality_guaran_period, + sub.un_plan_product_property1, + sub.un_plan_product_property2, + sub.un_plan_product_property3, + sub.box_type, + sub.box_length, + sub.box_width, + sub.box_high, + sub.remark, + + (90 - DATEDIFF(NOW(),sub.date_of_production)) AS sid_day + FROM + st_ivt_structivt ivt + LEFT JOIN st_ivt_structattr attr ON attr.struct_id = ivt.struct_id + LEFT JOIN pdm_bi_subpackagerelation sub ON ivt.pcsn = sub.container_name + WHERE + 1 = 1 + + OPTION 输入.stor_id <> "" + attr.stor_id = 输入.stor_id + ENDOPTION + + OPTION 输入.sect_id <> "" + attr.sect_id = 输入.sect_id + ENDOPTION + + OPTION 输入.material_code <> "" + (sub.product_name LIKE 输入.material_code or + sub.product_description LIKE 输入.material_code) + ENDOPTION + + OPTION 输入.package_box_sn <> "" + sub.package_box_sn LIKE 输入.package_box_sn + ENDOPTION + + OPTION 输入.container_name <> "" + sub.container_name LIKE 输入.container_name + ENDOPTION + + OPTION 输入.sap_pcsn <> "" + sub.sap_pcsn LIKE 输入.sap_pcsn + ENDOPTION + + OPTION 输入.begin_time <> "" + sub.date_of_production >= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + sub.date_of_production <= 输入.end_time + ENDOPTION + + OPTION 输入.date_of_FG_inbound <> "" + sub.date_of_FG_inbound = 输入.date_of_FG_inbound + ENDOPTION + + OPTION 输入.sale_order_name <> "" + sub.sale_order_name LIKE 输入.sale_order_name + ENDOPTION + + OPTION 输入.customer_name <> "" + (sub.customer_name LIKE 输入.customer_name or + sub.customer_description LIKE 输入.customer_name) + ENDOPTION + + OPTION 输入.sid_day <> "" + ( -(90 - DATEDIFF(NOW(),sub.date_of_production)) ) = 输入.sid_day + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue b/lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue new file mode 100644 index 000000000..7af2f71e2 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue @@ -0,0 +1,318 @@ + + + + diff --git a/lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js b/lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js new file mode 100644 index 000000000..37698e6eb --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/stat/pastivt/pastivtquery.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: '/api/pastivt', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: '/api/pastivt', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: '/api/pastivt', + method: 'put', + data + }) +} + +export default { add, edit, del } From 93e41279eb16179237e1d8abd6a78fc3dcb7ae94 Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 13 Apr 2023 10:46:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue | 8 +++++--- lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue b/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue index 8512e82a8..c0ef7cf6a 100644 --- a/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue +++ b/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue @@ -178,9 +178,11 @@ export default { const data = { 'stor_id': this.crud.query.stor_id, 'bill_type': this.crud.query.bill_type, - 'with': this.crud.query.with, - 'begin_time': this.crud.query.createTime[0], - 'end_time': this.crud.query.createTime[1] + 'with': this.crud.query.with + } + if (this.crud.query.createTime !== undefined) { + data.begin_time = this.crud.query.createTime[0] + data.end_time = this.crud.query.createTime[1] } download('/api/in/InQuery/download', data).then(result => { downloadFile(result, '成品入库查询', 'xlsx') diff --git a/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue b/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue index 7bbb354b5..bd180d31c 100644 --- a/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue +++ b/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue @@ -188,9 +188,11 @@ export default { 'stor_id': this.crud.query.stor_id, 'bill_type': this.crud.query.bill_type, 'with': this.crud.query.with, - 'customer_name': this.crud.query.customer_name, - 'begin_time': this.crud.query.createTime[0], - 'end_time': this.crud.query.createTime[1] + 'customer_name': this.crud.query.customer_name + } + if (this.crud.query.createTime !== undefined) { + data.begin_time = this.crud.query.createTime[0] + data.end_time = this.crud.query.createTime[1] } download('/api/out/OutQuery/download', data).then(result => { downloadFile(result, '成品出库查询', 'xlsx')