Files
FT501-WMS/ruoyi-admin/src/main/java/com/ruoyi/pda/service/PdaServiceImp.java
2025-06-24 17:00:43 +08:00

280 lines
12 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 com.ruoyi.bas.cargoSpace.domain.BasCargoSpace;
import com.ruoyi.bas.cargoSpace.service.IBasCargoSpaceService;
import com.ruoyi.bas.containerDetails.domain.BasContainerDetails;
import com.ruoyi.bas.containerDetails.service.IBasContainerDetailsService;
import com.ruoyi.check.commit.domain.CheckCommitRecord;
import com.ruoyi.check.commit.service.ICheckCommitRecordService;
import com.ruoyi.common.core.domain.AjaxResult;
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.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.system.service.ISysRoleService;
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.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@Service
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;
/**
* 空托盘入库
*
* @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("此用户无权限操作该仓库物料,或物料不存在");
}
//判断与已绑定物料是否为同一仓库
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("同一托盘不能绑定不同仓库的物料");
}
}
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.isNotEmpty(mydoJobDetailList)){
for (MydoJobDetail mydoJobDetail : mydoJobDetailList) {
MydoJobDetail mydoJobDetailOld = mydoJobDetailService.selectMydoJobDetailByJobDetailId(mydoJobDetail.getJobDetailId());
BigDecimal oldPickQuantity = Convert.toBigDecimal(mydoJobDetailOld.getPickQuantity());
BigDecimal newPickQuantity = Convert.toBigDecimal(mydoJobDetail.getPickQuantity());
mydoJobDetailOld.setPickQuantity(oldPickQuantity.add(newPickQuantity).toString());
mydoJobDetailService.updateMydoJobDetail(mydoJobDetailOld);
BasContainerDetails basContainerDetailsParam = new BasContainerDetails();
basContainerDetailsParam.setContainerId(trayCodeMakeSure.getContainerCode());
basContainerDetailsParam.setProductId(mydoJobDetailOld.getProductId());
List<BasContainerDetails> basContainerDetails = basContainerDetailsService.selectBasContainerDetailsList(basContainerDetailsParam);
if (CollUtil.isNotEmpty(basContainerDetails)){
BasContainerDetails oldBasContainerDetails = basContainerDetails.get(0);
oldBasContainerDetails.setQuantity(oldBasContainerDetails.getQuantity()+Convert.toLong(mydoJobDetail.getPickQuantity()));
basContainerDetailsService.updateBasContainerDetails(oldBasContainerDetails);
}else {
BasContainerDetails newBasContainerDetails = new BasContainerDetails();
newBasContainerDetails.setContainerId(trayCodeMakeSure.getContainerCode());
newBasContainerDetails.setProductId(mydoJobDetail.getProductId());
newBasContainerDetails.setQuantity(Convert.toLong(mydoJobDetail.getPickQuantity()));
basContainerDetailsService.insertBasContainerDetails(newBasContainerDetails);
}
}
}
//查询当前任务是否已经全部拣选完成
MydoJob mydoJobParam = new MydoJob();
mydoJobParam.setTrayCode(trayCodeMakeSure.getTrayCode());
List<MydoJob> mydoJobList = mydoJobService.selectMydoJobList(mydoJobParam);
if (CollUtil.isEmpty(mydoJobList)) {
return AjaxResult.warn("任务不存在");
}
MydoJobDetail mydoJobDetailParam = new MydoJobDetail();
mydoJobDetailParam.setJobId(mydoJobList.get(0).getJobId());
List<MydoJobDetail> mydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam);
if (CollUtil.isEmpty(mydoJobDetails)) {
return AjaxResult.warn("子任务不存在");
}
boolean flag = mydoJobDetails.stream().allMatch(mydoJobDetail -> mydoJobDetail.getPickQuantity().equals(mydoJobDetail.getOutQuantity()));
if (flag) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_tray_code", trayCodeMakeSure.getTrayCode());
pdaMapper.outMakeSure(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());
}
} else {
return AjaxResult.warn("拣选完成");
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult checkMakeSure(TrayCodeMakeSure trayCodeMakeSure) {
List<MydoJobDetail> mydoJobDetailList = trayCodeMakeSure.getMydoJobDetailList();
if(CollUtil.isNotEmpty(mydoJobDetailList)){
boolean flag = mydoJobDetailList.stream().anyMatch(x -> StrUtil.isEmpty(x.getStockId()) && "0".equals(x.getInQuantity()));
if (flag){
return AjaxResult.warn("新增库存,存在为0的数量");
}
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());
checkCommitRecordService.insertCheckCommitRecord(checkCommitRecord);
}
}
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)){
return AjaxResult.success(map.get("v_resultmsg").toString());
}else{
return AjaxResult.warn(map.get("v_resultmsg").toString());
}
}
}