Files
FT501-WMS/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java
2025-07-31 13:37:58 +08:00

788 lines
35 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.ruoyi.pda.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.api.service.IToWcsService;
import com.ruoyi.bas.cargoSpace.domain.BasCargoSpace;
import com.ruoyi.bas.cargoSpace.service.IBasCargoSpaceService;
import com.ruoyi.bas.container.domain.BasContainer;
import com.ruoyi.bas.container.service.IBasContainerService;
import com.ruoyi.bas.containerDetails.domain.BasContainerDetails;
import com.ruoyi.bas.containerDetails.service.IBasContainerDetailsService;
import com.ruoyi.bas.port.domain.BasProductPort;
import com.ruoyi.bas.port.mapper.BasProductPortMapper;
import com.ruoyi.bas.tag.domain.BasTag;
import com.ruoyi.bas.tag.service.IBasTagService;
import com.ruoyi.bas.warehouse.domain.BasWarehouse;
import com.ruoyi.bas.warehouse.service.IBasWarehouseService;
import com.ruoyi.check.commit.domain.CheckCommitRecord;
import com.ruoyi.check.commit.service.ICheckCommitRecordService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.job.mydojob.domain.MydoJob;
import com.ruoyi.job.mydojob.service.IMydoJobService;
import com.ruoyi.job.mydojobdetail.domain.MydoJobDetail;
import com.ruoyi.job.mydojobdetail.service.IMydoJobDetailService;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.in.stockin.service.IInStockinService;
import com.ruoyi.in.stockindetail.domain.InStockinDetail;
import com.ruoyi.in.stockindetail.service.IInStockinDetailService;
import com.ruoyi.job.mydojobfinish.domain.MydoJobFinish;
import com.ruoyi.job.mydojobfinish.mapper.MydoJobFinishMapper;
import com.ruoyi.out.outStockout.domain.OutStockout;
import com.ruoyi.out.outStockout.service.IOutStockoutService;
import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail;
import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService;
import com.ruoyi.out.submit.domain.OutPickSubmit;
import com.ruoyi.out.submit.service.IOutPickSubmitService;
import com.ruoyi.out.tagTask.domain.TagTask;
import com.ruoyi.out.tagTask.service.ITagTaskService;
import com.ruoyi.pda.domain.TrayCodeMakeSure;
import com.ruoyi.pda.domain.TrayCodeMsg;
import com.ruoyi.pda.mapper.PdaMapper;
import com.ruoyi.pda.trayMsg.domain.TrayMsg;
import com.ruoyi.pda.trayMsg.service.ITrayMsgService;
import com.ruoyi.stock.stock.domain.BasStock;
import com.ruoyi.stock.stock.service.IBasStockService;
import com.ruoyi.system.service.ISysRoleService;
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.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
public class PdaServiceImp implements PdaService {
@Autowired
private PdaMapper pdaMapper;
@Autowired
private IBasCargoSpaceService basCargoSpaceService;
@Autowired
private IMydoJobDetailService mydoJobDetailService;
;
@Autowired
private IMydoJobService mydoJobService;
;
@Autowired
ISysRoleService sysRoleService;
@Autowired
IInStockinDetailService inStockinDetailService;
@Autowired
ITrayMsgService trayMsgService;
@Autowired
private IBasContainerDetailsService basContainerDetailsService;
@Autowired
private ICheckCommitRecordService checkCommitRecordService;
@Autowired
private IOutStockoutService outStockoutService;
@Autowired
private IOutStockoutDetailService outStockoutDetailService;
@Autowired
private BasProductPortMapper basProductPortMapper;
@Autowired
private IBasStockService basStockService;
@Autowired
private MydoJobFinishMapper mydoJobFinishMapper;
@Autowired
private IOutPickSubmitService outPickSubmitService;
@Autowired
private ITagTaskService tagTaskService;
@Autowired
private IBasTagService basTagService;
@Autowired
private IBasWarehouseService basWarehouseService;
@Autowired
private IBasContainerService basContainerService;
@Autowired
private IToWcsService iToWcsService;
/**
* 空托盘入库
*
* @param trayCodeMsg
* @return
*/
@Override
public AjaxResult emptyTrayIn(TrayCodeMsg trayCodeMsg) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMsg.getTrayCode());
map.put("v_warehouse_id", trayCodeMsg.getWarehouseId());
map.put("v_quantity", "1");
map.put("v_cargo_space_id", trayCodeMsg.getCargoSpaceId());
pdaMapper.emptyTrayIn(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.error(map.get("v_resultmsg").toString());
}
}
/**
* 空料箱入库
*
* @param trayCodeMsg
* @return
*/
@Override
public AjaxResult emptyBoxIn(TrayCodeMsg trayCodeMsg) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMsg.getTrayCode());
map.put("v_warehouse_id", trayCodeMsg.getWarehouseId());
map.put("v_entrance_id", trayCodeMsg.getEntranceId());
pdaMapper.emptyBoxIn(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.error(map.get("v_resultmsg").toString());
}
}
@Override
public AjaxResult emptyTrayOut(TrayCodeMsg trayCodeMsg) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_warehouse_id", trayCodeMsg.getWarehouseId());
map.put("v_cargo_space_id", trayCodeMsg.getCargoSpaceId());
map.put("v_exit_id", trayCodeMsg.getExitId());
pdaMapper.emptyTrayOut(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
@Override
public AjaxResult emptyBoxOut(TrayCodeMsg trayCodeMsg) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_warehouse_id", trayCodeMsg.getWarehouseId());
map.put("v_exit_id", trayCodeMsg.getExitId());
pdaMapper.emptyBoxOut(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
@Override
public AjaxResult bindTrayMsg(TrayCodeMsg trayCodeMsg) {
//判断用户的仓库权限
InStockinDetail inStockinDetail1 = new InStockinDetail();
inStockinDetail1.setStockinDetailId(trayCodeMsg.getStockinDetailId());
InStockinDetail inStockinDetail = inStockinDetailService.selectStockinByDetailById(inStockinDetail1);
if (inStockinDetail == null) {
return AjaxResult.warn(MessageUtils.message("warn.message6"));
}
//判断与已绑定物料是否为同一仓库
TrayMsg trayMsg = new TrayMsg();
trayMsg.setTrayCode(trayCodeMsg.getTrayCode());
List<TrayMsg> trayMsgs = trayMsgService.selectTrayMsgList(trayMsg);
if (trayMsgs.size() > 0) {
// InStockinDetail inStockinDetail = inStockinDetailService.selectStockinByDetailById(trayCodeMsg.getStockinDetailId());
if (!trayMsgs.get(0).getWarehouseId().equals(inStockinDetail.getWarehouseId())) {
return AjaxResult.warn(MessageUtils.message("warn.message7"));
}
}
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMsg.getTrayCode());
map.put("v_stockin_detail_id", trayCodeMsg.getStockinDetailId());
map.put("v_quantity", Integer.parseInt(trayCodeMsg.getInQuantity()));
pdaMapper.bindTrayMsg(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
@Override
public AjaxResult addInJob(TrayCodeMsg trayCodeMsg) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMsg.getTrayCode());
// map.put("v_warehouse_id", trayCodeMsg.getWarehouseId());
map.put("v_cargo_space_id", trayCodeMsg.getCargoSpaceId());
pdaMapper.addInJob(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult outMakeSure(TrayCodeMakeSure trayCodeMakeSure) {
/*List<MydoJobDetail> mydoJobDetailList = trayCodeMakeSure.getMydoJobDetailList();
if(CollUtil.isEmpty(mydoJobDetailList)){
return AjaxResult.warn("拣选的物料不能为空");
}*/
//判断任务是否存在
MydoJob mydoJobParam = new MydoJob();
mydoJobParam.setTrayCode(trayCodeMakeSure.getTrayCode());
// mydoJobParam.setStatus("3");
List<MydoJob> mydoJobList = mydoJobService.selectMydoJobList(mydoJobParam);
if (CollUtil.isEmpty(mydoJobList)) {
return AjaxResult.warn(MessageUtils.message("warn.message1"));
}
MydoJobDetail mydoJobDetailParam = new MydoJobDetail();
mydoJobDetailParam.setJobId(mydoJobList.get(0).getJobId());
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam);
if (CollUtil.isEmpty(mydoJobDetails)) {
return AjaxResult.warn(MessageUtils.message("warn.message2"));
}
//空托盘空料箱
if ("21".equals(mydoJobList.get(0).getInOrOut()) || "22".equals(mydoJobList.get(0).getInOrOut())) {
return handleOutType2(trayCodeMakeSure, mydoJobDetails, mydoJobList.get(0));
}
//获取单据类型
OutStockout outStockoutParam = new OutStockout();
outStockoutParam.setStockoutId(mydoJobDetails.get(0).getInOrOutId());
List<OutStockout> outStockouts = outStockoutService.selectOutStockoutList(outStockoutParam);
if (CollUtil.isEmpty(outStockouts)) {
return AjaxResult.warn(MessageUtils.message("warn.message4"));
}
String billType = outStockouts.get(0).getOutType();
switch (billType) {
case "1":
//拣选单据
return handleOutType1(trayCodeMakeSure, mydoJobDetails, mydoJobList.get(0));
case "2":
//退货单据 不绑定容器
return handleOutType2(trayCodeMakeSure, mydoJobDetails, mydoJobList.get(0));
default:
return AjaxResult.warn(MessageUtils.message("warn.message3"));
}
}
/**
* 处理退货出库
*
* @param trayCodeMakeSure
* @param mydoJobDetailList
* @param mydoJob
* @return
*/
private AjaxResult handleOutType2(TrayCodeMakeSure trayCodeMakeSure, List<MydoJobDetail> mydoJobDetailList, MydoJob mydoJob) {
BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(mydoJob.getWarehouseId());
//修改拣选数量
for (MydoJobDetail mydoJobDetail : mydoJobDetailList) {
//修改拣选数量
//MydoJobDetail mydoJobDetailOld = mydoJobDetailService.selectMydoJobDetailByJobDetailId(mydoJobDetail.getJobDetailId());
/*BigDecimal oldPickQuantity = Convert.toBigDecimal(mydoJobDetailOld.getPickQuantity());
BigDecimal newPickQuantity = Convert.toBigDecimal(mydoJobDetail.getOutQuantity());*/
mydoJobDetail.setPickQuantity(mydoJobDetail.getOutQuantity());
mydoJobDetailService.updateMydoJobDetail(mydoJobDetail);
updateTagTaskStatus(mydoJobDetail,basWarehouse);
}
//判断拣选数量是否等于出库数量
MydoJobDetail mydoJobDetailParam = new MydoJobDetail();
mydoJobDetailParam.setJobId(mydoJob.getJobId());
List<MydoJobDetail> currentMydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam);
boolean flag = currentMydoJobDetails.stream().allMatch(mydoJobDetail -> mydoJobDetail.getPickQuantity().equals(mydoJobDetail.getOutQuantity()));
if (flag) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMakeSure.getTrayCode());
map.put("v_type", "1");
pdaMapper.outMakeSure(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
//通知wcs 出库确认
deleteTagTask(trayCodeMakeSure, basWarehouse);
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
} else {
return AjaxResult.success();
}
}
/**
* 处理正常出库
*
* @param trayCodeMakeSure
* @param mydoJobDetailList
* @param mydoJob
* @return
*/
private AjaxResult handleOutType1(TrayCodeMakeSure trayCodeMakeSure, List<MydoJobDetail> mydoJobDetailList, MydoJob mydoJob) {
BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(mydoJob.getWarehouseId());
for (MydoJobDetail mydoJobDetail : mydoJobDetailList) {
//修改拣选数量
//MydoJobDetail mydoJobDetailOld = mydoJobDetailService.selectMydoJobDetailByJobDetailId(mydoJobDetail.getJobDetailId());
/*BigDecimal oldPickQuantity = Convert.toBigDecimal(mydoJobDetailOld.getPickQuantity());
BigDecimal newPickQuantity = Convert.toBigDecimal(mydoJobDetail.getOutQuantity());*/
mydoJobDetail.setPickQuantity(mydoJobDetail.getOutQuantity());
mydoJobDetailService.updateMydoJobDetail(mydoJobDetail);
OutPickSubmit outPickSubmitParam = new OutPickSubmit();
//outPickSubmitParam.setJobId(mydoJob.getJobId());
//outPickSubmitParam.setJobDetailId(mydoJobDetail.getJobDetailId());
outPickSubmitParam.setWarehouseId(mydoJob.getWarehouseId());
outPickSubmitParam.setExitId(mydoJob.getExitId());
List<OutPickSubmit> outPickSubmits = outPickSubmitService.selectOutPickSubmitList(outPickSubmitParam);
if (outPickSubmits.isEmpty()) {
//存入中间表
OutPickSubmit outPickSubmit = new OutPickSubmit();
outPickSubmit.setJobId(mydoJob.getJobId());
outPickSubmit.setJobDetailId(mydoJobDetail.getJobDetailId());
outPickSubmit.setProductId(mydoJobDetail.getProductId());
outPickSubmit.setQuantit(mydoJobDetail.getOutQuantity());
outPickSubmit.setTrayCode(trayCodeMakeSure.getTrayCode());
outPickSubmit.setWarehouseId(mydoJob.getWarehouseId());
outPickSubmit.setExitId(mydoJob.getExitId());
outPickSubmitService.insertOutPickSubmit(outPickSubmit);
} else {
OutPickSubmit oldOutPickSubmit = outPickSubmits.get(0);
oldOutPickSubmit.setQuantit(Convert.toBigDecimal(oldOutPickSubmit.getQuantit()).add(Convert.toBigDecimal(mydoJobDetail.getPickQuantity())).toString());
outPickSubmitService.updateOutPickSubmit(oldOutPickSubmit);
}
//修改单据实际数量
String inOrOutDId = mydoJobDetail.getInOrOutDId();
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByStockoutDetailId(inOrOutDId);
outStockoutDetail.setAssignNum(outStockoutDetail.getAssignNum().add(Convert.toBigDecimal(mydoJobDetail.getPickQuantity())));
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
//修改电子标签
updateTagTaskStatus(mydoJobDetail, basWarehouse);
}
//判断拣选数量是否等于出库数量
MydoJobDetail mydoJobDetailParam = new MydoJobDetail();
mydoJobDetailParam.setJobId(mydoJob.getJobId());
List<MydoJobDetail> currentMydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam);
boolean flag = currentMydoJobDetails.stream().allMatch(mydoJobDetail -> mydoJobDetail.getPickQuantity().equals(mydoJobDetail.getOutQuantity()));
if (flag) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMakeSure.getTrayCode());
map.put("v_type", "1");
pdaMapper.outMakeSure(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
deleteTagTask(trayCodeMakeSure, basWarehouse);
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
} else {
return AjaxResult.success();
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult checkMakeSure(TrayCodeMakeSure trayCodeMakeSure) {
MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(trayCodeMakeSure.getTrayCode());
if (mydoJob == null) {
return AjaxResult.warn(MessageUtils.message("warn.message"));
}
BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(mydoJob.getWarehouseId());
List<MydoJobDetail> mydoJobDetailList = trayCodeMakeSure.getMaterials();
if (CollUtil.isNotEmpty(mydoJobDetailList)) {
boolean flag = mydoJobDetailList.stream().anyMatch(x -> StrUtil.isEmpty(x.getStockId()) && "0".equals(x.getInQuantity()));
if (flag) {
return AjaxResult.warn(MessageUtils.message("warn.message8"));
}
for (MydoJobDetail mydoJobDetail : mydoJobDetailList) {
//插入盘点提交表
CheckCommitRecord checkCommitRecord = new CheckCommitRecord();
checkCommitRecord.setQuantity(mydoJobDetail.getInQuantity());
checkCommitRecord.setTrayCode(trayCodeMakeSure.getTrayCode());
checkCommitRecord.setStockId(mydoJobDetail.getStockId());
checkCommitRecord.setSpare1(mydoJobDetail.getInOrOutDId());
checkCommitRecord.setSpare2(mydoJobDetail.getProductId());
checkCommitRecord.setSpare3(mydoJobDetail.getOutQuantity());
checkCommitRecordService.insertCheckCommitRecord(checkCommitRecord);
mydoJobDetail.setSpare3("1");
mydoJobDetailService.updateMydoJobDetail(mydoJobDetail);
updateTagTaskStatus(mydoJobDetail, basWarehouse);
}
}
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailListByJobId(mydoJob.getJobId());
if (mydoJobDetails.stream().allMatch(x -> "1".equals(x.getSpare3()))) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMakeSure.getTrayCode());
pdaMapper.checkMakeSure(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
deleteTagTask(trayCodeMakeSure, basWarehouse);
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
return AjaxResult.success();
}
/**
* 修改电子标签数量
* @param mydoJobDetail
* @param basWarehouse
*/
private void updateTagTaskStatus(MydoJobDetail mydoJobDetail, BasWarehouse basWarehouse) {
if ("2".equals(basWarehouse.getWarehouseType())) {
//修改电子标签任务
TagTask param = new TagTask();
param.setJobDetailId(mydoJobDetail.getJobDetailId());
List<TagTask> tagTasks = tagTaskService.selectTagTaskList(param);
if (CollUtil.isNotEmpty(tagTasks)) {
TagTask tagTask = tagTasks.get(0);
tagTask.setStatus("2");
tagTaskService.updateTagTask(tagTask);
}
}
}
/**
* 删除电子标签
*
* @param trayCodeMakeSure
* @param basWarehouse
*/
private void deleteTagTask(TrayCodeMakeSure trayCodeMakeSure, BasWarehouse basWarehouse) {
if ("2".equals(basWarehouse.getWarehouseType())) {
BasTag basTag = basTagService.selectBasTagByTrayCode(trayCodeMakeSure.getTrayCode());
basTag.setTrayCode("");
basTagService.updateBasTag(basTag);
//删除电子标签
TagTask param = new TagTask();
param.setTagId(basTag.getId());
List<TagTask> tagTasks = tagTaskService.selectTagTaskList(param);
if (CollUtil.isNotEmpty(tagTasks)) {
tagTaskService.deleteTagTaskByIds(tagTasks.stream()
.map(TagTask::getId)
.toArray(Long[]::new));
}
//通知wcs出库确认成功
HashMap<String, String> outMydojobMakeSureParam = new HashMap<>();
outMydojobMakeSureParam.put("trayCode", trayCodeMakeSure.getTrayCode());
AjaxResult ajaxResult = iToWcsService.outMydojobMakeSure(outMydojobMakeSureParam);
if (!ajaxResult.isSuccess()){
throw new RuntimeException(ajaxResult.toString());
}
}
}
@Override
public AjaxResult outException(TrayCodeMakeSure trayCodeMakeSure) {
//判断任务是否存在
MydoJob mydoJobParam = new MydoJob();
mydoJobParam.setTrayCode(trayCodeMakeSure.getTrayCode());
List<MydoJob> mydoJobList = mydoJobService.selectMydoJobList(mydoJobParam);
if (CollUtil.isEmpty(mydoJobList)) {
return AjaxResult.warn(MessageUtils.message("warn.message"));
}
MydoJob mydoJob = mydoJobList.get(0);
//判断拣选数量
MydoJobDetail param = new MydoJobDetail();
param.setJobId(mydoJob.getJobId());
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(param);
String stockOutId = "";
for (MydoJobDetail mydoJobDetail : mydoJobDetails) {
//修改单据实际分配数量
BigDecimal pickQuantity = Convert.toBigDecimal(mydoJobDetail.getPickQuantity());
OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByStockoutDetailId(mydoJobDetail.getInOrOutDId());
outStockoutDetail.setAllotQuantity(pickQuantity);
stockOutId = outStockoutDetail.getStockoutId();
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
//修改库存的实际出库数量
BasStock basStock = basStockService.selectBasStockByStockId(mydoJobDetail.getStockId());
basStock.setOutQuantity(String.valueOf(pickQuantity));
basStockService.updateBasStock(basStock);
}
//生成回流任务,标记productStatus为异常状态
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMakeSure.getTrayCode());
map.put("v_type", "1");
pdaMapper.outMakeSureException(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
//自动分配
return outStockoutService.autoAllot(stockOutId);
} else {
throw new RuntimeException(map.get("v_resultmsg").toString());
}
}
@Override
public AjaxResult pkIn(TrayCodeMsg trayCodeMsg) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_stockin_detail_id", trayCodeMsg.getStockinDetailId());
map.put("v_in_quantity", Integer.parseInt(trayCodeMsg.getInQuantity()));
pdaMapper.pkIn(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
@Override
public AjaxResult pkout(TrayCodeMsg trayCodeMsg) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_stockout_detail_id", trayCodeMsg.getStockinDetailId());
pdaMapper.pkOut(map);
String result = map.get("v_result").toString();
if ("10".equals(result)) {
return AjaxResult.success(map.get("v_resultmsg").toString());
} else {
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
@Override
public AjaxResult agvRequest(BasContainer basContainer) {
//缓存站点
String endPoint = "456";
//判断details中的数量是否都为0
if (CollUtil.isNotEmpty(basContainer.getDetails())) {
for (BasContainerDetails detail : basContainer.getDetails()) {
//如果存在数量不为0的
if (detail.getQuantity() != 0) {
if (StrUtil.isEmpty(basContainer.getSpare1())) {
return AjaxResult.warn(MessageUtils.message("warn.message9"));
}
//去ctu库站点
BasProductPort basProductPort = new BasProductPort();
basProductPort.setWarehouseId(basContainer.getSpare1());
List<BasProductPort> basProductPorts = basProductPortMapper.selectBasProductPortList(basProductPort);
endPoint = basProductPorts.get(0).getId();
}
}
}
//通过料架查找站点
BasContainer basContainer1 = basContainerService.selectBasContainerByContainerId(basContainer.getContainerId());
String startPoint = basContainer1.getPortName();
//todo 调用agv搬运接口
//使用HttpUtil post请求,参数为startPoint,endPoint,和containerCode
String result = HttpUtil.post("http://192.168.1.100:8080/agv/api/receiveAgvMoveJob", "startPoint=" + startPoint + "&endPoint=" + endPoint + "&containerCode=" + basContainer.getContainerId());
//接口的返回结果为AjaxResult,从result中获取code
//获取code
int code = JSONObject.parseObject(result).getIntValue("code");
if(code==200){
return AjaxResult.success(result);
}else{
return AjaxResult.warn(JSONObject.parseObject(result).getString("msg"));
}
}
@Override
public Map<String, Object> cargoSpaceAnalysis(String warehouseId) {
BasCargoSpace queryParams = new BasCargoSpace();
queryParams.setWarehouseId(warehouseId);
List<BasCargoSpace> list = basCargoSpaceService.selectBasCargoSpaceList(queryParams);
// 初始化所有可能的状态,默认值为0
Map<String, Integer> statusCount = new LinkedHashMap<>();
statusCount.put("空货位", 0);
statusCount.put("满货位", 0);
statusCount.put("入库分配", 0);
statusCount.put("出库分配", 0);
statusCount.put("入库需盘点", 0);
statusCount.put("出库需盘点", 0);
// 统计实际存在的状态数量
for (BasCargoSpace space : list) {
if (space.getStatus() != null) {
String statusName;
switch (Integer.parseInt(space.getStatus())) {
case 1:
statusName = "空货位";
break;
case 2:
statusName = "满货位";
break;
case 3:
statusName = "入库分配";
break;
case 4:
statusName = "出库分配";
break;
case 5:
statusName = "入库需盘点";
break;
case 6:
statusName = "出库需盘点";
break;
default:
continue;
}
statusCount.put(statusName, statusCount.getOrDefault(statusName, 0) + 1);
}
}
// 转换为要求的格式
List<Map<String, Object>> result = new ArrayList<>();
for (Map.Entry<String, Integer> entry : statusCount.entrySet()) {
Map<String, Object> item = new HashMap<>();
item.put("name", entry.getKey());
item.put("value", entry.getValue());
result.add(item);
}
Map<String, Object> response = new HashMap<>();
response.put("data", result);
return response;
}
@Override
public Map<String, Object> getAisleStatisticsData(String warehouseId) {
Map<String, Object> map = new HashMap<>();
MydoJob mydoJob = new MydoJob();
mydoJob.setWarehouseId(warehouseId);
mydoJob.setInOut("1");
List<MydoJob> mydoJobs = mydoJobFinishMapper.selectMydoJobFinishListByMydoJob(mydoJob);
MydoJob mydoJob1 = new MydoJob();
mydoJob1.setWarehouseId(warehouseId);
mydoJob1.setInOut("2");
List<MydoJob> mydoJobs1 = mydoJobFinishMapper.selectMydoJobFinishListByMydoJob(mydoJob1);
map.put("in", mydoJobs.size());
map.put("out", mydoJobs1.size());
return map;
}
@Override
public AjaxResult bindContainer(TrayCodeMakeSure trayCodeMakeSure) {
if (CollUtil.isEmpty(trayCodeMakeSure.getMydoJobDetailList())) {
return AjaxResult.warn(MessageUtils.message("warn.message10"));
}
if (StrUtil.isEmpty(trayCodeMakeSure.getContainerCode())) {
return AjaxResult.warn(MessageUtils.message("warn.message11"));
}
for (MydoJobDetail mydoJobDetail : trayCodeMakeSure.getMydoJobDetailList()) {
//绑定容器
BasContainerDetails basContainerDetailsParam = new BasContainerDetails();
basContainerDetailsParam.setContainerId(trayCodeMakeSure.getContainerCode());
basContainerDetailsParam.setProductId(mydoJobDetail.getProductId());
List<BasContainerDetails> basContainerDetails = basContainerDetailsService.selectBasContainerDetailsList(basContainerDetailsParam);
if (CollUtil.isNotEmpty(basContainerDetails)) {
BasContainerDetails oldBasContainerDetails = basContainerDetails.get(0);
oldBasContainerDetails.setQuantity(oldBasContainerDetails.getQuantity() + Convert.toLong(mydoJobDetail.getPickBindQuantity()));
basContainerDetailsService.updateBasContainerDetails(oldBasContainerDetails);
} else {
BasContainerDetails newBasContainerDetails = new BasContainerDetails();
newBasContainerDetails.setContainerId(trayCodeMakeSure.getContainerCode());
newBasContainerDetails.setProductId(mydoJobDetail.getProductId());
newBasContainerDetails.setQuantity(Convert.toLong(mydoJobDetail.getPickBindQuantity()));
basContainerDetailsService.insertBasContainerDetails(newBasContainerDetails);
}
//减少中间表数量
OutPickSubmit outPickSubmitParam = new OutPickSubmit();
//outPickSubmitParam.setJobId(mydoJobDetail.getJobId());
//outPickSubmitParam.setJobDetailId(mydoJobDetail.getJobDetailId());
outPickSubmitParam.setTrayCode(trayCodeMakeSure.getTrayCode());
List<OutPickSubmit> outPickSubmits = outPickSubmitService.selectOutPickSubmitList(outPickSubmitParam);
for (OutPickSubmit outPickSubmit : outPickSubmits) {
BigDecimal subtract = Convert.toBigDecimal(outPickSubmit.getQuantit()).subtract(Convert.toBigDecimal(mydoJobDetail.getPickBindQuantity()));
if (subtract.compareTo(BigDecimal.ZERO) == 0) {
//删除缓存信息
outPickSubmitService.deleteOutPickSubmitById(outPickSubmit.getId());
} else if (subtract.compareTo(BigDecimal.ZERO) < 0) {
return AjaxResult.warn(MessageUtils.message("warn.message12"));
} else {
outPickSubmit.setQuantit(subtract.toString());
outPickSubmitService.updateOutPickSubmit(outPickSubmit);
}
}
}
return AjaxResult.success();
}
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult bindShelf(TrayCodeMakeSure trayCodeMakeSure) {
BasContainerDetails basContainerDetails = new BasContainerDetails();
basContainerDetails.setContainerId(trayCodeMakeSure.getContainerCode());
for (MydoJobDetail mydoJobDetail : trayCodeMakeSure.getMydoJobDetailList()) {
basContainerDetails.setProductId(mydoJobDetail.getProductId());
List<BasContainerDetails> basContainerDetailsList = basContainerDetailsService.selectBasContainerDetailsList(basContainerDetails);
if (basContainerDetailsList.size() == 0) {
basContainerDetails.setProductName(mydoJobDetail.getExtraField().getMaterialDesc());
basContainerDetails.setQuantity(Convert.toLong(mydoJobDetail.getPickBindQuantity()));
basContainerDetailsService.insertBasContainerDetails(basContainerDetails);
} else {
basContainerDetails.setId(basContainerDetailsList.get(0).getId());
basContainerDetails.setQuantity(basContainerDetailsList.get(0).getQuantity() + Convert.toLong(mydoJobDetail.getPickBindQuantity()));
basContainerDetailsService.updateBasContainerDetails(basContainerDetails);
}
OutPickSubmit outPickSubmitParam = new OutPickSubmit();
outPickSubmitParam.setWarehouseId(trayCodeMakeSure.getWarehouseId());
outPickSubmitParam.setExitId(trayCodeMakeSure.getExitId());
outPickSubmitParam.setProductId(mydoJobDetail.getProductId());
List<OutPickSubmit> outPickSubmits = outPickSubmitService.selectOutPickSubmitList(outPickSubmitParam);
if (Integer.parseInt(outPickSubmits.get(0).getQuantit()) > Integer.parseInt(mydoJobDetail.getPickBindQuantity())) {
outPickSubmitParam.setQuantit(String.valueOf(Integer.parseInt(outPickSubmits.get(0).getQuantit()) - Integer.parseInt(mydoJobDetail.getPickBindQuantity())));
outPickSubmitParam.setId(outPickSubmits.get(0).getId());
outPickSubmitService.updateOutPickSubmit(outPickSubmitParam);
} else {
outPickSubmitService.deleteOutPickSubmitById(outPickSubmits.get(0).getId());
}
}
return AjaxResult.success();
}
}