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 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 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 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 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 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 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 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 mydoJobDetailList = trayCodeMakeSure.getMydoJobDetailList(); if(CollUtil.isEmpty(mydoJobDetailList)){ return AjaxResult.warn("拣选的物料不能为空"); }*/ //判断任务是否存在 MydoJob mydoJobParam = new MydoJob(); mydoJobParam.setTrayCode(trayCodeMakeSure.getTrayCode()); // mydoJobParam.setStatus("3"); List 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 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 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 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 currentMydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam); boolean flag = currentMydoJobDetails.stream().allMatch(mydoJobDetail -> mydoJobDetail.getPickQuantity().equals(mydoJobDetail.getOutQuantity())); if (flag) { HashMap 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 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 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 currentMydoJobDetails = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetailParam); boolean flag = currentMydoJobDetails.stream().allMatch(mydoJobDetail -> mydoJobDetail.getPickQuantity().equals(mydoJobDetail.getOutQuantity())); if (flag) { HashMap 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 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 mydoJobDetails = mydoJobDetailService.selectMydoJobDetailListByJobId(mydoJob.getJobId()); if (mydoJobDetails.stream().allMatch(x -> "1".equals(x.getSpare3()))) { HashMap 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 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 tagTasks = tagTaskService.selectTagTaskList(param); if (CollUtil.isNotEmpty(tagTasks)) { tagTaskService.deleteTagTaskByIds(tagTasks.stream() .map(TagTask::getId) .toArray(Long[]::new)); } //通知wcs出库确认成功 HashMap 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 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 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 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 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 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 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 cargoSpaceAnalysis(String warehouseId) { BasCargoSpace queryParams = new BasCargoSpace(); queryParams.setWarehouseId(warehouseId); List list = basCargoSpaceService.selectBasCargoSpaceList(queryParams); // 初始化所有可能的状态,默认值为0 Map 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> result = new ArrayList<>(); for (Map.Entry entry : statusCount.entrySet()) { Map item = new HashMap<>(); item.put("name", entry.getKey()); item.put("value", entry.getValue()); result.add(item); } Map response = new HashMap<>(); response.put("data", result); return response; } @Override public Map getAisleStatisticsData(String warehouseId) { Map map = new HashMap<>(); MydoJob mydoJob = new MydoJob(); mydoJob.setWarehouseId(warehouseId); mydoJob.setInOut("1"); List mydoJobs = mydoJobFinishMapper.selectMydoJobFinishListByMydoJob(mydoJob); MydoJob mydoJob1 = new MydoJob(); mydoJob1.setWarehouseId(warehouseId); mydoJob1.setInOut("2"); List 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 = 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 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 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 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(); } }