Commit 59559289 by 杨清松

销售计划编辑增加可分配余量字段

parent e2b722b1
package com.xyst.dinas.sales.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.UUID;
/**
* 销售计划明细
......@@ -32,6 +33,7 @@ public class SalesPlanDetail implements Serializable{
private Double stockAmount;
private Double planAmount;
private Double actualSaleAmount;
private BigDecimal distributedVolum;
public UUID getMasterId() {
......@@ -142,6 +144,12 @@ public class SalesPlanDetail implements Serializable{
public void setActualSaleAmount(Double actualSaleAmount) {
this.actualSaleAmount = actualSaleAmount;
}
public BigDecimal getDistributedVolum() {
return distributedVolum;
}
public void setDistributedVolum(BigDecimal distributedVolum) {
this.distributedVolum = distributedVolum;
}
}
......@@ -194,7 +194,13 @@ public class SalesPlanServiceImpl implements SalesPlanService{
salesPlanDetail.setStockAmount(detail.getDouble(SalesPlanConstant.stockAmount));
salesPlanDetail.setPlanAmount(detail.getDouble(SalesPlanConstant.planAmount));
salesPlanDetail.setActualSaleAmount(detail.getDouble(SalesPlanConstant.actualSaleAmount));
//计算销售计划可分配余量
JSONObject jsonObject = new JSONObject(salesPlanDetail);
KObject planningCycle = salesPlanKObject.get("planningCycle");
Date startTime = planningCycle.getDate("startTime");
Date endTime = planningCycle.getDate("endTime");
BigDecimal distributedVolum = calcDistributedVolum(jsonObject, startTime, endTime);
salesPlanDetail.setDistributedVolum(distributedVolum);
salesPlanDetails.add(salesPlanDetail);
}
salesPlan.setSalesPlanDetails(salesPlanDetails);
......@@ -299,36 +305,7 @@ public class SalesPlanServiceImpl implements SalesPlanService{
//List<KObject> salesPlanDetails = salesplan.get(SalesPlanConstant.SalesPlanDetails).toList();
for (int k = 0; k < jsonArray.length(); k++) {
JSONObject jsonObject = jsonArray.getJSONObject(k);
//}
//for (KObject salesPlanDetail : salesPlanDetails) {
//合同可用余量
BigDecimal contractAmount = jsonObject.getBigDecimal("contractAmount");
//实际销售量
BigDecimal actualSaleAmount = jsonObject.getBigDecimal("actualSaleAmount");
//查询临时销售计划分配量之和
//根据销售计划周期内的所有临时销售计划
UUID contractId = UUID.fromString(jsonObject.getString(SalesPlanConstant.contract));
//根据开始时间和结束时间查询临时销售计划
List<KObject> salesTempPlanByTimeList = salesPlanDao.querySalesTempPlanByTime(startTime, endTime, contractId);
//获取砂石类型
UUID dinasTypeId = UUID.fromString(jsonObject.getString((SalesPlanConstant.dinasType)));
//筛选同一个砂石类型下的明细
//计算临时销售计划本期分配量之和
BigDecimal totalSalesPlanAmount = new BigDecimal("0");
if(salesTempPlanByTimeList.size() > 0) {
for (int i = 0; i < salesTempPlanByTimeList.size(); i++) {
KObject salesTempPlan = salesTempPlanByTimeList.get(i);
List<KObject> salesPlanTempDetails = salesTempPlan.get("SalesPlanTempDetail").toList();
KObject salesPlanTempDetail = salesPlanTempDetails.stream().filter(detail -> detail.get("dinasType").getUuid("id").equals(dinasTypeId)).findAny().orElse(null);
if (salesPlanTempDetail != null) {
totalSalesPlanAmount = totalSalesPlanAmount.add(salesPlanTempDetail.getBigDecimal("salesPlanAmount"));
}
}
}
//可分配量 <=合同可用余量+实际销售量 - 临时销售计划分配量之和
BigDecimal distributedVolum = contractAmount.add(actualSaleAmount).subtract(totalSalesPlanAmount);
BigDecimal distributedVolum = calcDistributedVolum(jsonObject, startTime, endTime);
if(jsonObject.getBigDecimal("planAmount").compareTo(BigDecimal.ZERO) != 0 && jsonObject.getBigDecimal("planAmount").compareTo(distributedVolum) > -1) { //大于等于
Map<String, Object> verifyMap = new HashMap<String, Object>();
verifyMap.put("contractName", jsonObject.getString("contractName"));
......@@ -336,11 +313,40 @@ public class SalesPlanServiceImpl implements SalesPlanService{
verifyMap.put("projectName", jsonObject.getString("projectName"));
verifyMap.put("distributedVolum", distributedVolum);
verifyList.add(verifyMap);
//return verifyMap;
}
}
return verifyList;
}
public BigDecimal calcDistributedVolum(JSONObject jsonObject,Date startTime,Date endTime) {
//合同可用余量
BigDecimal contractAmount = jsonObject.getBigDecimal("contractAmount");
//实际销售量
BigDecimal actualSaleAmount = jsonObject.getBigDecimal("actualSaleAmount");
//查询临时销售计划分配量之和
//根据销售计划周期内的所有临时销售计划
UUID contractId = UUID.fromString(jsonObject.getString(SalesPlanConstant.contract));
//根据开始时间和结束时间查询临时销售计划
List<KObject> salesTempPlanByTimeList = salesPlanDao.querySalesTempPlanByTime(startTime, endTime, contractId);
//获取砂石类型
UUID dinasTypeId = UUID.fromString(jsonObject.getString((SalesPlanConstant.dinasType)));
//筛选同一个砂石类型下的明细
//计算临时销售计划本期分配量之和
BigDecimal totalSalesPlanAmount = new BigDecimal("0");
if(salesTempPlanByTimeList.size() > 0) {
for (int i = 0; i < salesTempPlanByTimeList.size(); i++) {
KObject salesTempPlan = salesTempPlanByTimeList.get(i);
List<KObject> salesPlanTempDetails = salesTempPlan.get("SalesPlanTempDetail").toList();
KObject salesPlanTempDetail = salesPlanTempDetails.stream().filter(detail -> detail.get("dinasType").getUuid("id").equals(dinasTypeId)).findAny().orElse(null);
if (salesPlanTempDetail != null) {
totalSalesPlanAmount = totalSalesPlanAmount.add(salesPlanTempDetail.getBigDecimal("salesPlanAmount"));
}
}
}
//可分配量 <=合同可用余量+实际销售量 - 临时销售计划分配量之和
BigDecimal distributedVolum = contractAmount.add(actualSaleAmount).subtract(totalSalesPlanAmount);
return distributedVolum;
}
@Override
public Object submitSalesPlan(UUID salesPlanId) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment