add:拣选出库
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
package org.nl.common.enums;
|
package org.nl.common.enums;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.api.R;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.ForkMap;
|
||||||
import org.nl.common.utils.MapOf;
|
import org.nl.common.utils.MapOf;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -19,45 +21,80 @@ public enum StatusEnum {
|
|||||||
/**
|
/**
|
||||||
* 流程相关
|
* 流程相关
|
||||||
*/
|
*/
|
||||||
MODEL_STATUS(MapOf.of("发布", "10", "未发布", "30")),
|
MODEL_STATUS(ForkMap.of("发布", "10",null, "未发布", "30",null)),
|
||||||
FLOW_STATUS(MapOf.of("启动", "10", "节点完成", "20","暂停", "30","完成", "90")),
|
FLOW_STATUS(ForkMap.of("启动", "10",null, "节点完成", "20",null,"暂停", "30",null,"完成", "90",null)),
|
||||||
/**
|
/**
|
||||||
* 单据状态
|
* 单据状态
|
||||||
*/
|
*/
|
||||||
FORM_STATUS(MapOf.of("生成", "10","已分配", "13", "执行中", "20","完成", "90","取消", "100")),
|
FORM_STATUS(ForkMap.of("生成", "10",null,"已分配", "13", null,"执行中", "20",null,"完成", "90",null,"取消", "100",null)),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出入库单据类型
|
* 出入库单据类型
|
||||||
*/
|
*/
|
||||||
IOBILL_TYPE_IN(MapOf.of("生产入库", "10", "调拨入库", "11", "退货入库", "12")),
|
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask")),
|
||||||
IOBILL_TYPE_OUT(MapOf.of("销售出库", "20", "生产出库", "21", "调拨出库", "22")),
|
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask")),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务类型
|
* 任务类型
|
||||||
*/
|
*/
|
||||||
TASK_TYPE(MapOf.push(IOBILL_TYPE_IN.code,IOBILL_TYPE_OUT.code)),
|
TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code,IOBILL_TYPE_OUT.code)),
|
||||||
|
|
||||||
|
ACS_TYPE(ForkMap.of("立库", "10",null
|
||||||
|
,"海柔", "20",null
|
||||||
|
,"诺宝", "30",null
|
||||||
|
)),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 点位锁类型
|
* 点位锁类型
|
||||||
*/
|
*/
|
||||||
LOCK(MapOf.of("无","00","入","10","出","20")),
|
LOCK(ForkMap.of("无","00",null,"入","10",null,"出","20",null)),
|
||||||
STRATEGY_TYPE(MapOf.of("入库", "1", "出库", "2", "出入库", "3")),
|
STRATEGY_TYPE(ForkMap.of("入库", "1",null, "出库", "2", null,"出入库", "3",null)),
|
||||||
;
|
;
|
||||||
private Map<String, String> code;
|
|
||||||
|
/**
|
||||||
|
* L:label
|
||||||
|
* M:编码
|
||||||
|
* R:指定服务类
|
||||||
|
*/
|
||||||
|
private ForkMap<String, String,String> code;
|
||||||
|
|
||||||
public String code(String desc) {
|
public String code(String desc) {
|
||||||
String code = this.getCode().get(desc);
|
String code = this.getCode().getM(desc);
|
||||||
if (StringUtils.isNotEmpty(code)) {
|
if (StringUtils.isNotEmpty(code)) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
throw new BadRequestException(this.name() + "对应类型" + desc + "未定义");
|
throw new BadRequestException(this.name() + "对应类型" + desc + "未定义");
|
||||||
}
|
}
|
||||||
|
public String desc(String code) {
|
||||||
|
for (String key : this.getCode().getKeySet()) {
|
||||||
|
if (key.equals(code)){
|
||||||
|
return this.getCode().getM(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new BadRequestException(this.name() + "对应编码" + code + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getR(String code) {
|
||||||
|
for (String key : this.getCode().getKeySet()) {
|
||||||
|
if (key.equals(code)){
|
||||||
|
String r = this.getCode().getR(key);
|
||||||
|
if (StringUtils.isEmpty(r)) {
|
||||||
|
throw new BadRequestException(this.name() + "对应编码" + code + "未定义R的数据");
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new BadRequestException(this.name() + "对应编码" + code + "未定义x");
|
||||||
|
}
|
||||||
|
|
||||||
public Boolean check(String code) {
|
public Boolean check(String code) {
|
||||||
for (Map.Entry<String, String> entry : this.getCode().entrySet()) {
|
ForkMap<String, String, String> map = this.getCode();
|
||||||
if (entry.getValue().equals(code)) {
|
for (String key : map.getKeySet()) {
|
||||||
|
if (code.equals(map.getM(key))){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package org.nl.common.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author ZZQ
|
||||||
|
* @Date 2022/11/29 2:55 下午
|
||||||
|
* 三叉Map
|
||||||
|
*/
|
||||||
|
public class ForkMap<L,M,R> implements Serializable {
|
||||||
|
|
||||||
|
transient Map<Integer,Node> items=new HashMap<>();
|
||||||
|
transient Set<L> keySet = new HashSet<>();
|
||||||
|
|
||||||
|
public <M> M getM(L key){
|
||||||
|
Node<L,M,R> node = items.get(hash(key));
|
||||||
|
if (node==null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return node.middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <R> R getR(L key){
|
||||||
|
Node<L,M,R> node = items.get(hash(key));
|
||||||
|
if (node==null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return node.right;
|
||||||
|
}
|
||||||
|
public Set<L> getKeySet(){
|
||||||
|
return keySet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <L,M,R> ForkMap pushAll(ForkMap... maps){
|
||||||
|
ForkMap<L,M,R> forkMap = new ForkMap();
|
||||||
|
for (ForkMap<L,M,R> map : maps) {
|
||||||
|
for (L key : map.getKeySet()) {
|
||||||
|
L key1 = key;
|
||||||
|
M m = map.getM(key1);
|
||||||
|
R r = map.getR(key1);
|
||||||
|
forkMap.put(key1, m, r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return forkMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <V> ForkMap of(V...keys){
|
||||||
|
ForkMap<V,V,V> map = new ForkMap<V,V,V>();
|
||||||
|
for (int i = 0; i < keys.length/3; i++) {
|
||||||
|
map.put(keys[i*3],keys[i*3+1],keys[i*3+2]);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ForkMap put(L key, M middle,R right) {
|
||||||
|
Node node = new Node(key, middle, right);
|
||||||
|
items.put(hash(key),node);
|
||||||
|
keySet.add(key);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Node<L,M,R>{
|
||||||
|
private L left;
|
||||||
|
private M middle;
|
||||||
|
private R right;
|
||||||
|
Node(L left, M middle, R right) {
|
||||||
|
this.left = left;
|
||||||
|
this.middle = middle;
|
||||||
|
this.right = right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static final int hash(Object key) {
|
||||||
|
int h;
|
||||||
|
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,8 +14,11 @@ import org.springframework.beans.BeanUtils;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -24,15 +27,14 @@ import java.util.stream.Collectors;
|
|||||||
* 先进先出策略
|
* 先进先出策略
|
||||||
*/
|
*/
|
||||||
@Service("fifo")
|
@Service("fifo")
|
||||||
public class FIFORuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
public class FIFORuleHandler extends Decisioner<StructattrVechielDto, JSONObject> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出入库明细服务
|
* 出入库明细服务
|
||||||
*/
|
*/
|
||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtStructattrService iStIvtStructattrService;
|
private IStIvtStructattrService iStIvtStructattrService;
|
||||||
@Autowired
|
|
||||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,7 +48,7 @@ public class FIFORuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
|||||||
* @return List<StIvtStructattr> :仓位集合
|
* @return List<StIvtStructattr> :仓位集合
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, JSONObject param) {
|
public List<StructattrVechielDto> handler(List<StructattrVechielDto> list, JSONObject param) {
|
||||||
// 判断仓位是否为空
|
// 判断仓位是否为空
|
||||||
if (ObjectUtil.isEmpty(list)) {
|
if (ObjectUtil.isEmpty(list)) {
|
||||||
throw new BadRequestException("仓位集合为空!");
|
throw new BadRequestException("仓位集合为空!");
|
||||||
@@ -59,20 +61,20 @@ public class FIFORuleHandler extends Decisioner<StIvtStructattr, JSONObject> {
|
|||||||
, "stor_code", param.getString("stor_code")
|
, "stor_code", param.getString("stor_code")
|
||||||
, "order_by", "update_time asc")
|
, "order_by", "update_time asc")
|
||||||
);
|
);
|
||||||
List<String> need = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList());
|
List<String> need = list.stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList());
|
||||||
|
|
||||||
List<StIvtStructattr> disList = new ArrayList<>();
|
List<StructattrVechielDto> disList = new ArrayList<>();
|
||||||
for (StructattrVechielDto structattr : vechielDtos) {
|
for (StructattrVechielDto structattr : vechielDtos) {
|
||||||
if (need.contains(structattr.getStruct_code())){
|
if (need.contains(structattr.getVehicle_code())){
|
||||||
StIvtStructattr stIvtStructattr = new StIvtStructattr();
|
|
||||||
BeanUtils.copyProperties(structattr,stIvtStructattr);
|
|
||||||
disList.add(stIvtStructattr);
|
|
||||||
|
|
||||||
int cause_qty = structattr.getQty().subtract(structattr.getFrozen_qty()).intValue();
|
int cause_qty = structattr.getQty().subtract(structattr.getFrozen_qty()).intValue();
|
||||||
plan_qty = plan_qty - cause_qty;
|
int sub = plan_qty - cause_qty;
|
||||||
if (plan_qty<=0){
|
disList.add(structattr);
|
||||||
|
if (sub<=0){
|
||||||
|
structattr.setFrozen_qty(new BigDecimal(plan_qty));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
structattr.setFrozen_qty(new BigDecimal(cause_qty));
|
||||||
|
plan_qty = sub;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return disList;
|
return disList;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.nl.wms.decision_manage.applyTask;
|
package org.nl.wms.dispatch_manage.task.handler;
|
||||||
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
@@ -17,10 +17,10 @@ import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
|||||||
* @created 2020年6月12日 下午5:53:28
|
* @created 2020年6月12日 下午5:53:28
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public abstract class AbstractApplyTask {
|
public abstract class AbstractTask {
|
||||||
|
|
||||||
|
|
||||||
public abstract String createTask(JSONObject data);
|
public abstract JSONObject createTask(JSONObject data);
|
||||||
|
|
||||||
|
|
||||||
public abstract void updateStatus(JSONObject data);
|
public abstract void updateStatus(JSONObject data);
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.nl.wms.decision_manage.applyTask.impl;
|
package org.nl.wms.dispatch_manage.task.handler.impl;
|
||||||
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
@@ -10,7 +10,8 @@ import org.nl.common.domain.exception.BadRequestException;
|
|||||||
import org.nl.common.enums.StatusEnum;
|
import org.nl.common.enums.StatusEnum;
|
||||||
import org.nl.common.publish.BussEventMulticaster;
|
import org.nl.common.publish.BussEventMulticaster;
|
||||||
import org.nl.common.utils.MapOf;
|
import org.nl.common.utils.MapOf;
|
||||||
import org.nl.wms.decision_manage.applyTask.AbstractApplyTask;
|
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||||
|
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||||
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
|
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
|
||||||
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
|
import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
|
||||||
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
|
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
|
||||||
@@ -22,7 +23,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,8 +35,8 @@ import java.util.function.Consumer;
|
|||||||
* @created 2020年6月12日 下午5:53:28
|
* @created 2020年6月12日 下午5:53:28
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service("ZPInStorage")
|
||||||
public class ApplyFlowTask extends AbstractApplyTask {
|
public class GroupDickInStorageTask extends AbstractTask {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||||
@@ -44,7 +44,7 @@ public class ApplyFlowTask extends AbstractApplyTask {
|
|||||||
private IMdGruopDickService iMdGruopDickService;
|
private IMdGruopDickService iMdGruopDickService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String createTask(JSONObject data) {
|
public JSONObject createTask(JSONObject data) {
|
||||||
for (String vehicle_code : data.keySet()) {
|
for (String vehicle_code : data.keySet()) {
|
||||||
String point_code1 = data.getString(vehicle_code);
|
String point_code1 = data.getString(vehicle_code);
|
||||||
if (StringUtils.isEmpty(point_code1)){
|
if (StringUtils.isEmpty(point_code1)){
|
||||||
@@ -68,6 +68,7 @@ public class ApplyFlowTask extends AbstractApplyTask {
|
|||||||
.build("md_group_dick",mst.getId(),mst.getSource_form_type(),mst.getSource_form_id(), mstJ)
|
.build("md_group_dick",mst.getId(),mst.getSource_form_type(),mst.getSource_form_id(), mstJ)
|
||||||
.build("md_pb_vehicleMater",item)
|
.build("md_pb_vehicleMater",item)
|
||||||
);
|
);
|
||||||
|
//执行流程//
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
package org.nl.wms.dispatch_manage.task.handler.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
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.LambdaUpdateWrapper;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
|
import org.nl.common.enums.StatusEnum;
|
||||||
|
import org.nl.common.utils.CodeUtil;
|
||||||
|
import org.nl.common.utils.IdUtil;
|
||||||
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||||
|
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||||
|
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||||
|
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
|
||||||
|
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||||
|
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author ZZQ
|
||||||
|
* @Date 2024/5/6 14:34
|
||||||
|
* 堆垛机入库任务
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class InStorageTask extends AbstractTask {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ISchBaseTaskService taskService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONObject createTask(JSONObject from) {
|
||||||
|
String vehicle_code = from.getString("vehicle_code");
|
||||||
|
String struct_code = from.getString("struct_code");
|
||||||
|
String target_point = from.getString("target_point");
|
||||||
|
String task_type = from.getString("task_type");
|
||||||
|
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)||StringUtils.isEmpty(struct_code)){
|
||||||
|
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
|
||||||
|
}
|
||||||
|
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
|
||||||
|
.ne("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||||
|
if (!CollectionUtils.isEmpty(list)){
|
||||||
|
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
|
||||||
|
}
|
||||||
|
SchBaseTask task = new SchBaseTask();
|
||||||
|
task.setId(IdUtil.getStringId());
|
||||||
|
task.setSource_form_id(from.getString("id"));
|
||||||
|
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||||
|
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||||
|
task.setHandle_class(this.getClass().getName());
|
||||||
|
task.setAcs_type(StatusEnum.ACS_TYPE.code("立库"));
|
||||||
|
task.setCreate_time(DateUtil.now());
|
||||||
|
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||||
|
task.setTask_type(task_type);
|
||||||
|
task.setVehicle_code(vehicle_code);
|
||||||
|
task.setPoint_code1(target_point);
|
||||||
|
task.setPoint_code2(struct_code);
|
||||||
|
taskService.create(task);
|
||||||
|
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||||
|
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
|
||||||
|
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()));
|
||||||
|
return (JSONObject) JSON.toJSON(task);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateStatus(JSONObject data) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel(JSONObject data) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,12 +4,15 @@ import com.alibaba.fastjson.JSON;
|
|||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
|
import org.nl.common.enums.StatusEnum;
|
||||||
import org.nl.common.utils.InterationUtil;
|
import org.nl.common.utils.InterationUtil;
|
||||||
import org.nl.common.utils.SpringContextHolder;
|
import org.nl.common.utils.SpringContextHolder;
|
||||||
import org.nl.wms.decision_manage.applyTask.impl.ApplyFlowTask;
|
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||||
|
import org.nl.wms.dispatch_manage.task.handler.impl.GroupDickInStorageTask;
|
||||||
|
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||||
import org.nl.wms.external_system.acs.service.dto.TransferDto;
|
import org.nl.wms.external_system.acs.service.dto.TransferDto;
|
||||||
import org.nl.wms.external_system.dto.InteracteDto;
|
|
||||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl.MappingSourceDataTypeHandler;
|
import org.nl.wms.flow_manage.flow.framework.process.nodeType.source.impl.MappingSourceDataTypeHandler;
|
||||||
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
|
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
|
||||||
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
|
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
|
||||||
@@ -18,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author ZZQ
|
* @author ZZQ
|
||||||
@@ -27,11 +31,26 @@ import java.util.List;
|
|||||||
public class AcsToWmsService implements InitializingBean {
|
public class AcsToWmsService implements InitializingBean {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ApplyFlowTask applyFlowTask;
|
private Map<String, AbstractTask> applyTaskMap;
|
||||||
|
@Autowired
|
||||||
|
private ISchBaseTaskService iSchBaseTaskService;
|
||||||
|
|
||||||
private SyncFormMapping mapping;
|
private SyncFormMapping mapping;
|
||||||
|
|
||||||
public void applyTask(String taskType,JSONObject data){
|
public void applyTask(String service,JSONObject data){
|
||||||
applyFlowTask.createTask(data);
|
if (service.equals("ZPInStorage")){
|
||||||
|
applyTaskMap.get("ZPInStorage").createTask(data);
|
||||||
|
}
|
||||||
|
if (service.equals("TaskStatus")){
|
||||||
|
String task_code = data.getString("task_code");
|
||||||
|
SchBaseTask task = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", task_code)
|
||||||
|
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||||
|
if (task == null){
|
||||||
|
throw new BadRequestException("更新失败:当前执行中的任务不存在");
|
||||||
|
}
|
||||||
|
applyTaskMap.get(task.getTask_type()).updateStatus(data);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ public class SequenceFlowConverter extends BaseNodeConverter {
|
|||||||
sequenceFlow.setName(properties.getString("name"));
|
sequenceFlow.setName(properties.getString("name"));
|
||||||
sequenceFlow.setDocumentation(properties.getString("documentation"));
|
sequenceFlow.setDocumentation(properties.getString("documentation"));
|
||||||
//设置触发事件
|
//设置触发事件
|
||||||
sequenceFlow.setExecutionListeners(null);
|
|
||||||
sequenceFlow.setSkipExpression(properties.getString("skipExpression"));
|
sequenceFlow.setSkipExpression(properties.getString("skipExpression"));
|
||||||
|
|
||||||
FlowNode sourceNode = model.getProcesses().get(node.getString("sourceNodeId"));
|
FlowNode sourceNode = model.getProcesses().get(node.getString("sourceNodeId"));
|
||||||
|
|||||||
@@ -71,14 +71,16 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
|
|||||||
JSONObject t = (JSONObject)item.remove("t");
|
JSONObject t = (JSONObject)item.remove("t");
|
||||||
String[] vehicle_codes = t.getString("vehicle_code").split(",");
|
String[] vehicle_codes = t.getString("vehicle_code").split(",");
|
||||||
for (String vehicle_code : vehicle_codes) {
|
for (String vehicle_code : vehicle_codes) {
|
||||||
JSONObject subt = new JSONObject(t);
|
JSONObject subt = new JSONObject();
|
||||||
|
subt.putAll(t);
|
||||||
subt.put("vehicle_code",vehicle_code);
|
subt.put("vehicle_code",vehicle_code);
|
||||||
JSONObject sub = new JSONObject(item);
|
JSONObject sub = new JSONObject();
|
||||||
|
sub.putAll(item);
|
||||||
sub.put("t",subt);
|
sub.put("t",subt);
|
||||||
|
subList.add(sub);
|
||||||
if (tmpMap.get(vehicle_code) == null){
|
if (tmpMap.get(vehicle_code) == null){
|
||||||
tmpMap.put(vehicle_code,sub);
|
tmpMap.put(vehicle_code,sub);
|
||||||
}
|
}
|
||||||
subList.add(sub);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//现在子流程跟载具有关后续可以通过配置拆分字段:vehicle_code跟拆分规则实现
|
//现在子流程跟载具有关后续可以通过配置拆分字段:vehicle_code跟拆分规则实现
|
||||||
|
|||||||
@@ -6,10 +6,13 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
import org.nl.common.enums.StatusEnum;
|
import org.nl.common.enums.StatusEnum;
|
||||||
import org.nl.common.utils.ListOf;
|
import org.nl.common.utils.ListOf;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
import org.nl.common.utils.RedissonUtils;
|
import org.nl.common.utils.RedissonUtils;
|
||||||
import org.nl.common.utils.SpringContextHolder;
|
import org.nl.common.utils.SpringContextHolder;
|
||||||
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
|
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
|
||||||
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.ServerTask;
|
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.task.impl.ServerTask;
|
||||||
|
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||||
|
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||||
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||||
@@ -19,6 +22,7 @@ import org.nl.wms.decision_manage.handler.Decisioner;
|
|||||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
|
||||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
|
import org.nl.wms.flow_manage.flow.framework.process.nodeType.TypeHandler;
|
||||||
|
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Propagation;
|
||||||
@@ -45,7 +49,7 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtIostorinvdtlService stIvtIostorinvdtlInService;
|
private IStIvtIostorinvdtlService stIvtIostorinvdtlInService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IPmFormDataService iPmFormDataService;
|
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private Map<String, Decisioner> decisionHandlerMap;
|
private Map<String, Decisioner> decisionHandlerMap;
|
||||||
@@ -63,9 +67,8 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
JSONObject t = entity.getT();
|
JSONObject t = entity.getT();
|
||||||
JSONObject item_json = t.getJSONObject("t");
|
JSONObject item_json = t.getJSONObject("t");
|
||||||
ServerTask flow = (ServerTask)entity.getCurrentFlowElement();
|
ServerTask flow = (ServerTask)entity.getCurrentFlowElement();
|
||||||
List<StIvtStructattr> list = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, item_json);
|
Map<String, String> map = SpringContextHolder.getBean(DecisionHandler.class).dispense(params, item_json);
|
||||||
//更新仓位,更新数据
|
//更新仓位,更新数据
|
||||||
String collect = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(","));
|
|
||||||
System.out.println(flow.getForm_type()+"更新明细id"+item_json.getString("id"));
|
System.out.println(flow.getForm_type()+"更新明细id"+item_json.getString("id"));
|
||||||
// StringBuffer sql = new StringBuffer();
|
// StringBuffer sql = new StringBuffer();
|
||||||
// sql.append("update ")
|
// sql.append("update ")
|
||||||
@@ -75,30 +78,29 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
// .append(" where id = ")
|
// .append(" where id = ")
|
||||||
// .append("'"+item_json.getString("id")+"'");
|
// .append("'"+item_json.getString("id")+"'");
|
||||||
// iPmFormDataService.dynamicSql(sql.toString());
|
// iPmFormDataService.dynamicSql(sql.toString());
|
||||||
item_json.put("struct_code",collect);
|
item_json.putAll(map);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@Transactional(propagation= Propagation.REQUIRES_NEW)
|
@Transactional(propagation= Propagation.REQUIRES_NEW)
|
||||||
public List<StIvtStructattr> dispense(List<String> params, JSONObject iostorinvdtl) {
|
public Map<String,String> dispense(List<String> params, JSONObject iostorinvdtl) {
|
||||||
Decisioner oneDecisioner = decisionHandlerMap.get(params.get(0));
|
Decisioner oneDecisioner = decisionHandlerMap.get(params.get(0));
|
||||||
//判断是出库还是入库
|
//判断是出库还是入库
|
||||||
String stor_code = iostorinvdtl.getString("stor_code");
|
|
||||||
|
|
||||||
String strategy_type = oneDecisioner.strategyConfig.getStrategy_type();
|
String strategy_type = oneDecisioner.strategyConfig.getStrategy_type();
|
||||||
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
|
||||||
AtomicReference<List<StIvtStructattr>> structCode = new AtomicReference<>();
|
AtomicReference<Map> structCode = new AtomicReference<>();
|
||||||
RedissonUtils.lock(()->{
|
RedissonUtils.lock(()->{
|
||||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
List list;
|
||||||
.eq("is_used", true)
|
|
||||||
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
|
||||||
.eq("stor_code", iostorinvdtl.getString("stor_code"));
|
|
||||||
if (in_storage){
|
if (in_storage){
|
||||||
query.eq("vehicle_code","");
|
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||||
|
.eq("is_used", true)
|
||||||
|
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
||||||
|
.eq("stor_code", iostorinvdtl.getString("stor_code"));
|
||||||
|
query.isNull("vehicle_code");
|
||||||
|
list = iStIvtStructattrService.list(query);
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
query.ne("vehicle_code","");
|
list = iStIvtStructattrService.structVehicle(null);
|
||||||
}
|
}
|
||||||
//如果是入库则过滤空;否则则不过滤
|
|
||||||
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
|
|
||||||
if (CollectionUtils.isEmpty(list)){
|
if (CollectionUtils.isEmpty(list)){
|
||||||
throw new BadRequestException("当前分配策略无可用货位");
|
throw new BadRequestException("当前分配策略无可用货位");
|
||||||
}
|
}
|
||||||
@@ -112,19 +114,25 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
if (CollectionUtils.isEmpty(list)){
|
if (CollectionUtils.isEmpty(list)){
|
||||||
throw new BadRequestException("无可分配货位!");
|
throw new BadRequestException("无可分配货位!");
|
||||||
}
|
}
|
||||||
//如果是入库的话只分配一个,出库的话有可能多个货位
|
|
||||||
if (in_storage){
|
if (in_storage){
|
||||||
list= ListOf.of(list.get(0));
|
StIvtStructattr structattr = (StIvtStructattr)list.get(0);
|
||||||
}
|
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||||
structCode.set(list);
|
|
||||||
System.out.println("分配的货位"+list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(",")));
|
|
||||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
|
||||||
// .set("vehicle_code", iostorinvdtl.getVehicle_code())
|
// .set("vehicle_code", iostorinvdtl.getVehicle_code())
|
||||||
.set("lock_type", StatusEnum.LOCK.code(in_storage?"入":"出"))
|
.set("lock_type", StatusEnum.LOCK.code("入"))
|
||||||
.in("struct_code", list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList())));
|
.eq("struct_code", structattr.getStruct_code()));
|
||||||
System.out.println("货位绑定成功");
|
System.out.println("货位绑定成功"+structattr.getStruct_code());
|
||||||
},"入",2);
|
structCode.set(MapOf.of("struct_code",structattr.getStruct_code()));
|
||||||
System.out.println("货位绑定成功------");
|
}else {
|
||||||
|
for (StructattrVechielDto vechielDto : ((List<StructattrVechielDto>) list)) {
|
||||||
|
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||||
|
.set("frozen_qty",vechielDto.getFrozen_qty())
|
||||||
|
.eq("id",vechielDto.getVm_id()));
|
||||||
|
}
|
||||||
|
List<String> collect = ((List<StructattrVechielDto>) list).stream().map(StructattrVechielDto::getVehicle_code).collect(Collectors.toList());
|
||||||
|
System.out.println("载具绑定成功"+collect.toString());
|
||||||
|
structCode.set(MapOf.of("vehicle_code",collect.stream().collect(Collectors.joining(","))));
|
||||||
|
}
|
||||||
|
},"入",2);
|
||||||
return structCode.get();
|
return structCode.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.nl.common.enums.StatusEnum;
|
|||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
|
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
|
||||||
@@ -22,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -33,46 +35,17 @@ import java.util.stream.Collectors;
|
|||||||
public class CreateTaskProcessHandler implements ClassProcess {
|
public class CreateTaskProcessHandler implements ClassProcess {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
ISchBaseTaskService taskService;
|
Map<String, AbstractTask> taskMap;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public JSONObject process(JSONObject from, JSONObject param) {
|
public JSONObject process(JSONObject from, JSONObject param) {
|
||||||
//区分出库还是入库
|
|
||||||
String vehicle_code = from.getString("vehicle_code");
|
|
||||||
String struct_code = from.getString("struct_code");
|
|
||||||
String target_point = param.getString("target_point");
|
|
||||||
String task_type = param.getString("task_type");
|
|
||||||
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)||StringUtils.isEmpty(struct_code)){
|
|
||||||
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
|
|
||||||
}
|
|
||||||
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
|
|
||||||
.ne("status", StatusEnum.FORM_STATUS.code("完成")));
|
|
||||||
if (!CollectionUtils.isEmpty(list)){
|
|
||||||
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
|
|
||||||
}
|
|
||||||
//根据不同的任务类型调用不同的任务创建逻辑
|
//根据不同的任务类型调用不同的任务创建逻辑
|
||||||
SchBaseTask task = new SchBaseTask();
|
from.putAll(param);
|
||||||
task.setId(IdUtil.getStringId());
|
AbstractTask abstractTask = taskMap.get(StatusEnum.TASK_TYPE.getR(from.getString("task_type")));
|
||||||
task.setSource_form_id(from.getString("id"));
|
if (abstractTask==null){
|
||||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
throw new BadRequestException("创建任务失败:当前任务类型未定义处理类");
|
||||||
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
}
|
||||||
task.setHandle_class(this.getClass().getName());
|
return abstractTask.createTask(from);
|
||||||
task.setAcs_type("");
|
|
||||||
task.setCreate_time(DateUtil.now());
|
|
||||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
|
||||||
task.setTask_type(param.getString("task_type"));
|
|
||||||
task.setVehicle_code(vehicle_code);
|
|
||||||
task.setPoint_code1(target_point);
|
|
||||||
task.setPoint_code2(struct_code);
|
|
||||||
taskService.create(task);
|
|
||||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
|
||||||
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
|
|
||||||
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()));
|
|
||||||
|
|
||||||
return (JSONObject)JSON.toJSON(task);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class StorageChangesProcessHandler implements ClassProcess {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject process(JSONObject from, JSONObject param) {
|
public JSONObject process(JSONObject from, JSONObject param) {
|
||||||
//暂时出入入库的问题
|
//暂时出入入库的问题:库存变动中任务变动由任务变动接口处理
|
||||||
from.put("status",param.getString("status"));
|
from.put("status",param.getString("status"));
|
||||||
from.put("update_time",DateUtil.now());
|
from.put("update_time",DateUtil.now());
|
||||||
from.put("update_name",SecurityUtils.getCurrentNickName());
|
from.put("update_name",SecurityUtils.getCurrentNickName());
|
||||||
|
|||||||
@@ -62,6 +62,11 @@ public class MdPbVehicleMater implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private BigDecimal frozen_qty;
|
private BigDecimal frozen_qty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 载具锁定
|
||||||
|
*/
|
||||||
|
private Boolean is_lock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数量计量单位标识
|
* 数量计量单位标识
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -66,8 +66,8 @@ public class StIvtIostorinvOutController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/outDecision")
|
@PostMapping("/outDecision")
|
||||||
public ResponseEntity<Object> outDecision(@RequestBody JSONObject dtl) {
|
public ResponseEntity<Object> outDecision(@RequestBody JSONObject dtl) {
|
||||||
String struct_code = iStIvtIostorinvService.outDispense(dtl);
|
String vechicle_codes = iStIvtIostorinvService.outDispense(dtl);
|
||||||
return new ResponseEntity<>(struct_code,HttpStatus.OK);
|
return new ResponseEntity<>(vechicle_codes,HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -183,12 +183,13 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
|
|||||||
@Override
|
@Override
|
||||||
public String outDispense(JSONObject form) {
|
public String outDispense(JSONObject form) {
|
||||||
//分配更新
|
//分配更新
|
||||||
List<StIvtStructattr> desicion = iStIvtStructattrService.desicion(form, Boolean.FALSE);
|
Map<String, String> map = iStIvtStructattrService.desicion(form, Boolean.FALSE);
|
||||||
if (CollectionUtils.isEmpty(desicion)){
|
if (CollectionUtils.isEmpty(map)){
|
||||||
throw new BadRequestException("分配失败,当前出库分配无可用货位");
|
throw new BadRequestException("分配失败,当前出库分配无可用货位");
|
||||||
}
|
}
|
||||||
|
String vehicle_code = map.get("vehicle_code");
|
||||||
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
||||||
.set("vehicle_code",desicion.stream().map(StIvtStructattr::getVehicle_code).collect(Collectors.joining(",")))
|
.set("vehicle_code",vehicle_code)
|
||||||
.eq("id",form.getString("id")));
|
.eq("id",form.getString("id")));
|
||||||
int count = iStIvtIostorinvDtlService.count(new QueryWrapper<StIvtIostorinvdtl>()
|
int count = iStIvtIostorinvDtlService.count(new QueryWrapper<StIvtIostorinvdtl>()
|
||||||
.eq("inv_id", form.getString("inv_id")).isNull("vehicle_code"));
|
.eq("inv_id", form.getString("inv_id")).isNull("vehicle_code"));
|
||||||
@@ -197,7 +198,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
|
|||||||
.set("status",StatusEnum.FORM_STATUS.code("已分配"))
|
.set("status",StatusEnum.FORM_STATUS.code("已分配"))
|
||||||
.eq("id",form.getString("inv_id")));
|
.eq("id",form.getString("inv_id")));
|
||||||
}
|
}
|
||||||
return desicion.get(0).getStruct_code();
|
return vehicle_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -207,8 +208,8 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
|
|||||||
if (StringUtils.isNotEmpty(vehicles)){
|
if (StringUtils.isNotEmpty(vehicles)){
|
||||||
String[] split = vehicles.split(",");
|
String[] split = vehicles.split(",");
|
||||||
//更新点位锁,删除分配
|
//更新点位锁,删除分配
|
||||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||||
.set("lock_type", StatusEnum.LOCK.code("无"))
|
.set("frozen_qty", 0)
|
||||||
.in("vehicle_code", Arrays.asList(split)));
|
.in("vehicle_code", Arrays.asList(split)));
|
||||||
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
||||||
.set("vehicle_code",null)
|
.set("vehicle_code",null)
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ public interface IStIvtStructattrService extends IService<StIvtStructattr> {
|
|||||||
* @param in
|
* @param in
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<StIvtStructattr> desicion(JSONObject form, Boolean in);
|
Map<String, String> desicion(JSONObject form, Boolean in);
|
||||||
|
|
||||||
List<StructattrVechielDto> collectVechicle(Map query);
|
List<StructattrVechielDto> collectVechicle(Map query);
|
||||||
|
|
||||||
|
List<StructattrVechielDto> structVehicle(Map query);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,4 +23,6 @@ public interface StIvtStructattrMapper extends BaseMapper<StIvtStructattr> {
|
|||||||
List<Map> getPageQuery(@Param("query") StructattrQuery query, PageQuery pageQuery);
|
List<Map> getPageQuery(@Param("query") StructattrQuery query, PageQuery pageQuery);
|
||||||
|
|
||||||
List<StructattrVechielDto> collectVehicle(Map query);
|
List<StructattrVechielDto> collectVehicle(Map query);
|
||||||
|
|
||||||
|
List<StructattrVechielDto> structVehicle(Map query);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
md_pb_vehicleMater.frozen_qty,
|
md_pb_vehicleMater.frozen_qty,
|
||||||
md_pb_vehicleMater.material_id,
|
md_pb_vehicleMater.material_id,
|
||||||
md_pb_vehicleMater.pcsn,
|
md_pb_vehicleMater.pcsn,
|
||||||
|
md_pb_vehicleMater.id as vm_id,
|
||||||
st_ivt_structattr.*
|
st_ivt_structattr.*
|
||||||
FROM
|
FROM
|
||||||
st_ivt_structattr
|
st_ivt_structattr
|
||||||
@@ -60,4 +61,19 @@
|
|||||||
order by ${order_by}
|
order by ${order_by}
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="structVehicle" resultType="org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto">
|
||||||
|
SELECT
|
||||||
|
md_pb_vehicleMater.qty,
|
||||||
|
md_pb_vehicleMater.frozen_qty,
|
||||||
|
md_pb_vehicleMater.material_id,
|
||||||
|
md_pb_vehicleMater.pcsn,
|
||||||
|
md_pb_vehicleMater.id as vm_id,
|
||||||
|
st_ivt_structattr.*
|
||||||
|
FROM
|
||||||
|
st_ivt_structattr
|
||||||
|
LEFT JOIN md_pb_vehicleMater ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code
|
||||||
|
WHERE
|
||||||
|
st_ivt_structattr.vehicle_code is not null and
|
||||||
|
md_pb_vehicleMater.is_lock = false
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ public class StructattrVechielDto extends MdPbVehicleMater {
|
|||||||
* 仓位标识
|
* 仓位标识
|
||||||
*/
|
*/
|
||||||
private String id;
|
private String id;
|
||||||
|
/**
|
||||||
|
* 载具物料id
|
||||||
|
*/
|
||||||
|
private String vm_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 仓位编码
|
* 仓位编码
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
|||||||
.set("update_time",now)
|
.set("update_time",now)
|
||||||
.set("lock_type", StatusEnum.LOCK.code("无"))
|
.set("lock_type", StatusEnum.LOCK.code("无"))
|
||||||
.eq("struct_code",struct_code));
|
.eq("struct_code",struct_code));
|
||||||
|
//b变动结存
|
||||||
List<StIvtStructivtflow> records = new ArrayList<>();
|
List<StIvtStructivtflow> records = new ArrayList<>();
|
||||||
for (MdPbVehicleMater vehicleMater : vehicleMaters) {
|
for (MdPbVehicleMater vehicleMater : vehicleMaters) {
|
||||||
StIvtStructivtflow record = new StIvtStructivtflow();
|
StIvtStructivtflow record = new StIvtStructivtflow();
|
||||||
@@ -125,15 +125,15 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<StIvtStructattr> desicion(JSONObject form, Boolean in) {
|
public Map<String, String> desicion(JSONObject form, Boolean in) {
|
||||||
//查询出入库配置规则
|
//查询出入库配置规则
|
||||||
Param byCode = iSysParamService.findByCode("decision_"+ in);
|
Param byCode = iSysParamService.findByCode("decision_"+ in);
|
||||||
if (byCode ==null || StringUtils.isEmpty(byCode.getValue())){
|
if (byCode ==null || StringUtils.isEmpty(byCode.getValue())){
|
||||||
throw new BadRequestException("未配置出入库默认规则,请在系统配置中配置");
|
throw new BadRequestException("未配置出入库默认规则,请在系统配置中配置");
|
||||||
}
|
}
|
||||||
List<String> decisions = Arrays.asList(byCode.getValue().split(","));
|
List<String> decisions = Arrays.asList(byCode.getValue().split(","));
|
||||||
List<StIvtStructattr> dispense = decisionHandler.dispense(decisions, form);
|
Map<String, String> map = decisionHandler.dispense(decisions, form);
|
||||||
return dispense;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -142,4 +142,10 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
|||||||
return collectVehicle;
|
return collectVehicle;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public List<StructattrVechielDto> structVehicle(Map query) {
|
||||||
|
List<StructattrVechielDto> structVehicle = this.baseMapper.structVehicle(query);
|
||||||
|
return structVehicle;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import org.nl.common.domain.entity.PageQuery;
|
|||||||
|
|
||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
import org.nl.common.enums.StatusEnum;
|
import org.nl.common.enums.StatusEnum;
|
||||||
|
import org.nl.common.utils.ForkMap;
|
||||||
import org.nl.common.utils.MapOf;
|
import org.nl.common.utils.MapOf;
|
||||||
import org.nl.wms.system_manage.service.dict.ISysDictService;
|
import org.nl.wms.system_manage.service.dict.ISysDictService;
|
||||||
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
||||||
@@ -128,9 +129,9 @@ public class SysDictController {
|
|||||||
List<Map> items = new ArrayList<>();
|
List<Map> items = new ArrayList<>();
|
||||||
for (StatusEnum value : StatusEnum.values()) {
|
for (StatusEnum value : StatusEnum.values()) {
|
||||||
if (value.name().equals(type)){
|
if (value.name().equals(type)){
|
||||||
Map<String, String> code = value.getCode();
|
ForkMap<String, String, String> forkMap = value.getCode();
|
||||||
for (String label : code.keySet()) {
|
for (String label : forkMap.getKeySet()) {
|
||||||
items.add(MapOf.of("label",label,"value",code.get(label)));
|
items.add(MapOf.of("label",label,"value",forkMap.getM(label)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,8 +106,8 @@
|
|||||||
<el-table-column show-overflow-tooltip prop="pcsn" label="物料批次" width="160" align="center">
|
<el-table-column show-overflow-tooltip prop="pcsn" label="物料批次" width="160" align="center">
|
||||||
<template scope="scope"><el-input v-model="tableData[scope.$index].pcsn" class="input-with-select" /></template>
|
<template scope="scope"><el-input v-model="tableData[scope.$index].pcsn" class="input-with-select" /></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column show-overflow-tooltip prop="plan_qty" label="计划数量" width="160" align="center">
|
<el-table-column show-overflow-tooltip prop="qty" label="计划数量" width="160" align="center">
|
||||||
<template scope="scope"><el-input-number v-model="tableData[scope.$index].plan_qty" class="input-with-select" /></template>
|
<template scope="scope"><el-input-number v-model="tableData[scope.$index].qty" class="input-with-select" /></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column show-overflow-tooltip prop="unit_id" label="单位" width="160">
|
<el-table-column show-overflow-tooltip prop="unit_id" label="单位" width="160">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@@ -321,11 +321,15 @@ export default {
|
|||||||
},
|
},
|
||||||
tableDtlMaterial2(data) {
|
tableDtlMaterial2(data) {
|
||||||
let mst = data['t'];
|
let mst = data['t'];
|
||||||
let rows = data['item'];
|
let rows = [];
|
||||||
this.form.source_form_type = mst.form_type
|
this.form.source_form_type = mst.form_type
|
||||||
this.form.source_form_id = mst.id
|
this.form.source_form_id = mst.id
|
||||||
let mst_form_data = mst.form_data;
|
let mst_form_data = mst.form_data;
|
||||||
|
if (data['item'] ==null || data['item'].length == 0){
|
||||||
|
rows.push(mst)
|
||||||
|
}else {
|
||||||
|
rows = data['item']
|
||||||
|
}
|
||||||
this.cols.forEach(a=>{
|
this.cols.forEach(a=>{
|
||||||
let item = ''
|
let item = ''
|
||||||
if (a.value in mst_form_data) {
|
if (a.value in mst_form_data) {
|
||||||
|
|||||||
@@ -107,8 +107,7 @@
|
|||||||
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" />
|
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" />
|
||||||
<el-table-column show-overflow-tooltip prop="material_spec" label="物料规格" />
|
<el-table-column show-overflow-tooltip prop="material_spec" label="物料规格" />
|
||||||
<el-table-column show-overflow-tooltip prop="pcsn" label="批次" />
|
<el-table-column show-overflow-tooltip prop="pcsn" label="批次" />
|
||||||
<el-table-column show-overflow-tooltip prop="plan_qty" label="计划数量" />
|
<el-table-column show-overflow-tooltip prop="qty" label="计划数量" />
|
||||||
<el-table-column show-overflow-tooltip prop="qty" label="载具分配数量" />
|
|
||||||
<el-table-column show-overflow-tooltip prop="unit_id" label="单位" align="center" />
|
<el-table-column show-overflow-tooltip prop="unit_id" label="单位" align="center" />
|
||||||
<el-table-column show-overflow-tooltip prop="stor_code" label="仓库" />
|
<el-table-column show-overflow-tooltip prop="stor_code" label="仓库" />
|
||||||
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位" width="160"/>
|
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位" width="160"/>
|
||||||
@@ -142,6 +141,7 @@
|
|||||||
<el-table-column min-width="120" show-overflow-tooltip prop="material_spec" label="物料规格" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="material_spec" label="物料规格" align="center" />
|
||||||
<el-table-column prop="pcsn" label="批次" align="center" width="150" />
|
<el-table-column prop="pcsn" label="批次" align="center" width="150" />
|
||||||
<el-table-column prop="qty" :formatter="crud.formatNum3" label="数量" align="center" />
|
<el-table-column prop="qty" :formatter="crud.formatNum3" label="数量" align="center" />
|
||||||
|
<el-table-column prop="frozen_qty" :formatter="crud.formatNum3" label="分配数量" align="center" />
|
||||||
<el-table-column min-width="120" show-overflow-tooltip prop="stor_code" label="仓库" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="stor_code" label="仓库" align="center" />
|
||||||
<el-table-column min-width="120" show-overflow-tooltip prop="struct_code" label="载具所在仓位" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="struct_code" label="载具所在仓位" align="center" />
|
||||||
<el-table-column prop="point_code1" label="任务起始位置" align="center" width="120"/>
|
<el-table-column prop="point_code1" label="任务起始位置" align="center" width="120"/>
|
||||||
|
|||||||
@@ -91,7 +91,7 @@
|
|||||||
<el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
|
||||||
<el-table-column min-width="120" show-overflow-tooltip prop="material_spec" label="物料规格" align="center" />
|
<el-table-column min-width="120" show-overflow-tooltip prop="material_spec" label="物料规格" align="center" />
|
||||||
<el-table-column prop="pcsn" label="批次" width="150" align="center" />
|
<el-table-column prop="pcsn" label="批次" width="150" align="center" />
|
||||||
<el-table-column prop="plan_qty" :formatter="crud.formatNum3" label="计划数量" align="center" />
|
<el-table-column prop="qty" :formatter="crud.formatNum3" label="计划数量" align="center" />
|
||||||
<el-table-column prop="qty" :formatter="crud.formatNum3" width="150" label="载具物料数量" align="center" />
|
<el-table-column prop="qty" :formatter="crud.formatNum3" width="150" label="载具物料数量" align="center" />
|
||||||
<el-table-column prop="unit_id" label="单位" align="center" />
|
<el-table-column prop="unit_id" label="单位" align="center" />
|
||||||
<el-table-column prop="vehicle_code" label="载具" align="center" />
|
<el-table-column prop="vehicle_code" label="载具" align="center" />
|
||||||
|
|||||||
Reference in New Issue
Block a user