|
@@ -48,6 +48,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.time.temporal.ChronoUnit;
|
|
@@ -129,6 +130,11 @@ public class PsiWareHouseBasicService {
|
|
|
queryWrapper.eq("b.trade_name", dto.getTradeName());
|
|
queryWrapper.eq("b.trade_name", dto.getTradeName());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isNotEmpty(dto.getWareHouseType())) {
|
|
|
|
|
+ queryWrapper.eq("b.ware_house_type", dto.getWareHouseType());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (StringUtils.isNotEmpty(dto.getWareHouseNumber())) {
|
|
if (StringUtils.isNotEmpty(dto.getWareHouseNumber())) {
|
|
|
queryWrapper.eq("a.ware_house_number", dto.getWareHouseNumber());
|
|
queryWrapper.eq("a.ware_house_number", dto.getWareHouseNumber());
|
|
|
}
|
|
}
|
|
@@ -172,6 +178,11 @@ public class PsiWareHouseBasicService {
|
|
|
queryWrapper.eq("a.collect_no", dto.getCollectNo());
|
|
queryWrapper.eq("a.collect_no", dto.getCollectNo());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isNotEmpty(dto.getWareHouseType())) {
|
|
|
|
|
+ queryWrapper.eq("b.ware_house_type", dto.getWareHouseType());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
String[] collectDates = dto.getCollectDates();
|
|
String[] collectDates = dto.getCollectDates();
|
|
|
if (collectDates != null) {
|
|
if (collectDates != null) {
|
|
|
|
|
|
|
@@ -179,11 +190,11 @@ public class PsiWareHouseBasicService {
|
|
|
}
|
|
}
|
|
|
IPage<PsiWareHouseDto> iPage = basicMapper.collectHistoryList(page, queryWrapper);
|
|
IPage<PsiWareHouseDto> iPage = basicMapper.collectHistoryList(page, queryWrapper);
|
|
|
//根据时间查询当前库存
|
|
//根据时间查询当前库存
|
|
|
- //iPage.getRecords().stream().forEach(i->{
|
|
|
|
|
- // //根据商品名称,物品类型,时间查当前库存
|
|
|
|
|
- // String d = basicMapper.getCollectInfoByTime(i.getGoodsName(),i.getCollectType(),i.getDateTest2());
|
|
|
|
|
- // i.setCurrentInventory(d);
|
|
|
|
|
- //});
|
|
|
|
|
|
|
+ iPage.getRecords().stream().forEach(i->{
|
|
|
|
|
+ //根据商品名称,物品类型,时间查当前库存
|
|
|
|
|
+ String d = basicMapper.getCollectInfoByTime(i.getGoodsName(),i.getCollectType(),i.getDateTest2());
|
|
|
|
|
+ i.setCurrentInventory(d);
|
|
|
|
|
+ });
|
|
|
return iPage;
|
|
return iPage;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1054,22 +1065,40 @@ public class PsiWareHouseBasicService {
|
|
|
item.setLossNumber("0");
|
|
item.setLossNumber("0");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (StringUtils.isNotBlank(item.getNotSurplusStock())) {
|
|
|
|
|
|
|
+ /*if (StringUtils.isNotBlank(item.getNotSurplusStock())) {
|
|
|
String notSurplusStockStr = item.getNotSurplusStock();
|
|
String notSurplusStockStr = item.getNotSurplusStock();
|
|
|
String specStr = item.getSpec();
|
|
String specStr = item.getSpec();
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(notSurplusStockStr) || StringUtils.isBlank(specStr)) {
|
|
if (StringUtils.isBlank(notSurplusStockStr) || StringUtils.isBlank(specStr)) {
|
|
|
item.setNotSurplusStock(item.getNotSurplusStock());
|
|
item.setNotSurplusStock(item.getNotSurplusStock());
|
|
|
}else{
|
|
}else{
|
|
|
- double notSurplusStock = Double.parseDouble(notSurplusStockStr);
|
|
|
|
|
- double spec = Double.parseDouble(specStr);
|
|
|
|
|
|
|
+ BigDecimal notSurplusStockBD = new BigDecimal(notSurplusStockStr);
|
|
|
|
|
+ BigDecimal specBD = new BigDecimal(specStr);
|
|
|
|
|
|
|
|
- if (spec == 0) {
|
|
|
|
|
|
|
+ if (specBD.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
item.setNotSurplusStock(item.getNotSurplusStock());
|
|
item.setNotSurplusStock(item.getNotSurplusStock());
|
|
|
}else{
|
|
}else{
|
|
|
- double total = notSurplusStock / spec;
|
|
|
|
|
- String totalStr = String.valueOf( total);
|
|
|
|
|
- item.setNotSurplusStock(totalStr);
|
|
|
|
|
|
|
+ BigDecimal totalBD = notSurplusStockBD.divide(specBD, 4, RoundingMode.HALF_UP).stripTrailingZeros();
|
|
|
|
|
+ item.setNotSurplusStock(totalBD.toPlainString());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isNotBlank(item.getBorrowNumber())) {
|
|
|
|
|
+ String notSurplusStockStr = item.getBorrowNumber();
|
|
|
|
|
+ String specStr = item.getSpec();
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isBlank(notSurplusStockStr) || StringUtils.isBlank(specStr)) {
|
|
|
|
|
+ item.setBorrowNumber(item.getBorrowNumber());
|
|
|
|
|
+ }else{
|
|
|
|
|
+ BigDecimal notSurplusStockBD = new BigDecimal(notSurplusStockStr);
|
|
|
|
|
+ BigDecimal specBD = new BigDecimal(specStr);
|
|
|
|
|
+
|
|
|
|
|
+ if (specBD.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
+ item.setBorrowNumber(item.getBorrowNumber());
|
|
|
|
|
+ }else{
|
|
|
|
|
+ BigDecimal totalBD = notSurplusStockBD.divide(specBD, 4, RoundingMode.HALF_UP).stripTrailingZeros();
|
|
|
|
|
+ item.setBorrowNumber(totalBD.toPlainString());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1081,52 +1110,52 @@ public class PsiWareHouseBasicService {
|
|
|
if (StringUtils.isBlank(specStr)) {
|
|
if (StringUtils.isBlank(specStr)) {
|
|
|
item.setLossNumber(item.getLossNumber());
|
|
item.setLossNumber(item.getLossNumber());
|
|
|
}else{
|
|
}else{
|
|
|
- double spec = Double.parseDouble(specStr);
|
|
|
|
|
- double lossNumber = Double.parseDouble(lossNumberStr);
|
|
|
|
|
- if (spec == 0) {
|
|
|
|
|
|
|
+ BigDecimal specBD = new BigDecimal(specStr);
|
|
|
|
|
+ BigDecimal lossNumberBD = new BigDecimal(lossNumberStr);
|
|
|
|
|
+ if (specBD.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
item.setLossNumber(item.getLossNumber());
|
|
item.setLossNumber(item.getLossNumber());
|
|
|
}else{
|
|
}else{
|
|
|
- double total = lossNumber / spec;
|
|
|
|
|
- String totalStr = String.valueOf( total);
|
|
|
|
|
- item.setLossNumber(totalStr);
|
|
|
|
|
|
|
+ BigDecimal totalBD = lossNumberBD.divide(specBD, 4, RoundingMode.HALF_UP).stripTrailingZeros();
|
|
|
|
|
+ item.setLossNumber(totalBD.toPlainString());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 历史库存
|
|
// 历史库存
|
|
|
if(StringUtils.isNotBlank(item.getTradeNumber()) && dateRange != null && dateRange.length == 2){
|
|
if(StringUtils.isNotBlank(item.getTradeNumber()) && dateRange != null && dateRange.length == 2){
|
|
|
- double spec = StringUtils.isNotBlank(item.getSpec())
|
|
|
|
|
- ? Double.parseDouble(item.getSpec()) : 0;
|
|
|
|
|
-
|
|
|
|
|
- double allCurrentInventory = StringUtils.isNotBlank(item.getAllCurrentInventory())
|
|
|
|
|
- ? Double.parseDouble(item.getAllCurrentInventory()) : 0;
|
|
|
|
|
-
|
|
|
|
|
- double notSurplusStock = StringUtils.isNotBlank(item.getNotSurplusStock())
|
|
|
|
|
- ? Double.parseDouble(item.getNotSurplusStock()) : 0;
|
|
|
|
|
-
|
|
|
|
|
- double lossNumber = StringUtils.isNotBlank(item.getLossNumber())
|
|
|
|
|
- ? Double.parseDouble(item.getLossNumber()) : 0;
|
|
|
|
|
-
|
|
|
|
|
- double tradeNumber = StringUtils.isNotBlank(item.getAllNumber())
|
|
|
|
|
- ? Double.parseDouble(item.getAllNumber()) : 0;
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- //日期范围之后的领用数据
|
|
|
|
|
- double afterNotSurplusStock = StringUtils.isNotBlank(item.getAfterNotSurplusStock())
|
|
|
|
|
- ? Double.parseDouble(item.getAfterNotSurplusStock()) : 0;
|
|
|
|
|
- //日期范围之后的报损数据
|
|
|
|
|
- double afterLossNumber = StringUtils.isNotBlank(item.getAfterLossNumber())
|
|
|
|
|
- ? Double.parseDouble(item.getAfterLossNumber()) : 0;
|
|
|
|
|
- //日期范围之后的入库数据
|
|
|
|
|
- double afterTradeNumber = StringUtils.isNotBlank(item.getAfterTradeNumber())
|
|
|
|
|
- ? Double.parseDouble(item.getAfterTradeNumber()) : 0;
|
|
|
|
|
-
|
|
|
|
|
//计算历史库存时,需要对时间范围之后的入库,领用,报损进行处理
|
|
//计算历史库存时,需要对时间范围之后的入库,领用,报损进行处理
|
|
|
- double historyInventory = allCurrentInventory - tradeNumber + notSurplusStock + lossNumber - afterTradeNumber + (afterNotSurplusStock/spec) + (afterLossNumber/spec);
|
|
|
|
|
- if(historyInventory < 0){
|
|
|
|
|
- historyInventory = 0;
|
|
|
|
|
|
|
+ //当前库存
|
|
|
|
|
+ BigDecimal bdCurrentInv = new BigDecimal(item.getAllCurrentInventory() != null ? item.getAllCurrentInventory() : "0");
|
|
|
|
|
+ //当月入库
|
|
|
|
|
+ BigDecimal bdTradeNum = new BigDecimal(item.getAllNumber() != null ? item.getAllNumber() : "0");
|
|
|
|
|
+ //当月领取
|
|
|
|
|
+ //BigDecimal bdNotSurplus = new BigDecimal(item.getNotSurplusStock() != null ? item.getNotSurplusStock() : "0");
|
|
|
|
|
+ //当月领取
|
|
|
|
|
+ BigDecimal borrowNumber = new BigDecimal(item.getBorrowNumber() != null ? item.getBorrowNumber() : "0");
|
|
|
|
|
+ //当月报损
|
|
|
|
|
+ BigDecimal bdLoss = new BigDecimal(item.getLossNumber() != null ? item.getLossNumber() : "0");
|
|
|
|
|
+ //日期范围之后的入库数据
|
|
|
|
|
+ BigDecimal bdAfterTrade = new BigDecimal(item.getAfterTradeNumber() != null ? item.getAfterTradeNumber() : "0");
|
|
|
|
|
+ //日期范围之后的无剩余库存
|
|
|
|
|
+ BigDecimal bdAfterNotSurplus = new BigDecimal(item.getAfterNotSurplusStock() != null ? item.getAfterNotSurplusStock() : "0");
|
|
|
|
|
+ //日期范围之后的报损数据
|
|
|
|
|
+ BigDecimal bdAfterLoss = new BigDecimal(item.getAfterLossNumber() != null ? item.getAfterLossNumber() : "0");
|
|
|
|
|
+ //规格
|
|
|
|
|
+ BigDecimal bdSpec = new BigDecimal(item.getSpec() != null && !item.getSpec().isEmpty() ? item.getSpec() : "0");
|
|
|
|
|
+ //历史库存 = 当前库存 - 入库 + 领取 + 报损 - 日期范围之后的入库数据 + 日期范围之后无剩余库存 + 日期范围之后的报损数据
|
|
|
|
|
+ BigDecimal historyInventoryBD;
|
|
|
|
|
+ if (bdSpec.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
+ historyInventoryBD = bdCurrentInv.subtract(bdTradeNum).add(borrowNumber).add(bdLoss).subtract(bdAfterTrade);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ historyInventoryBD = bdCurrentInv.subtract(bdTradeNum).add(borrowNumber).add(bdLoss).subtract(bdAfterTrade)
|
|
|
|
|
+ .add(bdAfterNotSurplus.divide(bdSpec, 4, RoundingMode.HALF_UP))
|
|
|
|
|
+ .add(bdAfterLoss.divide(bdSpec, 4, RoundingMode.HALF_UP));
|
|
|
|
|
+ }
|
|
|
|
|
+ historyInventoryBD = historyInventoryBD.setScale(4, RoundingMode.HALF_UP).stripTrailingZeros();
|
|
|
|
|
+ if(historyInventoryBD.compareTo(BigDecimal.ZERO) < 0){
|
|
|
|
|
+ historyInventoryBD = BigDecimal.ZERO;
|
|
|
}
|
|
}
|
|
|
- item.setHisTradeNumber(String.valueOf(historyInventory));
|
|
|
|
|
|
|
+ item.setHisTradeNumber(historyInventoryBD.toPlainString());
|
|
|
item.setDateRange(dateRange[0] + "至" + dateRange[1]);
|
|
item.setDateRange(dateRange[0] + "至" + dateRange[1]);
|
|
|
}else{
|
|
}else{
|
|
|
item.setHisTradeNumber("0");
|
|
item.setHisTradeNumber("0");
|
|
@@ -1484,10 +1513,10 @@ public class PsiWareHouseBasicService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- // 去除小数点后无效的0
|
|
|
|
|
|
|
+ // 四舍五入最多保留小数点后四位,并去除末尾无效的0
|
|
|
public String convertByBigDecimal(String value) {
|
|
public String convertByBigDecimal(String value) {
|
|
|
BigDecimal bigDecimal = new BigDecimal(value);
|
|
BigDecimal bigDecimal = new BigDecimal(value);
|
|
|
- BigDecimal res = bigDecimal.stripTrailingZeros();
|
|
|
|
|
|
|
+ BigDecimal res = bigDecimal.setScale(4, RoundingMode.HALF_UP).stripTrailingZeros();
|
|
|
return res.toPlainString();
|
|
return res.toPlainString();
|
|
|
}
|
|
}
|
|
|
|
|
|