diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java index cf66f14d..5d8ecd31 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java @@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Collections; @@ -78,7 +79,7 @@ public class ShoppingController extends ControllerBase { /** * 获取报价对象 */ - @GetMapping("/getTargets") + @GetMapping("/cart/getTargets") public ApiResult> getTargets() { if (AppUserUtil.isAgent()) { return ApiResult.success(appUserService.getCustomers(AppUserUtil.getUserId()) @@ -102,7 +103,7 @@ public class ShoppingController extends ControllerBase { /** * 根据机型查询售价 */ - @PostMapping("/init") + @PostMapping("/cart/init") public ApiResult init(@Valid @RequestBody ShoppingInitRequest request) { Long categoryId = getCategoryId(); ModelPrice1VO modelPrice = priceService.getModelPrice(request.getModelId(), categoryId); @@ -127,7 +128,7 @@ public class ShoppingController extends ControllerBase { } } //系数 - Pair pair = getRatio(request.getModelId(), categoryId); + Pair pair = getRatio(request.getModelId()); BigDecimal standardRatio = pair.getLeft(), optionalRatio = pair.getRight(); log.debug("机型【{}】标准配件系数为{},可选配件系数为{}", request.getModelNo(), standardRatio, optionalRatio); vo.setActualFee(vo.getActualFee().multiply(standardRatio)); @@ -171,7 +172,7 @@ public class ShoppingController extends ControllerBase { * 保存购物车 */ @Transactional - @PostMapping("/save") + @PostMapping("/cart/save") public ApiResult save(@Valid @RequestBody ShoppingSaveRequest request) { QuotationShoppingCart cart; if (Objects.nonNull(request.getId())) { @@ -237,7 +238,7 @@ public class ShoppingController extends ControllerBase { /** * 查询购物车 */ - @PostMapping("/search") + @PostMapping("/cart/search") public ApiResult> search(@Valid @RequestBody ShoppingSearchRequest request) { return ApiResult.success(shoppingCartService.search(request, MultilingualUtil.getLanguage())); } @@ -246,7 +247,7 @@ public class ShoppingController extends ControllerBase { * 删除购物车 */ @Transactional - @PostMapping("/delete") + @PostMapping("/cart/delete") public ApiResult delete(@RequestParam Long id) { QuotationShoppingCart cart = shoppingCartService.getById(id); VUtils.trueThrowBusinessError(Objects.isNull(cart)).throwMessage("未找到购物车信息"); @@ -264,7 +265,27 @@ public class ShoppingController extends ControllerBase { return ApiResult.success(); } - private Pair getRatio(Long modelId, Long categoryId) { + /** + * 生成报价单 + */ + @PostMapping("/quotation/generate") + private ApiResult generate(@RequestBody @NotEmpty List cartIds) { + List carts = shoppingCartService.lambdaQuery() + .eq(QuotationShoppingCart::getStatus, 0) + .eq(QuotationShoppingCart::getCreateByType, AppUserUtil.isAgent() ? 1 : 0) + .eq(QuotationShoppingCart::getCreateById, AppUserUtil.getUserId()) + .in(QuotationShoppingCart::getId, cartIds) + .list(); + VUtils.trueThrowBusinessError(CollectionUtil.isEmpty(carts)).throwMessage("未找到购物车信息"); + VUtils.trueThrowBusinessError(carts.stream().map(QuotationShoppingCart::getCustomerName).collect(Collectors.toSet()).size() > 1) + .throwMessage("客户名称不一致"); + VUtils.trueThrowBusinessError(carts.stream().map(QuotationShoppingCart::getTargetId).collect(Collectors.toSet()).size() > 1) + .throwMessage("报价对象不一致"); + //TODO + return ApiResult.success(); + } + + private Pair getRatio(Long modelId) { Pair pair = Pair.of(BigDecimal.ONE, BigDecimal.ONE); if (AppUserUtil.isAgent()) { //代理商 diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/pojo/request/ShoppingSaveRequest.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/pojo/request/ShoppingSaveRequest.java index 71072cef..bb0da50b 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/pojo/request/ShoppingSaveRequest.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/pojo/request/ShoppingSaveRequest.java @@ -153,7 +153,6 @@ public class ShoppingSaveRequest { /** * 汇率 */ - @NotNull private BigDecimal exchangeRate; /** diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrder.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrder.java new file mode 100644 index 00000000..87aa8690 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrder.java @@ -0,0 +1,93 @@ +package com.nflg.mobilebroken.repository.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * 报价-报价单 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("quotation_shopping_order") +public class QuotationShoppingOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 报价编号 + */ + private String no; + + /** + * 客户名称 + */ + private String customerName; + + /** + * 报价对象 + */ + private Integer targetId; + + /** + * 优惠金额 + */ + private BigDecimal discount; + + /** + * 总价 + */ + private BigDecimal totalFee; + + /** + * 实际总价 + */ + private BigDecimal actualFee; + + /** + * 报价生效时间 + */ + private String effectiveStartTime; + + /** + * 报价失效时间 + */ + private String effectiveEndTime; + + /** + * 创建人类型,0:内部人员;1:代理商 + */ + private Integer createByType; + + /** + * 创建人id + */ + private Integer createById; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后修改时间 + */ + private LocalDateTime updateTime; +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrderAdjust.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrderAdjust.java new file mode 100644 index 00000000..0a854858 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrderAdjust.java @@ -0,0 +1,48 @@ +package com.nflg.mobilebroken.repository.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * 报价-报价单-调价记录 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("quotation_shopping_order_adjust") +public class QuotationShoppingOrderAdjust implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 报价单id + */ + private Long orderId; + + /** + * 优惠金额 + */ + private BigDecimal discount; + + /** + * 实际总价 + */ + private BigDecimal actualFee; + + /** + * 创建时间 + */ + private LocalDateTime createTime; +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrderItem.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrderItem.java new file mode 100644 index 00000000..750cd2f4 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/QuotationShoppingOrderItem.java @@ -0,0 +1,37 @@ +package com.nflg.mobilebroken.repository.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * 报价-报价单-子项 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("quotation_shopping_order_item") +public class QuotationShoppingOrderItem implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 购物车id + */ + private Long cartId; + + /** + * 标配价格,调价后价格 + */ + private BigDecimal standardFee; +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderAdjustMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderAdjustMapper.java new file mode 100644 index 00000000..67bd3bdc --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderAdjustMapper.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.mapper; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrderAdjust; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 报价-报价单-调价记录 Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface QuotationShoppingOrderAdjustMapper extends BaseMapper { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderItemMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderItemMapper.java new file mode 100644 index 00000000..297a7f90 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderItemMapper.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.mapper; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrderItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 报价-报价单-子项 Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface QuotationShoppingOrderItemMapper extends BaseMapper { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderMapper.java new file mode 100644 index 00000000..fbd9979f --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/QuotationShoppingOrderMapper.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.mapper; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 报价-报价单 Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface QuotationShoppingOrderMapper extends BaseMapper { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderAdjustService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderAdjustService.java new file mode 100644 index 00000000..d826c456 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderAdjustService.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.service; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrderAdjust; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 报价-报价单-调价记录 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface IQuotationShoppingOrderAdjustService extends IService { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderItemService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderItemService.java new file mode 100644 index 00000000..eb5005dc --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderItemService.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.service; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrderItem; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 报价-报价单-子项 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface IQuotationShoppingOrderItemService extends IService { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderService.java new file mode 100644 index 00000000..4ee61823 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IQuotationShoppingOrderService.java @@ -0,0 +1,16 @@ +package com.nflg.mobilebroken.repository.service; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 报价-报价单 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +public interface IQuotationShoppingOrderService extends IService { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderAdjustServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderAdjustServiceImpl.java new file mode 100644 index 00000000..3ca82bfe --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderAdjustServiceImpl.java @@ -0,0 +1,20 @@ +package com.nflg.mobilebroken.repository.service.impl; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrderAdjust; +import com.nflg.mobilebroken.repository.mapper.QuotationShoppingOrderAdjustMapper; +import com.nflg.mobilebroken.repository.service.IQuotationShoppingOrderAdjustService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 报价-报价单-调价记录 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Service +public class QuotationShoppingOrderAdjustServiceImpl extends ServiceImpl implements IQuotationShoppingOrderAdjustService { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderItemServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderItemServiceImpl.java new file mode 100644 index 00000000..ee7dd249 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderItemServiceImpl.java @@ -0,0 +1,20 @@ +package com.nflg.mobilebroken.repository.service.impl; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrderItem; +import com.nflg.mobilebroken.repository.mapper.QuotationShoppingOrderItemMapper; +import com.nflg.mobilebroken.repository.service.IQuotationShoppingOrderItemService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 报价-报价单-子项 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Service +public class QuotationShoppingOrderItemServiceImpl extends ServiceImpl implements IQuotationShoppingOrderItemService { + +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderServiceImpl.java new file mode 100644 index 00000000..b6a83286 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/QuotationShoppingOrderServiceImpl.java @@ -0,0 +1,20 @@ +package com.nflg.mobilebroken.repository.service.impl; + +import com.nflg.mobilebroken.repository.entity.QuotationShoppingOrder; +import com.nflg.mobilebroken.repository.mapper.QuotationShoppingOrderMapper; +import com.nflg.mobilebroken.repository.service.IQuotationShoppingOrderService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 报价-报价单 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2026 + */ +@Service +public class QuotationShoppingOrderServiceImpl extends ServiceImpl implements IQuotationShoppingOrderService { + +} diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderAdjustMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderAdjustMapper.xml new file mode 100644 index 00000000..d161c004 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderAdjustMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderItemMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderItemMapper.xml new file mode 100644 index 00000000..6640f369 --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderItemMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderMapper.xml new file mode 100644 index 00000000..c43c961a --- /dev/null +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/QuotationShoppingOrderMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGeneratorTest.java b/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGeneratorTest.java index 19ec6da4..cbcb45ae 100644 --- a/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGeneratorTest.java +++ b/nflg-mobilebroken-repository/src/test/java/com/nflg/mobilebroken/repository/CodeGeneratorTest.java @@ -33,7 +33,7 @@ public class CodeGeneratorTest { , Paths.get(System.getProperty("user.dir")) + "/src/main/resources/mapper")) ) .strategyConfig(builder -> { - builder.addInclude("quotation_shopping_cart_service") //只生成指定表 + builder.addInclude("quotation_shopping_order_adjust") //只生成指定表 .entityBuilder() .enableLombok() .enableChainModel()