| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | | import com.core.common.SnowflakeIdWorker; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.OpenOrderCompleteParam; |
| | | import com.zy.asrs.entity.param.OpenOrderPakinParam; |
| | | import com.zy.asrs.entity.param.OpenOrderPakoutParam; |
| | | import com.zy.asrs.entity.param.PackParam; |
| | | import com.zy.asrs.entity.param.*; |
| | | import com.zy.asrs.entity.result.OpenOrderCompeteResult; |
| | | import com.zy.asrs.entity.result.StockVo; |
| | | import com.zy.asrs.mapper.TagMapper; |
| | | import com.zy.asrs.mapper.WrkMastMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.utils.MatUtils; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.common.model.LocTypeDto; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.utils.NodeUtils; |
| | | import com.zy.system.service.ConfigService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | |
| | | private TagService tagService; |
| | | @Autowired |
| | | private TagMapper tagMapper; |
| | | |
| | | @Resource |
| | | private WrkMastMapper wrkMastMapper; |
| | | |
| | | @Autowired |
| | | private BasDevpService basDevpService; |
| | | |
| | | @Autowired |
| | | private CommonService commonService; |
| | | |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | |
| | | @Autowired |
| | | private WrkDetlService wrkDetlService; |
| | | |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private ConfigService configService; |
| | | |
| | | @Override |
| | | public R queryMatByBatch(String batch) { |
| | | |
| | | int countL = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("batch", batch)); |
| | | if (countL > 0) { |
| | | throw new CoolException("库存里面存在该批号:" + batch); |
| | | } |
| | | |
| | | int countW = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("batch", batch)); |
| | | if (countW > 0) { |
| | | throw new CoolException("正在执行任务中存在该批号:" + batch); |
| | | } |
| | | |
| | | int countP = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("batch", batch)); |
| | | if (countP > 0) { |
| | | throw new CoolException("入库通知档中存在该批号:" + batch); |
| | | } |
| | | |
| | | return R.ok("该批号可用"); |
| | | } |
| | | |
| | | @Override |
| | | public R synCallowWarehousing() { |
| | | |
| | | // Config outModel = configService.selectConfigByCode("outModel"); |
| | | // if (outModel.getValue().equals("Y")) { |
| | | // // 没有到305的出库任务(305的出库任务优先) |
| | | // int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 101) |
| | | // .eq("sta_no", 305)); |
| | | // if (count > 0) { |
| | | // BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305)); |
| | | // if (basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("Y") && basDevp.getWrkNo() > 6000 && basDevp.getWrkNo() <= 9000) { |
| | | // log.info("出库转运架到达305"); |
| | | // return R.ok("出库转运架到达305"); |
| | | // } |
| | | // return R.parse("出库任务执行中"); |
| | | // } |
| | | // outModel.setValue("N"); |
| | | // configService.updateById(outModel); |
| | | // } |
| | | return R.ok(); |
| | | } |
| | | @Autowired |
| | | private WaitPakinService waitPakinService; |
| | | @Override |
| | | public R syncWarehousing(CombParam param) { |
| | | |
| | | Long userId = 9999L; |
| | | |
| | | // 参数非空判断 |
| | | if (Cools.isEmpty(param.getCombMats())) { |
| | | throw new CoolException("数据不完整,请检查请求参数"); |
| | | } |
| | | // |
| | | // Config outModel = configService.selectConfigByCode("outModel"); |
| | | // if (outModel.getValue().equals("Y")) { |
| | | // throw new CoolException("305不允许入库"); |
| | | // } |
| | | |
| | | for (CombParam.CombMat combMat : param.getCombMats()) { |
| | | String batch = combMat.getBatch(); |
| | | int countL = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("batch", batch)); |
| | | int countW = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("batch", batch)); |
| | | if (countW > 0) { |
| | | return R.ok("已存在任务"); |
| | | } |
| | | int countP = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("batch", batch)); |
| | | if (countL > 0 || countW > 0 || countP > 0) { |
| | | throw new CoolException("该批号已经存在===>>" + batch); |
| | | } |
| | | WaitPakin waitPakin = new WaitPakin(); |
| | | Date now = new Date(); |
| | | waitPakin.sync(combMat); |
| | | waitPakin.setBarcode(""); |
| | | waitPakin.setZpallet(""); // 托盘码 |
| | | waitPakin.setIoStatus("N"); // 入出状态 |
| | | waitPakin.setAnfme(1.0); // 数量 |
| | | waitPakin.setStatus("Y"); // 状态 |
| | | waitPakin.setAppeUser(userId); |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | |
| | | // 源站点状态检测 |
| | | Integer inStaNo = combMat.getInStaNo(); // 入库站点 |
| | | // BasDevp sourceStaNo = basDevpService.checkSiteStatus(305, true); |
| | | BasDevp sourceStaNo = basDevpService.checkSiteStatus(inStaNo, true); |
| | | |
| | | // 长度>3500放宽库位 |
| | | sourceStaNo.setLocType2((short) (waitPakin.getLength() > 4600 ? 2 : 1)); |
| | | LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo); |
| | | |
| | | // 寻找库位 |
| | | StartupDto dto = commonService.getLocNo(sourceStaNo, locTypeDto, 1); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setWhsType(1); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(15D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(""); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | |
| | | // 生成工作档明细 |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(waitPakin); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setIoTime(wrkMast.getIoTime()); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | // // 更新源站点信息 |
| | | // sourceStaNo.setWrkNo(workNo); |
| | | // sourceStaNo.setModiTime(now); |
| | | // if (!basDevpService.updateById(sourceStaNo)) { |
| | | // throw new CoolException("更新源站失败"); |
| | | // } |
| | | |
| | | // 更新目标库位状态 |
| | | LocMast locMast = locMastService.selectById(dto.getLocNo()); |
| | | if (locMast.getLocSts().equals("O")) { |
| | | locMast.setLocSts("S"); // S.入库预约 |
| | | locMast.setModiTime(now); |
| | | if (!locMastService.updateById(locMast)) { |
| | | throw new CoolException("改变库位状态失败"); |
| | | } |
| | | } else { |
| | | throw new CoolException(dto.getLocNo() + "目标库位已被占用"); |
| | | } |
| | | } |
| | | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @Override |
| | | public R agvAskOpen(AgvAskOpenParam param) { |
| | | if (param.getFlag() == 0) { // 出库请求wms开门 |
| | | Integer staNo = param.getStaNo(); // 需要开、关门的站点 |
| | | // BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305)); |
| | | BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", staNo)); |
| | | if (basDevp.getWrkNo() > 6000 && basDevp.getWrkNo() <= 9000 && basDevp.getLoading().equals("Y") && basDevp.getAutoing().equals("Y") |
| | | && basDevp.getOutEnable().equals("Y")) { // 出库工作档 |
| | | WrkMast wrkMast = wrkMastService.selectById(basDevp.getWrkNo()); |
| | | if (wrkMast.getWhsType() == null) { |
| | | throw new CoolException("没有通知agv过来取货"); |
| | | } else if (wrkMast.getWhsType() == 1) { |
| | | WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", basDevp.getWrkNo())); |
| | | if (wrkDetl.getMatnr().equals(param.getMatnr()) && wrkDetl.getBatch().equals(param.getBatch())) { |
| | | wrkMast.setWhsType(2); |
| | | wrkMastService.updateById(wrkMast); |
| | | return R.ok("物料校验成功,马上开门"); |
| | | } else { |
| | | throw new CoolException("编码+批号校验失败:" + param.getBatch()); |
| | | } |
| | | } else if (wrkMast.getWhsType() == 2) { |
| | | return R.ok("马上开门"); |
| | | } else if (wrkMast.getWhsType() == 3) { |
| | | return R.ok("已开门"); |
| | | }else { |
| | | return R.error("工作档当前状态有误"); |
| | | } |
| | | } else { |
| | | return R.error("不满足出库条件"); |
| | | } |
| | | } else if(param.getFlag() == 1) { // 入库请求wms开门 |
| | | // BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305)); |
| | | BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", param.getStaNo())); |
| | | if (basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("Y") |
| | | && basDevp.getInEnable().equals("Y") && basDevp.getWrkNo() <= 3000) { // 入库底座 |
| | | WrkMast wrkMast = wrkMastService.selectById(basDevp.getWrkNo()); |
| | | if (wrkMast == null || wrkMast.getWhsType() == null) { |
| | | throw new CoolException("没有入库任务"); |
| | | } else if (wrkMast.getWhsType() == 1) { |
| | | WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (wrkDetl.getMatnr().equals(param.getMatnr()) && wrkDetl.getBatch().equals(param.getBatch())) { |
| | | wrkMast.setWhsType(2); |
| | | wrkMastService.updateById(wrkMast); |
| | | return R.ok("物料校验成功,马上开门"); |
| | | } else { |
| | | throw new CoolException("编码+批号校验失败:" + param.getBatch()); |
| | | } |
| | | } else if (wrkMast.getWhsType() == 2) { |
| | | return R.ok("马上开门"); |
| | | } else if (wrkMast.getWhsType() == 3) { |
| | | return R.ok("已开门"); |
| | | }else { |
| | | return R.error("工作档当前状态有误"); |
| | | } |
| | | } else { |
| | | return R.error("底座还未达到"); |
| | | } |
| | | } |
| | | return R.error("出入库标识错误:" + param.getFlag()); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | |
| | | @Transactional |
| | | public void pakoutOrderCreate(OpenOrderPakoutParam param) { |
| | | Order order = orderService.selectByNo(param.getOrderNo()); |
| | | // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据 |
| | | if (!Cools.isEmpty(order)) { |
| | | throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交"); |
| | | if (order.getSettle() > 1L) { |
| | | throw new CoolException(param.getOrderNo() + "正在出库,无法修改单据"); |
| | | } |
| | | orderService.remove(order.getId()); |
| | | } |
| | | DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE); |
| | | Date now = new Date(); |
| | |
| | | pack = new Pack( |
| | | param.getBarcode(), // 条码[非空] |
| | | analyse.getMatnr(), // 商品编号 |
| | | analyse.getBarcode(), // 批号 |
| | | analyse.getBarcode(), // 序列码 |
| | | 1L, // 订单状态 |
| | | 1, // 状态 |
| | | now, // 添加时间 |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void syncMat(MatSyncParam param) { |
| | | if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <=0 ) { |
| | | throw new CoolException("商品数据为空"); |
| | | } |
| | | |
| | | for(MatSyncParam.MatParam matParam : param.getMatDetails()){ |
| | | if(Cools.isEmpty(matParam.getMatnr())){ |
| | | throw new CoolException("商品编码不能为空"); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | Mat mat = matService.selectByMatnr(matParam.getMatnr()); |
| | | if (mat == null) { |
| | | mat = new Mat(); |
| | | // 分类 |
| | | Long tagId; |
| | | // 一级分类 |
| | | if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) { |
| | | Tag priTag = tagService.selectByName(matParam.getGroupCode(), 2); |
| | | if (priTag == null) { |
| | | Tag top = tagService.getTop(); |
| | | NodeUtils nodeUtils = new NodeUtils(); |
| | | nodeUtils.executePath(top.getId()); |
| | | priTag = new Tag( |
| | | null, // 编号 |
| | | matParam.getGroupCode(), // 名称 |
| | | top.getId(), // 父级 |
| | | top.getName(), // 父级名称 |
| | | nodeUtils.path.toString(), // 关联路径 |
| | | nodeUtils.pathName.toString(), // 关联路径名 |
| | | 0, // 类型 |
| | | null, // 负责人 |
| | | null, // 图片 |
| | | null, // 简要描述 |
| | | null, // 数量 |
| | | 2, // 等级 |
| | | null, // 排序 |
| | | 1, // 状态 |
| | | now, // 添加时间 |
| | | null, // 添加人员 |
| | | now, // 修改时间 |
| | | null, // 修改人员 |
| | | null // 备注 |
| | | ); |
| | | if (tagMapper.insert(priTag) == 0) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | } |
| | | // 二级分类 |
| | | Tag secTag = tagService.selectByName(matParam.getGroupName(), 3); |
| | | if (secTag == null) { |
| | | NodeUtils nodeUtils = new NodeUtils(); |
| | | nodeUtils.executePath(priTag.getId()); |
| | | secTag = new Tag( |
| | | null, // 编号 |
| | | matParam.getGroupName(), // 名称 |
| | | priTag.getId(), // 父级 |
| | | priTag.getName(), // 父级名称 |
| | | nodeUtils.path.toString(), // 关联路径 |
| | | nodeUtils.pathName.toString(), // 关联路径名 |
| | | 0, // 类型 |
| | | null, // 负责人 |
| | | null, // 图片 |
| | | null, // 简要描述 |
| | | null, // 数量 |
| | | 3, // 等级 |
| | | null, // 排序 |
| | | 1, // 状态 |
| | | now, // 添加时间 |
| | | null, // 添加人员 |
| | | now, // 修改时间 |
| | | null, // 修改人员 |
| | | null // 备注 |
| | | ); |
| | | if (tagMapper.insert(secTag) == 0) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | } |
| | | tagId = secTag.getId(); |
| | | } else { |
| | | tagId = tagService.getTop().getId(); |
| | | } |
| | | mat.sync(param); |
| | | // mat.setMatnr(param.getMatnr()); |
| | | // mat.setMaktx(param.getMaktx()); |
| | | // mat.setSpecs(param.getSpecs()); |
| | | // mat.setModel(param.getModel()); |
| | | |
| | | mat.setTagId(tagId); |
| | | mat.setStatus(1); |
| | | mat.setCreateTime(now); |
| | | mat.setUpdateTime(now); |
| | | if (!matService.insert(mat)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } else { |
| | | log.info("同步新物料[商品编号:{}]", mat.getMatnr()); |
| | | } |
| | | } else { |
| | | mat.sync(param); |
| | | if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr",matParam.getMatnr()))) { |
| | | throw new CoolException("更新已存在商品信息失败,请联系管理员"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |