| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.core.common.*; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.CombParam; |
| | | import com.zy.asrs.entity.param.MobileAdjustParam; |
| | | import com.zy.asrs.entity.param.OffSaleParam; |
| | | import com.zy.asrs.entity.param.OpenOrderPakinParam; |
| | | import com.zy.asrs.entity.param.*; |
| | | import com.zy.asrs.mapper.ManLocDetlMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.utils.MatUtils; |
| | | import com.zy.asrs.utils.PostMesDataUtils; |
| | | import com.zy.common.CodeRes; |
| | | import com.zy.common.constant.MesConstant; |
| | | import com.zy.common.entity.Parameter; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.common.model.LocTypeDto; |
| | | import com.zy.common.model.MesCombParam; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.model.enums.WorkNoType; |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 移动端服务核心类 |
| | |
| | | @Slf4j |
| | | @Service |
| | | public class MobileServiceImpl implements MobileService { |
| | | |
| | | |
| | | |
| | | @Autowired |
| | | private MatService matService; |
| | |
| | | private ManLocDetlService manLocDetlService; |
| | | @Autowired |
| | | private ManLocDetlMapper manLocDetlMapper; |
| | | @Autowired |
| | | private DocTypeService docTypeService; |
| | | @Autowired |
| | | private LocDetlRullUpDetailService locDetlRullUpDetailService; |
| | | @Autowired |
| | | private TagService tagService; |
| | | @Autowired |
| | | private BasBoxTypeService basBoxTypeService; |
| | | |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void trussComb(TrussCombParam param, Long userId) { |
| | | Date now = new Date(); |
| | | if (param.getSouSta()==145){ |
| | | param.setBarcode(String.valueOf(now.getTime())); |
| | | }else { |
| | | if (Cools.isEmpty(param.getBarcode())){ |
| | | throw new CoolException("参数:托盘码为空"); |
| | | } |
| | | } |
| | | param.setPalletizingNo(147); |
| | | |
| | | |
| | | |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | throw new CoolException("参数:原站点编号为空"); |
| | | }else if (param.getSouSta()==145 && param.getMatList().size() != 1){ |
| | | throw new CoolException("参数:物料明细 matLists为空 或者 大于1个明细"); |
| | | }else if (Cools.isEmpty(param.getMatList()) || param.getMatList().size() > 2){ |
| | | throw new CoolException("参数:物料明细 matLists为空 或者 大于2个明细"); |
| | | } |
| | | |
| | | String matnr = null; |
| | | List<WaitPakin> waitPakins = new ArrayList<>(); |
| | | for (TrussCombParam.MatList matList:param.getMatList()){ |
| | | long rollUp = new Date().getTime(); |
| | | Mat mat = matService.selectByMatnr(matList.getMatnr()); |
| | | if (Cools.isEmpty(mat)) { |
| | | throw new CoolException(matList.getMatnr() + "商品档案不存在"); |
| | | } |
| | | matnr = mat.getMatnr(); |
| | | WaitPakin waitPakin = new WaitPakin(); |
| | | waitPakin.sync(mat); |
| | | waitPakin.setModel(matList.getModel()); //批次 |
| | | waitPakin.setSpecs(matList.getSpecs()); //规格 |
| | | waitPakin.setBatch(matList.getBatch()); //木箱编码 |
| | | waitPakin.setBrand(param.getBoxType()); //木箱类型 |
| | | waitPakin.setZpallet(param.getBarcode()); //托盘码 |
| | | waitPakin.setOrigin(matList.getPosition()); //木箱在托盘上的位置 |
| | | waitPakin.setIoStatus("N"); // 入出状态 |
| | | waitPakin.setAnfme((double)matList.getAnfme()); // 木箱中铜箔数量 |
| | | waitPakin.setStatus("Y"); // 状态 |
| | | waitPakin.setAppeUser(userId); |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | waitPakin.setRollUp(rollUp); |
| | | if (!Cools.isEmpty(matList.getMatDetlList())){ |
| | | for (TrussCombParam.MatDetlList matDetlList:matList.getMatDetlList()){ |
| | | LocDetlRullUpDetail locDetlRullUpDetail = new LocDetlRullUpDetail(); |
| | | locDetlRullUpDetail.setUuid(rollUp); |
| | | locDetlRullUpDetail.setRollNo(matDetlList.getBoxNoDetl()); |
| | | locDetlRullUpDetail.setRollWeight(matDetlList.getWeightDetl().toString()); |
| | | locDetlRullUpDetailService.insert(locDetlRullUpDetail); |
| | | } |
| | | } |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | throw new CoolException("保存入库通知档失败"); |
| | | } |
| | | waitPakins.add(waitPakin); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short)1); |
| | | |
| | | StartupDto dto = commonService.getLocNo(1, 1, param.getSouSta(), matnr,null,null, locTypeDto); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(param.getBarcode()); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | // 生成工作档明细 |
| | | waitPakins.forEach(waitPakin -> { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(waitPakin); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setIoTime(wrkMast.getIoTime()); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setRollUp(waitPakin.getRollUp()); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | 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()+"目标库位已被占用"); |
| | | } |
| | | } |
| | | |
| | | //wms入库组托 退库单退库组托 |
| | | @Override |
| | | @Transactional |
| | | public void trussCombOrder(TrussCombParam param, Long userId) { |
| | | Date now = new Date(); |
| | | param.setBarcode(String.valueOf(now.getTime())); |
| | | param.setPalletizingNo(147); |
| | | |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | throw new CoolException("参数:码垛位编号 palletizingNo为空"); |
| | | }else if (Cools.isEmpty(param.getOrderNo())){ |
| | | throw new CoolException("参数:退货单单号 orderNo为空"); |
| | | }else if (Cools.isEmpty(param.getMatList())){ |
| | | throw new CoolException("参数:物料明细 matLists为空"); |
| | | } |
| | | |
| | | Order order = orderService.selectByNo(param.getOrderNo()); |
| | | if (Cools.isEmpty(order) || order.getSettle() > 2) { |
| | | throw new CoolException("单据编号已过期,单号:"+param.getOrderNo()); |
| | | } |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (Cools.isEmpty(docType) || !docType.getDocName().equals("退货入库单")){ |
| | | throw new CoolException("单号:"+param.getOrderNo()+"不是退货入库单"); |
| | | } |
| | | |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | if (Cools.isEmpty(orderDetls) || orderDetls.size()==0){ |
| | | throw new CoolException("未查询到此订单明细,单号:"+param.getOrderNo()); |
| | | } |
| | | List<String> orderBoxNoList = new ArrayList<>(); |
| | | for (OrderDetl orderDetl: orderDetls){ |
| | | if (orderDetl.getWorkQty().equals(0.0)){ |
| | | orderBoxNoList.add(orderDetl.getBatch()); |
| | | } |
| | | } |
| | | if (orderBoxNoList.size()==0 || orderBoxNoList.size()<param.getMatList().size()){ |
| | | throw new CoolException("单号:"+param.getOrderNo()+" 退货数量大于明细数量"); |
| | | } |
| | | List<String> matListBoxNoList = new ArrayList<>(); |
| | | for (TrussCombParam.MatList matList: param.getMatList()){ |
| | | if (!orderBoxNoList.contains(matList.getBatch())){ |
| | | throw new CoolException("单号:"+param.getOrderNo()+" 箱号:"+matList.getBatch()+"不属于此订单或者已经入库"); |
| | | }else { |
| | | matListBoxNoList.add(matList.getBatch()); |
| | | } |
| | | } |
| | | List<OrderDetl> orderDetlList = new ArrayList<>(); |
| | | for (OrderDetl orderDetl: orderDetls){ |
| | | if (matListBoxNoList.contains(orderDetl.getBatch())){ |
| | | orderDetlList.add(orderDetl); |
| | | } |
| | | } |
| | | List<WaitPakin> waitPakins = new ArrayList<>(); |
| | | |
| | | String matnrSign = ""; |
| | | String brandSign = ""; |
| | | for (OrderDetl orderDetl:orderDetlList){ |
| | | if (Cools.isEmpty(orderDetl.getMatnr()) || Cools.isEmpty(orderDetl.getBrand())){ |
| | | throw new CoolException(orderDetl.getOrderNo() + "所选明细存在未知规格或者未知箱型,请维护数据!"); |
| | | } |
| | | if (matnrSign.equals("")){ |
| | | matnrSign = orderDetl.getMatnr(); |
| | | brandSign = orderDetl.getBrand(); |
| | | }else { |
| | | if (!matnrSign.equals(orderDetl.getMatnr())){ |
| | | throw new CoolException(orderDetl.getMatnr() + "请选择同一个规格的货物!!!"); |
| | | } |
| | | if (!brandSign.equals(orderDetl.getBrand())){ |
| | | throw new CoolException(orderDetl.getMatnr() + "请选择同一种箱型的货物!!!"); |
| | | } |
| | | } |
| | | } |
| | | Mat mat = matService.selectByMatnr(matnrSign); |
| | | if (Cools.isEmpty(mat)) { |
| | | throw new CoolException(matnrSign + "商品档案不存在"); |
| | | } |
| | | for (OrderDetl orderDetl:orderDetlList){ |
| | | WaitPakin waitPakin = new WaitPakin(); |
| | | waitPakin.sync(mat); |
| | | waitPakin.setOrderNo(order.getOrderNo()); // 单据编号 |
| | | waitPakin.setModel(orderDetl.getModel()); //批次 |
| | | waitPakin.setSpecs(orderDetl.getSpecs()); //规格 |
| | | waitPakin.setBatch(orderDetl.getBatch()); //木箱编码 |
| | | waitPakin.setBrand(orderDetl.getBrand()); //木箱类型 |
| | | waitPakin.setZpallet(param.getBarcode()); //托盘码 |
| | | waitPakin.setWeight(orderDetl.getWeight()); //净重 |
| | | waitPakin.setVolume(orderDetl.getVolume()); //毛重 |
| | | waitPakin.setPrice(orderDetl.getPrice()); //长度 |
| | | waitPakin.setSpecs(String.valueOf(orderDetl.getSpecs())); //接头 |
| | | waitPakin.setOrigin("1"); //木箱在托盘上的位置 |
| | | waitPakin.setIoStatus("Y"); // 入出状态 |
| | | waitPakin.setAnfme(orderDetl.getAnfme()); // 木箱中铜箔数量 |
| | | waitPakin.setWeight(orderDetl.getWeight()); // 木箱中铜箔净重 |
| | | waitPakin.setStatus("Y"); // 状态 |
| | | waitPakin.setAppeUser(userId); |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | waitPakin.setZpallet(param.getBarcode()); |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | throw new CoolException("保存入库通知档失败"); |
| | | } |
| | | waitPakins.add(waitPakin); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short)1); |
| | | |
| | | StartupDto dto = commonService.getLocNo(1, 1, 145, matnrSign,null,null, locTypeDto); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(param.getBarcode()); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | // 生成工作档明细 |
| | | waitPakins.forEach(waitPakin -> { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(waitPakin); |
| | | wrkDetl.setOrderNo(order.getOrderNo()); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setIoTime(wrkMast.getIoTime()); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setZpallet(param.getBarcode()); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | 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()+"目标库位已被占用"); |
| | | } |
| | | // 修改订单作业数量 |
| | | if (!orderDetlService.increaseWorkQty(order.getId(), orderDetls.get(0).getMatnr(), orderDetls.get(0).getBatch(), orderDetls.get(0).getAnfme())) { |
| | | throw new CoolException("修改单据作业数量失败"); |
| | | } |
| | | orderService.updateSettle(order.getId(), 2L, userId); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void trussComb2Car(Integer staNo) { |
| | | if (staNo!=212){ |
| | | throw new CoolException("只允许212呼叫托盘"); |
| | | } |
| | | BasDevp basDevp = basDevpService.selectById(212); |
| | | if (!basDevp.getAutoing().equals("Y")){ |
| | | throw new CoolException("212站点不是自动"); |
| | | } else if (basDevp.getLoading().equals("Y")){ |
| | | throw new CoolException("212站点有物"); |
| | | } else if (basDevp.getWrkNo()!=0){ |
| | | throw new CoolException("212站点有工作号"); |
| | | } |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 212)); |
| | | if (!Cools.isEmpty(wrkMast1)){ |
| | | throw new CoolException("任务档案已存在!请等待..."); |
| | | } |
| | | int workNo = commonService.getWorkNo(6); |
| | | Date now = new Date(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(61L); // 工作状态:61、等待空板 |
| | | wrkMast.setIoType(212); // 入出库状态:212.2楼212呼叫空板 |
| | | wrkMast.setIoPri(10D); // 优先级 |
| | | wrkMast.setStaNo(212); |
| | | wrkMast.setFullPlt("N"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("Y"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void PalletizingCompleteTwoFloorParam(PalletizingCompleteTwoFloorParam param) { |
| | | Long userId = 7777L;//中控 |
| | | param.setPalletizingNo(212); |
| | | |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>() |
| | | .eq("io_type", 1).eq("wrk_sts", 1).eq("source_sta_no",212)); |
| | | if (!Cools.isEmpty(wrkMast1)){ |
| | | throw new CoolException("存在一笔工作档案,请先入库!"); |
| | | } |
| | | |
| | | //判断param参数 |
| | | if (Cools.isEmpty(param.getBarcode())){ |
| | | throw new CoolException("参数:托盘码 barcode为空"); |
| | | }else if (Cools.isEmpty(param.getPalletizingNo())){ |
| | | throw new CoolException("参数:码垛位编号 palletizingNo为空"); |
| | | }else if (Cools.isEmpty(param.getBoxType())){ |
| | | throw new CoolException("参数:木箱类型 boxType为空"); |
| | | }else if (Cools.isEmpty(param.getMatList()) || param.getMatList().size()==0){ |
| | | throw new CoolException("参数:物料明细 matLists为空"); |
| | | } |
| | | |
| | | String matnrOne = "";//木箱相同位置 规格 matnr校验 1、左 |
| | | String matnrTwo = "";//木箱相同位置 规格 matnr校验 2、右 |
| | | ArrayList<String> boxNos = new ArrayList<>(); //木箱唯一编码查重 (batch) |
| | | //判断matLists参数 |
| | | for (PalletizingCompleteTwoFloorParam.MatList matList:param.getMatList()){ |
| | | if (Cools.isEmpty(matList.getMatnr())){ |
| | | throw new CoolException("参数:规格 matnr为空"); |
| | | }else if (Cools.isEmpty(matList.getPosition())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:码垛位置 position为空"); |
| | | }else if (Cools.isEmpty(matList.getBatch())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:木箱编号 batch为空"); |
| | | }else if (Cools.isEmpty(matList.getModel())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:卷号 model为空"); |
| | | }else if (Cools.isEmpty(matList.getBatch())){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:木箱编号 boxNo为空"); |
| | | }else if (Cools.isEmpty(matList.getWeight()) || matList.getWeight().equals(0D)){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:净重 weight为空"); |
| | | }else if (Cools.isEmpty(matList.getRoughWeight()) || matList.getRoughWeight().equals(0D)){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:毛重 roughWeight为空"); |
| | | }else if (Cools.isEmpty(matList.getRollExtent()) || matList.getRollExtent().equals(0D)){ |
| | | throw new CoolException("规格:"+matList.getMatnr()+"、参数:卷长度 rollExtent为空"); |
| | | } |
| | | |
| | | if (matList.getPosition().equals("1")){//1、左 2、右 |
| | | if (!matnrOne.equals("")){ |
| | | if (!matnrOne.equals(matList.getMatnr())){ |
| | | throw new CoolException("木箱位置:"+matList.getPosition()+"存在不同规格卷信息"); |
| | | } |
| | | }else { |
| | | matnrOne=matList.getMatnr(); |
| | | } |
| | | }else if (matList.getPosition().equals("2")){ |
| | | if (!matnrTwo.equals("")){ |
| | | if (!matnrTwo.equals(matList.getMatnr())){ |
| | | throw new CoolException("木箱位置:"+matList.getPosition()+"存在不同规格卷信息"); |
| | | } |
| | | }else { |
| | | matnrTwo=matList.getMatnr(); |
| | | } |
| | | }else { |
| | | throw new CoolException("参数:木箱编号 boxNo:"+matList.getBatch()+",木箱位置错误:"+matList.getPosition()); |
| | | } |
| | | |
| | | if (!boxNos.contains(matList.getBatch())){ |
| | | boxNos.add(matList.getBatch()); |
| | | }else { |
| | | throw new CoolException("参数:木箱编号 boxNo:"+matList.getBatch()+",木箱编码存在重复"); |
| | | } |
| | | |
| | | if (locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("batch", matList.getBatch()))!=0 |
| | | || wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("batch", matList.getBatch()))!=0 |
| | | || waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("batch", matList.getBatch()))!=0){ |
| | | throw new CoolException("木箱编号:"+matList.getBatch()+"已存在,请勿重复入库"); |
| | | } |
| | | } |
| | | |
| | | if (locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()))!=0 |
| | | || wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()))!=0 |
| | | || waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()))!=0){ |
| | | throw new CoolException("托盘条码:"+param.getBarcode()+"已存在,请勿重复组托"); |
| | | } |
| | | |
| | | String matnr = null; |
| | | List<WaitPakin> waitPakins = new ArrayList<>(); |
| | | Date now = new Date(); |
| | | for (PalletizingCompleteTwoFloorParam.MatList matList:param.getMatList()){ |
| | | Mat mat = matService.selectByMatnr(matList.getMatnr()); |
| | | if (Cools.isEmpty(mat)) { |
| | | mat = new Mat(); |
| | | mat.setMatnr(matList.getMatnr()); |
| | | mat.setMaktx(matList.getMatnr()); |
| | | mat.setTagId(tagService.getTop().getId()); |
| | | mat.setBrand(param.getBoxType()); |
| | | mat.setCreateBy(userId); |
| | | mat.setCreateTime(now); |
| | | mat.setUpdateBy(userId); |
| | | mat.setUpdateTime(now); |
| | | mat.setStatus(1); |
| | | if (!matService.insert(mat)) { |
| | | throw new CoolException("规格添加失败,请联系管理员"); |
| | | } |
| | | } |
| | | matnr = matList.getMatnr(); |
| | | WaitPakin waitPakin = new WaitPakin(); |
| | | waitPakin.sync(mat); |
| | | waitPakin.setBatch(matList.getBatch()); //木箱编码 //批次 唯一值 箱号 |
| | | waitPakin.setModel(matList.getModel()); //卷号 唯一值 |
| | | waitPakin.setBrand(param.getBoxType()); //木箱类型 |
| | | waitPakin.setZpallet(param.getBarcode()); //托盘码 |
| | | waitPakin.setOrigin(matList.getPosition()); //木箱在托盘上的位置 |
| | | waitPakin.setWeight(matList.getWeight()); //净重 |
| | | waitPakin.setVolume(matList.getRoughWeight()); //毛重 |
| | | waitPakin.setPrice(matList.getRollExtent()); //长度 |
| | | waitPakin.setSpecs(String.valueOf(matList.getJoint())); //接头 |
| | | waitPakin.setIoStatus("Y"); // 入出状态 |
| | | waitPakin.setAnfme(matList.getAnfme()); // 数量 |
| | | waitPakin.setStatus("Y"); // 状态 |
| | | waitPakin.setAppeUser(userId); |
| | | waitPakin.setAppeTime(now); |
| | | waitPakin.setModiUser(userId); |
| | | waitPakin.setModiTime(now); |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | throw new CoolException("保存入库通知档失败"); |
| | | } |
| | | waitPakins.add(waitPakin); |
| | | } |
| | | |
| | | LocTypeDto locTypeDto = new LocTypeDto(); |
| | | locTypeDto.setLocType1((short)1); |
| | | |
| | | StartupDto dto = commonService.getLocNo(1, 1, 212, matnr,null,null, locTypeDto); |
| | | |
| | | int workNo = dto.getWorkNo(); |
| | | // 生成工作档 |
| | | WrkMast wrkMast = new WrkMast(); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setWrkSts(1L); // 工作状态:生成入库ID |
| | | wrkMast.setIoType(1); // 入出库状态:1.入库 |
| | | wrkMast.setIoPri(13D); // 优先级 |
| | | wrkMast.setCrnNo(dto.getCrnNo()); |
| | | wrkMast.setSourceStaNo(dto.getSourceStaNo()); |
| | | wrkMast.setStaNo(dto.getStaNo()); |
| | | wrkMast.setLocNo(dto.getLocNo()); |
| | | wrkMast.setBarcode(param.getBarcode()); // 托盘码 |
| | | wrkMast.setFullPlt("Y"); // 满板:Y |
| | | wrkMast.setPicking("N"); // 拣料 |
| | | wrkMast.setExitMk("N"); // 退出 |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("Y"); |
| | | wrkMast.setCtnType(0); // 容器类型 |
| | | // 操作人员数据 |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiTime(now); |
| | | boolean res = wrkMastService.insert(wrkMast); |
| | | if (!res) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | // 生成工作档明细 |
| | | waitPakins.forEach(waitPakin -> { |
| | | WrkDetl wrkDetl = new WrkDetl(); |
| | | wrkDetl.sync(waitPakin); |
| | | wrkDetl.setWrkNo(wrkMast.getWrkNo()); |
| | | wrkDetl.setIoTime(wrkMast.getIoTime()); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiTime(now); |
| | | wrkDetl.setZpallet(param.getBarcode()); |
| | | if (!wrkDetlService.insert(wrkDetl)) { |
| | | 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()+"目标库位已被占用"); |
| | | } |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void comb(CombParam param, Long userId) { |
| | | if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) { |
| | | throw new CoolException(BaseRes.PARAM); |
| | | } |
| | | if(param.getCombMats().size()>1){ |
| | | throw new CoolException("请提取一个商品,或者刷新重新组托!"); |
| | | } |
| | | // 判断是否有相同条码的数据 |
| | | if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>(). |
| | |
| | | throw new CoolException(param.getBarcode() + "数据正在进行入库"); |
| | | } |
| | | |
| | | if(param.getBarcode().length()!=8){ |
| | | throw new CoolException("条码长度不是8位===>>" + param.getBarcode()); |
| | | } |
| | | if (param.getCombMats().size()>1){ |
| | | throw new CoolException("不允许混料===>>" + param.getBarcode()); |
| | | } |
| | | |
| | | int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode())); |
| | | int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode())); |
| | | if (countLoc > 0 || countWrk > 0) { |
| | | throw new CoolException("工作档/库存条码数据已存在===>>" + param.getBarcode()); |
| | | int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode())); |
| | | if (countLoc > 0 || countWrk > 0 || countwait > 0) { |
| | | throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode()); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | |
| | | // 关联组托 |
| | | } else { |
| | | Order order = orderService.selectByNo(param.getOrderNo()); |
| | | if (order.getSettle() > 2) { |
| | | if (Cools.isEmpty(order) || order.getSettle() > 2) { |
| | | throw new CoolException("单据编号已过期"); |
| | | } |
| | | // 生成入库通知档 |
| | |
| | | |
| | | } |
| | | |
| | | // 商品上架 |
| | | @Override |
| | | public void onSale(CombParam param) { |
| | | Date now = new Date(); |
| | |
| | | throw new CoolException(combMat.getMatnr() + ":商品数量有误!"); |
| | | } |
| | | if (Cools.isEmpty(combMat.getBatch())){ |
| | | throw new CoolException(combMat.getMatnr() + ":商品批号有误!"); |
| | | // throw new CoolException(combMat.getMatnr() + ":商品批号有误!"); |
| | | } |
| | | ManLocDetl manLocDetl = new ManLocDetl(); |
| | | manLocDetl.setLocNo(locno); |
| | | manLocDetl.setNodeId(node.getId()); |
| | | manLocDetl.setMaktx(mat.getMaktx()); |
| | | manLocDetl.setMatnr(mat.getMatnr()); |
| | | manLocDetl.setBatch(combMat.getBatch()); |
| | | manLocDetl.setBatch(Cools.isEmpty(combMat.getBatch()) ? "" : combMat.getBatch()); |
| | | manLocDetl.setAnfme(combMat.getAnfme()); |
| | | manLocDetl.setModiTime(now); |
| | | if (!manLocDetlService.insert(manLocDetl)) { |
| | |
| | | } |
| | | } |
| | | |
| | | // 商品下架 |
| | | @Override |
| | | public void offSale(OffSaleParam offSaleParam) { |
| | | List<ManLocDetl> manLocDetls = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); |
| | | if (Cools.isEmpty(manLocDetls)){ |
| | | throw new CoolException("商品下架失败!"); |
| | | ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); |
| | | if (Cools.isEmpty(manLocDetl)){ |
| | | throw new CoolException("无此商品!"); |
| | | } |
| | | int i = manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); |
| | | System.out.println(i); |
| | | double anfme = manLocDetl.getAnfme() - offSaleParam.getAnfme(); |
| | | if (anfme < 0) { |
| | | throw new CoolException("商品库存不足!"); |
| | | } else if (anfme == 0){ |
| | | manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr()); |
| | | } |
| | | manLocDetlMapper.updateAnfme0(anfme,manLocDetl.getNodeId()); |
| | | } |
| | | |
| | | // 查找商品 |
| | | |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void adjust(MobileAdjustParam param, Long userId) { |
| | |
| | | wrkMast.setEmptyMk("N"); // 空板 |
| | | wrkMast.setLinkMis("N"); |
| | | wrkMast.setAppeUser(userId); // 操作人员数据 |
| | | wrkMast.setSheetNo("0"); //徐工汉云拆垛标记:0: 初始 1: 未拆 2:已拆 3:已处理可下一步(转历史档) |
| | | if (wrkMast.getStaNo()<118 || wrkMast.getStaNo()>121){ |
| | | wrkMast.setSheetNo("3"); |
| | | } |
| | | wrkMast.setAppeTime(now); |
| | | wrkMast.setModiUser(userId); |
| | | wrkMast.setModiTime(now); |
| | |
| | | throw new CoolException(locDetl.getLocNo() + "库位不是在库状态"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public List<Map<String, Object>> boxTypeComb() { |
| | | EntityWrapper<BasBoxType> wrapper = new EntityWrapper<>(); |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | List<BasBoxType> basBoxTypes = basBoxTypeService.selectList(wrapper.orderBy("id",true)); |
| | | for (BasBoxType basBoxType : basBoxTypes){ |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("boxType", basBoxType.getBoxType()); |
| | | map.put("boxSpecs", basBoxType.getBoxSpecs()); |
| | | result.add(map); |
| | | } |
| | | return result; |
| | | } |
| | | } |