add:二期出库
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
package org.nl.b_lms.sch.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
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 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.AcsTaskDto;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.st.inbill.service.CheckOutBillService;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Lxy on 2021/12/22.
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class TwoOutTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = TwoOutTask.class.getName();
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
/*
|
||||
* 下发给ACS时需要特殊处理
|
||||
*/
|
||||
//任务表
|
||||
WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
|
||||
JSONObject map = new JSONObject();
|
||||
map.put("flag", "1");
|
||||
map.put("handle_class", THIS_CLASS);
|
||||
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
|
||||
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JSONObject json = arr.getJSONObject(i);
|
||||
|
||||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
|
||||
AcsTaskDto dto = AcsTaskDto.builder()
|
||||
.ext_task_id(json.getString("task_id"))
|
||||
.task_code(json.getString("task_code"))
|
||||
.task_type(json.getString("acs_task_type"))
|
||||
.start_device_code(json.getString("point_code1"))
|
||||
.next_device_code(json.getString("point_code2"))
|
||||
.vehicle_code(json.getString("vehicle_code"))
|
||||
.priority(json.getString("priority"))
|
||||
.class_type(json.getString("task_type"))
|
||||
.dtl_type(String.valueOf(dtl_type))
|
||||
.remark(json.getString("remark"))
|
||||
.build();
|
||||
resultList.add(dto);
|
||||
|
||||
// 更新任务为下发
|
||||
JSONObject paramMap = new JSONObject();
|
||||
paramMap.put("task_status", TaskStatusEnum.ISSUE.getCode());
|
||||
wo_Task.update(paramMap, "task_id ='" + json.getString("task_id") + "'");
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
@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 < '07'").uniqueResult(0);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonTask)) {
|
||||
if (StrUtil.equals(status, "0")) {
|
||||
// 任务为执行之后就不允许取消
|
||||
if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.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, TaskStatusEnum.FINISHED.getCode())) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String currentUsername = SecurityUtils.getCurrentUsername();
|
||||
|
||||
// 判断此任务是否有任务组
|
||||
String task_group_id = jsonTask.getString("task_group_id");
|
||||
if (ObjectUtil.isNotEmpty(task_group_id)) {
|
||||
// 上一个任务组顺序号
|
||||
String sort_seq_last = NumberUtil.sub(jsonTask.getString("sort_seq"), "1").toString();
|
||||
}
|
||||
|
||||
// 调用标识完成
|
||||
CheckOutBillService checkOutBillService = SpringContextHolder.getBean(CheckOutBillService.class);
|
||||
checkOutBillService.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
|
||||
public void findStartPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findNextPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
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("task_type", form.getString("task_type"));
|
||||
json.put("vehicle_code", form.getString("vehicle_code"));
|
||||
json.put("task_name", form.getString("task_name"));
|
||||
json.put("point_code1", form.getString("point_code1"));
|
||||
json.put("point_code2", form.getString("point_code2"));
|
||||
json.put("material_id", form.getString("material_id"));
|
||||
json.put("task_group_id", form.getString("task_group_id"));
|
||||
json.put("sort_seq", form.getString("sort_seq"));
|
||||
|
||||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
json.put("handle_class", THIS_CLASS);
|
||||
json.put("create_id", currentUserId);
|
||||
json.put("create_name", currentUsername);
|
||||
json.put("create_time", DateUtil.now());
|
||||
json.put("acs_task_type", "7");
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
|
||||
|
||||
return json.getString("task_id");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void forceFinish(String task_id) {
|
||||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
|
||||
@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");
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,18 @@ public enum IOSEnum {
|
||||
"手工出库", "1009"
|
||||
)),
|
||||
|
||||
//移库单据类型
|
||||
MOVE_TYPE(MapOf.of("出库移库", "21")),
|
||||
|
||||
//移库单据装填
|
||||
MOVE_STATUS(MapOf.of("生成", "10","提交","20","执行中","30","完成","99")),
|
||||
|
||||
//出库单分配类型
|
||||
OUT_DIV_TYPE(MapOf.of("全部分配", "1","自动分配","2")),
|
||||
|
||||
//出库单取消分配类型
|
||||
OUT_CANCEL_TYPE(MapOf.of("全部取消", "1","自动取消","2","删除一个","3")),
|
||||
|
||||
//仓位锁定类型
|
||||
LOCK_TYPE(MapOf.of("未锁定", "1", "入库锁", "2", "出库锁", "3", "空托盘出库锁", "4",
|
||||
"空托盘入库锁", "5", "移出锁", "6", "移入锁", "7", "其它", "99"
|
||||
@@ -57,14 +69,20 @@ public enum IOSEnum {
|
||||
//仓位锁定类型
|
||||
LOCK_OPERATE(MapOf.of("入库锁定", "1","入库取消","2")),
|
||||
|
||||
//库存品质类型
|
||||
QUALITY_SCODE(MapOf.of("待检品", "00","合格品","01","不合格","02")),
|
||||
|
||||
//库区类型
|
||||
SECT_TYPE(MapOf.of("主存区", "00","暂存区","01","虚拟区","09")),
|
||||
|
||||
//库存变动类型
|
||||
IVT_CHANGE(MapOf.of("加待入", "31","加库存","33","减待入","32")),
|
||||
IVT_CHANGE(MapOf.of("加待入", "31","加库存","33","减待入","32","加冻结","11","减冻结","12","减库存","21")),
|
||||
|
||||
//仓位伸位
|
||||
ZDEPTH_STRUCT(MapOf.of("浅", "1","深","2","无","3")),
|
||||
|
||||
//外部系统
|
||||
EXT_SYSTEM(MapOf.of("mes", "mes","sap","sap","crm","crm")),
|
||||
;
|
||||
|
||||
private Map<String, String> code;
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -13,4 +17,106 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
|
||||
* @since 2023-11-10
|
||||
*/
|
||||
public interface IStIvtIostorinvOutService extends IService<StIvtIostorinv> {
|
||||
|
||||
/**
|
||||
* 新增出库单
|
||||
* @param whereJson {
|
||||
* biz_date: 业务日期
|
||||
* stor_code: 仓库编码
|
||||
* stor_id: 仓库标识
|
||||
* stor_name: 仓库名称
|
||||
* total_qty: 总数量
|
||||
* remark: 备注
|
||||
* bill_status: 单据状态
|
||||
* detail_count: 明细数
|
||||
* create_mode: 创建方式
|
||||
* bill_type: 业务类型
|
||||
* out_stor_id: 移出仓库标识
|
||||
* tableData[
|
||||
* {
|
||||
* qty_unit_id: 计量单位标识
|
||||
* qty_unit_name: 计量单位名称
|
||||
* plan_qty: 计划数量
|
||||
* canuse_qty: 可用数量
|
||||
* stockrecord_id: 库存记录标识
|
||||
* instorage_time: 入库时间
|
||||
* quality_scode: 品质类型
|
||||
* struct_id: 仓位标识
|
||||
* struct_name: 仓位名称
|
||||
* struct_code: 仓位编码
|
||||
* material_id: 物料标识
|
||||
* material_name: 物料名称
|
||||
* material_code: 物料编码
|
||||
* pcsn: 批次
|
||||
* box_no: 箱号
|
||||
* sap_pcsn: sap批次
|
||||
* 外部系统:
|
||||
* }
|
||||
* ]
|
||||
* }
|
||||
* @return iostorinv_id 主表标识
|
||||
*/
|
||||
String insertMst(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 出库单修改
|
||||
* @param whereJson: {
|
||||
* 参数桶入库新增
|
||||
* }
|
||||
*/
|
||||
void update(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 删除出库单
|
||||
* @param ids:[主表标识]
|
||||
*/
|
||||
void deleteAll(Long[] ids);
|
||||
|
||||
/**
|
||||
* 全部分配 || 自动分配
|
||||
* @param whereJson:{
|
||||
* 全部分配: 主表对象
|
||||
* 自动分配: 明细对象
|
||||
* }
|
||||
*/
|
||||
void allDiv(JSONObject whereJson);
|
||||
|
||||
|
||||
/**
|
||||
* 手工分配
|
||||
* @param whereJson:{
|
||||
* row:明细对象
|
||||
* ros:[库存对象]
|
||||
* }
|
||||
*/
|
||||
void manualDiv(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 取消分配:全部取消 || 自动取消 || 删除分配明细
|
||||
* @param whereJson : {
|
||||
* 全部取消:主表对象
|
||||
* 自动取消:明细对象
|
||||
* 删除分配明细:分配明细对象
|
||||
* }
|
||||
*/
|
||||
void cancelDiv(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 全部设置站点
|
||||
* @param whereJson {
|
||||
* iostorinv_id: 单据标识
|
||||
* bill_code:单据编码
|
||||
* checked:是否异常出库
|
||||
* point_code:终点编码
|
||||
* }
|
||||
*/
|
||||
void allSetPoint(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 出库强制确认
|
||||
* @param whereJson {
|
||||
* iostorinv_id: 主表标识
|
||||
* }
|
||||
*/
|
||||
void confirm(JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ public interface IStIvtIostorinvService extends IService<StIvtIostorinv> {
|
||||
void update(Map whereJson);
|
||||
|
||||
/**
|
||||
* 删除出库单
|
||||
* 删除入库单
|
||||
* @param ids:[主表标识]
|
||||
*/
|
||||
void deleteAll(Long[] ids);
|
||||
|
||||
@@ -19,7 +19,7 @@ import java.util.List;
|
||||
public interface IStIvtIostorinvdtlService extends IService<StIvtIostorinvdtl> {
|
||||
|
||||
/**
|
||||
* 新增出入库明细
|
||||
* 新增入库明细
|
||||
*
|
||||
* @param rows: {
|
||||
* package_box_sn:木箱号
|
||||
@@ -44,6 +44,31 @@ public interface IStIvtIostorinvdtlService extends IService<StIvtIostorinvdtl> {
|
||||
*/
|
||||
HashMap<String, ArrayList<JSONObject>> insertDtl(List<JSONObject> rows, Long iostorinv_id);
|
||||
|
||||
/**
|
||||
* 新增入出库明细
|
||||
*
|
||||
* @param rows: {
|
||||
* qty_unit_id: 计量单位标识
|
||||
* qty_unit_name: 计量单位名称
|
||||
* plan_qty: 计划数量
|
||||
* canuse_qty: 可用数量
|
||||
* stockrecord_id: 库存记录标识
|
||||
* instorage_time: 入库时间
|
||||
* quality_scode: 品质类型
|
||||
* struct_id: 仓位标识
|
||||
* struct_name: 仓位名称
|
||||
* struct_code: 仓位编码
|
||||
* material_id: 物料标识
|
||||
* material_name: 物料名称
|
||||
* material_code: 物料编码
|
||||
* pcsn: 批次
|
||||
* box_no: 箱号
|
||||
* sap_pcsn: sap批次
|
||||
* }
|
||||
* @param iostorinv_id: 主表标识
|
||||
*/
|
||||
void insertOutDtl(List<JSONObject> rows, Long iostorinv_id);
|
||||
|
||||
/**
|
||||
* 更新明细状态
|
||||
*
|
||||
|
||||
@@ -3,6 +3,10 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出入库单分配表 Mapper 接口
|
||||
@@ -13,4 +16,34 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
||||
*/
|
||||
public interface StIvtIostorinvdisMapper extends BaseMapper<StIvtIostorinvdis> {
|
||||
|
||||
/**
|
||||
* 获取全部已分配未下发的分配明细
|
||||
* @param whereJson :{
|
||||
* iostorinvdtl_id: 明细标识 (自动取消时传)
|
||||
* box_no: 箱号 (自动取消时传)
|
||||
* iostorinv_id: 单据标识
|
||||
* bill_status: 明细状态
|
||||
* is_issued: 是否已下发
|
||||
* }
|
||||
* @return List<JSONObject> 分配明细实体类集合
|
||||
*/
|
||||
List<JSONObject> getDivIosDisAll(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param list [明细标识]
|
||||
* @return List<JSONObject> 分配明细集合
|
||||
*/
|
||||
List<JSONObject> getDivTaskDis(List<String> list);
|
||||
|
||||
/**
|
||||
* 获取此单据下/此明细下 所有未生成的分配明细
|
||||
* @param whereJson :{
|
||||
* iostorinvdtl_id: 明细标识
|
||||
* iostorinv_id: 单据标识
|
||||
* }
|
||||
* @return List<JSONObject> 分配明细实体类集合
|
||||
*/
|
||||
List<JSONObject> getNotCreateDis(JSONObject whereJson);
|
||||
|
||||
}
|
||||
|
||||
@@ -2,4 +2,130 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper">
|
||||
|
||||
<select id="getDivIosDisAll" resultType="com.alibaba.fastjson.JSONObject">
|
||||
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,
|
||||
sub.sap_pcsn,
|
||||
attr.out_order_seq,
|
||||
attr.row_num,
|
||||
attr.col_num,
|
||||
attr.layer_num,
|
||||
attr.block_num,
|
||||
attr.placement_type,
|
||||
sub.sale_order_name,
|
||||
sub.width_standard,
|
||||
dis.plan_qty AS canuse_qty
|
||||
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
|
||||
LEFT JOIN st_ivt_structattr attr ON attr.struct_id = dis.struct_id
|
||||
LEFT JOIN pdm_bi_subpackagerelationrecord sub ON sub.container_name = dis.pcsn AND ios.bill_code = sub.bill_code
|
||||
WHERE
|
||||
1 = 1
|
||||
|
||||
<if test="iostorinvdtl_id != null and iostorinvdtl_id != ''">
|
||||
AND dis.iostorinvdtl_id= #{iostorinvdtl_id}
|
||||
</if>
|
||||
|
||||
<if test="task_id != null and task_id != ''">
|
||||
AND dis.task_id = #{task_id}
|
||||
</if>
|
||||
|
||||
<if test="iostorinv_id != null and iostorinv_id != ''">
|
||||
AND dis.iostorinv_id = #{iostorinv_id}
|
||||
</if>
|
||||
|
||||
<if test="iostorinvdis_id != null and iostorinvdis_id != ''">
|
||||
AND dis.iostorinvdis_id = #{iostorinvdis_id}
|
||||
</if>
|
||||
|
||||
<if test="is_issued != null and is_issued != ''">
|
||||
AND dis.is_issued = #{is_issued}
|
||||
</if>
|
||||
|
||||
<if test="box_no != null and box_no != ''">
|
||||
AND dis.box_no = #{box_no}
|
||||
</if>
|
||||
|
||||
<if test="work_status != null and work_status != ''">
|
||||
AND #{work_status} >= dis.work_status
|
||||
</if>
|
||||
|
||||
order by dis.box_no,dis.pcsn
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<select id="getDivTaskDis" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
dis.iostorinvdis_id
|
||||
FROM
|
||||
ST_IVT_IOStorInvDis dis
|
||||
WHERE
|
||||
dis.work_status IN ('02', '99')
|
||||
|
||||
<if test="list != null and list != ''">
|
||||
and dis.iostorinvdtl_id in
|
||||
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
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
|
||||
dis.work_status = '01'
|
||||
AND task.task_status IN ('02', '03','05','06','99')
|
||||
|
||||
<if test="list != null and list != ''">
|
||||
and dis.iostorinvdtl_id in
|
||||
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
</select>
|
||||
|
||||
<select id="getNotCreateDis" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
dis.*,
|
||||
sub.box_length,
|
||||
sub.box_width,
|
||||
sub.box_high,
|
||||
sub.sale_order_name
|
||||
FROM
|
||||
ST_IVT_IOStorInvDis dis
|
||||
LEFT JOIN pdm_bi_subpackagerelation sub ON sub.container_name = dis.pcsn
|
||||
WHERE
|
||||
1 = 1
|
||||
<if test="iostorinvdtl_id != null and iostorinvdtl_id != ''">
|
||||
AND dis.iostorinvdtl_id= #{iostorinvdtl_id}
|
||||
</if>
|
||||
|
||||
<if test="iostorinv_id != null and iostorinv_id != ''">
|
||||
AND dis.iostorinv_id = #{iostorinv_id}
|
||||
</if>
|
||||
|
||||
<if test="iostorinvdis_id != null and iostorinvdis_id != ''">
|
||||
AND dis.iostorinvdis_id = #{iostorinvdis_id}
|
||||
</if>
|
||||
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -279,15 +279,16 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
attrParam.put("material_id", disDao.getMaterial_id());
|
||||
attrParam.put("box_no", disDao.getBox_no());
|
||||
|
||||
jsonAttr = inBussManageService.getOneStruct(attrParam);
|
||||
JSONObject jsonSect = sectTab.query("sect_id = '" + jsonObject.getString("sect_id") + "'").uniqueResult(0);
|
||||
|
||||
// 判断是否是虚拟区
|
||||
if (jsonSect.getString("sect_type_attr").equals(IOSEnum.SECT_TYPE.code("虚拟区"))) {
|
||||
jsonAttr = attrTab.query("sect_id = '" + jsonObject.getString("sect_id") + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0);
|
||||
} else {
|
||||
jsonAttr = inBussManageService.getOneStruct(attrParam);
|
||||
}
|
||||
} else {
|
||||
// 指定分配
|
||||
jsonLock.put("inv_type", mstDao.getBill_type());
|
||||
jsonLock.put("inv_id", mstDao.getIostorinv_id());
|
||||
jsonLock.put("inv_code", mstDao.getBill_code());
|
||||
jsonLock.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁"));
|
||||
jsonLock.put("operate", IOSEnum.IO_TYPE.code("入库"));
|
||||
|
||||
jsonAttr = attrTab.query("struct_id = '" + jsonDis.getString("struct_id") + "'").uniqueResult(0);
|
||||
}
|
||||
|
||||
@@ -297,6 +298,12 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
|
||||
// 调用业务处理类锁定货位
|
||||
paramLockList.add(jsonAttr.getString("struct_code"));
|
||||
|
||||
jsonLock.put("inv_type", mstDao.getBill_type());
|
||||
jsonLock.put("inv_id", mstDao.getIostorinv_id());
|
||||
jsonLock.put("inv_code", mstDao.getBill_code());
|
||||
jsonLock.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁"));
|
||||
jsonLock.put("operate", IOSEnum.IO_TYPE.code("入库"));
|
||||
inBussManageService.lockStruct(paramLockList, jsonLock);
|
||||
|
||||
// 判断是否虚拟区
|
||||
@@ -702,6 +709,12 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
// 仓位表
|
||||
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||
|
||||
// 子卷包装关系表
|
||||
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
|
||||
|
||||
// 包装关系出入库记录表
|
||||
WQLObject subRecordTab = WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord");
|
||||
|
||||
// 更新库存
|
||||
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
|
||||
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||
@@ -782,6 +795,47 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
|
||||
taskTab.update(jsonTaskParam,"task_id IN ('"+task_id_in+"') AND task_status <> '"+TaskStatusEnum.FINISHED.getCode()+"'");
|
||||
|
||||
// 更新子卷包装关系
|
||||
String pcsn_in = disDaoList.stream()
|
||||
.map(StIvtIostorinvdis::getPcsn)
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
JSONObject jsonSubParam = new JSONObject();
|
||||
jsonSubParam.put("status", SUBEnum.STATUS.code("入库"));
|
||||
|
||||
subTab.update(jsonSubParam,"container_name IN ('"+pcsn_in+"')");
|
||||
|
||||
/*
|
||||
* 插入子卷包装关系出入记录
|
||||
*/
|
||||
// 子卷包装集合
|
||||
List<JSONObject> subList = subTab.query("container_name IN ('" + pcsn_in + "')")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
for (int i = 0; i < disDaoList.size(); i++) {
|
||||
StIvtIostorinvdis disDao = disDaoList.get(i);
|
||||
|
||||
List<JSONObject> subJoList = subList.stream()
|
||||
.filter(row -> row.getString("container_name").equals(disDao.getPcsn()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
JSONObject jsonSub;
|
||||
if (ObjectUtil.isNotEmpty(subJoList)) {
|
||||
jsonSub = subJoList.get(0);
|
||||
} else {
|
||||
throw new BadRequestException("未查询到子卷号为:" + disDao.getPcsn() + "对应的包装关系!");
|
||||
}
|
||||
|
||||
//插入包装关系出入库记录表
|
||||
jsonSub.put("bill_code", mstDao.getBill_code());
|
||||
jsonSub.put("bill_id", mstDao.getIostorinv_id());
|
||||
jsonSub.put("bill_type", mstDao.getBill_type());
|
||||
jsonSub.put("io_type", IOSEnum.IO_TYPE.code("入库"));
|
||||
jsonSub.put("insert_time", DateUtil.now());
|
||||
jsonSub.put("record_id", cn.hutool.core.util.IdUtil.getSnowflake(1, 1).nextId());
|
||||
subRecordTab.insert(jsonSub);
|
||||
}
|
||||
|
||||
//返检入库,将回传字段改为1
|
||||
if (mstDao.getBill_type().equals(IOSEnum.IN_TYPE.code("返检入库"))) {
|
||||
mstDao.setIs_upload(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.b_lms.pdm_manage.enums.SUBEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdtlMapper;
|
||||
@@ -41,8 +43,16 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
|
||||
@Autowired
|
||||
private IStIvtIostorinvdisService iStIvtIostorinvdisService;
|
||||
|
||||
/**
|
||||
* 入库服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvService iStIvtIostorinvService;
|
||||
|
||||
@Override
|
||||
public HashMap<String, ArrayList<JSONObject>>insertDtl(List<JSONObject> rows, Long iostorinv_id) {
|
||||
StIvtIostorinv mstDao = iStIvtIostorinvService.getById(iostorinv_id);
|
||||
|
||||
// 先删除所有明细并更新子卷包装关系
|
||||
updateSub(iostorinv_id);
|
||||
|
||||
@@ -130,6 +140,12 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
|
||||
dtlDao.setBase_billdtl_id(row.getLongValue("base_billdtl_id"));
|
||||
}
|
||||
|
||||
if (mstDao.getBill_type().equals(IOSEnum.IN_TYPE.code("调拨入库"))) {
|
||||
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
|
||||
dtlDao.setUnassign_qty(BigDecimal.valueOf(0));
|
||||
|
||||
}
|
||||
|
||||
dtlDaoList.add(dtlDao);
|
||||
|
||||
// 1明细对应多条分配明细:此处为1对1
|
||||
@@ -147,6 +163,103 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertOutDtl(List<JSONObject> rows, Long iostorinv_id) {
|
||||
|
||||
// 删除明细
|
||||
this.remove(
|
||||
new QueryWrapper<StIvtIostorinvdtl>().lambda()
|
||||
.eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id)
|
||||
);
|
||||
|
||||
// 查询所有对应物料集合
|
||||
String materialIdIn = rows.stream()
|
||||
.map(row -> JSONObject.parseObject(JSON.toJSONString(row)).getString("material_id"))
|
||||
.distinct()
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
List<JSONObject> materList = WQLObject.getWQLObject("md_me_materialbase")
|
||||
.query("material_id in ('" + materialIdIn + "')")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 查询所有物料对应的计量单位
|
||||
String unitIdIn = materList.stream()
|
||||
.map(row -> row.getString("base_unit_id"))
|
||||
.distinct()
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
List<JSONObject> unitList = WQLObject.getWQLObject("md_pb_measureunit")
|
||||
.query("measure_unit_id in ('" + unitIdIn + "')")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 明细批量插入集合
|
||||
ArrayList<StIvtIostorinvdtl> dtlDaoList = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject row = rows.get(i);
|
||||
|
||||
// 匹配对应物料
|
||||
List<JSONObject> materDaoList = materList.stream()
|
||||
.filter(item -> item.getString("material_id").equals(row.getString("material_id")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (ObjectUtil.isEmpty(materDaoList)) {
|
||||
throw new BadRequestException("物料:"+row.getString("product_name")+"不存在,请检查数据!");
|
||||
}
|
||||
|
||||
JSONObject materDao = materDaoList.get(0);
|
||||
|
||||
// 匹配物料对应的计量单位
|
||||
List<JSONObject> unitDaoList = unitList.stream()
|
||||
.filter(item -> item.getString("measure_unit_id").equals(materDao.getString("base_unit_id")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (ObjectUtil.isEmpty(unitDaoList)) {
|
||||
throw new BadRequestException("物料:"+row.getString("product_name")+"的计量单位不存在,请检查数据!");
|
||||
}
|
||||
|
||||
JSONObject unitDao = unitDaoList.get(0);
|
||||
|
||||
StIvtIostorinvdtl dtlDao = StIvtIostorinvdtl.builder()
|
||||
.iostorinvdtl_id(IdUtil.getLongId())
|
||||
.iostorinv_id(iostorinv_id)
|
||||
.seq_no(BigDecimal.valueOf(i+1))
|
||||
.material_id(materDao.getLongValue("material_id"))
|
||||
.pcsn(row.getString("pcsn"))
|
||||
.quality_scode(row.getString("quality_scode"))
|
||||
.bill_status(IOSEnum.BILL_STATUS.code("生成"))
|
||||
.qty_unit_id(unitDao.getLongValue("measure_unit_id"))
|
||||
.qty_unit_name(unitDao.getString("unit_name"))
|
||||
.plan_qty(row.getBigDecimal("plan_qty"))
|
||||
.source_bill_type(row.getString("source_bill_type"))
|
||||
.source_bill_code(row.getString("source_bill_code"))
|
||||
.source_bill_table(row.getString("source_bill_table"))
|
||||
.base_bill_type(row.getString("base_bill_type"))
|
||||
.base_bill_code(row.getString("base_bill_code"))
|
||||
.base_bill_table(row.getString("base_bill_table"))
|
||||
.remark(row.getString("remark"))
|
||||
.assign_qty(BigDecimal.valueOf(0))
|
||||
.unassign_qty(row.getBigDecimal("plan_qty"))
|
||||
.box_no(row.getString("box_no"))
|
||||
.vbeln(row.getString("vbeln"))
|
||||
.posnr(row.getString("posnr"))
|
||||
.width(row.getString("width")).build();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(row.getString("source_billdtl_id"))) {
|
||||
dtlDao.setSource_billdtl_id(row.getLongValue("source_billdtl_id"));
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(row.getString("base_billdtl_id"))) {
|
||||
dtlDao.setBase_billdtl_id(row.getLongValue("base_billdtl_id"));
|
||||
}
|
||||
|
||||
dtlDaoList.add(dtlDao);
|
||||
|
||||
}
|
||||
|
||||
this.saveBatch(dtlDaoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(Long iostorinvdtl_id) {
|
||||
|
||||
|
||||
@@ -446,10 +446,16 @@ public class InBussManageServiceImpl implements InBussManageService {
|
||||
// 判断是否有木箱
|
||||
JSONObject jsonAttrDark = darkAttr.get(0);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonAttrDark.getString("storagevehicle_code")) && jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
jsonAttr = json;
|
||||
if (ObjectUtil.isNotEmpty(jsonAttrDark.getString("storagevehicle_code"))) {
|
||||
|
||||
if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
jsonAttr = json;
|
||||
}
|
||||
|
||||
} else {
|
||||
jsonAttr = jsonAttrDark;
|
||||
if (jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
jsonAttr = jsonAttrDark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,438 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.b_lms.sch.tasks.TwoOutTask;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
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.st.inbill.service.StorPublicService;
|
||||
import org.nl.wms.st.instor.service.HandMoveStorService;
|
||||
import org.nl.wms.st.instor.task.HandMoveStorAcsTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出库业务处理 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-11-10
|
||||
*/
|
||||
@Service
|
||||
public class OutBussManageServiceImpl implements OutBussManageService {
|
||||
|
||||
/**
|
||||
* 出库主表服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvOutService stIvtIostorinvOutService;
|
||||
|
||||
/**
|
||||
* 出入库明细服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvdtlService iStIvtIostorinvdtlService;
|
||||
|
||||
/**
|
||||
* 仓位库存服务
|
||||
*/
|
||||
@Autowired
|
||||
private StorPublicService storPublicService;
|
||||
|
||||
/**
|
||||
* 入库业务处理服务
|
||||
*/
|
||||
@Autowired
|
||||
private InBussManageService inBussManageService;
|
||||
|
||||
/**
|
||||
* 移库服务
|
||||
*/
|
||||
@Autowired
|
||||
private HandMoveStorService handMoveStorService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void lockStruct(List<String> param, JSONObject json) {
|
||||
|
||||
if (ObjectUtil.isEmpty(param)) {
|
||||
throw new BadRequestException("锁定或解锁仓位不能为空!");
|
||||
}
|
||||
|
||||
// 仓位表
|
||||
WQLObject attrTab = WQLObject.getWQLObject("ST_IVT_StructAttr");
|
||||
|
||||
String operate = json.getString("operate");
|
||||
if (operate.equals(IOSEnum.IO_TYPE.code("出库"))) {
|
||||
|
||||
attrTab.update(json, "struct_code IN ('" + String.join("','", param) + "')");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StIvtIostorinvdis> divIvt(StIvtIostorinvdtl dtlDao, List<JSONObject> ivtList) {
|
||||
|
||||
StIvtIostorinv mstDao = stIvtIostorinvOutService.getById(dtlDao.getIostorinv_id());
|
||||
|
||||
// 需要返回的分配明细对象集合
|
||||
List<StIvtIostorinvdis> resultDisList = new ArrayList<>();
|
||||
|
||||
// 需要更新库存的集合
|
||||
List<JSONObject> updateIvtList = new ArrayList<>();
|
||||
|
||||
// 已分配重量
|
||||
double assign_qty = dtlDao.getAssign_qty().doubleValue();
|
||||
|
||||
// 未分配重量
|
||||
double unassign_qty = dtlDao.getUnassign_qty().doubleValue();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(dtlDao.getSource_bill_code())) {
|
||||
// 有订单号: 找相同物料、订单号的库存,并根据仓位分组、即木箱分组
|
||||
Map<String, List<JSONObject>> likeMaterOrderMap = ivtList.stream()
|
||||
.filter(row -> row.getString("material_id").equals(dtlDao.getMaterial_id().toString()) &&
|
||||
row.getString("sale_order_name").equals(dtlDao.getSource_bill_code()))
|
||||
.collect(Collectors.groupingBy(row -> row.getString("struct_code")));
|
||||
|
||||
if (ObjectUtil.isEmpty(likeMaterOrderMap)) {
|
||||
throw new BadRequestException("库存不足!");
|
||||
}
|
||||
|
||||
for (String struct_code : likeMaterOrderMap.keySet()) {
|
||||
|
||||
// 判断是否继续分配库存
|
||||
if (unassign_qty <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
// 相同箱号的库存
|
||||
List<JSONObject> likeBoxList = likeMaterOrderMap.get(struct_code);
|
||||
|
||||
// 计算重量
|
||||
double canuse_qty = likeBoxList.stream()
|
||||
.map(row -> row.getBigDecimal("canuse_qty"))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||
.doubleValue();
|
||||
|
||||
// 加已分配重量
|
||||
assign_qty = NumberUtil.add(assign_qty, canuse_qty);
|
||||
|
||||
// 减未分配重量
|
||||
if (unassign_qty >= canuse_qty) {
|
||||
unassign_qty = NumberUtil.sub(unassign_qty, canuse_qty);
|
||||
} else {
|
||||
unassign_qty = 0;
|
||||
}
|
||||
|
||||
// 添加需要更新的库存
|
||||
updateIvtList.addAll(likeBoxList);
|
||||
|
||||
// 添加生成分配明细
|
||||
List<StIvtIostorinvdis> disDaoList= divDisParam(likeBoxList, dtlDao);
|
||||
resultDisList.addAll(disDaoList);
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
// 确定子卷: 找相同物料、批次的箱子
|
||||
List<JSONObject> likePcsnBoxList = ivtList.stream()
|
||||
.filter(row -> row.getString("material_id").equals(dtlDao.getMaterial_id().toString()) &&
|
||||
row.getString("pcsn").equals(dtlDao.getPcsn())
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (ObjectUtil.isEmpty(likePcsnBoxList)) {
|
||||
throw new BadRequestException("库存不足!");
|
||||
}
|
||||
|
||||
// 计算重量
|
||||
double canuse_qty = likePcsnBoxList.stream()
|
||||
.map(row -> row.getBigDecimal("canuse_qty"))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||
.doubleValue();
|
||||
|
||||
unassign_qty = 0;
|
||||
assign_qty = NumberUtil.add(assign_qty, canuse_qty);
|
||||
|
||||
// 添加需要更新的库存
|
||||
updateIvtList.addAll(likePcsnBoxList);
|
||||
|
||||
// 添加生成分配明细
|
||||
List<StIvtIostorinvdis> disDaoList= divDisParam(likePcsnBoxList, dtlDao);
|
||||
resultDisList.addAll(disDaoList);
|
||||
|
||||
}
|
||||
|
||||
// 更新库存
|
||||
upateIvt(updateIvtList, mstDao, IOSEnum.IVT_CHANGE.code("加冻结"));
|
||||
|
||||
// 更新明细
|
||||
dtlDao.setAssign_qty(BigDecimal.valueOf(assign_qty));
|
||||
dtlDao.setUnassign_qty(BigDecimal.valueOf(unassign_qty));
|
||||
dtlDao.setBill_status(unassign_qty == 0 ? IOSEnum.BILL_STATUS.code("分配完") : IOSEnum.BILL_STATUS.code("分配中"));
|
||||
|
||||
iStIvtIostorinvdtlService.updateById(dtlDao);
|
||||
|
||||
return resultDisList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StIvtIostorinvdis> manualDivIvt(StIvtIostorinvdtl dtlDao, List<JSONObject> ivtList) {
|
||||
|
||||
/*更新明细*/
|
||||
// 加已分配数量
|
||||
double canuse_qty = ivtList.stream()
|
||||
.map(row -> row.getBigDecimal("canuse_qty"))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||
.doubleValue();
|
||||
|
||||
dtlDao.setAssign_qty(NumberUtil.add(dtlDao.getAssign_qty(),canuse_qty));
|
||||
|
||||
// 减未分配数量
|
||||
dtlDao.setUnassign_qty(NumberUtil.sub(dtlDao.getUnassign_qty(), canuse_qty));
|
||||
|
||||
if (dtlDao.getUnassign_qty().doubleValue() <= 0 ) {
|
||||
dtlDao.setUnassign_qty(BigDecimal.valueOf(0));
|
||||
}
|
||||
|
||||
dtlDao.setBill_status(dtlDao.getUnassign_qty().doubleValue() == 0 ? IOSEnum.BILL_STATUS.code("分配完") : IOSEnum.BILL_STATUS.code("分配中"));
|
||||
iStIvtIostorinvdtlService.updateById(dtlDao);
|
||||
|
||||
/*更新库存*/
|
||||
// 添加需要更新的库存
|
||||
StIvtIostorinv mstDao = stIvtIostorinvOutService.getById(dtlDao.getIostorinv_id());
|
||||
upateIvt(ivtList, mstDao, IOSEnum.IVT_CHANGE.code("加冻结"));
|
||||
|
||||
return divDisParam(ivtList, dtlDao);
|
||||
}
|
||||
|
||||
/**
|
||||
* 准备插入分配明细的参数
|
||||
* @param likeBoxList 相同木箱的库存
|
||||
* @param dtlDao 明细对象
|
||||
* @return List<StIvtIostorinvdis> 分配明细对象集合
|
||||
*/
|
||||
private List<StIvtIostorinvdis> divDisParam(List<JSONObject> likeBoxList, StIvtIostorinvdtl dtlDao) {
|
||||
|
||||
List<StIvtIostorinvdis> resultDisList = new ArrayList<>();
|
||||
|
||||
// 查询库区
|
||||
JSONObject jsonSect = WQLObject.getWQLObject("st_ivt_sectattr")
|
||||
.query("sect_id = '" + likeBoxList.get(0).getString("sect_id") + "'")
|
||||
.uniqueResult(0);
|
||||
|
||||
String work_status;
|
||||
if (jsonSect.getString("sect_type_attr").equals(IOSEnum.SECT_TYPE.code("虚拟区"))) {
|
||||
work_status = IOSEnum.WORK_STATUS.code("生成");
|
||||
} else {
|
||||
work_status = IOSEnum.WORK_STATUS.code("未生成");
|
||||
}
|
||||
|
||||
// 查询计量单位
|
||||
JSONObject jsonUnit = WQLObject.getWQLObject("md_pb_measureunit")
|
||||
.query("measure_unit_id = '" + likeBoxList.get(0).getString("qty_unit_id") + "'")
|
||||
.uniqueResult(0);
|
||||
|
||||
// 查询子卷包装关系
|
||||
String pcsn_in = likeBoxList.stream()
|
||||
.map(row -> row.getString("pcsn"))
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
List<JSONObject> subList = WQLObject.getWQLObject("pdm_bi_subpackagerelation")
|
||||
.query("container_name in ('" + pcsn_in + "')")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
|
||||
for (int i = 0; i < likeBoxList.size(); i++) {
|
||||
JSONObject jsonIvt = likeBoxList.get(i);
|
||||
|
||||
JSONObject jsonSub = subList.stream()
|
||||
.filter(row -> row.getString("container_name").equals(jsonIvt.getString("pcsn")))
|
||||
.collect(Collectors.toList()).get(0);
|
||||
|
||||
StIvtIostorinvdis disDao = StIvtIostorinvdis.builder()
|
||||
.iostorinvdis_id(IdUtil.getLongId())
|
||||
.iostorinv_id(dtlDao.getIostorinv_id())
|
||||
.iostorinvdtl_id(dtlDao.getIostorinvdtl_id())
|
||||
.seq_no(BigDecimal.valueOf(i + 1))
|
||||
.sect_id(jsonIvt.getLongValue("sect_id"))
|
||||
.sect_code(jsonIvt.getString("sect_code"))
|
||||
.sect_name(jsonIvt.getString("sect_name"))
|
||||
.struct_id(jsonIvt.getLongValue("struct_id"))
|
||||
.struct_code(jsonIvt.getString("struct_code"))
|
||||
.struct_name(jsonIvt.getString("struct_name"))
|
||||
.material_id(jsonIvt.getLongValue("material_id"))
|
||||
.pcsn(jsonIvt.getString("pcsn"))
|
||||
.quality_scode("01")
|
||||
.storagevehicle_id(jsonIvt.getLongValue("storagevehicle_id"))
|
||||
.storagevehicle_code(jsonIvt.getString("storagevehicle_code"))
|
||||
.is_issued(IOSEnum.IS_NOTANDYES.code("否"))
|
||||
.qty_unit_id(jsonUnit.getLongValue("measure_unit_id"))
|
||||
.qty_unit_name(jsonUnit.getString("unit_name"))
|
||||
.plan_qty(jsonIvt.getBigDecimal("canuse_qty"))
|
||||
.real_qty(jsonIvt.getBigDecimal("real_qty"))
|
||||
.work_status(work_status)
|
||||
.box_no(jsonSub.getString("package_box_sn"))
|
||||
.build();
|
||||
|
||||
resultDisList.add(disDao);
|
||||
}
|
||||
|
||||
return resultDisList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void upateIvt(List<JSONObject> list, StIvtIostorinv mstDao, String ivt_change) {
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
JSONObject json = list.get(i);
|
||||
|
||||
JSONObject jsonParam = new JSONObject();
|
||||
jsonParam.put("struct_id", json.getString("struct_id"));
|
||||
jsonParam.put("material_id", json.getString("material_id"));
|
||||
jsonParam.put("pcsn", json.getString("pcsn"));
|
||||
jsonParam.put("change_qty", json.getString("canuse_qty"));
|
||||
jsonParam.put("bill_type_scode", mstDao.getBill_type());
|
||||
jsonParam.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品"));
|
||||
jsonParam.put("inv_id", mstDao.getIostorinv_id());
|
||||
jsonParam.put("bill_code", mstDao.getBill_code());
|
||||
jsonParam.put("bill_table", "ST_IVT_IOStorInv");
|
||||
storPublicService.IOStor(jsonParam, ivt_change);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createMove(List<JSONObject> list) {
|
||||
//子卷包装关系表
|
||||
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
|
||||
|
||||
//物料表
|
||||
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase");
|
||||
|
||||
// 获取子卷包装集合
|
||||
String vehilcle_in = list.stream()
|
||||
.map(row -> row.getString("storagevehicle_code"))
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
List<JSONObject> subList = subTab.query("package_box_sn IN ('" + vehilcle_in + "')")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 查询物料集合
|
||||
String materialCode_in = subList.stream()
|
||||
.map(row -> row.getString("product_name"))
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
List<JSONObject> materList = materTab.query("material_code IN ('" + materialCode_in + "')")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
JSONObject json = list.get(i);
|
||||
|
||||
// 生成移库单传入参数
|
||||
JSONObject mapParam = new JSONObject();
|
||||
// 明细参数
|
||||
JSONArray table = new JSONArray();
|
||||
|
||||
mapParam.put("bill_type", IOSEnum.MOVE_TYPE.code("出库移库"));
|
||||
mapParam.put("buss_type", IOSEnum.MOVE_TYPE.code("出库移库"));
|
||||
mapParam.put("bill_status", IOSEnum.MOVE_STATUS.code("提交"));
|
||||
mapParam.put("biz_date", DateUtil.today());
|
||||
mapParam.put("stor_code", json.getString("stor_code"));
|
||||
mapParam.put("stor_id", json.getString("stor_id"));
|
||||
mapParam.put("stor_name", json.getString("stor_name"));
|
||||
mapParam.put("is_task", IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
// 过滤对应物料
|
||||
JSONObject jsonSub = subList.stream()
|
||||
.filter(row -> row.getString("package_box_sn").equals(json.getString("storagevehicle_code")))
|
||||
.collect(Collectors.toList()).get(0);
|
||||
|
||||
JSONObject jsonMater = materList.stream()
|
||||
.filter(row -> row.getString("material_code").equals(jsonSub.getString("product_name")))
|
||||
.collect(Collectors.toList()).get(0);
|
||||
|
||||
// 查询移入货位
|
||||
JSONObject moveParam = new JSONObject();
|
||||
moveParam.put("stor_id", json.getString("stor_id"));
|
||||
moveParam.put("sect_id", RegionTypeEnum.TWO_ZZ01.getId());
|
||||
moveParam.put("box_no", json.getString("storagevehicle_code"));
|
||||
moveParam.put("material_id", jsonMater.getString("material_id"));
|
||||
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
|
||||
|
||||
// 查询移出货位的库存物料
|
||||
JSONObject jsonMoveIvt = WQL.getWO("ST_OUTIVT03")
|
||||
.addParam("flag", "6")
|
||||
.addParam("struct_id", json.getString("struct_id"))
|
||||
.process().uniqueResult(0);
|
||||
|
||||
// 移库单明细
|
||||
JSONObject jsonMoveDtl = new JSONObject();
|
||||
jsonMoveDtl.put("is_task", "2");
|
||||
jsonMoveDtl.put("turnout_sect_id", json.getLongValue("sect_id"));
|
||||
jsonMoveDtl.put("turnout_sect_code", json.getString("sect_code"));
|
||||
jsonMoveDtl.put("turnout_sect_name", json.getString("sect_name"));
|
||||
jsonMoveDtl.put("turnout_struct_id", json.getLongValue("struct_id"));
|
||||
jsonMoveDtl.put("turnout_struct_code", json.getString("struct_code"));
|
||||
jsonMoveDtl.put("turnout_struct_name", json.getString("struct_name"));
|
||||
jsonMoveDtl.put("material_id", jsonMoveIvt.getLongValue("material_id"));
|
||||
jsonMoveDtl.put("pcsn", jsonMoveIvt.getString("pcsn"));
|
||||
jsonMoveDtl.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品"));
|
||||
jsonMoveDtl.put("qty_unit_id", jsonMoveIvt.getLongValue("qty_unit_id"));
|
||||
jsonMoveDtl.put("qty_unit_name", jsonMoveIvt.getString("unit_name"));
|
||||
jsonMoveDtl.put("qty", jsonMoveIvt.getDoubleValue("canuse_qty"));
|
||||
jsonMoveDtl.put("storagevehicle_code", json.getString("storagevehicle_code"));
|
||||
jsonMoveDtl.put("turnin_sect_id", jsonMove.getLongValue("sect_id"));
|
||||
jsonMoveDtl.put("turnin_sect_code", jsonMove.getString("sect_code"));
|
||||
jsonMoveDtl.put("turnin_sect_name", jsonMove.getString("sect_name"));
|
||||
jsonMoveDtl.put("turnin_struct_id", jsonMove.getLongValue("struct_id"));
|
||||
jsonMoveDtl.put("turnin_struct_code", jsonMove.getString("struct_code"));
|
||||
jsonMoveDtl.put("turnin_struct_name", jsonMove.getString("struct_name"));
|
||||
|
||||
// 生成任务
|
||||
JSONObject param2 = new JSONObject();
|
||||
param2.put("task_type", "010505");
|
||||
param2.put("vehicle_code", json.getString("storagevehicle_code"));
|
||||
param2.put("point_code1", json.getString("struct_code"));
|
||||
param2.put("point_code2", jsonMove.getString("struct_code"));
|
||||
|
||||
HandMoveStorAcsTask handMoveStorAcsTask = new HandMoveStorAcsTask();
|
||||
String move_task_id = handMoveStorAcsTask.createTask(param2);
|
||||
|
||||
// 回显移库明细任务id
|
||||
jsonMoveDtl.put("task_id", move_task_id);
|
||||
table.add(jsonMoveDtl);
|
||||
|
||||
mapParam.put("tableData", table);
|
||||
// 调用移库单新增方法
|
||||
handMoveStorService.insertDtl2(mapParam);
|
||||
|
||||
// 下发任务
|
||||
handMoveStorAcsTask.immediateNotifyAcs(null);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出库业务处理 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-11-16
|
||||
*/
|
||||
public interface OutBussManageService {
|
||||
|
||||
/**
|
||||
* 上锁、解锁仓位处理
|
||||
* @param param:[
|
||||
* {
|
||||
* struct_code: 仓位编码
|
||||
* }
|
||||
* ]
|
||||
* @param json {
|
||||
* inv_type:单据类型
|
||||
* inv_id:单据标识
|
||||
* inv_code:单据编码
|
||||
* lock_type: 锁定类型
|
||||
* operate:单据类型
|
||||
* }
|
||||
*/
|
||||
void lockStruct(List<String> param, JSONObject json);
|
||||
|
||||
/**
|
||||
* 分配库存方法
|
||||
* @param dtlDao: 明细对象
|
||||
* @param ivtList: 库存集合
|
||||
* @return List<StIvtIostorinvdis>: 分配明细集合
|
||||
*/
|
||||
List<StIvtIostorinvdis> divIvt(StIvtIostorinvdtl dtlDao, List<JSONObject> ivtList);
|
||||
|
||||
/**
|
||||
* 手工分配库存方法
|
||||
* @param dtlDao: 明细对象
|
||||
* @param ivtList: 需要配粉的库存集合
|
||||
* @return List<StIvtIostorinvdis>: 分配明细集合
|
||||
*/
|
||||
List<StIvtIostorinvdis> manualDivIvt(StIvtIostorinvdtl dtlDao, List<JSONObject> ivtList);
|
||||
|
||||
/**
|
||||
* 更新库存
|
||||
* @param list 需要更新的库存明细
|
||||
* @param mstDao 主表对象
|
||||
* @param ivt_change 更新类型
|
||||
*/
|
||||
void upateIvt(List<JSONObject> list, StIvtIostorinv mstDao, String ivt_change);
|
||||
|
||||
/**
|
||||
* 创建移库单
|
||||
* @param list 需要创建移库单的仓位
|
||||
*/
|
||||
void createMove(List<JSONObject> list);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
[交易说明]
|
||||
交易名: 出库分配
|
||||
所属模块:
|
||||
功能简述:
|
||||
版权所有:
|
||||
表引用:
|
||||
版本经历:
|
||||
|
||||
[数据库]
|
||||
--指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
|
||||
|
||||
[IO定义]
|
||||
#################################################
|
||||
## 表字段对应输入参数
|
||||
#################################################
|
||||
输入.flag TYPEAS s_string
|
||||
输入.stor_id TYPEAS s_string
|
||||
输入.sect_id TYPEAS s_string
|
||||
输入.iostorinvdtl_id TYPEAS s_string
|
||||
输入.iostorinvdis_id TYPEAS s_string
|
||||
输入.iostorinv_id TYPEAS s_string
|
||||
输入.task_id TYPEAS s_string
|
||||
输入.bill_status TYPEAS s_string
|
||||
输入.is_issued TYPEAS s_string
|
||||
输入.dtl_id_in TYPEAS f_string
|
||||
输入.box_in TYPEAS f_string
|
||||
|
||||
[临时表]
|
||||
--这边列出来的临时表就会在运行期动态创建
|
||||
|
||||
[临时变量]
|
||||
--所有中间过程变量均可在此处定义
|
||||
|
||||
[业务过程]
|
||||
|
||||
##########################################
|
||||
# 1、输入输出检查 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 2、主过程前处理 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 3、业务主过程 #
|
||||
##########################################
|
||||
|
||||
IF 输入.flag = "1"
|
||||
QUERY
|
||||
SELECT
|
||||
ivt.*,
|
||||
attr.row_num,
|
||||
attr.block_num,
|
||||
attr.storagevehicle_code,
|
||||
attr.storagevehicle_id,
|
||||
attr.sect_id,
|
||||
attr.sect_code,
|
||||
attr.sect_name,
|
||||
sub.sale_order_name
|
||||
FROM
|
||||
ST_IVT_StructIvt ivt
|
||||
LEFT JOIN ST_IVT_StructAttr attr ON attr.struct_id = ivt.struct_id
|
||||
LEFT JOIN PDM_BI_SubPackageRelation sub ON attr.storagevehicle_code = sub.package_box_SN AND sub.container_name = ivt.pcsn
|
||||
WHERE
|
||||
ivt.quality_scode = '01'
|
||||
AND attr.lock_type = '1'
|
||||
AND ivt.canuse_qty <> '0'
|
||||
|
||||
OPTION 输入.sect_id <> ""
|
||||
attr.sect_id = 输入.sect_id
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.stor_id <> ""
|
||||
attr.stor_id = 输入.stor_id
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.box_in <> ""
|
||||
attr.storagevehicle_code in 输入.box_in
|
||||
ENDOPTION
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
@@ -19,7 +19,8 @@ public enum RegionTypeEnum {
|
||||
LKRK("16", "密集库入库输送线", "1585164789083148288"),
|
||||
LKCK("17", "密集库出库输送线", "1585167595403874304"),
|
||||
XN01("18", "虚拟区", "1586913215886004224"),
|
||||
PD01("19", "盘点区", "1645705331612979200");
|
||||
PD01("19", "盘点区", "1645705331612979200"),
|
||||
TWO_ZZ01("20", "暂存区", "");
|
||||
|
||||
private String name;
|
||||
private String code;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.st.instor.task;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -120,7 +121,31 @@ public class HandMoveStorAcsTask extends AbstractAcsTask {
|
||||
*/
|
||||
@Override
|
||||
public String createTask(JSONObject form) {
|
||||
return null;
|
||||
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("task_type", form.getString("task_type"));
|
||||
json.put("vehicle_code", form.getString("vehicle_code"));
|
||||
json.put("task_name", form.getString("task_name"));
|
||||
json.put("point_code1", form.getString("point_code1"));
|
||||
json.put("point_code2", form.getString("point_code2"));
|
||||
json.put("material_id", form.getString("material_id"));
|
||||
json.put("task_group_id", form.getString("task_group_id"));
|
||||
json.put("sort_seq", form.getString("sort_seq"));
|
||||
|
||||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
json.put("handle_class", THIS_CLASS);
|
||||
json.put("create_id", currentUserId);
|
||||
json.put("create_name", currentUsername);
|
||||
json.put("create_time", DateUtil.now());
|
||||
json.put("acs_task_type", "7");
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(json);
|
||||
|
||||
return json.getString("task_id");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,8 +3,11 @@ package org.nl.wms.st.outbill.rest;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService;
|
||||
import org.nl.modules.logging.annotation.Log;
|
||||
import org.nl.wms.st.inbill.service.CheckOutBillService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -20,8 +23,17 @@ import java.util.Map;
|
||||
@RequestMapping("/api/checkoutbill")
|
||||
@Slf4j
|
||||
public class CheckOutBillController {
|
||||
/**
|
||||
* 一期出库服务
|
||||
*/
|
||||
private final CheckOutBillService checkOutBillService;
|
||||
|
||||
/**
|
||||
* 二期出出库服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvOutService iStIvtIostorinvOutService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询出库单")
|
||||
|
||||
@@ -58,7 +70,8 @@ public class CheckOutBillController {
|
||||
//@PreAuthorize("@el.check('checkoutbill:del')")
|
||||
@DeleteMapping
|
||||
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
|
||||
checkOutBillService.deleteAll(ids);
|
||||
iStIvtIostorinvOutService.deleteAll(ids);
|
||||
// checkOutBillService.deleteAll(ids);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@@ -66,7 +79,8 @@ public class CheckOutBillController {
|
||||
@Log("修改出库单")
|
||||
|
||||
public ResponseEntity<Object> update(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.update(whereJson);
|
||||
iStIvtIostorinvOutService.update(whereJson);
|
||||
// checkOutBillService.update(whereJson);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -74,7 +88,8 @@ public class CheckOutBillController {
|
||||
@Log("新增出库单")
|
||||
|
||||
public ResponseEntity<Object> insertDtl(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.insertDtl(whereJson);
|
||||
iStIvtIostorinvOutService.insertMst(whereJson);
|
||||
// checkOutBillService.insertDtl(whereJson);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@@ -82,7 +97,11 @@ public class CheckOutBillController {
|
||||
@Log("出库单全部分配")
|
||||
|
||||
public ResponseEntity<Object> allDiv(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.allDiv(whereJson);
|
||||
if (whereJson.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvOutService.allDiv(whereJson);
|
||||
} else {
|
||||
checkOutBillService.allDiv(whereJson);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -90,7 +109,12 @@ public class CheckOutBillController {
|
||||
@Log("出库单全部分2配")
|
||||
|
||||
public ResponseEntity<Object> allDivOne(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.allDivOne(whereJson);
|
||||
if (whereJson.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvOutService.allDiv(whereJson);
|
||||
} else {
|
||||
checkOutBillService.allDivOne(whereJson);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -98,7 +122,11 @@ public class CheckOutBillController {
|
||||
@Log("出库单全部取消")
|
||||
|
||||
public ResponseEntity<Object> allCancel(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.allCancel(whereJson);
|
||||
if (whereJson.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvOutService.cancelDiv(whereJson);
|
||||
} else {
|
||||
checkOutBillService.allCancel(whereJson);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -114,7 +142,12 @@ public class CheckOutBillController {
|
||||
@Log("出库单全部取消")
|
||||
|
||||
public ResponseEntity<Object> oneCancel(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.oneCancel(whereJson);
|
||||
if (whereJson.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvOutService.cancelDiv(whereJson);
|
||||
} else {
|
||||
checkOutBillService.oneCancel(whereJson);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -167,7 +200,12 @@ public class CheckOutBillController {
|
||||
@Log("一键设置")
|
||||
|
||||
public ResponseEntity<Object> allSetPoint(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.allSetPoint(whereJson);
|
||||
if (whereJson.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvOutService.allSetPoint(whereJson);
|
||||
} else {
|
||||
checkOutBillService.allSetPoint(whereJson);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -196,7 +234,12 @@ public class CheckOutBillController {
|
||||
@Log("出库单手动分配")
|
||||
|
||||
public ResponseEntity<Object> manualDiv(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.manualDiv(whereJson);
|
||||
if (whereJson.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvOutService.manualDiv(whereJson);
|
||||
} else {
|
||||
checkOutBillService.manualDiv(whereJson);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -204,7 +247,11 @@ public class CheckOutBillController {
|
||||
@Log("出库单强制确认")
|
||||
|
||||
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
|
||||
checkOutBillService.confirm(whereJson);
|
||||
if (whereJson.getString("stor_id").equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvOutService.confirm(whereJson);
|
||||
} else {
|
||||
checkOutBillService.confirm(whereJson);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
|
||||
@@ -425,6 +425,7 @@ export default {
|
||||
this.openParam = res
|
||||
this.structshow = true
|
||||
this.openRow = this.currentRow
|
||||
this.openRow.stor_id = this.rowmst.stor_id
|
||||
this.loadingAlldiv = false
|
||||
}).catch(() => {
|
||||
this.loadingAlldiv = false
|
||||
@@ -452,6 +453,8 @@ export default {
|
||||
}
|
||||
},
|
||||
deleteRow(row) {
|
||||
row.stor_id = this.mstrow.stor_id
|
||||
row.cancel_type = '3'
|
||||
checkoutbill.oneCancel(row).then(res => {
|
||||
this.queryTableDtl()
|
||||
})
|
||||
@@ -509,6 +512,7 @@ export default {
|
||||
// return
|
||||
// }
|
||||
this.loadingAlldiv = true
|
||||
this.mstrow.div_type = '1'
|
||||
checkoutbill.allDiv(this.mstrow).then(res => {
|
||||
this.crud.notify('分配成功!', CRUD.NOTIFICATION_TYPE.INFO)
|
||||
this.queryTableDtl()
|
||||
@@ -522,19 +526,21 @@ export default {
|
||||
// this.crud.notify('请先选择库区!', CRUD.NOTIFICATION_TYPE.INFO)
|
||||
// return
|
||||
// }
|
||||
this.loadingAutodiv = true
|
||||
this.loadingAlldiv = true
|
||||
if (this.currentRow.iostorinvdtl_id !== null) {
|
||||
this.mstrow.iostorinvdtl_id = this.currentRow.iostorinvdtl_id
|
||||
checkoutbill.allDivOne(this.mstrow).then(res => {
|
||||
this.currentRow.div_type = '2'
|
||||
this.currentRow.stor_id = this.rowmst.stor_id
|
||||
checkoutbill.allDivOne(this.currentRow).then(res => {
|
||||
this.queryTableDtl()
|
||||
this.loadingAutodiv = false
|
||||
this.loadingAlldiv = false
|
||||
}).catch(() => {
|
||||
this.loadingAutodiv = false
|
||||
this.loadingAlldiv = false
|
||||
})
|
||||
}
|
||||
},
|
||||
allCancel() {
|
||||
this.loadingAlldiv = true
|
||||
this.mstrow.cancel_type = '1'
|
||||
checkoutbill.allCancel(this.mstrow).then(res => {
|
||||
this.queryTableDtl()
|
||||
this.loadingAlldiv = false
|
||||
@@ -544,6 +550,8 @@ export default {
|
||||
},
|
||||
oneCancel() {
|
||||
this.loadingAlldiv = true
|
||||
this.currentRow.stor_id = this.mstrow.stor_id
|
||||
this.currentRow.cancel_type = '2'
|
||||
if (this.currentRow.iostorinvdtl_id !== null) {
|
||||
checkoutbill.allCancel(this.currentRow).then(res => {
|
||||
this.queryTableDtl()
|
||||
@@ -653,7 +661,8 @@ export default {
|
||||
'point_code': this.form2.point_code,
|
||||
'iostorinv_id': this.mstrow.iostorinv_id,
|
||||
'bill_code': this.mstrow.bill_code,
|
||||
'checked': this.checked
|
||||
'checked': this.checked,
|
||||
'stor_id': this.mstrow.stor_id
|
||||
}
|
||||
checkoutbill.allSetPoint(data).then(res => {
|
||||
this.queryTableDdis(this.currentRow.iostorinvdtl_id)
|
||||
|
||||
@@ -266,7 +266,9 @@ export default {
|
||||
}
|
||||
})
|
||||
this.fullscreenLoading = true
|
||||
checkoutbill.manualDiv({ 'row': this.queryrow, 'rows': rows }).then(res => {
|
||||
this.queryrow.stor_id = this.rowmst.stor_id
|
||||
debugger
|
||||
checkoutbill.manualDiv({ 'row': this.queryrow, 'rows': rows, 'stor_id': this.rowmst.stor_id }).then(res => {
|
||||
this.$emit('update:dialogShow', false)
|
||||
this.$emit('StructIvtClosed')
|
||||
this.fullscreenLoading = false
|
||||
@@ -283,7 +285,7 @@ export default {
|
||||
}
|
||||
})
|
||||
this.fullscreenLoading = true
|
||||
checkoutbill.manualDiv({ 'row': this.queryrow, 'rows': rows }).then(res => {
|
||||
checkoutbill.manualDiv({ 'row': this.queryrow, 'rows': rows, 'stor_id': this.rowmst.stor_id }).then(res => {
|
||||
this.$emit('update:dialogShow', false)
|
||||
this.$emit('StructIvtClosed')
|
||||
this.fullscreenLoading = false
|
||||
|
||||
@@ -531,7 +531,7 @@ export default {
|
||||
},
|
||||
confirm() {
|
||||
this.loadingConfirm = true
|
||||
checkoutbill.confirm({ 'iostorinv_id': this.currentRow.iostorinv_id }).then(res => {
|
||||
checkoutbill.confirm({ 'iostorinv_id': this.currentRow.iostorinv_id, 'stor_id': this.currentRow.stor_id }).then(res => {
|
||||
this.querytable()
|
||||
this.crud.notify('出库成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||
this.loadingConfirm = false
|
||||
|
||||
Reference in New Issue
Block a user