feat(quotation): 新增禁售配置功能并优化价格和折扣配置

- 新增 ForbidConfigController 实现禁售配置的搜索和保存功能
- 添加 QuotationModelForbid 相关的实体、服务接口和服务实现
- 在 DiscountConfigController 中修改数据类型从 Long 到 String 并优化数值处理
- 在 PriceConfigController 中统一使用 String 类型参数并改进数值转换逻辑
- 优化 Mapper XML 文件中的条件查询语句结构
- 为 ProductModelSimpleVO 添加 batchNumber 字段支持
- 修复价格配置中区域价格过滤的逻辑错误
This commit is contained in:
曹鹏飞 2026-02-27 11:03:18 +08:00
parent 48e3bdb11c
commit 6b4ce63ff4
12 changed files with 241 additions and 78 deletions

View File

@ -28,4 +28,6 @@ public class ProductModelSimpleVO {
* 机型型号
*/
private String no;
private Long batchNumber;
}

View File

@ -2,6 +2,7 @@ package com.nflg.mobilebroken.quotation.controller.admin;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -108,7 +109,7 @@ public class DiscountConfigController extends ControllerBase {
.filter(price -> price.getAreaId().equals(area.getId()))
.findFirst()
.get();
map.put(area.getCode() + "_price", modelPrice.getAmount());
map.put(area.getCode() + "_price", NumberUtil.format(modelPrice.getAmount()));
QuotationModelDiscountArea discountArea = discountAreas.stream()
.filter(price -> price.getAreaId().equals(area.getId()))
.findFirst()
@ -129,13 +130,13 @@ public class DiscountConfigController extends ControllerBase {
*/
@Transactional
@PostMapping("/save")
public ApiResult<Void> save(@RequestBody @NotEmpty List<Map<String, Object>> datas) {
List<Long> modelIds = datas.stream().map(data -> (Long) data.get("modelId")).collect(Collectors.toList());
public ApiResult<Void> save(@RequestBody @NotEmpty List<Map<String, String>> datas) {
List<Long> modelIds = datas.stream().map(data -> Long.parseLong(data.get("modelId"))).collect(Collectors.toList());
List<QuotationModelDiscount> discounts = new ArrayList<>();
List<QuotationModelDiscountArea> discountAreas = new ArrayList<>();
List<QuotationModelDiscountApply> discountApplies = new ArrayList<>();
datas.forEach(data -> {
Long modelId = (Long) data.get("modelId");
Long modelId = Long.parseLong(data.get("modelId"));
QuotationModelDiscount discount = new QuotationModelDiscount()
.setId(IdUtil.getSnowflakeNextId())
.setModelId(modelId)
@ -149,13 +150,13 @@ public class DiscountConfigController extends ControllerBase {
QuotationModelDiscountArea discountArea = new QuotationModelDiscountArea()
.setDiscountId(discount.getId())
.setAreaId(area.getId())
.setRatio(new BigDecimal(data.get(area.getCode() + "_ratio").toString()))
.setDiscountStartDate(DateTimeUtil.parse(data.get(area.getCode() + "_start").toString(), "yyyy-MM-dd"))
.setDiscountEndDate(DateTimeUtil.parse(data.get(area.getCode() + "_end").toString(), "yyyy-MM-dd"));
.setRatio(new BigDecimal(data.get(area.getCode() + "_ratio")))
.setDiscountStartDate(DateTimeUtil.parse(data.get(area.getCode() + "_start"), "yyyy-MM-dd"))
.setDiscountEndDate(DateTimeUtil.parse(data.get(area.getCode() + "_end"), "yyyy-MM-dd"));
discountAreas.add(discountArea);
}
}
Integer[] userIds = (Integer[]) data.get("apply");
int[] userIds = StrUtil.splitToInt(data.get("apply"), ',');
for (Integer userId : userIds) {
discountApplies.add(new QuotationModelDiscountApply()
.setDiscountId(discount.getId())

View File

@ -1,21 +1,34 @@
package com.nflg.mobilebroken.quotation.controller.admin;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData;
import com.nflg.mobilebroken.common.pojo.request.ModelConfigSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.DynamicHeaderVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductModelSimpleVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.NumberUtil;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.quotation.controller.ControllerBase;
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
import com.nflg.mobilebroken.repository.entity.QuotationModelForbid;
import com.nflg.mobilebroken.repository.entity.TBaseCustomer;
import com.nflg.mobilebroken.repository.service.IDictionaryItemService;
import com.nflg.mobilebroken.repository.service.IQuotationModelForbidService;
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 禁售配置
@ -33,20 +46,25 @@ public class ForbidConfigController extends ControllerBase {
@Resource
private ITBaseCustomerService customerService;
@Resource
private IQuotationModelForbidService forbidService;
/**
* 获取动态表头
*/
@GetMapping("/headers")
public ApiResult<List<DynamicHeaderVO>> getHeaders() {
List<DynamicHeaderVO> vos = new ArrayList<>();
// vos.add(new DynamicHeaderVO().setProp("modelId").setLabel("modelId").setKey(true).setShow(false));
vos.add(new DynamicHeaderVO().setProp("modelNo").setLabel("产品机型"));
List<DictionaryItem> categories = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_DIRECT_SALES_CATEGORY);
List<TBaseCustomer> customers = customerService.lambdaQuery()
.eq(TBaseCustomer::getDelIs, 0)
.eq(TBaseCustomer::getEnableState, 1)
.isNotNull(TBaseCustomer::getCategoryId)
.orderByAsc(TBaseCustomer::getId)
.list();
categories.forEach(category -> {
DynamicHeaderVO avo=new DynamicHeaderVO()
DynamicHeaderVO avo = new DynamicHeaderVO()
.setProp(category.getCode())
.setLabel(category.getName())
.setChildren(new ArrayList<>());
@ -54,8 +72,109 @@ public class ForbidConfigController extends ControllerBase {
.forEach(customer -> {
avo.getChildren().add(new DynamicHeaderVO().setProp(customer.getAgencyCompanyCode()).setLabel(customer.getAgencyCompanyName()));
});
vos.add(avo);
});
return ApiResult.success(vos);
}
/**
* 搜索
*/
@PostMapping("/search")
public ApiResult<PageData<Map<String, Object>>> search(@Valid @RequestBody ModelConfigSearchRequest request) {
IPage<ProductModelSimpleVO> pdatas = forbidService.search(request);
if (CollectionUtil.isEmpty(pdatas.getRecords())) {
return ApiResult.success(PageData.empty());
}
List<QuotationModelForbid> forbids = forbidService.lambdaQuery()
.eq(QuotationModelForbid::getSourceType, 1)
.in(QuotationModelForbid::getModelId, pdatas.getRecords().stream().map(ProductModelSimpleVO::getBatchNumber).collect(Collectors.toList()))
.list();
List<TBaseCustomer> customers = customerService.lambdaQuery()
.eq(TBaseCustomer::getDelIs, 0)
.eq(TBaseCustomer::getEnableState, 1)
.isNotNull(TBaseCustomer::getCategoryId)
.list();
return ApiResult.success(pdatas, data -> {
Map<String, Object> map = new HashMap<>();
map.put("modelId", data.getBatchNumber());
map.put("modelNo", data.getNo());
customers.forEach(customer -> {
map.put(customer.getAgencyCompanyCode(), forbids.stream()
.filter(forbid -> forbid.getModelId().equals(data.getBatchNumber())
&& forbid.getSourceType().equals(1)
&& forbid.getSourceId().equals(customer.getId()))
.map(QuotationModelForbid::getIsForbid)
.findFirst()
.orElse(false)
);
});
return map;
});
}
/**
* 保存
*/
@Transactional
@PostMapping("/save")
public ApiResult<Void> save(@RequestBody @NotEmpty List<Map<String, Object>> datas) {
VUtils.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("请选择要保存的数据!");
List<Long> modelIds = datas.stream().map(data -> Long.parseLong(data.get("modelId").toString())).collect(Collectors.toList());
List<QuotationModelForbid> forbids = forbidService.lambdaQuery()
.eq(QuotationModelForbid::getSourceType, 1)
.in(QuotationModelForbid::getModelId, modelIds)
.list();
List<TBaseCustomer> customers = customerService.lambdaQuery()
.eq(TBaseCustomer::getDelIs, 0)
.eq(TBaseCustomer::getEnableState, 1)
.isNotNull(TBaseCustomer::getCategoryId)
.list();
List<QuotationModelForbid> forbidForAdd = new ArrayList<>();
List<QuotationModelForbid> forbidForUpdate = new ArrayList<>();
datas.forEach(data -> {
Long modelId = Long.parseLong(data.get("modelId").toString());
data.remove("modelId");
data.remove("modelNo");
data.forEach((key, value) -> {
TBaseCustomer customer = customers.stream()
.filter(c -> c.getAgencyCompanyCode().equals(key))
.findFirst()
.orElse(null);
if (Objects.nonNull(customer)) {
Boolean isForbid = (Boolean) value;
QuotationModelForbid forbid = forbids.stream()
.filter(f -> f.getModelId().equals(modelId) && f.getSourceType() == 1 && f.getSourceId().equals(customer.getId()))
.findFirst()
.orElse(null);
if (Objects.isNull(forbid)) {
forbidForAdd.add(new QuotationModelForbid()
.setModelId(modelId)
.setSourceId(customer.getId())
.setSourceType(1)
.setIsForbid(isForbid)
.setCreateById(AdminUserUtil.getUserId())
.setCreateBy(AdminUserUtil.getUserName())
.setCreateTime(LocalDateTime.now())
);
} else if (forbid.getIsForbid() != isForbid) {
forbidForUpdate.add(
forbid.setIsForbid(isForbid)
.setUpdateById(AdminUserUtil.getUserId())
.setUpdateBy(AdminUserUtil.getUserName())
.setUpdateTime(LocalDateTime.now())
);
}
}
});
});
if (CollectionUtil.isNotEmpty(forbidForAdd)) {
forbidService.saveOrUpdateBatch(forbidForAdd);
}
if (CollectionUtil.isNotEmpty(forbidForUpdate)) {
forbidService.updateBatchById(forbidForUpdate);
}
return ApiResult.success();
}
}

View File

@ -130,9 +130,9 @@ public class PriceConfigController extends ControllerBase {
*/
@Transactional
@PostMapping("/save")
public ApiResult<Void> save(@Valid @RequestBody List<Map<String, Object>> datas) {
public ApiResult<Void> save(@Valid @RequestBody List<Map<String, String>> datas) {
List<DictionaryItem> categories = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_DIRECT_SALES_CATEGORY);
Map<Long, List<Map<String, Object>>> group = datas.stream().collect(Collectors.groupingBy(map -> (Long) map.get("modelId")));
Map<Long, List<Map<String, String>>> group = datas.stream().collect(Collectors.groupingBy(map -> Long.parseLong(map.get("modelId"))));
group.forEach((modelId, itemList) -> {
QuotationModelPrice price = priceService.lambdaQuery()
.eq(QuotationModelPrice::getModelId, modelId)
@ -153,8 +153,8 @@ public class PriceConfigController extends ControllerBase {
priceService.save(price);
List<QuotationModelPriceItem> items = new ArrayList<>();
List<QuotationModelPriceItemArea> areas = new ArrayList<>();
for (Map<String, Object> map : itemList) {
Long itemId = 0L, configItemUniqueId = (Long) map.get("configItemUniqueId");
for (Map<String, String> map : itemList) {
Long itemId = 0L, configItemUniqueId = Long.parseLong(map.get("configItemUniqueId"));
if (configItemUniqueId > 0) {
QuotationModelPriceItem item = new QuotationModelPriceItem()
.setPriceId(price.getId())
@ -172,7 +172,7 @@ public class PriceConfigController extends ControllerBase {
.setAreaId(category.getId())
.setPriceId(price.getId())
.setPriceItemId(itemId)
.setAmount(new BigDecimal(map.get(category.getCode()).toString()));
.setAmount(new BigDecimal(map.get(category.getCode())));
areas.add(area);
}
}
@ -184,14 +184,14 @@ public class PriceConfigController extends ControllerBase {
List<QuotationModelPriceItem> items = priceItemService.lambdaQuery()
.eq(QuotationModelPriceItem::getPriceId, price.getId())
.in(QuotationModelPriceItem::getConfigItemUniqueId, itemList.stream()
.map(a -> (Long) a.get("configItemUniqueId"))
.map(a -> Long.parseLong(a.get("configItemUniqueId")))
.collect(Collectors.toList())
)
.list();
List<QuotationModelPriceItemArea> areas = priceItemAreaService.lambdaQuery()
.eq(QuotationModelPriceItemArea::getPriceId, price.getId())
.and(or -> or.eq(QuotationModelPriceItemArea::getPriceItemId, 0)
.in(QuotationModelPriceItemArea::getPriceItemId, items.stream()
.and(wrapper -> wrapper.eq(QuotationModelPriceItemArea::getPriceItemId, 0).or()
.in(CollectionUtil.isNotEmpty(items),QuotationModelPriceItemArea::getPriceItemId, items.stream()
.map(QuotationModelPriceItem::getId)
.collect(Collectors.toList())
)
@ -201,8 +201,8 @@ public class PriceConfigController extends ControllerBase {
List<QuotationModelPriceItem> itemsForUpdate = new ArrayList<>();
List<QuotationModelPriceItemArea> areasForAdd = new ArrayList<>();
List<QuotationModelPriceItemArea> areasForUpdate = new ArrayList<>();
for (Map<String, Object> map : itemList) {
Long configItemUniqueId = (Long) map.get("configItemUniqueId");
for (Map<String, String> map : itemList) {
Long configItemUniqueId = Long.parseLong(map.get("configItemUniqueId"));
if (configItemUniqueId > 0) {
QuotationModelPriceItem item = items.stream()
.filter(it -> configItemUniqueId.equals(it.getConfigItemUniqueId()))
@ -223,7 +223,7 @@ public class PriceConfigController extends ControllerBase {
.setAreaId(category.getId())
.setPriceId(price.getId())
.setPriceItemId(item.getId())
.setAmount(new BigDecimal(map.get(category.getCode()).toString()));
.setAmount(new BigDecimal(map.get(category.getCode())));
areas.add(area);
}
}
@ -246,9 +246,9 @@ public class PriceConfigController extends ControllerBase {
.setAreaId(category.getId())
.setPriceId(price.getId())
.setPriceItemId(item.getId())
.setAmount(new BigDecimal(map.get(category.getCode()).toString())));
.setAmount(new BigDecimal(map.get(category.getCode()))));
} else {
area.setAmount(new BigDecimal(map.get(category.getCode()).toString()));
area.setAmount(new BigDecimal(map.get(category.getCode())));
areasForUpdate.add(area);
}
}
@ -264,8 +264,14 @@ public class PriceConfigController extends ControllerBase {
.findFirst()
.orElse(null);
if (Objects.nonNull(area)) {
area.setAmount(new BigDecimal(map.get(category.getCode()).toString()));
area.setAmount(new BigDecimal(map.get(category.getCode())));
areasForUpdate.add(area);
}else {
areasForAdd.add(new QuotationModelPriceItemArea()
.setAreaId(category.getId())
.setPriceId(price.getId())
.setPriceItemId(0L)
.setAmount(new BigDecimal(map.get(category.getCode()))));
}
}
}
@ -301,8 +307,8 @@ public class PriceConfigController extends ControllerBase {
price.setUpdateById(AdminUserUtil.getUserId());
price.setUpdateBy(AdminUserUtil.getUserName());
price.setUpdateTime(LocalDateTime.now());
for (Map<String, Object> map : itemList) {
Long configItemUniqueId = (Long) map.get("configItemUniqueId");
for (Map<String, String> map : itemList) {
Long configItemUniqueId = Long.parseLong(map.get("configItemUniqueId"));
if (configItemUniqueId > 0) {
QuotationModelPriceItem dbItem = dbItems.stream()
.filter(ait -> ait.getConfigItemUniqueId().equals(configItemUniqueId))
@ -321,14 +327,14 @@ public class PriceConfigController extends ControllerBase {
if (Objects.nonNull(area)) {
area.setId(IdUtil.getSnowflakeNextId());
area.setPriceId(price.getId());
area.setAmount(new BigDecimal(map.get(category.getCode()).toString()));
area.setAmount(new BigDecimal(map.get(category.getCode())));
areasForAdd.add(area);
} else {
areasForAdd.add(new QuotationModelPriceItemArea()
.setAreaId(category.getId())
.setPriceId(price.getId())
.setPriceItemId(dbItem.getId())
.setAmount(new BigDecimal(map.get(category.getCode()).toString()))
.setAmount(new BigDecimal(map.get(category.getCode())))
);
}
}
@ -348,7 +354,7 @@ public class PriceConfigController extends ControllerBase {
.setAreaId(category.getId())
.setPriceId(price.getId())
.setPriceItemId(item.getId())
.setAmount(new BigDecimal(map.get(category.getCode()).toString()))
.setAmount(new BigDecimal(map.get(category.getCode())))
);
}
}
@ -363,7 +369,7 @@ public class PriceConfigController extends ControllerBase {
.findFirst()
.orElse(null);
if (Objects.nonNull(area)) {
area.setAmount(new BigDecimal(map.get(category.getCode()).toString()));
area.setAmount(new BigDecimal(map.get(category.getCode())));
areasForAdd.add(area);
}
}

View File

@ -1,5 +1,9 @@
package com.nflg.mobilebroken.repository.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.mobilebroken.common.pojo.request.ModelConfigSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.ProductModelSimpleVO;
import com.nflg.mobilebroken.repository.entity.QuotationModelForbid;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface QuotationModelForbidMapper extends BaseMapper<QuotationModelForbid> {
IPage<ProductModelSimpleVO> search(ModelConfigSearchRequest request, Page<?> page);
}

View File

@ -1,8 +1,13 @@
package com.nflg.mobilebroken.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.mobilebroken.common.pojo.request.ModelConfigSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.ProductModelSimpleVO;
import com.nflg.mobilebroken.repository.entity.QuotationModelForbid;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.validation.Valid;
/**
* <p>
* 报价-机型禁售 服务类
@ -13,4 +18,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IQuotationModelForbidService extends IService<QuotationModelForbid> {
IPage<ProductModelSimpleVO> search(ModelConfigSearchRequest request);
}

View File

@ -1,5 +1,9 @@
package com.nflg.mobilebroken.repository.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.mobilebroken.common.pojo.request.ModelConfigSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.ProductModelSimpleVO;
import com.nflg.mobilebroken.repository.entity.QuotationModelForbid;
import com.nflg.mobilebroken.repository.mapper.QuotationModelForbidMapper;
import com.nflg.mobilebroken.repository.service.IQuotationModelForbidService;
@ -17,4 +21,8 @@ import org.springframework.stereotype.Service;
@Service
public class QuotationModelForbidServiceImpl extends ServiceImpl<QuotationModelForbidMapper, QuotationModelForbid> implements IQuotationModelForbidService {
@Override
public IPage<ProductModelSimpleVO> search(ModelConfigSearchRequest request) {
return baseMapper.search(request,new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -76,7 +76,8 @@ public class QuotationModelPriceServiceImpl extends ServiceImpl<QuotationModelPr
.map(area -> new ModelPriceConfigAreaVO()
.setCode(area.getCode())
.setAmount(areaPrices.stream()
.filter(pit -> pit.getPriceItemId().equals(0L))
.filter(pit -> pit.getPriceItemId().equals(0L)
&& pit.getAreaId().equals(area.getId()))
.map(QuotationModelPriceItemArea::getAmount)
.findFirst()
.orElse(null)

View File

@ -12,20 +12,18 @@
LEFT JOIN dictionary_item di ON di.id=pm.module_id
LEFT JOIN v_quotation_model_config qmc ON pm.batch_number=qmc.model_id
WHERE pm.state=1
<where>
<if test="request.moduleId!=null">
AND pm.module_id=#{request.moduleId}
</if>
<if test="request.seriesNumber!=null">
AND pm.series_number=#{request.seriesNumber}
</if>
<if test="request.typeNumber!=null">
AND pm.type_number=#{request.typeNumber}
</if>
<if test="request.no!=null and request.no!=''">
AND pm.`no` like concat('%', #{request.no}, '%')
</if>
</where>
<if test="request.moduleId!=null">
AND pm.module_id=#{request.moduleId}
</if>
<if test="request.seriesNumber!=null">
AND pm.series_number=#{request.seriesNumber}
</if>
<if test="request.typeNumber!=null">
AND pm.type_number=#{request.typeNumber}
</if>
<if test="request.no!=null and request.no!=''">
AND pm.`no` like concat('%', #{request.no}, '%')
</if>
order by qmc.update_time desc,qmc.create_time desc,pm.id
</select>
</mapper>

View File

@ -11,20 +11,18 @@
LEFT JOIN product_series ps ON pm.series_number=ps.batch_number AND ps.state=1
LEFT JOIN dictionary_item di ON di.id=pm.module_id
WHERE pm.state=1 and qmd.discount_status=1
<where>
<if test="request.moduleId!=null">
AND pm.module_id=#{request.moduleId}
</if>
<if test="request.seriesNumber!=null">
AND pm.series_number=#{request.seriesNumber}
</if>
<if test="request.typeNumber!=null">
AND pm.type_number=#{request.typeNumber}
</if>
<if test="request.no!=null and request.no!=''">
AND pm.`no` like concat('%', #{request.no}, '%')
</if>
</where>
<if test="request.moduleId!=null">
AND pm.module_id=#{request.moduleId}
</if>
<if test="request.seriesNumber!=null">
AND pm.series_number=#{request.seriesNumber}
</if>
<if test="request.typeNumber!=null">
AND pm.type_number=#{request.typeNumber}
</if>
<if test="request.no!=null and request.no!=''">
AND pm.`no` like concat('%', #{request.no}, '%')
</if>
order by qmd.update_time desc,qmd.id desc
</select>
</mapper>

View File

@ -2,4 +2,25 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.mobilebroken.repository.mapper.QuotationModelForbidMapper">
<select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductModelSimpleVO">
SELECT pm.batch_number,pm.no
FROM product_model pm
LEFT JOIN product_type pt on pm.type_number=pt.batch_number AND pt.state=1
LEFT JOIN product_series ps ON pm.series_number=ps.batch_number AND ps.state=1
LEFT JOIN dictionary_item di ON di.id=pm.module_id
WHERE pm.state=1
<if test="request.moduleId!=null">
AND pm.module_id=#{request.moduleId}
</if>
<if test="request.seriesNumber!=null">
AND pm.series_number=#{request.seriesNumber}
</if>
<if test="request.typeNumber!=null">
AND pm.type_number=#{request.typeNumber}
</if>
<if test="request.no!=null and request.no!=''">
AND pm.`no` like concat('%', #{request.no}, '%')
</if>
order by pm.id
</select>
</mapper>

View File

@ -15,20 +15,18 @@
LEFT JOIN v_quotation_model_price qmp ON pm.batch_number=qmp.model_id
LEFT JOIN quotation_model_config qmc2 ON qmc2.id=qmp.config_id
WHERE pm.state=1 AND qmc1.config_status=1
<where>
<if test="request.moduleId!=null">
AND pm.module_id=#{request.moduleId}
</if>
<if test="request.seriesNumber!=null">
AND pm.series_number=#{request.seriesNumber}
</if>
<if test="request.typeNumber!=null">
AND pm.type_number=#{request.typeNumber}
</if>
<if test="request.no!=null and request.no!=''">
AND pm.`no` like concat('%', #{request.no}, '%')
</if>
</where>
<if test="request.moduleId!=null">
AND pm.module_id=#{request.moduleId}
</if>
<if test="request.seriesNumber!=null">
AND pm.series_number=#{request.seriesNumber}
</if>
<if test="request.typeNumber!=null">
AND pm.type_number=#{request.typeNumber}
</if>
<if test="request.no!=null and request.no!=''">
AND pm.`no` like concat('%', #{request.no}, '%')
</if>
order by qmp.price_status,qmp.update_time desc,pm.id
</select>
</mapper>