add:增加成品出库功能

This commit is contained in:
2023-04-03 17:17:36 +08:00
parent 8eb790a3de
commit 8a7730e59f
14 changed files with 4605 additions and 1 deletions

View File

@@ -112,7 +112,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
TaskDto taskDto = taskService.findById(task_id);
String processing_class = taskDto.getHandle_class();
//1:执行中,2:完成 ,3:acs取消
String acs_task_status = row.getString("status");
String acs_task_status = row.getString("task_status");
String message = "";
String status = "";
if ("1".equals(acs_task_status)) {

View File

@@ -0,0 +1,121 @@
package org.nl.wms.sch.tasks;
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.JSONObject;
import lombok.RequiredArgsConstructor;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.st.out.service.impl.ProductOutServiceImpl;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* Created by Lxy on 2021/12/22.
*/
@Component
@RequiredArgsConstructor
public class ProductOutTask extends AbstractAcsTask {
private final String THIS_CLASS = ProductOutTask.class.getName();
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配表
String task_id = taskObj.getString("task_id");
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '7'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonTask)) {
if (StrUtil.equals(status, "3")) {
// 任务为下发之后就不允许取消
if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.START_AND_POINT.getCode())) {
throw new BadRequestException("任务:"+jsonTask.getString("task_code")+"已下发,不可取消");
}
// 更新删除字段
jsonTask.put("is_delete","1");
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
// 更新分配明细为:未生成
JSONObject map = new JSONObject();
map.put("work_status", "00");
map.put("point_id", "");
disTab.update(map,"task_id = '"+task_id+"'");
}
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
}
if (StrUtil.equals(status, "2")) {
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
// 调用标识完成
ProductOutServiceImpl productOutService = SpringContextHolder.getBean(ProductOutServiceImpl.class);
productOutService.finishTask(jsonTask);
// 更改任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("update_optid", currentUserId);
jsonTask.put("update_optname", currentUsername);
jsonTask.put("update_time", DateUtil.now());
taskTab.update(jsonTask);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
String currentUserId = SecurityUtils.getCurrentUserId();
String currentUsername = SecurityUtils.getCurrentUsername();
JSONObject json = new JSONObject();
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
json.put("task_code", IdUtil.getSnowflake(1,1).nextId());
json.put("product_area", form.getString("product_area"));
json.put("task_type", form.getString("task_type"));
json.put("is_send", "1");
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
json.put("point_code1", form.getString("point_code1"));
json.put("point_code2", form.getString("point_code2"));
json.put("vehicle_code", form.getString("vehicle_code"));
json.put("handle_class", THIS_CLASS);
json.put("create_id", currentUserId);
json.put("create_name", currentUsername);
json.put("create_time", DateUtil.now());
json.put("update_id", currentUserId);
json.put("update_name", currentUsername);
json.put("update_time", DateUtil.now());
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
return json.getString("task_id");
}
@Override
public void cancel(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, "0");
}
@Override
public void pointConfirm(JSONObject param) {
}
}

View File

