Compare commits

..

No commits in common. "fe88835f05a2e0a2515418c06a2c5c2e41ded9e4" and "d7f82950387d2f94000e8ecb4188ce16f478e7bc" have entirely different histories.

9 changed files with 34 additions and 125 deletions

View File

@ -11,7 +11,7 @@ public class ShoppingSearchVO {
/** /**
* 模块名称 * 模块名称
*/ */
private String moduleName; private Integer moduleName;
/** /**
* 系列名称 * 系列名称

View File

@ -173,22 +173,20 @@ public class ShoppingController extends ControllerBase {
.setTotalFee(modelPrice.getAmount()) .setTotalFee(modelPrice.getAmount())
.setActualFee(modelPrice.getAmount()); .setActualFee(modelPrice.getAmount());
log.debug("机型【{}】售价为{}", request.getModelNo(), modelPrice); log.debug("机型【{}】售价为{}", request.getModelNo(), modelPrice);
//系数
Pair<BigDecimal, BigDecimal> pair = getRatio(request.getModelId());
BigDecimal standardRatio = pair.getLeft(), optionalRatio = pair.getRight(), discountRatio = BigDecimal.ONE;
log.debug("机型【{}】标准配件系数为{},可选配件系数为{}", request.getModelNo(), standardRatio, optionalRatio);
if (AppUserUtil.isAgent()) { if (AppUserUtil.isAgent()) {
//代理商 //代理商
QuotationDiscountDTO discountDTO = discountService.getEffectiveForCustomer(request.getModelId(), request.getTargetId(), categoryId); QuotationDiscountDTO discountDTO = discountService.getEffectiveForCustomer(request.getModelId(), request.getTargetId(), categoryId);
if (Objects.nonNull(discountDTO)) { if (Objects.nonNull(discountDTO)) {
vo.setDiscountId(discountDTO.getDiscountId()); vo.setDiscountId(discountDTO.getDiscountId());
// vo.setActualFee(vo.getTotalFee().multiply(discountDTO.getRatio())); vo.setActualFee(vo.getTotalFee().multiply(discountDTO.getRatio()));
// vo.setDiscount(vo.getTotalFee().subtract(vo.getActualFee())); vo.setDiscount(vo.getTotalFee().subtract(vo.getActualFee()));
// log.debug("机型【{}】打折后价格为{},优惠{}", request.getModelNo(), vo.getActualFee(), vo.getDiscount()); log.debug("机型【{}】打折后价格为{},优惠{}", request.getModelNo(), vo.getActualFee(), vo.getDiscount());
discountRatio = discountDTO.getRatio();
log.debug("机型【{}】折扣为{}", request.getModelNo(), discountRatio);
} }
} }
//系数
Pair<BigDecimal, BigDecimal> pair = getRatio(request.getModelId());
BigDecimal standardRatio = pair.getLeft(), optionalRatio = pair.getRight();
log.debug("机型【{}】标准配件系数为{},可选配件系数为{}", request.getModelNo(), standardRatio, optionalRatio);
if (!request.getShowLowestPrice()) { if (!request.getShowLowestPrice()) {
//方案 //方案
QuotationUserPlanModelItem planModelItem = userPlanModelItemService.getEffectiveForUser(request.getModelId(), AppUserUtil.isAgent() ? 1 : 0, AppUserUtil.getUserId()); QuotationUserPlanModelItem planModelItem = userPlanModelItemService.getEffectiveForUser(request.getModelId(), AppUserUtil.isAgent() ? 1 : 0, AppUserUtil.getUserId());
@ -200,16 +198,13 @@ public class ShoppingController extends ControllerBase {
} else { } else {
QuotationUserPlanDefault userPlanDefault = userPlanDefaultService.getEffectiveForUser(AppUserUtil.isAgent() ? 1 : 0, AppUserUtil.getUserId()); QuotationUserPlanDefault userPlanDefault = userPlanDefaultService.getEffectiveForUser(AppUserUtil.isAgent() ? 1 : 0, AppUserUtil.getUserId());
if (Objects.nonNull(userPlanDefault)) { if (Objects.nonNull(userPlanDefault)) {
vo.setDefaultRatio(userPlanDefault.getRatio());
log.debug("用户方案默认系数为{}", userPlanDefault.getRatio()); log.debug("用户方案默认系数为{}", userPlanDefault.getRatio());
standardRatio = NumberUtil.multiply(standardRatio, userPlanDefault.getRatio()); standardRatio = NumberUtil.multiply(standardRatio, userPlanDefault.getRatio());
log.debug("机型【{}】标准配件系数为{},可选配件系数为{}", request.getModelNo(), standardRatio, optionalRatio); log.debug("机型【{}】标准配件系数为{},可选配件系数为{}", request.getModelNo(), standardRatio, optionalRatio);
} }
} }
} }
vo.setTotalFee(NumberUtil.multiply(vo.getTotalFee(), standardRatio)); vo.setActualFee(vo.getTotalFee().subtract(vo.getDiscount()).multiply(standardRatio));
vo.setActualFee(NumberUtil.multiply(vo.getTotalFee(), discountRatio));
vo.setDiscount(vo.getTotalFee().subtract(vo.getActualFee()));
log.debug("机型【{}】价格为{},优惠{}", request.getModelNo(), vo.getActualFee(), vo.getDiscount()); log.debug("机型【{}】价格为{},优惠{}", request.getModelNo(), vo.getActualFee(), vo.getDiscount());
//获取部件配置 //获取部件配置
List<ModelConfigEffectiveDTO> parts = modelConfigService.getEffectives(modelPrice.getPriceId(), categoryId, MultilingualUtil.getLanguage()); List<ModelConfigEffectiveDTO> parts = modelConfigService.getEffectives(modelPrice.getPriceId(), categoryId, MultilingualUtil.getLanguage());
@ -310,7 +305,6 @@ public class ShoppingController extends ControllerBase {
).collect(Collectors.toList()) ).collect(Collectors.toList())
); );
} }
shoppingCartService.save(cart);
return ApiResult.success(cartId); return ApiResult.success(cartId);
} }
@ -374,10 +368,6 @@ public class ShoppingController extends ControllerBase {
.throwMessage("客户名称不一致"); .throwMessage("客户名称不一致");
VUtils.trueThrowBusinessError(carts.stream().map(QuotationShoppingCart::getTargetId).collect(Collectors.toSet()).size() > 1) VUtils.trueThrowBusinessError(carts.stream().map(QuotationShoppingCart::getTargetId).collect(Collectors.toSet()).size() > 1)
.throwMessage("报价对象不一致"); .throwMessage("报价对象不一致");
VUtils.trueThrowBusinessError(carts.stream().map(QuotationShoppingCart::getCurrency).collect(Collectors.toSet()).size() > 1)
.throwMessage("币种不一致");
VUtils.trueThrowBusinessError(carts.stream().map(QuotationShoppingCart::getExchangeRate).collect(Collectors.toSet()).size() > 1)
.throwMessage("汇率不一致");
QuotationShoppingOrder order = new QuotationShoppingOrder() QuotationShoppingOrder order = new QuotationShoppingOrder()
.setCreateByType(AppUserUtil.isAgent() ? 1 : 0) .setCreateByType(AppUserUtil.isAgent() ? 1 : 0)
.setCreateBy(AppUserUtil.getUserName()) .setCreateBy(AppUserUtil.getUserName())
@ -554,16 +544,17 @@ public class ShoppingController extends ControllerBase {
// List<QuotationShoppingOrderItem> orderItems = shoppingOrderItemService.lambdaQuery() // List<QuotationShoppingOrderItem> orderItems = shoppingOrderItemService.lambdaQuery()
// .eq(QuotationShoppingOrderItem::getOrderId, request.getId()) // .eq(QuotationShoppingOrderItem::getOrderId, request.getId())
// .list(); // .list();
// VUtils.trueThrowBusinessError(orderItems.size() > 1).throwMessage("多机型报价单不能复制"); // List<QuotationShoppingCart> carts = shoppingCartService.lambdaQuery()
// QuotationShoppingCart cart = shoppingCartService.getById(orderItems.get(0).getCartId()); // .in(QuotationShoppingCart::getId, orderItems.stream().map(QuotationShoppingOrderItem::getCartId).collect(Collectors.toList()))
// .list();
// ShoppingCartVO vo = new ShoppingCartVO() // ShoppingCartVO vo = new ShoppingCartVO()
// .setModelId(cart.getModelId()) // .setModelId(request.getModelId())
// .setTargetId(request.getTargetId()) // .setTargetId(request.getTargetId())
// .setCustomerName(request.getCustomerName()) // .setCustomerName(request.getCustomerName())
// .setPriceId(cart.getPriceId()) // .setPriceId(modelPrice.getPriceId())
// .setConfigId(cart.getConfigId()) // .setConfigId(modelPrice.getConfigId())
// .setTotalFee(cart.getAmount()) // .setTotalFee(modelPrice.getAmount())
// .setActualFee(cart.getAmount()); // .setActualFee(modelPrice.getAmount());
// log.debug("机型【{}】售价为{}", request.getModelNo(), modelPrice); // log.debug("机型【{}】售价为{}", request.getModelNo(), modelPrice);
// if (AppUserUtil.isAgent()) { // if (AppUserUtil.isAgent()) {
// //代理商 // //代理商

View File

@ -2,8 +2,6 @@ package com.nflg.mobilebroken.quotation.pojo.request;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data
@ -12,7 +10,6 @@ public class ShoppingSaveAccessoryRequest {
/** /**
* 物料编号 * 物料编号
*/ */
@NotBlank
private String materialNo; private String materialNo;
/** /**
@ -23,18 +20,15 @@ public class ShoppingSaveAccessoryRequest {
/** /**
* 备件数量 * 备件数量
*/ */
@NotNull
private Integer num; private Integer num;
/** /**
* 备件单价 * 备件单价
*/ */
@NotNull
private BigDecimal amount; private BigDecimal amount;
/** /**
* 备件总价 * 备件总价
*/ */
@NotNull
private BigDecimal totalAmount; private BigDecimal totalAmount;
} }

