package com.huaheng.pc.u8.service; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.huaheng.api.general.domain.ShipmentDomain; import com.huaheng.api.general.service.ShipmentApiService; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.DateUtils; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.Wrappers; import com.huaheng.common.utils.http.HttpUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.company.domain.CompanyU8; import com.huaheng.pc.config.company.service.CompanyService; import com.huaheng.pc.config.company.service.CompanyU8Service; import com.huaheng.pc.config.documentWarning.service.IDocumentWarningService; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.warehouse.domain.Warehouse; import com.huaheng.pc.config.warehouse.domain.WarehouseU8; import com.huaheng.pc.config.warehouse.service.WarehouseService; import com.huaheng.pc.config.warehouse.service.WarehouseU8Service; import com.huaheng.pc.referenceCode.domain.U8Reference; import com.huaheng.pc.referenceCode.service.U8ReferenceService; import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail; import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService; import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService; import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; import com.huaheng.pc.system.user.domain.User; import com.huaheng.pc.system.user.service.IUserService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.u8.domain.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.ParseException; import java.util.*; import java.util.stream.Collectors; @Service public class ICSShipmentApiService { @Resource private IDocumentWarningService documentWarningService; @Resource private WarehouseU8Service warehouseU8Service; @Resource private ShipmentApiService shipmentApiService; @Resource private MaterialService materialService; @Resource private ICSShipmentDetailService icsShipmentDetailService; @Resource private ICSShipmentHeaderService icsShipmentHeaderService; @Resource private ShipmentHeaderService shipmentHeaderService; @Resource private ShipmentDetailService shipmentDetailService; @Resource private ShipmentContainerDetailService shipmentContainerDetailService; @Resource private TaskDetailService taskDetailService; @Resource private CompanyU8Service companyU8Service; @Resource private ICSReceiptAPIService icsReceiptAPIService; @Resource private IUserService userService; @Resource private U8ReferenceService u8ReferenceService; @Resource private CompanyService companyService; @Resource private WarehouseService warehouseService; //u8-wms出库下发 @Transactional public AjaxResult procureShipment(ICSShipmentModel icsShipmentModel) { //获取主单和子单列 icsShipmentModel = assign(icsShipmentModel); ICSShipmentHeader icsShipmentHeader = icsShipmentModel.getIcsShipmentHeader(); List<ICSShipmentDetail> icsShipmentDetails = icsShipmentModel.getIcsShipmentDetails(); String currentWarehouseCode = icsShipmentHeader.getWarehouseCode(); if (StringUtils.isEmpty(currentWarehouseCode)) { return AjaxResult.error("仓库编码不能为空"); } if (StringUtils.isEmpty(icsShipmentHeader.getIsNew())) { return AjaxResult.error("IsNew不能为空"); } boolean isFlag = "0".equals(icsShipmentHeader.getIsNew()) ? true : false; String type = icsShipmentHeader.getType(); String typeName = getShipmentTypeName(type); switch (type) { case "QO": case "MO": case "OO": case "PKO": case "TO": break; default: return AjaxResult.error("出库类型不匹配"); } //U8仓库编码 String u8WarehouseCode = icsShipmentHeader.getStock(); //U8公司编码 String u8CompanyCode = icsShipmentHeader.getCompanyCode(); //判断U8货主 CompanyU8 companyU8 = companyU8Service.getCompanyByU8CodeWarehouseCode(u8CompanyCode, currentWarehouseCode); if (companyU8 == null) { return AjaxResult.error("系统没有此货主:【" + u8CompanyCode + "】"); } if (StringUtils.isEmpty(u8WarehouseCode)) { return AjaxResult.error("仓库编码为空:【" + u8WarehouseCode + "】"); } companyService.checkwarehouseCompany(companyU8.getCompanyCode()); //通过u8的货主和仓库匹配wms的仓库 WarehouseU8 warehouseU8 = warehouseU8Service.getOne(new LambdaQueryWrapper<WarehouseU8>() .eq(WarehouseU8::getUCompanyCode, icsShipmentHeader.getCompanyCode()) .eq(WarehouseU8::getUWarehouseCode, u8WarehouseCode)); if (warehouseU8 == null) { return AjaxResult.error("系统没有此仓库"); } //u8关联表 检查上游单号是否重复 U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferCode, icsShipmentHeader.getReferCode()) .eq(U8Reference::getReferType, icsShipmentHeader.getType()) .eq(U8Reference::getWarehouseCode, currentWarehouseCode) .last("LIMIT 1")); //入库单表 检查上游单号是否重复 ShipmentHeader shipmentHeader1 = shipmentHeaderService.getOne(new LambdaQueryWrapper<ShipmentHeader>() .eq(ShipmentHeader::getReferCode, icsShipmentHeader.getReferCode()) .eq(ShipmentHeader::getShipmentType, icsShipmentHeader.getType()) .eq(ShipmentHeader::getWarehouseCode, currentWarehouseCode) .last("LIMIT 1")); if (!isFlag) { if (one != null || shipmentHeader1 != null) { return AjaxResult.error(":请不要重复下发 " + icsShipmentHeader.getReferCode()); } } if (icsShipmentHeader.getIsFlag()) { checkShipmentBill(isFlag, icsShipmentHeader.getReferCode(), icsShipmentHeader.getType(), currentWarehouseCode); } boolean save = icsShipmentHeaderService.save(icsShipmentHeader); if (!save) { throw new ServiceException("下发失败"); } for (ICSShipmentDetail icsShipmentDetail : icsShipmentDetails) { icsShipmentDetail.setHeaderId(icsShipmentHeader.getSId()); } save = icsShipmentDetailService.saveBatch(icsShipmentDetails); if (!save) { throw new ServiceException("下发失败"); } if (!icsShipmentHeader.getIsFlag()) { return AjaxResult.success(); } //根据icsShipmentHeader生成shipmentHeader ShipmentHeader shipmentHeader = new ShipmentHeader(); String maker = icsShipmentHeader.getCMaker(); shipmentHeader.setShipmentType(type); shipmentHeader.setReferCode(icsShipmentHeader.getReferCode()); shipmentHeader.setReferId(icsShipmentHeader.getReferId()); shipmentHeader.setId(null); shipmentHeader.setLastUpdatedBy(maker); shipmentHeader.setCreatedBy(maker); shipmentHeader.setCreated(icsShipmentHeader.getCreated()); shipmentHeader.setCustomerCode(icsShipmentHeader.getCCusCode()); shipmentHeader.setShipmentNote(icsShipmentHeader.getCMemo()); shipmentHeader.setWarehouseCode(warehouseU8.getWarehouseCode()); shipmentHeader.setUWarehouseCode(icsShipmentHeader.getStock()); shipmentHeader.setCompanyCode(warehouseU8.getCompanyCode()); shipmentHeader.setCDepName(icsShipmentHeader.getCDepName()); shipmentHeader.setRecMobile(icsShipmentHeader.getRecMobile()); shipmentHeader.setRecCompany(icsShipmentHeader.getRecCompany()); shipmentHeader.setRecName(icsShipmentHeader.getRecName()); shipmentHeader.setRecAddr(icsShipmentHeader.getRecAddr()); shipmentHeader.setSendAddr(icsShipmentHeader.getSendAddr()); shipmentHeader.setSendCompany(icsShipmentHeader.getSendCompany()); shipmentHeader.setSendMobile(icsShipmentHeader.getSendMobile()); shipmentHeader.setSendName(icsShipmentHeader.getSendName()); switch (type) { case "OO": shipmentHeader.setReferCode(icsShipmentHeader.getMoCode()); shipmentHeader.setReferId(icsShipmentHeader.getReferId()); break; case "TO": shipmentHeader.setReferCode(icsShipmentHeader.getCTVCode()); shipmentHeader.setReferId(icsShipmentHeader.getReferId()); break; default: shipmentHeader.setReferCode(icsShipmentHeader.getCCode()); shipmentHeader.setReferId(icsShipmentHeader.getReferId()); break; } if (StringUtils.isEmpty(shipmentHeader.getReferCode())) { throw new ServiceException("没有单号"); } //根据icsShipmentDetail生成shipmentAetail List<ShipmentDetail> shipmentDetails = new ArrayList<ShipmentDetail>(); for (ICSShipmentDetail icsShipmentDetail : icsShipmentDetails) { //查找物料 Material material = materialService.getOne(new LambdaQueryWrapper<Material>() .eq(Material::getCode, icsShipmentDetail.getCInvCode()) .eq(Material::getWarehouseCode, warehouseU8.getWarehouseCode())); if (material == null) { throw new ServiceException("该物料不存在:" + icsShipmentDetail.getCInvCode()); } ShipmentDetail shipmentDetail = new ShipmentDetail(); shipmentDetail.setId(null); shipmentDetail.setReferId(icsShipmentDetail.getAutoID()); shipmentDetail.setReferCode(shipmentHeader.getReferCode()); shipmentDetail.setMoCode(icsShipmentDetail.getMoCode()); shipmentDetail.setLot(icsShipmentDetail.getCDefine23()); shipmentDetail.setWarehouseCode(warehouseU8.getWarehouseCode()); shipmentDetail.setMaterialCode(icsShipmentDetail.getCInvCode()); shipmentDetail.setMaterialName(icsShipmentDetail.getCInvName()); shipmentDetail.setMaterialSpec(icsShipmentDetail.getCInvStd()); // shipmentDetail.setZoneCode(material.getZoneCode()); shipmentDetail.setCreated(DateUtils.getNowDate()); shipmentDetail.setBatch(""); shipmentDetail.setUWarehouseCode(shipmentHeader.getUWarehouseCode()); shipmentDetail.setMaterialUnit(icsShipmentDetail.getCComUnitName()); shipmentDetail.setCreatedBy(maker); shipmentDetail.setLastUpdated(DateUtils.getNowDate()); shipmentDetail.setLastUpdatedBy(maker); shipmentDetail.setMoCode(icsShipmentDetail.getMoCode()); if (!icsShipmentDetail.getCompanyCode().equals(icsShipmentHeader.getCompanyCode())) { // documentWarningService.ErpSendWarning(shipmentHeader.getReferCode(), "子单货主与主单不对应"); throw new ServiceException("子单货主与主单不对应"); } shipmentDetail.setCompanyCode(warehouseU8.getCompanyCode()); shipmentDetail.setAutoId(icsShipmentDetail.getAutoID()); shipmentDetail.setProjectNo(icsShipmentDetail.getCItemName()); shipmentDetail.setQty((icsShipmentDetail.getIQuantity()).abs()); shipmentDetail.setQtyCompleted(icsShipmentDetail.getIQuantity()); shipmentDetail.setInventorySts(QuantityConstant.GOOD); if (icsShipmentDetail.getIrowno() != null && StringUtils.isNotEmpty(icsShipmentDetail.getIrowno().toString())) { shipmentDetail.setReferLineNum(icsShipmentDetail.getIrowno().toString()); } if (icsShipmentDetail.getSortSeq() != null && StringUtils.isNotEmpty(icsShipmentDetail.getSortSeq().toString())) { shipmentDetail.setReferLineNum(icsShipmentDetail.getSortSeq().toString()); } shipmentDetails.add(shipmentDetail); } //调用公共API ShipmentDomain shipmentDomain = new ShipmentDomain(); shipmentDomain.setShipmentHeader(shipmentHeader); shipmentDomain.setShipmentDetails(shipmentDetails); AjaxResult ajaxResult = shipmentApiService.shipment(shipmentDomain); if (!ajaxResult.hasErr() && !isFlag) { U8Reference reference = new U8Reference(); reference.setReferType(icsShipmentHeader.getType()); reference.setReferCode(icsShipmentHeader.getReferCode()); reference.setStock(icsShipmentHeader.getStock()); reference.setCompanyCode(warehouseU8.getCompanyCode()); reference.setWarehouseCode(currentWarehouseCode); reference.setTypeName(typeName); reference.setCreated(DateUtils.getNowDate()); u8ReferenceService.save(reference); } if (ajaxResult.hasErr()) { return ajaxResult; } if (!isFlag) { return AjaxResult.success("出库单下发成功"); } else if (isFlag) { return AjaxResult.success("出库单更新成功"); } return AjaxResult.success("出库单下发成功"); } //出库单为销售出库或采购退货单时 /** * 出库单为 销售出库单 | 采购退货单 * * @param icsShipmentModel * @return */ @Transactional public AjaxResult saleShipmentOrPurchReturn(ICSShipmentModel icsShipmentModel) { icsShipmentModel = assign(icsShipmentModel); ICSShipmentHeader icsShipmentHeader = icsShipmentModel.getIcsShipmentHeader(); List<ICSShipmentDetail> icsShipmentDetails = icsShipmentModel.getIcsShipmentDetails(); if (StringUtils.isEmpty(icsShipmentHeader.getIsNew())) { return AjaxResult.error("isNew为空"); } boolean isFlag = "0".equals(icsShipmentHeader.getIsNew()) ? true : false; String type = icsShipmentHeader.getType(); String currentWarehouseCode = icsShipmentHeader.getWarehouseCode(); if (StringUtils.isEmpty(currentWarehouseCode)) { return AjaxResult.error("仓库编码不能为空"); } String typeName = getShipmentTypeName(type); switch (type) { case "SO": case "PRO": break; default: return AjaxResult.error("出库类型不匹配"); } String code = icsShipmentHeader.getReferCode(); if (StringUtils.isEmpty(code)) { return AjaxResult.error("没有单号"); } CompanyU8 companyWu = companyU8Service.getOne(new LambdaQueryWrapper<CompanyU8>() .eq(CompanyU8::getUCompanyCode, icsShipmentHeader.getCompanyCode()) .last("LIMIT 1")); if (companyWu == null) { return AjaxResult.error("单据货主不存在" + icsShipmentHeader.getCompanyCode()); } Map<String, String> map = new HashMap<>(); Set<String> cwhcodes = new HashSet<>(); for (ICSShipmentDetail item : icsShipmentDetails) { //通过u8的货主和仓库匹配wms的仓库 WarehouseU8 warehouseU8 = warehouseU8Service.getWarehouseU8ByUCompanyUWarehouseCode(item.getCompanyCode(), item.getCWHCode(), currentWarehouseCode); if (warehouseU8 != null) { map.put(warehouseU8.getUWarehouseCode(), warehouseU8.getCompanyCode()); cwhcodes.add(warehouseU8.getUWarehouseCode()); } } /* WarehouseU8 warehouseU81 = warehouseU8Service.getOne(new LambdaQueryWrapper<WarehouseU8>() .eq(WarehouseU8::getUCompanyCode, icsShipmentHeader.getCompanyCode()) .eq(WarehouseU8::getUWarehouseCode, icsShipmentHeader.getStock()) .eq(WarehouseU8::getWarehouseCode, currentWarehouseCode)); if(warehouseU81==null){ return AjaxResult.error("仓库编码不错误:"+icsShipmentHeader.getStock()); }*/ //u8关联表 检查上游单号是否重复 U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferCode, icsShipmentHeader.getReferCode()) .eq(U8Reference::getReferType, icsShipmentHeader.getType()) .eq(U8Reference::getWarehouseCode, currentWarehouseCode)); // 入库单表 检查上游单号是否重复 List<ShipmentHeader> shipmentHeader1 = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>() .eq(ShipmentHeader::getReferCode, icsShipmentHeader.getReferCode()) .eq(ShipmentHeader::getWarehouseCode, icsShipmentHeader.getWarehouseCode())); if (one != null && shipmentHeader1.size() > 1) { return AjaxResult.error(typeName + ":请不要重复下发 " + icsShipmentHeader.getReferCode()); } //判断出库单是否可以更新 checkShipmentBill(isFlag, code, icsShipmentHeader.getType(), currentWarehouseCode); boolean save = icsShipmentHeaderService.save(icsShipmentHeader); if (!save) { throw new ServiceException("下发失败"); } for (ICSShipmentDetail icsShipmentDetail : icsShipmentDetails) { icsShipmentDetail.setHeaderId(icsShipmentHeader.getSId()); } save = icsShipmentDetailService.saveBatch(icsShipmentDetails); if (!save) { throw new ServiceException("下发失败"); } // Set<String> cwhcodes = icsShipmentDetails.stream().map(ICSShipmentDetail::getCWHCode).collect(Collectors.toSet()); List<ShipmentDomain> domains = new ArrayList<>(); for (String cwhcode : cwhcodes) { String maker = icsShipmentHeader.getCMaker(); ShipmentHeader shipmentHeader = new ShipmentHeader(); shipmentHeader.setShipmentType(icsShipmentHeader.getType()); shipmentHeader.setId(null); if (StringUtils.isNotEmpty(icsShipmentHeader.getFromCompanyCode())) { shipmentHeader.setUserDef3("跨账套"); } shipmentHeader.setReferId(icsShipmentHeader.getReferId()); shipmentHeader.setReferCode(icsShipmentHeader.getReferCode()); shipmentHeader.setLastUpdatedBy(maker); shipmentHeader.setCreatedBy(maker); shipmentHeader.setCreated(icsShipmentHeader.getCreated()); shipmentHeader.setCustomerCode(icsShipmentHeader.getCCusCode()); shipmentHeader.setLastUpdated(icsShipmentHeader.getCreated()); shipmentHeader.setReferCode(code); shipmentHeader.setShipmentNote(icsShipmentHeader.getCMemo()); shipmentHeader.setWarehouseCode(currentWarehouseCode); shipmentHeader.setUWarehouseCode(cwhcode); String companyCode = map.get(cwhcode); shipmentHeader.setCompanyCode(companyCode); shipmentHeader.setSupplierCode(icsShipmentHeader.getCVenCode()); shipmentHeader.setDeptCode(icsShipmentHeader.getCDepCode()); shipmentHeader.setCDepName(icsShipmentHeader.getCDepName()); shipmentHeader.setRecMobile(icsShipmentHeader.getRecMobile()); shipmentHeader.setRecCompany(icsShipmentHeader.getRecCompany()); shipmentHeader.setRecName(icsShipmentHeader.getRecName()); shipmentHeader.setRecAddr(icsShipmentHeader.getRecAddr()); shipmentHeader.setSendAddr(icsShipmentHeader.getSendAddr()); shipmentHeader.setSendCompany(icsShipmentHeader.getSendCompany()); shipmentHeader.setSendMobile(icsShipmentHeader.getSendMobile()); shipmentHeader.setSendName(icsShipmentHeader.getSendName()); //销售单向wms主单存入发货信息和收货信息 if (!StringUtils.isEmpty(icsShipmentHeader.getCSCName()) && "快递".equals(icsShipmentHeader.getCSCName()) && StringUtils.isNotEmpty(icsShipmentHeader.getRecName())) { shipmentHeader.setKdEable(1); } List<ShipmentDetail> shipmentDetails = new ArrayList<>(); for (ICSShipmentDetail item : icsShipmentDetails) { if (!cwhcode.equals(item.getCWHCode())) { continue; } //查找物料 Material material = materialService.getOne(new LambdaQueryWrapper<Material>() .eq(Material::getCode, item.getCInvCode()) .eq(Material::getWarehouseCode, currentWarehouseCode)); if (material == null) { // documentWarningService.ErpSendWarning(code, "该物料不存在:"+item.getCInvCode()); throw new ServiceException("该物料不存在:" + item.getCInvCode()); } ShipmentDetail shipmentDetail = new ShipmentDetail(); shipmentDetail.setId(null); shipmentDetail.setReferCode(code); shipmentDetail.setAutoId(item.getAutoID()); shipmentDetail.setReferLineNum(item.getIrowno() + ""); shipmentDetail.setWarehouseCode(currentWarehouseCode); shipmentDetail.setUWarehouseCode(icsShipmentHeader.getUWarehouseCode()); shipmentDetail.setMaterialCode(item.getCInvCode()); shipmentDetail.setZoneCode(material.getZoneCode()); shipmentDetail.setCreated(DateUtils.getNowDate()); shipmentDetail.setUWarehouseCode(item.getCWHCode()); shipmentDetail.setCreatedBy(maker); shipmentDetail.setMaterialSpec(item.getCComUnitName()); shipmentDetail.setLastUpdated(DateUtils.getNowDate()); shipmentDetail.setLastUpdatedBy(maker); shipmentDetail.setPoId(item.getPOID()); shipmentDetail.setPodId(item.getPODID()); shipmentDetail.setPoCode(item.getPOCode()); if (!item.getCompanyCode().equals(icsShipmentHeader.getCompanyCode())) { // documentWarningService.ErpSendWarning(code, "子单货主与主单不对应"); throw new ServiceException("子单货主与主单不对应"); } // shipmentDetail.setMoCode(item.getCDefine22()); shipmentDetail.setLot(item.getCDefine23()); shipmentDetail.setCompanyCode(companyCode); // shipmentDetail.setProjectNo(item.getCItemName()); shipmentDetail.setQty((item.getIQuantity()).abs()); shipmentDetail.setQtyCompleted(item.getIQuantity()); shipmentDetail.setInventorySts(QuantityConstant.GOOD); shipmentDetail.setSoCode(item.getCSOCode()); shipmentDetail.setSoId(item.getCSOID()); shipmentDetail.setSoAutoId(item.getCSOAutoID()); shipmentDetail.setBatch(""); shipmentDetails.add(shipmentDetail); } //调用公共API ShipmentDomain shipmentDomain = new ShipmentDomain(); shipmentDomain.setShipmentHeader(shipmentHeader); shipmentDomain.setShipmentDetails(shipmentDetails); domains.add(shipmentDomain); } AjaxResult ajaxResult = shipmentApiService.shipment(domains); if (!ajaxResult.hasErr() && !isFlag) { U8Reference reference = new U8Reference(); reference.setReferType(icsShipmentHeader.getType()); reference.setReferCode(icsShipmentHeader.getReferCode()); reference.setStock(icsShipmentHeader.getStock()); reference.setCompanyCode(companyWu.getCompanyCode()); reference.setWarehouseCode(currentWarehouseCode); reference.setTypeName(typeName); reference.setCreated(DateUtils.getNowDate()); u8ReferenceService.save(reference); } if (ajaxResult.hasErr()) { return ajaxResult; } String isNew = icsShipmentHeader.getIsNew(); if ("1".equals(isNew)) { return AjaxResult.success("出库单下发成功"); } else if ("0".equals(isNew)) { return AjaxResult.success("出库单更新成功"); } else { return ajaxResult; } } //wms-u8出库回传 /** * 出库单回传 * * @param url * @param status * @return */ @Transactional public AjaxResult shipmentReturn(String url, Integer status) { //找出所有首状态为1000的出库单 List<ShipmentHeader> shipmentHeaders = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>() .lt(ShipmentHeader::getFirstStatus, 1000)); //获取code集合 List<String> codeList = shipmentHeaders.stream().map(ShipmentHeader::getCode).collect(Collectors.toList()); //先找出处于完成状态的taskDetail List<TaskDetail> taskDetails = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>() .eq(TaskDetail::getStatus, status) .eq(TaskDetail::getInternalTaskType, QuantityConstant.SHIPMENT_CONTAINER_FINISHED) .in(TaskDetail::getBillCode, codeList)); if (taskDetails == null || taskDetails.size() < 1) { return AjaxResult.error("没有完成状态的子任务"); } Set<String> billCodes = new HashSet<>(); final List<String> collect = taskDetails.stream().map(t -> t.getBillCode()).distinct().collect(Collectors.toList()); for (TaskDetail taskDetail : taskDetails) { ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(new LambdaQueryWrapper<ShipmentHeader>() .eq(ShipmentHeader::getCode, taskDetail.getBillCode())); if (shipmentHeader == null) { continue; } if (shipmentHeader != null && shipmentHeader.getFirstStatus() == 1000) { continue; } shipmentHeader.setFirstStatus(1000); //更新状态为1000 shipmentHeaderService.updateById(shipmentHeader); //修改任务明细状态 taskDetail.setStatus(200); taskDetailService.updateById(taskDetail); } return AjaxResult.success(); } @Transactional public AjaxResult ConfirmShipment(TaskDetail taskDetail, String url, Integer status) { String currentWarehouseCode = taskDetail.getWarehouseCode(); AjaxResult ajaxResult = new AjaxResult(); //根据子任务查找主单 ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(new LambdaQueryWrapper<ShipmentHeader>() .eq(ShipmentHeader::getCode, taskDetail.getBillCode())); if (shipmentHeader == null) { taskDetail.setStatus(QuantityConstant.TASK_STATUS_REMOVE); taskDetailService.updateById(taskDetail); return AjaxResult.success("出库单已删除"); } //查找相同单号的状态为100的子任务 List<TaskDetail> taskDetails = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>() .eq(TaskDetail::getStatus, status) .eq(TaskDetail::getBillCode, shipmentHeader.getCode())); if (taskDetails == null || taskDetails.size() < 1) { return AjaxResult.success("已完成"); } //查找相同单号状态为10的子任务 List<TaskDetail> taskDetailList = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>() .eq(TaskDetail::getStatus, QuantityConstant.TASK_STATUS_RELEASE) .eq(TaskDetail::getBillCode, shipmentHeader.getCode())); if (taskDetailList != null && taskDetailList.size() > 0) { return AjaxResult.error("该单据还有任务未完成,请先完成该单据的任务"); } String type = shipmentHeader.getShipmentType(); String code = shipmentHeader.getReferCode(); if (!type.equals("PRO") && !type.equals("MO") && !type.equals("QO") && !type.equals("SO")) { for (TaskDetail item : taskDetails) { item.setStatus(110); taskDetailService.updateById(item); } if (shipmentHeader.getFirstStatus() == 300 && shipmentHeader.getLastStatus() == 300) { shipmentHeaderService.removeShipmentByHeaderId(shipmentHeader.getId()); } return AjaxResult.error("该子任务所属单据无需上传"); } //根据子任务查找子单 Set<String> uwarehouseCodes = new HashSet<>(); List<ShipmentDetail> shipmentDetails = new ArrayList<>(); Integer number = 0; for (TaskDetail item : taskDetails) { ShipmentDetail shipmentDetail = shipmentDetailService.getById(item.getBillDetailId()); if (shipmentDetails != null && shipmentDetails.size() > 0) { for (ShipmentDetail detail1 : shipmentDetails) { if (shipmentDetail.getId() == detail1.getId()) { detail1.setTaskQty(detail1.getTaskQty().add(item.getQty())); number = 1; break; } } } if (number == 0) { shipmentDetail.setTaskQty(item.getQty()); shipmentDetails.add(shipmentDetail); uwarehouseCodes.add(shipmentDetail.getUWarehouseCode()); } number = 0; } Iterator<String> iterator = uwarehouseCodes.iterator(); String uWarehouseCode = iterator.next(); CompanyU8 companyWu = companyU8Service.getOne(new LambdaQueryWrapper<CompanyU8>() .eq(CompanyU8::getCompanyCode, shipmentHeader.getCompanyCode())); boolean isSameDate = icsReceiptAPIService.isSameMonth(taskDetail.getLastUpdated()); if (isSameDate == false) { for (TaskDetail item : taskDetails) { item.setStatus(180); taskDetailService.updateById(item); } // documentWarningService.ErpReturnWarning(shipmentHeader.getCode(), shipmentHeader.getReferCode(), // "回传超时" + shipmentHeader.getUserDef2()); return AjaxResult.error("取消回传"); } List<ICSShipmentDetail> icsShipmentDetails = new ArrayList<ICSShipmentDetail>(); String dt = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS_S, taskDetail.getLastUpdated()); String userName = taskDetail.getLastUpdatedBy(); User user = new User(); user = userService.selectUserByLoginName(userName); if (user != null) { userName = user.getUserName(); } ICSShipmentHeader icsShipmentHeader = null; //出库类型为采购的主单和子单 switch (type) { case "PRO": icsShipmentHeader = icsShipmentHeaderService.getOne(new LambdaQueryWrapper<ICSShipmentHeader>() .eq(ICSShipmentHeader::getCCode, code) .eq(ICSShipmentHeader::getCompanyCode, companyWu.getUCompanyCode())); icsShipmentHeader.setDPODate(dt); icsShipmentHeader.setCWHCode(uWarehouseCode); icsShipmentHeader.setCMaker(userName); icsShipmentHeader.setID(shipmentHeader.getId()); icsShipmentHeader.setVoucherType("CreateICSRdRecord_01_Return"); //子单 for (ShipmentDetail item : shipmentDetails) { if (uWarehouseCode.equals(item.getUWarehouseCode())) { ICSShipmentDetail icsShipmentDetail = icsShipmentDetailService.getOne(new LambdaQueryWrapper<ICSShipmentDetail>() .eq(ICSShipmentDetail::getCCode, code) .eq(ICSShipmentDetail::getCompanyCode, companyWu.getUCompanyCode()) .eq(ICSShipmentDetail::getCInvCode, item.getMaterialCode())); icsShipmentDetail.setID(item.getId()); icsShipmentDetail.setIArrsId(icsShipmentDetail.getAutoID()); icsShipmentDetail.setIPOsID(icsShipmentDetail.getPODID()); icsShipmentDetail.setIQuantity(item.getQtyCompleted().negate()); icsShipmentDetails.add(icsShipmentDetail); } } break; case "MO": icsShipmentHeader.setVoucherType("UpdateICSRdRecord_11_Confirm"); case "QO": //出库类型为材料或其他的主单和子单 icsShipmentHeader = icsShipmentHeaderService.getOne(new LambdaQueryWrapper<ICSShipmentHeader>() .eq(ICSShipmentHeader::getCCode, code) .eq(ICSShipmentHeader::getCWHCode, shipmentHeader.getUWarehouseCode()) .eq(ICSShipmentHeader::getCompanyCode, companyWu.getUCompanyCode())); icsShipmentHeader.setDDate(dt); icsShipmentHeader.setCMaker(userName); icsShipmentHeader.setVoucherType("UpdateICSRdRecord_09_Confirm"); for (ShipmentDetail item : shipmentDetails) { ICSShipmentDetail icsShipmentDetailA = icsShipmentDetailService.getOne(new LambdaQueryWrapper<ICSShipmentDetail>() .eq(ICSShipmentDetail::getCCode, code) .eq(ICSShipmentDetail::getCompanyCode, companyWu.getUCompanyCode()) .eq(ICSShipmentDetail::getAutoID, item.getAutoId())); icsShipmentDetailA.setIQuantity(item.getTaskQty()); icsShipmentDetails.add(icsShipmentDetailA); } break; case "SO": icsShipmentHeader = icsShipmentHeaderService.getOne(new LambdaQueryWrapper<ICSShipmentHeader>() .eq(ICSShipmentHeader::getCDLCode, code) .eq(ICSShipmentHeader::getCompanyCode, companyWu.getUCompanyCode())); icsShipmentHeader.setDDate(dt); icsShipmentHeader.setCMaker(userName); icsShipmentHeader.setCWHCode(shipmentHeader.getUWarehouseCode()); WarehouseU8 warehouseU8 = warehouseU8Service.getOne(new LambdaQueryWrapper<WarehouseU8>() .eq(WarehouseU8::getUWarehouseCode, shipmentHeader.getUWarehouseCode()) .eq(WarehouseU8::getUCompanyCode, companyWu.getUCompanyCode())); icsShipmentHeader.setCWHName(warehouseU8.getUWarehouseName()); icsShipmentHeader.setCCode(shipmentHeader.getSourceCode()); icsShipmentHeader.setVoucherType("CreateICSRdRecord_32"); icsShipmentHeader.setID(icsShipmentHeader.getDLID()); for (ShipmentDetail item : shipmentDetails) { ICSShipmentDetail icsShipmentDetailB = icsShipmentDetailService.getOne(new LambdaQueryWrapper<ICSShipmentDetail>() .eq(ICSShipmentDetail::getCCode, code) .eq(ICSShipmentDetail::getCompanyCode, companyWu.getUCompanyCode()) .eq(ICSShipmentDetail::getCInvCode, item.getMaterialCode()) .eq(ICSShipmentDetail::getAutoID, item.getAutoId())); icsShipmentDetailB.setCCode(code); icsShipmentDetailB.setID(icsShipmentDetailB.getDLID()); icsShipmentDetailB.setAutoID(icsShipmentDetailB.getAutoID()); icsShipmentDetailB.setIQuantity(item.getTaskQty()); icsShipmentDetails.add(icsShipmentDetailB); } break; } if (type.equals("MO")) { icsShipmentHeader.setVoucherType("UpdateICSRdRecord_11_Confirm"); } if (type.equals("QO")) { icsShipmentHeader.setVoucherType("UpdateICSRdRecord_09_Confirm"); } ICSShipmentModel model = new ICSShipmentModel(); model.setIcsShipmentHeader(icsShipmentHeader); model.setIcsShipmentDetails(icsShipmentDetails); String JsonParam = JSON.toJSONString(model); String result = HttpUtils.bodypost(url, JsonParam, currentWarehouseCode); if (StringUtils.isEmpty(result)) { throw new ServiceException("接口地址错误或服务器连接不到或返回为空"); } ajaxResult = JSON.parseObject(result, AjaxResult.class); if (ajaxResult.getCode() == 200 || ajaxResult.getCode() == 400) { if (shipmentHeader.getShipmentType().equals(QuantityConstant.U8_SHIPMENT_TYPE_SO) || shipmentHeader.getShipmentType().equals(QuantityConstant.U8_SHIPMENT_TYPE_PRO)) { shipmentHeader.setUserDef2(ajaxResult.getMsg()); shipmentHeaderService.updateById(shipmentHeader); } for (TaskDetail item : taskDetails) { item.setStatus(120); taskDetailService.updateById(item); } /** * 生成快递单 * 1、U8返回值为200 * 2、wms出库单快递信息存在 * 3、存在就生成快递单 * */ // if(ajaxResult.getCode() == 200 && shipmentHeader.getKdEable() == 1){ // AjaxResult ajaxResult1 = kuaidiHeaderService.saveKD(shipmentDetails,shipmentHeader,ajaxResult.getMsg()); // } if (ajaxResult.getCode() == 400) { // documentWarningService.ErpReturnWarning(shipmentHeader.getCode(), shipmentHeader.getSourceCode(), ajaxResult.getMsg()); } if (shipmentHeader.getFirstStatus() == QuantityConstant.SHIPMENT_HEADER_GROUPDISK && shipmentHeader.getLastStatus() != QuantityConstant.SHIPMENT_HEADER_GROUPDISK) { shipmentHeader.setUploadStatus(15); shipmentHeaderService.updateById(shipmentHeader); } TaskDetail condition = new TaskDetail(); condition.setBillCode(shipmentHeader.getCode()); //select * from task_detail where billCode = #{billCode} and billId = #{billId} and (status <= 100 or status = 150 or status= 160) LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(TaskDetail::getBillCode, shipmentHeader.getCode()) .lt(TaskDetail::getStatus, QuantityConstant.TASK_STATUS_COMPLETED) .or() .eq(TaskDetail::getStatus, QuantityConstant.TASK_STATUS_COMPLETED) .or() .eq(TaskDetail::getStatus, 150) .or() .eq(TaskDetail::getStatus, 160); List<TaskDetail> taskDetails1 = taskDetailService.list(queryWrapper); if (shipmentHeader.getFirstStatus() == QuantityConstant.SHIPMENT_HEADER_GROUPDISK && shipmentHeader.getLastStatus() == QuantityConstant.SHIPMENT_HEADER_GROUPDISK && taskDetails1.isEmpty()) { shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RETURN); shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RETURN); shipmentHeader.setUploadStatus(20); shipmentHeaderService.updateById(shipmentHeader); } } if (ajaxResult.getCode() == 300) { shipmentHeader.setUserDef2(ajaxResult.getMsg()); shipmentHeaderService.updateById(shipmentHeader); for (TaskDetail item : taskDetails) { item.setStatus(160); taskDetailService.updateById(item); } } return ajaxResult; } /** * 判断出库单是否可以更新 * * @param code U8单号 */ private void checkShipmentBill(boolean isFlag, String code, String type, String warehouseCode) { //U8单据类型 LambdaQueryWrapper<ShipmentHeader> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(ShipmentHeader::getReferCode, code) .eq(ShipmentHeader::getShipmentType, type) .eq(ShipmentHeader::getWarehouseCode, warehouseCode); ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(queryWrapper); //WMS出库单 和 U8出库单 都不能为空 才能更新 if (isFlag) { if (shipmentHeader != null) { if (StringUtils.isNotNull(shipmentHeader)) { //找出 出库单未完成的任务 List<TaskDetail> taskDetailList = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>() .eq(TaskDetail::getBillCode, shipmentHeader.getCode()) .eq(TaskDetail::getWarehouseCode, shipmentHeader.getWarehouseCode()) .le(TaskDetail::getStatus, 100)); if (taskDetailList != null && taskDetailList.size() > 0) { throw new ServiceException("更新失敗,此出库单存在任务"); } //找出库配盘明细 未配盘的单据 List<ShipmentContainerDetail> shipmentContainerDetails = shipmentContainerDetailService.list(new LambdaQueryWrapper<ShipmentContainerDetail>() .eq(ShipmentContainerDetail::getShipmentCode, shipmentHeader.getCode()) .eq(ShipmentContainerDetail::getWarehouseCode, shipmentHeader.getWarehouseCode()) .le(ShipmentContainerDetail::getStatus, QuantityConstant.SHIPMENT_CONTAINER_FINISHED)); if (shipmentContainerDetails != null && shipmentContainerDetails.size() > 0) { throw new ServiceException("更新失敗,此出库单已组盘"); } //删除wms出库单头表 shipmentHeaderService.removeById(shipmentHeader.getId()); //删除wms出库单明细表 shipmentDetailService.remove(new LambdaQueryWrapper<ShipmentDetail>() .eq(ShipmentDetail::getShipmentCode, shipmentHeader.getCode()) .eq(ShipmentDetail::getWarehouseCode, shipmentHeader.getWarehouseCode())); } } ICSShipmentHeader icsShipmentHeader = icsShipmentHeaderService.getOne(new LambdaQueryWrapper<ICSShipmentHeader>() .eq(ICSShipmentHeader::getReferCode, code) .eq(ICSShipmentHeader::getWarehouseCode, warehouseCode) .eq(ICSShipmentHeader::getType, type)); if (icsShipmentHeader != null) { icsShipmentHeaderService.removeById(icsShipmentHeader.getSId()); icsShipmentDetailService.remove(new LambdaQueryWrapper<ICSShipmentDetail>() .eq(ICSShipmentDetail::getHeaderId, icsShipmentHeader.getSId())); } } } private ICSShipmentModel assign(ICSShipmentModel icsShipmentModel) { ICSShipmentHeader header = icsShipmentModel.getIcsShipmentHeader(); List<ICSShipmentDetail> details = icsShipmentModel.getIcsShipmentDetails(); String type = header.getType(); Date created = null; if (header.getDDate() != null) { try { created = DateUtils.parseDate(header.getDDate(), DateUtils.YYYY_MM_DD_HH_MM_SS); } catch (ParseException e) { e.printStackTrace(); } } switch (type) { case "MO": header.setReferId(header.getID()); header.setReferCode(header.getCCode()); header.setCreated(created); header.setStock(header.getCWHCode()); for (ICSShipmentDetail detail : details) { detail.setReferId(detail.getAutoID()); detail.setReferCode(detail.getPOCode()); } break; case "SO": header.setReferId(header.getDLID()); header.setReferCode(header.getCDLCode()); try { header.setCreated(DateUtils.parseDate(header.getDPODate(), DateUtils.YYYY_MM_DD_HH_MM_SS_S)); } catch (ParseException e) { e.printStackTrace(); } String stock = ""; stock = header.getCWHCode(); for (ICSShipmentDetail detail : details) { detail.setReferId(detail.getAutoID()); detail.setReferCode(detail.getPOCode()); if (StringUtils.isEmpty(stock)) { stock = detail.getCWHCode(); } } header.setStock(stock); break; case "OO": header.setIsFlag(false); header.setStock("20"); header.setCreated(created); header.setReferId(header.getMoId()); header.setReferCode(header.getMoCode()); for (ICSShipmentDetail detail : details) { detail.setCWHCode("20"); detail.setReferId(detail.getMoDId()); detail.setAutoID(detail.getMoDId()); } break; case "PRO": try { header.setCreated(DateUtils.parseDate(header.getDPODate(), DateUtils.YYYY_MM_DD_HH_MM_SS_S)); } catch (ParseException e) { e.printStackTrace(); } header.setReferId(header.getID()); header.setReferCode(header.getCCode()); String stock1 = ""; for (ICSShipmentDetail detail : details) { stock1 = detail.getCWHCode(); detail.setPOCode(detail.getPOCode()); detail.setPODID(detail.getPODID()); detail.setPOID(detail.getPOID()); } header.setStock(stock1); header.setCWHCode(stock1); break; } icsShipmentModel.setIcsShipmentHeader(header); icsShipmentModel.setIcsShipmentDetails(details); return icsShipmentModel; } private String getShipmentTypeName(String code) { String typeName = ""; switch (code) { case "MO": typeName = "生产领料"; break; case "SO": typeName = "普通销售"; break; case "OO": typeName = "生产订单"; break; } return typeName; } /** * 其他出库单/调拨出库单 * * @param icsShipmentModel * @return * @throws ParseException */ @Transactional(rollbackFor = Exception.class) public AjaxResult otherShipment(ICSShipmentModel icsShipmentModel){ //校验null checkOtherShipmentNull(icsShipmentModel); ICSShipmentHeader icsShipmentHeader = icsShipmentModel.getIcsShipmentHeader(); List<ICSShipmentDetail> icsShipmentDetails = icsShipmentModel.getIcsShipmentDetails(); String shipmentHeaderType = icsShipmentHeader.getType(); String warehouseCode = icsShipmentHeader.getWarehouseCode(); String whCode = null; String referCode = null; String companyCode = null; String u8CompanyCode = icsShipmentHeader.getCompanyCode(); Date created = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,icsShipmentHeader.getDDate()); String createdBy = icsShipmentHeader.getCMaker(); String shipmentNote = icsShipmentHeader.getCMemo(); Integer referHeaderId = icsShipmentHeader.getID(); BigDecimal totalQty = BigDecimal.ZERO; int totalLines = BigDecimal.ZERO.intValue(); switch (icsShipmentHeader.getType()){ case "TO": // 调拨其他出库单 whCode = icsShipmentHeader.getOWHCode(); referCode = icsShipmentHeader.getCTVCode(); break; case "QO": //其他出库单 whCode = icsShipmentHeader.getCWHCode(); referCode = icsShipmentHeader.getCCode(); break; default: } ShipmentHeader shipmentHeader = new ShipmentHeader(); List<ShipmentDetail> shipmentDetails = new ArrayList<>(); WarehouseU8 warehouseU8 = warehouseU8Service.getWarehouseU8ByUCompanyUWarehouseCode(u8CompanyCode,whCode,warehouseCode); if(warehouseU8 == null){ throw new ServiceException("未找到库房代码:"+whCode); } companyCode = warehouseU8.getCompanyCode(); shipmentHeader.setReferCode(referCode); shipmentHeader.setReferId(referHeaderId); shipmentHeader.setShipmentType(shipmentHeaderType); shipmentHeader.setWarehouseCode(icsShipmentHeader.getWarehouseCode()); shipmentHeader.setUWarehouseCode(warehouseU8.getUWarehouseCode()); shipmentHeader.setCompanyCode(companyCode); shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); shipmentHeader.setCreated(created); shipmentHeader.setCreatedBy(createdBy); shipmentHeader.setShipmentNote(shipmentNote); for (ICSShipmentDetail icsShipmentDetail : icsShipmentDetails) { ShipmentDetail shipmentDetail = new ShipmentDetail(); shipmentDetail.setReferId(icsShipmentDetail.getID()); //其他出库单/调拨单 子表id shipmentDetail.setAutoId(icsShipmentDetail.getAutoID()); if("TO".equals(icsShipmentHeader.getType())){ shipmentDetail.setAutoId(icsShipmentDetail.getITrIds()); } shipmentDetail.setProjectNo(icsShipmentDetail.getCItemName()); shipmentDetail.setProcessStamp(QuantityConstant.RECEIPT_HEADER_BUILD.toString()); shipmentDetail.setWarehouseCode(warehouseCode); shipmentDetail.setUWarehouseCode(whCode); shipmentDetail.setCompanyCode(companyCode); shipmentDetail.setInventorySts(QuantityConstant.GOOD); shipmentDetail.setCreatedBy(createdBy); shipmentDetail.setCreated(created); Material material = materialService.getMaterialByCode(icsShipmentDetail.getCInvCode(), warehouseCode); if(material == null){ throw new ServiceException("物料编码未找到"+icsShipmentDetail.getCInvCode()); } shipmentDetail.setMaterialCode(material.getCode()); shipmentDetail.setMaterialName(material.getName()); shipmentDetail.setMaterialSpec(material.getSpec()); shipmentDetail.setMaterialUnit(material.getUnit()); BigDecimal qty = icsShipmentDetail.getIQuantity(); totalQty = totalQty.add(qty); shipmentDetail.setQty(qty); totalLines += 1; shipmentDetails.add(shipmentDetail); } shipmentHeader.setTotalQty(totalQty); shipmentHeader.setTotalLines(totalLines); ShipmentDomain shipmentDomain = new ShipmentDomain(); shipmentDomain.setShipmentHeader(shipmentHeader); shipmentDomain.setShipmentDetails(shipmentDetails); AjaxResult result = shipmentApiService.shipment(shipmentDomain); if(result.hasErr()){ throw new ServiceException(result.getMsg()); } if("0".equals(icsShipmentHeader.getIsNew())){ return AjaxResult.success("出库单更新成功"); } return AjaxResult.success("出库单下发成功"); } public void checkOtherShipmentNull(ICSShipmentModel icsShipmentModel){ ICSShipmentHeader icsShipmentHeader = icsShipmentModel.getIcsShipmentHeader(); List<ICSShipmentDetail> icsShipmentDetails = icsShipmentModel.getIcsShipmentDetails(); String type = icsShipmentHeader.getType(); String currentWarehouseCode = icsShipmentHeader.getWarehouseCode(); if (StringUtils.isEmpty(currentWarehouseCode)) { throw new ServiceException("仓库编码warehouseCode:不能为空"); } if(StringUtils.isEmpty(icsShipmentHeader.getCompanyCode())){ throw new ServiceException("公司账套CompanyCode 不能为空"); } if(StringUtils.isEmpty(type) || shipmentTypeCheck(type)){ throw new ServiceException("出库库类型不存在"); } if (StringUtils.isEmpty(icsShipmentHeader.getIsNew())) { throw new ServiceException("isNew为空"); } String referCode = null; Integer referId = icsShipmentHeader.getID(); String dDateStr = icsShipmentHeader.getDDate(); String whCode = null; String busTypeName = getShipmentTypeName(type); switch (type){ case "TO": // whCode = icsShipmentHeader.getOWHCode(); referCode = icsShipmentHeader.getCTVCode(); break; case "QO": //其他出库单 whCode = icsShipmentHeader.getCWHCode(); referCode = icsShipmentHeader.getCCode(); break; default: } if(StringUtils.isEmpty(referCode)){ throw new ServiceException(busTypeName + "业务Code 不能为空:"+referCode); } if(StringUtils.isNull(referId)){ throw new ServiceException(busTypeName + "业务ID 不能为空:"+referId); } if(StringUtils.isEmpty(dDateStr)){ throw new ServiceException(busTypeName + "业务入库日期 不能为空:"+dDateStr); } if(StringUtils.isEmpty(whCode)){ throw new ServiceException(busTypeName + "业务入库库房代码 不能为空:"+whCode); } boolean isUpdate = "0".equals(icsShipmentHeader.getIsNew()) ? true : false; Warehouse warehouse = warehouseService.getOne(new LambdaQueryWrapper<Warehouse>() .eq(Warehouse::getCode, currentWarehouseCode)); if (warehouse == null) { throw new ServiceException("WMS系统中没有仓库编号:【" + currentWarehouseCode + "】的仓库。"); } //u8关联表 检查上游单号是否重复 U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferCode, referCode) .eq(U8Reference::getReferType, type) .eq(U8Reference::getWarehouseCode, currentWarehouseCode)); //入库单表 检查上游单号是否重复 ShipmentHeader shipmentHeader1 = shipmentHeaderService.getOne(new LambdaQueryWrapper<ShipmentHeader>() .eq(ShipmentHeader::getReferCode, referCode) .eq(ShipmentHeader::getWarehouseCode, currentWarehouseCode) .last("LIMIT 1")); if (one != null && !isUpdate && shipmentHeader1 != null) { throw new ServiceException(busTypeName + ":请不要重复下发 " + referCode); } U8Reference u8Reference = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferType, icsShipmentHeader.getType()) .eq(U8Reference::getReferCode, referCode) .eq(U8Reference::getWarehouseCode, currentWarehouseCode) .last(" LIMIT 1")); if(u8Reference == null){ U8Reference reference = new U8Reference(); reference.setReferType(icsShipmentHeader.getType()); reference.setReferCode(referCode); reference.setWarehouseCode(currentWarehouseCode); reference.setTypeName(busTypeName); reference.setCreated(DateUtils.getNowDate()); u8ReferenceService.save(reference); } } private boolean shipmentTypeCheck(String code) { switch (code) { case "TO": case "QO": return false; default: return true; } } }