Commit e2b722b1 by 杨清松

销售计划提交校验

parent cafd3ef2
......@@ -144,13 +144,14 @@ public class SalesPlanDao {
* @param endTime
* @return
*/
public List<KObject> querySalesTempPlanByTime(Date startTime,Date endTime) {
public List<KObject> querySalesTempPlanByTime(Date startTime,Date endTime, UUID contractId) {
return template.execute(session ->{
String hql = "from " + SalesPlanConstant.ENTITY_TEMP + " where planningCycle.startTime >=:startTime and planningCycle.endTime <=:endTime"
String hql = "from " + SalesPlanConstant.ENTITY_TEMP + " where contract.id=:contractId and 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);
query.setParameter("contractId", contractId);
List<KObject> resultList = query.getResultList();
return resultList;
......
......@@ -3,7 +3,9 @@ package com.xyst.dinas.sales.internal.service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.transaction.Transactional;
......@@ -22,9 +24,12 @@ import com.beecode.bcp.core.context.AminoContextHolder;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.Null;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.inz.common.BaseConstants;
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.StationService;
import com.xyst.dinas.contract.constant.ContractConstant;
import com.xyst.dinas.project.constant.ProjectFiledConstant;
......@@ -231,7 +236,7 @@ public class SalesPlanServiceImpl implements SalesPlanService{
private StationService stationService;
@Override
public void modify(JSONObject jsonObject) {
public List<Map<String, Object>> modify(JSONObject jsonObject) {
UUID salesPlanId = UUID.fromString(jsonObject.getString("id"));
KObject kObject = salesPlanDao.load(salesPlanId);
kObject.set("modifyTime", new Date());
......@@ -240,6 +245,15 @@ public class SalesPlanServiceImpl implements SalesPlanService{
//kObject.set("requiredTotalAmount", jsonObject.getBigDecimal("requiredTotalAmount"));
List<KObject> salesPlanDetails = kObject.get("SalesPlanDetails").toList();
JSONArray jsonArray = jsonObject.getJSONArray("salesPlanDetails");
//校验逻辑
if (!jsonObject.isNull("isCommit") && jsonObject.getInt("isCommit") == 1) {
List<Map<String, Object>> submitSalesPlanVerifyList = submitSalesPlanVerify(salesPlanId, jsonArray);
if(submitSalesPlanVerifyList.size() > 0) {
return submitSalesPlanVerifyList;
}
//改状态
kObject.set("approveState", 1);
}
BigDecimal requiredTotalAmount = new BigDecimal("0");
BigDecimal planTotalAmount = new BigDecimal("0");
BigDecimal actualSaleTotalAmount = new BigDecimal("0");
......@@ -264,14 +278,113 @@ public class SalesPlanServiceImpl implements SalesPlanService{
planTotalAmount = planTotalAmount.add(jsonObjectDetails.getBigDecimal("planAmount"));
actualSaleTotalAmount = actualSaleTotalAmount.add(jsonObjectDetails.getBigDecimal("actualSaleAmount"));
}
}
kObject.set("requiredTotalAmount", requiredTotalAmount);
kObject.set("planTotalAmount", planTotalAmount);
kObject.set("actualSaleTotalAmount", actualSaleTotalAmount);
salesPlanDao.update(kObject);
return null;
}
public List<Map<String, Object>> submitSalesPlanVerify(UUID salesPlanId, JSONArray jsonArray) {
//校验数据
//获取销售计划
KObject salesplan = salesPlanDao.querySalesPlanById(salesPlanId);
KObject planningCycle = salesplan.get(SalesPlanConstant.planningCycle);//计划周期
Date startTime = planningCycle.getDate(PlanningCycleConstant.startTime);
Date endTime = planningCycle.getDate(PlanningCycleConstant.endTime);
List<Map<String, Object>> verifyList = new ArrayList<Map<String, Object>>();
//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);
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"));
verifyMap.put("dinasTypeName", jsonObject.getString("dinasTypeName"));
verifyMap.put("projectName", jsonObject.getString("projectName"));
verifyMap.put("distributedVolum", distributedVolum);
verifyList.add(verifyMap);
//return verifyMap;
}
}
return verifyList;
}
@Override
public Object submitSalesPlan(UUID salesPlanId) {
//校验数据
//获取销售计划
KObject salesplan = salesPlanDao.querySalesPlanById(salesPlanId);
KObject planningCycle = salesplan.get(SalesPlanConstant.planningCycle);//计划周期
Date startTime = planningCycle.getDate(PlanningCycleConstant.startTime);
Date endTime = planningCycle.getDate(PlanningCycleConstant.endTime);
List<KObject> salesPlanDetails = salesplan.get(SalesPlanConstant.SalesPlanDetails).toList();
for (KObject salesPlanDetail : salesPlanDetails) {
//合同可用余量
BigDecimal contractAmount = salesPlanDetail.getBigDecimal("contractAmount");
//实际销售量
BigDecimal actualSaleAmount = salesPlanDetail.getBigDecimal("actualSaleAmount");
//查询临时销售计划分配量之和
//根据销售计划周期内的所有临时销售计划
KObject contract = salesPlanDetail.get(SalesPlanConstant.contract);
//根据开始时间和结束时间查询临时销售计划
List<KObject> salesTempPlanByTimeList = salesPlanDao.querySalesTempPlanByTime(startTime, endTime, contract.getUuid("id"));
//获取砂石类型
UUID dinasTypeId = salesPlanDetail.get(SalesPlanConstant.dinasType).getUuid("id");
//筛选同一个砂石类型下的明细
//计算临时销售计划本期分配量之和
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"));
}
}
}
//可分配量 <=合同可用余量+实际销售量 - 临时销售计划分配量之和
if(true) {
}
}
return ResponseObj.success("提交成功");
}
......
package com.xyst.dinas.sales.service;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.json.JSONObject;
......@@ -52,6 +53,8 @@ public interface SalesPlanService {
public Object querySalesPlanDetails(SaleaPlanDetailQuery saleaPlanDetailQuery);
public void modify(JSONObject jsonObject);
public List<Map<String, Object>> modify(JSONObject jsonObject);
public Object submitSalesPlan(UUID jsonObject);
}
......@@ -2,14 +2,17 @@ package com.xyst.dinas.sales.web;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.bap.workflow.core.BizProcessState;
......@@ -31,41 +34,10 @@ public class SalesPlanController {
@Autowired
private SalesPlanService salesPlanService;
@Autowired
private PlanningCycleService planningCycleService;
@PostMapping("/salesplan/submit")
public Object submitSalesPlan(@Validated @RequestBody SaleaPlanApprove saleaPlanApprove) {
//校验数据
UUID salesplanId = saleaPlanApprove.getId();
KObject salesplan = salesPlanService.querySalesPlanById(salesplanId);
KObject planningCycle = salesplan.get(SalesPlanConstant.planningCycle);
Date startTime = planningCycle.getDate(PlanningCycleConstant.startTime);
Date endTime = planningCycle.getDate(PlanningCycleConstant.endTime);
List<KObject> salesPlanDetails = salesplan.get(SalesPlanConstant.SalesPlanDetails).toList();
for (KObject salesPlanDetail : salesPlanDetails) {
UUID detailId = salesPlanDetail.getUuid(BaseConstants.ID);
KObject contract = salesPlanDetail.get(SalesPlanConstant.contract);
UUID contractId = contract.getUuid(BaseConstants.ID);
KObject dinasType = salesPlanDetail.get(SalesPlanConstant.dinasType);
UUID dinasTypeId = dinasType.getUuid(BaseConstants.ID);
double planAmount = salesPlanDetail.getDouble(SalesPlanConstant.planAmount);
double actualSaleAmount = salesPlanDetail.getDouble(SalesPlanConstant.actualSaleAmount);
double contractAmount = salesPlanDetail.getDouble(SalesPlanConstant.contractAmount);
double value = 0;
if(planAmount > value) {
return ResponseObj.error("提交失败",null);
}
}
return ResponseObj.success("提交成功");
@GetMapping("/salesplan/submit")
public Object submitSalesPlan(@RequestParam String salesPlanId) {
//JSONObject jsonObject = new JSONObject(body);
return salesPlanService.submitSalesPlan(UUID.fromString(salesPlanId));
}
......@@ -164,13 +136,15 @@ public class SalesPlanController {
}
JSONObject jsonObject = new JSONObject(body);
try {
salesPlanService.modify(jsonObject);
List<Map<String, Object>> list = salesPlanService.modify(jsonObject);
if(list != null && list.size() > 0) {
return ResponseObj.error("操作失败", list);
}
return ResponseObj.success("操作成功", null);
} catch(Exception e) {
e.printStackTrace();
return ResponseObj.error("操作失败",null);
return ResponseObj.error("操作失败", null);
}
return ResponseObj.success("操作成功",null);
}
}
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