This commit is contained in:
2022-09-14 15:39:22 +08:00
parent d6e295ac25
commit 7af40b17cc
13 changed files with 1792 additions and 120 deletions

View File

@@ -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);
}
}
}
}

View File

@@ -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"));

View File

@@ -63,6 +63,7 @@
file.device_code,
file.device_name,
mst.stor_id,
dis.sect_id
file.devicerecord_id
FROM
em_bi_iostorinvdis dis

View File

@@ -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

View File

@@ -482,6 +482,7 @@
OR
mb.material_name = 输入.search
)
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -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);
}
}

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -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