Commit 08abb45c by 杨清松

临时销售计划校验

parent 57378297
......@@ -157,4 +157,23 @@ public class SalesPlanDao {
});
}
/**
* 查找指定时间范围内的已提交或已审批的销售计划
* @param startTime
* @param endTime
* @return
*/
public List<KObject> querySalesPlanByTime(Date startTime,Date endTime) {
return template.execute(session ->{
String hql = "from " + SalesPlanConstant.ENTITY + " where planningCycle.startTime >=:startTime and planningCycle.endTime <=:endTime"
+ " and (approveState = 1 or approveState =2)";
Query<KObject> query = session.createQuery(hql, KObject.class);
query.setParameter("startTime", startTime);
query.setParameter("endTime", endTime);
List<KObject> resultList = query.getResultList();
return resultList;
});
}
}
......@@ -30,6 +30,7 @@ import com.beecode.xlib.utils.StringUtil;
import com.jiuqi.np.syntax.parser.ANTLRParser.ifthen_eval_return;
import com.xyst.dinas.biz.constant.DinasTypeConstant;
import com.xyst.dinas.biz.constant.PlanningCycleConstant;
import com.xyst.dinas.biz.service.PlanningCycleService;
import com.xyst.dinas.biz.service.StationService;
import com.xyst.dinas.contract.constant.ContractConstant;
import com.xyst.dinas.project.constant.ProjectFiledConstant;
......@@ -57,6 +58,9 @@ public class SalesPlanServiceImpl implements SalesPlanService{
private NeedPlanService needPlanService;
@Autowired
private PlanningCycleService planningCycleService;
@Autowired
private StaffService staffService;
@Transactional
......@@ -312,6 +316,7 @@ public class SalesPlanServiceImpl implements SalesPlanService{
verifyMap.put("dinasTypeName", jsonObject.getString("dinasTypeName"));
verifyMap.put("projectName", jsonObject.getString("projectName"));
verifyMap.put("distributedVolum", distributedVolum);
verifyMap.put("contractAmount", jsonObject.getBigDecimal("contractAmount"));
verifyList.add(verifyMap);
}
}
......@@ -336,7 +341,7 @@ public class SalesPlanServiceImpl implements SalesPlanService{
if(salesTempPlanByTimeList.size() > 0) {
for (int i = 0; i < salesTempPlanByTimeList.size(); i++) {
KObject salesTempPlan = salesTempPlanByTimeList.get(i);
List<KObject> salesPlanTempDetails = salesTempPlan.get("SalesPlanTempDetail").toList();
List<KObject> salesPlanTempDetails = salesTempPlan.get("SalesPlanTempDetails").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"));
......@@ -377,7 +382,7 @@ public class SalesPlanServiceImpl implements SalesPlanService{
if(salesTempPlanByTimeList.size() > 0) {
for (int i = 0; i < salesTempPlanByTimeList.size(); i++) {
KObject salesTempPlan = salesTempPlanByTimeList.get(i);
List<KObject> salesPlanTempDetails = salesTempPlan.get("SalesPlanTempDetail").toList();
List<KObject> salesPlanTempDetails = salesTempPlan.get("SalesPlanTempDetails").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"));
......@@ -393,7 +398,79 @@ public class SalesPlanServiceImpl implements SalesPlanService{
return ResponseObj.success("提交成功");
}
@Override
public Object submitTempSalesPlan(JSONObject jsonObject) {
List<Map<String, Object>> verifyTempSalesPlanList = verifyTempSalesPlan(jsonObject);
if(verifyTempSalesPlanList.size() > 0) {
return ResponseObj.success("校验不通过", verifyTempSalesPlanList);
} else {
return ResponseObj.success(null);
}
}
public List<Map<String, Object>> verifyTempSalesPlan(JSONObject jsonObject) {
//获取计划周期
UUID planningCycleId = UUID.fromString(jsonObject.getJSONObject("planningCycle").getString("id"));
KObject planningCycle = planningCycleService.load(planningCycleId); //计划周期
Date startTime = planningCycle.getDate(PlanningCycleConstant.startTime);
Date endTime = planningCycle.getDate(PlanningCycleConstant.endTime);
UUID contractId = UUID.fromString(jsonObject.getJSONObject("contract").getString("id"));
//根据开始时间和结束时间查询临时销售计划
List<KObject> salesTempPlanByTimeList = salesPlanDao.querySalesTempPlanByTime(startTime, endTime, contractId);
//根据开始时间和结束时间查询销售计划
List<KObject> salesPlanByTimeList = salesPlanDao.querySalesPlanByTime(startTime, endTime);
//获取临时销售计划明细
JSONArray salesPlanTempDetails = jsonObject.getJSONArray("SalesPlanTempDetails");
List<Map<String, Object>> verifyList = new ArrayList<Map<String, Object>>();
if(salesPlanTempDetails.length() > 0) {
for (int i = 0; i < salesPlanTempDetails.length(); i++) {
JSONObject salesPlanTempDetail = salesPlanTempDetails.getJSONObject(i);
//获取砂石类型
UUID dinasTypeId = UUID.fromString(salesPlanTempDetail.getJSONObject("dinasType").getString("id"));
BigDecimal contractAvailableAmount = salesPlanTempDetail.getBigDecimal("contractAvailableAmount"); //合同可用余量
BigDecimal actualSaleAmount = salesPlanTempDetail.getBigDecimal("actualSaleAmount"); //实际销售量
BigDecimal salesPlanAmount = salesPlanTempDetail.getBigDecimal("salesPlanAmount"); //本期分配量
//查询同一计划周期内,同一个合同和砂石类型下的临时销售计划分配量之和
//筛选同一个砂石类型下的明细
//计算临时销售计划本期分配量之和
BigDecimal totalTempSalesPlanAmount = new BigDecimal("0");
if(salesTempPlanByTimeList.size() > 0) {
for (int k = 0; k < salesTempPlanByTimeList.size(); k++) {
KObject salesTempPlan = salesTempPlanByTimeList.get(k);
List<KObject> oldSalesPlanTempDetails = salesTempPlan.get("SalesPlanTempDetails").toList();
KObject oldSalesPlanTempDetail = oldSalesPlanTempDetails.stream().filter(detail -> detail.get("dinasType").getUuid("id").equals(dinasTypeId)).findAny().orElse(null);
if (oldSalesPlanTempDetail != null) {
totalTempSalesPlanAmount = totalTempSalesPlanAmount.add(oldSalesPlanTempDetail.getBigDecimal("salesPlanAmount"));
}
}
}
//查询同一计划周期内,同一个合同和砂石类型下的销售计划分配量之和
BigDecimal totalSalesPlanAmount = new BigDecimal("0");
if(salesPlanByTimeList.size() > 0) {
for (int k = 0; k < salesPlanByTimeList.size(); k++) {
KObject salesPlan = salesPlanByTimeList.get(k);
List<KObject> oldSalesPlanDetails = salesPlan.get("SalesPlanDetails").toList();
KObject oldSalesPlanDetail = oldSalesPlanDetails.stream().filter(detail -> detail.get("dinasType").getUuid("id").equals(dinasTypeId) && detail.get("contract").getUuid("id").equals(contractId)).findAny().orElse(null);
if (oldSalesPlanDetail != null) { //合同与砂石类型共同筛选
totalSalesPlanAmount = totalSalesPlanAmount.add(oldSalesPlanDetail.getBigDecimal("planAmount"));
}
}
}
//可分配量 <=合同可用余量+实际销售量 - 临时销售计划分配量之和 - 日常销售计划分配量
BigDecimal distributedVolum = contractAvailableAmount.add(actualSaleAmount).subtract(totalTempSalesPlanAmount).subtract(totalSalesPlanAmount);
if(salesPlanAmount.compareTo(BigDecimal.ZERO) != 0 && (salesPlanAmount.compareTo(distributedVolum) > -1 || salesPlanAmount.compareTo(contractAvailableAmount) > -1)) { //大于等于
Map<String, Object> map = new HashMap<>();
map.put("dinasTypeName", salesPlanTempDetail.getString("dinasTypeName"));
map.put("distributedVolum", distributedVolum);
map.put("contractAvailableAmount", salesPlanTempDetail.getBigDecimal("contractAvailableAmount"));
verifyList.add(map);
}
}
}
return verifyList;
}
......
......@@ -56,5 +56,7 @@ public interface SalesPlanService {
public List<Map<String, Object>> modify(JSONObject jsonObject);
public Object submitSalesPlan(UUID jsonObject);
public Object submitTempSalesPlan(JSONObject jsonObject);
}
......@@ -146,5 +146,12 @@ public class SalesPlanController {
return ResponseObj.error("操作失败", null);
}
}
//临时销售计划提交
@PostMapping("/tempSalesPlan/submit")
public Object submitTempSalesPlan(@RequestBody String body) {
Object jObject = salesPlanService.submitTempSalesPlan(new JSONObject(body));
return jObject;
}
}
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