package com.huaheng.api.general.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.api.R; import com.huaheng.api.general.domain.*; import com.huaheng.api.general.service.ReceiptApiService; import com.huaheng.api.general.service.ReceiptService; import com.huaheng.api.general.service.ShipmentApiService; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.aspectj.lang.annotation.ApiLogger; import com.huaheng.framework.aspectj.lang.annotation.Log; import com.huaheng.framework.aspectj.lang.constant.BusinessType; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.location.domain.Location; import com.huaheng.pc.config.location.domain.LocationInfo; import com.huaheng.pc.config.location.domain.LocationStatus; import com.huaheng.pc.config.location.service.LocationService; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.receipt.detail.domain.Detail; import com.huaheng.pc.receipt.detail.service.DetailServcie; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @RestController @RequestMapping("/api/receiptApi") @Api(tags = {"入库单接口"}, value = "入库单接口receipt") public class ReceiptApiController { @Resource private ReceiptApiService receiptApiService; @Resource private ReceiptService receiptService; @Resource private ShipmentApiService shipmentApiService; @Resource private DetailServcie detailServcie; @Resource private LocationService locationService; @Resource private InventoryDetailService inventoryDetailService; /** * 查询库位列表 */ @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT) @PostMapping("/getAllLocation") @ResponseBody public AjaxResult getAllLocation () { String type = "L"; if(StringUtils.isEmpty(type)) { return AjaxResult.error("type不能为空"); } String warehouseCode = "CS0001"; String row = null, line = null, layer = null; /* 查询库位信息*/ LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); locationLambdaQueryWrapper.eq(StringUtils.isNotEmpty(row), Location::getIRow, row) .eq(StringUtils.isNotEmpty(line), Location::getIColumn, line) .eq(StringUtils.isNotEmpty(layer), Location::getILayer, layer) .eq(Location::getIGrid, 1) // .eq(StringUtils.isNotEmpty(type), Location::getLocationType, type) .eq(Location::getWarehouseCode, warehouseCode) .eq(StringUtils.isNotEmpty(type), Location::getZoneCode, type); List<Location> locations = locationService.list(locationLambdaQueryWrapper); List<Location> locationList = new ArrayList<>(); /* 查询库存明细*/ LambdaQueryWrapper<InventoryDetail> inventoryDetailLambda = Wrappers.lambdaQuery(); inventoryDetailLambda.eq(InventoryDetail::getWarehouseCode, warehouseCode); List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambda); for (Location location1 : locations) { InventoryDetail inventoryDetail = null; String materialName = null; for (InventoryDetail inventoryDetail2 : inventoryDetailList) { if(location1.getCode().equals(inventoryDetail2.getLocationCode())) { inventoryDetail = inventoryDetail2; } } List<InventoryDetail> inventoryDetails = inventoryDetailList.stream().filter(inventoryDetail1 -> inventoryDetail1.getLocationCode().equals(location1.getCode())).collect(Collectors.toList()); int userDef3 = 0; String status = location1.getStatus(); String containerCode = location1.getContainerCode(); List<String> materialNameList = inventoryDetails.stream().map(InventoryDetail::getMaterialName).collect(Collectors.toList()); List<String> batchList = inventoryDetails.stream().map(InventoryDetail::getBatch).collect(Collectors.toList()); List<String> materialCodeList = inventoryDetails.stream().map(InventoryDetail::getMaterialCode).collect(Collectors.toList()); List<BigDecimal> qtyList = inventoryDetails.stream().map(InventoryDetail::getQty).collect(Collectors.toList()); if(QuantityConstant.STATUS_LOCATION_EMPTY.equals(status)) { if(StringUtils.isEmpty(containerCode)) { userDef3 = LocationStatus.IDLE_EMPTY_LOCATION; } else { if(inventoryDetail == null) { userDef3 = LocationStatus.IDLE_EMPTY_CONTAINER; } else { location1.setMaterialName(materialNameList); location1.setMaterialCode(materialCodeList); location1.setBatch(batchList); location1.setQty(qtyList); userDef3 = LocationStatus.IDLE_FULL_CONTAINER; } } } else if(QuantityConstant.STATUS_LOCATION_LOCK.equals(status)) { if(StringUtils.isEmpty(containerCode)) { userDef3 = LocationStatus.LOCK_EMPTY_LOCATION; } else { if(inventoryDetail == null) { userDef3 = LocationStatus.LOCK_EMPTY_CONTAINER; } else { location1.setMaterialName(materialNameList); location1.setMaterialCode(materialCodeList); location1.setBatch(batchList); location1.setQty(qtyList); userDef3 = LocationStatus.LOCK_FULL_CONTAINER; } } } if(location1.getDeleted()) { if(StringUtils.isEmpty(containerCode)) { userDef3 = LocationStatus.DISABLE_EMPTY_LOCATION; } else { if(inventoryDetail == null) { userDef3 = LocationStatus.DISABLE_EMPTY_CONTAINER; } else { location1.setMaterialName(materialNameList); location1.setMaterialCode(materialCodeList); location1.setBatch(batchList); location1.setQty(qtyList); userDef3 = LocationStatus.DISABLE_FULL_CONTAINER; } } } location1.setUserDef3(String.valueOf(userDef3)); locationList.add(location1); } return AjaxResult.success(locations); } /** * 同步入库单 */ @Log(title = "入库单添加", action = BusinessType.INSERT) @PostMapping("/receipt") @ApiOperation("入库单添加公共接口") @ResponseBody @ApiLogger(apiName = "添加入库单", from="ERP") @Transactional(rollbackFor = Exception.class) public AjaxResult receipt(@RequestBody List<WmsReceipt> wmsReceipts) { String warehouseCode = "CS0001"; AjaxResult ajaxResult = new AjaxResult(); for(WmsReceipt wmsReceipt : wmsReceipts) { int operation = wmsReceipt.getOperationType(); List<Detail> detailList = wmsReceipt.getDetailList(); if (operation == 0) { ReceiptDomain receiptDomain = new ReceiptDomain(); ReceiptHeader receiptHeader = new ReceiptHeader(); receiptHeader.setReferCode(wmsReceipt.getBillNo()); receiptHeader.setWarehouseCode(warehouseCode); receiptHeader.setCompanyCode("BHF"); receiptHeader.setUserDef1(wmsReceipt.getTaksNo()); receiptHeader.setCreatedBy("WMS"); receiptHeader.setReceiptType("DE"); receiptDomain.setReceiptHeader(receiptHeader); List<ReceiptDetail> receiptDetails = new ArrayList<>(); BigDecimal qty = wmsReceipt.getQty(); ReceiptDetail receiptDetail = new ReceiptDetail(); receiptDetail.setWarehouseCode(warehouseCode); receiptDetail.setTotalQty(qty); receiptDetail.setMaterialCode(wmsReceipt.getItemCode()); receiptDetail.setCompanyCode("BHF"); receiptDetails.add(receiptDetail); receiptDomain.setReceiptDetails(receiptDetails); ajaxResult = receiptApiService.receipt(receiptDomain); if(!ajaxResult.hasErr()) { detailServcie.saveBatch(detailList); } } else { ShipmentDomain shipmentDomain = new ShipmentDomain(); ShipmentHeader shipmentHeader = new ShipmentHeader(); shipmentHeader.setReferCode(wmsReceipt.getBillNo()); shipmentHeader.setWarehouseCode(warehouseCode); shipmentHeader.setCompanyCode("BHF"); shipmentHeader.setUserDef1(wmsReceipt.getTaksNo()); shipmentHeader.setCreatedBy("WMS"); shipmentHeader.setShipmentType("ELO"); shipmentDomain.setShipmentHeader(shipmentHeader); List<ShipmentDetail> shipmentDetails = new ArrayList<>(); String materialCode = wmsReceipt.getItemCode(); BigDecimal qty = wmsReceipt.getQty(); ShipmentDetail shipmentDetail = new ShipmentDetail(); shipmentDetail.setWarehouseCode(warehouseCode); shipmentDetail.setShipQty(qty); shipmentDetail.setMaterialCode(materialCode); shipmentDetail.setCompanyCode("BHF"); /*创建出库单默认波次为空字符串*/ shipmentDetail.setBatch(""); shipmentDetails.add(shipmentDetail); shipmentDomain.setShipmentDetails(shipmentDetails); ajaxResult = shipmentApiService.shipment(shipmentDomain); if(!ajaxResult.hasErr()) { detailServcie.saveBatch(detailList); } } } return ajaxResult; } // /** // * 同步入库单 // */ // @Log(title = "入库单添加", action = BusinessType.INSERT) // @PostMapping("/receipt") // @ApiOperation("入库单添加公共接口") // @ResponseBody // @ApiLogger(apiName = "添加入库单", from="ERP") // public AjaxResult receipt(@RequestBody WmsReceipt wmsReceipt) // { // // } // /** // * 入库单下发 // */ // @Log(title = "入库单下发", action = BusinessType.INSERT) // @PostMapping("/insertReceipt") // @ApiOperation("入库单下发接口") // @ResponseBody // @ApiLogger(apiName = "下发入库单", from="ERP") // public AjaxResult MaterialApi(@RequestBody Receipt receipt) { // System.out.println("————————开始接收入库单——————————"); // System.out.println(receipt); // AjaxResult ajaxResult = receiptService.insertReceipt(receipt); // return ajaxResult; // } /** * 取消入库单 */ @Log(title = "入库-入库单 ",operating = "入库单删除", action = BusinessType.UPDATE) @PostMapping("/remove") @ResponseBody @ApiLogger(apiName = "取消入库单", from="ERP") public AjaxResult remove(@RequestBody List<String> receiptCodeList){ if (receiptCodeList==null && receiptCodeList.size()<1){ return AjaxResult.error("单号列表为空"); } return receiptApiService.remove(receiptCodeList); } /** * 入库单查询 */ @Log(title = "入库-入库单 ",operating = "入库单删除", action = BusinessType.UPDATE) @GetMapping("/search") @ResponseBody @ApiLogger(apiName = "查询入库单", from="ERP") public AjaxResult search(@RequestParam String receiptCode, @RequestParam String companyCode, @RequestParam String warehouseCode){ return receiptApiService.search(receiptCode,companyCode,warehouseCode); } }