123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- 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<Map<String, Object>> getOyeInboundResult(Map<String, Object> mapValue) {
- return oyeInboundResultMapper.getOyeInboundResult(mapValue);
- }
- public List<Map<String, Object>> getOyeOutboundResult(Map<String, Object> mapValue) {
- return oyeOutboundResultMapper.oyeOutboundResultMapper(mapValue);
- }
- public List<Map<String, Object>> getOyeRealTimeResult(Map<String, Object> mapValue) {
- return oyeRealtimeInventoryMapper.getOyeRealTimeResult(mapValue);
- }
- /**
- * 入库作业
- * @param mapValue
- * @return
- */
- @Transactional(rollbackFor = Exception.class)
- public synchronized String insertInboundResult(Map<String, Object> mapValue) throws Exception {
- List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
- List<OyeInboundResult> OyeInboundResults = new ArrayList<>();
- List<OyeRealtimeInventory> oyeRealtimeInventoriesInsert = new ArrayList<>();
- List<OyeRealtimeInventory> oyeRealtimeInventoriesUpdate = new ArrayList<>();
- System.out.println("===========" + new Date());
- JSONObject jsonObject = new JSONObject(mapValue);
- System.out.println(jsonObject);
- System.out.println("===========" + new Date());
- for (Map<String,Object> 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<String,Object> mapValue) throws Exception {
- List<OyeOutboundResult> oyeOutboundResults = new ArrayList<>();
- List<TmstruckWeightBatch> tmstruckWeightBatches = new ArrayList<>();
- List<OyeRealtimeInventory> oyeRealtimeInventories = new ArrayList<>();
- List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
- System.out.println("===========" + new Date());
- JSONObject jsonObject = new JSONObject(mapValue);
- System.out.println(jsonObject);
- System.out.println("===========" + new Date());
- for (Map<String,Object> 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<String, Object> 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<String,Object> 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<String,Object> 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<String,Object> 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;
- }
- }
|