package com.steerinfo.dil.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSON; 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.*; import com.steerinfo.dil.service.IOyeResultService; import com.steerinfo.dil.util.DataChange; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; 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) { List> mapList = oyeInboundResultMapper.getOyeInboundResult(mapValue); int i = 0; for (Map map : mapList) { if(i == 0) { i++; continue; } if(map.get("weightBatchId") == null){ continue; } Map stringObjectMap = mapList.get(i-1); if (DataChange.dataToBigDecimal(stringObjectMap.get("weightBatchId")).compareTo(DataChange.dataToBigDecimal(map.get("weightBatchId"))) == 0) { map.put("netWeight",0); map.put("orderNetWeight",0); } i++; } return mapList; } public List> getOyeOutboundResult(Map mapValue) { return oyeOutboundResultMapper.oyeOutboundResultMapper(mapValue); } public List> getOyeRealTimeResult(Map mapValue) { return oyeRealtimeInventoryMapper.getOyeRealTimeResult(mapValue); } /** * 入库作业 * @param mapValue * @return */ public synchronized String insertInboundResult(Map mapValue) throws Exception { 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) { //判断该拼是否入库 if (oyeInboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) { throw new Exception("该分录已入库,无法继续入库"); } //判断该分录是否有净重 if (DataChange.dataToBigDecimal(map.get("netWeight")) == null || DataChange.dataToBigDecimal(map.get("netWeight")).intValue() == 0) { throw new Exception("该分录无净重,不允许入库"); } } for (Map map : mapList) { insertInboundResultReal(map); } return "入库成功"; } @Transactional(rollbackFor = Exception.class) public synchronized int insertInboundResultReal(Map map) throws Exception { int i = 0; //根据分录ID查询理重 BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); BigDecimal theoryWeightSaleMaterial = oyeRealtimeInventoryMapper.getTheoryWeight(DataChange.dataToBigDecimal(map.get("saleMaterialId"))); BigDecimal singleWeight = theoryWeightSaleMaterial.divide(materialNumber,4,BigDecimal.ROUND_HALF_UP); //根据分录理重 OyeInboundResult oyeInboundResult = new OyeInboundResult(); BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId")); BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight")); 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"))); oyeInboundResult.setCapacityNumbher(map.get("capacityNumber") + ""); oyeInboundResult.setInboundArea(map.get("inboundArea").toString()); oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString()); oyeInboundResult.setSaleNo(map.get("saleNo") + ""); if (meter != null && meter.intValue() != 0) { 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); oyeInboundResult.setInventoryId(oyeRealtimeInventory.getInventoryId()); map.put("inventoryId",oyeRealtimeInventory.getInventoryId()); oyeRealtimeInventoryMapper.insertSelective(oyeRealtimeInventory); }else{ map.put("inventoryId",inventoryId); map.put("flag",1); OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map); oyeInboundResult.setInventoryId(oyeRealtimeInventory.getInventoryId()); oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventory); } if (!map.get("place").equals(map.get("inboundWarehouse"))) { //如果收货地址与place,则需要修改收货地址 BigDecimal newPlaceId = oyeInboundResultMapper.getPlaceId(map.get("inboundWarehouse").toString()); //修改收货地址 Map addressMap = new HashMap<>(); addressMap.put("newPlaceId",newPlaceId); addressMap.put("placeId",DataChange.dataToBigDecimal(map.get("placeId"))); addressMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId"))); oyeInboundResultMapper.updateAddressPlace(addressMap); } //判断该运单有没有签收实绩 String receiptAddress = oyeInboundResultMapper.selectReceiptResultId(DataChange.dataToBigDecimal(map.get("orderId"))); if(receiptAddress != null) { oyeInboundResultMapper.updateOOOrderStatus(DataChange.dataToBigDecimal(map.get("orderId"))); } // 修改运单状态 oyeInboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId"))); //新增入库实绩 oyeInboundResultMapper.insertSelective(oyeInboundResult); return i; } @Transactional(rollbackFor = Exception.class) public synchronized String insertOutboundResult(Map mapValue) throws Exception { if (DataChange.dataToBigDecimal(mapValue.get("reUpdateOutBound")).intValue() == 1) { reUpdateOutBound(mapValue); return "操作成功"; } 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) { //判断该拼是否出库 if (oyeOutboundResultMapper.selectSaleMaterialID(DataChange.dataToBigDecimal(map.get("saleMaterialId"))) != null) { throw new Exception("该分录已出库,无法继续出库"); } //根据实时库存ID获取单重 BigDecimal inventoryId = DataChange.dataToBigDecimal(map.get("inventoryId")); BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); BigDecimal singleWeight = oyeRealtimeInventoryMapper.getSingleWeight(inventoryId); BigDecimal theoryWeightSaleMaterial = singleWeight.multiply(materialNumber); OyeOutboundResult oyeOutboundResult = new OyeOutboundResult(); BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId")); BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight")); BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight")); if(materialNumber == null || materialNumber.intValue() == 0) { throw new Exception("物资件数错误"); } if(netWeight == null || netWeight.intValue() == 0) { continue; } //查询比例 BigDecimal compareValue = DataChange.dataToBigDecimal(oyeRealtimeInventoryMapper.selectCompareValue()); BigDecimal theoryAdd = theoryWeightSaleMaterial.multiply(compareValue.add(new BigDecimal(1))); BigDecimal theorySub = theoryWeightSaleMaterial.multiply(new BigDecimal(1).subtract(compareValue)); if (netWeight.compareTo(theoryAdd) > 0 || netWeight.compareTo(theorySub) < 0) { throw new Exception("净重不在理重的" + compareValue + "范围内"); } //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"))); //更新制单日期 oyeOutboundResult.setMeter(meter); oyeOutboundResult.setMaterialId(materialId); oyeOutboundResult.setTheoryWeight(theoryWeight); oyeOutboundResult.setSingleWeight(singleWeight); oyeOutboundResult.setNetWeight(netWeight); oyeOutboundResult.setMaterialNumber(materialNumber); oyeOutboundResult.setInsertUsername(map.get("userName") + ""); oyeOutboundResult.setInsertTime(new Date()); map.put("singleWeight",singleWeight); //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在 oyeOutboundResult.setInventoryId(inventoryId); map.put("inventoryId",inventoryId); map.put("flag",2); OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map); //更新库存信息BUG修改 //oyeRealtimeInventories.add(oyeRealtimeInventory); oyeRealtimeInventoryMapper.updateByPrimaryKey(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"))); BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter")); if (meter != null && meter.intValue() != 0) { oyeRealtimeInventory.setMeter(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; } /** * 更新实时库存(2025-4-10 14:00:22) */ @Transactional(rollbackFor = Exception.class) public 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 (realTimeMaterialNumber.compareTo(materialNumber) >= 0 ) { oyeRealtimeInventory.setMaterialNumber(realTimeMaterialNumber.subtract(materialNumber)); }else{ throw new Exception("出库件数大于库存件数,无法出库"); } oyeRealtimeInventory.setTheoryWeight(realTimeTheoryWeight.subtract(theoryWeight)); oyeRealtimeInventory.setNetWeight(realTimeNetWeight.subtract(netWeight)); } oyeRealtimeInventory.setUpdateTime(new Date()); return oyeRealtimeInventory; } @Transactional(rollbackFor = Exception.class) public synchronized void updateRealTimeInventoryOye(Map map) throws Exception{ OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(map); oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(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; } @Transactional(rollbackFor = Exception.class) public synchronized String updateInsertRealTime(Map map) throws Exception{ System.out.println("===========" + new Date()); JSONObject jsonObject = new JSONObject(map); System.out.println(jsonObject); System.out.println("===========" + new Date()); // 划分实时库存数据 // 针对原先的库存,需要进行出库;针对划分后的库存需要进行入库;先出后入; // 创建出库需要的数据; BigDecimal newInventoryId = DataChange.dataToBigDecimal(map.get("newInventoryId")); OyeOutboundResult oyeOutboundResult = new OyeOutboundResult(); oyeOutboundResult.setId(oyeOutboundResultMapper.getResultId()); 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 = DataChange.dataToBigDecimal(map.get("singleWeight")); BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter")); oyeOutboundResult.setSaleArea(map.get("oldSaleArea").toString()); oyeOutboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId"))); oyeOutboundResult.setInboundArea(map.get("inboundArea").toString()); oyeOutboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString()); //更新制单日期 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()); oyeOutboundResult.setInventoryId(DataChange.dataToBigDecimal(map.get("inventoryId"))); oyeOutboundResult.setMaterialNumber(DataChange.dataToBigDecimal(map.get("materialNumber"))); oyeOutboundResult.setTheoryWeight(DataChange.dataToBigDecimal(map.get("theoryWeight"))); oyeOutboundResult.setNetWeight(DataChange.dataToBigDecimal(map.get("netWeight"))); Map outBoundMap = new HashMap<>(); outBoundMap.put("inventoryId",map.get("inventoryId")); outBoundMap.put("materialNumber",oyeOutboundResult.getMaterialNumber()); outBoundMap.put("netWeight",oyeOutboundResult.getNetWeight()); outBoundMap.put("theoryWeight",oyeOutboundResult.getTheoryWeight()); outBoundMap.put("flag",2); OyeRealtimeInventory oyeRealtimeInventoryOut = updateRealTimeInventory(outBoundMap); // 创建入库需要的数据 OyeInboundResult oyeInboundResult = new OyeInboundResult(); oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId()); oyeInboundResult.setSaleArea(map.get("saleArea").toString()); oyeInboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId"))); oyeInboundResult.setInboundArea(map.get("inboundArea").toString()); oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString()); 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); OyeRealtimeInventory oyeRealtimeInventoryInsert = null; OyeRealtimeInventory oyeRealtimeInventoryUpdate = null; //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在 BigDecimal inventoryId; if(newInventoryId.intValue() == 0) { inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map); }else{ inventoryId = newInventoryId; } if (inventoryId != null && inventoryId.compareTo(DataChange.dataToBigDecimal(map.get("inventoryId"))) == 0) { throw new Exception("库存ID一致无法划分"); } if (inventoryId == null) { //新增实时库存 map.put("flag",1); oyeRealtimeInventoryInsert = insertRealTimeInventory(map); oyeInboundResult.setInventoryId(oyeRealtimeInventoryInsert.getInventoryId()); }else{ map.put("inventoryId",inventoryId); map.put("flag",1); oyeRealtimeInventoryUpdate = updateRealTimeInventory(map); oyeInboundResult.setInventoryId(oyeRealtimeInventoryUpdate.getInventoryId()); } if (oyeRealtimeInventoryInsert != null) { oyeRealtimeInventoryMapper.insertSelective(oyeRealtimeInventoryInsert); } if (oyeRealtimeInventoryUpdate != null) { oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryUpdate); } oyeInboundResultMapper.insertSelective(oyeInboundResult); oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryOut); oyeOutboundResultMapper.insertSelective(oyeOutboundResult); return "操作成功"; } /** * 划拨实时库存重量 * @param map * @return * @throws Exception */ @Transactional(rollbackFor = Exception.class) public synchronized String updateInsertRealTimeWeight(Map map) throws Exception{ System.out.println("===========" + new Date()); JSONObject jsonObject = new JSONObject(map); System.out.println(jsonObject); System.out.println("===========" + new Date()); // 划分实时库存数据 // 针对原先的库存,需要进行出库;针对划分后的库存需要进行入库;先出后入; // 创建出库需要的数据; BigDecimal newInventoryId = DataChange.dataToBigDecimal(map.get("newInventoryId")); OyeOutboundResult oyeOutboundResult = new OyeOutboundResult(); oyeOutboundResult.setId(oyeOutboundResultMapper.getResultId()); BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId")); BigDecimal singleWeight = DataChange.dataToBigDecimal(map.get("singleWeight")); BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter")); map.put("materialNumber", map.get("materialNumberEdit")); map.put("theoryWeight", map.get("theoryWeightEdit")); map.put("netWeight", map.get("netWeightEdit")); //划拨件数 BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); //划拨理重 BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight")); //划拨净重 BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight")); //重量划拨,允许件数为0 /*if(materialNumber == null || materialNumber.intValue() == 0) { throw new Exception("物资件数错误"); }*/ materialNumber = materialNumber == null || materialNumber.intValue() < 0 ? new BigDecimal(0) : materialNumber; oyeOutboundResult.setInboundArea(map.get("inboundArea").toString()); oyeOutboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("oldConsigneeId"))); oyeOutboundResult.setSaleArea(map.get("oldSaleArea").toString()); oyeOutboundResult.setInboundWarehouse(map.get("oldInboundWarehouse").toString()); //更新制单日期 oyeOutboundResult.setMaterialId(materialId); oyeOutboundResult.setMeter(meter); oyeOutboundResult.setSingleWeight(singleWeight); oyeOutboundResult.setTheoryWeight(theoryWeight); oyeOutboundResult.setNetWeight(netWeight); oyeOutboundResult.setMaterialNumber(materialNumber); oyeOutboundResult.setInsertUsername(map.get("userName") + ""); oyeOutboundResult.setInsertTime(new Date()); oyeOutboundResult.setInventoryId(DataChange.dataToBigDecimal(map.get("inventoryId"))); oyeOutboundResult.setAlternateFields2("库存重量划拨"); oyeOutboundResult.setCapacityNumbher("库存重量划拨"); Map outBoundMap = new HashMap<>(); outBoundMap.put("inventoryId",map.get("inventoryId")); outBoundMap.put("materialNumber",oyeOutboundResult.getMaterialNumber()); outBoundMap.put("netWeight",oyeOutboundResult.getNetWeight()); outBoundMap.put("theoryWeight",oyeOutboundResult.getTheoryWeight()); outBoundMap.put("flag",2); OyeRealtimeInventory oyeRealtimeInventoryOut = updateRealTimeInventory(outBoundMap); // 创建入库需要的数据 OyeInboundResult oyeInboundResult = new OyeInboundResult(); oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId()); oyeInboundResult.setInboundArea(map.get("inboundArea").toString()); oyeInboundResult.setConsigneeId(DataChange.dataToBigDecimal(map.get("consigneeId"))); oyeInboundResult.setSaleArea(map.get("saleArea").toString()); oyeInboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString()); oyeInboundResult.setMeter(meter); oyeInboundResult.setMaterialId(materialId); oyeInboundResult.setSingleWeight(singleWeight); oyeInboundResult.setTheoryWeight(theoryWeight); oyeInboundResult.setNetWeight(netWeight); oyeInboundResult.setMaterialNumber(materialNumber); oyeInboundResult.setInsertUsername(map.get("userName") + ""); oyeInboundResult.setInsertTime(new Date()); oyeInboundResult.setAlternateFields2("库存重量划拨"); oyeInboundResult.setCapacityNumbher("库存重量划拨"); map.put("singleWeight",singleWeight); OyeRealtimeInventory oyeRealtimeInventoryInsert = null; OyeRealtimeInventory oyeRealtimeInventoryUpdate = null; //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在 BigDecimal inventoryId = null ; if(newInventoryId == null || newInventoryId.intValue() == 0) { inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map); }else{ inventoryId = newInventoryId; } if (inventoryId != null && inventoryId.compareTo(DataChange.dataToBigDecimal(map.get("inventoryId"))) == 0) { throw new Exception("库存ID一致无法划分"); } if (inventoryId == null) { //新增实时库存 map.put("flag",1); oyeRealtimeInventoryInsert = insertRealTimeInventory(map); oyeInboundResult.setInventoryId(oyeRealtimeInventoryInsert.getInventoryId()); }else{ map.put("inventoryId",inventoryId); map.put("flag",1); oyeRealtimeInventoryUpdate = updateRealTimeInventory(map); oyeInboundResult.setInventoryId(oyeRealtimeInventoryUpdate.getInventoryId()); } if (oyeRealtimeInventoryInsert != null) { oyeRealtimeInventoryMapper.insertSelective(oyeRealtimeInventoryInsert); } if (oyeRealtimeInventoryUpdate != null) { oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryUpdate); } oyeInboundResultMapper.insertSelective(oyeInboundResult); oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryOut); oyeOutboundResultMapper.insertSelective(oyeOutboundResult); return "操作成功"; } /** * 新厂钢材入库 * @param map * @return * @throws Exception */ @Transactional(rollbackFor = Exception.class) public synchronized String putNewFactory(Map map) throws Exception{ map.put("inboundArea", "厂外库"); System.out.println("+++++++++++" + new Date()); JSONObject jsonObject = new JSONObject(map); System.out.println(jsonObject); System.out.println("+++++++++++" + new Date()); // 新增新厂钢材入库数据 //客户ID BigDecimal consigneeId = DataChange.dataToBigDecimal(map.get("consigneeId")); //片区 String saleArea = map.get("saleArea") == null ? "" : map.get("saleArea").toString(); //仓库 String inboundWarehouse = map.get("inboundWarehouse") == null ? "" : map.get("inboundWarehouse").toString(); //物资信息 BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId")); String materialName = map.get("materialName") == null ? "" : map.get("materialName").toString(); BigDecimal meter = DataChange.dataToBigDecimal(map.get("meter")); //入库件数 BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); //入库净重 BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight")); if(!(consigneeId.doubleValue() > 0)) { throw new Exception("客户不能为空!"); } if(saleArea.isEmpty()){ throw new Exception("片区不能为空!"); } if(inboundWarehouse.isEmpty()){ throw new Exception("仓库不能为空!"); } if(!(materialNumber.doubleValue() > 0)) { throw new Exception("物资件数错误!"); } //重量划拨,允许件数为0 if(!(materialId.doubleValue() > 0)) { throw new Exception("物资不能为空!"); } if(!(netWeight.doubleValue() > 0)) { throw new Exception("物资净重不能为空!"); } //入库理重 BigDecimal theoryWeight; //单件理重 BigDecimal singleWeight; if(materialName.contains("定尺")){ singleWeight = DataChange.dataToBigDecimal(map.get("singleWeight")); if(!(singleWeight.doubleValue() > 0)){ throw new RuntimeException("定尺类必须输入单件理重!"); } if(!(meter.doubleValue() > 0)){ throw new RuntimeException("定尺类必须输入米数!"); } theoryWeight = singleWeight.multiply(materialNumber).setScale(3, RoundingMode.HALF_UP); } else { theoryWeight = DataChange.dataToBigDecimal(map.get("netWeight")); singleWeight = theoryWeight.divide(materialNumber, 3, RoundingMode.HALF_UP); } map.put("theoryWeight", theoryWeight); map.put("singleWeight", singleWeight); // 创建入库需要的数据 OyeInboundResult oyeInboundResult = new OyeInboundResult(); oyeInboundResult.setResultId(oyeInboundResultMapper.getResultId()); oyeInboundResult.setInboundArea(map.get("inboundArea").toString()); oyeInboundResult.setConsigneeId(consigneeId); oyeInboundResult.setSaleArea(saleArea); oyeInboundResult.setInboundWarehouse(inboundWarehouse); oyeInboundResult.setMeter(meter); oyeInboundResult.setMaterialId(materialId); oyeInboundResult.setSingleWeight(singleWeight); oyeInboundResult.setTheoryWeight(theoryWeight); oyeInboundResult.setNetWeight(netWeight); oyeInboundResult.setMaterialNumber(materialNumber); oyeInboundResult.setInsertUsername(map.get("userId") + ""); oyeInboundResult.setInsertTime(new Date()); oyeInboundResult.setAlternateFields2("新厂钢材入库"); oyeInboundResult.setCapacityNumbher("新厂钢材入库"); OyeRealtimeInventory oyeRealtimeInventoryInsert = null; OyeRealtimeInventory oyeRealtimeInventoryUpdate = null; //根据区域,客户,物资,单重,米数,仓库,库区查询实时库存在不在 BigDecimal inventoryId ; inventoryId = oyeRealtimeInventoryMapper.getInventoryId(map); if (inventoryId == null) { //新增实时库存 map.put("flag",1); oyeRealtimeInventoryInsert = insertRealTimeInventory(map); oyeInboundResult.setInventoryId(oyeRealtimeInventoryInsert.getInventoryId()); }else{ map.put("inventoryId",inventoryId); map.put("flag",1); oyeRealtimeInventoryUpdate = updateRealTimeInventory(map); oyeInboundResult.setInventoryId(oyeRealtimeInventoryUpdate.getInventoryId()); } if (oyeRealtimeInventoryInsert != null) { oyeRealtimeInventoryMapper.insertSelective(oyeRealtimeInventoryInsert); } if (oyeRealtimeInventoryUpdate != null) { oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventoryUpdate); } oyeInboundResultMapper.insertSelective(oyeInboundResult); return "操作成功"; } @Transactional(rollbackFor = Exception.class) public List> receiveSendReport(Map map) { return oyeRealtimeInventoryMapper.receiveSendReport(map); } public int updateSingleWeight() { // //查找实时库存里面盘螺的 List inventoryIds = oyeRealtimeInventoryMapper.getInventoryIds(); //获取实时库存的理重 for(BigDecimal inventoryId : inventoryIds) { // BigDecimal singleWeight = oyeRealtimeInventoryMapper.getSingleWeightByOIR(inventoryId); // OyeRealtimeInventory oyeRealtimeInventory = oyeRealtimeInventoryMapper.selectByPrimaryKey(inventoryId); oyeRealtimeInventory.setSingleWeight(singleWeight); oyeRealtimeInventoryMapper.updateByPrimaryKeySelective(oyeRealtimeInventory); } return 1; } public int batchUpdateRealTime(Map mapValue) { //获取 List> mapList = oyeRealtimeInventoryMapper.getRealTimeGroupBy(mapValue); for(Map map : mapList) { if (DataChange.dataToBigDecimal(map.get("num")).intValue() > 1) { List> mapList1 = oyeRealtimeInventoryMapper.getInventoryInfo(map); //第一个为移入,下一个为移出; for(int i=0;i < mapList1.size();i++ ){ if(i == 0) { continue; } Map stringObjectMap = new HashMap<>(); stringObjectMap.putAll(mapList1.get(0)); Map realMap = mapList1.get(i); realMap.put("newInventoryId",stringObjectMap.get("inventoryId")); realMap.put("oldSaleArea",stringObjectMap.get("saleArea")); try { updateInsertRealTime(realMap); } catch (Exception e) { e.printStackTrace(); } } } } return 1; } @Transactional(rollbackFor = Exception.class) public synchronized int reUpdateOutBound(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) { BigDecimal resultId = DataChange.dataToBigDecimal(map.get("resultId")); BigDecimal weightBatchId = DataChange.dataToBigDecimal(map.get("weightBatchId")); //判断有没有实绩ID if(resultId == null || resultId.intValue() == 0) { continue; } //获取前端传输过来的件数、理重、净重 BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber")); BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight")); BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight")); if(materialNumber == null || materialNumber.intValue() == 0) { throw new Exception("物资件数错误"); } if(theoryWeight == null || theoryWeight.intValue() == 0) { throw new Exception("理重信息错误"); } if(netWeight == null || netWeight.intValue() == 0) { throw new Exception("净重信息错误"); } //根据实绩id获取件数、理重、净重 Map oldMes = oyeOutboundResultMapper.getOldMes(resultId); BigDecimal materialNumberOld = materialNumber.subtract(DataChange.dataToBigDecimal(oldMes.get("materialNumber"))); BigDecimal netWeightOld = netWeight.subtract(DataChange.dataToBigDecimal(oldMes.get("netWeight"))); BigDecimal theoryWeightOld = theoryWeight.subtract(DataChange.dataToBigDecimal(oldMes.get("theoryWeight"))); if (netWeightOld.compareTo(new BigDecimal(0)) == 0 && theoryWeightOld.compareTo(new BigDecimal(0)) == 0 && materialNumberOld.compareTo(new BigDecimal(0)) == 0) { continue; } OyeOutboundResult oyeOutboundResult = oyeOutboundResultMapper.selectByPrimaryKey(resultId); oyeOutboundResult.setTheoryWeight(theoryWeight); oyeOutboundResult.setNetWeight(netWeight); oyeOutboundResult.setMaterialNumber(materialNumber); oyeOutboundResult.setUpdateTime(new Date()); map.put("flag",2); Map updateRealMap = new HashMap<>(); updateRealMap.put("inventoryId",oldMes.get("inventoryId")); updateRealMap.put("materialNumber", materialNumberOld); updateRealMap.put("netWeight",netWeightOld); updateRealMap.put("theoryWeight",theoryWeightOld); OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(updateRealMap); //库存批量更新BUG //oyeRealtimeInventories.add(oyeRealtimeInventory); oyeRealtimeInventoryMapper.updateByPrimaryKey(oyeRealtimeInventory); TmstruckWeightBatch tmstruckWeightBatch = tmstruckWeightBatchMapper.selectByPrimaryKey(weightBatchId); tmstruckWeightBatch.setBatchNetWeight(netWeight); 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.updateSaleMakeDate1(updateMap); oyeOutboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId"))); oyeOutboundResults.add(oyeOutboundResult); } if(oyeOutboundResults.isEmpty()){ return 1; } oyeOutboundResultMapper.batchUpdate(oyeOutboundResults); //oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventories); tmstruckWeightBatchMapper.batchUpdate(tmstruckWeightBatches); return 1; } public void reportToExcel() { try { Calendar calendar = Calendar.getInstance(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd"); String dateStr = simpleDateFormat.format(calendar.getTime()); //1.设置写入文件夹地址和excel文件名称 String filename = "/shared/" + dateStr + ".xlsx"; //2.调用easyexcel里的方法实现写操作 //String filename = "D:\\write.xlsx"; //write方法的两个参数:第一个参数是:文件路径,第二个参数是:实体类的class List list = new ArrayList<>(); Map map = new HashMap<>(); SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); DataChange.queryDataByDateTime(null,null,map,sdfDateTime); List> mapList = oyeRealtimeInventoryMapper.receiveSendReport(map); String excelDate = sdfDateTime.format(new Date()); for(Map mapVal : mapList) { mapVal.put("excelDate",excelDate); JSONObject jsonObject = new JSONObject(mapVal); String mapValToString = jsonObject.toString(); ReceiveSendReport receiveSendReport = JSON.parseObject(mapValToString,ReceiveSendReport.class); list.add(receiveSendReport); } EasyExcel.write(filename, ReceiveSendReport.class).sheet("出入库台账报表").doWrite(list); } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "59 59 23 * * ?") public synchronized void dsExportExcel() { reportToExcel(); } }