package com.zy.asrs.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.Cools;
|
import com.core.common.SnowflakeIdWorker;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.constant.AsrsConstants;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.entity.param.LocDetlAdjustParam;
|
import com.zy.asrs.entity.param.StockOutParam;
|
import com.zy.asrs.service.*;
|
import com.zy.asrs.utils.OrderUtils;
|
import com.zy.asrs.utils.Utils;
|
import com.zy.common.model.LocDto;
|
import com.zy.common.model.OrderDto;
|
import com.zy.common.model.StartupDto;
|
import com.zy.common.model.TaskDto;
|
import com.zy.common.service.AgvCommonService;
|
import com.zy.common.web.BaseController;
|
import com.zy.system.entity.Config;
|
import com.zy.system.service.ConfigService;
|
import lombok.Synchronized;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicReference;
|
|
/**
|
* Created by vincent on 2020/6/11
|
*/
|
@Slf4j
|
@Service
|
@Transactional
|
public class AgvWorkServiceImpl implements AgvWorkService {
|
|
// 工作号生成规则默认类型
|
private static final int DEFAULT_WORK_NO_TYPE = 0;
|
// 库位排号分配默认类别
|
private static final int DEFAULT_ROW_NO_TYPE = 1;
|
@Autowired
|
private AgvWaitPakinService agvWaitPakinService;
|
@Autowired
|
private AgvBasDevpService agvBasDevpService;
|
@Autowired
|
private AgvLocMastService agvLocMastService;
|
@Autowired
|
private AgvLocDetlService agvLocDetlService;
|
@Autowired
|
private AgvCommonService agvCommonService;
|
@Autowired
|
private AgvWrkMastService agvWrkMastService;
|
@Autowired
|
private AgvWrkDetlService agvWrkDetlService;
|
@Autowired
|
private MatService matService;
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private AdjDetlService adjDetlService;
|
@Autowired
|
private AgvWrkMastLogService agvWrkMastLogService;
|
@Autowired
|
private AgvWrkDetlLogService agvWrkDetlLogService;
|
@Autowired
|
private WrkMastExecuteService wrkMastExecuteService;
|
@Autowired
|
private ConfigService configService;
|
@Autowired
|
private SnowflakeIdWorker snowflakeIdWorker;
|
@Autowired
|
private FlowLogService flowLogService;
|
@Autowired
|
private LocDetlServiceImpl locDetlService;
|
|
|
/*
|
入库
|
*/
|
@Transactional
|
@Synchronized
|
public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId, boolean isConveyor) {
|
|
Date now = new Date();
|
|
agvBasDevpList.forEach(agvBasDevp -> {
|
if (Cools.isEmpty(agvBasDevp.getBarcode())) {
|
throw new CoolException("选中的站点中含有未绑定货架的站点,请重新选择");
|
}
|
|
if (!"F".equals(agvBasDevp.getLocSts())) {
|
throw new CoolException("选中的站点中含有货位状态不为F.在库的站点,请重新选择");
|
}
|
|
List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode()));
|
|
//检索库位,选择合适的库位
|
AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(), agvBasDevp.getFloor(), false, false);
|
//生成工作档
|
AgvWrkMast wrkMast = createWrkMast(1, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), agvBasDevp.getBarcode(), now, userId, agvBasDevp.getLocType2(), agvLocMast.getPltType());
|
//标记是否为输送线入库
|
wrkMast.setMk(isConveyor ? "Y" : "N");
|
//生成工作档明细
|
agvWaitPakinList.forEach(wp -> {
|
createWrkDetlReWrite(wp.getMatnr(), wrkMast.getWrkNo(), wp.getOrderNo(), wp.getBatch(), wp.getAnfme(), wp.getSuppCode(), now, userId, wp.getThreeCode(), wp.getDeadTime(), wp.getProcessSts());
|
});
|
//更新源站点信息
|
updateAgvBasDevp(agvBasDevp, "R");
|
//更新目标库位状态
|
updateAgvLocMast(agvLocMast, "S");
|
|
});
|
|
//TODO
|
return null;
|
}
|
|
/*
|
订单出库
|
*/
|
@Transactional
|
public void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId) {
|
Date now = new Date();
|
|
agvTaskDtos.forEach(taskDto -> {
|
|
List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectByTaskDto(taskDto);
|
|
//AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo()));
|
|
//工作档所需参数
|
|
long wrkSts = 21L;
|
String sourceLocNo = taskDto.getLocNo();
|
String targetLocNo = taskDto.getAgvStaNo();
|
//String barcode = agvLocDetls.get(0).getSuppCode();
|
String containerCode = taskDto.getLocDtos().get(0).getContainerCode();
|
|
AgvLocMast agvLocMast = agvLocMastService.selectById(sourceLocNo);
|
//判断是否全板出库
|
int ioType = isPakOut(sourceLocNo, taskDto) ? 101 : 103;
|
//生成工作档
|
AgvWrkMast wrkMast = createWrkMast(ioType, wrkSts, sourceLocNo, targetLocNo, containerCode, now, userId, Short.valueOf(containerCode.substring(0, 2)), agvLocMast.getPltType());
|
//生成工作档明细
|
long flowId = snowflakeIdWorker.nextId();
|
taskDto.getLocDtos().forEach(locDto -> {
|
if (!BaseController.isJSON(locDto.getOrderNo())) {
|
//明细档所需参数
|
createWrkDetlReWrite(locDto.getMatnr(),
|
wrkMast.getWrkNo(),
|
locDto.getOrderNo(),
|
locDto.getBatch(),
|
locDto.getAnfme(),
|
locDto.getContainerCode(),
|
now,
|
userId,
|
locDto.getCsocode(),
|
locDto.getIsoseq(),
|
locDto.getProcessSts());
|
//OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
|
// AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
|
// 流水 -- 新增订单明细
|
// FlowLog flowLog = new FlowLog();
|
// flowLog.setFid(String.valueOf(flowId));
|
// flowLog.setSpare2(wrkMast.getWrkNo().toString());
|
// flowLog.setLocNo(wrkMast.getSourceLocNo());
|
// flowLog.setSpare1(containerCode);
|
// flowLog.setOpType(4L);
|
// flowLog.setOrderNo(locDto.getOrderNo());
|
// flowLog.setThreeCode(locDto.getCsocode());
|
// flowLog.setMatnr(locDto.getMatnr());
|
// flowLog.setMaktx(locDto.getMaktx());
|
// flowLog.setOrderPrevious(orderDetl.getAnfme());
|
// flowLog.setOrderCurrent(orderDetl.getAnfme());
|
// flowLog.setOrderChanged(0.0);
|
//
|
// flowLog.setQtyPrevious(orderDetl.getQty());
|
// flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme());
|
// flowLog.setQtyChanged(locDto.getAnfme());
|
//
|
// flowLog.setLocPrevious(locDetl.getAnfme());
|
// flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme());
|
// flowLog.setLocChanged(locDto.getAnfme());
|
// flowLog.setUserId(userId);
|
// flowLog.setAppeTime(now);
|
// if (!flowLogService.insert(flowLog)) {
|
// throw new CoolException("同步半成品调拨单流水记录失败");
|
// }
|
|
} else {
|
List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
|
orderDtoList.forEach(orderDto -> {
|
//明细档所需参数
|
createWrkDetlReWrite(locDto.getMatnr(),
|
wrkMast.getWrkNo(),
|
orderDto.getOrderNo(),
|
locDto.getBatch(),
|
orderDto.getAnfme(),
|
locDto.getContainerCode(),
|
now,
|
userId,
|
locDto.getCsocode(),
|
locDto.getIsoseq(),
|
locDto.getProcessSts());
|
});
|
}
|
|
|
//修改订单信息
|
modifyOrderDetl(locDto, userId);
|
});
|
// //修改订单信息
|
// modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
|
//更新源站点信息
|
String locSts = ioType == 101 ? "R" : "P";
|
updateAgvLocMast(agvLocMastService.selectById(sourceLocNo), locSts);
|
//更新目标站点状态
|
//locSts = ioType == 101 ? "S" : "Q";
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(targetLocNo);
|
agvBasDevp.setBarcode("");
|
updateAgvBasDevp(agvBasDevp, "S");
|
|
});
|
}
|
|
/*
|
加工出库
|
*/
|
@Transactional
|
public void processOut(List<TaskDto> agvTaskDtos, Long userId) {
|
Date now = new Date();
|
|
agvTaskDtos.forEach(taskDto -> {
|
|
List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectByTaskDto(taskDto);
|
|
//AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo()));
|
|
//工作档所需参数
|
|
long wrkSts = 21L;
|
String sourceLocNo = taskDto.getLocNo();
|
String targetLocNo = taskDto.getAgvStaNo();
|
//String barcode = agvLocDetls.get(0).getSuppCode();
|
String containerCode = taskDto.getLocDtos().get(0).getContainerCode();
|
|
AgvLocMast agvLocMast = agvLocMastService.selectById(sourceLocNo);
|
//判断是否全板出库
|
int ioType = 107;
|
//生成工作档
|
AgvWrkMast wrkMast = createWrkMast(ioType, wrkSts, sourceLocNo, targetLocNo, containerCode, now, userId, Short.valueOf(containerCode.substring(0, 2)), agvLocMast.getPltType());
|
//生成工作档明细
|
long flowId = snowflakeIdWorker.nextId();
|
taskDto.getLocDtos().forEach(locDto -> {
|
if (!BaseController.isJSON(locDto.getOrderNo())) {
|
//明细档所需参数
|
createWrkDetlReWrite(locDto.getMatnr(),
|
wrkMast.getWrkNo(),
|
locDto.getOrderNo(),
|
locDto.getBatch(),
|
locDto.getAnfme(),
|
locDto.getContainerCode(),
|
now,
|
userId,
|
locDto.getCsocode(),
|
locDto.getIsoseq(),
|
locDto.getProcessSts());
|
OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
|
AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
|
|
// FlowLog flowLog = new FlowLog();
|
// flowLog.setFid(String.valueOf(flowId));
|
// flowLog.setSpare2(wrkMast.getWrkNo().toString());
|
// flowLog.setLocNo(wrkMast.getSourceLocNo());
|
// flowLog.setSpare1(containerCode);
|
// flowLog.setOpType(6L);
|
// flowLog.setOrderNo(locDto.getOrderNo());
|
// flowLog.setThreeCode(locDto.getCsocode());
|
// flowLog.setMatnr(locDto.getMatnr());
|
// flowLog.setMaktx(locDto.getMaktx());
|
// flowLog.setOrderPrevious(orderDetl.getAnfme());
|
// flowLog.setOrderCurrent(orderDetl.getAnfme());
|
// flowLog.setOrderChanged(0.0);
|
//
|
// flowLog.setQtyPrevious(orderDetl.getQty());
|
// flowLog.setQtyCurrent(orderDetl.getQty() + locDto.getAnfme());
|
// flowLog.setQtyChanged(locDto.getAnfme());
|
//
|
// flowLog.setLocPrevious(locDetl.getAnfme());
|
// flowLog.setLocCurrent(locDetl.getAnfme() - locDto.getAnfme());
|
// flowLog.setLocChanged(locDto.getAnfme());
|
// flowLog.setUserId(userId);
|
// flowLog.setAppeTime(now);
|
// if (!flowLogService.insert(flowLog)) {
|
// throw new CoolException("同步半成品调拨单流水记录失败");
|
// }
|
} else {
|
List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
|
orderDtoList.forEach(orderDto -> {
|
//明细档所需参数
|
createWrkDetlReWrite(locDto.getMatnr(),
|
wrkMast.getWrkNo(),
|
orderDto.getOrderNo(),
|
locDto.getBatch(),
|
orderDto.getAnfme(),
|
locDto.getContainerCode(),
|
now,
|
userId,
|
locDto.getCsocode(),
|
locDto.getIsoseq(),
|
locDto.getProcessSts());
|
});
|
}
|
|
//修改订单信息
|
modifyOrderDetl(locDto, userId);
|
});
|
// //修改订单信息
|
// modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
|
//更新源站点信息
|
String locSts = "R";
|
updateAgvLocMast(agvLocMastService.selectById(sourceLocNo), locSts);
|
//更新目标站点状态
|
//locSts = ioType == 101 ? "S" : "Q";
|
updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo), "S", Short.valueOf(containerCode.substring(0, 2)), containerCode);
|
|
});
|
}
|
|
//拣料入库
|
@Transactional
|
public void pickIn(List<AgvWrkMast> agvWrkMastList) {
|
Date now = new Date();
|
agvWrkMastList.forEach(agvWrkMast -> {
|
|
//保存拣料出库的工作档和明细
|
agvWrkMastLogService.save(agvWrkMast);
|
agvWrkDetlLogService.save(agvWrkMast.getWrkNo());
|
|
//修改工作党
|
agvWrkMast.setWrkSts(201L);
|
|
//根据出库类型 设置入库类型 53拣料入库 57盘点入库
|
int ioType = agvWrkMast.getIoType() == 103 ? 53 : 57;
|
|
agvWrkMast.setIoType(ioType);
|
String locNo = agvWrkMast.getLocNo();
|
agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo());
|
agvWrkMast.setSourceLocNo(locNo);
|
agvWrkMast.setModiTime(now);
|
agvWrkMast.setIoTime(now);
|
agvWrkMast.setLogErrMemo("createWaitPainWrkMastStart");
|
agvWrkMastService.updateById(agvWrkMast);
|
|
List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
|
for (AgvWrkDetl agvWrkDetl : agvWrkDetlList) {
|
agvWrkDetl.setIoTime(now);
|
boolean bl = agvWrkDetlService.update(agvWrkDetl, new EntityWrapper<AgvWrkDetl>()
|
.eq("wrk_no", agvWrkDetl.getWrkNo())
|
.eq("matnr", agvWrkDetl.getMatnr())
|
.eq("order_no", agvWrkDetl.getOrderNo())
|
.eq("three_code", agvWrkDetl.getThreeCode()));
|
// .eq("dead_time",agvWrkDetl.getDeadTime()));
|
}
|
AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo());
|
//List<AgvLocDetl> agvLocDetlList = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo()));
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo());
|
|
////拣料入库
|
//if(ioType == 53){
|
// //修改工作党明细
|
// //agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
|
// //agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo()));
|
// //修改库存信息
|
// agvWrkDetlList.forEach(agvWrkDetl -> {
|
// AgvLocDetl agvLocDetl = agvLocDetlService.selectByMatnrAndBatchAndCsocodeAndisoCode(agvWrkMast.getLocNo(), agvWrkDetl.getMatnr(), agvWrkDetl.getBatch(), agvWrkDetl.getThreeCode(), agvWrkDetl.getDeadTime());
|
//
|
// //AgvLocDetl agvLocDetl = agvLocDetlService.selectLocdetl(agvWrkMast.getLocNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getBatch(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime());
|
// double updateAnfme = agvLocDetl.getAnfme() - agvWrkDetl.getAnfme();
|
// agvLocDetlService.updateAnfme(updateAnfme,agvLocDetl.getLocNo(),agvLocDetl.getMatnr(),agvLocDetl.getBatch(),agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime());
|
// });
|
//}
|
//修改库位信息
|
updateAgvLocMast(agvLocMast, "Q");
|
//修改站点信息
|
updateAgvBasDevp(agvBasDevp, "R");
|
|
});
|
}
|
|
/*
|
盘点出库
|
*/
|
@Transactional
|
public void locCheckOut(StockOutParam param, Long userId) {
|
String station = param.getStation();
|
|
List<TaskDto> taskDtos = new ArrayList<>();
|
param.getLocDetls().forEach(locDetl -> {
|
LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getCount(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getThreeCode(), locDetl.getDeadTime(), locDetl.getSuppCode(), locDetl.getProcessSts());
|
TaskDto taskDto = new TaskDto(locDetl.getLocNo(), station, locDto);
|
if (TaskDto.has(taskDtos, taskDto)) {
|
TaskDto.find(taskDtos, taskDto).getLocDtos().add(locDto);
|
} else {
|
taskDtos.add(taskDto);
|
}
|
});
|
|
Date now = new Date();
|
taskDtos.forEach(taskDto -> {
|
|
//判断是否有重复料想的工作当
|
AgvWrkMast agvWrkMastList = agvWrkMastService.selectByContainerCode(taskDto.getLocDtos().get(0).getContainerCode());
|
if (!Cools.isEmpty(agvWrkMastList)) {
|
return;
|
}
|
|
int containerType = getContainerTypeByloc(taskDto.getLocNo());
|
|
//生成工作档
|
AgvWrkMast wrkMast = createWrkMast(107, 21L, taskDto.getLocNo(), taskDto.getAgvStaNo(), taskDto.getLocDtos().get(0).getContainerCode(), now, userId, containerType, null);
|
//生成工作档明细
|
taskDto.getLocDtos().forEach(locDto -> {
|
//明细档所需参数
|
createWrkDetlReWrite(locDto.getMatnr(),
|
wrkMast.getWrkNo(),
|
locDto.getOrderNo(),
|
locDto.getBatch(),
|
locDto.getAnfme(),
|
locDto.getContainerCode(),
|
now,
|
userId,
|
locDto.getCsocode(),
|
locDto.getIsoseq(),
|
locDto.getProcessSts());
|
});
|
updateAgvLocMast(agvLocMastService.selectById(wrkMast.getSourceLocNo()), "P");
|
//更新目标站点状态
|
//locSts = ioType == 101 ? "S" : "Q";
|
updateAgvBasDevp(agvBasDevpService.selectById(wrkMast.getLocNo()), "S");
|
});
|
|
}
|
|
/*
|
库位移转
|
*/
|
@Transactional
|
public void locMove(String sourceLocNo, String targetLocNo, Long userId) {
|
AgvLocMast sourceLocMast = agvLocMastService.selectById(sourceLocNo);
|
AgvLocMast targetLocMast = agvLocMastService.selectById(targetLocNo);
|
AgvLocDetl sourceLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocMast.getLocNo()));
|
|
if (!sourceLocMast.getLocSts().equals("F")) {
|
throw new CoolException(sourceLocMast.getLocNo() + "源库位出库失败,状态:" + sourceLocMast.getLocSts$());
|
}
|
if (!targetLocMast.getLocSts().equals("O")) {
|
throw new CoolException("移转失败,目标库位状态:" + targetLocMast.getLocSts$());
|
}
|
|
Date now = new Date();
|
|
//生成移库工作档
|
AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId, getContainerTypeByloc(sourceLocNo), targetLocMast.getPltType());
|
//生成工作党明细
|
createWrkDetlReWrite(sourceLocDetl.getMatnr(), wrkMast.getWrkNo(), null, sourceLocDetl.getBatch(), sourceLocDetl.getAnfme(), sourceLocDetl.getZpallet(), now, userId, sourceLocDetl.getThreeCode(), sourceLocDetl.getDeadTime(), sourceLocDetl.getProcessSts());
|
//修改目标库位状态
|
updateAgvLocMast(targetLocMast, "S");
|
//修改原库位状态
|
updateAgvLocMast(sourceLocMast, "R");
|
}
|
|
/*
|
入库
|
*/
|
@Transactional
|
public String emptyPlateIn(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn) {
|
|
Date now = new Date();
|
|
Short locType = 0;
|
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
|
if (Cools.isEmpty(agvBasDevp)) {
|
throw new CoolException("暂无" + station + "站点");
|
}
|
int br = 0;
|
if (containerType == 21 && agvBasDevp.getFloor() == 2) {
|
containerType = 20;
|
}
|
switch (containerType) {
|
case 10:
|
br = 1;
|
break;
|
case 20:
|
br = 2;
|
break;
|
case 21:
|
br = 4;
|
break;
|
case 30:
|
br = 3;
|
break;
|
case 31:
|
br = 6;
|
break;
|
case 40:
|
br = 5;
|
break;
|
}
|
if (br == 4 && agvBasDevp.getLocType1() == 2) {
|
br = 2;
|
}
|
if (agvBasDevp.getLocType1() != br) {
|
throw new CoolException("站点类型和货架类型不符!");
|
}
|
AtomicReference<String> factory = new AtomicReference<>();
|
if (containerType == 40) {
|
locType = 5;
|
} else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
|
locType = 4;
|
} else if (containerType == 20 && agvBasDevp.getFloor() == 3) {
|
locType = 2;
|
} else if (containerType == 30) {
|
locType = 3;
|
} else if (containerType == 31) {
|
locType = 6;
|
} else {
|
locType = agvBasDevp.getLocType1();
|
}
|
|
if (!Cools.eq(agvBasDevp.getBarcode(), containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn) {
|
throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts() + ",无法进行入库");
|
}
|
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWrkMast) && !emptyAutoIn) {
|
throw new CoolException("当前货架已有入库任务,无法进行入库");
|
}
|
|
//检索库位,选择合适的库位
|
AgvLocMast agvLocMast = new AgvLocMast();
|
|
//查询库存
|
AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
|
if (!Cools.isEmpty(locMast)) {
|
throw new CoolException("当前货架已在库存中,无法进行入库");
|
}
|
|
//查询入库通知档
|
List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWaitPakinList)) {
|
AtomicBoolean isCurrLev = new AtomicBoolean(false);
|
agvWaitPakinList.forEach(agvWaitPakin -> {
|
factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
|
if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
|
if (agvWaitPakin.getProcessSts() == 1) {
|
isCurrLev.set(true);
|
}
|
}
|
});
|
|
|
Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
|
if (Cools.isEmpty(config)) {
|
if (isCurrLev.get()) {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
} else {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
|
}
|
} else {
|
if (station.endsWith("F4") && locType == 3) {
|
agvLocMast = agvCommonService.getLocNoOnXiSuer(locType, 1);
|
} else {
|
List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
|
if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
} else {
|
if (isCurrLev.get()) {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
} else {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
|
}
|
//agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
|
}
|
}
|
}
|
|
String devNo = agvBasDevp.getDevNo();
|
String locNo = agvLocMast.getLocNo();
|
|
|
//生成工作档
|
AgvWrkMast wrkMast = createWrkMast(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType());
|
//生成工作档明细
|
long flowId = snowflakeIdWorker.nextId();
|
agvWaitPakinList.forEach(wp -> {
|
createWrkDetlReWrite(wp.getMatnr(), wrkMast.getWrkNo(), wp.getOrderNo(), wp.getBatch(), wp.getAnfme(), wp.getSuppCode(), now, userId, wp.getThreeCode(), wp.getDeadTime(), wp.getProcessSts());
|
});
|
//修改入库通知档状态
|
agvWaitPakinService.updateIoStatus(containerCode, "Y");
|
//更新源站点状态
|
updateAgvBasDevp(agvBasDevp, "R", containerType);
|
} else {
|
//查询工作档
|
AgvWrkMast agvWrkMast1 = agvWrkMastService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWrkMast1)) {
|
throw new CoolException("当前货架已有入库任务,无法进行入库");
|
}
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), true, true);
|
// 生成工作档 10.空板入库
|
createWrkMast(10, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), containerCode, now, userId, containerType, agvLocMast.getPltType());
|
//更新源站点状态
|
updateAgvBasDevp(agvBasDevp, "R", containerType, containerCode);
|
}
|
|
//更新目标库位状态和信息
|
updateAgvLocMast(agvLocMast, "S");
|
return agvLocMast.getLocNo();
|
}
|
|
/*
|
入库
|
*/
|
@Transactional
|
public String emptyPlateInV2(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn, String code) {
|
|
Date now = new Date();
|
|
Short locType = 0;
|
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
|
if (Cools.isEmpty(agvBasDevp)) {
|
throw new CoolException("暂无" + station + "站点");
|
}
|
int br = 0;
|
if (containerType == 21 && agvBasDevp.getFloor() == 2) {
|
containerType = 20;
|
}
|
switch (containerType) {
|
case 10:
|
br = 1;
|
break;
|
case 20:
|
br = 2;
|
break;
|
case 21:
|
br = 4;
|
break;
|
case 30:
|
br = 3;
|
break;
|
case 31:
|
br = 6;
|
break;
|
case 40:
|
br = 5;
|
break;
|
}
|
if (br == 4 && agvBasDevp.getLocType1() == 2) {
|
br = 2;
|
}
|
if (agvBasDevp.getLocType1() != br) {
|
throw new CoolException("站点类型和货架类型不符!");
|
}
|
AtomicReference<String> factory = new AtomicReference<>();
|
if (containerType == 40) {
|
locType = 5;
|
} else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
|
locType = 4;
|
} else if (containerType == 20 && agvBasDevp.getFloor() == 3) {
|
locType = 2;
|
} else if (containerType == 30) {
|
locType = 3;
|
} else if (containerType == 31) {
|
locType = 6;
|
} else {
|
locType = agvBasDevp.getLocType1();
|
}
|
|
if (!Cools.eq(agvBasDevp.getBarcode(), containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn) {
|
throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts() + ",无法进行入库");
|
}
|
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWrkMast) && !emptyAutoIn) {
|
throw new CoolException("当前货架已有入库任务,无法进行入库");
|
}
|
|
//检索库位,选择合适的库位
|
AgvLocMast agvLocMast = new AgvLocMast();
|
|
//查询库存
|
AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
|
if (!Cools.isEmpty(locMast)) {
|
throw new CoolException("当前货架已在库存中,无法进行入库");
|
}
|
|
//查询入库通知档
|
List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWaitPakinList)) {
|
AtomicBoolean isCurrLev = new AtomicBoolean(false);
|
agvWaitPakinList.forEach(agvWaitPakin -> {
|
factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
|
if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
|
if (agvWaitPakin.getProcessSts() == 1) {
|
isCurrLev.set(true);
|
}
|
}
|
});
|
|
|
// Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
|
// if (Cools.isEmpty(config)) {
|
// if (isCurrLev.get()) {
|
// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
// } else {
|
// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
|
// }
|
// } else {
|
// List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
|
// if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
|
// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
// } else {
|
// if (isCurrLev.get()) {
|
// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
// } else {
|
// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
|
// }
|
// //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
|
// }
|
// }
|
// 预留20个库位
|
agvLocMast = agvCommonService.getLocByLocRule20(3, 1, code, false);
|
|
|
String devNo = agvBasDevp.getDevNo();
|
String locNo = agvLocMast.getLocNo();
|
String ctnNo = null;
|
// 打标记,若库位不够,入库到别的楼层,那么需要跨层移库
|
if (!Cools.isEmpty(code)) {
|
if (agvLocMast.getLev1() == 1 && code.equals(AsrsConstants.ERCHANG)) {
|
ctnNo = "2";
|
} else if (agvLocMast.getLev1() == 2 && code.equals(AsrsConstants.SANCHANG)) {
|
ctnNo = "1";
|
}
|
}
|
//生成工作档
|
AgvWrkMast wrkMast = createWrkMastV2(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType(), ctnNo);
|
//生成工作档明细
|
long flowId = snowflakeIdWorker.nextId();
|
agvWaitPakinList.forEach(wp -> {
|
createWrkDetlReWrite(wp.getMatnr(), wrkMast.getWrkNo(), wp.getOrderNo(), wp.getBatch(), wp.getAnfme(), wp.getSuppCode(), now, userId, wp.getThreeCode(), wp.getDeadTime(), wp.getProcessSts());
|
});
|
//修改入库通知档状态
|
agvWaitPakinService.updateIoStatus(containerCode, "Y");
|
//更新源站点状态
|
updateAgvBasDevp(agvBasDevp, "R", containerType);
|
} else {
|
//查询工作档
|
AgvWrkMast agvWrkMast1 = agvWrkMastService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWrkMast1)) {
|
throw new CoolException("当前货架已有入库任务,无法进行入库");
|
}
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), true, true);
|
// 生成工作档 10.空板入库
|
createWrkMast(10, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), containerCode, now, userId, containerType, agvLocMast.getPltType());
|
//更新源站点状态
|
updateAgvBasDevp(agvBasDevp, "R", containerType, containerCode);
|
}
|
|
//更新目标库位状态和信息
|
updateAgvLocMast(agvLocMast, "S");
|
return agvLocMast.getLocNo();
|
}
|
|
/*
|
入库
|
*/
|
@Transactional
|
public String emptyPlateInV3(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn) {
|
|
Date now = new Date();
|
|
Short locType = 0;
|
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
|
if (Cools.isEmpty(agvBasDevp)) {
|
throw new CoolException("暂无" + station + "站点");
|
}
|
int br = 0;
|
if (containerType == 21 && agvBasDevp.getFloor() == 2) {
|
containerType = 20;
|
}
|
switch (containerType) {
|
case 10:
|
br = 1;
|
break;
|
case 20:
|
br = 2;
|
break;
|
case 21:
|
br = 4;
|
break;
|
case 30:
|
br = 3;
|
break;
|
case 31:
|
br = 6;
|
break;
|
case 40:
|
br = 5;
|
break;
|
}
|
if (br == 4 && agvBasDevp.getLocType1() == 2) {
|
br = 2;
|
}
|
if (agvBasDevp.getLocType1() != br) {
|
throw new CoolException("站点类型和货架类型不符!");
|
}
|
AtomicReference<String> factory = new AtomicReference<>();
|
if (containerType == 40) {
|
locType = 5;
|
} else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
|
locType = 4;
|
} else if (containerType == 20 && agvBasDevp.getFloor() == 3) {
|
locType = 2;
|
} else if (containerType == 30) {
|
locType = 3;
|
} else if (containerType == 31) {
|
locType = 6;
|
} else {
|
locType = agvBasDevp.getLocType1();
|
}
|
|
if (!Cools.eq(agvBasDevp.getBarcode(), containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn) {
|
throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts() + ",无法进行入库");
|
}
|
|
//查询工作档
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWrkMast) && !emptyAutoIn) {
|
throw new CoolException("当前货架已有入库任务,无法进行入库");
|
}
|
|
//检索库位,选择合适的库位
|
AgvLocMast agvLocMast = new AgvLocMast();
|
|
//查询库存
|
AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
|
if (!Cools.isEmpty(locMast)) {
|
throw new CoolException("当前货架已在库存中,无法进行入库");
|
}
|
|
//查询入库通知档
|
List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWaitPakinList)) {
|
AtomicBoolean isCurrLev = new AtomicBoolean(false);
|
agvWaitPakinList.forEach(agvWaitPakin -> {
|
factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
|
if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
|
if (agvWaitPakin.getProcessSts() == 1) {
|
isCurrLev.set(true);
|
}
|
}
|
});
|
|
|
Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
|
if (Cools.isEmpty(config)) {
|
if (isCurrLev.get()) {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
} else {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
|
}
|
} else {
|
if (station.endsWith("F4") && locType == 3) {
|
agvLocMast = agvCommonService.getLocNoOnXiSuer(locType, 1);
|
} else if (locType == 6) {
|
agvLocMast = agvCommonService.getLocNoOnXiSuer20(locType, 1);
|
} else {
|
List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
|
if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
} else {
|
if (isCurrLev.get()) {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
|
} else {
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
|
}
|
//agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
|
}
|
}
|
}
|
if (agvLocMast == null) {
|
throw new CoolException("没有该类型的空库位了");
|
}
|
|
String devNo = agvBasDevp.getDevNo();
|
String locNo = agvLocMast.getLocNo();
|
|
|
//生成工作档
|
AgvWrkMast wrkMast = createWrkMast(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType());
|
//生成工作档明细
|
long flowId = snowflakeIdWorker.nextId();
|
agvWaitPakinList.forEach(wp -> {
|
createWrkDetlReWrite(wp.getMatnr(), wrkMast.getWrkNo(), wp.getOrderNo(), wp.getBatch(), wp.getAnfme(), wp.getSuppCode(), now, userId, wp.getThreeCode(), wp.getDeadTime(), wp.getProcessSts());
|
});
|
//修改入库通知档状态
|
agvWaitPakinService.updateIoStatus(containerCode, "Y");
|
//更新源站点状态
|
updateAgvBasDevp(agvBasDevp, "R", containerType);
|
} else {
|
//查询工作档
|
AgvWrkMast agvWrkMast1 = agvWrkMastService.selectByContainerCode(containerCode);
|
if (!Cools.isEmpty(agvWrkMast1)) {
|
throw new CoolException("当前货架已有入库任务,无法进行入库");
|
}
|
agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), true, true);
|
// 生成工作档 10.空板入库
|
createWrkMast(10, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), containerCode, now, userId, containerType, agvLocMast.getPltType());
|
//更新源站点状态
|
updateAgvBasDevp(agvBasDevp, "R", containerType, containerCode);
|
}
|
|
//更新目标库位状态和信息
|
updateAgvLocMast(agvLocMast, "S");
|
return agvLocMast.getLocNo();
|
}
|
|
/*
|
空板出库
|
*/
|
@Transactional
|
public void emptyPlateOut(String station, int containerType, Long userId) {
|
Date now = new Date();
|
|
// 站点检测
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
|
if (Cools.isEmpty(agvBasDevp)) {
|
throw new CoolException("站点信息不存在");
|
}
|
if (!agvBasDevp.getLocSts().equals("O")) {
|
throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts() + ",无法进行空板出库");
|
}
|
AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvBasDevp.getDevNo()));
|
if (!Cools.isEmpty(agvWrkMast)) {
|
throw new CoolException("有货架在往站点搬运" + agvBasDevp.getDevNo() + ",无法进行空板出库");
|
}
|
AgvLocMast agvLocMast = null;
|
if (station.startsWith("XI") && station.endsWith("F4") && containerType == 30) {
|
agvLocMast = agvLocMastService.select30EmptyZpallet();
|
} else {
|
//寻找相应类型的空货架
|
Integer floor = agvBasDevp.getFloor();
|
if (floor == 4) {
|
floor = 1;
|
}
|
agvLocMast = agvLocMastService.selectEmptyZpallet(containerType, floor);
|
if (containerType == 0) {
|
//空板自动出库,根据站点类型选择
|
agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1());
|
|
}
|
}
|
|
|
if (Cools.isEmpty(agvLocMast)) {
|
throw new CoolException("暂无当前出库站点类型的空货架!");
|
}
|
//生成工作档
|
createWrkMast(110, 21L, agvLocMast.getLocNo(), agvBasDevp.getDevNo(), agvLocMast.getBarcode(), now, userId, containerType, agvLocMast.getPltType());
|
|
//修改源库位状态
|
updateAgvLocMast(agvLocMast, "R");
|
|
//修改站点状态
|
updateAgvBasDevp(agvBasDevp, "S", (short) containerType, agvLocMast.getBarcode());
|
|
}
|
|
@Transactional
|
public void adjustLocDetl(LocDetlAdjustParam param, Long userId) {
|
param.integrate();
|
AgvLocMast locMast = agvLocMastService.selectById(param.getLocNo());
|
if (Cools.isEmpty(locMast)) {
|
throw new CoolException("库位不存在");
|
}
|
if (!(locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O"))) {
|
throw new CoolException("当前库位不可调整!库位状态:" + locMast.getLocSts$());
|
}
|
|
Date now = new Date();
|
List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", param.getLocNo()));
|
|
List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList();
|
String barcode = null;
|
// 修改数量
|
Iterator<AgvLocDetl> iterator = locDetls.iterator();
|
while (iterator.hasNext()) {
|
AgvLocDetl locDetl = iterator.next();
|
|
Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator();
|
while (iterator1.hasNext()) {
|
LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
|
if (adjust.getCount() == 0) {
|
continue;
|
}
|
if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch()) && Cools.eq(locDetl.getSuppCode(), adjust.getSuppCode()) && Cools.eq(locDetl.getThreeCode(), adjust.getThreeCode()) && Cools.eq(locDetl.getDeadTime(), adjust.getDeadTime())) {
|
if (!locDetl.getAnfme().equals(adjust.getCount()) || !locDetl.getProcessSts().equals(adjust.getProcessSts())) {
|
// todo 盘点记录
|
// 修改库存
|
if (!agvLocDetlService.updateAnfmeProcess(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getThreeCode(), locDetl.getDeadTime(), adjust.getProcessSts())) {
|
throw new CoolException(locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码修改数量失败");
|
}
|
// 保存调整记录
|
AdjDetl adjDetl = new AdjDetl();
|
adjDetl.setLocNo(locDetl.getLocNo());
|
adjDetl.setMatnr(locDetl.getMatnr());
|
adjDetl.setBatch(locDetl.getBatch());
|
adjDetl.setMaktx(locDetl.getMaktx());
|
adjDetl.setOriQty(locDetl.getAnfme());
|
adjDetl.setAdjQty(adjust.getCount());
|
adjDetl.setModiTime(now);
|
adjDetl.setModiUser(userId);
|
adjDetl.setAppeTime(now);
|
adjDetl.setAppeUser(userId);
|
|
adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
|
|
adjDetl.setCsocode(locDetl.getThreeCode());
|
adjDetl.setIsoseq(locDetl.getDeadTime());
|
|
adjDetlService.save(adjDetl, userId);
|
}
|
iterator.remove();
|
iterator1.remove();
|
}
|
}
|
}
|
|
// 删除库存
|
for (AgvLocDetl locDetl : locDetls) {
|
// todo 盘点记录
|
if (!agvLocDetlService.updateAnfmeProcess(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch(), locDetl.getThreeCode(), locDetl.getDeadTime(), locDetl.getProcessSts())) {
|
throw new CoolException("删除" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码库存明细失败");
|
}
|
// 保存调整记录
|
AdjDetl adjDetl = new AdjDetl();
|
adjDetl.setLocNo(locDetl.getLocNo());
|
adjDetl.setMatnr(locDetl.getMatnr());
|
adjDetl.setBatch(locDetl.getBatch());
|
adjDetl.setMaktx(locDetl.getMaktx());
|
adjDetl.setOriQty(locDetl.getAnfme());
|
adjDetl.setAdjQty(0.0D);
|
adjDetl.setModiTime(now);
|
adjDetl.setModiUser(userId);
|
adjDetl.setAppeTime(now);
|
adjDetl.setAppeUser(userId);
|
adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
|
|
adjDetlService.save(adjDetl, userId);
|
}
|
|
// 添加库存
|
for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
|
if (adjust.getCount() == 0.0D) {
|
continue;
|
}
|
Mat mat = matService.selectByMatnr(adjust.getMatnr());
|
AgvLocDetl locDetl = new AgvLocDetl();
|
locDetl.sync(mat);
|
locDetl.setBatch(adjust.getBatch());
|
locDetl.setLocNo(locMast.getLocNo());
|
locDetl.setAnfme(adjust.getCount()); // 数量
|
locDetl.setModiUser(userId); // 操作人员信息
|
locDetl.setModiTime(now);
|
locDetl.setAppeUser(userId);
|
locDetl.setAppeTime(now);
|
locDetl.setOrderNo(adjust.getOrderNo());
|
locDetl.setThreeCode(adjust.getThreeCode());
|
locDetl.setDeadTime(adjust.getDeadTime());
|
locDetl.setSuppCode(adjust.getSuppCode());
|
barcode = adjust.getSuppCode();
|
if (!agvLocDetlService.insert(locDetl)) {
|
throw new CoolException("添加" + locDetl.getLocNo() + "库位," + locDetl.getMatnr() + "商品," + locDetl.getBatch() + "序列码库存明细失败");
|
}
|
// 保存调整记录
|
AdjDetl adjDetl = new AdjDetl();
|
adjDetl.setLocNo(locMast.getLocNo());
|
adjDetl.setMatnr(adjust.getMatnr());
|
adjDetl.setBatch(adjust.getBatch());
|
adjDetl.setMaktx(locDetl.getMaktx());
|
adjDetl.setOriQty(0.0D);
|
adjDetl.setAdjQty(adjust.getCount());
|
adjDetl.setModiTime(now);
|
adjDetl.setModiUser(userId);
|
adjDetl.setAppeTime(now);
|
adjDetl.setAppeUser(userId);
|
|
adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
|
adjDetl.setCsocode(locDetl.getThreeCode());
|
adjDetl.setIsoseq(locDetl.getDeadTime());
|
|
adjDetlService.save(adjDetl, userId);
|
}
|
// 修改库位状态
|
int count = agvLocDetlService.selectCount(new EntityWrapper<AgvLocDetl>().eq("loc_no", locMast.getLocNo()));
|
if (locMast.getLocSts().equals("F")) {
|
if (count == 0) {
|
locMast.setLocSts("D");
|
}
|
}
|
if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O")) {
|
if (count > 0) {
|
locMast.setLocSts("F");
|
locMast.setBarcode(barcode);
|
}
|
}
|
locMast.setModiUser(userId);
|
locMast.setModiTime(new Date());
|
if (!agvLocMastService.updateById(locMast)) {
|
throw new CoolException("更新库位状态失败");
|
}
|
}
|
|
@Override
|
@Transactional
|
public void completeWrkMast(String workNo, Long userId) {
|
AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
|
if (Cools.isEmpty(wrkMast)) {
|
throw new CoolException(workNo + "工作档不存在");
|
}
|
if (wrkMast.getIoType() == 113 && (wrkMast.getWrkSts() != 212L || wrkMast.getWrkSts() != 213L || wrkMast.getWrkSts() != 214L)) {
|
throw new CoolException(workNo + "不支持手动维护");
|
}
|
if (wrkMast.getIoType() == 121) {
|
if (wrkMast.getWrkSts() < 12L) {
|
agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(), 205, "手动完成", userId);
|
} else if (wrkMast.getWrkSts() == 12L) {
|
agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(), 12, "手动完成", userId);
|
|
WrkMastExecute wrkMastExecute = wrkMastExecuteService.selectOne(new EntityWrapper<WrkMastExecute>().eq("wrk_no", workNo));
|
wrkMastExecute.setWrkSts(3L);
|
wrkMastExecute.setNowPosition(3);
|
wrkMastExecuteService.updateById(wrkMastExecute);
|
}
|
return;
|
|
} else {
|
if (wrkMast.getIoType() == 110) {
|
agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(), 206, "手动完成", userId);
|
} else {
|
agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(), 205, "手动完成", userId);
|
}
|
}
|
|
//出库任务 101.出库 || 103.拣料出库 || 107.盘点出库
|
if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107 || wrkMast.getIoType() == 111) {
|
//修改出库站点状态
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(), "F", wrkMast.getBarcode(), wrkMast.getWhsType().shortValue());
|
}
|
if (wrkMast.getIoType() == 1 || wrkMast.getIoType() == 53) {
|
//修改出库站点状态
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getSourceLocNo(), "O", "", wrkMast.getWhsType().shortValue());
|
}
|
//出库任务 110.空板出库
|
|
if (wrkMast.getIoType() == 10) {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getSourceLocNo(), "O", wrkMast.getBarcode(), wrkMast.getWhsType().shortValue());
|
}
|
|
}
|
|
@Transactional
|
public void cancelWrkMast(String workNo, Long userId, Integer type) {
|
AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
|
long flowId = snowflakeIdWorker.nextId();
|
if (Cools.isEmpty(wrkMast)) {
|
throw new CoolException(workNo + "工作档不存在");
|
}
|
if (wrkMast.getIoType() == 121) {
|
if (wrkMast.getWrkSts() < 12L) {
|
//源库位
|
String locNo = wrkMast.getSourceLocNo();
|
|
// 目标库位
|
String targetLocNo = wrkMast.getLocNo();
|
agvLocMastService.updateLocStsByLocNo(locNo, "F", wrkMast.getBarcode(), (short) getContainerTypeByloc(locNo));
|
agvLocMastService.updateLocStsByLocNo(targetLocNo, "O", "", null);
|
|
wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(new Date());
|
if (type == 2) {
|
wrkMast.setManuType("手动取消(agv)");
|
} else {
|
wrkMast.setManuType("手动取消");
|
}
|
|
|
//保存工作档以及明细
|
agvWrkMastLogService.save(wrkMast);
|
agvWrkDetlLogService.save(wrkMast.getWrkNo());
|
|
|
//删除工作档以及明细
|
if (!agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) || !agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())) {
|
throw new CoolException("删除失败,请联系管理员");
|
}
|
|
if (type == 2) {
|
//调用agv取消任务接口
|
agvWrkMastService.callCancelTask(wrkMast.getWrkNo());
|
}
|
} else {
|
throw new CoolException("当前任务正在执行,不可取消");
|
}
|
} else {
|
//拣料入库 盘点入库不可取消
|
if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
|
throw new CoolException("当前任务不可取消");
|
}
|
|
//入库取消
|
if (wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10 || wrkMast.getIoType() == 58) {
|
//源站点
|
String devNo = wrkMast.getSourceLocNo();
|
//目标库位
|
String locNo = wrkMast.getLocNo();
|
agvLocMastService.updateLocStsByLocNo(locNo, "O", "", null);
|
if (wrkMast.getIoType() == 58) {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo, "F", wrkMast.getBarcode(), wrkMast.getWhsType().shortValue());
|
} else {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo, "O", "", wrkMast.getWhsType().shortValue());
|
}
|
|
if (wrkMast.getIoType() == 1) {
|
List<AgvWaitPakin> agvWaitPakins = agvWaitPakinService.selectByContainerCode2(wrkMast.getBarcode());
|
|
for (AgvWaitPakin agvWaitPakin : agvWaitPakins) {
|
// 回滚入库订单
|
OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvWaitPakin.getThreeCode()).eq("matnr", agvWaitPakin.getMatnr()).eq("order_no", agvWaitPakin.getOrderNo()));
|
orderDetl.setQty(orderDetl.getQty() - agvWaitPakin.getAnfme());
|
|
if (!orderDetlService.updateById(orderDetl)) {
|
throw new CoolException("订单回滚失败");
|
}
|
// FlowLog flowLog = new FlowLog();
|
// flowLog.setFid(String.valueOf(flowId));
|
// flowLog.setSpare2(wrkMast.getWrkNo().toString());
|
// flowLog.setLocNo(locNo);
|
// flowLog.setSpare1(wrkMast.getBarcode());
|
// flowLog.setOpType(3L);
|
// flowLog.setOrderNo(agvWaitPakin.getOrderNo());
|
// flowLog.setThreeCode(agvWaitPakin.getThreeCode());
|
// flowLog.setMatnr(agvWaitPakin.getMatnr());
|
// flowLog.setMaktx(agvWaitPakin.getMaktx());
|
// flowLog.setOrderPrevious(orderDetl.getAnfme());
|
// flowLog.setOrderCurrent(orderDetl.getAnfme());
|
// flowLog.setOrderChanged(0.0);
|
//
|
// flowLog.setQtyPrevious(orderDetl.getQty());
|
// flowLog.setQtyCurrent(orderDetl.getQty()-agvWaitPakin.getAnfme());
|
// flowLog.setQtyChanged(-agvWaitPakin.getAnfme());
|
//
|
// flowLog.setLocPrevious(0.0);
|
// flowLog.setLocCurrent(0.0);
|
// flowLog.setLocChanged(-agvWaitPakin.getAnfme());
|
//
|
// flowLog.setUserId(userId);
|
// flowLog.setAppeTime(new Date());
|
// if (!flowLogService.insert(flowLog)) {
|
// throw new CoolException("同步半成品调拨单流水记录失败");
|
// }
|
// 删除组托档
|
if (!agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvWaitPakin.getSuppCode()).eq("matnr", agvWaitPakin.getMatnr()).eq("three_code", agvWaitPakin.getThreeCode()))) {
|
throw new CoolException("入库通知档取消失败");
|
}
|
}
|
|
|
}
|
|
|
// 移库取消
|
} else if (wrkMast.getIoType() == 11 || wrkMast.getIoType() == 12) {
|
//源库位
|
String locNo = wrkMast.getSourceLocNo();
|
|
// 目标库位
|
String targetLocNo = wrkMast.getLocNo();
|
agvLocMastService.updateLocStsByLocNo(locNo, "F", wrkMast.getBarcode(), (short) getContainerTypeByloc(locNo));
|
agvLocMastService.updateLocStsByLocNo(targetLocNo, "O", "", null);
|
// 源库位 库位主档
|
AgvLocMast sourceLocMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locNo));
|
AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", targetLocNo));
|
// 当前任务是跨层移库 且目标楼层是1楼的 回滚调拨单
|
if (wrkMast.getIoType() == 12 && locMast.getFloor() == 1 && sourceLocMast.getFloor() != 1) {
|
List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo));
|
for (AgvLocDetl agvLocDetl : agvLocDetls) {
|
OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("order_no", "DB" + agvLocDetl.getOrderNo()));
|
orderDetl.setQty(orderDetl.getQty() + agvLocDetl.getAnfme());
|
if (!orderDetlService.updateById(orderDetl)) {
|
throw new CoolException("更新订单明细失败");
|
}
|
// FlowLog flowLog = new FlowLog();
|
// flowLog.setFid(String.valueOf(flowId));
|
// flowLog.setSpare2(wrkMast.getWrkNo().toString());
|
// flowLog.setLocNo(locNo);
|
// flowLog.setSpare1(wrkMast.getBarcode());
|
// flowLog.setOpType(8L);
|
// flowLog.setOrderNo(agvLocDetl.getOrderNo());
|
// flowLog.setThreeCode(agvLocDetl.getThreeCode());
|
// flowLog.setMatnr(agvLocDetl.getMatnr());
|
// flowLog.setMaktx(agvLocDetl.getMaktx());
|
// flowLog.setOrderPrevious(orderDetl.getAnfme());
|
// flowLog.setOrderCurrent(orderDetl.getAnfme());
|
// flowLog.setOrderChanged(0.0);
|
//
|
// flowLog.setQtyPrevious(orderDetl.getQty());
|
// flowLog.setQtyCurrent(orderDetl.getQty() + agvLocDetl.getAnfme());
|
// flowLog.setQtyChanged(-agvLocDetl.getAnfme());
|
//
|
// flowLog.setLocPrevious(0.0);
|
// flowLog.setLocCurrent(agvLocDetl.getAnfme());
|
// flowLog.setLocChanged(agvLocDetl.getAnfme());
|
//
|
// flowLog.setUserId(userId);
|
// flowLog.setAppeTime(new Date());
|
// if (!flowLogService.insert(flowLog)) {
|
// throw new CoolException("同步半成品调拨单流水记录失败");
|
// }
|
}
|
} else {
|
|
}
|
|
// 自动调拨出库取消
|
} else if (wrkMast.getIoType() == 108 || wrkMast.getIoType() == 111 || wrkMast.getIoType() == 112) {
|
if (wrkMast.getIoType() == 112) {
|
throw new CoolException("当前作业不能取消!");
|
}
|
if (wrkMast.getIoType() == 108 && wrkMast.getWrkSts() >= 204) {
|
throw new CoolException("源库位已经释放,当前作业不能取消!");
|
}
|
// 源库位
|
String locNo = wrkMast.getSourceLocNo();
|
// 目标库位
|
String targetLocNo = wrkMast.getLocNo();
|
agvLocMastService.updateLocStsByLocNo(locNo, "F", wrkMast.getBarcode(), (short) getContainerTypeByloc(locNo), "", (short) 0);
|
if (wrkMast.getIoType() == 108) {
|
if (wrkMast.getWrkSts() != 22) {
|
agvLocMastService.updateLocStsByLocNo(targetLocNo, "O", "", null);
|
}
|
} else {
|
if (wrkMast.getWrkSts() != 207L && wrkMast.getWrkSts() != 205L) {
|
if (wrkMast.getWrkSts() != 22) {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(targetLocNo, "O", "", wrkMast.getWhsType().shortValue());
|
}
|
} else {
|
throw new CoolException("当前作业不能取消!");
|
}
|
|
|
}
|
|
List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo));
|
// 更新订单
|
for (AgvLocDetl agvLocDetl : agvLocDetls) {
|
OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()));
|
if (orderDetl != null) {
|
orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme());
|
if (!orderDetlService.update(orderDetl, new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()))) {
|
throw new CoolException("修改订单明细失败,请联系管理员" + agvLocDetl.getOrderNo() + agvLocDetl.getMatnr());
|
}
|
}
|
// FlowLog flowLog = new FlowLog();
|
// flowLog.setFid(String.valueOf(flowId));
|
// flowLog.setSpare2(wrkMast.getWrkNo().toString());
|
// flowLog.setLocNo(locNo);
|
// flowLog.setSpare1(wrkMast.getBarcode());
|
// flowLog.setOpType(9L);
|
// flowLog.setOrderNo(agvLocDetl.getOrderNo());
|
// flowLog.setThreeCode(agvLocDetl.getThreeCode());
|
// flowLog.setMatnr(agvLocDetl.getMatnr());
|
// flowLog.setMaktx(agvLocDetl.getMaktx());
|
// flowLog.setOrderPrevious(orderDetl.getAnfme());
|
// flowLog.setOrderCurrent(orderDetl.getAnfme());
|
// flowLog.setOrderChanged(0.0);
|
//
|
// flowLog.setQtyPrevious(orderDetl.getQty());
|
// flowLog.setQtyCurrent(orderDetl.getQty() - agvLocDetl.getAnfme());
|
// flowLog.setQtyChanged(- agvLocDetl.getAnfme());
|
//
|
// flowLog.setLocPrevious(0.0);
|
// flowLog.setLocCurrent(agvLocDetl.getAnfme());
|
// flowLog.setLocChanged(agvLocDetl.getAnfme());
|
//
|
// flowLog.setUserId(userId);
|
// flowLog.setAppeTime(new Date());
|
// if (!flowLogService.insert(flowLog)) {
|
// throw new CoolException("同步半成品调拨单流水记录失败");
|
// }
|
}
|
|
// 回流单取消
|
} else if (wrkMast.getIoType() == 114) {
|
if (wrkMast.getWrkSts() >= 204) {
|
throw new CoolException("源库位已经释放,当前作业不能取消!");
|
}
|
//源库位
|
String locNo = wrkMast.getSourceLocNo();
|
// 目标库位
|
String targetLocNo = wrkMast.getLocNo();
|
agvLocMastService.updateLocStsByLocNo(locNo, "F", wrkMast.getBarcode(), (short) getContainerTypeByloc(locNo));
|
agvLocMastService.updateLocStsByLocNo(targetLocNo, "O", "", null);
|
// 源库位 库位主档
|
AgvLocMast sourceLocMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locNo));
|
AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", targetLocNo));
|
// 当前任务是跨层移库 且目标楼层是1楼的 回滚调拨单
|
List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo));
|
for (AgvLocDetl agvLocDetl : agvLocDetls) {
|
OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", agvLocDetl.getThreeCode()).eq("matnr", agvLocDetl.getMatnr()).eq("source", 17));
|
orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme());
|
if (!orderDetlService.updateById(orderDetl)) {
|
throw new CoolException("更新订单明细失败");
|
}
|
}
|
//出库取消
|
} else {
|
//源库位
|
String locNo = wrkMast.getSourceLocNo();
|
//目标站点
|
String devNo = wrkMast.getLocNo();
|
if (wrkMast.getIoType() == 110 || wrkMast.getIoType() == 109) {
|
if (wrkMast.getIoType() == 109) {
|
// 源库位是站点
|
if ("DB".equals(locNo.substring(0, 2))) {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(locNo, "F", wrkMast.getBarcode(), wrkMast.getWhsType().shortValue());
|
agvLocMastService.updateLocStsByLocNo(devNo, "O", "", null);
|
// 源库位是库位 目标库位是站点
|
} else if ("DB".equals(devNo.substring(0, 2))) {
|
agvLocMastService.updateLocStsByLocNo(locNo, "D", wrkMast.getBarcode(), wrkMast.getWhsType().shortValue());
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(locNo, "O", "", null);
|
// 源库位是库位
|
} else {
|
agvLocMastService.updateLocStsByLocNo(locNo, "D", wrkMast.getBarcode(), wrkMast.getWhsType().shortValue());
|
agvLocMastService.updateLocStsByLocNo(devNo, "O", "", null);
|
}
|
|
} else {
|
agvLocMastService.updateLocStsByLocNo(locNo, "D", wrkMast.getBarcode(), wrkMast.getWhsType().shortValue());
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo, "O", "", null);
|
}
|
} else if (wrkMast.getIoType() == 113) {
|
if (wrkMast.getWrkSts() == 212 || wrkMast.getWrkSts() == 213) {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(locNo, "F", wrkMast.getBarcode(), (short) getContainerTypeByloc(locNo));
|
} else {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(locNo, "F", wrkMast.getBarcode(), (short) getContainerTypeByloc(locNo));
|
if (!Cools.isEmpty(devNo)) {
|
agvLocMastService.updateLocStsByLocNo(devNo, "0", "", null);
|
}
|
}
|
|
} else {
|
agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo, "O", "", null);
|
agvLocMastService.updateLocStsByLocNo(locNo, "F", wrkMast.getBarcode(), (short) getContainerTypeByloc(locNo));
|
}
|
|
}
|
|
if (wrkMast.getIoType() != 114 && wrkMast.getIoType() != 1 && wrkMast.getIoType() != 10 && wrkMast.getIoType() != 111 && wrkMast.getIoType() != 108 && wrkMast.getIoType() != 12 && wrkMast.getIoType() != 11) {
|
//订单回滚
|
//List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
|
List<AgvWrkDetl> agvWrkDetlList1 = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
|
agvWrkDetlList1.forEach(agvWrkDetl -> {
|
|
if (!Cools.isEmpty(agvWrkDetl.getOrderNo())) {
|
String orderNo = agvWrkDetl.getOrderNo();
|
if (orderNo.contains("{")) {
|
JSONArray orderArray = JSON.parseArray(orderNo);
|
for (Object o : orderArray) {
|
JSONObject jsonobject = (JSONObject) o;
|
OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(jsonobject.get("orderNo").toString(), agvWrkDetl.getMatnr(), agvWrkDetl.getThreeCode(), agvWrkDetl.getDeadTime());
|
orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme());
|
orderDetlService.updateById(orderDetl);
|
}
|
|
} else {
|
OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(agvWrkDetl.getOrderNo(), agvWrkDetl.getMatnr(), agvWrkDetl.getThreeCode(), agvWrkDetl.getDeadTime());
|
orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme());
|
orderDetlService.updateById(orderDetl);
|
}
|
}
|
});
|
}
|
wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(new Date());
|
if (type == 2) {
|
wrkMast.setManuType("手动取消(agv)");
|
} else {
|
wrkMast.setManuType("手动取消");
|
}
|
|
|
//保存工作档以及明细
|
agvWrkMastLogService.save(wrkMast);
|
agvWrkDetlLogService.save(wrkMast.getWrkNo());
|
|
|
//删除工作档以及明细
|
if (!agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) || !agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())) {
|
throw new CoolException("删除失败,请联系管理员");
|
}
|
|
if (type == 2) {
|
//调用agv取消任务接口
|
agvWrkMastService.callCancelTask(wrkMast.getWrkNo());
|
}
|
}
|
}
|
|
/*
|
更新目标库位信息
|
*/
|
private void updateAgvLocMast(AgvLocMast locMast, String locSts) {
|
locMast.setLocSts(locSts);
|
locMast.setModiTime(new Date());
|
agvLocMastService.updateById(locMast);
|
}
|
|
/*
|
更新目标库位信息和库位货架类型
|
*/
|
private void updateAgvLocMast(AgvLocMast locMast, String locSts, short type) {
|
locMast.setLocSts(locSts);
|
locMast.setLocType2(type);
|
locMast.setModiTime(new Date());
|
agvLocMastService.updateById(locMast);
|
}
|
|
/*
|
更新源站点信息
|
*/
|
private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts) {
|
if (!Cools.isEmpty(agvBasDevp)) {
|
agvBasDevp.setLocSts(locSts);
|
agvBasDevpService.updateById(agvBasDevp);
|
}
|
}
|
|
/*
|
更新源站点信息和库位货架类型
|
*/
|
private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType) {
|
if (!Cools.isEmpty(agvBasDevp)) {
|
agvBasDevp.setLocSts(locSts);
|
agvBasDevp.setLocType2(continerType);
|
agvBasDevpService.updateById(agvBasDevp);
|
}
|
}
|
|
private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode) {
|
if (!Cools.isEmpty(agvBasDevp)) {
|
agvBasDevp.setLocSts(locSts);
|
agvBasDevp.setLocType2(continerType);
|
agvBasDevp.setBarcode(containerCode);
|
agvBasDevpService.updateById(agvBasDevp);
|
}
|
}
|
|
/*
|
生成工作档明细
|
*/
|
private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo, String batch, double anfme, String zpallet, Date now, Long userId, String csocode, String isoseq, Integer processSts) {
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
throw new CoolException(matnr + "商品维护失败");
|
}
|
OrderDetl orderDetl = orderDetlService.selectItem(orderNo, mat.getMatnr(), batch, csocode);
|
if (orderDetl == null) {
|
orderDetl = orderDetlService.selectItem(orderNo, mat.getMatnr(), null, csocode);
|
if (orderDetl == null) {
|
throw new CoolException("订单明细不存在");
|
}
|
}
|
AgvWrkDetl wrkDetl = new AgvWrkDetl();
|
wrkDetl.sync(mat);
|
if (orderDetl != null) {
|
wrkDetl.setWeight(orderDetl.getWeight());
|
wrkDetl.setVolume(orderDetl.getVolume());
|
}
|
wrkDetl.setWrkNo(wrkNo);
|
wrkDetl.setOrderNo(orderNo);
|
wrkDetl.setIoTime(now);
|
wrkDetl.setBatch(batch);
|
wrkDetl.setAnfme(anfme); // 数量
|
wrkDetl.setSuppCode(zpallet); // 货架条码
|
wrkDetl.setProcessSts(processSts);
|
wrkDetl.setAppeUser(userId);
|
wrkDetl.setAppeTime(now);
|
wrkDetl.setModiUser(userId);
|
wrkDetl.setModiTime(now);
|
|
wrkDetl.setThreeCode(csocode);
|
wrkDetl.setDeadTime(isoseq);
|
if (!agvWrkDetlService.insert(wrkDetl)) {
|
throw new CoolException("保存工作明细失败");
|
}
|
}
|
|
/*
|
生成工作档明细
|
*/
|
@Deprecated
|
private void createWrkDetlReWrite(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId) {
|
Date now = new Date();
|
agvWaitPakinList.stream().forEach(agvWaitPakin -> {
|
Mat mat = matService.selectByMatnr(agvWaitPakin.getMatnr());
|
if (Cools.isEmpty(mat)) {
|
throw new CoolException(agvWaitPakin.getMatnr() + "商品维护失败");
|
}
|
AgvWrkDetl wrkDetl = new AgvWrkDetl();
|
wrkDetl.sync(mat);
|
wrkDetl.setWeight(agvWaitPakin.getWeight());
|
wrkDetl.setVolume(agvWaitPakin.getVolume());
|
|
wrkDetl.setWrkNo(wrkMast.getWrkNo());
|
wrkDetl.setOrderNo(agvWaitPakin.getOrderNo());
|
wrkDetl.setIoTime(now);
|
wrkDetl.setBatch(agvWaitPakin.getBatch());
|
wrkDetl.setAnfme(agvWaitPakin.getAnfme()); // 数量
|
wrkDetl.setZpallet(agvWaitPakin.getZpallet()); // 货架条码
|
wrkDetl.setAppeUser(userId);
|
wrkDetl.setAppeTime(now);
|
wrkDetl.setModiUser(userId);
|
wrkDetl.setModiTime(now);
|
if (!agvWrkDetlService.insert(wrkDetl)) {
|
throw new CoolException("保存工作明细失败");
|
}
|
});
|
}
|
|
/*
|
生成工作档
|
*/
|
private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId, int containerType, Integer pltType) {
|
AgvWrkMast wrkMast = new AgvWrkMast();
|
//工作状态
|
wrkMast.setWrkSts(wrkSts);
|
//入出库类型
|
wrkMast.setIoType(ioType);
|
wrkMast.setIoTime(now);
|
//优先级
|
wrkMast.setIoPri(300.0);
|
//源站点
|
wrkMast.setSourceLocNo(sourceLocNo);
|
//目标站点
|
wrkMast.setLocNo(locNo);
|
//货架编码
|
wrkMast.setBarcode(barcode);
|
//货架类型
|
wrkMast.setWhsType(containerType);
|
|
wrkMast.setAppeUser(userId);
|
wrkMast.setAppeTime(now);
|
wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(now);
|
if (!Cools.isEmpty(locNo) && Cools.isEmpty(pltType)) {
|
AgvLocMast agvLocMast = agvLocMastService.selectById(locNo);
|
pltType = agvLocMast.getPltType();
|
}
|
wrkMast.setPltType(pltType);
|
wrkMast.setLogErrMemo("createWaitPainWrkMastStart");
|
|
|
if (!agvWrkMastService.insertByIncrease(wrkMast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
//暂存位任务+1
|
addInQty(locNo);
|
|
wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no", sourceLocNo));
|
|
return wrkMast;
|
}
|
|
/*
|
生成工作档
|
*/
|
private AgvWrkMast createWrkMastV2(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId, int containerType, Integer pltType, String ctnNo) {
|
AgvWrkMast wrkMast = new AgvWrkMast();
|
//工作状态
|
wrkMast.setWrkSts(wrkSts);
|
//入出库类型
|
wrkMast.setIoType(ioType);
|
wrkMast.setIoTime(now);
|
//优先级
|
wrkMast.setIoPri(300.0);
|
//源站点
|
wrkMast.setSourceLocNo(sourceLocNo);
|
//目标站点
|
wrkMast.setLocNo(locNo);
|
//货架编码
|
wrkMast.setBarcode(barcode);
|
//货架类型
|
wrkMast.setWhsType(containerType);
|
|
wrkMast.setAppeUser(userId);
|
wrkMast.setAppeTime(now);
|
wrkMast.setModiUser(userId);
|
wrkMast.setModiTime(now);
|
if (!Cools.isEmpty(locNo) && Cools.isEmpty(pltType)) {
|
AgvLocMast agvLocMast = agvLocMastService.selectById(locNo);
|
pltType = agvLocMast.getPltType();
|
}
|
wrkMast.setPltType(pltType);
|
wrkMast.setLogErrMemo("createWaitPainWrkMastStart");
|
wrkMast.setCtnNo(ctnNo);
|
|
|
if (!agvWrkMastService.insertByIncrease(wrkMast)) {
|
throw new CoolException("保存工作档失败");
|
}
|
|
//暂存位任务+1
|
addInQty(locNo);
|
|
wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no", sourceLocNo));
|
|
return wrkMast;
|
}
|
|
|
private boolean isPakOut(String locNo, TaskDto taskDto) {
|
Double allAnfme = agvLocDetlService.selectSumAnfmeByLocNo(locNo);
|
Double pakOutAnfme = 0.0;
|
for (LocDto locDto : taskDto.getLocDtos()) {
|
pakOutAnfme += locDto.getAnfme();
|
}
|
|
if (allAnfme > pakOutAnfme) {
|
return false;
|
}
|
return true;
|
}
|
|
/*
|
AGV生成出库工作档后修改订单信息
|
TODO 与四项库生成出库工作档后修改订单信息整合到一起
|
*/
|
private void modifyOrderDetl(LocDto locDto, Long userId) {
|
|
if (!BaseController.isJSON(locDto.getOrderNo())) {
|
//非合并出库
|
OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
|
if (orderDetl == null) {
|
orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null, locDto.getCsocode(), locDto.getIsoseq());
|
}
|
if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme(), locDto.getCsocode(), locDto.getIsoseq())) {
|
throw new CoolException("修改订单明细数量失败");
|
}
|
orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
|
} else {
|
//合并出库
|
List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
|
|
//实际出库数量
|
Double locAnfme = locDto.getAnfme();
|
//订单实际出库数量
|
Double orderAnfme;
|
|
for (OrderDto orderDto : orderDtoList) {
|
OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
|
if (orderDetl == null) {
|
orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null, locDto.getCsocode(), locDto.getIsoseq());
|
}
|
|
orderAnfme = orderDetl.getAnfme() - orderDetl.getQty();
|
|
if (locAnfme > orderAnfme) {
|
locAnfme -= orderAnfme;
|
} else {
|
orderAnfme = locAnfme;
|
}
|
|
if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme, orderDetl.getThreeCode(), orderDetl.getDeadTime())) {
|
throw new CoolException("修改订单明细数量失败");
|
}
|
orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
|
}
|
}
|
}
|
|
@Override
|
@Transactional
|
public void changeType(String workNo, Long userId) {
|
AgvWrkMast wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", workNo));
|
if (Cools.isEmpty(wrkMast)) {
|
throw new CoolException("暂无\n" + workNo + "\n工作");
|
}
|
if (wrkMast.getWrkSts() != 22) {
|
throw new CoolException("当前任务已分配目标库位,暂不支持调整");
|
}
|
if (wrkMast.getIoType() == 108) {
|
wrkMast.setIoType(111);
|
wrkMast.setModiTime(new Date());
|
agvWrkMastService.update(wrkMast, new EntityWrapper<AgvWrkMast>().eq("wrk_no", workNo));
|
} else if (wrkMast.getIoType() == 111) {
|
wrkMast.setIoType(108);
|
wrkMast.setModiTime(new Date());
|
agvWrkMastService.update(wrkMast, new EntityWrapper<AgvWrkMast>().eq("wrk_no", workNo));
|
}
|
|
|
}
|
|
private void addInQty(String devno) {
|
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devno);
|
if (!Cools.isEmpty(agvBasDevp)) {
|
if (Cools.isEmpty(agvBasDevp.getInQty())) {
|
agvBasDevp.setInQty(1);
|
} else {
|
agvBasDevp.setInQty(agvBasDevp.getInQty() + 1);
|
}
|
}
|
}
|
|
private int getContainerTypeByloc(String locNo) {
|
|
return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", locNo)).getLocType2();
|
|
}
|
|
}
|