This commit is contained in:
2022-12-09 13:16:11 +08:00
parent 387b591596
commit ed8511c07c
17 changed files with 779 additions and 41 deletions

View File

@@ -0,0 +1,41 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.nl.modules.common.exception;
import lombok.Getter;
import org.springframework.http.HttpStatus;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
/**
* @author Zheng Jie
* @date 2018-11-23
* 统一异常处理
*/
@Getter
public class BadRequestException extends RuntimeException{
private Integer status = BAD_REQUEST.value();
public BadRequestException(String msg){
super(msg);
}
public BadRequestException(HttpStatus status,String msg){
super(msg);
this.status = status.value();
}
}

View File

@@ -275,7 +275,7 @@ public class MesToLmsServiceImpl implements MesToLmsService {
if (ObjectUtil.isEmpty(bakingTimer)) throw new BadRequestException("烘烤时间不能为空");
String point_code = "";
JSONObject jsonCoolIvt = coolIvtTab.query("container_name = '" + containerName + "' and full_point_status = '02' and cool_ivt_status <> '03'").uniqueResult(0);
JSONObject jsonCoolIvt = coolIvtTab.query("container_name = '" + containerName + "' and full_point_status = '02' and cool_ivt_status <> '04'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonCoolIvt)) {
JSONObject jsonPoint = pointTab.query("material_code ='" + containerName + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonPoint)) point_code = jsonPoint.getString("point_code");
@@ -740,24 +740,21 @@ public class MesToLmsServiceImpl implements MesToLmsService {
try {
// String is_mesTolms = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("is_mesTolms").getValue();
// if (StrUtil.equals(is_mesTolms, "1")) {
String isUnPlanProductionBox = param.getString("isUnPlanProductionBox"); // 生产订单
String isUnPlanProductionBox = param.getString("isUnPlanProductionBox"); // 是否计划外子卷
String QuanlityInBox = param.getString("QuanlityInBox"); // 产品编码
String QualityGuaranPeriod = param.getString("QualityGuaranPeriod"); // 保质期
String ProductName = param.getString("ProductName"); // 来源卷位置
String Description = param.getString("Description"); // 来源卷位置
String DateOfFGInbound = param.getString("DateOfFGInbound"); // 来源卷位置
String BoxWeight = param.getString("BoxWeight"); // 来源卷位置
String box_type = param.getString("Attribute1"); // 木箱料号
String box_length = param.getString("Attribute2"); // 木箱料号
String box_width = param.getString("Attribute3"); // 木箱料号
String box_high = param.getString("Attribute4"); // 木箱料号
double BoxWeight = 0; // 木箱自身重量
JSONArray details = param.getJSONArray("details");
if (ObjectUtil.isEmpty(details)) throw new BadRequestException("明细为空");
for (int i = 0; i < details.size(); i++) {
JSONObject detail = details.getJSONObject(i);
BoxWeight = NumberUtil.add(BoxWeight, detail.getDoubleValue("NetWeight"));
String PackageBoxSN = detail.getString("PackageBoxSN"); // 分切订单类型
String ContainerName = detail.getString("ContainerName"); // 子卷号
@@ -787,7 +784,7 @@ public class MesToLmsServiceImpl implements MesToLmsService {
jo.put("box_width", box_width);
jo.put("box_high", box_high);
jo.put("quanlity_in_box", QuanlityInBox);
// jo.put("box_weight", BoxWeight);
jo.put("box_weight", BoxWeight);
if (QualityGuaranPeriod.equals("0天")){
jo.put("quality_guaran_period", "90天");
}else {

View File

@@ -39,6 +39,8 @@ public class SapToLmsServiceImpl implements SapToLmsService {
for (int i = 0; i < rows.size(); i++) {
JSONObject row = rows.getJSONObject(i);
String MATNR = row.getString("MATNR");
String MATNR01 = row.getString("MATNR01");
String MEINS = row.getString("MEINS");
if (StrUtil.isEmpty(MATNR)) {
throw new BadRequestException("物料编码不能为空!");
}
@@ -48,6 +50,39 @@ public class SapToLmsServiceImpl implements SapToLmsService {
} else {
WQLObject.getWQLObject("md_me_materialbaseext").update(row);
}
JSONObject base_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '"+MATNR+"'").uniqueResult(0);
if (ObjectUtil.isEmpty(base_jo)){
JSONObject mater_base_jo = new JSONObject();
mater_base_jo.put("material_id",IdUtil.getSnowflake(1,1).nextId());
mater_base_jo.put("material_code",MATNR);
mater_base_jo.put("material_name",MATNR01);
JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("unit_code = '"+MEINS+"'").uniqueResult(0);
if (ObjectUtil.isEmpty(unit)){
throw new BadRequestException("未查询到相关计量单位,请进行维护!");
}
mater_base_jo.put("base_unit_id",unit.getString("measure_unit_id"));
mater_base_jo.put("create_id", "1");
mater_base_jo.put("create_name", "管理员");
mater_base_jo.put("create_time", DateUtil.now());
mater_base_jo.put("update_optid", "1");
mater_base_jo.put("update_optname", "管理员");
mater_base_jo.put("update_time", DateUtil.now());
mater_base_jo.put("is_used","1");
mater_base_jo.put("is_delete","0");
WQLObject.getWQLObject("md_me_materialbase").insert(mater_base_jo);
}else {
base_jo.put("material_name",MATNR01);
JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("unit_code = '"+MEINS+"'").uniqueResult(0);
if (ObjectUtil.isEmpty(unit)){
throw new BadRequestException("未查询到相关计量单位,请进行维护!");
}
base_jo.put("base_unit_id",unit.getString("measure_unit_id"));
base_jo.put("update_optid", "1");
base_jo.put("update_optname", "管理员");
base_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("md_me_materialbase").update(base_jo);
}
}
} catch (Exception exception) {
result.put("RTYPE", "E");

View File

@@ -0,0 +1,40 @@
package org.nl.wms.pda.mps.rest;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.logging.annotation.Log;
import org.nl.wms.pda.mps.service.BakingService;
import org.nl.wms.pda.mps.service.RawFoilService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@Api(tags = "烘烤工序")
@RequestMapping("api/pda/baking")
@Slf4j
public class BakingController {
private final BakingService bakingService;
@PostMapping("/ovenInAndOut")
@Log("烘箱出入")
@ApiOperation("烘箱出入")
public ResponseEntity<Object> queryRawFoil(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(bakingService.ovenInAndOut(whereJson),HttpStatus.OK);
}
@PostMapping("/inCoolIvt")
@Log("入冷却")
@ApiOperation("入冷却")
public ResponseEntity<Object> inCoolIvt(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(bakingService.inCoolIvt(whereJson),HttpStatus.OK);
}
}

View File

@@ -0,0 +1,22 @@
package org.nl.wms.pda.mps.service;
import com.alibaba.fastjson.JSONObject;
public interface BakingService {
/**
* 烘箱出入
* @param whereJson /
* @return JSONObject
*/
JSONObject ovenInAndOut(JSONObject whereJson);
/**
* 入冷却
* @param whereJson /
* @return JSONObject
*/
JSONObject inCoolIvt(JSONObject whereJson);
}

View File

@@ -0,0 +1,463 @@
package org.nl.wms.pda.mps.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.pda.mps.service.BakingService;
import org.nl.wms.sch.tasks.InCoolIvtTask;
import org.nl.wms.sch.tasks.InHotTask;
import org.nl.wms.sch.tasks.OutHotTask;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
@Slf4j
public class BakingServiceImpl implements BakingService {
/*
* 业务流程:
* 入烤箱:
* 1.首先需要找到无任务的暂存位 并创建两条任务
* 2。下发冷却区 --> 烘烤区的任务 等待反馈完成
* 3.插入烤箱区出入主表和明细表
* 出烤箱:
* 1.烤箱时间到后 查找无任务的暂存位 并创建2条任务
* 2.1下发烤箱区 --> 暂存位 的任务
* 2.2插入烤箱区出入明细表
* 3.查找对应冷却区空位
* 4.在下发暂存位 --> 冷却区的任务
* 问题:
* 1.第二条任务出现异常后 如何再次触发
*/
@Override
@Transactional
public JSONObject ovenInAndOut(JSONObject whereJson) {
String option = whereJson.getString("option"); // 1-入箱 2-出箱
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject coolIvtTab = WQLObject.getWQLObject("ST_IVT_CoolPointIvt"); // 冷却区点位库存表
WQLObject hosIvtTab = WQLObject.getWQLObject("ST_IVT_HotPointIvt"); // 烤箱区点位库存表
WQLObject hosReMstTab = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst"); // 烤箱区出入主表
WQLObject coolTab = WQLObject.getWQLObject("ST_IVT_CoolRegionIO"); // 冷却区出入表
WQLObject rawTab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); // 生箔工单表
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表
if (StrUtil.equals(option, "1")) {
// 入箱
String container_name = whereJson.getString("container_name"); // 母卷号
String temperature = whereJson.getString("temperature"); // 温度
String hours = whereJson.getString("hours"); // 时间
String point_code1 = whereJson.getString("point_code"); // 点位
if (ObjectUtil.isEmpty(container_name)) throw new BadRequestException("母卷号不能为空");
if (ObjectUtil.isEmpty(temperature)) throw new BadRequestException("温度不能为空");
if (ObjectUtil.isEmpty(hours)) throw new BadRequestException("时间不能为空");
if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("点位不能为空");
/*
* 根据点位判断是 冷却区入烘箱还是暂存区入烘箱
*/
JSONObject jsonPointZc = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonPointZc)) {
/*
* 暂存区入烘箱
*/
// 1.查询烘箱对应的空位
JSONObject jsonMap = new JSONObject();
jsonMap.put("flag", "1");
jsonMap.put("product_area",jsonPointZc.getString("product_area"));
jsonMap.put("temperature",temperature);
jsonMap.put("point_location",jsonPointZc.getString("point_location"));
JSONObject jsonHotIvt = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().uniqueResult(0);
if (ObjectUtil.isEmpty(jsonHotIvt)) throw new BadRequestException("烘烤区没有对应空位");
// 2.创建暂存位 --> 烘烤区任务
JSONObject param = new JSONObject();
param.put("type", "2"); // 1- 冷却区入烘箱 2- 暂存位入烘箱
param.put("point_code1", point_code1);
param.put("point_code2", jsonHotIvt.getString("point_code"));
InHotTask inHotTask = new InHotTask();
String task_id = inHotTask.createTask(param);
// 3.插入主表
JSONObject jsonRaw = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0);
JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0);
JSONObject hotParam = new JSONObject();
hotParam.put("container_name", container_name);
hotParam.put("workorder_id", jsonRaw.getString("workorder_id"));
hotParam.put("material_id", jsonMater.getString("material_id"));
hotParam.put("qty", jsonRaw.get("productin_qty"));
hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id"));
hotParam.put("task_id", task_id);
hotParam.put("start_point_code", point_code1);
hotParam.put("next_point_code", jsonHotIvt.getString("point_code"));
hotParam.put("temperature", temperature);
hotParam.put("oven_time", hours);
this.createHotIoMst(hotParam);
} else {
/*
* 冷却区入烘箱
*/
// 1.根据冷却区此母卷的点位找到对应的暂存区、找到空位
// JSONObject jsonCoolIvt = coolIvtTab.query("container_name ='" + container_name + "' and is_used = '1' and full_point_status = '02' and cool_ivt_status = '01'").uniqueResult(0);
JSONObject jsonCoolIvt = coolIvtTab.query("full_point_code = '" + point_code1 + "'and container_name = '" + container_name + "' and is_used = '1' and full_point_status = '02' and cool_ivt_status = '01'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonCoolIvt)) throw new BadRequestException("点位不存在或母卷不存在");
String product_area = jsonCoolIvt.getString("product_area"); // 生产区域
String point_location = jsonCoolIvt.getString("point_location"); // 位置
String reging_id = "";
switch (product_area) {
case "A1":
reging_id = RegionTypeEnum.A_HKZC.getId();
break;
case "A2":
reging_id = RegionTypeEnum.B_HKZC.getId();
break;
case "A3":
reging_id = RegionTypeEnum.C_HKZC.getId();
break;
case "A4":
reging_id = RegionTypeEnum.D_HKZC.getId();
break;
}
JSONObject map = new JSONObject();
map.put("flag", "1");
map.put("reging_id", reging_id);
map.put("point_location", point_location);
JSONArray pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().getResultJSONArray(0);
if (ObjectUtil.isEmpty(pointArr)) {
if (StrUtil.equals(point_location, "0")) map.put("point_location", "1");
if (StrUtil.equals(point_location, "1")) map.put("point_location", "0");
pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().getResultJSONArray(0);
if (ObjectUtil.isEmpty(pointArr)) throw new BadRequestException("没有空暂存位");
}
// 2.判断暂存位是否有任务:找到无任务的暂存位 、查询烘箱对应的空位
String point_code2 = "";
for (int i = 0; i < pointArr.size(); i++) {
JSONObject jsonPoint = pointArr.getJSONObject(i);
String point_code = jsonPoint.getString("point_code");
JSONObject json_point_code1 = taskTab.query("point_code1 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
JSONObject json_point_code2 = taskTab.query("point_code2 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
JSONObject json_point_code3 = taskTab.query("point_code3 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
JSONObject json_point_code4 = taskTab.query("point_code4 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(json_point_code1) && ObjectUtil.isEmpty(json_point_code2) && ObjectUtil.isEmpty(json_point_code3) && ObjectUtil.isEmpty(json_point_code4)) {
point_code2 = point_code;
break;
}
}
if (ObjectUtil.isEmpty(point_code2)) throw new BadRequestException("没有空暂存位");
// 查询烘箱对应的空位
JSONObject jsonMap = new JSONObject();
jsonMap.put("flag", "1");
jsonMap.put("product_area",product_area);
jsonMap.put("temperature",temperature);
jsonMap.put("point_location",map.getString("point_location"));
JSONObject jsonHotIvt = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().uniqueResult(0);
if (ObjectUtil.isEmpty(jsonHotIvt)) throw new BadRequestException("烘烤区没有对应空位");
// 3.创建冷却区 --> 烘烤区任务
JSONObject param = new JSONObject();
param.put("type", "1"); // 1- 冷却区入烘箱 2- 暂存位入烘箱
param.put("point_code1", point_code1);
param.put("point_code2", point_code2);
param.put("point_code3", jsonHotIvt.getString("point_code"));
// 创建冷却区 --> 暂存位的任务
InHotTask inHotTask = new InHotTask();
String task_id = inHotTask.createTask(param);
// 4.插入烘箱区出入主表
JSONObject jsonRaw = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0);
JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonMater)) throw new BadRequestException("物料不存在");
JSONObject hotParam = new JSONObject();
hotParam.put("container_name", container_name);
hotParam.put("workorder_id", jsonRaw.getString("workorder_id"));
hotParam.put("material_id", jsonMater.getString("material_id"));
hotParam.put("qty", jsonRaw.get("productin_qty"));
hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id"));
hotParam.put("task_id", task_id);
hotParam.put("start_point_code", point_code1);
hotParam.put("next_point_code", jsonHotIvt.getString("point_code"));
hotParam.put("temperature", temperature);
hotParam.put("oven_time", hours);
this.createHotIoMst(hotParam);
// 生成冷却区出入表
Long currentUserId = 2L;
String currentUsername = "mes用户";
JSONObject jsonCool = new JSONObject();
jsonCool.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId());
jsonCool.put("bill_code", CodeUtil.getNewCode("COOLREGION_BILL_CODE"));
jsonCool.put("io_type", "1");
jsonCool.put("material_id", jsonMater.getString("material_id"));
jsonCool.put("pcsn", container_name);
jsonCool.put("bill_status", "10");
jsonCool.put("task_id", task_id);
jsonCool.put("qty_unit_id", jsonMater.getString("base_unit_id"));
jsonCool.put("start_point_code", point_code1);
jsonCool.put("end_point_code", jsonHotIvt.getString("point_code"));
jsonCool.put("create_mode", "03");
jsonCool.put("create_id", currentUserId);
jsonCool.put("create_name", currentUsername);
jsonCool.put("create_time", DateUtil.now());
jsonCool.put("update_optid", currentUserId);
jsonCool.put("update_optname", currentUsername);
jsonCool.put("update_time", DateUtil.now());
jsonCool.put("confirm_optid", currentUserId);
jsonCool.put("confirm_optname", currentUsername);
jsonCool.put("confirm_time", DateUtil.now());
coolTab.insert(jsonCool);
}
} else if (StrUtil.equals(option, "2")) {
// 出箱
String point_code1 = whereJson.getString("point_code");
if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("出箱点位不能为空");
JSONObject jsonHotIvt = hosIvtTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonHotIvt)) throw new BadRequestException("点位不存在");
// 1.查询暂存位有没有空位
String product_area = jsonHotIvt.getString("product_area");
String reging_id = "";
switch (product_area) {
case "A1":
reging_id = RegionTypeEnum.A_HKZC.getId();
break;
case "A2":
reging_id = RegionTypeEnum.B_HKZC.getId();
break;
case "A3":
reging_id = RegionTypeEnum.C_HKZC.getId();
break;
case "A4":
reging_id = RegionTypeEnum.D_HKZC.getId();
break;
}
JSONObject map = new JSONObject();
map.put("flag", "1");
map.put("reging_id", reging_id);
map.put("point_location", jsonHotIvt.getString("point_location"));
JSONArray pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().getResultJSONArray(0);
if (ObjectUtil.isEmpty(pointArr)) throw new BadRequestException("没有空暂存位");
// 2.判断暂存位是否有任务:找到无任务的暂存位
String point_code2 = "";
for (int i = 0; i < pointArr.size(); i++) {
JSONObject jsonPoint = pointArr.getJSONObject(i);
String point_code = jsonPoint.getString("point_code");
JSONObject json_point_code1 = taskTab.query("point_code1 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
JSONObject json_point_code2 = taskTab.query("point_code2 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
JSONObject json_point_code3 = taskTab.query("point_code3 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
JSONObject json_point_code4 = taskTab.query("point_code4 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(json_point_code1) && ObjectUtil.isEmpty(json_point_code2) && ObjectUtil.isEmpty(json_point_code3) && ObjectUtil.isEmpty(json_point_code4)) {
point_code2 = point_code;
break;
}
}
if (ObjectUtil.isEmpty(point_code2)) throw new BadRequestException("没有空暂存位");
// 3.创建任务
JSONObject param = new JSONObject();
param.put("point_code1", point_code1);
param.put("point_code2", point_code2);
param.put("material_code", jsonHotIvt.getString("container_name"));
OutHotTask outHotTask = new OutHotTask();
String task_id = outHotTask.createTask(param);
// 4.插入烘箱区出入明细表
JSONObject jsonHotReMst = hosReMstTab.query("container_name = '" + jsonHotIvt.getString("container_name") + "' and bill_status <> '50' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonHotReMst)) throw new BadRequestException("烘箱区出入主表不存在");
// 创建明细
JSONObject hotParam = new JSONObject();
hotParam.put("task_id", task_id);
hotParam.put("iostorinv_id", jsonHotReMst.getString("iostorinv_id"));
hotParam.put("start_point_code", point_code1);
hotParam.put("next_point_code", point_code2);
hotParam.put("temperature", jsonHotIvt.getString("temperature"));
this.createHotDtl(hotParam);
}
JSONObject result = new JSONObject();
result.put("message", "操作成功!");
return result;
}
@Override
@Transactional
public JSONObject inCoolIvt(JSONObject whereJson) {
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位点
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject hotMstTab = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst"); // 烘箱出入主表
WQLObject coolTab = WQLObject.getWQLObject("ST_IVT_CoolRegionIO"); // 冷却区出入表
WQLObject rawTab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); // 生箔工单表
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表
String point_code1 = whereJson.getString("point_code"); // 暂存位:起点
String container_name = whereJson.getString("container_name"); // 母卷号
if (ObjectUtil.isEmpty(point_code1)) throw new BadRequestException("点位不能为空");
if (ObjectUtil.isEmpty(container_name)) throw new BadRequestException("母卷号不能为空");
// 1.获取此暂存位的生产区域和上下位置
JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("点位不存在");
// 2.找冷却区空货位
JSONObject map = new JSONObject();
map.put("flag", "2");
map.put("product_area", jsonPoint.getString("product_area"));
map.put("point_location", jsonPoint.getString("point_location"));
JSONObject jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0);
// 如果为空
if (ObjectUtil.isEmpty(jsonCooIvt)) {
if (StrUtil.equals(jsonPoint.getString("point_location"), "0")) map.put("point_location", "1");
if (StrUtil.equals(jsonPoint.getString("point_location"), "1")) map.put("point_location", "0");
jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0);
}
if (ObjectUtil.isEmpty(jsonCooIvt)) throw new BadRequestException("冷却区空位不足");
// 3.创建任务
JSONObject param = new JSONObject();
param.put("point_code1", point_code1);
param.put("point_code2", jsonCooIvt.getString("full_point_code"));
param.put("container_name", container_name);
InCoolIvtTask inCoolIvtTask = new InCoolIvtTask();
String task_id = inCoolIvtTask.createTask(param);
// 4.插入明细
JSONObject jsonHotMst = hotMstTab.query("container_name = '" + container_name + "' and is_delete = '0' and bill_status <> '50'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonHotMst)) throw new BadRequestException("烘烤区出入主表不存在");
JSONObject hotParam = new JSONObject();
hotParam.put("task_id", task_id);
hotParam.put("iostorinv_id", jsonHotMst.getString("iostorinv_id"));
hotParam.put("start_point_code", point_code1);
hotParam.put("next_point_code", jsonCooIvt.getString("full_point_code"));
this.createHotDtl(hotParam);
// 生成冷却区出入表
Long currentUserId = 2L;
String currentUsername = "mes用户";
JSONObject jsonRaw = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0);
JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonMater)) throw new BadRequestException("物料不存在");
JSONObject jsonCool = new JSONObject();
jsonCool.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId());
jsonCool.put("bill_code", CodeUtil.getNewCode("COOLREGION_BILL_CODE"));
jsonCool.put("io_type", "0");
jsonCool.put("material_id", jsonMater.getString("material_id"));
jsonCool.put("pcsn", container_name);
jsonCool.put("bill_status", "10");
jsonCool.put("qty_unit_id", jsonMater.get("base_unit_id"));
jsonCool.put("task_id", task_id);
jsonCool.put("start_point_code", point_code1);
jsonCool.put("end_point_code", jsonCooIvt.getString("full_point_code"));
jsonCool.put("create_mode", "03");
jsonCool.put("create_id", currentUserId);
jsonCool.put("create_name", currentUsername);
jsonCool.put("create_time", DateUtil.now());
jsonCool.put("update_optid", currentUserId);
jsonCool.put("update_optname", currentUsername);
jsonCool.put("update_time", DateUtil.now());
jsonCool.put("confirm_optid", currentUserId);
jsonCool.put("confirm_optname", currentUsername);
jsonCool.put("confirm_time", DateUtil.now());
coolTab.insert(jsonCool);
JSONObject result = new JSONObject();
result.put("message", "操作成功!");
return result;
}
@Transactional
public String createHotIoMst(JSONObject param) {
/*
* 创建烘箱区出入主表
*/
WQLObject hotMstTab = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst"); // 烘箱区出入主表
JSONObject jsonHotMst = new JSONObject();
jsonHotMst.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId());
jsonHotMst.put("bill_code", CodeUtil.getNewCode("HOT_BILL_CODE"));
jsonHotMst.put("container_name", param.getString("container_name"));
jsonHotMst.put("workorder_id", param.getString("workorder_id"));
jsonHotMst.put("material_id", param.get("material_id"));
jsonHotMst.put("qty", param.getString("qty"));
jsonHotMst.put("bill_status", "50");
jsonHotMst.put("qty_unit_id", param.getString("qty_unit_id"));
jsonHotMst.put("start_point_code", param.getString("start_point_code"));
jsonHotMst.put("end_point_code", param.getString("end_point_code"));
jsonHotMst.put("create_mode", "03");
jsonHotMst.put("task_id", param.getString("task_id"));
jsonHotMst.put("task_type", param.getString("task_type"));
jsonHotMst.put("temperature", param.getString("temperature"));
jsonHotMst.put("oven_time", param.getString("oven_time"));
jsonHotMst.put("create_id", 2);
jsonHotMst.put("create_name", "mes用户");
jsonHotMst.put("create_time", DateUtil.now());
jsonHotMst.put("confirm_optid", 2);
jsonHotMst.put("confirm_optname", "mes用户");
jsonHotMst.put("confirm_time", DateUtil.now());
hotMstTab.insert(jsonHotMst);
return jsonHotMst.getString("iostorinv_id");
}
@Transactional
public void createHotDtl(JSONObject param) {
/*
* 创建烘箱区出入明细表
*/
WQLObject hotDtlTab = WQLObject.getWQLObject("ST_IVT_HotRegionIODtl"); // 烘箱区出入明细表
JSONObject jsonHotDtl = new JSONObject();
jsonHotDtl.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId());
jsonHotDtl.put("bill_code", "");
jsonHotDtl.put("start_point_code", param.getString("start_point_code"));
jsonHotDtl.put("next_point_code", param.getString("next_point_code"));
jsonHotDtl.put("temperature", param.getString("temperature"));
jsonHotDtl.put("oven_time", param.getString("oven_time"));
jsonHotDtl.put("task_type", "1");
jsonHotDtl.put("task_id", param.getString("task_id"));
jsonHotDtl.put("create_id", 2);
jsonHotDtl.put("create_name", "mes用户");
jsonHotDtl.put("create_time", DateUtil.now());
jsonHotDtl.put("dtl_status", "10");
hotDtlTab.insert(jsonHotDtl);
}
}

