package com.steerinfo.dil.service.impl; import com.alibaba.fastjson.JSONObject; import com.steerinfo.dil.feign.BmsTruckFeign; import com.steerinfo.dil.mapper.OyeInboundResultMapper; import com.steerinfo.dil.mapper.OyeOutboundResultMapper; import com.steerinfo.dil.mapper.OyeRealtimeInventoryMapper; import com.steerinfo.dil.mapper.TmstruckWeightBatchMapper; import com.steerinfo.dil.model.OyeInboundResult; import com.steerinfo.dil.model.OyeOutboundResult; import com.steerinfo.dil.model.OyeRealtimeInventory; import com.steerinfo.dil.model.TmstruckWeightBatch; import com.steerinfo.dil.service.IOyeResultService; import com.steerinfo.dil.util.DataChange; import com.sun.org.apache.bcel.internal.generic.RETURN; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.xml.crypto.Data; import java.math.BigDecimal; import java.util.*; @Service public class OyeResultServiceImpl implements IOyeResultService { @Resource OyeInboundResultMapper oyeInboundResultMapper; @Resource OyeOutboundResultMapper oyeOutboundResultMapper; @Resource OyeRealtimeInventoryMapper oyeRealtimeInventoryMapper; @Resource TmstruckWeightBatchMapper tmstruckWeightBatchMapper; @Resource BmsTruckFeign bmsTruckFeign; public List> getOyeInboundResult(Map mapValue) { return oyeInboundResultMapper.getOyeInboundResult(mapValue); } public List> getOyeOutboundResult(Map mapValue) { return oyeOutboundResultMapper.oyeOutboundResultMapper(mapValue); } public List> getOyeRealTimeResult(Map mapValue) { return oyeRealtimeInventoryMapper.getOyeRealTimeResult(mapValue); } /** * 入库作业 * @param mapValue * @return */ @Transactional(rollbackFor = Exception.class) public synchronized String insertInboundResult(Map mapValue) throws Exception { List> mapList = (List>) mapValue.get("mapList"); List OyeInboundResults = new ArrayList<>(); List oyeRealtimeInventoriesInsert = new ArrayList<>(); List oyeRealtimeInventoriesUpdate = new ArrayList<>(); System.out.println("===========" + new Date()); JSONObject jsonObject = new JSONObject(mapValue); System.out.println(jsonObject); System.out.println("===========" + new Date()); for (Map map : mapList) { OyeInboundResult oyeInboundResult = new OyeInboundResult(); BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId")); BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight")); BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); BigDecimal singleWeight = theoryWeight.divide(materialNumber); BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter")); oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId()); oyeInboundResult.setSaleArea(map.get("saleArea").toString()); oyeInboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId"))); oyeInboundResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId"))); oyeInboundResult.setOrderId(DataChange.dataToBigDecimal(map.get("orderId"))); oyeInboundResult.setSaleMaterialId(DataChange.dataToBigDecimal(map.get("saleMaterialId"))); //判断该拼是否入库 if (oyeInboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) { throw new Exception("该分录已入库,无法继续入库"); } oyeInboundResult.setCapacityNumbher(map.get("capacityNumber") + ""); oyeInboundResult.setInboundArea(map.get("inboundArea").toString()); oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString()); oyeInboundResult.setSaleNo(map.get("saleNo") + ""); oyeInboundResult.setMeter(meter); oyeInboundResult.setMaterialId(materialId); oyeInboundResult.setTheoryWeight(theoryWeight); oyeInboundResult.setSingleWeight(singleWeight); oyeInboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight"))); oyeInboundResult.setMaterialNumber(materialNumber); oyeInboundResult.setInsertUsername(map.get("userName") + ""); oyeInboundResult.setInsertTime(new Date()); map.put("singleWeight",singleWeight); //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在 BigDecimal inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map); if (inventoryId == null) { //新增实时库存 map.put("flag",1); OyeRealtimeInventory oyeRealtimeInventory = insertRealTimeInventory(map); oyeRealtimeInventoriesInsert.add(oyeRealtimeInventory); oyeInboundResult.setInventoryId(oyeRealtimeInventory.getInventoryId()); }else{ map.put("inventoryId",inventoryId); map.put("flag",1); OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map); oyeRealtimeInventoriesUpdate.add(oyeRealtimeInventory); } // 修改运单状态 oyeInboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId"))); OyeInboundResults.add(oyeInboundResult); } oyeInboundResultMapper.batchInsert(OyeInboundResults); if (oyeRealtimeInventoriesInsert.size() > 0) { oyeRealtimeInventoryMapper.batchInsert(oyeRealtimeInventoriesInsert); } if (oyeRealtimeInventoriesUpdate.size() > 0) { oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventoriesUpdate); } return "入库成功"; } @Transactional(rollbackFor = Exception.class) public synchronized String insertOutboundResult(Map mapValue) throws Exception { List oyeOutboundResults = new ArrayList<>(); List tmstruckWeightBatches = new ArrayList<>(); List oyeRealtimeInventories = new ArrayList<>(); List> mapList = (List>) mapValue.get("mapList"); System.out.println("===========" + new Date()); JSONObject jsonObject = new JSONObject(mapValue); System.out.println(jsonObject); System.out.println("===========" + new Date()); for (Map map : mapList) { OyeOutboundResult oyeOutboundResult = new OyeOutboundResult(); BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId")); BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight")); BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); if(materialNumber == null || materialNumber.intValue() == 0) { throw new Exception("物资件数错误"); } BigDecimal singleWeight = theoryWeight.divide(materialNumber); BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter")); oyeOutboundResult.setResultId(oyeOutboundResultMapper.getResultId()); oyeOutboundResult.setSaleArea(map.get("saleArea").toString()); oyeOutboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId"))); oyeOutboundResult.setCapacityNumbher(map.get("capacityNumber") + ""); oyeOutboundResult.setCapacityId(DataChange.dataToBigDecimal(map.get("capacityId"))); oyeOutboundResult.setOrderId(DataChange.dataToBigDecimal(map.get("orderId"))); oyeOutboundResult.setCapacityNumbher(map.get("capacityNumber") + ""); oyeOutboundResult.setInboundArea(map.get("inboundArea").toString()); oyeOutboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString()); oyeOutboundResult.setSaleMaterialId(DataChange.dataToBigDecimal(map.get("saleMaterialId"))); //判断该拼是否出库 if (oyeOutboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) { throw new Exception("该分录已出库,无法继续出库"); } //更新制单日期 oyeOutboundResult.setMeter(meter); oyeOutboundResult.setMaterialId(materialId); oyeOutboundResult.setTheoryWeight(theoryWeight); oyeOutboundResult.setSingleWeight(singleWeight); oyeOutboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight"))); oyeOutboundResult.setMaterialNumber(materialNumber); oyeOutboundResult.setInsertUsername(map.get("userName") + ""); oyeOutboundResult.setInsertTime(new Date()); map.put("singleWeight",singleWeight); //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在 BigDecimal inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map); oyeOutboundResult.setInventoryId(inventoryId); map.put("inventoryId",inventoryId); map.put("flag",2); OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map); oyeRealtimeInventories.add(oyeRealtimeInventory); TmstruckWeightBatch tmstruckWeightBatch = generateWeightBatch(map); tmstruckWeightBatches.add(tmstruckWeightBatch); Map updateMap = new HashMap<>(); updateMap.put("weightBatchId",tmstruckWeightBatch.getWeightBatchId()); updateMap.put("materialNumber",materialNumber); updateMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId"))); updateMap.put("materialWeight",theoryWeight); oyeOutboundResultMapper.updateSaleMakeDate(updateMap); oyeOutboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId"))); oyeOutboundResults.add(oyeOutboundResult); } oyeOutboundResultMapper.batchInsert(oyeOutboundResults); oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventories); tmstruckWeightBatchMapper.batchInsert(tmstruckWeightBatches); return "出库成功"; } /** * 新增实时库存 */ @Transactional(rollbackFor = Exception.class) public synchronized OyeRealtimeInventory insertRealTimeInventory(Map map) { BigDecimal inventoryId = oyeRealtimeInventoryMapper.getResultId(); OyeRealtimeInventory oyeRealtimeInventory = new OyeRealtimeInventory(); oyeRealtimeInventory.setInventoryId(inventoryId); oyeRealtimeInventory.setSaleArea(map.get("saleArea").toString()); oyeRealtimeInventory.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId"))); oyeRealtimeInventory.setInboundWarehouse(map.get("inboundWarehouse").toString()); oyeRealtimeInventory.setInboundArea(map.get("inboundArea").toString()); oyeRealtimeInventory.setMaterialId(DataChange.dataToBigDecimal(map.get("materialId"))); oyeRealtimeInventory.setMeter(DataChange.dataToBigDecimal(map.get("meter"))); oyeRealtimeInventory.setSingleWeight(DataChange.dataToBigDecimal(map.get("singleWeight"))); oyeRealtimeInventory.setTheoryWeight(DataChange.dataToBigDecimal(map.get("theoryWeight"))); oyeRealtimeInventory.setMaterialNumber(DataChange.dataToBigDecimal(map.get("materialNumber"))); oyeRealtimeInventory.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight"))); oyeRealtimeInventory.setInsertTime(new Date()); return oyeRealtimeInventory; } /** * 更新实时库存 */ @Transactional(rollbackFor = Exception.class) public synchronized OyeRealtimeInventory updateRealTimeInventory(Map map) throws Exception { //更新实时库存 BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId")); // flag为1,则为入库,为2则为出库 BigDecimal flag = DataChange.dataToBigDecimal(map.get("flag")); BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight")); BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight")); OyeRealtimeInventory oyeRealtimeInventory = oyeRealtimeInventoryMapper.selectByPrimaryKey(inventoryId); if (flag.compareTo(new BigDecimal(1)) == 0) { oyeRealtimeInventory.setNetWeight(oyeRealtimeInventory.getNetWeight().add(netWeight)); oyeRealtimeInventory.setTheoryWeight(oyeRealtimeInventory.getTheoryWeight().add(theoryWeight)); oyeRealtimeInventory.setMaterialNumber(oyeRealtimeInventory.getMaterialNumber().add(materialNumber)); } else { BigDecimal realTimeTheoryWeight = oyeRealtimeInventory.getTheoryWeight(); BigDecimal realTimeMaterialNumber = oyeRealtimeInventory.getMaterialNumber(); BigDecimal realTimeNetWeight = oyeRealtimeInventory.getNetWeight(); if (realTimeTheoryWeight.compareTo(theoryWeight) >= 0) { oyeRealtimeInventory.setTheoryWeight(realTimeTheoryWeight.subtract(theoryWeight)); } if (realTimeMaterialNumber.compareTo(materialNumber) >= 0 ) { oyeRealtimeInventory.setMaterialNumber(realTimeMaterialNumber.subtract(materialNumber)); }else{ throw new Exception("出库件数大于库存件数,无法出库"); } oyeRealtimeInventory.setNetWeight(realTimeNetWeight.subtract(netWeight)); } return oyeRealtimeInventory; } @Transactional(rollbackFor = Exception.class) public TmstruckWeightBatch generateWeightBatch(Map map) { TmstruckWeightBatch tmstruckWeightBatch = new TmstruckWeightBatch(); BigDecimal weightBatchId = tmstruckWeightBatchMapper.weightBatchID(); tmstruckWeightBatch.setId(weightBatchId); tmstruckWeightBatch.setBatchNetWeight(DataChange.dataToBigDecimal(map.get("netWeight"))); tmstruckWeightBatch.setBatchGrossWeightTime(new Date()); tmstruckWeightBatch.setBatchRemark("出库生成批次"); return tmstruckWeightBatch; } }