View File

@ -1,13 +1,10 @@
package com.nflg.mobilebroken.quotation.pojo.request; package com.nflg.mobilebroken.quotation.pojo.request;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -103,12 +100,14 @@ public class ShoppingSaveRequest {
/** /**
* 随机配件总价 * 随机配件总价
*/ */
private BigDecimal accessoryFee = BigDecimal.ZERO; @NotNull
private BigDecimal accessoryFee;
/** /**
* 交机服务总价 * 交机服务总价
*/ */
private BigDecimal serviceFee = BigDecimal.ZERO; @NotNull
private BigDecimal serviceFee;
/** /**
* 交货方式字典id * 交货方式字典id
@ -148,7 +147,7 @@ public class ShoppingSaveRequest {
/** /**
* 币种字典id * 币种字典id
*/ */
@NotNull @NotBlank
private Long currency; private Long currency;
/** /**
@ -170,12 +169,10 @@ public class ShoppingSaveRequest {
/** /**
* 随机配件 * 随机配件
*/ */
@Valid
private List<ShoppingSaveAccessoryRequest> accessories; private List<ShoppingSaveAccessoryRequest> accessories;
/** /**
* 交机服务 * 交机服务
*/ */
@Valid
private List<ShoppingSaveServiceRequest> services; private List<ShoppingSaveServiceRequest> services;
} }