View File

@@ -448,7 +448,7 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
HashMap<String, String> map = rows.get(0);
//判断该载具是否已经分配货位或者起点
JSONArray now_dis_rows = WQLObject.getWQLObject("st_ivt_iostorinvdis").query("box_no = '" + map.get("box_no") + "' AND work_status < '99' AND (struct_id <> '' AND struct_id is not null)").getResultJSONArray(0);
JSONArray now_dis_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag","17").addParam("box_no",map.get("box_no")).process().getResultJSONArray(0);
if (now_dis_rows.size() > 0) {
throw new BadRequestException("该木箱已经分配过货位,无法继续分配!");
}

View File

@@ -22,6 +22,7 @@
输入.stor_id TYPEAS s_string
输入.bill_status TYPEAS s_string
输入.bill_type TYPEAS s_string
输入.box_no TYPEAS s_string
输入.container_name TYPEAS s_string
输入.package_box_sn TYPEAS s_string
输入.iostorinv_id TYPEAS s_string
@@ -633,6 +634,23 @@
ENDQUERY
ENDIF
IF 输入.flag = "17"
QUERY
SELECT
*
FROM
st_ivt_iostorinvdis dis
LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id
WHERE
dis.box_no = 输入.box_no
AND work_status < '99'
AND ( struct_id <> '' AND struct_id IS NOT NULL )
AND mst.is_delete = '0'
AND mst.bill_status < '99'
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -79,6 +79,9 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
if (StrUtil.isNotEmpty(map.get("material_code"))) {
map.put("material_code", "%" + map.get("material_code") + "%");
}
if (StrUtil.isNotEmpty(map.get("vbeln"))) {
map.put("vbeln", "%" + map.get("vbeln") + "%");
}
//获取人员对应的仓库
UserStorServiceImpl userStorService = new UserStorServiceImpl();

