diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java index 999537abf..b11c890bb 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java @@ -78,7 +78,7 @@ public class InvoiceController { Set skuIds = orderContents.stream().map(PlatformOrderContent::getSkuId).collect(Collectors.toSet()); List skusWithoutPrice = platformOrderContentMap.searchSkuDetail(new ArrayList<>(skuIds)) .stream() - .filter(skuDetail -> skuDetail.getPrice().getPrice() == null) + .filter(skuDetail -> skuDetail.getPrice().getPrice() == null && skuDetail.getPrice().getPriceRmb() == null) .map(SkuDetail::getErpCode) .collect(Collectors.toList()); if (skusWithoutPrice.isEmpty()) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/OrderContentDetail.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/OrderContentDetail.java index 74dca9f9a..783a70c40 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/OrderContentDetail.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/OrderContentDetail.java @@ -8,7 +8,7 @@ import java.math.BigDecimal; /** - * This class describe the relation among a sku identified by its id, its quantity, + * This class describes the relation among a sku identified by its id, its quantity, * and its correspondent price and promotion. */ @Data @@ -19,6 +19,8 @@ public class OrderContentDetail { private final Integer quantity; + private final BigDecimal exchangeRate; + /** * Calculate the reduced amount by applying the promotion to the sku. * @@ -35,7 +37,7 @@ public class OrderContentDetail { * @return the total price (price * quantity) */ public BigDecimal totalPrice() { - BigDecimal unit = skuDetail.getPrice().getPrice(quantity); + BigDecimal unit = skuDetail.getPrice().getPrice(quantity, exchangeRate); BigDecimal total = unit.multiply(new BigDecimal(quantity)); log.info("unit: {}", unit); log.info("total: {}", total); @@ -43,7 +45,7 @@ public class OrderContentDetail { } public BigDecimal unitPrice(){ - return skuDetail.getPrice().getPrice(quantity); + return skuDetail.getPrice().getPrice(quantity, exchangeRate); } public int promotionCount() { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/SkuPrice.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/SkuPrice.java index 4a9a3eb96..55afc3e63 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/SkuPrice.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/SkuPrice.java @@ -13,13 +13,14 @@ import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Date; /** - * @Description: The price of a sku + * @Description: SKU价格表 * @Author: jeecg-boot - * @Date: 2021-04-16 - * @Version: V1.0 + * @Date: 2023-05-10 + * @Version: V1.1 */ @ApiModel(value = "sku对象", description = "SKU表") @Setter @@ -30,21 +31,36 @@ public class SkuPrice implements Serializable { private static final long serialVersionUID = 1L; /** - * id in the DB + * 主键 */ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主键") @Getter private String id; + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+2", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; /** * SKU ID */ @Dict(dictTable = "sku", dicText = "erp_code", dicCode = "id") @ApiModelProperty(value = "SKU ID") - @Getter private String skuId; - /** * 价格 */ @@ -60,59 +76,57 @@ public class SkuPrice implements Serializable { @ApiModelProperty(value = "优惠价起订量") @Getter private Integer threshold; - /** - * 优惠价, maybe null from DB which stands for no discount price + * 优惠价 */ @Excel(name = "优惠价", width = 15) @ApiModelProperty(value = "优惠价") @Getter - private BigDecimal discountedPrice; - + private java.math.BigDecimal discountedPrice; /** * 生效日期 */ @Excel(name = "生效日期", width = 15, format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+2", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "生效日期") - @Getter private Date date; - - /**创建人*/ - @ApiModelProperty(value = "创建人") - private String createBy; - - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "创建日期") - private Date createTime; - - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "更新日期") - private Date updateTime; - - /**更新人*/ - @ApiModelProperty(value = "更新人") - private String updateBy; + /** + * 人民币价格 + */ + @Excel(name = "人民币价格", width = 15) + @ApiModelProperty(value = "人民币价格") + @Getter + private java.math.BigDecimal priceRmb; + /** + * 人民币优惠价 + */ + @Excel(name = "人民币优惠价", width = 15) + @ApiModelProperty(value = "人民币优惠价") + @Getter + private java.math.BigDecimal discountedPriceRmb; /** * The price of a sku depends on its quantity, Given a quantity here, return the correspondent price. * * @param quantity a quantity + * @param eurToRmb Exchange rate from EUR to RMB * @return the price correspondent to the quantity */ - public BigDecimal getPrice(int quantity) { - if (quantity >= threshold) { - return discountedPrice == null ? price : discountedPrice; + public BigDecimal getPrice(int quantity, BigDecimal eurToRmb) { + BigDecimal priceCandidate = price; + BigDecimal discountedPriceCandidate = discountedPrice == null ? price : discountedPrice; + if (priceRmb != null) { + priceCandidate = priceRmb.divide(eurToRmb, RoundingMode.HALF_UP); + discountedPriceCandidate = discountedPriceRmb == null ? priceCandidate : discountedPriceRmb.divide(eurToRmb, RoundingMode.HALF_UP); } - return price; + if (quantity >= threshold) { + return discountedPriceCandidate; + } + return priceCandidate; } public String toString() { - return String.format("%s, %s[%d]", price, discountedPrice, threshold); + return String.format("%s, %s[%d], %s(RMB), %s[%d](RMB)", price, discountedPrice, threshold, priceRmb, discountedPriceRmb, threshold); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml index 143bb48c4..d6b4fc0ef 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml @@ -96,6 +96,8 @@ + + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java index 38b9c84e3..a8557c91d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.business.entity.*; +import org.jeecg.modules.business.mapper.ExchangeRatesMapper; import org.jeecg.modules.business.mapper.PlatformOrderContentMapper; import org.jeecg.modules.business.mapper.PlatformOrderMapper; import org.jeecg.modules.business.service.IClientService; @@ -24,6 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; @@ -48,14 +50,17 @@ public class PlatformOrderServiceImpl extends ServiceImpl searchPurchaseOrderDetail(List skuQuantities) { + BigDecimal eurToRmb = exchangeRatesMapper.getLatestExchangeRate("EUR", "RMB"); // convert list of (ID, quantity) to map between ID and quantity Map skuQuantity = skuQuantities.stream() @@ -234,7 +240,8 @@ public class PlatformOrderServiceImpl extends ServiceImpl new OrderContentDetail( skuDetail, - skuQuantity.get(skuDetail.getSkuId()) + skuQuantity.get(skuDetail.getSkuId()), + eurToRmb ) ) .collect(toList());