package com.huaheng.pc.u8.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.huaheng.api.general.domain.ReceiptDomain; import com.huaheng.api.general.service.ReceiptApiService; 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.http.HttpUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.address.service.AddressService; 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.receipt.receiptContainerDetail.domain.ReceiptContainerDetail; import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService; import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; import com.huaheng.pc.referenceCode.domain.U8Reference; import com.huaheng.pc.referenceCode.service.U8ReferenceService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; import com.huaheng.pc.u8.domain.ICSReceiptDetail; import com.huaheng.pc.u8.domain.ICSReceiptHeader; import com.huaheng.pc.u8.domain.ICSReceiptModel; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.ParseException; import java.util.*; import java.util.stream.Collectors; /** * u8-wms入库下发或回传接口服务层 * * @author huaheng * @date 2019-1-4 */ @Service public class ICSReceiptAPIService { @Resource private WarehouseU8Service warehouseU8Service; @Resource private WarehouseService warehouseService; @Resource private CompanyService companyService; @Resource private IDocumentWarningService documentWarningService; @Resource private ICSReceiptHeaderService icsReceiptHeaderService; @Resource private ICSReceiptDetailService icsReceiptDetailService; @Resource private ReceiptHeaderService receiptHeaderService; @Resource private ReceiptDetailService receiptDetailService; @Resource private ReceiptContainerHeaderService receiptContainerHeaderService; @Resource private ReceiptContainerDetailService receiptContainerDetailService; @Resource private TaskHeaderService taskHeaderService; @Resource private TaskDetailService taskDetailService; @Resource private MaterialService materialService; @Resource private ReceiptApiService receiptApiService; @Resource private CompanyU8Service companyU8Service; @Resource private AddressService addressService; @Resource private U8ReferenceService u8ReferenceService; //入库单下发 //采购入库 @Transactional public AjaxResult procureReceipt(@RequestBody ICSReceiptModel icsReceiptModel) { icsReceiptModel = assign(icsReceiptModel); ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader(); List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails(); //是否更新 if (StringUtils.isEmpty(icsReceiptHeader.getIsNew())) { return AjaxResult.error("isNew为空"); } boolean isFlag = "0".equals(icsReceiptHeader.getIsNew()) ? true : false; //仓库编码 String currentWarehouseCode = icsReceiptHeader.getWarehouseCode(); if (StringUtils.isEmpty(currentWarehouseCode)) { return AjaxResult.error("仓库编码warehouseCode:不能为空"); } //入库类型 String type = icsReceiptHeader.getType(); if (receiptTypeCheck(type)) { return AjaxResult.error("入库类型不匹配"); } String typeName = getReceiptTypeName(type); String stock = icsReceiptHeader.getStock(); //U8companyCode String U8CompanyCode = icsReceiptHeader.getCompanyCode(); //判断U8货主 CompanyU8 companyU8 = companyU8Service.getCompanyByU8CodeWarehouseCode(U8CompanyCode, currentWarehouseCode); if (companyU8 == null) { return AjaxResult.error("系统没有此货主:【" + U8CompanyCode + "】"); } companyService.checkwarehouseCompany(companyU8.getCompanyCode()); //判断U8仓库 if (!StringUtils.isEmpty(stock)) { LambdaQueryWrapper<WarehouseU8> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(WarehouseU8::getUCompanyCode, icsReceiptHeader.getCompanyCode()) .eq(WarehouseU8::getUWarehouseCode, stock); WarehouseU8 one = warehouseU8Service.getOne(queryWrapper); if (one == null) { return AjaxResult.error("系统没有此仓库:【" + stock + "】"); } } //u8关联表 检查上游单号是否重复 U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferCode, icsReceiptHeader.getReferCode()) .eq(U8Reference::getReferType, icsReceiptHeader.getType()) .eq(U8Reference::getWarehouseCode, currentWarehouseCode)); //入库单表 检查上游单号是否重复 ReceiptHeader receiptHeader1 = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>() .eq(ReceiptHeader::getReferCode, icsReceiptHeader.getReferCode()) .eq(ReceiptHeader::getWarehouseCode, icsReceiptHeader.getWarehouseCode())); if (one != null && !isFlag && receiptHeader1 != null) { return AjaxResult.error(typeName + ":请不要重复下发 " + icsReceiptHeader.getReferCode()); } //判断是否更新 checkReceiptBill(isFlag, icsReceiptHeader.getReferCode(), icsReceiptHeader.getType(), currentWarehouseCode); boolean save = icsReceiptHeaderService.save(icsReceiptHeader); if (!save) { throw new ServiceException("下发失败"); } for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) { icsReceiptDetail.setHeaderId(icsReceiptHeader.getRid()); } save = icsReceiptDetailService.saveBatch(icsReceiptDetails); if (!save) { throw new ServiceException("下发失败"); } //根据icsReceiptHeader生成receiptHeader ReceiptHeader receiptHeader = new ReceiptHeader(); String maker = icsReceiptHeader.getCMaker(); receiptHeader.setReceiptType(type); receiptHeader.setReferId(icsReceiptHeader.getReferId()); receiptHeader.setCreatedBy(maker); receiptHeader.setUWarehouseCode(icsReceiptHeader.getStock()); receiptHeader.setCreated(icsReceiptHeader.getCreated()); receiptHeader.setTypeName(icsReceiptHeader.getCBusType()); receiptHeader.setDeptCode(icsReceiptHeader.getCDepCode()); receiptHeader.setCDeptName(icsReceiptHeader.getCDepName()); receiptHeader.setReceiptNote(icsReceiptHeader.getCMemo()); receiptHeader.setSupplierCode(icsReceiptHeader.getCVenCode()); receiptHeader.setWarehouseCode(currentWarehouseCode); receiptHeader.setReferCode(icsReceiptHeader.getReferCode()); receiptHeader.setCompanyCode(companyU8.getCompanyCode()); //根据icsShipmentDetail生成shipmentAetail List<ReceiptDetail> receiptDetails = new ArrayList<ReceiptDetail>(); for (ICSReceiptDetail item : icsReceiptDetails) { //查找物料 LambdaQueryWrapper<Material> queryWrapper1 = Wrappers.lambdaQuery(); queryWrapper1.eq(Material::getCode, item.getCInvCode()) .eq(Material::getWarehouseCode, currentWarehouseCode); Material material = materialService.getOne(queryWrapper1); if (material == null) { // documentWarningService.ErpSendWarning(receiptHeader.getReferCode(), "该物料不存在:" + item.getCInvCode()); throw new ServiceException("该物料不存在:" + item.getCInvCode()); } ReceiptDetail receiptDetail = new ReceiptDetail(); receiptDetail.setAutoId(item.getAutoID()); receiptDetail.setReferId(item.getReferId()); if (icsReceiptHeader.getType().equals("TI")) { receiptDetail.setAutoId(item.getITrIds()); } receiptDetail.setReferCode(receiptHeader.getReferCode()); receiptDetail.setMoCode(item.getMoCode()); if (StringUtils.isNotEmpty(item.getCDefine22())) { Boolean flag = StringUtils.isChineseChar(item.getCDefine22()); if ((item.getCDefine22().length() == 19 || item.getCDefine22().length() == 22) && flag == false) { receiptDetail.setMoCode(item.getCDefine22()); } else { receiptDetail.setBatch(item.getCDefine22()); } } // receiptDetail.setLot(item.getCDefine23()); // receiptDetail.setProjectNo(item.getCDefine23()); receiptDetail.setUWarehouseCode(receiptHeader.getUWarehouseCode()); receiptDetail.setWarehouseCode(currentWarehouseCode); receiptDetail.setMaterialCode(item.getCInvCode()); receiptDetail.setZoneCode(material.getZoneCode()); receiptDetail.setCreated(icsReceiptHeader.getCreated()); receiptDetail.setMaterialUnit(item.getCComUnitName()); receiptDetail.setCreatedBy(maker); receiptDetail.setCompanyCode(companyU8.getCompanyCode()); receiptDetail.setProjectNo(item.getCItemName()); receiptDetail.setQty(item.getIQuantity().abs()); receiptDetail.setInventorySts(QuantityConstant.GOOD); if (item.getIrowno() != null && StringUtils.isNotEmpty(item.getIrowno().toString())) { receiptDetail.setReferLineNum(item.getIrowno().toString()); } receiptDetails.add(receiptDetail); } //调用公共API ReceiptDomain receiptDomain = new ReceiptDomain(); receiptDomain.setReceiptHeader(receiptHeader); receiptDomain.setReceiptDetails(receiptDetails); AjaxResult ajaxResult = receiptApiService.receipt(receiptDomain); if (!ajaxResult.hasErr() && !isFlag) { U8Reference reference = new U8Reference(); reference.setReferType(icsReceiptHeader.getType()); reference.setReferCode(icsReceiptHeader.getReferCode()); reference.setStock(stock); reference.setCompanyCode(companyU8.getCompanyCode()); reference.setWarehouseCode(currentWarehouseCode); reference.setTypeName(typeName); reference.setCreated(DateUtils.getNowDate()); u8ReferenceService.save(reference); } if (ajaxResult.getCode() == 200 && !isFlag) { return AjaxResult.success("入库单下发成功"); } else if (ajaxResult.getCode() == 200 && isFlag) { return AjaxResult.success("入库单更新成功"); } else { return ajaxResult; } } /** * 采购到货 or 退货入库 * 采购到货单 | 销售退货入库单 * * @param icsReceiptModel * @return * @throws ParseException */ @Transactional public AjaxResult procureArrive(ICSReceiptModel icsReceiptModel) { icsReceiptModel = assign(icsReceiptModel); ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader(); List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails(); //是否更新 if (StringUtils.isEmpty(icsReceiptHeader.getIsNew())) { return AjaxResult.error("isNew为空"); } boolean isUpdate = "0".equals(icsReceiptHeader.getIsNew()) ? true : false; String currentWarehouseCode = icsReceiptHeader.getWarehouseCode(); if (StringUtils.isEmpty(currentWarehouseCode)) { return AjaxResult.error("仓库编码warehouseCode:不能为空"); } Warehouse warehouse = warehouseService.getOne(new LambdaQueryWrapper<Warehouse>() .eq(Warehouse::getCode, currentWarehouseCode)); if (warehouse == null) { return AjaxResult.error("本系统中没有编号:【" + currentWarehouseCode + "】的仓库。"); } //入库类型 String type = icsReceiptHeader.getType(); if (receiptTypeCheck(type)) { return AjaxResult.error("入库类型不匹配"); } String typeName = getReceiptTypeName(type); //u8关联表 检查上游单号是否重复 U8Reference one = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferCode, icsReceiptHeader.getReferCode()) .eq(U8Reference::getReferType, icsReceiptHeader.getType()) .eq(U8Reference::getWarehouseCode, currentWarehouseCode)); //入库单表 检查上游单号是否重复 ReceiptHeader receiptHeader1 = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>() .eq(ReceiptHeader::getReferCode, icsReceiptHeader.getReferCode()) .eq(ReceiptHeader::getWarehouseCode, icsReceiptHeader.getWarehouseCode()) .last("LIMIT 1")); if (one != null && !isUpdate && receiptHeader1 != null) { return AjaxResult.error(typeName + ":请不要重复下发 " + icsReceiptHeader.getReferCode()); } // checkReceiptBill(isUpdate, icsReceiptHeader.getReferCode(),icsReceiptHeader.getType(),currentWarehouseCode); // boolean save = icsReceiptHeaderService.save(icsReceiptHeader); // if(!save){ // throw new ServiceException("下发失败"); // } // for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) { // icsReceiptDetail.setHeaderId(icsReceiptHeader.getRid()); // } // save = icsReceiptDetailService.saveBatch(icsReceiptDetails); // if(!save){ // throw new ServiceException("下发失败"); // } String maker = icsReceiptHeader.getCMaker(); CompanyU8 companyU81 = companyU8Service.getCompanyByU8CodeWarehouseCode(icsReceiptHeader.getCompanyCode(), currentWarehouseCode); Set<String> cwhcodes = icsReceiptDetails.stream().map(ICSReceiptDetail::getCWHCode).collect(Collectors.toSet()); List<ReceiptDomain> domains = new ArrayList<>(); for (String cwhcode : cwhcodes) { ReceiptHeader receiptHeader = new ReceiptHeader(); receiptHeader.setReferId(icsReceiptHeader.getReferId()); receiptHeader.setReceiptType(icsReceiptHeader.getType()); receiptHeader.setCreatedBy(maker); receiptHeader.setUWarehouseCode(cwhcode); receiptHeader.setCreated(icsReceiptHeader.getCreated()); receiptHeader.setReferCode(icsReceiptHeader.getReferCode()); receiptHeader.setSupplierCode(icsReceiptHeader.getCVenCode()); receiptHeader.setSupplierName(icsReceiptHeader.getCVenName()); receiptHeader.setWarehouseCode(companyU81.getWarehouseCode()); receiptHeader.setCompanyCode(companyU81.getCompanyCode()); receiptHeader.setCustomerCode(icsReceiptHeader.getCCusCode()); receiptHeader.setDeptCode(icsReceiptHeader.getCDepCode()); receiptHeader.setCDeptName(icsReceiptHeader.getCDepName()); receiptHeader.setPersonCode(icsReceiptHeader.getCPersonCode()); List<ReceiptDetail> receiptDetails = new ArrayList<>(); for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) { if (!cwhcode.equals(icsReceiptDetail.getCWHCode())) { continue; } ReceiptDetail receiptDetail = new ReceiptDetail(); if (!StringUtils.isEmpty(icsReceiptDetail.getCWHCode())) { WarehouseU8 warehouseU8 = warehouseU8Service.getOne(new LambdaQueryWrapper<WarehouseU8>() .eq(WarehouseU8::getWarehouseCode, currentWarehouseCode) .eq(WarehouseU8::getUWarehouseCode, icsReceiptDetail.getCWHCode()) .eq(WarehouseU8::getUCompanyCode, icsReceiptDetail.getCompanyCode())); if (warehouseU8 == null) { return AjaxResult.error(icsReceiptDetail.getCompanyCode() + "::" + icsReceiptDetail.getCWHCode() + ",找不到对应的u8仓库"); } receiptDetail.setUWarehouseCode(warehouseU8.getUWarehouseCode()); } receiptDetail.setLot(icsReceiptDetail.getCDefine23()); receiptDetail.setReferCode(icsReceiptDetail.getReferCode()); receiptDetail.setSoCode(icsReceiptDetail.getCSOCode()); receiptDetail.setSoId(icsReceiptDetail.getCSOID()); receiptDetail.setSoAutoId(icsReceiptDetail.getCSOAutoID()); receiptDetail.setReferId(icsReceiptDetail.getReferId()); receiptDetail.setAutoId(icsReceiptDetail.getAutoID()); if (icsReceiptDetail.getIrowno() != null && StringUtils.isNotEmpty(icsReceiptDetail.getIrowno().toString())) { receiptDetail.setReferLineNum(icsReceiptDetail.getIrowno().toString()); } if (StringUtils.isNotEmpty(icsReceiptDetail.getCDefine22())) { Boolean flag = StringUtils.isChineseChar(icsReceiptDetail.getCDefine22()); if ((icsReceiptDetail.getCDefine22().length() == 19 || icsReceiptDetail.getCDefine22().length() == 22) && flag == false) { receiptDetail.setMoCode(icsReceiptDetail.getCDefine22()); } else { receiptDetail.setBatch(icsReceiptDetail.getCDefine22()); } } receiptDetail.setWarehouseCode(currentWarehouseCode); receiptDetail.setMaterialCode(icsReceiptDetail.getCInvCode()); receiptDetail.setCreated(icsReceiptHeader.getCreated()); receiptDetail.setMaterialUnit(icsReceiptDetail.getCComUnitName()); receiptDetail.setCreatedBy(maker); if (icsReceiptHeader.getType().equals("SRI")) { receiptDetail.setCPoCode(icsReceiptDetail.getCSOCode()); } else { receiptDetail.setCPoCode(icsReceiptDetail.getPOCode()); } receiptDetail.setCompanyCode(companyU81.getCompanyCode()); receiptDetail.setProjectNo(icsReceiptDetail.getCItemName()); receiptDetail.setQty(icsReceiptDetail.getIQuantity().abs()); receiptDetail.setInventorySts(QuantityConstant.GOOD); receiptDetails.add(receiptDetail); if (icsReceiptDetail.getMoCode() != null) { try { JSONObject json = new JSONObject(); json.put("code", icsReceiptHeader); json.put("materialCode", icsReceiptDetail.getCInvCode().trim()); json.put("workNo", icsReceiptDetail.getMoCode().trim()); json.put("status", "1"); String JsonParam = JSON.toJSONString(json); System.out.println(JsonParam); //调用mms更改采购状态 if (currentWarehouseCode.equals("CS0001")) { String url = addressService.selectAddress("mms", currentWarehouseCode); String result2 = HttpUtils.bodypost(url, JsonParam, currentWarehouseCode); } } catch (Exception e) { e.printStackTrace(); } } } //调用公共API ReceiptDomain receiptModel = new ReceiptDomain(); receiptModel.setReceiptHeader(receiptHeader); receiptModel.setReceiptDetails(receiptDetails); domains.add(receiptModel); } AjaxResult ajaxResult = receiptApiService.receipt(domains); if (!ajaxResult.hasErr() && !isUpdate) { U8Reference u8Reference = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferType, icsReceiptHeader.getType()) .eq(U8Reference::getReferCode, icsReceiptHeader.getReferCode()) .eq(U8Reference::getWarehouseCode, currentWarehouseCode) .last(" LIMIT 1")); if (u8Reference == null) { U8Reference reference = new U8Reference(); reference.setReferType(icsReceiptHeader.getType()); reference.setReferCode(icsReceiptHeader.getReferCode()); reference.setCompanyCode(companyU81.getCompanyCode()); reference.setWarehouseCode(currentWarehouseCode); reference.setTypeName(typeName); reference.setCreated(DateUtils.getNowDate()); u8ReferenceService.save(reference); } } if (ajaxResult.getCode() == 200 && !isUpdate) { return AjaxResult.success("入库单下发成功"); } else if (ajaxResult.getCode() == 200 && isUpdate) { return AjaxResult.success("入库单更新成功"); } else { return ajaxResult; } } /** * 其他入库单/调拨入库单 * * @param icsReceiptModel * @return * @throws ParseException */ @Transactional(rollbackFor = Exception.class) public AjaxResult otherReceipt(ICSReceiptModel icsReceiptModel) { //校验null checkOtherReceiptNull(icsReceiptModel); ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader(); List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails(); String receiptHeaderType = icsReceiptHeader.getType(); String warehouseCode = icsReceiptHeader.getWarehouseCode(); String whCode = null; String referCode = null; String companyCode = null; String u8CompanyCode = icsReceiptHeader.getCompanyCode(); Date created = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, icsReceiptHeader.getDDate()); String createdBy = icsReceiptHeader.getCMaker(); String receiptNote = icsReceiptHeader.getCMemo(); Integer referHeaderId = icsReceiptHeader.getID(); BigDecimal totalQty = BigDecimal.ZERO; int totalLines = BigDecimal.ZERO.intValue(); switch (icsReceiptHeader.getType()) { case "TI": // 调拨其他入库单 whCode = icsReceiptHeader.getIWHCode(); referCode = icsReceiptHeader.getCTVCode(); break; case "QI": //其他入库单 whCode = icsReceiptHeader.getCWHCode(); referCode = icsReceiptHeader.getCCode(); break; default: } ReceiptHeader receiptHeader = new ReceiptHeader(); List<ReceiptDetail> receiptDetails = new ArrayList<>(); WarehouseU8 warehouseU8 = warehouseU8Service.getWarehouseU8ByUCompanyUWarehouseCode(u8CompanyCode, whCode, warehouseCode); if (warehouseU8 == null) { throw new ServiceException("未找到库房代码:" + whCode); } companyCode = warehouseU8.getCompanyCode(); receiptHeader.setReferCode(referCode); receiptHeader.setReferId(referHeaderId); receiptHeader.setReceiptType(receiptHeaderType); receiptHeader.setWarehouseCode(icsReceiptHeader.getWarehouseCode()); receiptHeader.setUWarehouseCode(warehouseU8.getUWarehouseCode()); receiptHeader.setCompanyCode(companyCode); receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); receiptHeader.setCreated(created); receiptHeader.setCreatedBy(createdBy); receiptHeader.setReceiptNote(receiptNote); for (ICSReceiptDetail icsReceiptDetail : icsReceiptDetails) { ReceiptDetail receiptDetail = new ReceiptDetail(); receiptDetail.setReferId(icsReceiptDetail.getAutoID()); //其他入库单/调拨单 子表id receiptDetail.setAutoId(icsReceiptDetail.getAutoID()); if("TI".equals(icsReceiptHeader.getType())){ receiptDetail.setAutoId(icsReceiptDetail.getITrIds()); } receiptDetail.setProjectNo(icsReceiptDetail.getCItemName()); receiptDetail.setProcessStamp(QuantityConstant.RECEIPT_HEADER_BUILD.toString()); receiptDetail.setWarehouseCode(warehouseCode); receiptDetail.setUWarehouseCode(whCode); receiptDetail.setCompanyCode(companyCode); receiptDetail.setInventorySts(QuantityConstant.GOOD); receiptDetail.setCreatedBy(createdBy); receiptDetail.setCreated(created); Material material = materialService.getMaterialByCode(icsReceiptDetail.getCInvCode(), warehouseCode); if (material == null) { throw new ServiceException("物料编码未找到" + icsReceiptDetail.getCInvCode()); } receiptDetail.setMaterialCode(material.getCode()); receiptDetail.setMaterialName(material.getName()); receiptDetail.setMaterialSpec(material.getSpec()); receiptDetail.setMaterialUnit(material.getUnit()); BigDecimal qty = icsReceiptDetail.getIQuantity(); totalQty = totalQty.add(qty); receiptDetail.setQty(qty); totalLines += 1; receiptDetails.add(receiptDetail); } receiptHeader.setTotalQty(totalQty); receiptHeader.setTotalLines(totalLines); ReceiptDomain receiptModel = new ReceiptDomain(); receiptModel.setReceiptHeader(receiptHeader); receiptModel.setReceiptDetails(receiptDetails); AjaxResult result = receiptApiService.receipt(receiptModel); if (result.hasErr()) { throw new ServiceException(result.getMsg()); } if ("0".equals(icsReceiptHeader.getIsNew())) { return AjaxResult.success("入库单更新成功"); } return AjaxResult.success("入库单下发成功"); } public void checkOtherReceiptNull(ICSReceiptModel icsReceiptModel) { ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader(); List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails(); String type = icsReceiptHeader.getType(); String currentWarehouseCode = icsReceiptHeader.getWarehouseCode(); if (StringUtils.isEmpty(currentWarehouseCode)) { throw new ServiceException("仓库编码warehouseCode:不能为空"); } if (StringUtils.isEmpty(icsReceiptHeader.getCompanyCode())) { throw new ServiceException("公司账套CompanyCode 不能为空"); } if (StringUtils.isEmpty(type) || receiptTypeCheck(type)) { throw new ServiceException("入库类型不存在"); } if (StringUtils.isEmpty(icsReceiptHeader.getIsNew())) { throw new ServiceException("isNew为空"); } String referCode = null; Integer referId = icsReceiptHeader.getID(); String dDateStr = icsReceiptHeader.getDDate(); String whCode = null; String busTypeName = getReceiptTypeName(type); switch (type) { case "TI": // whCode = icsReceiptHeader.getIWHCode(); referCode = icsReceiptHeader.getCTVCode(); break; case "QI": //其他入库单 whCode = icsReceiptHeader.getCWHCode(); referCode = icsReceiptHeader.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(icsReceiptHeader.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)); //入库单表 检查上游单号是否重复 ReceiptHeader receiptHeader1 = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>() .eq(ReceiptHeader::getReferCode, referCode) .eq(ReceiptHeader::getWarehouseCode, currentWarehouseCode) .last("LIMIT 1")); if (one != null && !isUpdate && receiptHeader1 != null) { throw new ServiceException(busTypeName + ":请不要重复下发 " + referCode); } U8Reference u8Reference = u8ReferenceService.getOne(new LambdaQueryWrapper<U8Reference>() .eq(U8Reference::getReferType, icsReceiptHeader.getType()) .eq(U8Reference::getReferCode, referCode) .eq(U8Reference::getWarehouseCode, currentWarehouseCode) .last(" LIMIT 1")); if (u8Reference == null) { U8Reference reference = new U8Reference(); reference.setReferType(icsReceiptHeader.getType()); reference.setReferCode(referCode); reference.setWarehouseCode(currentWarehouseCode); reference.setTypeName(busTypeName); reference.setCreated(DateUtils.getNowDate()); u8ReferenceService.save(reference); } } private ICSReceiptModel assign(ICSReceiptModel icsReceiptModel) { ICSReceiptHeader header = icsReceiptModel.getIcsReceiptHeader(); List<ICSReceiptDetail> details = icsReceiptModel.getIcsReceiptDetails(); String type = header.getType(); Date created = null; if (header.getDDate() != null) { try { created = DateUtils.parseDate(header.getDDate(), DateUtils.YYYY_MM_DD_HH_MM_SS_S); } catch (ParseException e) { e.printStackTrace(); } } switch (type) { case "PI": header.setReferCode(header.getCCode()); try { header.setCreated(DateUtils.parseDate(header.getDPODate(), DateUtils.YYYY_MM_DD_HH_MM_SS)); } catch (ParseException e) { e.printStackTrace(); } for (ICSReceiptDetail detail : details) { detail.setReferId(detail.getPODID()); detail.setReferCode(detail.getPOCode()); } break; case "SRI": header.setReferId(header.getDLID()); header.setReferCode(header.getCDLCode()); header.setCreated(created); String uwarehouseCode1 = ""; for (ICSReceiptDetail detail : details) { detail.setReferId(detail.getCSOAutoID()); detail.setReferCode(detail.getCSOCode()); } break; case "PCI": header.setReferCode(header.getCPOID()); header.setReferId(header.getPOID()); try { header.setCreated(DateUtils.parseDate(header.getDPODate(), DateUtils.YYYY_MM_DD_HH_MM_SS_S)); } catch (ParseException e) { e.printStackTrace(); } String uwarehouseCode2 = ""; for (ICSReceiptDetail detail : details) { detail.setReferCode(header.getReferCode()); detail.setReferId(detail.getPODID()); if (StringUtils.isEmpty(detail.getCWHCode())) { detail.setCWHCode(header.getIWHCode()); } } if (StringUtils.isEmpty(header.getIWHCode())) { header.setIWHCode(uwarehouseCode2); header.setCWHCode(uwarehouseCode2); } break; case "CI": default: header.setReferId(header.getID()); header.setReferCode(header.getCCode()); header.setStock(header.getCWHCode()); header.setCreated(created); for (ICSReceiptDetail detail : details) { detail.setReferCode(header.getReferCode()); } break; } icsReceiptModel.setIcsReceiptHeader(header); icsReceiptModel.setIcsReceiptDetails(details); return icsReceiptModel; } /** * 判断入库单是否可以更新 * * @param code U8单号 */ private void checkReceiptBill(boolean isFlag, String code, String type, String warehouseCode) { LambdaQueryWrapper<ReceiptHeader> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(ReceiptHeader::getReferCode, code) .eq(ReceiptHeader::getWarehouseCode, warehouseCode) .eq(ReceiptHeader::getReceiptType, type) .last("LIMIT 1"); ReceiptHeader receiptHeader = receiptHeaderService.getOne(queryWrapper); if (isFlag) { if (receiptHeader != null) { LambdaQueryWrapper<TaskDetail> queryWrapper3 = Wrappers.lambdaQuery(); queryWrapper3.eq(TaskDetail::getBillCode, receiptHeader.getCode()) .eq(TaskDetail::getBillCode, receiptHeader.getWarehouseCode()) .le(TaskDetail::getStatus, QuantityConstant.TASK_STATUS_COMPLETED); List<TaskDetail> taskDetailList = taskDetailService.list(queryWrapper3); if (taskDetailList == null || taskDetailList.size() > 0) { throw new ServiceException("更新失敗,此入库单存在任务"); } LambdaQueryWrapper<ReceiptContainerDetail> queryWrapper1 = Wrappers.lambdaQuery(); queryWrapper1.eq(ReceiptContainerDetail::getReceiptCode, receiptHeader.getCode()) .eq(ReceiptContainerDetail::getWarehouseCode, receiptHeader.getWarehouseCode()) .le(ReceiptContainerDetail::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED); List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(queryWrapper1); if (receiptContainerDetails == null || receiptContainerDetails.size() > 0) { throw new ServiceException("更新失敗,此入库单已组盘"); } receiptHeaderService.removeById(receiptHeader.getId()); List<ReceiptDetail> receiptDetails = receiptDetailService.findByReceiptId(receiptHeader.getId()); List<Integer> ids = receiptDetails.stream().map(ReceiptDetail::getId).collect(Collectors.toList()); receiptDetailService.removeByIds(ids); } ICSReceiptHeader icsReceiptHeader = icsReceiptHeaderService.getOne(new LambdaQueryWrapper<ICSReceiptHeader>() .eq(ICSReceiptHeader::getReferCode, code) .eq(ICSReceiptHeader::getType, type)); if (icsReceiptHeader != null) { icsReceiptHeaderService.removeById(icsReceiptHeader.getRid()); icsReceiptDetailService.remove(new LambdaQueryWrapper<ICSReceiptDetail>() .eq(ICSReceiptDetail::getHeaderId, icsReceiptHeader.getRid())); } } } private String getReceiptTypeName(String code) { String typeName = ""; switch (code) { case "PCI": typeName = "采购订单"; break; case "CI": typeName = "生产退料单"; break; case "QI": typeName = "其他入库单"; break; case "PPI": typeName = "手持入库单"; break; case "TI": typeName = "调拨入库单"; break; case "SRI": typeName = "销售退货单"; break; case "SI": typeName = "产成品入库单"; break; case "PI": typeName = "采购到货单"; break; case "AI": typeName = "调整单"; break; } return typeName; } private boolean receiptTypeCheck(String code) { switch (code) { case "PI": case "SRI": case "PCI": case "CI": case "TI": case "QI": return false; default: return true; } } public Boolean isSameMonth(Date date) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date); Calendar cal2 = Calendar.getInstance(); cal2.setTime(new Date()); boolean isSameYear = cal1.get(Calendar.YEAR) == cal2 .get(Calendar.YEAR); boolean isSameMonth = isSameYear && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH); boolean isSameDate = isSameMonth && cal1.get(Calendar.DAY_OF_MONTH) == cal2 .get(Calendar.DAY_OF_MONTH); return isSameDate; } //采购到货单和销售退货入库单 public synchronized AjaxResult insertICSReceipts(ICSReceiptModel icsReceiptModel) { ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader(); List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails(); if (!QuantityConstant.U8_RECEIPT_TYPE_SRI.equals(icsReceiptHeader.getType()) && !QuantityConstant.U8_RECEIPT_TYPE_PI.equals(icsReceiptHeader.getType())) { return AjaxResult.error("入库类型不匹配"); } String code = null; if (icsReceiptHeader.getType().equals("SRI")) { code = icsReceiptHeader.getCDLCode(); } else { code = icsReceiptHeader.getCCode(); } if (StringUtils.isEmpty(code)) { if (icsReceiptHeader.getType().equals("SRI")) { // documentWarningService.ErpSendWarning("", "销售退货入库单没有单号"); } else { // documentWarningService.ErpSendWarning("", "采购到货单下发没有单号"); } throw new ServiceException("没有单号"); } CompanyU8 companyWu = companyU8Service.getCompanyByU8CodeWarehouseCode(icsReceiptHeader.getCompanyCode(), icsReceiptHeader.getWarehouseCode()); if (companyWu == null) { return AjaxResult.error("单据货主不存在" + icsReceiptHeader.getCompanyCode()); } ReceiptHeader receiptHeaderB = new ReceiptHeader(); receiptHeaderB.setReferCode(code); receiptHeaderB.setCompanyCode(companyWu.getCompanyCode()); List<ReceiptHeader> receiptHeaders = receiptHeaderService.getByDomain(receiptHeaderB); if (CollectionUtils.isNotEmpty(receiptHeaders)) { return AjaxResult.success("单号重复,已跳过"); } //判断仓库是否存在单据的物料编码 ReceiptHeader receiptHeader; List<ReceiptDetail> receiptDetails; Set<String> warehouseCodes = new HashSet<>(); Set<String> uwarehouseCodes = new HashSet<>(); String companyCode = null; Map<String, String> companyCodeMap = new HashMap<>(); for (ICSReceiptDetail item : icsReceiptDetails) { //通过u8的货主和仓库匹配wms的仓库 WarehouseU8 warehouseWu = new WarehouseU8(); warehouseWu.setUCompanyCode(icsReceiptHeader.getCompanyCode()); warehouseWu.setUWarehouseCode(item.getCWHCode()); warehouseWu.setWarehouseCode(item.getWarehouseCode()); List<WarehouseU8> list = warehouseU8Service.getByDomain(warehouseWu); if (list != null && list.size() > 0) { warehouseWu = list.get(0); companyCodeMap.put(item.getCWHCode() + icsReceiptHeader.getCompanyCode(), warehouseWu.getCompanyCode()); companyCode = warehouseWu.getCompanyCode(); uwarehouseCodes.add(item.getCWHCode()); warehouseCodes.add(warehouseWu.getWarehouseCode()); } } if (companyCode != null && !companyCode.equals(companyWu.getCompanyCode())) { ReceiptHeader receiptHeader1 = new ReceiptHeader(); receiptHeader1.setReferCode(code); receiptHeader1.setCompanyCode(companyCode); receiptHeader1.setWarehouseCode(icsReceiptHeader.getWarehouseCode()); receiptHeader1 = receiptHeaderService.selectFirstEntity(receiptHeader1); if (receiptHeader1 != null) { return AjaxResult.success("单号重复,已跳过"); } } if (warehouseCodes == null || uwarehouseCodes.size() < 1) { return AjaxResult.success("没有此仓库"); } String maker = icsReceiptHeader.getCMaker(); for (String warehouseCode : warehouseCodes) { for (String uwarehouseCode : uwarehouseCodes) { receiptDetails = new ArrayList<>(); //出库主单 receiptHeader = new ReceiptHeader(); if (!StringUtils.isEmpty(icsReceiptHeader.getCTVCode())) { receiptHeader.setUserDef3(icsReceiptHeader.getCTVCode()); } receiptHeader.setReceiptType(icsReceiptHeader.getType()); receiptHeader.setId(null); receiptHeader.setLastUpdatedBy(maker); receiptHeader.setCreatedBy(maker); receiptHeader.setLastUpdated(new Date()); receiptHeader.setCreated(new Date()); receiptHeader.setReferCode(code); receiptHeader.setSupplierCode(icsReceiptHeader.getCVenCode()); receiptHeader.setSupplierName(icsReceiptHeader.getCVenName()); receiptHeader.setWarehouseCode(warehouseCode); receiptHeader.setUWarehouseCode(uwarehouseCode); receiptHeader.setCompanyCode(companyCodeMap.get(uwarehouseCode + icsReceiptHeader.getCompanyCode())); // receiptHeader.setSourcePlatform(icsReceiptHeader.getSourcePlatform()); receiptHeader.setCDeptName(icsReceiptHeader.getCDepName()); //细单 for (ICSReceiptDetail item : icsReceiptDetails) { //匹配仓库 if (uwarehouseCode.equals(item.getCWHCode())) { //查找物料 Material material = new Material(); material.setCode(item.getCInvCode()); material.setWarehouseCode(warehouseCode); material = materialService.getMaterialByDomain(material); if (material == null) { // documentWarningService.ErpSendWarning(code, "该物料不存在:"+item.getCInvCode()); throw new ServiceException("该物料不存在:" + item.getCInvCode()); } ReceiptDetail receiptDetail = new ReceiptDetail(); receiptDetail.setId(null); receiptDetail.setLot(item.getCDefine23()); receiptDetail.setReferCode(code); receiptDetail.setAutoId(item.getAutoID()); if (StringUtils.isNotEmpty(item.getCDefine22())) { Boolean flag = StringUtils.isChineseChar(item.getCDefine22()); if ((item.getCDefine22().length() == 19 || item.getCDefine22().length() == 22) && flag == false) { receiptDetail.setMoCode(item.getCDefine22()); } else { receiptDetail.setBatch(item.getCDefine22()); } } receiptDetail.setWarehouseCode(warehouseCode); receiptDetail.setMaterialCode(item.getCInvCode()); receiptDetail.setZoneCode(material.getZoneCode()); receiptDetail.setCreated(new Date()); receiptDetail.setUWarehouseCode(uwarehouseCode); receiptDetail.setMaterialUnit(item.getCComUnitName()); receiptDetail.setCreatedBy(maker); receiptDetail.setLastUpdated(new Date()); receiptDetail.setLastUpdatedBy(maker); if (!item.getCompanyCode().equals(icsReceiptHeader.getCompanyCode())) { // documentWarningService.ErpSendWarning(code, "子单货主与主单不对应"); throw new ServiceException("子单货主与主单不对应"); } if (icsReceiptHeader.getType().equals("SRI")) { receiptDetail.setCPoCode(item.getCSOCode()); } else { receiptDetail.setCPoCode(item.getPOCode()); } receiptDetail.setCompanyCode(companyCodeMap.get(item.getCWHCode() + icsReceiptHeader.getCompanyCode())); receiptDetail.setProjectNo(item.getCItemName()); receiptDetail.setQty(item.getIQuantity().abs()); // receiptDetail.setQtyCompleted(item.getiQuantity()); receiptDetail.setInventorySts("good"); if (StringUtils.isNotEmpty(item.getLotno())) { receiptDetail.setUserDef2(item.getLotno()); } receiptDetails.add(receiptDetail); } } //调用公共API ReceiptDomain receiptModel = new ReceiptDomain(); receiptModel.setReceiptHeader(receiptHeader); receiptModel.setReceiptDetails(receiptDetails); AjaxResult ajaxResult = receiptApiService.receipt(receiptModel); if (ajaxResult.getCode() != 200) { throw new ServiceException("保存入库单:" + ajaxResult.getMsg()); } } } return AjaxResult.success("入货单下发成功"); } }