add:拣选出库流程配置

This commit is contained in:
zhangzq
2024-06-14 09:47:10 +08:00
parent 95a52eb5a9
commit ef5da84d53
18 changed files with 406 additions and 34 deletions

View File

@@ -32,7 +32,7 @@ public enum StatusEnum {
* 出入库单据类型
*/
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask")),
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask")),
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask", "拣选出库", "23","outStorageTask")),
/**
* 任务类型
@@ -59,20 +59,12 @@ public enum StatusEnum {
private ForkMap<String, String,String> code;
public String code(String desc) {
String code = this.getCode().getM(desc);
String code = this.getCode().getNode(desc);
if (StringUtils.isNotEmpty(code)) {
return code;
}
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()) {
@@ -84,7 +76,7 @@ public enum StatusEnum {
return r;
}
}
throw new BadRequestException(this.name() + "对应编码" + code + "未定义x");
throw new BadRequestException(this.name() + "对应编码" + code + "未定义x的数据");
}
public Boolean check(String code) {

View File

@@ -25,6 +25,15 @@ public class ForkMap<L,M,R> implements Serializable {
return node.middle;
}
public <L> L getNode(M desc){
for (Node<L,M,R> value : items.values()) {
if (value.middle.equals(desc)){
return value.left;
}
}
return null;
}
public <R> R getR(L key){
Node<L,M,R> node = items.get(hash(key));
if (node==null){
@@ -52,7 +61,7 @@ public class ForkMap<L,M,R> implements Serializable {
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]);
map.put(keys[i*3+1],keys[i*3],keys[i*3+2]);
}
return map;
}

View File

@@ -93,11 +93,13 @@ public class SpelUtil {
}
public static <Z> Z parse(JSONObject sourceData, String skip, Class<Z> target){
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("M",sourceData);
Map<String, Object> innerMap = sourceData.getInnerMap();
context.setVariable("M",innerMap);
Expression expression = SpelUtil.SPEL_PARSER.parseExpression(skip);
try {
return expression.getValue(context, target);
}catch (SpelEvaluationException ex){
ex.printStackTrace();
throw new BadRequestException("当前业务数据没有映射 对应的数据"+skip);
}
}

View File

@@ -0,0 +1,99 @@
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.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.system_manage.service.param.ISysParamService;
import org.nl.wms.system_manage.service.param.dao.Param;
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.stream.Collectors;
/*
* @author ZZQ
* @Date 2024/5/6 14:34
* 出库任务入库任务
*/
@Service
public class OutStorageTask extends AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISysParamService iSysParamService;
@Autowired
private IStIvtStructattrService iStIvtStructattrService;
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
@Transactional
public JSONObject createTask(JSONObject from) {
String vehicle_code = from.getString("vehicle_code");
String target_point = from.getString("target_point");
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)){
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(",")));
}
StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("vehicle_code", vehicle_code));
SchBaseTask task = new SchBaseTask();
task.setId(IdUtil.getStringId());
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(from.getString("task_type"));
task.setVehicle_code(vehicle_code);
task.setPoint_code1(struct.getStruct_code());
task.setPoint_code2(target_point);
taskService.save(task);
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()));
//TODO:是否下发
Boolean isSend = from.getBoolean("is_send");
if (isSend){
//参数封装调acs接口
}
return (JSONObject)JSON.toJSON(task);
}
@Override
public void updateStatus(JSONObject data) {
}
@Override
public void cancel(JSONObject data) {
}
}

View File

@@ -0,0 +1,93 @@
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.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.system_manage.service.param.ISysParamService;
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.stream.Collectors;
/*
* @author ZZQ
* @Date 2024/5/6 14:34
* 拣选出库任务:
* 判断拣选台是否开启:任务平均分配
*/
@Service
public class PickStorageTask extends AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
@Transactional
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");
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(struct_code)){
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
}
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("task_type", from.getString("task_type"))
.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.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(from.getString("task_type"));
task.setVehicle_code(vehicle_code);
task.setPoint_code1(struct_code);
task.setPoint_code2(target_point);
taskService.save(task);
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
.set(MdPbVehicleMater::getTask_code,task.getTask_code())
.eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()));
//TODO:是否下发
Boolean isSend = from.getBoolean("is_send");
if (isSend){
//参数封装调acs接口
}
return (JSONObject)JSON.toJSON(task);
}
@Override
public void updateStatus(JSONObject data) {
}
@Override
public void cancel(JSONObject data) {
}
}

View File