View File

@@ -20,6 +20,7 @@
输入.username TYPEAS s_string
输入.create_mode TYPEAS s_string
输入.bill_type TYPEAS s_string
输入.vbeln TYPEAS s_string
输入.stor_id TYPEAS s_string
输入.iostorinv_id TYPEAS s_string
输入.buss_type TYPEAS s_string
@@ -71,14 +72,16 @@
IF 输入.flag = "1"
PAGEQUERY
SELECT
SELECT DISTINCT
ios.*,
cu.shd_dtl_num,
cu.cust_name,
dtl.vbeln,
cu.cust_simple_name
FROM
ST_IVT_IOStorInv ios
LEFT JOIN md_cs_customerbase cu ON ios.cust_code = cu.cust_code
LEFT JOIN st_ivt_iostorinvdtl dtl ON ios.iostorinv_id = dtl.iostorinv_id
WHERE
ios.io_type = '1'
and ios.is_delete='0'
@@ -92,6 +95,10 @@
ios.io_type = 输入.io_type
ENDOPTION
OPTION 输入.vbeln <> ""
dtl.vbeln like 输入.vbeln
ENDOPTION
OPTION 输入.bill_type <> ""
ios.bill_type = 输入.bill_type
ENDOPTION
@@ -574,7 +581,7 @@
st_ivt_iostorinvdis dis
LEFT JOIN md_me_materialbase mater ON dis.material_id = mater.material_id
LEFT JOIN sch_base_point point ON dis.point_id = point.point_id
INNER JOIN sch_base_task task ON dis.task_id = task.task_id
LEFT JOIN sch_base_task task ON dis.task_id = task.task_id
WHERE
1=1