View File

@ -2,7 +2,6 @@ package com.nflg.mobilebroken.quotation.pojo.request;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data
@ -11,24 +10,20 @@ public class ShoppingSaveServiceRequest {
/** /**
* 工程师人数 * 工程师人数
*/ */
@NotNull
private Integer userNum; private Integer userNum;
/** /**
* 服务天数 * 服务天数
*/ */
@NotNull
private Integer days; private Integer days;
/** /**
* 单人天费用 * 单人天费用
*/ */
@NotNull
private BigDecimal fee; private BigDecimal fee;
/** /**
* 服务总费用 * 服务总费用
*/ */
@NotNull
private BigDecimal totalFee; private BigDecimal totalFee;
} }

View File

@ -41,7 +41,7 @@ public class ShoppingCartVO {
/** /**
* 默认系数没有方案时使用 * 默认系数没有方案时使用
*/ */
private BigDecimal defaultRatio = BigDecimal.ONE; private BigDecimal defaultRatio;
/** /**
* 客户名称 * 客户名称

View File

@ -44,16 +44,6 @@
.data1 { .data1 {
width: 100%; width: 100%;
} }
table, th, td {
border: black 1px solid;
border-collapse: collapse;
padding: 5px;
}
table {
width: 100%;
}
</style> </style>
</head> </head>
<body> <body>
@ -108,69 +98,19 @@
<div style="margin-top: 20px;"> <div style="margin-top: 20px;">
<div style="font-size: 20pt;" th:text="${info.no}">配置详情</div> <div style="font-size: 20pt;" th:text="${info.no}">配置详情</div>
<div th:text="${info.no}">标准配置</div> <div th:text="${info.no}">标准配置</div>
<div th:text="${info.no}"> <div th:text="${info.no}"><input type="checkbox">AAA</div>
<label>
<input type="checkbox"/>
AAA
</label>
</div>
<div> <div>
<div th:text="${info.no}"> <div th:text="${info.no}">&nbsp;<input type="checkbox">AAA</div>
<label>
<input type="checkbox"/>
AAA
</label>
</div>
</div> </div>
</div> </div>
<div th:text="${info.no}">可选配置</div> <div th:text="${info.no}">可选配置</div>
<div th:text="${info.no}"> <div th:text="${info.no}"><input type="checkbox">AAA</div>
<label>
<input type="checkbox"/>
AAA
</label>
</div>
<div> <div>
<div th:text="${info.no}">&nbsp;<label> <div th:text="${info.no}">&nbsp;<input type="checkbox">AAA</div>
<input type="checkbox"/>
AAA
</label></div>
</div> </div>
<div th:text="${info.no}">其他配置</div> <div th:text="${info.no}">其他配置</div>
<div th:text="${info.no}">油漆要求</div> <div th:text="${info.no}">油漆要求</div>
<div th:text="${info.no}">其它要求说明</div>
<div th:text="${info.no}">随机配件</div>
<table>
<tr>
<th>物料编号</th>
<th>备件名称</th>
<th>备件数量</th>
<th>备件单价</th>
<th>备件总金额</th>
</tr>
<tr th:each="item, itemStat : ${measure.items}" th:if="${not #lists.isEmpty(measure.items)}">
<td th:text="${itemStat.index + 1}"></td>
<td th:text="${item.name}"></td>
<td th:text="${item.superintendent}"></td>
<td th:text="${item.scheduleDate}"></td>
<td th:text="${item.confirmedDate}"></td>
</tr>
</table>
<div th:text="${info.no}">交机服务</div>
<table>
<tr>
<th>工程师人数</th>
<th>服务天数</th>
<th>单人天费用</th>
<th>服务总费用</th>
</tr>
<tr th:each="item, itemStat : ${measure.items}" th:if="${not #lists.isEmpty(measure.items)}">
<td th:text="${itemStat.index + 1}"></td>
<td th:text="${item.name}"></td>
<td th:text="${item.superintendent}"></td>
<td th:text="${item.scheduleDate}"></td>
</tr>
</table>
</div> </div>
</body> </body>
</html> </html>

View File

@ -50,11 +50,6 @@ public class QuotationShoppingCartAccessory implements Serializable {
*/ */
private BigDecimal amount; private BigDecimal amount;
/**
* 备件总价
*/
private BigDecimal totalAmount;
/** /**
* 优惠金额 * 优惠金额
*/ */

View File

@ -25,11 +25,8 @@
</select> </select>
<select id="isForbid" resultType="boolean"> <select id="isForbid" resultType="boolean">
SELECT IFNULL((SELECT is_forbid select is_forbid
FROM quotation_model_forbid from quotation_model_forbid
WHERE model_id = #{modelId} AND source_type = #{type} AND source_id = #{targetId} where model_id=#{modelId} and source_type=#{type} and source_id=#{targetId}
LIMIT 1),
0
) as is_forbid;
</select> </select>
</mapper> </mapper>