@@ -55,7 +55,7 @@
md_pb_vehicleMater
LEFT JOIN st_ivt_structattr ON md_pb_vehicleMater.vehicle_code = st_ivt_structattr.vehicle_code
LEFT JOIN md_me_materialbase ON md_pb_vehicleMater.material_id = md_me_materialbase.material_id
LEFT JOIN sch_base_task ON (md_pb_vehicleMater.vehicle_code = sch_base_task.vehicle_code and md_pb_vehicleMater.task_code = sch_base_task.task_code )
LEFT JOIN sch_base_task ON md_pb_vehicleMater.task_code = sch_base_task.task_code
where md_pb_vehicleMater.vehicle_code in
<foreach collection="vehicles" item="vehicle_code" open="(" close=")" separator=",">
#{vehicle_code}

View File

@@ -27,7 +27,7 @@ public class BpmnJSONConverter {
Node_Converter.put("strucForm",new StrucFormConverter());
Node_Converter.put("startEvent",new StartEventConverter());
Node_Converter.put("endEvent",new EndEventConverter());
Node_Converter.put("gateWay",new GatewayConverter());
Node_Converter.put("gateWay",new GateWayConverter());
Node_Converter.put("serverTask",new ServerTaskConverter());
Node_Converter.put("sequenceFlow",new SequenceFlowConverter());
Node_Converter.put("sendMsg",new SendMsgConverter());

View File

@@ -12,7 +12,7 @@ import java.util.Iterator;
* @author ZZQ
* @Date 2024/4/26 11:08
*/
public class GatewayConverter extends BaseNodeConverter {
public class GateWayConverter extends BaseNodeConverter {
@Override
public FlowNode convertToBpmnModel(Iterator<JSONObject> iterator, JSONObject node, BpmnModel model) {
JSONObject properties = node.getJSONObject("properties");

View File

@@ -1,19 +1,61 @@
package org.nl.wms.flow_manage.flow.framework.engine.behavior.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.ListOf;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SpelUtil;
import org.nl.wms.flow_manage.flow.framework.engine.behavior.FlowNodeActivityBehavior;
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
import org.nl.wms.flow_manage.flow.framework.entity.node.base.impl.FlowElement;
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.Sequence.SequenceFlow;
import org.nl.wms.flow_manage.flow.framework.entity.node.impl.gateway.GateWay;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/*
* @author ZZQ
* @Date 2024/3/18 13:17
* 互斥网关循环target只有一个满足
* 逻辑判断表达式如下:"#M['plan_qty']>#M['qty']"
*/
@Service("gateWay")
public class GateWayActivityBehavior extends FlowNodeActivityBehavior {
public class GateWayActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
@Override
public void execute(ExecutionEntity execution) {
System.out.println(execution.getCurrentFlowElement().getType());
super.execute(execution);
public void execute(ExecutionEntity<JSONObject> entity) {
System.out.println("流经网关参数:"+entity.getT().toString());
FlowElement element = entity.getCurrentFlowElement();
GateWay gateWay = (GateWay) element;
List<SequenceFlow> targetSequence = new ArrayList<>();
for (SequenceFlow sequenceFlow : gateWay.getOutgoingFlows()) {
String skipExpression = sequenceFlow.getSkipExpression();
Boolean parse = SpelUtil.parse(entity.getT().getJSONObject("t"),skipExpression, Boolean.class);
if (parse){
targetSequence.add(sequenceFlow);
break;
}
}
if (CollectionUtils.isEmpty(targetSequence)){
throw new BadRequestException("当前网关没有满足的流程线");
}
gateWay.setOutgoingFlows(targetSequence);
//处理流程线:将结果值封装
super.execute(entity);
}
public static void main(String[] args) {
String data = "{\"stor_code\":\"FStockId\",\"vehicleMaterMap\":{\"D00001\":{\"stor_code\":\"FStockId\",\"create_time\":\"2024-06-11 15:39:47\",\"task_code\":\"28457\",\"form_data\":{\"FMoBillNo\":\"\",\"single_weight\":\"\"},\"group_id\":\"1800432729389666304\",\"qty\":333,\"proc_inst_id\":\"1800433990847565824\",\"is_lock\":true,\"pcsn\":\"11\",\"material_id\":\"FMaterialId\",\"id\":\"1800432729389666305\",\"has_child\":false,\"frozen_qty\":333,\"vehicle_code\":\"D00001\",\"source_form_id\":\"1798554623695523840\",\"source_form_type\":\"PRD_FeedMtrl\",\"create_name\":\"管理员\"},\"D00002\":{\"stor_code\":\"FStockId\",\"create_time\":\"2024-06-11 15:41:39\",\"task_code\":\"28458\",\"form_data\":{\"FMoBillNo\":\"\",\"single_weight\":\"\"},\"group_id\":\"1800433197683707904\",\"qty\":222,\"proc_inst_id\":\"1800435270215143424\",\"is_lock\":true,\"pcsn\":\"11\",\"material_id\":\"FMaterialId\",\"id\":\"1800433197683707905\",\"has_child\":false,\"frozen_qty\":67,\"vehicle_code\":\"D00002\",\"source_form_id\":\"1798554665118470144\",\"source_form_type\":\"PRD_FeedMtrl\",\"create_name\":\"管理员\"}},\"form_data\":{\"order\":\"\"},\"qty\":400,\"pcsn\":\"11\",\"material_id\":\"FMaterialId\",\"id\":\"1800435564550426624\",\"inv_id\":\"1800435564521066496\",\"vehicle_code\":\"D00002\",\"source_form_id\":\"1798554623695523840\",\"unit_id\":\"16\",\"source_form_type\":\"PRD_FeedMtrl\",\"status\":\"10\"}";
JSONObject jsonObject = JSONObject.parseObject(data);
System.out.println(jsonObject.toJSONString());
// "#M['vehicleMaterMap'][M['vehicle_code']]['qty']"
Boolean parse = SpelUtil.parse(jsonObject, "#M['vehicleMaterMap'][#M['vehicle_code']]['frozen_qty'] < #M['vehicleMaterMap'][#M['vehicle_code']]['qty']", Boolean.class);
System.out.println(parse);
}
}

View File

@@ -86,6 +86,7 @@ public class StrucFormActivityBehavior extends FlowNodeActivityBehavior<JSONObje
mst_json.put("create_name",SecurityUtils.getCurrentNickName());
mst_json.put("status",StatusEnum.FORM_STATUS.code("生成"));
mst_json.put("code",CodeUtil.getNewCode(currentNode.getForm_type()));
mst_json.put("proc_inst_id",entity.getProc_inst_id());
PmFormData mst = mst_json.toJavaObject(PmFormData.class);
handler.put("form_id",mst.getId());
JSONArray itemArr = handler.getJSONArray("item");

View File

@@ -31,7 +31,7 @@ public class SequenceFlowOperation extends AbstractOperation {
if (!CollectionUtils.isEmpty(outgoingFlows)){
for (SequenceFlow sequenceFlow : outgoingFlows) {
String skipExpression = sequenceFlow.getSkipExpression();
//TODO:流程线的脚本判断获取当下一个节点:当前节点或者下个节点
//TODO:流程线的脚本判断获取当下一个节点:当前节点或者下个节点:这一步统一在网关中处理!!!
execution.setCurrentFlowElement(sequenceFlow.getTargetFlowElement());
}
CommandExecutor.getAgenda().planOperation(new ContinuOperation(execution));

View File

@@ -25,6 +25,7 @@ import org.nl.wms.stor_manage.io.service.iostor.dao.StIvtIostorinv;
import org.nl.wms.stor_manage.io.service.iostor.dao.mapper.StIvtIostorinvOutMapper;
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dto.StIvtIostorinvdtlVo;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.springframework.beans.factory.annotation.Autowired;
@@ -227,12 +228,12 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
public void taskOpen(JSONObject form) {
StIvtIostorinv iostorinv = form.toJavaObject(StIvtIostorinv.class);
//查询明细
List<StIvtIostorinvdtl> dtls = iStIvtIostorinvDtlService.list(new QueryWrapper<StIvtIostorinvdtl>().eq("inv_id", iostorinv.getId()));
//查询明细/api/bmFormStruc/getTypes
List<StIvtIostorinvdtlVo> dtlVo = iStIvtIostorinvDtlService.getDtlVo(iostorinv.getId());
//扔一个物料信息进去
BussEventMulticaster.Publish(new FlowStartEvent("st_ivt_iostorinv_"+(iostorinv.getIn_storage()?"in":"out"), null,null)
.build("st_ivt_iostorinv",iostorinv.getId(),iostorinv.getSource_form_type(),iostorinv.getSource_form_id(),form)
.build("st_ivt_iostorinvdtl",dtls)
.build("st_ivt_iostorinvdtl",dtlVo)
);
this.update(new UpdateWrapper<StIvtIostorinv>()

View File

@@ -2,6 +2,7 @@ package org.nl.wms.stor_manage.io.service.iostor_dtl;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dto.StIvtIostorinvdtlVo;
import java.util.List;
import java.util.Map;
@@ -18,7 +19,8 @@ public interface IStIvtIostorinvdtlService extends IService<StIvtIostorinvdtl> {
void batchInsert(List<StIvtIostorinvdtl> dtls);
List<Map> getByInv(String inv_id);
List<StIvtIostorinvdtlVo> getDtlVo(String inv_id);
}

View File

@@ -0,0 +1,102 @@
package org.nl.wms.stor_manage.io.service.iostor_dtl.dto;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Map;
/**
* <p>
* 出入库单明拆分
* </p>
*
* @author generator
* @since 2024-03-29
*/
@Data
public class StIvtIostorinvdtlVo {
/**
* 出入单明细标识
*/
private String id;
/**
* 出入单标识
*/
private String inv_id;
/**
* 源单号
*/
private String source_form_id;
/**
* 源单单据类型
*/
private String source_form_type;
/**
* 单据明细状态
*/
private String status;
/**
* 物料标识
*/
private String material_id;
/**
* 批次
*/
private String pcsn;
/**
* 数量计量单位标识
*/
private String unit_id;
/**
* 计划数量
*/
private BigDecimal qty;
/**
* 分配的载具
*/
private String vehicle_code;
/**
* 仓库
*/
private String stor_code;
/**
* 备注
*/
private String remark;
/**
* 操作时间
*/
private String update_time;
/**
* 表单数据
*/
private JSONObject form_data = new JSONObject();
/**
* 载具物料信息
*/
private MdPbVehicleMater vehicleMater;
}

View File

@@ -1,20 +1,23 @@
package org.nl.wms.stor_manage.io.service.iostor_dtl.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.utils.MapOf;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.mapper.StIvtIostorinvdtlMapper;
import org.nl.wms.stor_manage.io.service.iostor_dtl.dto.StIvtIostorinvdtlVo;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -31,6 +34,10 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
@Autowired
private IStIvtStructattrService iStIvtStructattrService;
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Override
public void batchInsert(List<StIvtIostorinvdtl> dtls) {
this.baseMapper.batchInsert(dtls);
@@ -58,4 +65,25 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl<StIvtIostorinvdtlM
return byInv;
}
@Override
public List<StIvtIostorinvdtlVo> getDtlVo(String inv_id) {
List<StIvtIostorinvdtlVo> list = new ArrayList<>();
if (StringUtils.isEmpty(inv_id)){
return list;
}
List<StIvtIostorinvdtl> dtl = this.list(new QueryWrapper<StIvtIostorinvdtl>().eq("inv_id", inv_id));
for (StIvtIostorinvdtl iostorinvdtl : dtl) {
for (String vehicle_code : iostorinvdtl.getVehicle_code().split(",")) {
StIvtIostorinvdtlVo vo = new StIvtIostorinvdtlVo();
BeanUtils.copyProperties(iostorinvdtl,vo);
MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", vehicle_code)
.eq("material_id", iostorinvdtl.getMaterial_id()));
vo.setVehicleMater(one);
vo.setVehicle_code(vehicle_code);
list.add(vo);
}
}
return list;
}
}

View File

@@ -130,8 +130,8 @@ public class SysDictController {
for (StatusEnum value : StatusEnum.values()) {
if (value.name().equals(type)){
ForkMap<String, String, String> forkMap = value.getCode();
for (String label : forkMap.getKeySet()) {
items.add(MapOf.of("label",label,"value",forkMap.getM(label)));
for (String code : forkMap.getKeySet()) {
items.add(MapOf.of("label",forkMap.getM(code),"value",code));
}
break;
}

View File

@@ -146,6 +146,7 @@
<el-table-column prop="pcsn" label="批次" align="center" width="150" />
<el-table-column show-overflow-tooltip prop="vehicle_code" 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 prop="point_code1" label="起始位置" align="center" width="120"/>
<el-table-column prop="point_code2" label="目的位置" align="center" width="120"/>
<el-table-column prop="task_code" label="任务号" align="center" />

View File

@@ -92,7 +92,6 @@
<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="qty" :formatter="crud.formatNum3" 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="vehicle_code" label="载具" align="center" />
<el-table-column prop="stor_code" label="仓库编号" align="center" />
@@ -125,7 +124,8 @@
<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 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="struct_code" label="载具所在仓位" align="center" />
<el-table-column prop="point_code1" label="任务起始位置" align="center" width="120"/>