788 lines
35 KiB
Java
788 lines
35 KiB
Java
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();
|
||
}
|
||
}
|