add:pc成品入库
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
package org.nl.b_lms.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.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvServiceImpl;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvdisServiceImpl;
|
||||
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.basedata.st.service.dto.StructattrDto;
|
||||
import org.nl.wms.basedata.st.service.impl.StructattrServiceImpl;
|
||||
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.impl.InbillServiceImpl;
|
||||
import org.nl.wms.st.inbill.service.impl.RawAssistIStorServiceImpl;
|
||||
import org.nl.wms.st.inbill.service.impl.StorPublicServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 二期入库任务类
|
||||
* Created by Lxy on 2024/1/19.
|
||||
*/
|
||||
public class TwoInTask extends AbstractAcsTask {
|
||||
|
||||
/**
|
||||
* 处理类
|
||||
*/
|
||||
private final String THIS_CLASS = TwoInTask.class.getName();
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
/*
|
||||
* 下发给ACS时需要特殊处理
|
||||
*/
|
||||
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);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||
|
||||
// 更新任务参数
|
||||
JSONObject map = new JSONObject();
|
||||
|
||||
/*
|
||||
* 1-执行中, 2-完成 ,0-acs取消
|
||||
*/
|
||||
// 执行中
|
||||
if (status.equals(TaskStatusEnum.EXECUTING.getCode())) {
|
||||
|
||||
map.put("task_status", TaskStatusEnum.EXECUTING.getCode());
|
||||
// 更新分配明细为执行中
|
||||
StIvtIostorinvdisServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvdisServiceImpl.class);
|
||||
bean.updateStatusTask(taskObj.getString("task_id"), IOSEnum.WORK_STATUS.code("执行中"),IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
}
|
||||
|
||||
// 完成
|
||||
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
|
||||
|
||||
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
//调用入库分配确认方法
|
||||
StIvtIostorinvdisServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvdisServiceImpl.class);
|
||||
bean.confirmDisIn(taskObj.getString("task_id"));
|
||||
}
|
||||
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
|
||||
if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
|
||||
throw new BadRequestException("任务已执行不能取消");
|
||||
}
|
||||
|
||||
// 更新任务表删除字段
|
||||
map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是"));
|
||||
|
||||
// 更新分配明细状态及相关字段
|
||||
StIvtIostorinvdisServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvdisServiceImpl.class);
|
||||
bean.update(
|
||||
new UpdateWrapper<StIvtIostorinvdis>().lambda()
|
||||
.set(StIvtIostorinvdis::getWork_status, IOSEnum.WORK_STATUS.code("未生成"))
|
||||
.set(StIvtIostorinvdis::getIs_issued, IOSEnum.IS_NOTANDYES.code("否"))
|
||||
.set(StIvtIostorinvdis::getPoint_id, null)
|
||||
.set(StIvtIostorinvdis::getTask_id, null)
|
||||
.eq(StIvtIostorinvdis::getTask_id, taskObj.getString("task_id"))
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
map.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||
map.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||
map.put("update_time", DateUtil.now());
|
||||
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findStartPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findNextPoint() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject form) {
|
||||
|
||||
if (StrUtil.isBlank(form.getString("task_type"))) {
|
||||
throw new BadRequestException("业务类型不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("start_device_code"))) {
|
||||
throw new BadRequestException("起点不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("next_device_code"))) {
|
||||
throw new BadRequestException("终点不能为空!");
|
||||
}
|
||||
|
||||
if (StrUtil.isBlank(form.getString("vehicle_code"))) {
|
||||
throw new BadRequestException("载具号不能为空!");
|
||||
}
|
||||
|
||||
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_status", TaskStatusEnum.START_AND_POINT.getCode());
|
||||
json.put("point_code1", form.getString("start_device_code"));
|
||||
json.put("point_code2", form.getString("next_device_code"));
|
||||
json.put("handle_class", this.getClass().getName());
|
||||
json.put("create_id", SecurityUtils.getCurrentUserId());
|
||||
json.put("create_name", SecurityUtils.getCurrentUsername());
|
||||
json.put("create_time", DateUtil.now());
|
||||
json.put("priority", "1");
|
||||
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, IOSEnum.ACS_RESULT.code("取消"));
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,9 @@ public enum IOSEnum {
|
||||
//是否
|
||||
IS_NOTANDYES(MapOf.of("否", "0", "是", "1")),
|
||||
|
||||
//acs返回任务状态
|
||||
ACS_RESULT(MapOf.of("执行中", "1", "完成", "2","取消","0")),
|
||||
|
||||
//出入库类型
|
||||
IO_TYPE(MapOf.of("入库", "0", "出库", "1")),
|
||||
|
||||
@@ -48,8 +51,20 @@ public enum IOSEnum {
|
||||
"空托盘入库锁", "5", "移出锁", "6", "移入锁", "7", "其它", "99"
|
||||
)),
|
||||
|
||||
//仓位锁定类型
|
||||
//仓库id
|
||||
STOR_ID(MapOf.of("二期", "1582991156504039455")),
|
||||
|
||||
//仓位锁定类型
|
||||
LOCK_OPERATE(MapOf.of("入库锁定", "1","入库取消","2")),
|
||||
|
||||
//库区类型
|
||||
SECT_TYPE(MapOf.of("主存区", "00","暂存区","01","虚拟区","09")),
|
||||
|
||||
//库存变动类型
|
||||
IVT_CHANGE(MapOf.of("加待入", "31","加库存","33","减待入","32")),
|
||||
|
||||
//仓位伸位
|
||||
ZDEPTH_STRUCT(MapOf.of("浅", "1","深","2","无","3")),
|
||||
;
|
||||
|
||||
private Map<String, String> code;
|
||||
|
||||
@@ -70,4 +70,74 @@ public interface IStIvtIostorinvService extends IService<StIvtIostorinv> {
|
||||
*/
|
||||
void deleteAll(Long[] ids);
|
||||
|
||||
/**
|
||||
* 分配货位
|
||||
* @param whereJson:{
|
||||
* dtl_row: {明细对象}
|
||||
* point_code: 入库起点
|
||||
* checked:是否自动分类(true、false)
|
||||
* stor_id:仓库标识
|
||||
* sect_id:库区标识
|
||||
* tableMater:[
|
||||
* {分配明细对象}
|
||||
* ]
|
||||
* }
|
||||
*/
|
||||
void divStruct(Map whereJson);
|
||||
|
||||
/**
|
||||
* 取消分配
|
||||
* @param whereJson {
|
||||
* dtl_row: {明细对象} -- 用不到
|
||||
* tableMater:[{分配明细对象}]
|
||||
* stor_id:仓库标识
|
||||
* point_code: 入库起点 -- 用不到
|
||||
* checked:是否自动分类(true、false) -- 用不到
|
||||
* }
|
||||
*/
|
||||
void unDivStruct(Map whereJson);
|
||||
|
||||
/**
|
||||
* 设置起点
|
||||
* @param whereJson {
|
||||
* dtl_row: {明细对象} -- 用不到
|
||||
* tableMater:[{分配明细对象}]
|
||||
* stor_id:仓库标识
|
||||
* point_code: 入库起点
|
||||
* checked:是否自动分类(true、false) -- 用不到
|
||||
* }
|
||||
*/
|
||||
void setPoint(Map whereJson);
|
||||
|
||||
/**
|
||||
* 下发任务
|
||||
* @param whereJson {
|
||||
* task_id: 任务标识
|
||||
* }
|
||||
*/
|
||||
void reIssueTask(Map whereJson);
|
||||
|
||||
/**
|
||||
* 删除任务
|
||||
* @param whereJson {
|
||||
* task_id: 任务标识
|
||||
* }
|
||||
*/
|
||||
void delTask(Map whereJson);
|
||||
|
||||
/**
|
||||
* 任务标识完成
|
||||
* @param whereJson {
|
||||
* task_id: 任务标识
|
||||
* }
|
||||
*/
|
||||
void confirmTask(Map whereJson);
|
||||
|
||||
/**
|
||||
* 强制完成
|
||||
* @param whereJson: {
|
||||
* 主表对象
|
||||
* }
|
||||
*/
|
||||
void confirm(Map whereJson);
|
||||
}
|
||||
|
||||
@@ -19,12 +19,27 @@ public interface IStIvtIostorinvdisService extends IService<StIvtIostorinvdis> {
|
||||
|
||||
/**
|
||||
* 新增分配明细
|
||||
*
|
||||
* @param iostorinv_id : 主表标识
|
||||
* @param disDaoMap:
|
||||
* {
|
||||
* "明细标识":[{分配明细字段...}]
|
||||
* }
|
||||
* @param disDaoMap: {
|
||||
* "明细标识":[{分配明细字段...}]
|
||||
* }
|
||||
*/
|
||||
void insertDis(Long iostorinv_id, HashMap<String, ArrayList<JSONObject>> disDaoMap);
|
||||
|
||||
/**
|
||||
* 根据任务id更新分配明细执行状态
|
||||
*
|
||||
* @param task_id: 任务标识
|
||||
* @param work_status:执行状态
|
||||
* @param is_issued:是否已下发
|
||||
*/
|
||||
void updateStatusTask(String task_id, String work_status, String is_issued);
|
||||
|
||||
/**
|
||||
* 任务反馈完成,确认分配明细完成
|
||||
* @param task_id: 任务标识
|
||||
*/
|
||||
void confirmDisIn(String task_id);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,27 +20,35 @@ public interface IStIvtIostorinvdtlService extends IService<StIvtIostorinvdtl> {
|
||||
|
||||
/**
|
||||
* 新增出入库明细
|
||||
* @param rows: {
|
||||
* package_box_sn:木箱号
|
||||
* thickness:产品厚度
|
||||
* plan_qty:计划数量
|
||||
* customer_description:客户名称
|
||||
* quanlity_in_box:子卷数量
|
||||
* product_name:物料编码
|
||||
* net_weight:净重
|
||||
* container_name:子卷号
|
||||
* width:宽
|
||||
* sap_pcsn:sap批次
|
||||
* customer_name:客户编码
|
||||
* sale_order_name:订单号
|
||||
* product_description:物料名称
|
||||
* quality_scode:品质类型
|
||||
* ivt_level:库存等级
|
||||
* is_active:是否可用
|
||||
* }
|
||||
*
|
||||
* @param rows: {
|
||||
* package_box_sn:木箱号
|
||||
* thickness:产品厚度
|
||||
* plan_qty:计划数量
|
||||
* customer_description:客户名称
|
||||
* quanlity_in_box:子卷数量
|
||||
* product_name:物料编码
|
||||
* net_weight:净重
|
||||
* container_name:子卷号
|
||||
* width:宽
|
||||
* sap_pcsn:sap批次
|
||||
* customer_name:客户编码
|
||||
* sale_order_name:订单号
|
||||
* product_description:物料名称
|
||||
* quality_scode:品质类型
|
||||
* ivt_level:库存等级
|
||||
* is_active:是否可用
|
||||
* }
|
||||
* @param iostorinv_id: 主表标识
|
||||
* @return {"明细标识":分配明细:[]}
|
||||
*
|
||||
*/
|
||||
HashMap<String, ArrayList<JSONObject>> insertDtl(List<JSONObject> rows, Long iostorinv_id);
|
||||
|
||||
/**
|
||||
* 更新明细状态
|
||||
*
|
||||
* @param iostorinvdtl_id: 明细标识
|
||||
*/
|
||||
void updateStatus(Long iostorinvdtl_id);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
@@ -11,23 +14,36 @@ import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.b_lms.pdm_manage.enums.SUBEnum;
|
||||
import org.nl.b_lms.sch.tasks.TwoInTask;
|
||||
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.StIvtIostorinvMapper;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.wms.basedata.st.service.StorattrService;
|
||||
import org.nl.wms.basedata.st.service.dto.StorattrDto;
|
||||
import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl;
|
||||
import org.nl.wms.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.sch.service.PointService;
|
||||
import org.nl.wms.sch.service.dto.PointDto;
|
||||
import org.nl.wms.sch.tasks.InTask;
|
||||
import org.nl.wms.st.inbill.service.StorPublicService;
|
||||
import org.nl.wms.st.returns.service.impl.InAndOutRetrunServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -51,7 +67,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
* 仓库服务
|
||||
*/
|
||||
@Autowired
|
||||
private StorattrService storattrService;
|
||||
private StorattrService storattrService;
|
||||
|
||||
/**
|
||||
* 出入库明细服务
|
||||
@@ -65,6 +81,24 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
@Autowired
|
||||
private IStIvtIostorinvdisService iStIvtIostorinvdisService;
|
||||
|
||||
/**
|
||||
* 入库业务处理接口
|
||||
*/
|
||||
@Autowired
|
||||
private InBussManageService inBussManageService;
|
||||
|
||||
/**
|
||||
* 仓位库存服务
|
||||
*/
|
||||
@Autowired
|
||||
private StorPublicService storPublicService;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Autowired
|
||||
private PointService pointService;
|
||||
|
||||
@Override
|
||||
public Object pageQuery(Map query, Pageable pageQuery) {
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPageNumber() + 1, pageQuery.getPageSize());
|
||||
@@ -89,7 +123,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
@Transactional
|
||||
public String insertMst(Map whereJson) {
|
||||
// 组织主表数据
|
||||
StIvtIostorinv mstDao = updataMst(whereJson,null);
|
||||
StIvtIostorinv mstDao = updataMst(whereJson, null);
|
||||
this.save(mstDao);
|
||||
|
||||
// 插入明细
|
||||
@@ -102,7 +136,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
HashMap<String, ArrayList<JSONObject>> disDaoMap = iStIvtIostorinvdtlService.insertDtl(rows, mstDao.getIostorinv_id());
|
||||
|
||||
// 插入分配明细
|
||||
iStIvtIostorinvdisService.insertDis(mstDao.getIostorinv_id(),disDaoMap);
|
||||
iStIvtIostorinvdisService.insertDis(mstDao.getIostorinv_id(), disDaoMap);
|
||||
|
||||
// 更新子卷包装关系
|
||||
String packageIn = rows.stream()
|
||||
@@ -116,10 +150,10 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
|
||||
if (IOSEnum.IN_TYPE.code("报废入库").equals(whereJson.get("bill_type"))) {
|
||||
WQLObject.getWQLObject("PDM_BI_SubPackageRelation")
|
||||
.update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("出库")+"'");
|
||||
.update(map, "package_box_SN IN ('" + packageIn + "') AND status = '" + SUBEnum.STATUS.code("出库") + "'");
|
||||
} else {
|
||||
WQLObject.getWQLObject("PDM_BI_SubPackageRelation")
|
||||
.update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("生成")+"'");
|
||||
.update(map, "package_box_SN IN ('" + packageIn + "') AND status = '" + SUBEnum.STATUS.code("生成") + "'");
|
||||
}
|
||||
|
||||
return mstDao.getIostorinv_id().toString();
|
||||
@@ -143,7 +177,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
HashMap<String, ArrayList<JSONObject>> disDaoMap = iStIvtIostorinvdtlService.insertDtl(rows, mstDao.getIostorinv_id());
|
||||
|
||||
// 更新分配明细
|
||||
iStIvtIostorinvdisService.insertDis(mstDao.getIostorinv_id(),disDaoMap);
|
||||
iStIvtIostorinvdisService.insertDis(mstDao.getIostorinv_id(), disDaoMap);
|
||||
|
||||
// 更新子卷包装关系
|
||||
String packageIn = rows.stream()
|
||||
@@ -156,10 +190,10 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
|
||||
if (IOSEnum.IN_TYPE.code("报废入库").equals(whereJson.get("bill_type"))) {
|
||||
WQLObject.getWQLObject("PDM_BI_SubPackageRelation")
|
||||
.update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("出库")+"'");
|
||||
.update(map, "package_box_SN IN ('" + packageIn + "') AND status = '" + SUBEnum.STATUS.code("出库") + "'");
|
||||
} else {
|
||||
WQLObject.getWQLObject("PDM_BI_SubPackageRelation")
|
||||
.update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("生成")+"'");
|
||||
.update(map, "package_box_SN IN ('" + packageIn + "') AND status = '" + SUBEnum.STATUS.code("生成") + "'");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -186,25 +220,335 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
map.put("status", SUBEnum.STATUS.code("生成"));
|
||||
|
||||
WQLObject.getWQLObject("PDM_BI_SubPackageRelation")
|
||||
.update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("包装")+"'");
|
||||
.update(map, "package_box_SN IN ('" + packageIn + "') AND status = '" + SUBEnum.STATUS.code("包装") + "'");
|
||||
|
||||
// 更新主表
|
||||
this.update(
|
||||
new UpdateWrapper<StIvtIostorinv>().lambda()
|
||||
.set(StIvtIostorinv::getIs_delete, IOSEnum.IS_NOTANDYES.code("是"))
|
||||
.set(StIvtIostorinv::getUpdate_optid, Long.parseLong(SecurityUtils.getCurrentUserId()))
|
||||
.set(StIvtIostorinv::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
.set(StIvtIostorinv::getUpdate_optname, DateUtil.now())
|
||||
.in(StIvtIostorinv::getIostorinv_id, listId)
|
||||
.set(StIvtIostorinv::getIs_delete, IOSEnum.IS_NOTANDYES.code("是"))
|
||||
.set(StIvtIostorinv::getUpdate_optid, Long.parseLong(SecurityUtils.getCurrentUserId()))
|
||||
.set(StIvtIostorinv::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
.set(StIvtIostorinv::getUpdate_optname, DateUtil.now())
|
||||
.in(StIvtIostorinv::getIostorinv_id, listId)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void divStruct(Map whereJson) {
|
||||
// 仓位表
|
||||
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
|
||||
// 库区表
|
||||
WQLObject sectTab = WQLObject.getWQLObject("st_ivt_sectattr");
|
||||
|
||||
// 参数类型转换 Map-> JSONObject
|
||||
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(whereJson));
|
||||
|
||||
// 分配明细集合
|
||||
ArrayList<HashMap> list = (ArrayList<HashMap>) whereJson.get("tableMater");
|
||||
|
||||
// 类型转换:linkenHashMap -> JSONObject
|
||||
JSONObject jsonDis = list.stream()
|
||||
.map(row -> JSONObject.parseObject(JSON.toJSONString(row)))
|
||||
.collect(Collectors.toList()).get(0);
|
||||
|
||||
// 判断当前木箱是否已经分配过货位
|
||||
StIvtIostorinvdis disDao = iStIvtIostorinvdisService.getById(jsonDis.getString("iostorinvdis_id"));
|
||||
|
||||
if (ObjectUtil.isNotEmpty(disDao.getStruct_id())) {
|
||||
throw new BadRequestException("该木箱已经分配过货位,无法继续分配!");
|
||||
}
|
||||
|
||||
// 主表实体类
|
||||
StIvtIostorinv mstDao = this.getById(disDao.getIostorinv_id());
|
||||
|
||||
// 用于锁定货位
|
||||
JSONObject jsonLock = new JSONObject();
|
||||
ArrayList<String> paramLockList = new ArrayList<>();
|
||||
|
||||
// 仓位对象
|
||||
JSONObject jsonAttr;
|
||||
|
||||
// 是否自动分配货位
|
||||
Boolean checked = jsonObject.getBoolean("checked");
|
||||
if (ObjectUtil.isNotEmpty(checked) && checked) {
|
||||
// 自动分配: 根据仓库、库区匹配一个合适的仓位
|
||||
JSONObject attrParam = new JSONObject();
|
||||
attrParam.put("stor_id", jsonObject.getString("stor_id"));
|
||||
attrParam.put("sect_id", jsonObject.getString("sect_id"));
|
||||
attrParam.put("material_id", disDao.getMaterial_id());
|
||||
attrParam.put("box_no", disDao.getBox_no());
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(jsonAttr)) {
|
||||
throw new BadRequestException("没有可用仓位!");
|
||||
}
|
||||
|
||||
// 调用业务处理类锁定货位
|
||||
paramLockList.add(jsonAttr.getString("struct_code"));
|
||||
inBussManageService.lockStruct(paramLockList, jsonLock);
|
||||
|
||||
// 判断是否虚拟区
|
||||
String work_status;
|
||||
Long task_id = null;
|
||||
|
||||
JSONObject jsonSect = sectTab.query("sect_id = '" + jsonAttr.getString("sect_id") + "'").uniqueResult(0);
|
||||
if (jsonSect.getString("sect_type_attr").equals(IOSEnum.SECT_TYPE.code("虚拟区"))) {
|
||||
// 虚拟区:执行状态为完成
|
||||
work_status = IOSEnum.WORK_STATUS.code("完成");
|
||||
task_id = IdUtil.getLongId();
|
||||
} else {
|
||||
work_status = IOSEnum.WORK_STATUS.code("未生成");
|
||||
}
|
||||
|
||||
// 更新分配明细
|
||||
iStIvtIostorinvdisService.update(
|
||||
new UpdateWrapper<StIvtIostorinvdis>().lambda()
|
||||
.set(StIvtIostorinvdis::getStruct_id,jsonAttr.getString("struct_id"))
|
||||
.set(StIvtIostorinvdis::getStruct_code,jsonAttr.getString("struct_code"))
|
||||
.set(StIvtIostorinvdis::getStruct_name,jsonAttr.getString("struct_name"))
|
||||
.set(StIvtIostorinvdis::getSect_id,jsonAttr.getString("sect_id"))
|
||||
.set(StIvtIostorinvdis::getSect_code,jsonAttr.getString("sect_code"))
|
||||
.set(StIvtIostorinvdis::getSect_name,jsonAttr.getString("sect_name"))
|
||||
.set(StIvtIostorinvdis::getWork_status, work_status)
|
||||
.set(StIvtIostorinvdis::getTask_id, task_id)
|
||||
.eq(StIvtIostorinvdis::getIostorinv_id, disDao.getIostorinv_id())
|
||||
.eq(StIvtIostorinvdis::getBox_no, disDao.getBox_no())
|
||||
);
|
||||
|
||||
// 更新库存
|
||||
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
|
||||
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||
.eq(StIvtIostorinvdis::getIostorinv_id, disDao.getIostorinv_id())
|
||||
.eq(StIvtIostorinvdis::getBox_no, disDao.getBox_no())
|
||||
);
|
||||
upateIvt(disDaoList, mstDao,IOSEnum.IVT_CHANGE.code("加待入"));
|
||||
|
||||
// 更新明细状态
|
||||
iStIvtIostorinvdtlService.updateStatus(disDao.getIostorinvdtl_id());
|
||||
|
||||
// 更新主表状态
|
||||
StIvtIostorinv mst = updateMstStatus(disDao.getIostorinv_id());
|
||||
mst.setDis_optid(Long.parseLong(SecurityUtils.getCurrentUserId()));
|
||||
mst.setDis_optname(SecurityUtils.getCurrentNickName());
|
||||
mst.setDis_time(DateUtil.now());
|
||||
this.updateById(mst);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void unDivStruct(Map whereJson) {
|
||||
|
||||
// 分配明细集合
|
||||
ArrayList<HashMap> list = (ArrayList<HashMap>) whereJson.get("tableMater");
|
||||
|
||||
// 类型转换:linkenHashMap -> JSONObject
|
||||
JSONObject jsonDis = list.stream()
|
||||
.map(row -> JSONObject.parseObject(JSON.toJSONString(row)))
|
||||
.collect(Collectors.toList()).get(0);
|
||||
|
||||
if (jsonDis.getIntValue("work_status") > Integer.parseInt(IOSEnum.WORK_STATUS.code("生成"))) {
|
||||
throw new BadRequestException("任务正在执行中或已经完成,不能取消!");
|
||||
}
|
||||
|
||||
// 解锁仓位
|
||||
ArrayList<String> paramLockList = new ArrayList<>();
|
||||
paramLockList.add(jsonDis.getString("struct_code"));
|
||||
|
||||
JSONObject jsonLock = new JSONObject();
|
||||
jsonLock.put("inv_type", "");
|
||||
jsonLock.put("inv_id", "");
|
||||
jsonLock.put("inv_code", "");
|
||||
jsonLock.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
jsonLock.put("operate", IOSEnum.IO_TYPE.code("入库"));
|
||||
|
||||
inBussManageService.lockStruct(paramLockList, jsonLock);
|
||||
|
||||
// 更新库存
|
||||
StIvtIostorinv mstDao = this.getById(jsonDis.getString("iostorinv_id"));
|
||||
|
||||
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
|
||||
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||
.eq(StIvtIostorinvdis::getStruct_code, jsonDis.getString("struct_code"))
|
||||
.eq(StIvtIostorinvdis::getIostorinv_id, jsonDis.getString("iostorinv_id"))
|
||||
.eq(StIvtIostorinvdis::getBox_no, jsonDis.getString("box_no"))
|
||||
);
|
||||
|
||||
upateIvt(disDaoList,mstDao,IOSEnum.IVT_CHANGE.code("减待入"));
|
||||
|
||||
// 更新分配明细状态
|
||||
iStIvtIostorinvdisService.update(
|
||||
new UpdateWrapper<StIvtIostorinvdis>().lambda()
|
||||
.eq(StIvtIostorinvdis::getStruct_code, jsonDis.getString("struct_code"))
|
||||
.eq(StIvtIostorinvdis::getIostorinv_id, jsonDis.getString("iostorinv_id"))
|
||||
.eq(StIvtIostorinvdis::getBox_no, jsonDis.getString("box_no"))
|
||||
.set(StIvtIostorinvdis::getPoint_id, null)
|
||||
.set(StIvtIostorinvdis::getSect_id, null)
|
||||
.set(StIvtIostorinvdis::getSect_code, "")
|
||||
.set(StIvtIostorinvdis::getSect_name, "")
|
||||
.set(StIvtIostorinvdis::getStruct_id, null)
|
||||
.set(StIvtIostorinvdis::getStruct_code, "")
|
||||
.set(StIvtIostorinvdis::getStruct_name, "")
|
||||
.set(StIvtIostorinvdis::getWork_status, IOSEnum.WORK_STATUS.code("未生成"))
|
||||
);
|
||||
|
||||
// 更新明细状态
|
||||
iStIvtIostorinvdtlService.updateStatus(jsonDis.getLongValue("iostorinvdtl_id"));
|
||||
|
||||
// 更新主表状态
|
||||
StIvtIostorinv mst = updateMstStatus(jsonDis.getLongValue("iostorinv_id"));
|
||||
mst.setDis_optid(Long.parseLong(SecurityUtils.getCurrentUserId()));
|
||||
mst.setDis_optname(SecurityUtils.getCurrentNickName());
|
||||
mst.setDis_time(DateUtil.now());
|
||||
this.updateById(mst);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void setPoint(Map whereJson) {
|
||||
|
||||
// 分配明细集合
|
||||
ArrayList<HashMap> list = (ArrayList<HashMap>) whereJson.get("tableMater");
|
||||
|
||||
// 类型转换:linkenHashMap -> JSONObject
|
||||
JSONObject jsonDis = list.stream()
|
||||
.map(row -> JSONObject.parseObject(JSON.toJSONString(row)))
|
||||
.collect(Collectors.toList()).get(0);
|
||||
|
||||
if (ObjectUtil.isEmpty(jsonDis.getString("struct_code"))) {
|
||||
throw new BadRequestException("请先分配货位!");
|
||||
}
|
||||
|
||||
// 点位实体类
|
||||
PointDto pointDto = pointService.findByCode((String) whereJson.get("point_code"));
|
||||
|
||||
// 主表实体类
|
||||
StIvtIostorinv mstDao = this.getById(jsonDis.getString("iostorinv_id"));
|
||||
|
||||
// 创建任务
|
||||
JSONObject jsonTaskParam = new JSONObject();
|
||||
// TODO 任务类型
|
||||
jsonTaskParam.put("task_type", "010501");
|
||||
jsonTaskParam.put("start_device_code", pointDto.getPoint_code());
|
||||
jsonTaskParam.put("next_device_code", jsonDis.getString("struct_code"));
|
||||
jsonTaskParam.put("vehicle_code", jsonDis.getString("box_no"));
|
||||
jsonTaskParam.put("inv_type", mstDao.getBill_type());
|
||||
jsonTaskParam.put("inv_id", mstDao.getIostorinv_id());
|
||||
jsonTaskParam.put("inv_code", mstDao.getBill_code());
|
||||
|
||||
String task_id = new TwoInTask().createTask(jsonTaskParam);
|
||||
|
||||
// 更新分配明细
|
||||
iStIvtIostorinvdisService.update(
|
||||
new UpdateWrapper<StIvtIostorinvdis>().lambda()
|
||||
.set(StIvtIostorinvdis::getTask_id, Long.parseLong(task_id))
|
||||
.set(StIvtIostorinvdis::getWork_status, IOSEnum.WORK_STATUS.code("生成"))
|
||||
.set(StIvtIostorinvdis::getPoint_id, pointDto.getPoint_id())
|
||||
.eq(StIvtIostorinvdis::getIostorinv_id, mstDao.getIostorinv_id())
|
||||
.eq(StIvtIostorinvdis::getStruct_code, jsonDis.getString("struct_code"))
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void reIssueTask(Map whereJson) {
|
||||
|
||||
String task_id = MapUtil.getStr(whereJson, "task_id");
|
||||
|
||||
//判断指令状态,只能下发生成、执行中状态的任务
|
||||
JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
|
||||
if (ObjectUtil.isEmpty(task_jo)) {
|
||||
throw new BadRequestException("请输入正确的任务号!");
|
||||
}
|
||||
|
||||
if (!TaskStatusEnum.START_AND_POINT.getCode().equals(task_jo.getString("task_status"))) {
|
||||
throw new BadRequestException("只能修改任务状态为未下发的任务!");
|
||||
}
|
||||
|
||||
//调用ACS接受任务接口
|
||||
AbstractAcsTask task = new TwoInTask();
|
||||
JSONObject result = task.immediateNotifyAcs(task_id);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(result)) {
|
||||
|
||||
if (String.valueOf(HttpStatus.OK.value()).equals(result.getString("status"))) {
|
||||
//更新任务为下发
|
||||
JSONObject task_map = new JSONObject();
|
||||
task_map.put("task_id", task_id);
|
||||
task.updateTaskStatus(task_map, TaskStatusEnum.EXECUTING.getCode());
|
||||
|
||||
} else {
|
||||
throw new BadRequestException("任务下发失败:" + result.getString("message"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void delTask(Map whereJson) {
|
||||
String task_id = MapUtil.getStr(whereJson, "task_id");
|
||||
|
||||
JSONObject jsonTask = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
|
||||
AbstractAcsTask taskClass = new TwoInTask();
|
||||
taskClass.updateTaskStatus(jsonTask,IOSEnum.IS_NOTANDYES.code("否"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void confirmTask(Map whereJson) {
|
||||
String task_id = MapUtil.getStr(whereJson, "task_id");
|
||||
|
||||
JSONObject jsonTask = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
|
||||
AbstractAcsTask taskClass = new TwoInTask();
|
||||
taskClass.updateTaskStatus(jsonTask,TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void confirm(Map whereJson) {
|
||||
|
||||
StIvtIostorinv mstDao = this.getById(MapUtil.getStr(whereJson, "iostorinv_id"));
|
||||
|
||||
// 明细必须为分配完
|
||||
List<StIvtIostorinvdtl> dtlDaoList = iStIvtIostorinvdtlService.list(
|
||||
new QueryWrapper<StIvtIostorinvdtl>().lambda()
|
||||
.eq(StIvtIostorinvdtl::getIostorinv_id, mstDao.getIostorinv_id())
|
||||
);
|
||||
|
||||
boolean is_divConfirm = dtlDaoList.stream()
|
||||
.allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完")) ||
|
||||
row.getBill_status().equals(IOSEnum.BILL_STATUS.code("完成"))
|
||||
);
|
||||
|
||||
if (!is_divConfirm) {
|
||||
throw new BadRequestException("明细未分配完!");
|
||||
}
|
||||
|
||||
confirmMst(mstDao);
|
||||
}
|
||||
|
||||
/**
|
||||
* 组织主表数据
|
||||
*
|
||||
* @param whereJson {}
|
||||
* @return StIvtIostorinv
|
||||
*/
|
||||
private StIvtIostorinv updataMst(Map whereJson,StIvtIostorinv mstDao) {
|
||||
private StIvtIostorinv updataMst(Map whereJson, StIvtIostorinv mstDao) {
|
||||
|
||||
// 仓库信息
|
||||
StorattrDto storattrDto = storattrService.findById(Long.parseLong((String) whereJson.get("stor_id")));
|
||||
@@ -252,4 +596,216 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
|
||||
}
|
||||
return mstDao;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新库存
|
||||
*
|
||||
* @param disDaoList: 分配明细集合
|
||||
* @param mstDao: 主表实体类
|
||||
*/
|
||||
private void upateIvt(List<StIvtIostorinvdis> disDaoList, StIvtIostorinv mstDao, String ivt_change) {
|
||||
|
||||
for (int i = 0; i < disDaoList.size(); i++) {
|
||||
StIvtIostorinvdis disDao = disDaoList.get(i);
|
||||
|
||||
JSONObject jsonParam = new JSONObject();
|
||||
jsonParam.put("struct_id", disDao.getStruct_id());
|
||||
jsonParam.put("material_id", disDao.getMaterial_id());
|
||||
jsonParam.put("pcsn", disDao.getPcsn());
|
||||
jsonParam.put("change_qty", disDao.getPlan_qty());
|
||||
jsonParam.put("bill_type_scode", mstDao.getBill_type());
|
||||
jsonParam.put("quality_scode", disDao.getQuality_scode());
|
||||
jsonParam.put("inv_id", mstDao.getIostorinv_id());
|
||||
jsonParam.put("bill_code", mstDao.getBill_code());
|
||||
jsonParam.put("bill_table", "ST_IVT_IOStorInv");
|
||||
jsonParam.put("qty_unit_id", disDao.getQty_unit_id());
|
||||
jsonParam.put("qty_unit_name", disDao.getQty_unit_name());
|
||||
storPublicService.IOStor(jsonParam, ivt_change);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新主表状态
|
||||
* @param iostorinv_id 主表标识
|
||||
*/
|
||||
public StIvtIostorinv updateMstStatus(Long iostorinv_id) {
|
||||
StIvtIostorinv mstDao = this.getById(iostorinv_id);
|
||||
|
||||
mstDao.setUpdate_optid(Long.parseLong(SecurityUtils.getCurrentUserId()));
|
||||
mstDao.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
mstDao.setUpdate_time(DateUtil.now());
|
||||
|
||||
// 查询所有明细
|
||||
List<StIvtIostorinvdtl> dtlDaoList = iStIvtIostorinvdtlService.list(
|
||||
new QueryWrapper<StIvtIostorinvdtl>().lambda()
|
||||
.eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id)
|
||||
);
|
||||
|
||||
boolean all_create = dtlDaoList.stream()
|
||||
.allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成")));
|
||||
|
||||
boolean one_create = dtlDaoList.stream()
|
||||
.anyMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配中")) ||
|
||||
row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完")) ||
|
||||
row.getBill_status().equals(IOSEnum.BILL_STATUS.code("完成"))
|
||||
);
|
||||
|
||||
boolean div_create = dtlDaoList.stream()
|
||||
.allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完")) ||
|
||||
row.getBill_status().equals(IOSEnum.BILL_STATUS.code("完成"))
|
||||
);
|
||||
|
||||
boolean confirm_create = dtlDaoList.stream()
|
||||
.allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("完成")));
|
||||
|
||||
if (all_create) {
|
||||
// 全生成状态
|
||||
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
|
||||
}
|
||||
|
||||
if (one_create) {
|
||||
// 至少一个别的状态
|
||||
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
|
||||
}
|
||||
|
||||
if (div_create) {
|
||||
// 分配完状态
|
||||
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
|
||||
}
|
||||
|
||||
if (confirm_create) {
|
||||
// 完成状态
|
||||
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
|
||||
mstDao.setConfirm_optid(Long.parseLong(SecurityUtils.getCurrentUserId()));
|
||||
mstDao.setConfirm_optname(SecurityUtils.getCurrentNickName());
|
||||
mstDao.setConfirm_time(DateUtil.now());
|
||||
|
||||
// 调用单据确认
|
||||
confirmMst(mstDao);
|
||||
}
|
||||
|
||||
this.updateById(mstDao);
|
||||
return mstDao;
|
||||
}
|
||||
|
||||
/**
|
||||
* 完成单据:更新主表、明细表、分配明细表、更新库存、更新仓位、更新任务
|
||||
* @param mstDao :主表实体类
|
||||
*/
|
||||
private void confirmMst(StIvtIostorinv mstDao) {
|
||||
|
||||
// 仓位表
|
||||
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
|
||||
|
||||
// 仓位表
|
||||
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
|
||||
|
||||
// 更新库存
|
||||
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
|
||||
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||
.eq(StIvtIostorinvdis::getIostorinv_id, mstDao.getIostorinv_id())
|
||||
);
|
||||
|
||||
upateIvt(disDaoList,mstDao,IOSEnum.IVT_CHANGE.code("加库存"));
|
||||
|
||||
// 更新仓位:解锁仓位、加载具、清除锁定信息
|
||||
String struct_code_in = disDaoList.stream()
|
||||
.map(StIvtIostorinvdis::getStruct_code)
|
||||
.distinct()
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
List<JSONObject> attrList = attrTab.query("struct_code IN ('" + struct_code_in + "')")
|
||||
.getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
List<JSONObject> collect = disDaoList.stream()
|
||||
.map(row -> {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("struct_code", row.getStruct_code());
|
||||
json.put("storagevehicle_code", row.getStoragevehicle_code());
|
||||
return json;
|
||||
})
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
for (int i = 0; i < collect.size(); i++) {
|
||||
JSONObject jsonObject = collect.get(i);
|
||||
|
||||
List<JSONObject> jsonAttrList = attrList.stream()
|
||||
.filter(row -> row.getString("struct_code").equals(jsonObject.getString("struct_code")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (ObjectUtil.isEmpty(jsonAttrList)) {
|
||||
throw new BadRequestException("仓位信息错误,请检查!"+jsonObject.getString("struct_code"));
|
||||
}
|
||||
|
||||
JSONObject jsonAttr = jsonAttrList.get(0);
|
||||
jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
|
||||
jsonAttr.put("storagevehicle_code", jsonObject.getString("storagevehicle_code"));
|
||||
jsonAttr.put("inv_type", "");
|
||||
jsonAttr.put("inv_id", "");
|
||||
jsonAttr.put("inv_code", "");
|
||||
attrTab.update(jsonAttr);
|
||||
}
|
||||
|
||||
// 更新分配明细为完成
|
||||
iStIvtIostorinvdisService.update(
|
||||
new UpdateWrapper<StIvtIostorinvdis>().lambda()
|
||||
.set(StIvtIostorinvdis::getWork_status, IOSEnum.WORK_STATUS.code("完成"))
|
||||
.eq(StIvtIostorinvdis::getIostorinv_id, mstDao.getIostorinv_id())
|
||||
);
|
||||
|
||||
// 更新明细为完成
|
||||
iStIvtIostorinvdtlService.update(
|
||||
new UpdateWrapper<StIvtIostorinvdtl>().lambda()
|
||||
.set(StIvtIostorinvdtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
.eq(StIvtIostorinvdtl::getIostorinv_id, mstDao.getIostorinv_id())
|
||||
);
|
||||
|
||||
// 更新主表为完成
|
||||
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
|
||||
mstDao.setConfirm_optid(Long.parseLong(SecurityUtils.getCurrentUserId()));
|
||||
mstDao.setConfirm_optname(SecurityUtils.getCurrentNickName());
|
||||
mstDao.setConfirm_time(DateUtil.now());
|
||||
|
||||
// 更新任务为完成
|
||||
JSONObject jsonTaskParam = new JSONObject();
|
||||
jsonTaskParam.put("task_status", TaskStatusEnum.FINISHED.getCode());
|
||||
jsonTaskParam.put("update_optid", SecurityUtils.getCurrentUserId());
|
||||
jsonTaskParam.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||
jsonTaskParam.put("update_time", DateUtil.now());
|
||||
|
||||
String task_id_in = disDaoList.stream()
|
||||
.map(row -> row.getTask_id().toString())
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
taskTab.update(jsonTaskParam,"task_id IN ('"+task_id_in+"') AND task_status <> '"+TaskStatusEnum.FINISHED.getCode()+"'");
|
||||
|
||||
//返检入库,将回传字段改为1
|
||||
if (mstDao.getBill_type().equals(IOSEnum.IN_TYPE.code("返检入库"))) {
|
||||
mstDao.setIs_upload(IOSEnum.IS_NOTANDYES.code("是"));
|
||||
}
|
||||
|
||||
this.updateById(mstDao);
|
||||
|
||||
// 生产入库:回传mes
|
||||
/* if (mstDao.getBill_type().equals(IOSEnum.IN_TYPE.code("生产入库"))) {
|
||||
InAndOutRetrunServiceImpl bean = SpringContextHolder.getBean(InAndOutRetrunServiceImpl.class);
|
||||
|
||||
JSONObject param = new JSONObject();
|
||||
JSONArray rows = new JSONArray();
|
||||
|
||||
rows.add(mstDao);
|
||||
param.put("rows", rows);
|
||||
try {
|
||||
bean.uploadMES(param);
|
||||
} catch (Exception e) {
|
||||
log.info(e.getMessage());
|
||||
} finally {
|
||||
this.updateById(mstDao);
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,26 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
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.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.StIvtIostorinvdisMapper;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -26,6 +33,18 @@ import java.util.HashMap;
|
||||
@Service
|
||||
public class StIvtIostorinvdisServiceImpl extends ServiceImpl<StIvtIostorinvdisMapper, StIvtIostorinvdis> implements IStIvtIostorinvdisService {
|
||||
|
||||
/**
|
||||
* 出入库明细服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvdtlService iStIvtIostorinvdtlService;
|
||||
|
||||
/**
|
||||
* 出入库主表服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvService iStIvtIostorinvService;
|
||||
|
||||
@Override
|
||||
public void insertDis(Long iostorinv_id, HashMap<String, ArrayList<JSONObject>> disDaoMap) {
|
||||
|
||||
@@ -38,7 +57,7 @@ public class StIvtIostorinvdisServiceImpl extends ServiceImpl<StIvtIostorinvdisM
|
||||
// 批量插入分配明细集合
|
||||
ArrayList<StIvtIostorinvdis> disDaoList = new ArrayList<>();
|
||||
|
||||
for(String iostorinvdtl_id : disDaoMap.keySet()) {
|
||||
for (String iostorinvdtl_id : disDaoMap.keySet()) {
|
||||
ArrayList<JSONObject> disList = disDaoMap.get(iostorinvdtl_id);
|
||||
|
||||
for (int i = 0; i < disList.size(); i++) {
|
||||
@@ -49,32 +68,75 @@ public class StIvtIostorinvdisServiceImpl extends ServiceImpl<StIvtIostorinvdisM
|
||||
.iostorinv_id(iostorinv_id)
|
||||
.iostorinvdtl_id(Long.parseLong(iostorinvdtl_id))
|
||||
.seq_no(BigDecimal.valueOf(i + 1))
|
||||
.sect_id(json.getLongValue("sect_id"))
|
||||
.sect_code(json.getString("sect_code"))
|
||||
.sect_name(json.getString("sect_name"))
|
||||
.struct_id(json.getLongValue("struct_id"))
|
||||
.struct_code(json.getString("struct_code"))
|
||||
.struct_name(json.getString("struct_name"))
|
||||
.material_id(json.getLongValue("material_id"))
|
||||
.pcsn(json.getString("pcsn"))
|
||||
.quality_scode(json.getString("quality_scode"))
|
||||
.work_status(json.getString("work_status"))
|
||||
.task_id(json.getLongValue("task_id"))
|
||||
.storagevehicle_id(json.getLongValue("storagevehicle_id"))
|
||||
.storagevehicle_code(json.getString("storagevehicle_code"))
|
||||
.storagevehicle_code(json.getString("box_no"))
|
||||
.is_issued(IOSEnum.IS_NOTANDYES.code("否"))
|
||||
.qty_unit_id(json.getLongValue("qty_unit_id"))
|
||||
.qty_unit_name(json.getString("qty_unit_name"))
|
||||
.plan_qty(json.getBigDecimal("plan_qty"))
|
||||
.real_qty(json.getBigDecimal("real_qty"))
|
||||
.point_id(json.getLongValue("point_id"))
|
||||
.box_no(json.getString("box_no"))
|
||||
.build();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(json.getString("sect_id"))) {
|
||||
disDao.setSect_id(json.getLongValue("sect_id"));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(json.getString("struct_id"))) {
|
||||
disDao.setStruct_id(json.getLongValue("struct_id"));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(json.getString("task_id"))) {
|
||||
disDao.setTask_id(json.getLongValue("task_id"));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(json.getString("storagevehicle_id"))) {
|
||||
disDao.setStoragevehicle_id(json.getLongValue("storagevehicle_id"));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(json.getString("point_id"))) {
|
||||
disDao.setPoint_id(json.getLongValue("point_id"));
|
||||
}
|
||||
|
||||
disDaoList.add(disDao);
|
||||
}
|
||||
}
|
||||
|
||||
this.saveBatch(disDaoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatusTask(String task_id, String work_status, String is_issued) {
|
||||
this.update(
|
||||
new UpdateWrapper<StIvtIostorinvdis>().lambda()
|
||||
.set(StIvtIostorinvdis::getWork_status, work_status)
|
||||
.set(StIvtIostorinvdis::getIs_issued, is_issued)
|
||||
.eq(StIvtIostorinvdis::getTask_id, task_id)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void confirmDisIn(String task_id) {
|
||||
// 更新分配明细为完成
|
||||
List<StIvtIostorinvdis> disDaoList = this.list(
|
||||
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||
.eq(StIvtIostorinvdis::getTask_id, task_id)
|
||||
);
|
||||
|
||||
disDaoList.forEach(row -> {
|
||||
row.setWork_status(IOSEnum.WORK_STATUS.code("完成"));
|
||||
});
|
||||
|
||||
this.updateBatchById(disDaoList);
|
||||
|
||||
// 更新明细
|
||||
iStIvtIostorinvdtlService.updateStatus(disDaoList.get(0).getIostorinvdtl_id());
|
||||
|
||||
// 更新主表
|
||||
SpringContextHolder.getBean(StIvtIostorinvServiceImpl.class).updateMstStatus(disDaoList.get(0).getIostorinv_id());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,15 +3,19 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
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.IStIvtIostorinvdisService;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService;
|
||||
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;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -31,6 +35,12 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlMapper, StIvtIostorinvdtl> implements IStIvtIostorinvdtlService {
|
||||
|
||||
/**
|
||||
* 出入库分配明细服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtIostorinvdisService iStIvtIostorinvdisService;
|
||||
|
||||
@Override
|
||||
public HashMap<String, ArrayList<JSONObject>>insertDtl(List<JSONObject> rows, Long iostorinv_id) {
|
||||
// 先删除所有明细并更新子卷包装关系
|
||||
@@ -98,11 +108,9 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
|
||||
.qty_unit_id(unitDao.getLongValue("measure_unit_id"))
|
||||
.qty_unit_name(unitDao.getString("unit_name"))
|
||||
.plan_qty(row.getBigDecimal("plan_qty"))
|
||||
.source_billdtl_id(row.getLongValue("source_billdtl_id"))
|
||||
.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_billdtl_id(row.getLongValue("base_billdtl_id"))
|
||||
.base_bill_type(row.getString("base_bill_type"))
|
||||
.base_bill_code(row.getString("base_bill_code"))
|
||||
.base_bill_table(row.getString("base_bill_table"))
|
||||
@@ -114,6 +122,14 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
|
||||
.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);
|
||||
|
||||
// 1明细对应多条分配明细:此处为1对1
|
||||
@@ -131,6 +147,60 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(Long iostorinvdtl_id) {
|
||||
|
||||
StIvtIostorinvdtl dtlDao = this.getById(iostorinvdtl_id);
|
||||
|
||||
// 此明细下所有分配明细
|
||||
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
|
||||
new QueryWrapper<StIvtIostorinvdis>().lambda()
|
||||
.eq(StIvtIostorinvdis::getIostorinvdtl_id, iostorinvdtl_id)
|
||||
);
|
||||
|
||||
boolean no_create = disDaoList.stream()
|
||||
.allMatch(row -> ObjectUtil.isEmpty(row.getStruct_code()));
|
||||
|
||||
boolean one_create = disDaoList.stream()
|
||||
.anyMatch(row -> ObjectUtil.isNotEmpty(row.getStruct_code()));
|
||||
|
||||
boolean all_create = disDaoList.stream()
|
||||
.allMatch(row -> ObjectUtil.isNotEmpty(row.getStruct_code()));
|
||||
|
||||
boolean confirm_create = disDaoList.stream()
|
||||
.allMatch(row -> row.getWork_status().equals(IOSEnum.WORK_STATUS.code("完成")));
|
||||
|
||||
if (no_create) {
|
||||
// 全都未生成
|
||||
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
|
||||
}
|
||||
|
||||
if (one_create) {
|
||||
// 一个生成
|
||||
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
|
||||
}
|
||||
|
||||
if (all_create) {
|
||||
// 分配完
|
||||
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完"));
|
||||
}
|
||||
|
||||
if (confirm_create) {
|
||||
// 完成
|
||||
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
|
||||
}
|
||||
|
||||
this.updateById(dtlDao);
|
||||
|
||||
// 更新此木箱中所有的明细状态
|
||||
this.update(
|
||||
new UpdateWrapper<StIvtIostorinvdtl>().lambda()
|
||||
.set(StIvtIostorinvdtl::getBill_status, dtlDao.getBill_status())
|
||||
.eq(StIvtIostorinvdtl::getIostorinv_id, dtlDao.getIostorinv_id())
|
||||
.eq(StIvtIostorinvdtl::getBox_no, dtlDao.getBox_no())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 组织分配明细所需数据
|
||||
* @param dtlDao: 明细实体类
|
||||
|
||||
@@ -0,0 +1,460 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 入库业务处理 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-11-10
|
||||
*/
|
||||
@Service
|
||||
public class InBussManageServiceImpl implements InBussManageService {
|
||||
|
||||
/**
|
||||
* 不需要查询的排集合
|
||||
*/
|
||||
private List<String> notInRowList;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void lockStruct(ArrayList<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 JSONObject getOneStruct(JSONObject jsonObject) {
|
||||
/*
|
||||
* 成品入库规则:
|
||||
* 1.负载均衡:相同木箱规格(长宽高)、订单、客户、物料的 平均分配在每个巷道
|
||||
* 2.相同木箱规格、订单、客户、物料的可以放双伸位,即可以放2个木箱
|
||||
* 匹配货位逻辑:
|
||||
* 1.根据仓库、库区查询所有货位,判断是否有空位
|
||||
* 2.确定巷道:查看每个巷道相同木箱规格等 的数量,找到数量最小的那个巷道
|
||||
* 1).如果没有相同木箱的,则新开一个巷道(从下往上)
|
||||
* 2).如果有相同木箱的,则查看有没有空的巷道(优先入空巷道)
|
||||
* 3.确定哪排:查看每排相同木箱规格等 的数量,找到数量最小的那排
|
||||
* 1).如果没有相同木箱的,则新开一个排(从下往上)
|
||||
* 2).如果有相同木箱的,则查看有没有空的一排(优先入空排)
|
||||
* 4.确定伸位:
|
||||
* 1)如果当前仓位为深位则直接入
|
||||
* 2)如果当前仓位为浅位,则判断对应深位是否有货,有则入、没有则入深位
|
||||
*/
|
||||
// 仓位表
|
||||
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
|
||||
// 子卷包装关系
|
||||
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
|
||||
|
||||
/*
|
||||
* 判断是否有仓位
|
||||
* 判断条件:库区、仓库、是否启用、是否删除、未锁定、没有载具
|
||||
*/
|
||||
JSONArray attrArry = attrTab.query("IFNULL(storagevehicle_code,'') = '' " +
|
||||
"AND is_used = '" + IOSEnum.IS_NOTANDYES.code("是") + "' AND is_delete = '" + IOSEnum.IS_NOTANDYES.code("否") + "' " +
|
||||
"AND lock_type = '" + IOSEnum.LOCK_TYPE.code("未锁定") + "' AND stor_id = '"+jsonObject.getString("stor_id")+"' " +
|
||||
"AND sect_id = '"+jsonObject.getString("sect_id")+"'").getResultJSONArray(0);
|
||||
|
||||
if (ObjectUtil.isEmpty(attrArry)) {
|
||||
throw new BadRequestException("仓位不足!");
|
||||
}
|
||||
|
||||
/*
|
||||
* 确定巷道:查看每个巷道相同木箱规格等 的数量,找到数量最小的那个巷道
|
||||
*/
|
||||
// 获取木箱入库巷道
|
||||
JSONObject jsonSub = subTab.query("package_box_sn = '" + jsonObject.getString("box_no") + "'").uniqueResult(0);
|
||||
jsonSub.put("stor_id", jsonObject.getString("stor_id"));
|
||||
jsonSub.put("sect_id", jsonObject.getString("sect_id"));
|
||||
jsonSub.put("material_id", jsonObject.getString("material_id"));
|
||||
|
||||
String block_num = getMinBlock(jsonSub);
|
||||
/*
|
||||
* 确定哪排:确定哪排:查看每排相同木箱规格等 的数量,找到数量最小的那排
|
||||
*/
|
||||
jsonSub.put("block_num",block_num);
|
||||
String row_num = getMinRow(jsonSub);
|
||||
|
||||
/*
|
||||
* 确定伸位,找仓位
|
||||
*/
|
||||
jsonSub.put("row_num",row_num);
|
||||
JSONObject jsonAttr = queryStruct(jsonSub);
|
||||
|
||||
// 为空则新找巷道
|
||||
if (ObjectUtil.isEmpty(jsonAttr)) {
|
||||
|
||||
jsonSub.put("flag", "1");
|
||||
jsonSub.put("not_block", jsonSub.getString("block_num"));
|
||||
|
||||
List<JSONObject> blockList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
for (int i = 0; i < blockList.size(); i++) {
|
||||
JSONObject json = blockList.get(i);
|
||||
json.put("stor_id", jsonObject.getString("stor_id"));
|
||||
json.put("sect_id", jsonObject.getString("sect_id"));
|
||||
json.put("material_id", jsonObject.getString("material_id"));
|
||||
json.put("customer_name", jsonSub.getString("customer_name"));
|
||||
json.put("sale_order_name", jsonSub.getString("sale_order_name"));
|
||||
json.put("box_length", jsonSub.getString("box_length"));
|
||||
json.put("box_width", jsonSub.getString("box_width"));
|
||||
json.put("box_high", jsonSub.getString("box_high"));
|
||||
|
||||
String row_num_2 = getMinRow(json);
|
||||
json.put("row_num",row_num_2);
|
||||
JSONObject jsonAttr_2 = queryStruct(json);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonAttr_2)) {
|
||||
jsonAttr = jsonAttr_2;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return jsonAttr;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最小巷道
|
||||
* @param jsonSub {
|
||||
* jsonSub:木箱信息
|
||||
* sect_id:库区
|
||||
* stor_id:仓库
|
||||
* material_id:物料
|
||||
* }
|
||||
* @return String : 巷道
|
||||
*/
|
||||
private String getMinBlock(JSONObject jsonSub) {
|
||||
jsonSub.put("flag", "1");
|
||||
|
||||
// 获取仓库、库区有空位的巷道
|
||||
List<JSONObject> blockList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
/*
|
||||
* 查询所属巷道所有木箱
|
||||
*/
|
||||
String block_in = blockList.stream()
|
||||
.map(row -> row.getString("block_num"))
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
jsonSub.put("flag", "2");
|
||||
jsonSub.put("block_in", "('"+block_in+"')");
|
||||
|
||||
List<JSONObject> boxAllList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 为空说明没有木箱,返回最小巷道
|
||||
if (ObjectUtil.isEmpty(boxAllList)) {
|
||||
return blockList.get(0).getString("block_num");
|
||||
}
|
||||
|
||||
// 不区分木箱规格:最小木箱数的巷道
|
||||
JSONObject jsonBlockMin = sumBlockMinNum(blockList, boxAllList);
|
||||
|
||||
/*
|
||||
* 查询所属巷道所有相同规格的木箱
|
||||
*/
|
||||
jsonSub.put("flag", "3");
|
||||
List<JSONObject> boxAllLikeList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 为空说明库内没有相同规格的木箱,则返回不区分木箱规格的最小巷道
|
||||
if (ObjectUtil.isEmpty(boxAllLikeList)) {
|
||||
return jsonBlockMin.getString("block_num");
|
||||
}
|
||||
|
||||
// 区分木箱规格:最小木箱的巷道
|
||||
JSONObject jsonBlockLikeMin = sumBlockMinNum(blockList,boxAllLikeList);
|
||||
|
||||
/*
|
||||
* 比较两个巷道的总木箱数,取最小的
|
||||
*/
|
||||
// 查询区分木箱规格最小木箱的巷道的总木箱数
|
||||
List<JSONObject> boxAllPackageLikeList = WQL.getWO("BST_INRULE").addParam("flag", "2").addParam("stor_id", jsonSub.getString("stor_id"))
|
||||
.addParam("sect_id", jsonSub.getString("sect_id")).addParam("block_num", jsonBlockLikeMin.getString("block_num"))
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
return jsonBlockMin.getIntValue("box_num") > boxAllPackageLikeList.size() ?
|
||||
jsonBlockLikeMin.getString("block_num") : jsonBlockMin.getString("block_num");
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算最小巷道木箱数
|
||||
* @param blockList : 所有巷道
|
||||
* @param boxAllList: 所有木箱
|
||||
* @return JSONObject:最小木箱数的巷道 JSONObject{block_num,box_num}
|
||||
*/
|
||||
private JSONObject sumBlockMinNum(List<JSONObject> blockList, List<JSONObject> boxAllList) {
|
||||
|
||||
// 统计各巷道木箱数
|
||||
ArrayList<JSONObject> blockBoxList = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < blockList.size(); i++) {
|
||||
JSONObject jsonBlock = blockList.get(i);
|
||||
|
||||
List<JSONObject> box_num = boxAllList.stream()
|
||||
.filter(row -> row.getString("block_num").equals(jsonBlock.getString("block_num")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
jsonBlock.put("box_num", String.valueOf(box_num.size()));
|
||||
blockBoxList.add(jsonBlock);
|
||||
}
|
||||
|
||||
// 最小木箱数的巷道
|
||||
List<JSONObject> boxNumList = blockBoxList.stream()
|
||||
.sorted(Comparator.comparing(row -> row.getString("box_num")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return boxNumList.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最小排
|
||||
* @param jsonSub {
|
||||
* jsonSub:木箱信息
|
||||
* sect_id:库区
|
||||
* stor_id:仓库
|
||||
* material_id:物料
|
||||
* block_num: 巷道
|
||||
* not_row_in: 排(用于递归查询)
|
||||
* }
|
||||
* @return String : 排
|
||||
*/
|
||||
private String getMinRow(JSONObject jsonSub) {
|
||||
|
||||
jsonSub.put("flag", "4");
|
||||
|
||||
// 获取此仓库、库区、巷道 有空位的排
|
||||
List<JSONObject> rowList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
/*
|
||||
* 查询所属排的所有木箱
|
||||
*/
|
||||
String row_in = rowList.stream()
|
||||
.map(row -> row.getString("row_num"))
|
||||
.collect(Collectors.joining("','"));
|
||||
|
||||
jsonSub.put("flag", "2");
|
||||
jsonSub.put("row_in", "('"+row_in+"')");
|
||||
|
||||
List<JSONObject> boxAllList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 为空说明没有木箱,返回最小排
|
||||
if (ObjectUtil.isEmpty(boxAllList)) {
|
||||
return rowList.get(0).getString("row_num");
|
||||
}
|
||||
|
||||
// 不区分木箱规格:最小木箱数的排
|
||||
JSONObject jsonRowMin = sumRowMinNum(rowList, boxAllList);
|
||||
|
||||
/*
|
||||
* 查询所属排所有相同规格的木箱
|
||||
*/
|
||||
jsonSub.put("flag", "3");
|
||||
List<JSONObject> boxAllLikeList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 为空说明库内没有相同规格的木箱,则返回不区分木箱规格的最小排
|
||||
if (ObjectUtil.isEmpty(boxAllLikeList)) {
|
||||
return jsonRowMin.getString("row_num");
|
||||
}
|
||||
|
||||
// 区分木箱规格:最小木箱数的排
|
||||
JSONObject jsonRowLikeMin = sumRowMinNum(rowList, boxAllLikeList);
|
||||
|
||||
/*
|
||||
* 比较两个排的总木箱数,取最小的
|
||||
*/
|
||||
// 查询区分木箱规格最小木箱的排总木箱数
|
||||
List<JSONObject> boxAllPackageLikeList = WQL.getWO("BST_INRULE").addParam("flag", "2").addParam("stor_id", jsonSub.getString("stor_id"))
|
||||
.addParam("sect_id", jsonSub.getString("sect_id")).addParam("block_num", jsonSub.getString("block_num"))
|
||||
.addParam("row_num", jsonRowLikeMin.getString("row_num"))
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
return jsonRowMin.getIntValue("box_num") > boxAllPackageLikeList.size() ?
|
||||
jsonRowLikeMin.getString("row_num") : jsonRowMin.getString("row_num");
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算最小木箱的排
|
||||
* @param rowList : 所有排
|
||||
* @param boxAllList: 所有木箱
|
||||
* @return JSONObject:最小木箱数的排 JSONObject{row_num,box_num}
|
||||
*/
|
||||
private JSONObject sumRowMinNum(List<JSONObject> rowList, List<JSONObject> boxAllList) {
|
||||
|
||||
// 统计各排木箱数
|
||||
ArrayList<JSONObject> rowkBoxList = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < rowList.size(); i++) {
|
||||
JSONObject jsonRow = rowList.get(i);
|
||||
|
||||
List<JSONObject> box_num = boxAllList.stream()
|
||||
.filter(row -> row.getString("row_num").equals(jsonRow.getString("row_num")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
jsonRow.put("box_num", String.valueOf(box_num.size()));
|
||||
rowkBoxList.add(jsonRow);
|
||||
}
|
||||
|
||||
// 最小木箱数的排
|
||||
List<JSONObject> boxNumList = rowkBoxList.stream()
|
||||
.sorted(Comparator.comparing(row -> row.getString("box_num")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return boxNumList.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取仓位
|
||||
* @param jsonSub {
|
||||
* jsonSub:木箱信息
|
||||
* sect_id:库区
|
||||
* stor_id:仓库
|
||||
* material_id:物料
|
||||
* block_num: 巷道
|
||||
* row_num :排
|
||||
* }
|
||||
* @return JSONObject : 仓位
|
||||
*/
|
||||
private JSONObject queryStruct(JSONObject jsonSub) {
|
||||
|
||||
JSONObject jsonAttr = getStruct(jsonSub);
|
||||
|
||||
// 为空找此巷道新的一排
|
||||
if (ObjectUtil.isEmpty(jsonAttr)) {
|
||||
notInRowList.add(jsonSub.getString("row_num"));
|
||||
|
||||
String join = "('" + String.join("','", notInRowList) + "')";
|
||||
jsonSub.put("not_row_in", join);
|
||||
|
||||
// 新的一排
|
||||
String row_num_new = this.getMinRow(jsonSub);
|
||||
jsonSub.put("row_num",row_num_new);
|
||||
|
||||
jsonAttr = this.getStruct(jsonSub);
|
||||
}
|
||||
|
||||
return jsonAttr;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取一个货位公共方法
|
||||
* @param jsonSub {
|
||||
* jsonSub:木箱信息
|
||||
* sect_id:库区
|
||||
* stor_id:仓库
|
||||
* material_id:物料
|
||||
* block_num: 巷道
|
||||
* row_num :排
|
||||
* }
|
||||
* @return JSONObject : 仓位
|
||||
*/
|
||||
private JSONObject getStruct(JSONObject jsonSub) {
|
||||
|
||||
// 获取此仓库、库区、巷道、排的所有空位 根据列、层、深度排序
|
||||
jsonSub.put("flag", "5");
|
||||
|
||||
List<JSONObject> rowStructList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
// 获取此仓库、库区、巷道、排的所有仓位
|
||||
jsonSub.put("flag", "6");
|
||||
|
||||
List<JSONObject> structAllList = WQL.getWO("BST_INRULE").addParamMap(jsonSub)
|
||||
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
|
||||
|
||||
JSONObject jsonAttr = new JSONObject();
|
||||
|
||||
for (int i = 0; i < rowStructList.size(); i++) {
|
||||
JSONObject json = rowStructList.get(i);
|
||||
|
||||
// 判断伸位
|
||||
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) {
|
||||
// 无需深度
|
||||
jsonAttr = json;
|
||||
} else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) {
|
||||
/*
|
||||
* 深货位:判断浅是否阻挡
|
||||
*/
|
||||
// 获取此货位对应的浅货位
|
||||
List<JSONObject> lowAttr = structAllList.stream()
|
||||
.filter(row -> row.getString("col_num").equals(json.getString("col_num")) &&
|
||||
row.getString("layer_num").equals(json.getString("layer_num")) &&
|
||||
row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (ObjectUtil.isEmpty(lowAttr) || lowAttr.size() != 1) {
|
||||
throw new BadRequestException("仓位:" + json.getString("stor_code") + "对应的浅货位错误!");
|
||||
}
|
||||
|
||||
// 判断是否有木箱
|
||||
JSONObject jsonAttrLow = lowAttr.get(0);
|
||||
if (ObjectUtil.isEmpty(jsonAttrLow.getString("storagevehicle_code")) && jsonAttrLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
// 没有木箱
|
||||
jsonAttr = json;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
} else if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅"))) {
|
||||
/*
|
||||
* 浅货位:判断深货位是否空洞
|
||||
*/
|
||||
// 获取此货位对应的深货位
|
||||
List<JSONObject> darkAttr = structAllList.stream()
|
||||
.filter(row -> row.getString("col_num").equals(json.getString("col_num")) &&
|
||||
row.getString("layer_num").equals(json.getString("layer_num")) &&
|
||||
row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (ObjectUtil.isEmpty(darkAttr) || darkAttr.size() != 1) {
|
||||
throw new BadRequestException("仓位:" + json.getString("stor_code") + "对应的深货位错误!");
|
||||
}
|
||||
|
||||
// 判断是否有木箱
|
||||
JSONObject jsonAttrDark = darkAttr.get(0);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(jsonAttrDark.getString("storagevehicle_code")) && jsonAttrDark.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
|
||||
jsonAttr = json;
|
||||
} else {
|
||||
jsonAttr = jsonAttrDark;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return jsonAttr;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 入库业务处理 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-11-16
|
||||
*/
|
||||
public interface InBussManageService {
|
||||
|
||||
/**
|
||||
* 上锁、解锁仓位处理
|
||||
* @param param:[
|
||||
* {
|
||||
* struct_code: 仓位编码
|
||||
* }
|
||||
* ]
|
||||
* @param json {
|
||||
* inv_type:单据类型
|
||||
* inv_id:单据标识
|
||||
* inv_code:单据编码
|
||||
* lock_type: 锁定类型
|
||||
* operate:单据类型
|
||||
* }
|
||||
*/
|
||||
void lockStruct(ArrayList<String> param, JSONObject json);
|
||||
|
||||
/**
|
||||
* 获取一个仓位
|
||||
* @param jsonObject: {
|
||||
* stor_id:仓库标识
|
||||
* sect_id:库区标识
|
||||
* material_id: 物料标识
|
||||
* box_no:木箱号
|
||||
* }
|
||||
* @return JSONObject 仓位对象
|
||||
*/
|
||||
JSONObject getOneStruct(JSONObject jsonObject);
|
||||
}
|
||||
@@ -0,0 +1,243 @@
|
||||
[交易说明]
|
||||
交易名: 入库逻辑
|
||||
所属模块:
|
||||
功能简述:
|
||||
版权所有:
|
||||
表引用:
|
||||
版本经历:
|
||||
|
||||
[数据库]
|
||||
--指定数据库,为空采用默认值,默认为db.properties中列出的第一个库
|
||||
|
||||
[IO定义]
|
||||
#################################################
|
||||
## 表字段对应输入参数
|
||||
#################################################
|
||||
输入.flag TYPEAS s_string
|
||||
输入.stor_id TYPEAS s_string
|
||||
输入.sect_id TYPEAS s_string
|
||||
输入.material_id TYPEAS s_string
|
||||
输入.customer_name TYPEAS s_string
|
||||
输入.sale_order_name TYPEAS s_string
|
||||
输入.box_length TYPEAS s_string
|
||||
输入.box_width TYPEAS s_string
|
||||
输入.box_high TYPEAS s_string
|
||||
输入.block_in TYPEAS f_string
|
||||
输入.row_in TYPEAS f_string
|
||||
输入.block_num TYPEAS s_string
|
||||
输入.row_num TYPEAS s_string
|
||||
输入.not_row_in TYPEAS f_string
|
||||
输入.not_block TYPEAS s_string
|
||||
|
||||
[临时表]
|
||||
--这边列出来的临时表就会在运行期动态创建
|
||||
|
||||
[临时变量]
|
||||
--所有中间过程变量均可在此处定义
|
||||
|
||||
[业务过程]
|
||||
|
||||
##########################################
|
||||
# 1、输入输出检查 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 2、主过程前处理 #
|
||||
##########################################
|
||||
|
||||
|
||||
##########################################
|
||||
# 3、业务主过程 #
|
||||
##########################################
|
||||
|
||||
IF 输入.flag = "1"
|
||||
QUERY
|
||||
SELECT
|
||||
attr.block_num
|
||||
FROM
|
||||
st_ivt_structattr attr
|
||||
WHERE
|
||||
attr.is_used = '1'
|
||||
AND attr.is_delete = '0'
|
||||
AND attr.lock_type = '1'
|
||||
AND IFNULL(attr.storagevehicle_code,'') = ''
|
||||
AND attr.stor_id = 输入.stor_id
|
||||
AND attr.sect_id = 输入.sect_id
|
||||
|
||||
group by attr.block_num
|
||||
order by attr.block_num
|
||||
|
||||
OPTION 输入.not_block <> ""
|
||||
attr.block_num <> 输入.not_block
|
||||
ENDOPTION
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "2"
|
||||
QUERY
|
||||
SELECT
|
||||
attr.*
|
||||
FROM
|
||||
st_ivt_structattr attr
|
||||
WHERE
|
||||
attr.is_used = '1'
|
||||
AND attr.is_delete = '0'
|
||||
AND attr.stor_id = 输入.stor_id
|
||||
AND attr.sect_id = 输入.sect_id
|
||||
AND IFNULL(attr.storagevehicle_code,'') <> ''
|
||||
|
||||
OPTION 输入.block_in <> ""
|
||||
attr.block_num in 输入.block_in
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.block_num <> ""
|
||||
attr.block_num = 输入.block_num
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.row_in <> ""
|
||||
attr.row_num in 输入.row_in
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.row_num <> ""
|
||||
attr.row_num = 输入.row_num
|
||||
ENDOPTION
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "3"
|
||||
QUERY
|
||||
SELECT DISTINCT
|
||||
attr.*
|
||||
FROM
|
||||
st_ivt_structattr attr
|
||||
INNER JOIN pdm_bi_subpackagerelation sub ON sub.package_box_sn = attr.storagevehicle_code
|
||||
LEFT JOIN md_me_materialbase mater ON mater.material_code = sub.product_name
|
||||
WHERE
|
||||
attr.is_used = '1'
|
||||
AND attr.is_delete = '0'
|
||||
AND attr.stor_id = 输入.stor_id
|
||||
AND attr.sect_id = 输入.sect_id
|
||||
AND IFNULL(attr.storagevehicle_code,'') <> ''
|
||||
|
||||
OPTION 输入.material_id <> ""
|
||||
mater.material_id = 输入.material_id
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.customer_name <> ""
|
||||
sub.customer_name = 输入.customer_name
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.sale_order_name <> ""
|
||||
sub.sale_order_name = 输入.sale_order_name
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.box_length <> ""
|
||||
sub.box_length = 输入.box_length
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.box_width <> ""
|
||||
sub.box_width = 输入.box_width
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.box_high <> ""
|
||||
sub.box_high = 输入.box_high
|
||||
ENDOPTION
|
||||
|
||||
|
||||
OPTION 输入.block_in <> ""
|
||||
attr.block_num in 输入.block_in
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.row_in <> ""
|
||||
attr.row_num in 输入.row_in
|
||||
ENDOPTION
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "4"
|
||||
QUERY
|
||||
SELECT
|
||||
attr.row_num
|
||||
FROM
|
||||
st_ivt_structattr attr
|
||||
WHERE
|
||||
attr.is_used = '1'
|
||||
AND attr.is_delete = '0'
|
||||
AND attr.lock_type = '1'
|
||||
AND IFNULL(attr.storagevehicle_code,'') = ''
|
||||
AND attr.stor_id = 输入.stor_id
|
||||
AND attr.sect_id = 输入.sect_id
|
||||
|
||||
OPTION 输入.block_num <> ""
|
||||
attr.block_num = 输入.block_num
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.not_row_in <> ""
|
||||
attr.row_num NOT IN 输入.not_row_in
|
||||
ENDOPTION
|
||||
|
||||
group by attr.row_num
|
||||
order by attr.row_num
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "5"
|
||||
QUERY
|
||||
SELECT
|
||||
attr.*
|
||||
FROM
|
||||
st_ivt_structattr attr
|
||||
WHERE
|
||||
attr.is_used = '1'
|
||||
AND attr.is_delete = '0'
|
||||
AND attr.lock_type = '1'
|
||||
AND IFNULL(attr.storagevehicle_code,'') = ''
|
||||
AND attr.stor_id = 输入.stor_id
|
||||
AND attr.sect_id = 输入.sect_id
|
||||
|
||||
OPTION 输入.block_num <> ""
|
||||
attr.block_num = 输入.block_num
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.row_num <> ""
|
||||
attr.row_num = 输入.row_num
|
||||
ENDOPTION
|
||||
|
||||
order by attr.col_num DESC ,attr.layer_num ASC,attr.zdepth DESC
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
|
||||
IF 输入.flag = "6"
|
||||
QUERY
|
||||
SELECT
|
||||
attr.*
|
||||
FROM
|
||||
st_ivt_structattr attr
|
||||
WHERE
|
||||
attr.is_used = '1'
|
||||
AND attr.is_delete = '0'
|
||||
AND attr.stor_id = 输入.stor_id
|
||||
AND attr.sect_id = 输入.sect_id
|
||||
|
||||
OPTION 输入.block_num <> ""
|
||||
attr.block_num = 输入.block_num
|
||||
ENDOPTION
|
||||
|
||||
OPTION 输入.row_num <> ""
|
||||
attr.row_num = 输入.row_num
|
||||
ENDOPTION
|
||||
|
||||
ENDSELECT
|
||||
ENDQUERY
|
||||
ENDIF
|
||||
@@ -118,7 +118,12 @@ public class RawAssistIStorController {
|
||||
|
||||
//@PreAuthorize("@el.check('materialtype:list')")
|
||||
public ResponseEntity<Object> divStruct(@RequestBody Map whereJson) {
|
||||
rawAssistIStorService.divStruct(whereJson);
|
||||
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvService.divStruct(whereJson);
|
||||
} else {
|
||||
rawAssistIStorService.divStruct(whereJson);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -136,7 +141,11 @@ public class RawAssistIStorController {
|
||||
|
||||
//@PreAuthorize("@el.check('materialtype:list')")
|
||||
public ResponseEntity<Object> unDivStruct(@RequestBody Map whereJson) {
|
||||
rawAssistIStorService.unDivStruct(whereJson);
|
||||
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvService.unDivStruct(whereJson);
|
||||
}else {
|
||||
rawAssistIStorService.unDivStruct(whereJson);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -145,7 +154,11 @@ public class RawAssistIStorController {
|
||||
|
||||
//@PreAuthorize("@el.check('materialtype:list')")
|
||||
public ResponseEntity<Object> divPoint(@RequestBody Map whereJson) {
|
||||
rawAssistIStorService.divPoint(whereJson);
|
||||
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvService.setPoint(whereJson);
|
||||
} else {
|
||||
rawAssistIStorService.divPoint(whereJson);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -189,7 +202,11 @@ public class RawAssistIStorController {
|
||||
|
||||
//@PreAuthorize("@el.check('materialtype:list')")
|
||||
public ResponseEntity<Object> delTask(@RequestBody Map whereJson) {
|
||||
rawAssistIStorService.delTask(whereJson);
|
||||
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvService.delTask(whereJson);
|
||||
} else {
|
||||
rawAssistIStorService.delTask(whereJson);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -198,7 +215,11 @@ public class RawAssistIStorController {
|
||||
|
||||
//@PreAuthorize("@el.check('materialtype:list')")
|
||||
public ResponseEntity<Object> reIssueTask(@RequestBody Map whereJson) {
|
||||
rawAssistIStorService.reIssueTask(whereJson);
|
||||
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvService.reIssueTask(whereJson);
|
||||
} else {
|
||||
rawAssistIStorService.reIssueTask(whereJson);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -207,7 +228,12 @@ public class RawAssistIStorController {
|
||||
|
||||
//@PreAuthorize("@el.check('materialtype:list')")
|
||||
public ResponseEntity<Object> confirmTask(@RequestBody Map whereJson) {
|
||||
rawAssistIStorService.confirmTask(whereJson);
|
||||
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvService.confirmTask(whereJson);
|
||||
} else {
|
||||
rawAssistIStorService.confirmTask(whereJson);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@@ -225,7 +251,12 @@ public class RawAssistIStorController {
|
||||
|
||||
//@PreAuthorize("@el.check('materialtype:list')")
|
||||
public ResponseEntity<Object> confirm(@RequestBody Map whereJson) {
|
||||
rawAssistIStorService.confirm(whereJson);
|
||||
if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) {
|
||||
iStIvtIostorinvService.confirm(whereJson);
|
||||
} else {
|
||||
rawAssistIStorService.confirm(whereJson);
|
||||
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
|
||||
@@ -355,6 +355,7 @@ export default {
|
||||
this.form.tableMater[i].sect_name = row.sect_name
|
||||
this.form.tableMater.splice(i, 1, this.form.tableMater[i]) // 通过splice 替换数据 触发视图更新
|
||||
}
|
||||
this.form.stor_id = this.stor_id
|
||||
crudRawAssist.divStruct(this.form).then(res => {
|
||||
crudRawAssist.getIODtl({ 'bill_code': this.form.dtl_row.bill_code, 'open_flag': '1' }).then(res => {
|
||||
this.openParam = res
|
||||
@@ -367,11 +368,11 @@ export default {
|
||||
this.crud.notify('请选择入库点', CRUD.NOTIFICATION_TYPE.INFO)
|
||||
return
|
||||
}
|
||||
debugger
|
||||
if (this.form.tableMater.length === 0) {
|
||||
this.crud.notify('请先选择一条明细!', CRUD.NOTIFICATION_TYPE.INFO)
|
||||
return
|
||||
}
|
||||
this.form.stor_id = this.stor_id
|
||||
crudRawAssist.divPoint(this.form).then(res => {
|
||||
crudRawAssist.getIODtl({ 'bill_code': this.form.dtl_row.bill_code, 'open_flag': '1' }).then(res => {
|
||||
this.openParam = res
|
||||
@@ -443,7 +444,7 @@ export default {
|
||||
this.crud.notify('明细存在未分配货位!', CRUD.NOTIFICATION_TYPE.INFO)
|
||||
return
|
||||
}
|
||||
// 如果勾选了,直接跳后台
|
||||
this.form.stor_id = this.stor_id
|
||||
crudRawAssist.unDivStruct(this.form).then(res => {
|
||||
crudRawAssist.getIODtl({ 'bill_code': this.form.dtl_row.bill_code, 'open_flag': '1' }).then(res => {
|
||||
this.openParam = res
|
||||
|
||||
@@ -170,6 +170,10 @@ export default {
|
||||
openParam: {
|
||||
type: Array,
|
||||
default: () => { return [] }
|
||||
},
|
||||
storId: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
@@ -221,6 +225,7 @@ export default {
|
||||
return
|
||||
}
|
||||
this.fullscreenLoading = true
|
||||
this.dis_row.stor_id = this.storId
|
||||
crudRawAssist.delTask(this.dis_row).then(res => {
|
||||
this.fullscreenLoading = false
|
||||
crudRawAssist.queryTask(this.form.dtl_row).then(res => {
|
||||
@@ -252,6 +257,7 @@ export default {
|
||||
return
|
||||
}
|
||||
this.fullscreenLoading = true
|
||||
this.dis_row.stor_id = this.storId
|
||||
crudRawAssist.confirmTask(this.dis_row).then(res => {
|
||||
crudRawAssist.queryTask(this.form.dtl_row).then(res2 => {
|
||||
this.form.tableMater = res2
|
||||
@@ -296,6 +302,7 @@ export default {
|
||||
return
|
||||
}
|
||||
this.fullscreenLoading = true
|
||||
this.dis_row.stor_id = this.storId
|
||||
crudRawAssist.reIssueTask(this.dis_row).then(res => {
|
||||
this.fullscreenLoading = false
|
||||
crudRawAssist.queryTask(this.form.dtl_row).then(res2 => {
|
||||
|
||||
@@ -233,7 +233,7 @@
|
||||
<AddDialog @AddChanged="querytable" />
|
||||
<ViewDialog :dialog-show.sync="viewShow" :rowmst="mstrow" @AddChanged="querytable" />
|
||||
<DivDialog :dialog-show.sync="divShow" :stor-id="storId" :open-param="openParam" :bill-type="billType" :buss-config="bussConfig" @AddChanged="querytable" />
|
||||
<TaskDialog :dialog-show.sync="taskShow" :open-param="openParam" :buss-config="bussConfig" @AddChanged="querytable" />
|
||||
<TaskDialog :dialog-show.sync="taskShow" :open-param="openParam" :buss-config="bussConfig" :stor-id="stor_id" @AddChanged="querytable" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -277,6 +277,7 @@ export default {
|
||||
edit: ['admin', 'inbill:edit'],
|
||||
del: ['admin', 'inbill:del']
|
||||
},
|
||||
stor_id: null,
|
||||
audit_flag: true,
|
||||
dis_flag: true,
|
||||
task_flag: true,
|
||||
@@ -421,6 +422,7 @@ export default {
|
||||
},
|
||||
taskOpen() {
|
||||
crudRawAssist.getIODtl({ 'bill_code': this.currentRow.bill_code, 'open_flag': '2' }).then(res => {
|
||||
this.stor_id = this.currentRow.stor_id
|
||||
this.openParam = res
|
||||
this.taskShow = true
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user