View File

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.common.utils.dto.CurrentUser;
import org.nl.modules.system.service.impl.ParamServiceImpl;
@@ -19,9 +20,13 @@ import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl;
import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl;
import org.nl.wms.ext.sap.service.impl.LmsToSapServiceImpl;
import org.nl.wms.st.returns.service.InAndOutReturnService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
import java.util.ArrayList;
import java.util.HashMap;
@@ -34,6 +39,7 @@ import java.util.Map;
@RequiredArgsConstructor
@Slf4j
public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
private final TransactionTemplate transactionTemplate;
@Override
public Map<String, Object> pageQuery(Map whereJson, Pageable page) {
@@ -50,6 +56,8 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
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"));
map.put("is_writeoff", MapUtil.getStr(whereJson, "is_writeoff"));
map.put("vbeln", MapUtil.getStr(whereJson, "vbeln"));
if (!ObjectUtil.isEmpty(bill_code)) map.put("bill_code", "%" + bill_code + "%");
if (!ObjectUtil.isEmpty(material_search)) map.put("material_search", "%" + material_search + "%");
if (!ObjectUtil.isEmpty(box_no)) map.put("box_no", "%" + box_no + "%");
@@ -92,7 +100,6 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
String stor_id = jo_mst.getString("stor_id");
JSONObject stor_jo = WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").query("stor_id = '" + stor_id + "'").uniqueResult(0);
String lgort = stor_jo.getString("ext_id");
String is_virtualstore = stor_jo.getString("is_virtualstore");
String is_productstore = stor_jo.getString("is_productstore");
//生产入库
if (StrUtil.equals(bill_type, "0001")) {
@@ -107,6 +114,11 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
paramMesMst.put("PackageBoxSN", box_row.getString("box_no"));
paramMesMst.put("User", box_row.getString("confirm_optname"));
new LmsToMesServiceImpl().childRollFGInboundComplete(paramMesMst);
jo_mst.put("is_upload", "1");
jo_mst.put("upload_mes", "1");
jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId());
jo_mst.put("upload_time", DateUtil.now());
}
}
@@ -139,6 +151,12 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToMesServiceImpl().childRollFGOutboundComplete(paramMesMst);
jo_mst.put("upload_mes", "1");
if (jo_mst.getString("upload_sap").equals("1")) {
jo_mst.put("is_upload", "1");
}
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
// 调拨出库
@@ -170,6 +188,10 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToMesServiceImpl().childRollFGOutboundComplete(paramMesMst);
jo_mst.put("upload_mes", "1");
jo_mst.put("is_upload", "1");
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
// 改切出库
@@ -186,6 +208,11 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
mes_jo.put("package_box_sn", source_dtl.getString("box_no"));
mes_jo.put("warehouse", "3");
new LmsToMesServiceImpl().cutPlanMomRollDeliveryComplete(mes_jo);
jo_mst.put("upload_mes", "1");
if (jo_mst.getString("upload_sap").equals("1")) {
jo_mst.put("is_upload", "1");
}
}
}
}
@@ -215,7 +242,6 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
String stor_id = jo_mst.getString("stor_id");
JSONObject stor_jo = WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").query("stor_id = '" + stor_id + "'").uniqueResult(0);
String lgort = stor_jo.getString("ext_id");
String is_virtualstore = stor_jo.getString("is_virtualstore");
String is_productstore = stor_jo.getString("is_productstore");
//退货入库
if (StrUtil.equals(bill_type, "0002")) {
@@ -276,6 +302,10 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToSapServiceImpl().returnDelivery(param);
jo_mst.put("upload_sap", "1");
jo_mst.put("is_upload", "1");
}
// 销售出库
@@ -339,6 +369,11 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToSapServiceImpl().returnDelivery(param);
jo_mst.put("upload_sap", "1");
if (jo_mst.getString("upload_mes").equals("1") || is_productstore.equals("0")) {
jo_mst.put("is_upload", "1");
}
}
// 改切出库
@@ -394,26 +429,18 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
System.out.println(paramMst.toString());
new LmsToSapServiceImpl().returnMoveDtl(paramMst);
jo_mst.put("upload_sap", "1");
if (jo_mst.getString("upload_mes").equals("1")) {
jo_mst.put("is_upload", "1");
}
}
}
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void disupload(JSONObject whereJson) {
//出库分配表
WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis");
//出库明细表
WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl");
//出库主表
WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv");
// 物料表
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase");
// 库区表
WQLObject sectTab = WQLObject.getWQLObject("st_ivt_sectattr");
// 子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
JSONArray rows = whereJson.getJSONArray("rows");
@@ -423,6 +450,7 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId());
jo_mst.put("upload_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
}
@@ -451,7 +479,6 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
String stor_id = jo_mst.getString("stor_id");
JSONObject stor_jo = WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").query("stor_id = '" + stor_id + "'").uniqueResult(0);
String lgort = stor_jo.getString("ext_id");
String is_virtualstore = stor_jo.getString("is_virtualstore");
String is_productstore = stor_jo.getString("is_productstore");
//生产入库
if (StrUtil.equals(bill_type, "0001")) {
@@ -465,7 +492,13 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
JSONObject paramMesMst = new JSONObject();
paramMesMst.put("PackageBoxSN", box_row.getString("box_no"));
paramMesMst.put("User", box_row.getString("confirm_optname"));
new LmsToMesServiceImpl().childRollFGInboundComplete(paramMesMst);
jo_mst.put("is_upload", "1");
jo_mst.put("upload_mes", "1");
jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId());
jo_mst.put("upload_time", DateUtil.now());
}
}
@@ -528,6 +561,12 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToSapServiceImpl().returnDelivery(param);
jo_mst.put("upload_sap", "1");
jo_mst.put("is_upload", "1");
jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId());
jo_mst.put("upload_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
// 销售出库
if (StrUtil.equals(bill_type, "1001")) {
@@ -591,8 +630,12 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToSapServiceImpl().returnDelivery(param);
jo_mst.put("upload_sap", "1");
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
// 2.回传mes
if (is_productstore.equals("1")){
if (is_productstore.equals("1")) {
JSONObject paramMesMst = new JSONObject();
String userName = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_USERNAME").getValue();
String passWord = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_PASSWORD").getValue();
@@ -619,6 +662,10 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToMesServiceImpl().childRollFGOutboundComplete(paramMesMst);
jo_mst.put("upload_mes", "1");
jo_mst.put("is_upload", "1");
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
}
@@ -656,6 +703,9 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToSapServiceImpl().returnMoveDtl(paramMst);
jo_mst.put("upload_sap", "1");
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
//调用母卷配送到位接口
JSONObject mes_jo = new JSONObject();
@@ -665,6 +715,10 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
mes_jo.put("package_box_sn", disArr.getJSONObject(0).getString("box_no"));
mes_jo.put("warehouse", "3");
new LmsToMesServiceImpl().cutPlanMomRollDeliveryComplete(mes_jo);
jo_mst.put("upload_mes", "1");
jo_mst.put("is_upload", "1");
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
// 调拨出库
@@ -696,12 +750,12 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService {
// 调用接口回传
new LmsToMesServiceImpl().childRollFGOutboundComplete(paramMesMst);
jo_mst.put("upload_mes", "1");
jo_mst.put("is_upload", "1");
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
jo_mst.put("is_upload", "1");
jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId());
jo_mst.put("upload_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst);
}
}

View File

@@ -22,6 +22,7 @@
输入.is_upload TYPEAS s_string
输入.begin_time TYPEAS s_string
输入.end_time TYPEAS s_string
输入.vbeln TYPEAS s_string
输入.bill_status TYPEAS s_string
输入.iostorinv_id TYPEAS s_string
输入.bill_code TYPEAS s_string
@@ -29,6 +30,7 @@
输入.io_type TYPEAS s_string
输入.material_type_id TYPEAS f_string
输入.iostorinv_id TYPEAS s_string
输入.is_writeoff TYPEAS s_string
输入.ids TYPEAS f_string
输入.box_no TYPEAS s_string
输入.in_stor_id TYPEAS f_string
@@ -61,6 +63,7 @@
SELECT DISTINCT
mst.*,
dtl.source_bill_type,
dtl.vbeln,
user.nick_name AS upload_name
FROM
st_ivt_iostorinv mst
@@ -80,6 +83,10 @@
dtl.pcsn = 输入.pcsn
ENDOPTION
OPTION 输入.is_writeoff <> ""
mst.is_writeoff = 输入.is_writeoff
ENDOPTION
OPTION 输入.bill_status <> ""
mst.bill_status = 输入.bill_status
ENDOPTION
@@ -114,6 +121,9 @@
OPTION 输入.end_time <> ""
mst.input_time <= 输入.end_time
ENDOPTION
OPTION 输入.vbeln <> ""
dtl.vbeln = 输入.vbeln
ENDOPTION
OPTION 输入.material_search <> ""
(
mb.material_code like 输入.material_search