修改
This commit is contained in:
@@ -403,6 +403,7 @@ public class WmsToErpServiceImpl implements WmsToErpService {
|
||||
JSONArray ja = WQL.getWO("QERP").setDbname("dataSource1").addParamMap(whereMap).addParam("flag", "5").process().getResultJSONArray(0);
|
||||
log.info("备件入库单导入数据---------:" + ja.toString());
|
||||
|
||||
JSONObject bill_jo = new JSONObject();
|
||||
for (int i = 0; i < ja.size(); i++) {
|
||||
JSONObject jo = ja.getJSONObject(i);
|
||||
String CGENERALBID = jo.getString("cgeneralbid");
|
||||
@@ -445,64 +446,16 @@ public class WmsToErpServiceImpl implements WmsToErpService {
|
||||
throw new BadRequestException("备件采购订单状态不符!");
|
||||
}
|
||||
if (jo.getString("fbillflag").equals("3")) {
|
||||
//生成入库单
|
||||
JSONObject io_mst = new JSONObject();
|
||||
String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + "";
|
||||
String bill_code = CodeUtil.getNewCode("IO_CODE");
|
||||
io_mst.put("iostorinv_id", iostorinv_id);
|
||||
io_mst.put("bill_code", bill_code);
|
||||
io_mst.put("buss_type", "0007");
|
||||
io_mst.put("io_type", "0");
|
||||
io_mst.put("bill_type", "000701");
|
||||
io_mst.put("biz_date", DateUtil.today());
|
||||
JSONObject stor_jo = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_attachment = '1'").uniqueResult(0);
|
||||
io_mst.put("stor_id", stor_jo.getString("stor_id"));
|
||||
io_mst.put("stor_code", stor_jo.getString("stor_code"));
|
||||
io_mst.put("stor_name", stor_jo.getString("stor_name"));
|
||||
io_mst.put("total_qty", purchase.getString("QTY"));
|
||||
io_mst.put("detail_count", "1");
|
||||
io_mst.put("bill_status", "10");
|
||||
io_mst.put("create_mode", "01");
|
||||
io_mst.put("input_optid", "1452555001116364823");
|
||||
io_mst.put("input_optname", "mes系统");
|
||||
io_mst.put("input_time", DateUtil.now());
|
||||
io_mst.put("update_optid", "1452555001116364823");
|
||||
io_mst.put("update_optname", "mes系统");
|
||||
io_mst.put("update_time", DateUtil.now());
|
||||
io_mst.put("is_delete", "0");
|
||||
io_mst.put("is_upload", "0");
|
||||
io_mst.put("sysdeptid", "1");
|
||||
io_mst.put("syscompanyid", "1");
|
||||
io_mst.put("bizdeptid", "1");
|
||||
WQLObject.getWQLObject("EM_BI_IOStorInv").insert(io_mst);
|
||||
|
||||
//插入明细表
|
||||
JSONObject io_dtl = new JSONObject();
|
||||
io_dtl.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + "");
|
||||
io_dtl.put("iostorinv_id", iostorinv_id);
|
||||
io_dtl.put("seq_no", "1");
|
||||
io_dtl.put("bill_status", "10");
|
||||
JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("ext_id = '" + purchase.getString("ITEM_ID") + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(mater_jo)) {
|
||||
log.info("未查询到外部标识为:" + purchase.getString("ITEM_ID") + "的物料!");
|
||||
throw new BadRequestException("未查询到外部标识为:" + purchase.getString("ITEM_ID") + "的物料!");
|
||||
//判断是否存在该订单的入库单
|
||||
if (bill_jo.containsKey(purchase.getString("VBILLCODE"))) {
|
||||
JSONArray dtl_rows = bill_jo.getJSONArray(purchase.getString("VBILLCODE"));
|
||||
dtl_rows.add(purchase);
|
||||
bill_jo.put(purchase.getString("VBILLCODE"), dtl_rows);
|
||||
} else {
|
||||
JSONArray rows = new JSONArray();
|
||||
rows.add(purchase);
|
||||
bill_jo.put(purchase.getString("VBILLCODE"), rows);
|
||||
}
|
||||
io_dtl.put("material_id", mater_jo.getString("material_id"));
|
||||
io_dtl.put("pcsn", purchase.getString("VBATCHCODE"));
|
||||
JSONObject qty_jo = WQLObject.getWQLObject("md_pb_measureunit").query("ext_id = '" + purchase.getString("UNIT") + "'").uniqueResult(0);
|
||||
io_dtl.put("qty_unit_id", qty_jo.getString("measure_unit_id"));
|
||||
io_dtl.put("qty_unit_name", qty_jo.getString("unit_name"));
|
||||
io_dtl.put("plan_qty", purchase.getString("QTY"));
|
||||
io_dtl.put("source_billdtl_id", purchase.getString("id"));
|
||||
io_dtl.put("source_bill_type", "PO");
|
||||
io_dtl.put("source_bill_code", purchase.getString("VBILLCODE"));
|
||||
io_dtl.put("source_bill_table", "EM_BI_ErpPurchaseIn");
|
||||
io_dtl.put("base_billdtl_id", purchase.getString("id"));
|
||||
io_dtl.put("base_bill_type", "PO");
|
||||
io_dtl.put("base_bill_code", purchase.getString("VBILLCODE"));
|
||||
io_dtl.put("base_bill_table", "EM_BI_ErpPurchaseIn");
|
||||
io_dtl.put("remark_ext", purchase.getString("CGENERALHID"));
|
||||
WQLObject.getWQLObject("EM_BI_IOStorInvDtl").insert(io_dtl);
|
||||
}
|
||||
purchaseIn_wql.insert(purchase);
|
||||
} else {
|
||||
@@ -543,68 +496,89 @@ public class WmsToErpServiceImpl implements WmsToErpService {
|
||||
throw new BadRequestException("备件采购订单状态不符!");
|
||||
}
|
||||
if (jo.getString("fbillflag").equals("3")) {
|
||||
//生成入库单
|
||||
JSONObject io_mst = new JSONObject();
|
||||
String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + "";
|
||||
String bill_code = CodeUtil.getNewCode("IO_CODE");
|
||||
io_mst.put("iostorinv_id", iostorinv_id);
|
||||
io_mst.put("bill_code", bill_code);
|
||||
io_mst.put("buss_type", "0007");
|
||||
io_mst.put("io_type", "0");
|
||||
io_mst.put("bill_type", "000701");
|
||||
io_mst.put("biz_date", DateUtil.today());
|
||||
JSONObject stor_jo = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_attachment = '1'").uniqueResult(0);
|
||||
io_mst.put("stor_id", stor_jo.getString("stor_id"));
|
||||
io_mst.put("stor_code", stor_jo.getString("stor_code"));
|
||||
io_mst.put("stor_name", stor_jo.getString("stor_name"));
|
||||
io_mst.put("total_qty", purchase.getString("QTY"));
|
||||
io_mst.put("detail_count", "1");
|
||||
io_mst.put("bill_status", "10");
|
||||
io_mst.put("create_mode", "01");
|
||||
io_mst.put("input_optid", "1452555001116364823");
|
||||
io_mst.put("input_optname", "mes系统");
|
||||
io_mst.put("input_time", DateUtil.now());
|
||||
io_mst.put("update_optid", "1452555001116364823");
|
||||
io_mst.put("update_optname", "mes系统");
|
||||
io_mst.put("update_time", DateUtil.now());
|
||||
io_mst.put("is_delete", "0");
|
||||
io_mst.put("is_upload", "0");
|
||||
io_mst.put("sysdeptid", "1");
|
||||
io_mst.put("syscompanyid", "1");
|
||||
io_mst.put("bizdeptid", "1");
|
||||
WQLObject.getWQLObject("EM_BI_IOStorInv").insert(io_mst);
|
||||
|
||||
//插入明细表
|
||||
JSONObject io_dtl = new JSONObject();
|
||||
io_dtl.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + "");
|
||||
io_dtl.put("iostorinv_id", iostorinv_id);
|
||||
io_dtl.put("seq_no", "1");
|
||||
io_dtl.put("bill_status", "10");
|
||||
JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("ext_id = '" + purchase.getString("ITEM_ID") + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(mater_jo)) {
|
||||
log.info("未查询到外部标识为:" + purchase.getString("ITEM_ID") + "的物料!");
|
||||
throw new BadRequestException("未查询到外部标识为:" + purchase.getString("ITEM_ID") + "的物料!");
|
||||
//判断是否存在该订单的入库单
|
||||
if (bill_jo.containsKey(purchase.getString("VBILLCODE"))) {
|
||||
JSONArray dtl_rows = bill_jo.getJSONArray("rows");
|
||||
dtl_rows.add(purchase);
|
||||
bill_jo.put(purchase.getString("VBILLCODE"), dtl_rows);
|
||||
} else {
|
||||
JSONArray rows = new JSONArray();
|
||||
rows.add(purchase);
|
||||
bill_jo.put(purchase.getString("VBILLCODE"), rows);
|
||||
}
|
||||
io_dtl.put("material_id", mater_jo.getString("material_id"));
|
||||
io_dtl.put("pcsn", purchase.getString("VBATCHCODE"));
|
||||
JSONObject qty_jo = WQLObject.getWQLObject("md_pb_measureunit").query("ext_id = '" + purchase.getString("UNIT") + "'").uniqueResult(0);
|
||||
io_dtl.put("qty_unit_id", qty_jo.getString("measure_unit_id"));
|
||||
io_dtl.put("qty_unit_name", qty_jo.getString("unit_name"));
|
||||
io_dtl.put("plan_qty", purchase.getString("QTY"));
|
||||
io_dtl.put("source_billdtl_id", purchase.getString("id"));
|
||||
io_dtl.put("source_bill_type", "PO");
|
||||
io_dtl.put("source_bill_code", purchase.getString("VBILLCODE"));
|
||||
io_dtl.put("source_bill_table", "EM_BI_ErpPurchaseIn");
|
||||
io_dtl.put("base_billdtl_id", purchase.getString("id"));
|
||||
io_dtl.put("base_bill_type", "PO");
|
||||
io_dtl.put("base_bill_code", purchase.getString("VBILLCODE"));
|
||||
io_dtl.put("base_bill_table", "EM_BI_ErpPurchaseIn");
|
||||
io_dtl.put("remark_ext", purchase.getString("CGENERALHID"));
|
||||
WQLObject.getWQLObject("EM_BI_IOStorInvDtl").insert(io_dtl);
|
||||
}
|
||||
purchaseIn_wql.update(purchase);
|
||||
}
|
||||
}
|
||||
}
|
||||
//对JSON进行遍历
|
||||
if (ObjectUtil.isNotEmpty(bill_jo)) {
|
||||
for (String key : bill_jo.keySet()) {
|
||||
JSONArray rows = bill_jo.getJSONArray(key);
|
||||
//生成入库单
|
||||
JSONObject io_mst = new JSONObject();
|
||||
String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + "";
|
||||
String bill_code = CodeUtil.getNewCode("IO_CODE");
|
||||
io_mst.put("iostorinv_id", iostorinv_id);
|
||||
io_mst.put("bill_code", bill_code);
|
||||
io_mst.put("buss_type", "0007");
|
||||
io_mst.put("io_type", "0");
|
||||
io_mst.put("bill_type", "000701");
|
||||
io_mst.put("biz_date", DateUtil.today());
|
||||
JSONObject stor_jo = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_attachment = '1'").uniqueResult(0);
|
||||
io_mst.put("stor_id", stor_jo.getString("stor_id"));
|
||||
io_mst.put("stor_code", stor_jo.getString("stor_code"));
|
||||
io_mst.put("stor_name", stor_jo.getString("stor_name"));
|
||||
io_mst.put("detail_count", rows.size());
|
||||
io_mst.put("bill_status", "10");
|
||||
io_mst.put("create_mode", "01");
|
||||
io_mst.put("input_optid", "1452555001116364823");
|
||||
io_mst.put("input_optname", "mes系统");
|
||||
io_mst.put("input_time", DateUtil.now());
|
||||
io_mst.put("update_optid", "1452555001116364823");
|
||||
io_mst.put("update_optname", "mes系统");
|
||||
io_mst.put("update_time", DateUtil.now());
|
||||
io_mst.put("is_delete", "0");
|
||||
io_mst.put("is_upload", "0");
|
||||
io_mst.put("sysdeptid", "1");
|
||||
io_mst.put("syscompanyid", "1");
|
||||
io_mst.put("bizdeptid", "1");
|
||||
|
||||
double total_qty = 0;
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject purchase = rows.getJSONObject(i);
|
||||
//插入明细表
|
||||
total_qty += purchase.getDoubleValue("QTY");
|
||||
JSONObject io_dtl = new JSONObject();
|
||||
io_dtl.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + "");
|
||||
io_dtl.put("iostorinv_id", iostorinv_id);
|
||||
io_dtl.put("seq_no", "1");
|
||||
io_dtl.put("bill_status", "10");
|
||||
JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("ext_id = '" + purchase.getString("ITEM_ID") + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(mater_jo)) {
|
||||
log.info("未查询到外部标识为:" + purchase.getString("ITEM_ID") + "的物料!");
|
||||
throw new BadRequestException("未查询到外部标识为:" + purchase.getString("ITEM_ID") + "的物料!");
|
||||
}
|
||||
io_dtl.put("material_id", mater_jo.getString("material_id"));
|
||||
io_dtl.put("pcsn", purchase.getString("VBATCHCODE"));
|
||||
JSONObject qty_jo = WQLObject.getWQLObject("md_pb_measureunit").query("ext_id = '" + purchase.getString("UNIT") + "'").uniqueResult(0);
|
||||
io_dtl.put("qty_unit_id", qty_jo.getString("measure_unit_id"));
|
||||
io_dtl.put("qty_unit_name", qty_jo.getString("unit_name"));
|
||||
io_dtl.put("plan_qty", purchase.getString("QTY"));
|
||||
io_dtl.put("source_billdtl_id", purchase.getString("id"));
|
||||
io_dtl.put("source_bill_type", "PO");
|
||||
io_dtl.put("source_bill_code", purchase.getString("VBILLCODE"));
|
||||
io_dtl.put("source_bill_table", "EM_BI_ErpPurchaseIn");
|
||||
io_dtl.put("base_billdtl_id", purchase.getString("id"));
|
||||
io_dtl.put("base_bill_type", "PO");
|
||||
io_dtl.put("base_bill_code", purchase.getString("VBILLCODE"));
|
||||
io_dtl.put("base_bill_table", "EM_BI_ErpPurchaseIn");
|
||||
io_dtl.put("remark_ext", purchase.getString("CGENERALHID"));
|
||||
WQLObject.getWQLObject("EM_BI_IOStorInvDtl").insert(io_dtl);
|
||||
}
|
||||
io_mst.put("total_qty", total_qty);
|
||||
WQLObject.getWQLObject("EM_BI_IOStorInv").insert(io_mst);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,8 +152,7 @@ public class SparePartServiceImpl implements SparePartService {
|
||||
dis_jo.put("work_status", "99");
|
||||
dis_jo.put("qty_unit_id", dtl.getString("qty_unit_id"));
|
||||
dis_jo.put("qty_unit_name", dtl.getString("qty_unit_name"));
|
||||
JSONObject stor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_attachment = '1'").uniqueResult(0);
|
||||
JSONObject struct = WQLObject.getWQLObject("st_ivt_structattr").query("stor_id = '" + stor.getString("stor_id") + "' order by sect_code").uniqueResult(0);
|
||||
JSONObject struct = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + row.get("sect_id") + "' order by sect_code").uniqueResult(0);
|
||||
dis_jo.put("sect_id", struct.getString("sect_id"));
|
||||
dis_jo.put("sect_code", struct.getString("sect_code"));
|
||||
dis_jo.put("sect_name", struct.getString("sect_name"));
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
file.device_code,
|
||||
file.device_name,
|
||||
mst.stor_id,
|
||||
dis.sect_id
|
||||
file.devicerecord_id
|
||||
FROM
|
||||
em_bi_iostorinvdis dis
|
||||
|
||||
@@ -65,16 +65,21 @@
|
||||
|
||||
IF 输入.flag = "1"
|
||||
PAGEQUERY
|
||||
SELECT
|
||||
ios.*
|
||||
SELECT DISTINCT
|
||||
ios.*,
|
||||
dtl.source_bill_code,
|
||||
(case when dtl.source_bill_type = 'PO' then '备件采购入库' else '' end ) AS source_type_name
|
||||
FROM
|
||||
em_bi_iostorinv ios
|
||||
LEFT JOIN em_bi_iostorinvdtl dtl ON dtl.iostorinv_id = ios.iostorinv_id
|
||||
WHERE
|
||||
ios.buss_type = 输入.buss_type
|
||||
AND
|
||||
ios.is_delete = '0'
|
||||
OPTION 输入.bill_code <> ""
|
||||
ios.bill_code like 输入.bill_code
|
||||
(ios.bill_code like 输入.bill_code
|
||||
OR
|
||||
dtl.source_bill_code like 输入.bill_code)
|
||||
ENDOPTION
|
||||
OPTION 输入.bizperson <> ""
|
||||
ios.bizperson like 输入.bizperson
|
||||
@@ -82,7 +87,6 @@
|
||||
OPTION 输入.deptIds <> ""
|
||||
ios.sysdeptid in 输入.deptIds
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.stor_id <> ""
|
||||
ios.stor_id = 输入.stor_id
|
||||
ENDOPTION
|
||||
|
||||
@@ -482,6 +482,7 @@
|
||||
OR
|
||||
mb.material_name = 输入.search
|
||||
)
|
||||
ENDOPTION
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
package org.nl.wms.statistics.rest;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.annotation.Log;
|
||||
import org.nl.wms.statistics.service.StatisticalReportService;
|
||||
import org.nl.wms.statistics.service.StifleQueryService;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ldjun
|
||||
* @date 2021-08-19
|
||||
**/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@Api(tags = "压制性能查询")
|
||||
@RequestMapping("/api/statistical")
|
||||
@Slf4j
|
||||
public class StatisticalReportController {
|
||||
private final StatisticalReportService statisticalReportService;
|
||||
|
||||
@GetMapping("/productInstor")
|
||||
@Log("PG粉当月入库查询")
|
||||
@ApiOperation("PG粉当月入库查询")
|
||||
public ResponseEntity<Object> productInstorQuery(@RequestParam Map whereJson, Pageable page) {
|
||||
return new ResponseEntity<>(statisticalReportService.productInstorQuery(whereJson, page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/ioStorQuery")
|
||||
@Log("出入库流水")
|
||||
@ApiOperation("出入库流水")
|
||||
public ResponseEntity<Object> ioStorQuery(@RequestParam Map whereJson, Pageable page){
|
||||
return new ResponseEntity<>(statisticalReportService.ioStorQuery(whereJson,page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/materPlanQuery")
|
||||
@Log("粉料计划表")
|
||||
@ApiOperation("粉料计划表")
|
||||
public ResponseEntity<Object> materPlanQuery(@RequestParam Map whereJson){
|
||||
return new ResponseEntity<>(statisticalReportService.materPlanQuery(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/materPlanDtlQuery")
|
||||
@Log("粉料计划表明细查询")
|
||||
@ApiOperation("粉料计划表明细查询")
|
||||
public ResponseEntity<Object> materPlanDtlQuery(@RequestBody Map whereJson){
|
||||
return new ResponseEntity<>(statisticalReportService.materPlanDtlQuery(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/getHeader")
|
||||
@Log("获取表头")
|
||||
@ApiOperation("获取表头")
|
||||
public ResponseEntity<Object> getHeader() {
|
||||
return new ResponseEntity<>(statisticalReportService.getHeader(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/getHeader2")
|
||||
@Log("获取表头")
|
||||
@ApiOperation("获取表头")
|
||||
public ResponseEntity<Object> getHeader2() {
|
||||
return new ResponseEntity<>(statisticalReportService.getHeader2(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package org.nl.wms.statistics.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ldjun
|
||||
* @description 服务接口
|
||||
* @date 2021-08-19
|
||||
**/
|
||||
public interface StatisticalReportService {
|
||||
/**
|
||||
* 查询数据分页
|
||||
*
|
||||
* @param whereJson 条件
|
||||
* @param page 分页参数
|
||||
* @return Map<String, Object>
|
||||
*/
|
||||
Map<String, Object> productInstorQuery(Map whereJson, Pageable page);
|
||||
|
||||
/**
|
||||
* 获取表头
|
||||
*/
|
||||
Map<String, Object> ioStorQuery(Map whereJson, Pageable page);
|
||||
|
||||
Map<String, Object> materPlanQuery(Map whereJson);
|
||||
|
||||
Map<String, Object> materPlanDtlQuery(Map whereJson);
|
||||
|
||||
JSONArray getHeader();
|
||||
|
||||
JSONArray getHeader2();
|
||||
}
|
||||
@@ -0,0 +1,281 @@
|
||||
package org.nl.wms.statistics.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
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.exception.BadRequestException;
|
||||
import org.nl.wms.common.util.DataAuthUtil;
|
||||
import org.nl.wms.statistics.service.StatisticalReportService;
|
||||
import org.nl.wms.statistics.service.StifleQueryService;
|
||||
import org.nl.wql.WQL;
|
||||
import org.nl.wql.core.bean.WQLObject;
|
||||
import org.nl.wql.util.WqlUtil;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class StatisticalReportServiceImpl implements StatisticalReportService {
|
||||
@Override
|
||||
public Map<String, Object> productInstorQuery(Map whereJson, Pageable page) {
|
||||
String material_code = MapUtil.getStr(whereJson, "material_code");
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("flag", "1");
|
||||
map.put("begin_time", MapUtil.getStr(whereJson, "begin_time"));
|
||||
map.put("end_time", MapUtil.getStr(whereJson, "end_time"));
|
||||
map.put("pcsn", MapUtil.getStr(whereJson, "pcsn"));
|
||||
if (!StrUtil.isEmpty(material_code)) {
|
||||
//处理转义字符
|
||||
if (material_code.contains("\\")) material_code = material_code.replace("\\", "\\\\\\");
|
||||
map.put("material_code", "%" + material_code + "%");
|
||||
}
|
||||
|
||||
|
||||
JSONObject json = WQL.getWO("statistical_report_query_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "create_time desc");
|
||||
return json;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> ioStorQuery(Map whereJson, Pageable page) {
|
||||
HashMap<String, String> map = new HashMap<>(whereJson);
|
||||
map.put("flag", "2");
|
||||
|
||||
if (StrUtil.isNotEmpty(map.get("bill_code"))) {
|
||||
map.put("bill_code", "%" + map.get("bill_code") + "%");
|
||||
}
|
||||
String deptIds = DataAuthUtil.getDeptStr();
|
||||
map.put("deptIds", deptIds);
|
||||
if (StrUtil.isNotEmpty(map.get("buss_type"))) {
|
||||
map.put("buss_type", whereJson.get("buss_type") + "%");
|
||||
}
|
||||
if (StrUtil.isNotEmpty(map.get("io_type"))) {
|
||||
map.put("io_type", map.get("io_type"));
|
||||
}
|
||||
if (StrUtil.isNotEmpty(map.get("pcsn"))) {
|
||||
map.put("pcsn", "%" + map.get("pcsn") + "%");
|
||||
}
|
||||
if (StrUtil.isNotEmpty(map.get("material_code"))) {
|
||||
map.put("material_code", "%" + map.get("material_code") + "%");
|
||||
}
|
||||
JSONObject jo = WQL.getWO("statistical_report_query_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "bill_code desc");
|
||||
return jo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> materPlanQuery(Map whereJson) {
|
||||
String begin_time = MapUtil.getStr(whereJson, "begin_time");
|
||||
String end_time = MapUtil.getStr(whereJson, "end_time");
|
||||
Date date1 = DateUtil.parse(begin_time);
|
||||
Date date2 = DateUtil.parse(end_time);
|
||||
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
|
||||
JSONArray rows = new JSONArray();
|
||||
JSONArray mater_rows = WQL.getWO("statistical_report_query_01").addParam("flag", "3").process().getResultJSONArray(0);
|
||||
JSONObject jo1 = new JSONObject();
|
||||
jo1.put("1", "库存现存量");
|
||||
rows.add(jo1);
|
||||
JSONObject jo2 = new JSONObject();
|
||||
jo2.put("1", "排产需求量");
|
||||
rows.add(jo2);
|
||||
JSONObject jo3 = new JSONObject();
|
||||
jo3.put("1", "库/需差额量");
|
||||
rows.add(jo3);
|
||||
JSONObject jo4 = new JSONObject();
|
||||
jo4.put("1", "待检入库量");
|
||||
rows.add(jo4);
|
||||
JSONObject jo5 = new JSONObject();
|
||||
jo5.put("1", "覆盖日期");
|
||||
rows.add(jo5);
|
||||
JSONObject jo6 = new JSONObject();
|
||||
jo6.put("1", "合同在途");
|
||||
rows.add(jo6);
|
||||
JSONObject jo7 = new JSONObject();
|
||||
jo7.put("1", "最低储备定额");
|
||||
rows.add(jo7);
|
||||
JSONObject jo8 = new JSONObject();
|
||||
jo8.put("1", "采购缺口");
|
||||
rows.add(jo8);
|
||||
|
||||
for (int i = 0; i < mater_rows.size(); i++) {
|
||||
JSONObject mater = mater_rows.getJSONObject(i);
|
||||
String material_id = mater.getString("material_id");
|
||||
//1、库存现存量:现有库存 - 开单领料重量
|
||||
JSONObject mater_ivt = WQL.getWO("statistical_report_query_01").addParam("flag", "4").addParam("material_id", material_id).process().uniqueResult(0);
|
||||
//查询开单领料重量
|
||||
JSONObject form_qty = WQL.getWO("statistical_report_query_01").addParam("flag", "5").addParam("material_id", material_id).addParam("begin_time",begin_time).addParam("end_time",end_time).process().uniqueResult(0);
|
||||
|
||||
double now_ivt = 0;
|
||||
double need_qty = 0;
|
||||
if (ObjectUtil.isNotEmpty(mater_ivt)) {
|
||||
now_ivt = mater_ivt.getDoubleValue("qty");
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(form_qty)) {
|
||||
need_qty = form_qty.getDoubleValue("qty");
|
||||
}
|
||||
BigDecimal canuse_num = NumberUtil.sub(now_ivt - need_qty);
|
||||
jo1.put(material_id, canuse_num + "");
|
||||
|
||||
//2、排产需求量(未开工的工令重量+排产未生成工令日计划重量)根据bom计算需要多少原料库存重量:
|
||||
JSONObject nedd_mater = WQL.getWO("statistical_report_query_01").addParam("flag", "6").addParam("material_id", material_id).process().uniqueResult(0);
|
||||
double bom_qty = 0;
|
||||
if (ObjectUtil.isNotEmpty(nedd_mater)) {
|
||||
bom_qty = nedd_mater.getDoubleValue("qty");
|
||||
}
|
||||
jo2.put(material_id, bom_qty + "");
|
||||
|
||||
//3、待检入库量:已经到货还未入库+待检重量
|
||||
JSONObject num_jo = WQL.getWO("statistical_report_query_01").addParam("flag", "7").addParam("material_id", material_id).process().uniqueResult(0);
|
||||
//订单数量
|
||||
double proc_qty = 0;
|
||||
//到货重量
|
||||
double allqty = 0;
|
||||
//合同在途
|
||||
double notqty = 0;
|
||||
//待检重量
|
||||
double noqty = 0;
|
||||
//待检+未入库数量
|
||||
double noin_qty = 0;
|
||||
if (ObjectUtil.isNotEmpty(num_jo)) {
|
||||
proc_qty = num_jo.getDoubleValue("qty");
|
||||
allqty = num_jo.getDoubleValue("allqty");
|
||||
notqty = num_jo.getDoubleValue("notqty");
|
||||
noqty = num_jo.getDoubleValue("noqty");
|
||||
noin_qty = num_jo.getDoubleValue("noin_qty");
|
||||
if (notqty < 0) {
|
||||
notqty = 0;
|
||||
}
|
||||
}
|
||||
jo4.put(material_id, noin_qty);
|
||||
|
||||
//4、合同在途:订单量-到货量
|
||||
jo6.put(material_id, notqty);
|
||||
|
||||
//5、库/需差额量 :库存现存量-排产需求量
|
||||
jo3.put(material_id, Double.parseDouble(canuse_num + "") - bom_qty);
|
||||
|
||||
//7、最低储备定额:物料的安全库存量下限
|
||||
JSONObject safe_jo = WQLObject.getWQLObject("ST_IVT_MaterialSafeIvt").query("material_id = '" + material_id + "'").uniqueResult(0);
|
||||
double safe_qty = 0;
|
||||
if (ObjectUtil.isNotEmpty(safe_jo)) {
|
||||
safe_qty = safe_jo.getDoubleValue("safe_ivt_down");
|
||||
}
|
||||
jo7.put(material_id, safe_qty);
|
||||
|
||||
//8、采购缺口:库存+待检+在途+最低储备-排产量
|
||||
double buy_qty = now_ivt + noqty + notqty + safe_qty - bom_qty;
|
||||
jo8.put(material_id, String.format("%.3f",buy_qty));
|
||||
|
||||
//6、覆盖日期:物料库存可坚持到哪一天:库存现存量减每天需求量,哪天<0,取前一天
|
||||
for (int j = 1; j <= betweenDay; j++) {
|
||||
DateTime newDate = DateUtil.offsetDay(date1, j);
|
||||
//查询该物料当天的需求量
|
||||
JSONObject today_qty = WQL.getWO("statistical_report_query_01").addParam("flag", "8").addParam("material_id", material_id).addParam("begin_time",newDate).process().uniqueResult(0);
|
||||
double need_weight = 0;
|
||||
if (ObjectUtil.isNotEmpty(today_qty)){
|
||||
need_weight = today_qty.getDoubleValue("qty");
|
||||
}
|
||||
if (now_ivt<need_weight){
|
||||
jo5.put(material_id,DateUtil.offsetDay(newDate, -1).toString().substring(0,10));
|
||||
break;
|
||||
}else {
|
||||
now_ivt -= need_weight;
|
||||
}
|
||||
if (j==betweenDay){
|
||||
jo5.put(material_id,end_time.substring(0,10));
|
||||
}
|
||||
}
|
||||
}
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("content", rows);
|
||||
return jo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> materPlanDtlQuery(Map whereJson) {
|
||||
String begin_time = MapUtil.getStr(whereJson, "begin_time");
|
||||
String end_time = MapUtil.getStr(whereJson, "end_time");
|
||||
//查询日期内的排产日计划物料信息
|
||||
JSONArray jsonArr = WQL.getWO("statistical_report_query_01").addParam("flag", "9").addParam("begin_time",begin_time).addParam("end_time",end_time).process().getResultJSONArray(0);
|
||||
JSONArray rows = new JSONArray();
|
||||
for (int i = 0; i < jsonArr.size(); i++) {
|
||||
JSONObject row = jsonArr.getJSONObject(i);
|
||||
JSONObject bom = WQLObject.getWQLObject("md_pd_productbom").query("material_id = '"+row.get("material_id")+"'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(bom)){
|
||||
throw new BadRequestException("未查询到该产品对应BOM信息");
|
||||
}
|
||||
row.put("1",row.getString("planstart_date"));
|
||||
row.put("2",row.getString("old_mark"));
|
||||
row.put("3",row.getString("product_num"));
|
||||
//查询该物料对应的bom明细
|
||||
JSONArray bom_dtl = WQLObject.getWQLObject("md_pd_productbomdtl").query("bom_id = '"+bom.getString("bom_id")+"'").getResultJSONArray(0);
|
||||
for (int j = 0; j < bom_dtl.size(); j++) {
|
||||
JSONObject dtl = bom_dtl.getJSONObject(j);
|
||||
double standard_rate = dtl.getDoubleValue("standard_rate");
|
||||
double qty = standard_rate * row.getDoubleValue("product_weight") * 0.01;
|
||||
row.put(dtl.getString("material_id"),String.format("%.3f",qty));
|
||||
}
|
||||
rows.add(row);
|
||||
}
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("content", rows);
|
||||
return jo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray getHeader() {
|
||||
JSONArray jsonArr = WQL.getWO("statistical_report_query_01").addParam("flag", "3").process().getResultJSONArray(0);
|
||||
JSONArray jonsResuftArr = new JSONArray();
|
||||
JSONObject jsonResuft1 = new JSONObject();
|
||||
jsonResuft1.put("prop", "1");
|
||||
jsonResuft1.put("label", "原料编码");
|
||||
jonsResuftArr.add(jsonResuft1);
|
||||
for (int i = 0; i < jsonArr.size(); i++) {
|
||||
JSONObject json = jsonArr.getJSONObject(i);
|
||||
JSONObject jsonResuft2 = new JSONObject();
|
||||
jsonResuft2.put("prop", json.getString("material_id"));
|
||||
jsonResuft2.put("label", json.getString("material_name"));
|
||||
jonsResuftArr.add(jsonResuft2);
|
||||
}
|
||||
return jonsResuftArr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray getHeader2() {
|
||||
JSONArray jsonArr = WQL.getWO("statistical_report_query_01").addParam("flag", "3").process().getResultJSONArray(0);
|
||||
JSONArray jonsResuftArr = new JSONArray();
|
||||
JSONObject jsonResuft1 = new JSONObject();
|
||||
jsonResuft1.put("prop", "1");
|
||||
jsonResuft1.put("label", "日期");
|
||||
JSONObject jsonResuft2 = new JSONObject();
|
||||
jsonResuft2.put("prop", "2");
|
||||
jsonResuft2.put("label", "牌号");
|
||||
JSONObject jsonResuft3 = new JSONObject();
|
||||
jsonResuft3.put("prop", "3");
|
||||
jsonResuft3.put("label", "批数");
|
||||
jonsResuftArr.add(jsonResuft1);
|
||||
jonsResuftArr.add(jsonResuft2);
|
||||
jonsResuftArr.add(jsonResuft3);
|
||||
for (int i = 0; i < jsonArr.size(); i++) {
|
||||
JSONObject json = jsonArr.getJSONObject(i);
|
||||
JSONObject jsonResuft4 = new JSONObject();
|
||||
jsonResuft4.put("prop", json.getString("material_id"));
|
||||
jsonResuft4.put("label", json.getString("material_name"));
|
||||
jonsResuftArr.add(jsonResuft4);
|
||||
}
|
||||
return jonsResuftArr;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,465 @@
|
||||
[交易说明]
|
||||
交易名: 压制性能分页查询
|
||||
所属模块:
|
||||
功能简述:
|
||||
版权所有:
|
||||
表引用:
|
||||
版本经历:
|
||||
|
||||
[数据库]
|
||||
--指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
|
||||
|
||||
[IO定义]
|
||||
#################################################
|
||||
## 表字段对应输入参数
|
||||
#################################################
|
||||
输入.flag TYPEAS s_string
|
||||
输入.begin_time TYPEAS s_string
|
||||
输入.end_time TYPEAS s_string
|
||||
输入.pcsn TYPEAS s_string
|
||||
输入.material_code TYPEAS s_string
|
||||
输入.bill_code TYPEAS s_string
|
||||
输入.io_type TYPEAS s_string
|
||||
输入.buss_type TYPEAS s_string
|
||||
输入.bill_type TYPEAS s_string
|
||||
输入.stor_id <> "" TYPEAS s_string
|
||||
输入.deptIds TYPEAS s_string
|
||||
输入.create_mode TYPEAS s_string
|
||||
输入.bill_status TYPEAS s_string
|
||||
输入.begin_time <> "" TYPEAS s_string
|
||||
输入.end_time <> "" TYPEAS s_string
|
||||
输入.material_id <> "" TYPEAS s_string
|
||||
|
||||
|
||||
[临时表]
|
||||
--这边列出来的临时表就会在运行期动态创建
|
||||
|
||||
[临时变量]
|
||||
--所有中间过程变量均可在此处定义
|
||||
|
||||
[业务过程]
|
||||
|
||||
##########################################
|
||||
# 1、输入输出检查 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 2、主过程前处理 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 3、业务主过程 #
|
||||
##########################################
|
||||
|
||||
IF 输入.flag = "1"
|
||||
PAGEQUERY
|
||||
SELECT
|
||||
MAX( mb.material_code ) AS material_code,
|
||||
SUM( off.qty ) AS qty,
|
||||
off.material_id,
|
||||
off.pcsn,
|
||||
MAX( off.create_time ) AS create_time,
|
||||
MAX( off.create_name ) AS create_name,
|
||||
MAX( wo.planend_time ) AS planend_time,
|
||||
MAX( wo.realend_time ) AS realend_time,
|
||||
datediff (MAX( wo.planend_time ),MAX( wo.realend_time )) AS off_days,
|
||||
ext.old_mark
|
||||
FROM
|
||||
pdm_bi_procedureoffline off
|
||||
LEFT JOIN pdm_bi_workorder wo ON wo.workorder_id = off.workorder_id
|
||||
LEFT JOIN md_me_materialbase mb ON mb.material_id = off.material_id
|
||||
LEFT JOIN md_me_producmaterialext ext ON ext.material_id = off.material_id
|
||||
WHERE
|
||||
1=1
|
||||
OPTION 输入.material_code <> ""
|
||||
(
|
||||
mb.material_code like 输入.material_code
|
||||
OR
|
||||
mb.material_name like 输入.material_code
|
||||
)
|
||||
ENDOPTION
|
||||
OPTION 输入.pcsn <> ""
|
||||
off.pcsn = 输入.pcsn
|
||||
ENDOPTION
|
||||
GROUP BY
|
||||
off.material_id,
|
||||
off.pcsn
|
||||
HAVING
|
||||
1=1
|
||||
OPTION 输入.begin_time <> ""
|
||||
create_time >= 输入.begin_time
|
||||
ENDOPTION
|
||||
OPTION 输入.end_time <> ""
|
||||
create_time <= 输入.end_time
|
||||
ENDOPTION
|
||||
ENDSELECT
|
||||
ENDPAGEQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "2"
|
||||
PAGEQUERY
|
||||
SELECT
|
||||
mst.biz_date,
|
||||
mst.iostorinv_id,
|
||||
mst.bill_type,
|
||||
mst.io_type,
|
||||
mst.stor_name,
|
||||
mst.input_optname,
|
||||
dept.`name`,
|
||||
sup.supp_name,
|
||||
class.class_code,
|
||||
class.class_name,
|
||||
class2.class_code AS parent_class_code,
|
||||
class2.class_name AS parent_class_name,
|
||||
mst.bill_code,
|
||||
mb.material_code,
|
||||
mb.material_name,
|
||||
dtl.pcsn,
|
||||
dtl.qty_unit_name,
|
||||
(case when io_type = '0' then ''
|
||||
when io_type = '1' AND bill_type = '010701' then CONCAT('-',real_qty)
|
||||
else dtl.real_qty end) AS out_qty,
|
||||
(case when io_type = '1' then ''
|
||||
when io_type = '0' AND bill_type = '000501' then CONCAT('-',real_qty)
|
||||
else dtl.real_qty end) AS in_qty
|
||||
FROM
|
||||
st_ivt_iostorinvdtl dtl
|
||||
LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dtl.iostorinv_id
|
||||
LEFT JOIN sys_dept dept ON dept.dept_id = mst.sysdeptid
|
||||
LEFT JOIN pcs_if_purchaseorderproc proc ON proc.id = dtl.base_billdtl_id
|
||||
LEFT JOIN md_cs_supplierbase sup ON sup.ext_id = proc.VEND_ID
|
||||
LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = mb.material_type_id
|
||||
LEFT JOIN md_pb_classstandard class2 ON class2.class_id = class.parent_class_id
|
||||
WHERE
|
||||
1 = 1
|
||||
AND
|
||||
mst.is_delete = '0'
|
||||
OPTION 输入.bill_code <> ""
|
||||
mst.bill_code like 输入.bill_code
|
||||
ENDOPTION
|
||||
OPTION 输入.io_type <> ""
|
||||
mst.io_type = 输入.io_type
|
||||
ENDOPTION
|
||||
OPTION 输入.buss_type <> ""
|
||||
mst.buss_type like 输入.buss_type
|
||||
ENDOPTION
|
||||
OPTION 输入.bill_type <> ""
|
||||
mst.bill_type = 输入.bill_type
|
||||
ENDOPTION
|
||||
OPTION 输入.stor_id <> ""
|
||||
mst.stor_id = 输入.stor_id
|
||||
ENDOPTION
|
||||
OPTION 输入.deptIds <> ""
|
||||
mst.sysdeptid in 输入.deptIds
|
||||
ENDOPTION
|
||||
OPTION 输入.bill_status <> ""
|
||||
mst.bill_status = 输入.bill_status
|
||||
ENDOPTION
|
||||
OPTION 输入.begin_time <> ""
|
||||
mst.input_time >= 输入.begin_time
|
||||
ENDOPTION
|
||||
OPTION 输入.end_time <> ""
|
||||
mst.input_time <= 输入.end_time
|
||||
ENDOPTION
|
||||
OPTION 输入.quality_scode <> ""
|
||||
dtl.quality_scode = 输入.quality_scode
|
||||
ENDOPTION
|
||||
OPTION 输入.pcsn <> ""
|
||||
dtl.pcsn like 输入.pcsn
|
||||
ENDOPTION
|
||||
OPTION 输入.material_code <> ""
|
||||
(mb.material_code like 输入.material_code or mb.material_name like 输入.material_code)
|
||||
ENDOPTION
|
||||
ENDSELECT
|
||||
ENDPAGEQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "3"
|
||||
QUERY
|
||||
SELECT DISTINCT
|
||||
mb.material_id,
|
||||
mb.material_name,
|
||||
class.parent_class_id,
|
||||
(case when class.class_id = '1503644362192588800' then 1
|
||||
when class.class_id = '1503644361664106496' then 2
|
||||
when class.class_id = '1503644362788179968' then 4
|
||||
when class.class_id = '1503644362234531840' then 5
|
||||
else 3 end) AS order_no
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
wo.material_id
|
||||
FROM
|
||||
pdm_bi_workorder wo
|
||||
WHERE
|
||||
wo.is_delete = '0'
|
||||
AND wo.`status` IN ( '10', '20', '30', '40' ) UNION
|
||||
SELECT
|
||||
plan.material_id
|
||||
FROM
|
||||
mps_bd_productdailyplan plan
|
||||
WHERE
|
||||
plan.`status` = '01'
|
||||
) a
|
||||
LEFT JOIN md_pd_productbom bom ON bom.material_id = a.material_id
|
||||
LEFT JOIN md_pd_productbomdtl dtl ON dtl.bom_id = dtl.bom_id
|
||||
LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = mb.material_type_id
|
||||
ORDER BY order_no
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "4"
|
||||
QUERY
|
||||
SELECT
|
||||
SUM( canuse_qty ) AS qty
|
||||
FROM
|
||||
st_ivt_structivt
|
||||
WHERE
|
||||
1=1
|
||||
OPTION 输入.material_id <> ""
|
||||
material_id = 输入.material_id
|
||||
ENDOPTION
|
||||
GROUP BY
|
||||
material_id
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "5"
|
||||
QUERY
|
||||
SELECT
|
||||
dtl.material_id,
|
||||
(case when (SUM(dtl.formula_qty) - SUM(dtl.put_qty)) > 0 then (SUM(dtl.formula_qty) - SUM(dtl.put_qty)) else 0 end) AS qty
|
||||
FROM
|
||||
pdm_bi_formuladtl dtl
|
||||
LEFT JOIN pdm_bi_formula mst ON mst.formula_id = dtl.formula_id
|
||||
LEFT JOIN md_me_materialbase mb ON mb.material_id = dtl.material_id
|
||||
WHERE
|
||||
mst.is_delete = '0'
|
||||
AND
|
||||
mst.`status` IN (20,30)
|
||||
OPTION 输入.material_id <> ""
|
||||
dtl.material_id = 输入.material_id
|
||||
ENDOPTION
|
||||
OPTION 输入.begin_time <> ""
|
||||
mst.create_time >= 输入.begin_time
|
||||
ENDOPTION
|
||||
OPTION 输入.end_time <> ""
|
||||
mst.create_time <= 输入.end_time
|
||||
ENDOPTION
|
||||
GROUP BY
|
||||
material_id
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "6"
|
||||
QUERY
|
||||
SELECT
|
||||
dtl.material_id,
|
||||
ROUND((b.qty*dtl.standard_rate*0.01),3) AS qty
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
material_id,
|
||||
SUM( qty ) AS qty
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
material_id,
|
||||
workorder_qty AS qty
|
||||
FROM
|
||||
pdm_bi_workorder wo
|
||||
WHERE
|
||||
wo.`status` < 50
|
||||
AND is_delete = '0'
|
||||
OPTION 输入.begin_time <> ""
|
||||
wo.planstart_date >= 输入.begin_time
|
||||
ENDOPTION
|
||||
OPTION 输入.end_time <> ""
|
||||
wo.planstart_date <= 输入.end_time
|
||||
ENDOPTION
|
||||
UNION ALL
|
||||
SELECT
|
||||
material_id,
|
||||
product_weight AS qty
|
||||
FROM
|
||||
MPS_BD_ProductDailyPlan plan
|
||||
WHERE
|
||||
plan.`status` = '01'
|
||||
OPTION 输入.begin_time <> ""
|
||||
plan.planstart_date >= 输入.begin_time
|
||||
ENDOPTION
|
||||
OPTION 输入.end_time <> ""
|
||||
plan.planstart_date <= 输入.end_time
|
||||
ENDOPTION
|
||||
) a
|
||||
GROUP BY
|
||||
a.material_id
|
||||
) b
|
||||
LEFT JOIN md_pd_productbom mst ON mst.material_id = b.material_id
|
||||
LEFT JOIN md_pd_productbomdtl dtl ON dtl.bom_id = dtl.bom_id
|
||||
WHERE
|
||||
1=1
|
||||
OPTION 输入.material_id <> ""
|
||||
b.material_id = 输入.material_id
|
||||
ENDOPTION
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "7"
|
||||
QUERY
|
||||
SELECT
|
||||
ROUND(SUM(a.QTY),3) AS qty,
|
||||
ROUND(SUM(a.allqty),3) AS allqty,
|
||||
ROUND(SUM(a.ivt_qty),3) AS noqty,
|
||||
ROUND(SUM(a.notqty),3) AS notqty,
|
||||
material_id
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
oder.QTY,
|
||||
redtl.allqty,
|
||||
oder.QTY - redtl.allqty AS notqty,
|
||||
redtl.allqty - redtl.instor_qty AS noin_qty,
|
||||
ivt.ivt_qty,
|
||||
mater.material_id
|
||||
FROM
|
||||
PCS_IF_PurchaseOrderProc oder
|
||||
LEFT JOIN md_cs_supplierbase supp ON oder.VEND_ID = supp.ext_id
|
||||
LEFT JOIN md_me_materialbase mater ON oder.ITEM_ID = mater.ext_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
sum( a.receive_qty ) AS allqty,
|
||||
sum(a.instor_qty) AS instor_qty,
|
||||
max( a.source_billdtl_id ) AS source_billdtl_id,
|
||||
max( a.material_id ) AS material_id,
|
||||
max( a.pcsn ) AS pcsn,
|
||||
max( a.receive_id ) AS receive_id
|
||||
FROM
|
||||
PCS_RC_ReceiveDtl a
|
||||
LEFT JOIN PCS_IF_PurchaseOrderProc p ON a.source_billdtl_id = p.id
|
||||
AND a.source_bill_code = p.vbillcode
|
||||
GROUP BY
|
||||
a.source_billdtl_id
|
||||
) AS redtl ON redtl.source_billdtl_id = oder.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
sum( t.ivt_qty + t.warehousing_qty ) AS ivt_qty,
|
||||
max( t.material_id ) AS material_id,
|
||||
max( t.pcsn ) AS pcsn
|
||||
FROM
|
||||
ST_IVT_StructIvt t
|
||||
LEFT JOIN PCS_RC_ReceiveDtl d ON t.material_id = d.material_id
|
||||
AND t.pcsn = d.pcsn
|
||||
WHERE
|
||||
t.quality_scode = '00'
|
||||
GROUP BY
|
||||
t.material_id
|
||||
) AS ivt ON ivt.material_id = redtl.material_id
|
||||
AND ivt.pcsn = redtl.pcsn
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
p.input_time,
|
||||
p.receive_id,
|
||||
p.is_delete
|
||||
FROM
|
||||
PCS_RC_ReceiveMst p
|
||||
WHERE
|
||||
p.is_delete = '0'
|
||||
ORDER BY
|
||||
p.input_time DESC
|
||||
LIMIT 1
|
||||
) AS remst ON remst.receive_id = redtl.receive_id
|
||||
WHERE
|
||||
oder.dr = '0'
|
||||
) a
|
||||
WHERE
|
||||
1=1
|
||||
OPTION 输入.flag <> ""
|
||||
a.material_id = 输入.material_id
|
||||
ENDOPTION
|
||||
GROUP BY a.material_id
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "8"
|
||||
QUERY
|
||||
SELECT
|
||||
dtl.material_id,
|
||||
ROUND((b.qty*dtl.standard_rate*0.01),3) AS qty
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
material_id,
|
||||
SUM( qty ) AS qty
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
material_id,
|
||||
workorder_qty AS qty
|
||||
FROM
|
||||
pdm_bi_workorder wo
|
||||
WHERE
|
||||
wo.`status` < 50
|
||||
AND is_delete = '0'
|
||||
OPTION 输入.begin_time <> ""
|
||||
wo.planstart_time like 输入.begin_time
|
||||
ENDOPTION
|
||||
UNION ALL
|
||||
SELECT
|
||||
material_id,
|
||||
product_weight AS qty
|
||||
FROM
|
||||
MPS_BD_ProductDailyPlan plan
|
||||
WHERE
|
||||
plan.`status` = '01'
|
||||
OPTION 输入.begin_time <> ""
|
||||
plan.planstart_date like 输入.begin_time
|
||||
ENDOPTION
|
||||
) a
|
||||
GROUP BY
|
||||
a.material_id
|
||||
) b
|
||||
LEFT JOIN md_pd_productbom mst ON mst.material_id = b.material_id
|
||||
LEFT JOIN md_pd_productbomdtl dtl ON dtl.bom_id = dtl.bom_id
|
||||
WHERE
|
||||
1=1
|
||||
OPTION 输入.material_id <> ""
|
||||
b.material_id = 输入.material_id
|
||||
ENDOPTION
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "9"
|
||||
QUERY
|
||||
SELECT
|
||||
plan.planstart_date,
|
||||
plan.product_num,
|
||||
ext.old_mark,
|
||||
plan.product_weight,
|
||||
plan.material_id
|
||||
FROM
|
||||
mps_bd_productdailyplan plan
|
||||
LEFT JOIN md_me_producmaterialext ext ON ext.material_id = plan.material_id
|
||||
WHERE
|
||||
1=1
|
||||
OPTION 输入.begin_time <> ""
|
||||
plan.planstart_date >= 输入.begin_time
|
||||
ENDOPTION
|
||||
OPTION 输入.end_time <> ""
|
||||
plan.planstart_date <= 输入.end_time
|
||||
ENDOPTION
|
||||
ORDER BY
|
||||
planstart_date
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
34
mes/qd/src/api/wms/statistics/report.js
Normal file
34
mes/qd/src/api/wms/statistics/report.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function add(data) {
|
||||
return request({
|
||||
url: 'api/rawUatWcQuery',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function del(ids) {
|
||||
return request({
|
||||
url: 'api/rawUatWcQuery/',
|
||||
method: 'delete',
|
||||
data: ids
|
||||
})
|
||||
}
|
||||
|
||||
export function edit(data) {
|
||||
return request({
|
||||
url: 'api/rawUatWcQuery',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function getHeader(material_type_id) {
|
||||
return request({
|
||||
url: 'api/rawUatWcQuery/getHeader/' + material_type_id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export default { add, edit, del, getHeader }
|
||||
386
mes/qd/src/views/wms/statistics/ioStorQuery2/index.vue
Normal file
386
mes/qd/src/views/wms/statistics/ioStorQuery2/index.vue
Normal file
@@ -0,0 +1,386 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!--工具栏-->
|
||||
<div class="head-container">
|
||||
<div v-if="crud.props.searchToggle">
|
||||
<!-- 搜索 -->
|
||||
<el-form
|
||||
:inline="true"
|
||||
class="demo-form-inline"
|
||||
label-position="right"
|
||||
label-width="90px"
|
||||
label-suffix=":"
|
||||
>
|
||||
<el-form-item label="所属仓库">
|
||||
<el-select
|
||||
v-model="query.stor_id"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="全部"
|
||||
class="filter-item"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in storlist"
|
||||
:key="item.stor_id"
|
||||
:label="item.stor_name"
|
||||
:value="item.stor_id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="出入类型">
|
||||
<el-select
|
||||
v-model="query.io_type"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="出入类型"
|
||||
class="filter-item"
|
||||
@change="ioTypeChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in dict.io_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="业务类型">
|
||||
<el-select
|
||||
v-model="query.bill_type"
|
||||
clearable
|
||||
filterable
|
||||
size="mini"
|
||||
placeholder="业务类型"
|
||||
class="filter-item"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in billtypelist"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="单据状态">
|
||||
<el-select
|
||||
v-model="query.bill_status"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="单据状态"
|
||||
class="filter-item"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in dict.io_bill_status"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="出入库单号">
|
||||
<el-input
|
||||
v-model="query.bill_code"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="出入库单号"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否回传">
|
||||
<el-select
|
||||
v-model="query.is_upload"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="是否回传"
|
||||
class="filter-item"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in dict.is_upload"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料">
|
||||
<el-input
|
||||
v-model="query.material_code"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="物料编码或名称模糊查询"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="批次">
|
||||
<el-input
|
||||
v-model="query.pcsn"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="批次模糊查询"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="品质类型">
|
||||
<el-select
|
||||
v-model="query.quality_scode"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="全部"
|
||||
class="filter-item"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in dict.ST_QUALITY_SCODE"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间">
|
||||
<el-date-picker
|
||||
v-model="query.createTime"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
@change="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<rrOperation />
|
||||
</el-form>
|
||||
</div>
|
||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||
<crudOperation :permission="permission">
|
||||
<el-button
|
||||
slot="right"
|
||||
class="filter-item"
|
||||
type="success"
|
||||
icon="el-icon-position"
|
||||
size="mini"
|
||||
:disabled="dis_flag"
|
||||
@click="divOpen"
|
||||
>
|
||||
单据明细
|
||||
</el-button>
|
||||
<el-button
|
||||
slot="right"
|
||||
class="filter-item"
|
||||
type="success"
|
||||
:disabled="work_flag"
|
||||
icon="el-icon-position"
|
||||
size="mini"
|
||||
@click="taskOpen"
|
||||
>
|
||||
作业明细
|
||||
</el-button>
|
||||
</crudOperation>
|
||||
<!--表格渲染-->
|
||||
<el-table
|
||||
ref="table"
|
||||
v-loading="crud.loading"
|
||||
size="mini"
|
||||
:data="crud.data"
|
||||
:max-height="590"
|
||||
style="width: 100%;"
|
||||
:highlight-current-row="true"
|
||||
@selection-change="crud.selectionChangeHandler"
|
||||
@current-change="handleCurrentChange"
|
||||
@select="handleSelectionChange"
|
||||
@select-all="onSelectAll"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column type="index" label="序号" width="50" align="center" />
|
||||
<el-table-column show-overflow-tooltip prop="bill_code" width="130" label="订单编码" />
|
||||
<el-table-column show-overflow-tooltip :formatter="stateFormat" width="100" prop="bill_status" label="单据状态" />
|
||||
<el-table-column prop="stor_name" label="仓库" width="100" />
|
||||
<el-table-column prop="io_type" label="出入库类型" :formatter="ioFormat" min-width="100" show-overflow-tooltip />
|
||||
<el-table-column show-overflow-tooltip prop="bill_type" :formatter="bill_typeFormat" min-width="120" label="业务类型" />
|
||||
<el-table-column show-overflow-tooltip width="135" prop="biz_date" label="业务日期" />
|
||||
<el-table-column show-overflow-tooltip :formatter="create_modeFormat" prop="create_mode" label="生成方式" width="100" />
|
||||
<el-table-column label="明细数" align="center" prop="detail_count" width="100" />
|
||||
<el-table-column label="总重量" align="center" prop="total_qty">
|
||||
<template slot-scope="scope">
|
||||
{{ fun(scope.row.total_qty) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="制单人" align="center" prop="input_optname" />
|
||||
<el-table-column label="制单时间" align="center" prop="input_time" width="150" />
|
||||
<el-table-column label="修改人" align="center" prop="update_optname" />
|
||||
<el-table-column label="修改时间" align="center" prop="update_time" width="150" />
|
||||
<el-table-column label="确认人" align="center" prop="confirm_optname" width="150" />
|
||||
<el-table-column label="确认时间" align="center" prop="confirm_time" width="150" />
|
||||
<el-table-column label="回传人" align="center" prop="upload_optname" width="150" />
|
||||
<el-table-column label="回传时间" align="center" prop="upload_time" width="150" />
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<pagination />
|
||||
</div>
|
||||
<DivDialog :dialog-show.sync="divShow" :open-array="openParam" :rowmst="mstrow" @DivChanged="querytable" />
|
||||
<TaskDialog :dialog-show.sync="taskShow" :open-array="openParam" :rowmst="mstrow" @TaskChanged="querytable" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import checkoutbill from '@/api/wms/st/core/outbill/checkoutbill'
|
||||
import CRUD, { crud, header, presenter } from '@crud/crud'
|
||||
import rrOperation from '@crud/RR.operation'
|
||||
import crudOperation from '@crud/CRUD.operation'
|
||||
import pagination from '@crud/Pagination'
|
||||
import DivDialog from '@/views/wms/statistics/ioStorQuery/DivDialog'
|
||||
import TaskDialog from '@/views/wms/statistics/ioStorQuery/TaskDialog'
|
||||
import crudStorattr from '@/api/wms/basedata/st/storattr'
|
||||
import crudRawAssist from '@/api/wms/st/core/inbill/rawassist'
|
||||
|
||||
export default {
|
||||
name: 'IoStorQuery',
|
||||
components: { crudOperation, rrOperation, pagination, TaskDialog, DivDialog },
|
||||
cruds() {
|
||||
return CRUD({ title: '出入库单报表',
|
||||
props: {
|
||||
// 每页数据条数
|
||||
size: 20
|
||||
},idField: 'iostorinv_id', url: 'api/checkoutbill', crudMethod: { ...checkoutbill },
|
||||
optShow: {
|
||||
add: false,
|
||||
edit: false,
|
||||
del: false,
|
||||
reset: true,
|
||||
download: false
|
||||
}})
|
||||
},
|
||||
mixins: [presenter(), header(), crud()],
|
||||
// 数据字典
|
||||
dicts: ['ST_QUALITY_SCODE', 'io_bill_status', 'ST_CREATE_MODE', 'io_type', 'is_upload'],
|
||||
data() {
|
||||
return {
|
||||
height: document.documentElement.clientHeight - 180 + 'px;',
|
||||
permission: {
|
||||
},
|
||||
divShow: false,
|
||||
taskShow: false,
|
||||
dis_flag: true,
|
||||
work_flag: true,
|
||||
openParam: [],
|
||||
mstrow: {},
|
||||
currentRow: null,
|
||||
checkrows: [],
|
||||
storlist: [],
|
||||
billtypelist: []
|
||||
}
|
||||
},
|
||||
mounted: function() {
|
||||
const that = this
|
||||
window.onresize = function temp() {
|
||||
that.height = document.documentElement.clientHeight - 180 + 'px;'
|
||||
}
|
||||
},
|
||||
created() {
|
||||
crudStorattr.getStor({ 'is_materialstore': '1' }).then(res => {
|
||||
this.storlist = res.content
|
||||
})
|
||||
checkoutbill.getType().then(res => {
|
||||
this.billtypelist = res
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
[CRUD.HOOK.beforeRefresh]() {
|
||||
this.handleCurrentChange(null)
|
||||
},
|
||||
fun(val) {
|
||||
return Number(val).toFixed(3)
|
||||
},
|
||||
ioFormat(row, column) {
|
||||
return this.dict.label.io_type[row.io_type]
|
||||
},
|
||||
handleSelectionChange(val, row) {
|
||||
if (val.length > 1) {
|
||||
this.$refs.table.clearSelection()
|
||||
this.$refs.table.toggleRowSelection(val.pop())
|
||||
this.buttonChange(row)
|
||||
} else if (val.length === 1) {
|
||||
this.buttonChange(row)
|
||||
} else {
|
||||
this.handleCurrentChange(null)
|
||||
}
|
||||
},
|
||||
onSelectAll() {
|
||||
this.$refs.table.clearSelection()
|
||||
this.handleCurrentChange(null)
|
||||
},
|
||||
buttonChange(current) {
|
||||
if (current !== null) {
|
||||
this.currentRow = current
|
||||
this.dis_flag = false
|
||||
this.work_flag = false
|
||||
}
|
||||
},
|
||||
ioTypeChange(value) {
|
||||
if (value === '1') {
|
||||
crudRawAssist.getType({ 'io_code': '', 'io_flag': '01' }).then(res => {
|
||||
this.billtypelist = res
|
||||
})
|
||||
} else if (value === '0') {
|
||||
crudRawAssist.getType({ 'io_code': '', 'io_flag': '00' }).then(res => {
|
||||
this.billtypelist = res
|
||||
})
|
||||
} else {
|
||||
checkoutbill.getType().then(res => {
|
||||
this.billtypelist = res
|
||||
})
|
||||
}
|
||||
this.crud.toQuery()
|
||||
},
|
||||
stateFormat(row) {
|
||||
return this.dict.label.io_bill_status[row.bill_status]
|
||||
},
|
||||
bill_typeFormat(row) {
|
||||
for (const item of this.billtypelist) {
|
||||
if (item.code === row.bill_type) {
|
||||
return item.name
|
||||
}
|
||||
}
|
||||
},
|
||||
create_modeFormat(row) {
|
||||
return this.dict.label.ST_CREATE_MODE[row.create_mode]
|
||||
},
|
||||
handleCurrentChange(current) {
|
||||
if (current === null) {
|
||||
this.dis_flag = true
|
||||
this.work_flag = true
|
||||
this.currentRow = {}
|
||||
}
|
||||
},
|
||||
divOpen() {
|
||||
checkoutbill.getOutBillDtl({ 'iostorinv_id': this.currentRow.iostorinv_id }).then(res => {
|
||||
this.openParam = res
|
||||
this.divShow = true
|
||||
this.mstrow = this.currentRow
|
||||
})
|
||||
},
|
||||
taskOpen() {
|
||||
checkoutbill.getOutBillDis({ 'iostorinv_id': this.currentRow.iostorinv_id }).then(res => {
|
||||
this.openParam = res
|
||||
this.taskShow = true
|
||||
this.mstrow = this.currentRow
|
||||
})
|
||||
},
|
||||
querytable() {
|
||||
this.crud.toQuery()
|
||||
this.handleCurrentChange(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
::v-deep .el-dialog__body {
|
||||
padding-top: 10px;
|
||||
}
|
||||
</style>
|
||||
198
mes/qd/src/views/wms/statistics/materPlan/index.vue
Normal file
198
mes/qd/src/views/wms/statistics/materPlan/index.vue
Normal file
@@ -0,0 +1,198 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!--工具栏-->
|
||||
<div class="head-container">
|
||||
<div v-if="crud.props.searchToggle">
|
||||
<!-- 搜索 -->
|
||||
<el-form
|
||||
:inline="true"
|
||||
class="demo-form-inline"
|
||||
label-position="right"
|
||||
label-width="80px"
|
||||
label-suffix=":"
|
||||
>
|
||||
|
||||
<el-form-item label="到货日期">
|
||||
<date-range-picker v-model="query.createTime" class="date-item" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="单据编号">
|
||||
<el-input
|
||||
v-model="query.receive_code"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="请输入单据编号"
|
||||
style="width: 230px;"
|
||||
class="filter-item"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="物料编码">
|
||||
<el-input
|
||||
v-model="query.material_code"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="请输入物料编码、名称"
|
||||
style="width: 230px;"
|
||||
class="filter-item"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="批次">
|
||||
<label slot="label">批 次:</label>
|
||||
<el-input
|
||||
v-model="query.pcsn"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="请输入批次"
|
||||
style="width: 230px;"
|
||||
class="filter-item"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="单据状态">
|
||||
<el-select
|
||||
v-model="query.bill_status"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="请选择"
|
||||
class="filter-item"
|
||||
style="width: 210px;"
|
||||
@change="hand"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in statusList"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<rrOperation />
|
||||
</el-form>
|
||||
</div>
|
||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||
<crudOperation :permission="permission">
|
||||
<el-button
|
||||
slot="right"
|
||||
class="filter-item"
|
||||
type="success"
|
||||
icon="el-icon-check"
|
||||
size="mini"
|
||||
@click="downdtl"
|
||||
>
|
||||
导出Excel
|
||||
</el-button>
|
||||
</crudOperation>
|
||||
<!--表格渲染-->
|
||||
<el-table
|
||||
ref="table"
|
||||
v-loading="crud.loading"
|
||||
:data="crud.data"
|
||||
size="mini"
|
||||
:max-height="590"
|
||||
style="width: 100%;"
|
||||
@selection-change="crud.selectionChangeHandler"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="100" align="center" />
|
||||
<template v-for="(col,index) in cols">
|
||||
<el-table-column v-if="col" :prop="col.prop" :label="col.label" width="120px" show-overflow-tooltip />
|
||||
</template>
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<pagination />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import crudRawuatwcquery from '@/api/wms/statistics/rawuatwcquery'
|
||||
import CRUD, { presenter, header, crud } from '@crud/crud'
|
||||
import rrOperation from '@crud/RR.operation'
|
||||
import crudOperation from '@crud/CRUD.operation'
|
||||
import udOperation from '@crud/UD.operation'
|
||||
import pagination from '@crud/Pagination'
|
||||
import DateRangePicker from '@/components/DateRangePicker'
|
||||
import crudInspectionsheetmst from '@/api/wms/ql/inspectionsheetmst'
|
||||
import {download} from "@/api/data";
|
||||
import {downloadFile} from "@/utils";
|
||||
|
||||
export default {
|
||||
name: 'RawUatCbQuery',
|
||||
components: { pagination, crudOperation, rrOperation, udOperation, DateRangePicker },
|
||||
mixins: [presenter(), header(), crud()],
|
||||
cruds() {
|
||||
return CRUD({
|
||||
title: '原材料碳化钨查询',
|
||||
url: 'api/rawUatWcQuery',
|
||||
idField: 'performance_id',
|
||||
sort: 'performance_id,desc',
|
||||
crudMethod: { ...crudRawuatwcquery },
|
||||
props: {
|
||||
// 每页数据条数
|
||||
size: 20
|
||||
},
|
||||
optShow: {
|
||||
add: false,
|
||||
edit: false,
|
||||
del: false,
|
||||
download: false,
|
||||
reset: true
|
||||
}
|
||||
})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
cols: [],
|
||||
statusList: [],
|
||||
permission: {
|
||||
},
|
||||
rules: {
|
||||
}}
|
||||
},
|
||||
beforeCreate() {
|
||||
},
|
||||
created() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
// 钩子:在获取表格数据之前执行,false 则代表不获取数据
|
||||
[CRUD.HOOK.beforeRefresh]() {
|
||||
var str = this.$route.path
|
||||
// var material_type_id = str.substring(str.length - 2)
|
||||
// 截取最后一个/之后的内容
|
||||
var index = str.lastIndexOf('\/')
|
||||
str = str.substring(index + 1, str.length)
|
||||
const material_type_id = str
|
||||
crudRawuatwcquery.getHeader(material_type_id).then(res => {
|
||||
this.cols = res
|
||||
})
|
||||
crudInspectionsheetmst.getStatus().then(res => {
|
||||
this.statusList = res
|
||||
})
|
||||
this.query.material_type_id = str
|
||||
return true
|
||||
},
|
||||
hand(value) {
|
||||
this.crud.toQuery()
|
||||
},
|
||||
downdtl() {
|
||||
if (this.currentRow !== null) {
|
||||
crud.downloadLoading = true
|
||||
download('/api/rawUatWcQuery/download', this.crud.query).then(result => {
|
||||
downloadFile(result, '原材料碳化钨', 'xlsx')
|
||||
crud.downloadLoading = false
|
||||
}).catch(() => {
|
||||
crud.downloadLoading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
223
mes/qd/src/views/wms/statistics/productInstor/index.vue
Normal file
223
mes/qd/src/views/wms/statistics/productInstor/index.vue
Normal file
@@ -0,0 +1,223 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!--工具栏-->
|
||||
<div class="head-container">
|
||||
<div v-if="crud.props.searchToggle">
|
||||
<!-- 搜索 -->
|
||||
<el-form
|
||||
:inline="true"
|
||||
class="demo-form-inline"
|
||||
label-position="right"
|
||||
label-width="90px"
|
||||
label-suffix=":"
|
||||
>
|
||||
<el-form-item label="所属仓库">
|
||||
<el-select
|
||||
v-model="query.stor_id"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="全部"
|
||||
class="filter-item"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in storlist"
|
||||
:key="item.stor_id"
|
||||
:label="item.stor_name"
|
||||
:value="item.stor_id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="单据类型">
|
||||
<el-select
|
||||
v-model="query.bill_type"
|
||||
clearable
|
||||
filterable
|
||||
size="mini"
|
||||
placeholder="业务类型"
|
||||
class="filter-item"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in billtypelist"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="单据日期">
|
||||
<el-date-picker
|
||||
v-model="query.createTime"
|
||||
type="daterange"
|
||||
@input="onInput()"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
@change="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料">
|
||||
<el-input
|
||||
v-model="query.material_code"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="物料编码或名称模糊查询"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="批次">
|
||||
<el-input
|
||||
v-model="query.pcsn"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="批次模糊查询"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工令">
|
||||
<el-input v-model="query.source_bill_code" size="mini" placeholder="工令号" disabled class="input-with-select">
|
||||
<el-button slot="append" icon="el-icon-search" @click="queryMater" />
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="人员">
|
||||
<el-input
|
||||
v-model="query.username"
|
||||
size="mini"
|
||||
clearable
|
||||
placeholder="人员"
|
||||
@keyup.enter.native="crud.toQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<rrOperation />
|
||||
</el-form>
|
||||
</div>
|
||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||
<crudOperation :permission="permission">
|
||||
</crudOperation>
|
||||
<!--表格渲染-->
|
||||
<el-table
|
||||
ref="table"
|
||||
v-loading="crud.loading"
|
||||
size="mini"
|
||||
:max-height="590"
|
||||
:data="crud.data"
|
||||
style="width: 100%;"
|
||||
:highlight-current-row="true"
|
||||
@selection-change="crud.selectionChangeHandler"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="50" align="center" />
|
||||
<el-table-column prop="material_code" label="物料编码" width="150" align="center" />
|
||||
<el-table-column prop="material_name" label="物料名称" width="150" align="center" />
|
||||
<el-table-column min-width="90" prop="pcsn" label="批次号" align="center" />
|
||||
<el-table-column prop="sum_plan_qty" label="计划重量(KG)" :formatter="crud.formatNum3" width="150" align="center" />
|
||||
<el-table-column prop="sum_real_qty" label="实际重量(KG)" :formatter="crud.formatNum3" width="150" align="center" />
|
||||
<el-table-column prop="quality_scode" label="品质类型" align="center" width="110px" :formatter="quality_scodeFormat" />
|
||||
<el-table-column prop="ivt_level" label="库存等级" align="center" width="100px" :formatter="ivt_levelFormat" />
|
||||
<el-table-column prop="is_active" label="是否可用" align="center" width="110px" :formatter="is_activeFormat" />
|
||||
<el-table-column min-width="120" prop="qty_unit_name" label="单位" align="center" />
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<pagination />
|
||||
</div>
|
||||
<StructIvt :dialog-show.sync="structshow" @StructIvtClosed="queryTableDtl" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import checkoutbill from '@/api/wms/st/core/outbill/checkoutbill'
|
||||
import CRUD, { crud, header, presenter } from '@crud/crud'
|
||||
import rrOperation from '@crud/RR.operation'
|
||||
import crudOperation from '@crud/CRUD.operation'
|
||||
import pagination from '@crud/Pagination'
|
||||
import crudStorattr from '@/api/wms/basedata/st/storattr'
|
||||
import Date from '@/utils/datetime'
|
||||
import StructIvt from '@/views/wms/statistics/outStorQuery/StructIvt'
|
||||
import crudRawAssist from '@/api/wms/st/core/inbill/rawassist'
|
||||
|
||||
export default {
|
||||
name: 'outStorQuery',
|
||||
components: { StructIvt, crudOperation, rrOperation, pagination },
|
||||
cruds() {
|
||||
return CRUD({ title: '生产配粉领料',
|
||||
props: {
|
||||
// 每页数据条数
|
||||
size: 20
|
||||
},idField: 'iostorinv_id', url: 'api/checkoutbill/queryDtl', crudMethod: { ...checkoutbill },
|
||||
optShow: {
|
||||
add: false,
|
||||
edit: false,
|
||||
del: false,
|
||||
reset: true,
|
||||
download: false
|
||||
}})
|
||||
},
|
||||
mixins: [presenter(), header(), crud()],
|
||||
// 数据字典
|
||||
dicts: ['ST_QUALITY_SCODE', 'ST_IVT_LEVEL', 'is_used', 'is_again_put', 'is_usable'],
|
||||
data() {
|
||||
return {
|
||||
height: document.documentElement.clientHeight - 180 + 'px;',
|
||||
permission: {
|
||||
},
|
||||
structshow: false,
|
||||
currentRow: null,
|
||||
storlist: [],
|
||||
billtypelist: []
|
||||
}
|
||||
},
|
||||
mounted: function() {
|
||||
const that = this
|
||||
window.onresize = function temp() {
|
||||
that.height = document.documentElement.clientHeight - 180 + 'px;'
|
||||
}
|
||||
},
|
||||
created() {
|
||||
crudStorattr.getStor({ 'is_materialstore': '1' }).then(res => {
|
||||
this.storlist = res.content
|
||||
})
|
||||
crudRawAssist.getType({ 'io_code': '0103', 'io_flag': '01' }).then(res => {
|
||||
this.billtypelist = res
|
||||
})
|
||||
this.crud.query.createTime = [new Date(), new Date()]
|
||||
this.crud.toQuery()
|
||||
},
|
||||
methods: {
|
||||
onInput() {
|
||||
this.$forceUpdate()
|
||||
},
|
||||
async queryMater() {
|
||||
this.structshow = true
|
||||
},
|
||||
quality_scodeFormat(row, column) {
|
||||
return this.dict.label.ST_QUALITY_SCODE[row.quality_scode]
|
||||
},
|
||||
ivt_levelFormat(row, column) {
|
||||
return this.dict.label.ST_IVT_LEVEL[row.ivt_level]
|
||||
},
|
||||
is_activeFormat(row, column) {
|
||||
return this.dict.label.is_usable[row.is_active]
|
||||
},
|
||||
queryTableDtl(rows) {
|
||||
let devices = ''
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
if ( i === 0 ) {
|
||||
devices = rows[i].workorder_code
|
||||
}else{
|
||||
devices = devices + ',' + rows[i].workorder_code
|
||||
}
|
||||
}
|
||||
if(rows.length > 0){
|
||||
this.crud.query.source_bill_code = devices
|
||||
this.crud.toQuery()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
::v-deep .el-dialog__body {
|
||||
padding-top: 10px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user