|
|
@ -30,8 +30,13 @@ import cn.hutool.core.convert.Convert; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.yxt.anrui.base.api.basemodelconfig.AppCarConfigSummaryVo; |
|
|
|
import com.yxt.anrui.base.api.basepostprice.BaseOrderPostPriceQuery; |
|
|
|
import com.yxt.anrui.base.api.basepostprice.BaseOrderPostPriceVo; |
|
|
|
import com.yxt.anrui.base.api.basepostprice.BasePostPriceFeign; |
|
|
|
import com.yxt.anrui.base.api.basevehicle.AppVinsDetailsVo; |
|
|
|
import com.yxt.anrui.base.api.basevehicle.BaseVehicleFeign; |
|
|
|
import com.yxt.anrui.base.api.basevehiclepolicy.BaseVehiclePolicyFeign; |
|
|
|
import com.yxt.anrui.base.api.basevehiclepolicy.BaseVehiclePriceVo; |
|
|
|
import com.yxt.anrui.base.api.basevehmodelconfig.BaseVehmodelConfigFeign; |
|
|
|
import com.yxt.anrui.base.api.busvehicleorder.AppOrderReadyCar; |
|
|
|
import com.yxt.anrui.base.api.busvehicleorder.BusVehicleOrderFeign; |
|
|
@ -88,6 +93,7 @@ import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
/** |
|
|
@ -137,6 +143,10 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper |
|
|
|
private BaseVehicleFeign baseVehicleFeign; |
|
|
|
@Autowired |
|
|
|
private BusVehicleOrderFeign busVehicleOrderFeign; |
|
|
|
@Autowired |
|
|
|
private BasePostPriceFeign basePostPriceFeign; |
|
|
|
@Autowired |
|
|
|
private BaseVehiclePolicyFeign baseVehiclePolicyFeign; |
|
|
|
|
|
|
|
/** |
|
|
|
* 构造查询条件 |
|
|
@ -280,6 +290,11 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper |
|
|
|
public ResultBean<String> saveOrUpdateOrder(BusSalesOrderAllDto dto) { |
|
|
|
ResultBean<String> rb = ResultBean.fireFail(); |
|
|
|
String sid = dto.getSid(); |
|
|
|
//验证传入的参数是否正确
|
|
|
|
ResultBean resultBean = isCheck(dto); |
|
|
|
if (!resultBean.getSuccess()) { |
|
|
|
return rb.setMsg(resultBean.getMsg()); |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(dto.getSid())) { |
|
|
|
//新增
|
|
|
|
sid = save(dto); |
|
|
@ -289,6 +304,107 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper |
|
|
|
return rb.success().setData(sid); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 验证销售订单中的计算数值的情况是否计算的正确 |
|
|
|
* |
|
|
|
* @param dto 数据传输对象 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public ResultBean isCheck(BusSalesOrderAllDto dto) { |
|
|
|
ResultBean rb = ResultBean.fireFail(); |
|
|
|
//验证台数是否正确
|
|
|
|
//初始化台数
|
|
|
|
int vehicleNum = 0; |
|
|
|
if ("1".equals(dto.getType())) { |
|
|
|
//现车
|
|
|
|
vehicleNum = dto.getBusSalesOrderVehicleList().size(); |
|
|
|
|
|
|
|
} else if ("2".equals(dto.getType())) { |
|
|
|
//采购订单
|
|
|
|
List<BusSalesVehicleOrderDto> busSalesVehicleOrderList = dto.getBusSalesVehicleOrderList(); |
|
|
|
for (int i = 0; i < busSalesVehicleOrderList.size(); i++) { |
|
|
|
vehicleNum = vehicleNum + busSalesVehicleOrderList.get(i).getUsingNum(); |
|
|
|
} |
|
|
|
} |
|
|
|
//判断和价格信息中的台数是否一致
|
|
|
|
int quantity = dto.getBusSalesOrderPrice().getQuantity(); |
|
|
|
if (vehicleNum != quantity) { |
|
|
|
return rb.setMsg("选择的台数与价格信息中的台数数值不一致"); |
|
|
|
} |
|
|
|
BigDecimal singleGuildPriceBig = new BigDecimal("0"); |
|
|
|
BigDecimal singleFinalPriceBig = new BigDecimal("0"); |
|
|
|
//单台指导价
|
|
|
|
String guildPrice = dto.getBusSalesOrderModel().getGuildPrice(); |
|
|
|
singleGuildPriceBig = singleGuildPriceBig.add(new BigDecimal(guildPrice)); |
|
|
|
//单台成交价
|
|
|
|
String finalPrice = dto.getBusSalesOrderModel().getFinalPrice(); |
|
|
|
singleFinalPriceBig = singleFinalPriceBig.add(new BigDecimal(finalPrice)); |
|
|
|
//包含上装
|
|
|
|
if ("1".equals(dto.getIsTop())) { |
|
|
|
//上装价格
|
|
|
|
String topPrice = dto.getBusSalesOrderMakeup().getTopPrice(); |
|
|
|
singleGuildPriceBig.add(new BigDecimal(topPrice)); |
|
|
|
singleFinalPriceBig.add(new BigDecimal(topPrice)); |
|
|
|
} |
|
|
|
//单台指导价(主车+上装价格)
|
|
|
|
String singleGuildPrice = dto.getBusSalesOrderPrice().getSingleGuildPrice(); |
|
|
|
String singleFinalPrice = dto.getBusSalesOrderPrice().getSingleFinalPrice(); |
|
|
|
//比较单台指导价(主车加上装)是否等于 单台指导价+上装的价格
|
|
|
|
if (new BigDecimal(singleGuildPrice).compareTo(singleGuildPriceBig) != 0) { |
|
|
|
return rb.setMsg("价格信息中的单台指导价数值计算错误"); |
|
|
|
} |
|
|
|
//比较单台成交价(主车加上装) 是否等于单台成交价+上装的价格
|
|
|
|
if (new BigDecimal(singleFinalPrice).compareTo(singleFinalPriceBig) != 0) { |
|
|
|
return rb.setMsg("价格信息中的单台成交价数值计算错误"); |
|
|
|
} |
|
|
|
//计算车价合计是否正确
|
|
|
|
String priceSum = dto.getBusSalesOrderPrice().getPriceSum(); |
|
|
|
|
|
|
|
//车价合计是否等于单台成交价*数量
|
|
|
|
if (new BigDecimal(priceSum).compareTo(singleFinalPriceBig.multiply(new BigDecimal(new Integer(quantity).toString()))) != 0) { |
|
|
|
return rb.setMsg("价格信息中的车价合计数值计算错误"); |
|
|
|
} |
|
|
|
//计算主车优惠明细计算的是否正确
|
|
|
|
List<BusSalesOrderDiscountDto> busSalesOrderDiscountList = dto.getBusSalesOrderDiscountList(); |
|
|
|
if (busSalesOrderDiscountList.size() > 0) { |
|
|
|
for (int i = 0; i < busSalesOrderDiscountList.size(); i++) { |
|
|
|
//价值
|
|
|
|
String price = busSalesOrderDiscountList.get(i).getPrice(); |
|
|
|
Integer num = busSalesOrderDiscountList.get(i).getNum(); |
|
|
|
String totalValue = busSalesOrderDiscountList.get(i).getTotalValue(); |
|
|
|
if (new BigDecimal(totalValue).compareTo(new BigDecimal(price).multiply(new BigDecimal(num.toString()))) != 0) { |
|
|
|
return rb.setMsg("主车优惠明细中总价值数值计算错误"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//订金信息的数值验证
|
|
|
|
String deposit = dto.getBusSalesOrderDeposit().getDeposit(); |
|
|
|
String depositAll = dto.getBusSalesOrderDeposit().getDepositAll(); |
|
|
|
if (new BigDecimal(depositAll).compareTo(new BigDecimal(deposit).multiply(new BigDecimal(new Integer(quantity).toString()))) != 0) { |
|
|
|
return rb.setMsg("订金信息中订金合计数值计算错误"); |
|
|
|
} |
|
|
|
if ("02".equals(dto.getBusSalesOrderDeposit().getDepositTypeKey())) { |
|
|
|
List<BusDepositFictitiousDto> busDepositFictitiousList = dto.getBusDepositFictitiousList(); |
|
|
|
BigDecimal depositBig = new BigDecimal("0"); |
|
|
|
if (busDepositFictitiousList.size() > 0) { |
|
|
|
for (int i = 0; i < busDepositFictitiousList.size(); i++) { |
|
|
|
String depositPrice = busDepositFictitiousList.get(i).getDepositPrice(); |
|
|
|
String price = busDepositFictitiousList.get(i).getPrice(); |
|
|
|
if (new BigDecimal(price).compareTo(new BigDecimal(depositPrice)) > 0) { |
|
|
|
return rb.setMsg("虚拟订单中存在本次结转金额大于订金剩余金额的数据"); |
|
|
|
} |
|
|
|
depositBig = depositBig.add(new BigDecimal(price)); |
|
|
|
} |
|
|
|
} |
|
|
|
//判断补交金额和订金合计-本次结转金额
|
|
|
|
String makeUpDeposit = dto.getBusSalesOrderDeposit().getMakeUpDeposit(); |
|
|
|
if (new BigDecimal(makeUpDeposit).compareTo(new BigDecimal(depositAll).subtract(depositBig)) != 0) { |
|
|
|
return rb.setMsg("订金信息中需补交订金数值计算错误"); |
|
|
|
} |
|
|
|
} |
|
|
|
return rb.success(); |
|
|
|
} |
|
|
|
|
|
|
|
private void updateOrder(BusSalesOrderAllDto dto) { |
|
|
|
//主车车型信息
|
|
|
|
BusSalesOrderModelDto busSalesOrderModelDto = dto.getBusSalesOrderModel(); |
|
|
@ -421,14 +537,14 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper |
|
|
|
} else { |
|
|
|
variables.put("isLoan", false); |
|
|
|
} |
|
|
|
//销售支持部经理的角色sid
|
|
|
|
String roleSid = "87a823b0-201b-4a0b-8025-774a5aa27bef"; |
|
|
|
//查询销售支持部经理是否超权限
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//查询总经理审批是否超权限
|
|
|
|
|
|
|
|
//查询角色是否超权限
|
|
|
|
BusSalesOrderPowerVo busSalesOrderPowerVo = isHavePower(dto); |
|
|
|
boolean isHavePower = busSalesOrderPowerVo.getIsHavePower(); |
|
|
|
boolean isPower = busSalesOrderPowerVo.getIsPower(); |
|
|
|
//销售部经理是否超权限
|
|
|
|
variables.put("isPrice", isHavePower); |
|
|
|
//总经理是否超权限
|
|
|
|
variables.put("isPrice1", isPower); |
|
|
|
//查询是否排产
|
|
|
|
if ("3".equals(dto.getType())) { |
|
|
|
variables.put("isLoan1", true); |
|
|
@ -453,6 +569,113 @@ public class BusSalesOrderService extends MybatisBaseService<BusSalesOrderMapper |
|
|
|
return resultBean; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 判断销售部经理和总经理是否超权限 |
|
|
|
* |
|
|
|
* @param dto 数据传输对象 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public BusSalesOrderPowerVo isHavePower(BusSalesOrderAllDto dto) { |
|
|
|
BusSalesOrderPowerVo busSalesOrderPowerVo = new BusSalesOrderPowerVo(); |
|
|
|
boolean isHavePower = false; |
|
|
|
boolean isPower = false; |
|
|
|
//总指导价-总成交价-总优惠包的价值
|
|
|
|
BigDecimal bigDecimalOne = new BigDecimal("0"); |
|
|
|
//初始化总促销金额
|
|
|
|
BigDecimal initBigDecimal = new BigDecimal("0"); |
|
|
|
//岗位权限+总促销价格
|
|
|
|
BigDecimal bigDecimalTwo = new BigDecimal("0"); |
|
|
|
//单台指导价(主车加上装)
|
|
|
|
String singleGuildPrice = dto.getBusSalesOrderPrice().getSingleGuildPrice(); |
|
|
|
//单台成交价(主车加上装)
|
|
|
|
String singleFinalPrice = dto.getBusSalesOrderPrice().getSingleFinalPrice(); |
|
|
|
//台数
|
|
|
|
Integer quantity = dto.getBusSalesOrderPrice().getQuantity(); |
|
|
|
//计算总指导价
|
|
|
|
BigDecimal guildPriceAll = new BigDecimal(singleGuildPrice).multiply(new BigDecimal(quantity.toString())); |
|
|
|
//计算总成交价
|
|
|
|
BigDecimal finalPriceAll = new BigDecimal(singleFinalPrice).multiply(new BigDecimal(quantity.toString())); |
|
|
|
//总优惠包
|
|
|
|
BigDecimal discountPrice = new BigDecimal("0"); |
|
|
|
List<String> priceList = dto.getPriceList(); |
|
|
|
if (priceList.size() > 0) { |
|
|
|
for (int i = 0; i < priceList.size(); i++) { |
|
|
|
String price = priceList.get(i); |
|
|
|
discountPrice = discountPrice.add(new BigDecimal(price)); |
|
|
|
} |
|
|
|
} |
|
|
|
//计算总指导价-总成交价-总优惠包的价值
|
|
|
|
bigDecimalOne = guildPriceAll.subtract(finalPriceAll).subtract(discountPrice); |
|
|
|
List<String> vehicleList = new ArrayList<>(); |
|
|
|
//是否是现车
|
|
|
|
if ("1".equals(dto.getType())) { |
|
|
|
vehicleList = dto.getVehicleList(); |
|
|
|
//根据现车去查询销售政策的总促销政策之和
|
|
|
|
if (vehicleList.size() > 0) { |
|
|
|
for (int i = 0; i < vehicleList.size(); i++) { |
|
|
|
//根据sid去查询销售政策的sid,根据销售政策查询销售政策的金额
|
|
|
|
ResultBean<BaseVehiclePriceVo> priceResultBean = baseVehiclePolicyFeign.selectPrice(vehicleList.get(i)); |
|
|
|
String price = priceResultBean.getData().getDiscountMoney(); |
|
|
|
BigDecimal bigDecimal1 = new BigDecimal(price); |
|
|
|
initBigDecimal = initBigDecimal.add(bigDecimal1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//销售经理的角色sid
|
|
|
|
String roleSid = "f0a79b5e-5338-435e-b0c6-08fc01048f55"; |
|
|
|
//查询销售支持部经理是否超权限
|
|
|
|
String brandSid = dto.getBusSalesOrderModel().getBrandSid(); |
|
|
|
BaseOrderPostPriceQuery baseOrderPostPriceQuery = new BaseOrderPostPriceQuery(); |
|
|
|
baseOrderPostPriceQuery.setBrandSid(brandSid); |
|
|
|
baseOrderPostPriceQuery.setRoleSid(roleSid); |
|
|
|
ResultBean<BaseOrderPostPriceVo> resultBean1 = basePostPriceFeign.selectPostPrice(baseOrderPostPriceQuery); |
|
|
|
if (resultBean1.getSuccess()) { |
|
|
|
String price = resultBean1.getData().getPrice(); |
|
|
|
//ToDo:计算是否有权限:岗位权限(销售部经理权限、总经理权限)+总促销金额<总指导价-总成交价-优惠包总价值
|
|
|
|
//销售支持部经理的岗位权限价格
|
|
|
|
BigDecimal bigDecimal2 = new BigDecimal(price); |
|
|
|
bigDecimalTwo = bigDecimal2.add(initBigDecimal); |
|
|
|
//判断岗位权限+总促销价格和总指导价-总成交价-优惠包总价值的大小
|
|
|
|
if (bigDecimalTwo.compareTo(bigDecimalOne) < 0) { |
|
|
|
//bigDecimalTwo<bigDecimalOne
|
|
|
|
isHavePower = true; |
|
|
|
} else if (bigDecimalTwo.compareTo(bigDecimalOne) > 0) { |
|
|
|
//bigDecimalTwo>bigDecimalOne
|
|
|
|
isHavePower = false; |
|
|
|
} else { |
|
|
|
isHavePower = false; |
|
|
|
} |
|
|
|
} |
|
|
|
//总经理的角色sid
|
|
|
|
roleSid = "135b4829-2928-4124-a5b3-7d4b1101a863"; |
|
|
|
//查询总经理审批是否超权限
|
|
|
|
baseOrderPostPriceQuery = new BaseOrderPostPriceQuery(); |
|
|
|
baseOrderPostPriceQuery.setBrandSid(brandSid); |
|
|
|
baseOrderPostPriceQuery.setRoleSid(roleSid); |
|
|
|
ResultBean<BaseOrderPostPriceVo> resultBean2 = basePostPriceFeign.selectPostPrice(baseOrderPostPriceQuery); |
|
|
|
if (resultBean2.getSuccess()) { |
|
|
|
String price = resultBean2.getData().getPrice(); |
|
|
|
//ToDo:计算是否有权限:岗位权限(销售部经理权限、总经理权限)+总促销金额>总指导价-总成交价-优惠包总价值
|
|
|
|
//总经理的岗位权限价格
|
|
|
|
bigDecimalTwo = new BigDecimal("0"); |
|
|
|
BigDecimal bigDecimal2 = new BigDecimal(price); |
|
|
|
bigDecimalTwo = bigDecimal2.add(initBigDecimal); |
|
|
|
//判断岗位权限+总促销价格和总指导价-总成交价-优惠包总价值的大小
|
|
|
|
if (bigDecimalTwo.compareTo(bigDecimalOne) < 0) { |
|
|
|
//bigDecimalTwo<bigDecimalOne
|
|
|
|
isPower = true; |
|
|
|
} else if (bigDecimalTwo.compareTo(bigDecimalOne) > 0) { |
|
|
|
//bigDecimalTwo>bigDecimalOne
|
|
|
|
isPower = false; |
|
|
|
} else { |
|
|
|
isPower = false; |
|
|
|
} |
|
|
|
} |
|
|
|
busSalesOrderPowerVo.setIsPower(isPower); |
|
|
|
busSalesOrderPowerVo.setIsHavePower(isHavePower); |
|
|
|
return busSalesOrderPowerVo; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 查询用户是否设置了部门 |
|
|
|
* |
|
|
|