@@ -0,0 +1,164 @@
package org.nl.wms.st.out.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.common.anno.Log;
import org.nl.wms.st.out.service.ProductOutService;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
@RestController
@RequiredArgsConstructor
@Api(tags = "成品出库")
@RequestMapping("/api/productOut")
@Slf4j
public class ProductOutController {
private final ProductOutService productOutService;
@GetMapping
@Log("查询出库单")
@ApiOperation("查询出库单")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){
return new ResponseEntity<>(productOutService.pageQuery(whereJson,page), HttpStatus.OK);
}
@GetMapping("/addDtl")
@Log("查询库存")
@ApiOperation("查询库存")
public ResponseEntity<Object> queryAddDtl(@RequestParam Map whereJson, Pageable page){
return new ResponseEntity<>(productOutService.queryAddDtl(whereJson,page), HttpStatus.OK);
}
@GetMapping("/queryDtl")
@Log("查询明细")
@ApiOperation("查询明细")
public ResponseEntity<Object> queryDtl(@RequestParam Map whereJson, Pageable page){
return new ResponseEntity<>(productOutService.queryDtl(whereJson,page), HttpStatus.OK);
}
@PostMapping("/getOutBillDtl")
@Log("查询分配明细")
@ApiOperation("查询分配明细")
public ResponseEntity<Object> getOutBillDtl(@RequestBody JSONObject whereJson){
return new ResponseEntity<>(productOutService.getOutBillDtl(whereJson), HttpStatus.OK);
}
@Log("删除出库单")
@ApiOperation("删除出库单")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
productOutService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@PutMapping
@Log("修改出库单")
@ApiOperation("修改出库单")
public ResponseEntity<Object> update(@RequestBody JSONObject whereJson){
productOutService.update(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping()
@Log("新增出库单")
@ApiOperation("新增出库单")
public ResponseEntity<Object> insertDtl(@RequestBody JSONObject whereJson){
productOutService.insertDtl(whereJson);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PostMapping("/allDiv")
@Log("出库单全部分配")
@ApiOperation("出库单全部分配")
public ResponseEntity<Object> allDiv(@RequestBody JSONObject whereJson) {
productOutService.allDiv(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/allDivOne")
@Log("分配一条出库明细")
@ApiOperation("分配一条出库明细")
public ResponseEntity<Object> allDivOne(@RequestBody JSONObject whereJson) {
productOutService.allDivOne(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/allCancel")
@Log("出库单全部取消")
@ApiOperation("出库单全部取消")
public ResponseEntity<Object> allCancel(@RequestBody JSONObject whereJson) {
productOutService.allCancel(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/oneCancel")
@Log("出库单全部取消")
@ApiOperation("出库单全部取消")
public ResponseEntity<Object> oneCancel(@RequestBody JSONObject whereJson) {
productOutService.oneCancel(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/getOutBillDis")
@Log("查询出库单分配明细")
@ApiOperation("查询出库单分配明细")
public ResponseEntity<Object> getOutBillDis(@RequestBody JSONObject whereJson){
return new ResponseEntity<>(productOutService.getOutBillDis(whereJson), HttpStatus.OK);
}
@PostMapping("/allSetPoint")
@Log("设置全部站点")
@ApiOperation("设置全部站点")
public ResponseEntity<Object> allSetPoint(@RequestBody JSONObject whereJson) {
productOutService.allSetPoint(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/manualDiv")
@Log("出库单手动分配")
@ApiOperation("出库单手动分配")
public ResponseEntity<Object> manualDiv(@RequestBody JSONObject whereJson) {
productOutService.manualDiv(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/confirm")
@Log("出库单强制确认")
@ApiOperation("出库单强制确认")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
productOutService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/finishTask")
@Log("出库任务手动完成")
@ApiOperation("出库任务手动完成")
public ResponseEntity<Object> finishTask(@RequestBody JSONObject whereJson) {
productOutService.finishTask(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@PostMapping("/backConfirm")
@Log("出库单强制确认")
@ApiOperation("出库单强制确认")
public ResponseEntity<Object> backConfirm(@RequestBody JSONObject whereJson) {
productOutService.backConfirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("下载发货单Excel")
@ApiOperation("下载发货单Excel")
@GetMapping(value = "/downloadExcel")
public ResponseEntity<Object> downloadExcel(HttpServletResponse response, @RequestParam Map whereJson) throws IOException {
productOutService.downloadExcel(response,whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -0,0 +1,121 @@
package org.nl.wms.st.out.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
public interface ProductOutService {
/**
* 查询数据分页
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> pageQuery(Map whereJson, Pageable page);
/**
* 查询库存数据
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> queryAddDtl(Map whereJson, Pageable page);
/**
* 查询明细
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> queryDtl(Map whereJson, Pageable page);
/**
* 多选删除
* @param ids /
*/
void deleteAll(Long[] ids);
/**
* 新增出库单
* @param whereJson
* 参数举例:
* {bill_code=, stor_id=1473161852946092032, stor_code=01, stor_name=原材料库, bill_status=10, total_qty=2, detail_count=1, bill_type=010201, remark=, biz_date=2022-01-08, create_mode=, tableData=[{material_id=1309, material_code=090301010001, bill_status=10, material_name=碳化钨粉 02, pcsn=, quality_scode=02, ivt_level=01, is_active=1, plan_qty=2, qty_unit_name=千克\公斤, qty_unit_id=1, remark=, edit=true}]}
* /
*/
String insertDtl (JSONObject whereJson);
/**
* 查询出库单明细
* @param whereJson /
* @return JSONArray
*/
JSONArray getOutBillDtl(JSONObject whereJson);
/**
* 查询出库单分配明细
* @param whereJson /
* @return
*/
JSONArray getOutBillDis(JSONObject whereJson);
/**
* 修改出库单
* @param whereJson /
*/
void update(JSONObject whereJson);
/**
* 全部分配,对同一出库单明细进行分配
* @param whereJson /
*/
void allDiv(JSONObject whereJson);
/**
* 分配一条出库明细
* @param whereJson /
*/
void allDivOne(JSONObject whereJson);
/**
* 全部取消
* @param whereJson /
*/
void allCancel(JSONObject whereJson);
/**
* 取消一个
* @param whereJson /
*/
void oneCancel(JSONObject whereJson);
/**
* 设置全部站点
* @param whereJson /
*/
void allSetPoint(JSONObject whereJson);
/**
* 出库单手动分配
* @param whereJson /
*/
void manualDiv(JSONObject whereJson);
/**
* 出库单强制确认
* @param whereJson /
*/
void confirm(JSONObject whereJson);
/**
* 出库任务手动完成
* @param whereJson /
*/
void finishTask(JSONObject whereJson);
/**
* 出库单强制确认
* @param whereJson /
*/
void backConfirm(JSONObject whereJson);
/**
* 下载发货单Excel
* @param whereJson /
*/
void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException;
}

View File

@@ -0,0 +1,296 @@
[交易说明]
交易名: 成品出库分配逻辑
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.iostorinv_id TYPEAS s_string
输入.iostorinvdtl_id TYPEAS s_string
输入.iostorinvdis_id TYPEAS s_string
输入.task_id TYPEAS s_string
输入.bill_status TYPEAS s_string
输入.unassign_flag TYPEAS s_string
输入.material_id TYPEAS s_string
输入.pcsn TYPEAS s_string
输入.region_code TYPEAS s_string
输入.product_area TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
QUERY
SELECT
iosdtl.*,
ios.bill_code,
mb.material_code,
mb.material_name,
mb.material_spec,
mb.material_model
FROM
ST_IVT_IOStorInvDtl iosdtl
LEFT JOIN md_me_materialbase mb ON mb.material_id = iosdtl.material_id
LEFT JOIN ST_IVT_IOStorInv ios ON ios.iostorinv_id = iosdtl.iostorinv_id
WHERE
1=1
OPTION 输入.iostorinv_id <> ""
iosdtl.iostorinv_id = 输入.iostorinv_id
ENDOPTION
OPTION 输入.iostorinvdtl_id <> ""
iosdtl.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
OPTION 输入.bill_status <> ""
iosdtl.bill_status <= 输入.bill_status
ENDOPTION
OPTION 输入.unassign_flag <> ""
iosdtl.unassign_qty >0
ENDOPTION
order by iosdtl.pcsn
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
ivt.*,
region.region_code,
region.region_name,
point.vehicle_code,
mater.material_code,
mater.material_name,
mater.material_spec,
mater.material_model
FROM
st_ivt_structivt ivt
LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id
LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id
LEFT JOIN sch_base_region region ON region.region_code = point.region_code
WHERE
1=1
OPTION 输入.material_id <> ""
ivt.material_id = 输入.material_id
ENDOPTION
OPTION 输入.pcsn <> ""
ivt.pcsn = 输入.pcsn
ENDOPTION
OPTION 输入.region_code <> ""
point.region_code = 输入.region_code
ENDOPTION
OPTION 输入.product_area <> ""
point.product_area = 输入.product_area
ENDOPTION
order by ivt.instorage_time DESC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
dis.*,
ios.io_type,
ios.bill_code,
mb.material_code,
mb.material_name,
task.task_code,
task.task_status,
task.task_type,
point2.point_code
FROM
ST_IVT_IOStorInvDis dis
LEFT JOIN ST_IVT_IOStorInv ios ON ios.iostorinv_id = dis.iostorinv_id
LEFT JOIN md_me_materialbase mb ON mb.material_id = dis.material_id
LEFT JOIN SCH_BASE_Task task ON task.task_id = dis.task_id AND task.is_delete = '0'
LEFT JOIN SCH_BASE_Point point2 ON point2.point_id = dis.point_id
WHERE
1=1
OPTION 输入.iostorinvdtl_id <> ""
dis.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
OPTION 输入.task_id <> ""
dis.task_id = 输入.task_id
ENDOPTION
OPTION 输入.iostorinv_id <> ""
dis.iostorinv_id = 输入.iostorinv_id
ENDOPTION
OPTION 输入.iostorinvdis_id <> ""
dis.iostorinvdis_id = 输入.iostorinvdis_id
ENDOPTION
OPTION 输入.bill_status <> ""
dis.work_status <= 输入.bill_status
ENDOPTION
order by dis.pcsn
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "4"
QUERY
SELECT
dis.iostorinvdis_id
FROM
ST_IVT_IOStorInvDis dis
WHERE
1 = 1
AND dis.work_status IN ('02', '99')
OPTION 输入.iostorinvdtl_id <> ""
dis.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
UNION
SELECT
dis.iostorinvdis_id
FROM
ST_IVT_IOStorInvDis dis
LEFT JOIN SCH_BASE_Task task ON dis.task_id = task.task_id AND task.is_delete = '0'
WHERE
1 = 1
AND dis.work_status = '01'
AND task.task_status IN ('5', '6', '7')
OPTION 输入.iostorinvdtl_id <> ""
dis.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "5"
QUERY
SELECT
dis.*
FROM
ST_IVT_IOStorInvDis dis
WHERE
dis.work_status = '00'
OPTION 输入.iostorinv_id <> ""
dis.iostorinv_id = 输入.iostorinv_id
ENDOPTION
OPTION 输入.iostorinvdtl_id <> ""
dis.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "6"
QUERY
SELECT
iosdtl.*,
ios.bill_code,
mb.material_code,
mb.material_name,
mb.material_spec,
mb.material_model
FROM
ST_IVT_IOStorInvDtl iosdtl
LEFT JOIN md_me_materialbase mb ON mb.material_id = iosdtl.material_id
LEFT JOIN ST_IVT_IOStorInv ios ON ios.iostorinv_id = iosdtl.iostorinv_id
WHERE
1=1
OPTION 输入.iostorinv_id <> ""
iosdtl.iostorinv_id = 输入.iostorinv_id
ENDOPTION
OPTION 输入.iostorinvdtl_id <> ""
iosdtl.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
OPTION 输入.bill_status <> ""
iosdtl.bill_status <= 输入.bill_status
ENDOPTION
OPTION 输入.unassign_flag <> ""
iosdtl.unassign_qty >0
ENDOPTION
order by iosdtl.pcsn
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "7"
QUERY
SELECT
dis.*,
mb.material_code,
mb.material_name,
mb.material_spec,
task.task_code,
task.task_status,
task.task_type,
point_code
FROM
st_ivt_iostorinvdis dis
LEFT JOIN md_me_materialbase mb ON mb.material_id = dis.material_id
LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dis.iostorinv_id
LEFT JOIN sch_base_task task ON task.task_id = dis.task_id AND task.is_delete = '0'
LEFT JOIN sch_base_point point ON point.point_id = dis.point_id
WHERE
mst.is_delete = '0'
OPTION 输入.iostorinv_id <> ""
dis.iostorinv_id = 输入.iostorinv_id
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -0,0 +1,191 @@
[交易说明]
交易名: 成品出库分页查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.product_area TYPEAS s_string
输入.pcsn TYPEAS s_string
输入.material_spec TYPEAS s_string
输入.material_code TYPEAS s_string
输入.begin_time TYPEAS s_string
输入.end_time TYPEAS s_string
输入.bill_status TYPEAS s_string
输入.bill_type TYPEAS s_string
输入.bill_code TYPEAS s_string
输入.iostorinvdtl_id TYPEAS s_string
输入.iostorinv_id TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
PAGEQUERY
SELECT
*
FROM
ST_IVT_IOStorInv
WHERE
io_type = '1'
AND is_delete = '0'
OPTION 输入.product_area <> ""
product_code = 输入.product_area
ENDOPTION
OPTION 输入.begin_time <> ""
input_time <= 输入.begin_time
ENDOPTION
OPTION 输入.end_time <> ""
input_time >= 输入.end_time
ENDOPTION
OPTION 输入.bill_status <> ""
bill_status = 输入.bill_status
ENDOPTION
OPTION 输入.bill_type <> ""
bill_type = 输入.bill_type
ENDOPTION
OPTION 输入.bill_code <> ""
bill_code LIKE 输入.bill_code
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
dtl.*,
mater.material_code,
mater.material_name,
mater.material_spec
FROM
ST_IVT_IOStorInvDtl dtl
LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dtl.iostorinv_id
LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id
WHERE
mst.io_type = '1'
AND mst.is_delete = '0'
OPTION 输入.bill_code <> ""
mst.bill_code = 输入.bill_code
ENDOPTION
OPTION 输入.iostorinv_id <> ""
mst.iostorinv_id = 输入.iostorinv_id
ENDOPTION
order by dtl.seq_no ASC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
dis.*,
mater.material_code,
mater.material_name,
mater.material_spec,
point.point_code,
LEFT(task.task_code,6) AS task_code
FROM
ST_IVT_IOStorInvDis dis
LEFT JOIN sch_base_point point ON point.point_id = dis.point_id
LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id
LEFT JOIN sch_base_task task ON task.task_id = dis.task_id AND task.is_delete = '0'
WHERE
1 = 1
OPTION 输入.iostorinvdtl_id <> ""
dis.iostorinvdtl_id = 输入.iostorinvdtl_id
ENDOPTION
order by dis.seq_no ASC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "4"
PAGEQUERY
SELECT
ivt.struct_id,
ivt.struct_code,
ivt.struct_name,
ivt.material_id,
ivt.quality_scode,
ivt.pcsn,
ivt.canuse_qty AS plan_qty,
ivt.qty_unit_id,
ivt.instorage_time,
mater.material_code,
mater.material_name,
mater.material_spec,
unit.unit_name AS qty_unit_name
FROM
st_ivt_structivt ivt
LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_id
LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id
WHERE
ivt.canuse_qty > 0
AND point.lock_type = '1'
AND IFNULL(point.vehicle_code,'') <> ''
OPTION 输入.product_area <> ""
point.product_area = 输入.product_area
ENDOPTION
OPTION 输入.material_spec <> ""
mater.material_spec LIKE 输入.material_spec
ENDOPTION
OPTION 输入.material_code <> ""
(mater.material_code LIKE 输入.material_code or
mater.material_code LIKE 输入.material_name)
ENDOPTION
OPTION 输入.pcsn <> ""
ivt.pcsn = 输入.pcsn
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF