rev:修复单据更新库存变动逻辑?后续考虑库存变动统一在变动这边做现在只处理记录
This commit is contained in:
@@ -34,12 +34,13 @@ public enum StatusEnum {
|
||||
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10","inStorageTask", "调拨入库", "11","inStorageTask", "退货入库", "12","inStorageTask","拣选回库", "13","inStorageTask","盘点入库", "14","inStorageTask","托盘入库", "30","inStorageTask")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask","拣选出库", "23","conveyorOutStorageTask","盘点出库", "24","outStorageTask","出库拣选", "25","toPickPlatformTask","托盘出库", "40","outStorageTask")),
|
||||
IOBILL_TYPE_MOVE(ForkMap.of("移库", "50","moveStorageTask")),
|
||||
EXT_TASK_TYPE(ForkMap.of("盘点", "60","moveStorageTask")),
|
||||
profit_loss(ForkMap.of("盘亏", "0",null,"盘盈", "1",null,"实盘", "2",null)),
|
||||
|
||||
/**
|
||||
* 任务类型
|
||||
*/
|
||||
TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code,IOBILL_TYPE_OUT.code,IOBILL_TYPE_MOVE.code)),
|
||||
TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code,IOBILL_TYPE_OUT.code,IOBILL_TYPE_MOVE.code,EXT_TASK_TYPE.code)),
|
||||
|
||||
ACS_TYPE(ForkMap.of("立库", "10",null
|
||||
,"海柔", "20",null
|
||||
|
||||
@@ -94,6 +94,7 @@ public class StIvtBsrealstorattrController {
|
||||
int 层 = config.getInteger("z");
|
||||
String sect_code = config.getString("sect_code");
|
||||
String stor_code = config.getString("stor_code");
|
||||
String pre = config.getString("pre");
|
||||
String now = DateUtil.now();
|
||||
ArrayList<StIvtStructattr> list = new ArrayList<>();
|
||||
for (int x = 1; x <= 排; x++) {
|
||||
@@ -103,9 +104,10 @@ public class StIvtBsrealstorattrController {
|
||||
attr.setId(IdUtil.getStringId());
|
||||
attr.setSect_code(sect_code);
|
||||
attr.setStor_code(stor_code);
|
||||
String nx = (x < 10) ? "0" + x : "" + x;
|
||||
String ny = (y < 10) ? "0" + y : "" + y;
|
||||
String nz = (z < 10) ? "0" + z : "" + z;
|
||||
attr.setStruct_code("L0"+x+"-"+ny+"-"+nz);
|
||||
attr.setStruct_code(pre+nx+"-"+ny+"-"+nz);
|
||||
attr.setStruct_name(x+"排"+y+"列"+z+"层");
|
||||
attr.setCreate_id("1");
|
||||
attr.setRow_num(x);
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.wms.base_manage.bsrealstorattr.service.IStIvtBsrealstorattrService;
|
||||
import org.nl.wms.base_manage.sect.service.IStIvtSectattrService;
|
||||
import org.nl.wms.base_manage.sect.service.dao.StIvtSectattr;
|
||||
import org.nl.wms.base_manage.sect.service.dto.SectQuery;
|
||||
@@ -15,6 +16,7 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -35,10 +37,12 @@ public class StIvtSectattrController {
|
||||
*/
|
||||
@Autowired
|
||||
private IStIvtSectattrService iStIvtSectattrService;
|
||||
@Autowired
|
||||
private IStIvtBsrealstorattrService iStIvtBsrealstorattrService;
|
||||
|
||||
@GetMapping
|
||||
public ResponseEntity<Object> query(SectQuery query, PageQuery page) {
|
||||
return new ResponseEntity<>(iStIvtSectattrService.pageQuery(query, page), HttpStatus.OK);
|
||||
return new ResponseEntity<>(TableDataInfo.build(iStIvtSectattrService.page(page.build(),query.build())), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@@ -55,7 +59,9 @@ public class StIvtSectattrController {
|
||||
|
||||
@DeleteMapping
|
||||
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
|
||||
iStIvtSectattrService.deleteAll(ids);
|
||||
if (ids.length>0){
|
||||
iStIvtSectattrService.removeByIds(Arrays.asList(ids));
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ public class StIvtSectattr implements Serializable {
|
||||
/**
|
||||
* 仓库标识
|
||||
*/
|
||||
private String stor_id;
|
||||
private String stor_code;
|
||||
|
||||
/**
|
||||
* 仓库类型
|
||||
|
||||
@@ -5,6 +5,7 @@ import org.nl.common.domain.entity.BaseQuery;
|
||||
import org.nl.common.domain.entity.QParam;
|
||||
import org.nl.common.enums.QueryTEnum;
|
||||
import org.nl.wms.base_manage.bsrealstorattr.service.dao.StIvtBsrealstorattr;
|
||||
import org.nl.wms.base_manage.sect.service.dao.StIvtSectattr;
|
||||
|
||||
/**
|
||||
* 仓库查询条件
|
||||
@@ -12,7 +13,7 @@ import org.nl.wms.base_manage.bsrealstorattr.service.dao.StIvtBsrealstorattr;
|
||||
* @Date 2023/11/10 14:49
|
||||
*/
|
||||
@Data
|
||||
public class SectQuery extends BaseQuery<StIvtBsrealstorattr> {
|
||||
public class SectQuery extends BaseQuery<StIvtSectattr> {
|
||||
|
||||
/**
|
||||
* 仓库编码
|
||||
|
||||
@@ -59,7 +59,6 @@ public class StIvtSectattrServiceImpl extends ServiceImpl<StIvtSectattrMapper, S
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void create(StIvtSectattr dao) {
|
||||
|
||||
StIvtSectattr isDao = this.getOne(
|
||||
@@ -80,7 +79,7 @@ public class StIvtSectattrServiceImpl extends ServiceImpl<StIvtSectattrMapper, S
|
||||
dao.setUpdate_time(DateUtil.now());
|
||||
dao.setCreate_time(DateUtil.now());
|
||||
|
||||
StIvtBsrealstorattr attrDao = iStIvtBsrealstorattrService.getById(dao.getStor_id());
|
||||
StIvtBsrealstorattr attrDao = iStIvtBsrealstorattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_code",dao.getStor_code()));
|
||||
dao.setStor_type(attrDao.getStor_type_scode());
|
||||
this.save(dao);
|
||||
|
||||
@@ -89,18 +88,14 @@ public class StIvtSectattrServiceImpl extends ServiceImpl<StIvtSectattrMapper, S
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(StIvtSectattr dao) {
|
||||
|
||||
StIvtSectattr isDao = this.getById(dao.getSect_id());
|
||||
|
||||
if (isDao == null) {
|
||||
throw new BadRequestException("被删除或无权限,操作失败!");
|
||||
}
|
||||
|
||||
dao.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
dao.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
dao.setUpdate_time(DateUtil.now());
|
||||
|
||||
StIvtBsrealstorattr attrDao = iStIvtBsrealstorattrService.getById(dao.getStor_id());
|
||||
StIvtBsrealstorattr attrDao = iStIvtBsrealstorattrService.getOne(new QueryWrapper<StIvtBsrealstorattr>().eq("stor_code",dao.getStor_code()));
|
||||
dao.setStor_type(attrDao.getStor_type_scode());
|
||||
|
||||
this.updateById(dao);
|
||||
|
||||
@@ -68,7 +68,7 @@ public class OutStorageTask extends AbstractTask {
|
||||
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
|
||||
}
|
||||
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
|
||||
.ne("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
|
||||
}
|
||||
|
||||
@@ -45,24 +45,31 @@ public class ExecuteFlowActivityBehavior extends FlowNodeActivityBehavior<JSONOb
|
||||
ExecuteFlow.DataSourceEnum dataSource = executeFlow.getDataSource();
|
||||
switch (dataSource){
|
||||
case FLOWNODE:
|
||||
sourceData = one.getForm_data().getJSONObject("t");
|
||||
sourceData = one.getForm_data();
|
||||
break;
|
||||
case DATASORUCE:
|
||||
PmFormData formData = iPmFormDataService.getOne(new QueryWrapper<PmFormData>()
|
||||
.eq("id", one.getForm_id()).eq("form_type", one.getForm_type()));
|
||||
sourceData = (JSONObject) JSON.toJSON(formData);
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("t", JSON.toJSON(formData));
|
||||
jsonObject.put("form_type",formData.getForm_type());
|
||||
jsonObject.put("form_id",formData.getId());
|
||||
sourceData = jsonObject;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + dataSource);
|
||||
}
|
||||
String skipExpression = executeFlow.getSkipExpression();
|
||||
if (StringUtils.isNotEmpty(skipExpression)) {
|
||||
Boolean parse = SpelUtil.parse(sourceData, skipExpression, Boolean.class);
|
||||
Boolean parse = SpelUtil.parse(sourceData.getJSONObject("t"), skipExpression, Boolean.class);
|
||||
if (!parse){
|
||||
throw new BadRequestException("当前中转节点数据校验不通过"+skipExpression+",无法跳转到下个节点");
|
||||
}
|
||||
}
|
||||
//处理流程线:将结果值封装
|
||||
entity.setT(sourceData);
|
||||
entity.setForm_id(one.getForm_id());
|
||||
entity.setForm_type(one.getForm_type());
|
||||
super.execute(entity);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.nl.wms.flow_manage.flow.framework.engine.behavior.impl;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
@@ -88,7 +89,11 @@ public class StartEventActivityBehavior extends FlowNodeActivityBehavior {
|
||||
execution.setCreate_time(DateUtil.now());
|
||||
execution.setStatus(StatusEnum.FLOW_STATUS.code("启动"));
|
||||
iActRuExecutionService.save(execution);
|
||||
|
||||
if (StringUtils.isNotEmpty(entity.getParent_id())){
|
||||
iActRuExecutionService.update(new UpdateWrapper<ActRuExecution>()
|
||||
.set("has",true)
|
||||
.eq("proc_inst_id",entity.getParent_id()));
|
||||
}
|
||||
entity.setProc_inst_id(execution.getProc_inst_id());
|
||||
|
||||
}
|
||||
|
||||
@@ -4,8 +4,11 @@ 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.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.queue.CircularFifoQueue;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
@@ -17,9 +20,11 @@ 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.pm_manage.form_data.service.dto.PmFormDataDto;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.cache.CacheProperties;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
@@ -34,7 +39,6 @@ public class MappingHandler extends TypeHandler<JSONObject, JSONObject> {
|
||||
public JSONObject handler(List<String> param, JSONObject data, BmFormStruc form_struc) {
|
||||
log.info("映射信息:数据:{},映射关系:{},目标表结构:{}",data.toJSONString(),param.toString(),form_struc.getForm_type()+"_"+form_struc.getForm_param().toJSONString());
|
||||
JSONObject resultT = new JSONObject();
|
||||
|
||||
JSONObject mapping = JSONObject.parseObject(param.size()==1?param.get(0):param.remove(0));
|
||||
JSONObject sourceFormData = new JSONObject(data.getJSONObject("t"));
|
||||
//数据平铺
|
||||
|
||||
@@ -66,12 +66,11 @@ public class StorageChangesProcessHandler implements ClassProcess {
|
||||
//基于单据变动
|
||||
Map<String, String> spelMap = new HashMap<>();
|
||||
Map<String, String> valueMap = new HashMap<>();
|
||||
// "start_struct_code","end_struct_code","change_qty"
|
||||
for (String base_field : Base_Fields) {
|
||||
String skip = param.getString("base_field");
|
||||
if (skip.contains("#M")){
|
||||
spelMap.put(base_field,skip);
|
||||
}else {
|
||||
valueMap.put(base_field,skip);
|
||||
String skip = param.getString(base_field);
|
||||
if (StringUtils.isNotEmpty(skip)){
|
||||
(skip.contains("#M") ? spelMap : valueMap).put(base_field,skip);
|
||||
}
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(spelMap)){
|
||||
@@ -80,12 +79,12 @@ public class StorageChangesProcessHandler implements ClassProcess {
|
||||
}
|
||||
String start_struct_code = valueMap.get("start_struct_code");
|
||||
String end_struct_code = valueMap.get("end_struct_code");
|
||||
String change_qty = StringUtils.isEmpty(valueMap.get("change_qty"))?null:valueMap.get("change_qty");
|
||||
BigDecimal change_qty = StringUtils.isEmpty(valueMap.get("change_qty"))?null:new BigDecimal(valueMap.get("change_qty"));
|
||||
if (StringUtils.isNotEmpty(start_struct_code)){
|
||||
iStIvtStructattrService.changeStruct(start_struct_code,vehicle_code,param.getString("task_type"), new BigDecimal(change_qty),Boolean.FALSE);
|
||||
iStIvtStructattrService.changeStruct(start_struct_code,vehicle_code,param.getString("task_type"), change_qty,Boolean.FALSE);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(end_struct_code)){
|
||||
iStIvtStructattrService.changeStruct(end_struct_code,vehicle_code,param.getString("task_type"), new BigDecimal(change_qty),Boolean.TRUE);
|
||||
iStIvtStructattrService.changeStruct(end_struct_code,vehicle_code,param.getString("task_type"), change_qty,change_qty.intValue()<0?Boolean.FALSE:Boolean.TRUE);
|
||||
}
|
||||
}
|
||||
return from;
|
||||
|
||||
@@ -39,6 +39,10 @@ public class ActRuExecution implements Serializable {
|
||||
* 父流程id
|
||||
*/
|
||||
private String parent_id;
|
||||
/**
|
||||
* 是否含有子流程
|
||||
*/
|
||||
private Boolean has;
|
||||
|
||||
/**
|
||||
* 当前实例对应版本的部署id
|
||||
|
||||
@@ -50,8 +50,8 @@ public class ActRuExecutionServiceImpl extends ServiceImpl<ActRuExecutionMapper,
|
||||
QueryWrapper<ActRuExecution> build = (QueryWrapper) query.build();
|
||||
build.isNull("parent_id");
|
||||
Page<ActRuExecution> executionPage = this.page(page.build(), build);
|
||||
List<ActRuExecution> records = executionPage.getRecords();
|
||||
this.findChildren(records);
|
||||
// List<ActRuExecution> records = executionPage.getRecords();
|
||||
// this.findChildren(records);
|
||||
return TableDataInfo.build(executionPage);
|
||||
}
|
||||
|
||||
|
||||
@@ -95,16 +95,13 @@ public class CheckController {
|
||||
@Log("盘点完成")
|
||||
public ResponseEntity<Object> checkFinish(@RequestBody JSONObject param) {
|
||||
//TODO:明细校验
|
||||
PmFormData pmFormData = param.toJavaObject(PmFormData.class);
|
||||
iPmFormDataService.update(new UpdateWrapper<PmFormData>()
|
||||
.set("status", StatusEnum.FORM_STATUS.code("已分配"))
|
||||
.set("form_data",param.getJSONObject("form_data").toJSONString())
|
||||
.eq("id",param.getString("id")));
|
||||
checkStorageService.checkFinish(param);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@DeleteMapping()
|
||||
@Log("删除盘点单")
|
||||
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
|
||||
checkStorageService.delete(ids);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
|
||||
@@ -3,15 +3,18 @@ package org.nl.wms.stor_manage.checkStorage.service;
|
||||
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.UpdateWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.function.PermeateFunction;
|
||||
import org.nl.common.publish.BussEventMulticaster;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.flow_manage.flow.framework.entity.ExecutionDto;
|
||||
import org.nl.wms.flow_manage.monitor.event.FlowContinueEvent;
|
||||
import org.nl.wms.flow_manage.monitor.event.FlowStartEvent;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
@@ -24,6 +27,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -124,7 +128,6 @@ public class CheckStorageService {
|
||||
.eq("id",mst.getId()));
|
||||
});
|
||||
BussEventMulticaster.Publish(startEvent);
|
||||
|
||||
}
|
||||
private List<ExecutionDto> packageT(JSONObject current,String itemField){
|
||||
String id = current.getString(itemField);
|
||||
@@ -146,4 +149,31 @@ public class CheckStorageService {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void checkFinish(JSONObject form){
|
||||
List<PmFormData> dtls = iFormDataService.getByParentId(form.getString("id"));
|
||||
|
||||
List<String> tmpCollect = dtls.stream().map(PmFormData::getVehicle_code).collect(Collectors.toList());
|
||||
Map<String, String> vehicleMap = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||
.select("vehicle_code", "proc_inst_id")
|
||||
.in("vehicle_code", tmpCollect)
|
||||
.last("group by vehicle_code")).stream().collect(HashMap::new, (formMap, o) -> {
|
||||
formMap.put(o.getVehicle_code(), o.getProc_inst_id());
|
||||
}, HashMap::putAll);
|
||||
//更新载具物料关系
|
||||
for (PmFormData dtl : dtls) {
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("qty",dtl.getForm_data().getBigDecimal("change_qty"))
|
||||
.eq("vehicle_code",dtl.getVehicle_code()));
|
||||
}
|
||||
for (PmFormData dtl : dtls) {
|
||||
FlowContinueEvent continueEvent = new FlowContinueEvent(vehicleMap.get(dtl.getVehicle_code()), null, null);
|
||||
continueEvent.setCallback(emp->{
|
||||
iFormDataService.update(new UpdateWrapper<PmFormData>()
|
||||
.set("status",StatusEnum.FORM_STATUS.code("执行中"))
|
||||
.eq("id",dtl.getId()));
|
||||
});
|
||||
BussEventMulticaster.Publish(continueEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
record.setMaterial_id(vehicleMater.getMaterial_id());
|
||||
record.setPcsn(vehicleMater.getPcsn());
|
||||
record.setQty(vehicleMater.getQty());
|
||||
record.setChange_qty(change_qty==null?vehicleMater.getQty():change_qty);
|
||||
record.setChange_qty(change_qty==null?vehicleMater.getQty():change_qty.abs());
|
||||
record.setTask_type(task_type);
|
||||
record.setFrozen_qty(vehicleMater.getFrozen_qty());
|
||||
record.setSource_form_type(vehicleMater.getSource_form_type());
|
||||
|
||||
Reference in New Issue
Block a user