Browse Source

物料大更新

master
常熟吴彦祖 4 weeks ago
parent
commit
caa8eecb00
  1. 97
      src/main/java/com/xujie/modules/supplier/controller/SupplierPartMoqPriceController.java
  2. 23
      src/main/java/com/xujie/modules/supplier/data/SupplierPartMoqPriceQueryVo.java
  3. 34
      src/main/java/com/xujie/modules/supplier/data/SupplierPartMoqPriceVo.java
  4. 16
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryDetailQueryVo.java
  5. 24
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryMainQueryVo.java
  6. 51
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryMainVo.java
  7. 24
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryQueryVo.java
  8. 47
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryVo.java
  9. 31
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceItemVo.java
  10. 18
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceQueryVo.java
  11. 31
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceSaveVo.java
  12. 16
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadErrorVo.java
  13. 23
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadPreviewResultVo.java
  14. 27
      src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadPreviewVo.java
  15. 91
      src/main/java/com/xujie/modules/supplier/mapper/SupplierPartMoqPriceMapper.java
  16. 44
      src/main/java/com/xujie/modules/supplier/service/ISupplierPartMoqPriceService.java
  17. 437
      src/main/java/com/xujie/modules/supplier/service/impl/SupplierPartMoqPriceServiceImpl.java
  18. 340
      src/main/resources/mapper/supplier/SupplierPartMoqPriceMapper.xml

97
src/main/java/com/xujie/modules/supplier/controller/SupplierPartMoqPriceController.java

@ -0,0 +1,97 @@
package com.xujie.modules.supplier.controller;
import com.xujie.common.utils.R;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceQueryVo;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryDetailQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceSaveVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceUploadPreviewVo;
import com.xujie.modules.supplier.service.ISupplierPartMoqPriceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description 供应商物料MOQ与阶梯价维护Controller - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Api(tags = "供应商物料MOQ与阶梯价")
@RestController
@RequestMapping("/supplier/supplierPartMoqPrice")
public class SupplierPartMoqPriceController {
@Autowired
private ISupplierPartMoqPriceService supplierPartMoqPriceService;
@PostMapping("/listSupplierPart")
@ApiOperation("查询供应商可供物料与MOQ")
public R listSupplierPart(@RequestBody SupplierPartMoqPriceQueryVo query) {
return R.ok().put("rows", supplierPartMoqPriceService.listSupplierPartMoq(query));
}
@PostMapping("/saveSupplierPart")
@ApiOperation("保存供应商可供物料与MOQ")
public R saveSupplierPart(@RequestBody SupplierPartMoqPriceVo data) {
supplierPartMoqPriceService.saveSupplierPartMoq(data);
return R.ok();
}
@PostMapping("/addSupplierPart")
@ApiOperation("新增供应商可供物料")
public R addSupplierPart(@RequestBody SupplierPartMoqPriceVo data) {
supplierPartMoqPriceService.addSupplierPartMoq(data);
return R.ok();
}
@PostMapping("/listCurrentTierPrice")
@ApiOperation("查询当前生效阶梯价")
public R listCurrentTierPrice(@RequestBody SupplierPartTierPriceQueryVo query) {
return R.ok().put("rows", supplierPartMoqPriceService.listCurrentTierPrice(query));
}
@PostMapping("/saveTierPrice")
@ApiOperation("保存阶梯价(先历史后当前)")
public R saveTierPrice(@RequestBody SupplierPartTierPriceSaveVo data) {
supplierPartMoqPriceService.saveTierPrice(data);
return R.ok();
}
@PostMapping("/uploadPreview")
@ApiOperation("上传阶梯价预校验")
public R uploadPreview(@RequestBody SupplierPartTierPriceUploadPreviewVo data) {
return R.ok().put("row", supplierPartMoqPriceService.uploadPreview(data));
}
@PostMapping("/uploadConfirm")
@ApiOperation("上传阶梯价确认落库")
public R uploadConfirm(@RequestBody SupplierPartTierPriceSaveVo data) {
supplierPartMoqPriceService.uploadConfirm(data);
return R.ok();
}
@PostMapping("/listTierPriceHistory")
@ApiOperation("查询阶梯价历史")
public R listTierPriceHistory(@RequestBody SupplierPartTierPriceHistoryQueryVo query) {
return R.ok().put("rows", supplierPartMoqPriceService.listTierPriceHistory(query));
}
@PostMapping("/listTierPriceHistoryMain")
@ApiOperation("查询阶梯价历史主记录")
public R listTierPriceHistoryMain(@RequestBody SupplierPartTierPriceHistoryMainQueryVo query) {
return R.ok().put("rows", supplierPartMoqPriceService.listTierPriceHistoryMain(query));
}
@PostMapping("/listTierPriceHistoryDetail")
@ApiOperation("按主记录查询阶梯价历史明细")
public R listTierPriceHistoryDetail(@RequestBody SupplierPartTierPriceHistoryDetailQueryVo query) {
return R.ok().put("rows", supplierPartMoqPriceService.listTierPriceHistoryDetail(query));
}
}

23
src/main/java/com/xujie/modules/supplier/data/SupplierPartMoqPriceQueryVo.java

@ -0,0 +1,23 @@
package com.xujie.modules.supplier.data;
import com.xujie.common.utils.QueryPage;
import lombok.Data;
/**
* @Description 供应商物料MOQ查询入参 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartMoqPriceQueryVo extends QueryPage {
private String site;
private String supplierCode;
private String partNo;
private String partDesc;
private String active;
}

34
src/main/java/com/xujie/modules/supplier/data/SupplierPartMoqPriceVo.java

@ -0,0 +1,34 @@
package com.xujie.modules.supplier.data;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Description 供应商可供物料与MOQ数据 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartMoqPriceVo {
private Integer id;
private String site;
private String supplierCode;
private String supplierName;
private String partNo;
private String partDesc;
private BigDecimal moq;
private String currency;
private String currencyDesc;
private String active;
}

16
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryDetailQueryVo.java

@ -0,0 +1,16 @@
package com.xujie.modules.supplier.data;
import lombok.Data;
/**
* @Description 阶梯价历史明细查询入参按主记录 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceHistoryDetailQueryVo {
private String site;
private Long historyMainId;
}

24
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryMainQueryVo.java

@ -0,0 +1,24 @@
package com.xujie.modules.supplier.data;
import com.xujie.common.utils.QueryPage;
import lombok.Data;
/**
* @Description 阶梯价历史主记录查询入参 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceHistoryMainQueryVo extends QueryPage {
private String site;
private String supplierCode;
private String partNo;
/**
* 价格日期yyyy-MM-dd
*/
private String priceDate;
}

51
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryMainVo.java

@ -0,0 +1,51 @@
package com.xujie.modules.supplier.data;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @Description 阶梯价历史主记录 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceHistoryMainVo {
private Long id;
private String site;
private String supplierCode;
private String supplierName;
private String partNo;
private String partDesc;
private String versionNo;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitDate;
/**
* 上传日期yyyy-MM-dd不带时分秒
*/
private String submitDateOnly;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date priceDate;
private String submitBy;
private String attachmentRefs;
private String currency;
private String currencyDesc;
}

24
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryQueryVo.java

@ -0,0 +1,24 @@
package com.xujie.modules.supplier.data;
import com.xujie.common.utils.QueryPage;
import lombok.Data;
/**
* @Description 阶梯价历史查询入参 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceHistoryQueryVo extends QueryPage {
private String site;
private String supplierCode;
private String partNo;
/**
* 价格日期yyyy-MM-dd
*/
private String priceDate;
}

47
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryVo.java

@ -0,0 +1,47 @@
package com.xujie.modules.supplier.data;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 阶梯价历史明细 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceHistoryVo {
private Long historyMainId;
private String versionNo;
private String site;
private String supplierCode;
private String partNo;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date submitDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date priceDate;
private String submitBy;
private String attachmentRefs;
private BigDecimal qtyStart;
private BigDecimal qtyEnd;
private BigDecimal unitPrice;
private String remark;
}

31
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceItemVo.java

@ -0,0 +1,31 @@
package com.xujie.modules.supplier.data;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description 供应商物料阶梯价行数据 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceItemVo {
private BigDecimal qtyStart;
private BigDecimal qtyEnd;
private BigDecimal unitPrice;
private String remark;
private String attachmentRefs;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date priceDate;
}

18
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceQueryVo.java

@ -0,0 +1,18 @@
package com.xujie.modules.supplier.data;
import lombok.Data;
/**
* @Description 供应商物料当前阶梯价查询入参 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceQueryVo {
private String site;
private String supplierCode;
private String partNo;
}

31
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceSaveVo.java

@ -0,0 +1,31 @@
package com.xujie.modules.supplier.data;
import lombok.Data;
import java.util.List;
/**
* @Description 供应商物料阶梯价保存入参 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceSaveVo {
private String site;
private String supplierCode;
private String partNo;
/**
* 价格日期yyyy-MM-dd
*/
private String priceDate;
private String attachmentRefs;
private String submitBy;
private List<SupplierPartTierPriceItemVo> tierPriceList;
}

16
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadErrorVo.java

@ -0,0 +1,16 @@
package com.xujie.modules.supplier.data;
import lombok.Data;
/**
* @Description 阶梯价上传行错误信息 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceUploadErrorVo {
private Integer rowNo;
private String message;
}

23
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadPreviewResultVo.java

@ -0,0 +1,23 @@
package com.xujie.modules.supplier.data;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 阶梯价上传预校验结果 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceUploadPreviewResultVo {
private Integer successCount = 0;
private Integer failCount = 0;
private List<SupplierPartTierPriceItemVo> rows = new ArrayList<>();
private List<SupplierPartTierPriceUploadErrorVo> rowErrors = new ArrayList<>();
}

27
src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadPreviewVo.java

@ -0,0 +1,27 @@
package com.xujie.modules.supplier.data;
import lombok.Data;
import java.util.List;
/**
* @Description 阶梯价上传预校验入参 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Data
public class SupplierPartTierPriceUploadPreviewVo {
private String site;
private String supplierCode;
private String partNo;
/**
* 价格日期yyyy-MM-dd
*/
private String priceDate;
private List<SupplierPartTierPriceItemVo> rows;
}

91
src/main/java/com/xujie/modules/supplier/mapper/SupplierPartMoqPriceMapper.java

@ -0,0 +1,91 @@
package com.xujie.modules.supplier.mapper;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceQueryVo;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryDetailQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceItemVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceQueryVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Description 供应商物料MOQ与阶梯价Mapper - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Mapper
public interface SupplierPartMoqPriceMapper {
List<SupplierPartMoqPriceVo> listSupplierPartMoq(@Param("query") SupplierPartMoqPriceQueryVo query);
Integer countSupplierPart(@Param("site") String site,
@Param("supplierCode") String supplierCode,
@Param("partNo") String partNo);
Integer countSupplierByNo(@Param("site") String site,
@Param("supplierCode") String supplierCode);
Integer countPartByNo(@Param("site") String site,
@Param("partNo") String partNo);
String getSupplierCurrency(@Param("site") String site,
@Param("supplierCode") String supplierCode);
String getSupplierPartCurrency(@Param("site") String site,
@Param("supplierCode") String supplierCode,
@Param("partNo") String partNo);
int updateSupplierPartMoq(@Param("site") String site,
@Param("supplierCode") String supplierCode,
@Param("partNo") String partNo,
@Param("moq") BigDecimal moq,
@Param("active") String active);
int insertSupplierPartMoq(@Param("site") String site,
@Param("supplierCode") String supplierCode,
@Param("partNo") String partNo,
@Param("moq") BigDecimal moq,
@Param("active") String active,
@Param("currency") String currency);
List<SupplierPartTierPriceItemVo> listCurrentTierPrice(@Param("query") SupplierPartTierPriceQueryVo query);
int deleteCurrentTierPrice(@Param("site") String site,
@Param("supplierCode") String supplierCode,
@Param("partNo") String partNo);
int insertCurrentTierPriceBatch(@Param("site") String site,
@Param("supplierCode") String supplierCode,
@Param("partNo") String partNo,
@Param("priceDate") String priceDate,
@Param("attachmentRefs") String attachmentRefs,
@Param("submitBy") String submitBy,
@Param("list") List<SupplierPartTierPriceItemVo> list);
int insertHistoryTierPriceMain(SupplierPartTierPriceHistoryMainVo mainVo);
int insertHistoryTierPriceBatch(@Param("site") String site,
@Param("historyMainId") Long historyMainId,
@Param("supplierCode") String supplierCode,
@Param("partNo") String partNo,
@Param("versionNo") String versionNo,
@Param("submitDate") Date submitDate,
@Param("priceDate") String priceDate,
@Param("attachmentRefs") String attachmentRefs,
@Param("submitBy") String submitBy,
@Param("list") List<SupplierPartTierPriceItemVo> list);
List<SupplierPartTierPriceHistoryVo> listTierPriceHistory(@Param("query") SupplierPartTierPriceHistoryQueryVo query);
List<SupplierPartTierPriceHistoryMainVo> listTierPriceHistoryMain(@Param("query") SupplierPartTierPriceHistoryMainQueryVo query);
List<SupplierPartTierPriceHistoryVo> listTierPriceHistoryDetail(@Param("query") SupplierPartTierPriceHistoryDetailQueryVo query);
}

44
src/main/java/com/xujie/modules/supplier/service/ISupplierPartMoqPriceService.java

@ -0,0 +1,44 @@
package com.xujie.modules.supplier.service;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceQueryVo;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryDetailQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceItemVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceSaveVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceUploadPreviewResultVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceUploadPreviewVo;
import java.util.List;
/**
* @Description 供应商物料MOQ与阶梯价服务接口 - rqrq
* @author rqrq
* @date 2026/07/14
*/
public interface ISupplierPartMoqPriceService {
List<SupplierPartMoqPriceVo> listSupplierPartMoq(SupplierPartMoqPriceQueryVo query);
void addSupplierPartMoq(SupplierPartMoqPriceVo data);
void saveSupplierPartMoq(SupplierPartMoqPriceVo data);
List<SupplierPartTierPriceItemVo> listCurrentTierPrice(SupplierPartTierPriceQueryVo query);
void saveTierPrice(SupplierPartTierPriceSaveVo data);
SupplierPartTierPriceUploadPreviewResultVo uploadPreview(SupplierPartTierPriceUploadPreviewVo data);
void uploadConfirm(SupplierPartTierPriceSaveVo data);
List<SupplierPartTierPriceHistoryVo> listTierPriceHistory(SupplierPartTierPriceHistoryQueryVo query);
List<SupplierPartTierPriceHistoryMainVo> listTierPriceHistoryMain(SupplierPartTierPriceHistoryMainQueryVo query);
List<SupplierPartTierPriceHistoryVo> listTierPriceHistoryDetail(SupplierPartTierPriceHistoryDetailQueryVo query);
}

437
src/main/java/com/xujie/modules/supplier/service/impl/SupplierPartMoqPriceServiceImpl.java

@ -0,0 +1,437 @@
package com.xujie.modules.supplier.service.impl;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceQueryVo;
import com.xujie.modules.supplier.data.SupplierPartMoqPriceVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryDetailQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceItemVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceQueryVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceSaveVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceUploadErrorVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceUploadPreviewResultVo;
import com.xujie.modules.supplier.data.SupplierPartTierPriceUploadPreviewVo;
import com.xujie.modules.supplier.mapper.SupplierPartMoqPriceMapper;
import com.xujie.modules.supplier.service.ISupplierPartMoqPriceService;
import com.xujie.modules.sys.entity.SysUserEntity;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
/**
* @Description 供应商物料MOQ与阶梯价服务实现 - rqrq
* @author rqrq
* @date 2026/07/14
*/
@Slf4j
@Service
public class SupplierPartMoqPriceServiceImpl implements ISupplierPartMoqPriceService {
@Autowired
private SupplierPartMoqPriceMapper supplierPartMoqPriceMapper;
@Override
public List<SupplierPartMoqPriceVo> listSupplierPartMoq(SupplierPartMoqPriceQueryVo query) {
if (query == null) {
throw new RuntimeException("查询参数不能为空");
}
validateSite(query.getSite());
if (!StringUtils.hasText(query.getSupplierCode())) {
throw new RuntimeException("供应商编码不能为空");
}
query.setSite(query.getSite().trim());
query.setSupplierCode(normalizeCode(query.getSupplierCode()));
if (StringUtils.hasText(query.getPartNo())) {
query.setPartNo(normalizeCode(query.getPartNo()));
}
if (StringUtils.hasText(query.getPartDesc())) {
query.setPartDesc(query.getPartDesc().trim());
}
return supplierPartMoqPriceMapper.listSupplierPartMoq(query);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addSupplierPartMoq(SupplierPartMoqPriceVo data) {
if (data == null) {
throw new RuntimeException("保存参数不能为空");
}
validateSite(data.getSite());
if (!StringUtils.hasText(data.getSupplierCode())) {
throw new RuntimeException("供应商编码不能为空");
}
if (!StringUtils.hasText(data.getPartNo())) {
throw new RuntimeException("物料编码不能为空");
}
BigDecimal moq = data.getMoq() == null ? BigDecimal.ZERO : data.getMoq();
if (moq.compareTo(BigDecimal.ZERO) < 0) {
throw new RuntimeException("MOQ不能小于0");
}
String active = StringUtils.hasText(data.getActive()) ? data.getActive().trim() : "Y";
String site = data.getSite().trim();
String supplierCode = normalizeCode(data.getSupplierCode());
String partNo = normalizeCode(data.getPartNo());
Integer supplierCount = supplierPartMoqPriceMapper.countSupplierByNo(site, supplierCode);
if (supplierCount == null || supplierCount <= 0) {
throw new RuntimeException("供应商不存在");
}
Integer partCount = supplierPartMoqPriceMapper.countPartByNo(site, partNo);
if (partCount == null || partCount <= 0) {
throw new RuntimeException("物料不存在");
}
String supplierCurrency = normalizeCurrency(supplierPartMoqPriceMapper.getSupplierCurrency(site, supplierCode));
if (!StringUtils.hasText(supplierCurrency)) {
supplierCurrency = "CNY";
}
Integer relationCount = supplierPartMoqPriceMapper.countSupplierPart(site, supplierCode, partNo);
if (relationCount != null && relationCount > 0) {
throw new RuntimeException("供应商+物料已存在,请勿重复新增");
}
supplierPartMoqPriceMapper.insertSupplierPartMoq(site, supplierCode, partNo, moq, active, supplierCurrency);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveSupplierPartMoq(SupplierPartMoqPriceVo data) {
if (data == null) {
throw new RuntimeException("保存参数不能为空");
}
validateSite(data.getSite());
if (!StringUtils.hasText(data.getSupplierCode())) {
throw new RuntimeException("供应商编码不能为空");
}
if (!StringUtils.hasText(data.getPartNo())) {
throw new RuntimeException("物料编码不能为空");
}
if (data.getMoq() == null) {
throw new RuntimeException("MOQ不能为空");
}
if (data.getMoq().compareTo(BigDecimal.ZERO) < 0) {
throw new RuntimeException("MOQ不能小于0");
}
String active = StringUtils.hasText(data.getActive()) ? data.getActive().trim() : "Y";
String site = data.getSite().trim();
String supplierCode = normalizeCode(data.getSupplierCode());
String partNo = normalizeCode(data.getPartNo());
Integer relationCount = supplierPartMoqPriceMapper.countSupplierPart(site, supplierCode, partNo);
if (relationCount == null || relationCount <= 0) {
throw new RuntimeException("供应商+物料不存在,请先新增");
}
supplierPartMoqPriceMapper.updateSupplierPartMoq(site, supplierCode, partNo, data.getMoq(), active);
}
@Override
public List<SupplierPartTierPriceItemVo> listCurrentTierPrice(SupplierPartTierPriceQueryVo query) {
if (query == null) {
throw new RuntimeException("查询参数不能为空");
}
validateTierPriceBase(query.getSite(), query.getSupplierCode(), query.getPartNo());
query.setSite(query.getSite().trim());
query.setSupplierCode(query.getSupplierCode().trim());
query.setPartNo(query.getPartNo().trim());
return supplierPartMoqPriceMapper.listCurrentTierPrice(query);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveTierPrice(SupplierPartTierPriceSaveVo data) {
if (data == null) {
throw new RuntimeException("保存参数不能为空");
}
validateTierPriceBase(data.getSite(), data.getSupplierCode(), data.getPartNo());
if (!StringUtils.hasText(data.getPriceDate())) {
throw new RuntimeException("价格日期不能为空");
}
List<SupplierPartTierPriceItemVo> normalizedRows = normalizeTierPriceList(data.getTierPriceList());
String site = data.getSite().trim();
String supplierCode = data.getSupplierCode().trim();
String partNo = data.getPartNo().trim();
String submitBy = resolveSubmitBy(data.getSubmitBy());
String attachmentRefs = StringUtils.hasText(data.getAttachmentRefs()) ? data.getAttachmentRefs().trim() : "";
String versionNo = generateVersionNo();
Date submitDate = new Date();
String historyCurrency = normalizeCurrency(supplierPartMoqPriceMapper.getSupplierPartCurrency(site, supplierCode, partNo));
if (!StringUtils.hasText(historyCurrency)) {
historyCurrency = normalizeCurrency(supplierPartMoqPriceMapper.getSupplierCurrency(site, supplierCode));
}
// 先写历史再替换当前 - rqrq
SupplierPartTierPriceHistoryMainVo historyMainVo = new SupplierPartTierPriceHistoryMainVo();
historyMainVo.setSite(site);
historyMainVo.setSupplierCode(supplierCode);
historyMainVo.setPartNo(partNo);
historyMainVo.setVersionNo(versionNo);
historyMainVo.setSubmitDate(submitDate);
historyMainVo.setPriceDate(parseDate(data.getPriceDate().trim()));
historyMainVo.setSubmitBy(submitBy);
historyMainVo.setAttachmentRefs(attachmentRefs);
historyMainVo.setCurrency(historyCurrency);
supplierPartMoqPriceMapper.insertHistoryTierPriceMain(historyMainVo);
if (historyMainVo.getId() == null) {
throw new RuntimeException("历史主记录写入失败");
}
supplierPartMoqPriceMapper.insertHistoryTierPriceBatch(
site,
historyMainVo.getId(),
supplierCode,
partNo,
versionNo,
submitDate,
data.getPriceDate().trim(),
attachmentRefs,
submitBy,
normalizedRows
);
supplierPartMoqPriceMapper.deleteCurrentTierPrice(site, supplierCode, partNo);
supplierPartMoqPriceMapper.insertCurrentTierPriceBatch(
site,
supplierCode,
partNo,
data.getPriceDate().trim(),
attachmentRefs,
submitBy,
normalizedRows
);
}
@Override
public SupplierPartTierPriceUploadPreviewResultVo uploadPreview(SupplierPartTierPriceUploadPreviewVo data) {
if (data == null) {
throw new RuntimeException("上传参数不能为空");
}
validateTierPriceBase(data.getSite(), data.getSupplierCode(), data.getPartNo());
if (!StringUtils.hasText(data.getPriceDate())) {
throw new RuntimeException("价格日期不能为空");
}
if (CollectionUtils.isEmpty(data.getRows())) {
throw new RuntimeException("上传内容不能为空");
}
SupplierPartTierPriceUploadPreviewResultVo result = new SupplierPartTierPriceUploadPreviewResultVo();
List<SupplierPartTierPriceItemVo> successRows = new ArrayList<>();
List<Integer> successRowNos = new ArrayList<>();
for (int i = 0; i < data.getRows().size(); i++) {
SupplierPartTierPriceItemVo row = data.getRows().get(i);
Integer rowNo = i + 1;
String errMsg = validateUploadRow(row);
if (StringUtils.hasText(errMsg)) {
SupplierPartTierPriceUploadErrorVo errorVo = new SupplierPartTierPriceUploadErrorVo();
errorVo.setRowNo(rowNo);
errorVo.setMessage(errMsg);
result.getRowErrors().add(errorVo);
continue;
}
SupplierPartTierPriceItemVo normalizedRow = normalizeTierRow(row);
String overlapMsg = validateRangeOverlapForPreview(normalizedRow, successRows, successRowNos);
if (StringUtils.hasText(overlapMsg)) {
SupplierPartTierPriceUploadErrorVo errorVo = new SupplierPartTierPriceUploadErrorVo();
errorVo.setRowNo(rowNo);
errorVo.setMessage(overlapMsg);
result.getRowErrors().add(errorVo);
continue;
}
successRows.add(normalizedRow);
successRowNos.add(rowNo);
}
successRows.sort(Comparator.comparing(SupplierPartTierPriceItemVo::getQtyStart)
.thenComparing(SupplierPartTierPriceItemVo::getQtyEnd));
result.setRows(successRows);
result.setSuccessCount(successRows.size());
result.setFailCount(result.getRowErrors().size());
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void uploadConfirm(SupplierPartTierPriceSaveVo data) {
saveTierPrice(data);
}
@Override
public List<SupplierPartTierPriceHistoryVo> listTierPriceHistory(SupplierPartTierPriceHistoryQueryVo query) {
if (query == null) {
throw new RuntimeException("查询参数不能为空");
}
validateTierPriceBase(query.getSite(), query.getSupplierCode(), query.getPartNo());
query.setSite(query.getSite().trim());
query.setSupplierCode(query.getSupplierCode().trim());
query.setPartNo(query.getPartNo().trim());
if (StringUtils.hasText(query.getPriceDate())) {
query.setPriceDate(query.getPriceDate().trim());
}
return supplierPartMoqPriceMapper.listTierPriceHistory(query);
}
@Override
public List<SupplierPartTierPriceHistoryMainVo> listTierPriceHistoryMain(SupplierPartTierPriceHistoryMainQueryVo query) {
if (query == null) {
throw new RuntimeException("查询参数不能为空");
}
validateSite(query.getSite());
query.setSite(query.getSite().trim());
if (StringUtils.hasText(query.getSupplierCode())) {
query.setSupplierCode(normalizeCode(query.getSupplierCode()));
}
if (StringUtils.hasText(query.getPartNo())) {
query.setPartNo(normalizeCode(query.getPartNo()));
}
if (StringUtils.hasText(query.getPriceDate())) {
query.setPriceDate(query.getPriceDate().trim());
}
return supplierPartMoqPriceMapper.listTierPriceHistoryMain(query);
}
@Override
public List<SupplierPartTierPriceHistoryVo> listTierPriceHistoryDetail(SupplierPartTierPriceHistoryDetailQueryVo query) {
if (query == null) {
throw new RuntimeException("查询参数不能为空");
}
validateSite(query.getSite());
if (query.getHistoryMainId() == null) {
throw new RuntimeException("历史主记录ID不能为空");
}
query.setSite(query.getSite().trim());
return supplierPartMoqPriceMapper.listTierPriceHistoryDetail(query);
}
private List<SupplierPartTierPriceItemVo> normalizeTierPriceList(List<SupplierPartTierPriceItemVo> rows) {
if (CollectionUtils.isEmpty(rows)) {
throw new RuntimeException("阶梯价格不能为空");
}
List<SupplierPartTierPriceItemVo> normalizedRows = new ArrayList<>();
for (SupplierPartTierPriceItemVo row : rows) {
String errMsg = validateUploadRow(row);
if (StringUtils.hasText(errMsg)) {
throw new RuntimeException(errMsg);
}
normalizedRows.add(normalizeTierRow(row));
}
normalizedRows.sort(Comparator.comparing(SupplierPartTierPriceItemVo::getQtyStart)
.thenComparing(SupplierPartTierPriceItemVo::getQtyEnd));
validateRangeOverlapForSave(normalizedRows);
return normalizedRows;
}
private String validateUploadRow(SupplierPartTierPriceItemVo row) {
if (row == null) {
return "数据行不能为空";
}
if (row.getQtyStart() == null) {
return "开始数量不能为空";
}
if (row.getQtyEnd() == null) {
return "结束数量不能为空";
}
if (row.getQtyStart().compareTo(BigDecimal.ZERO) < 0) {
return "开始数量不能小于0";
}
if (row.getQtyEnd().compareTo(BigDecimal.ZERO) < 0) {
return "结束数量不能小于0";
}
if (row.getQtyStart().compareTo(row.getQtyEnd()) > 0) {
return "开始数量不能大于结束数量";
}
if (row.getUnitPrice() == null) {
return "单价不能为空";
}
if (row.getUnitPrice().compareTo(BigDecimal.ZERO) < 0) {
return "单价不能小于0";
}
return "";
}
private SupplierPartTierPriceItemVo normalizeTierRow(SupplierPartTierPriceItemVo row) {
SupplierPartTierPriceItemVo normalizedRow = new SupplierPartTierPriceItemVo();
normalizedRow.setQtyStart(row.getQtyStart());
normalizedRow.setQtyEnd(row.getQtyEnd());
normalizedRow.setUnitPrice(row.getUnitPrice());
normalizedRow.setRemark(StringUtils.hasText(row.getRemark()) ? row.getRemark().trim() : "");
return normalizedRow;
}
private String validateRangeOverlapForPreview(SupplierPartTierPriceItemVo currentRow,
List<SupplierPartTierPriceItemVo> existsRows,
List<Integer> existsRowNos) {
for (int i = 0; i < existsRows.size(); i++) {
if (isRangeOverlap(currentRow, existsRows.get(i))) {
return "数量区间与第" + existsRowNos.get(i) + "行重叠";
}
}
return "";
}
private void validateRangeOverlapForSave(List<SupplierPartTierPriceItemVo> rows) {
for (int i = 1; i < rows.size(); i++) {
SupplierPartTierPriceItemVo previous = rows.get(i - 1);
SupplierPartTierPriceItemVo current = rows.get(i);
if (isRangeOverlap(previous, current)) {
throw new RuntimeException("数量区间存在重叠,请检查开始数量和结束数量");
}
}
}
private boolean isRangeOverlap(SupplierPartTierPriceItemVo left, SupplierPartTierPriceItemVo right) {
return left.getQtyStart().compareTo(right.getQtyEnd()) <= 0
&& right.getQtyStart().compareTo(left.getQtyEnd()) <= 0;
}
private String resolveSubmitBy(String submitBy) {
if (StringUtils.hasText(submitBy)) {
return submitBy.trim();
}
Object principal = SecurityUtils.getSubject().getPrincipal();
if (principal instanceof SysUserEntity) {
return ((SysUserEntity) principal).getUsername();
}
return "system";
}
private String generateVersionNo() {
return "TP" + DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(LocalDateTime.now());
}
private Date parseDate(String dateStr) {
try {
return java.sql.Date.valueOf(dateStr);
} catch (Exception e) {
throw new RuntimeException("价格日期格式错误,应为yyyy-MM-dd");
}
}
private void validateTierPriceBase(String site, String supplierCode, String partNo) {
validateSite(site);
if (!StringUtils.hasText(supplierCode)) {
throw new RuntimeException("供应商编码不能为空");
}
if (!StringUtils.hasText(partNo)) {
throw new RuntimeException("物料编码不能为空");
}
}
private void validateSite(String site) {
if (!StringUtils.hasText(site)) {
throw new RuntimeException("请前端传site");
}
}
private String normalizeCode(String value) {
return StringUtils.hasText(value) ? value.trim().toUpperCase() : "";
}
private String normalizeCurrency(String value) {
return StringUtils.hasText(value) ? value.trim().toUpperCase() : "";
}
}

340
src/main/resources/mapper/supplier/SupplierPartMoqPriceMapper.xml

@ -0,0 +1,340 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xujie.modules.supplier.mapper.SupplierPartMoqPriceMapper">
<!-- rqrq - 查询供应商可供物料与MOQ -->
<select id="listSupplierPartMoq" resultType="com.xujie.modules.supplier.data.SupplierPartMoqPriceVo">
SELECT
ROW_NUMBER() OVER(ORDER BY rel.part_no) AS id,
rel.site AS site,
rel.supplier_no AS supplierCode,
sup.supplier_name AS supplierName,
rel.part_no AS partNo,
p.part_desc AS partDesc,
rel.currency AS currency,
cur.currency_desc AS currencyDesc,
ISNULL(rel.[minOrderQty], 0) AS moq,
ISNULL(rel.active, 'Y') AS active
FROM SupplierforPart rel
LEFT JOIN srm_supplier sup
ON rel.site = sup.site
AND rel.supplier_no = sup.supplier_no
LEFT JOIN part p
ON rel.site = p.site
AND rel.part_no = p.part_no
LEFT JOIN [Currency] cur
ON rel.site = cur.site
AND rel.currency = cur.currency
WHERE rel.site = #{query.site}
AND rel.supplier_no = #{query.supplierCode}
<if test="query.partNo != null and query.partNo != ''">
AND rel.part_no LIKE CONCAT('%', #{query.partNo}, '%')
</if>
<if test="query.partDesc != null and query.partDesc != ''">
AND p.part_desc LIKE CONCAT('%', #{query.partDesc}, '%')
</if>
<if test="query.active != null and query.active != ''">
AND rel.active = #{query.active}
</if>
ORDER BY rel.part_no
</select>
<!-- rqrq - 校验供应商物料关系是否存在 -->
<select id="countSupplierPart" resultType="java.lang.Integer">
SELECT COUNT(1)
FROM SupplierforPart
WHERE site = #{site}
AND supplier_no = #{supplierCode}
AND part_no = #{partNo}
</select>
<!-- rqrq - 校验供应商是否存在 -->
<select id="countSupplierByNo" resultType="java.lang.Integer">
SELECT COUNT(1)
FROM srm_supplier
WHERE site = #{site}
AND supplier_no = #{supplierCode}
</select>
<!-- rqrq - 校验物料是否存在 -->
<select id="countPartByNo" resultType="java.lang.Integer">
SELECT COUNT(1)
FROM part
WHERE site = #{site}
AND part_no = #{partNo}
</select>
<!-- rqrq - 查询供应商币种 -->
<select id="getSupplierCurrency" resultType="java.lang.String">
SELECT TOP 1 Currency
FROM srm_supplier
WHERE site = #{site}
AND supplier_no = #{supplierCode}
</select>
<!-- rqrq - 查询供应商物料币种 -->
<select id="getSupplierPartCurrency" resultType="java.lang.String">
SELECT TOP 1 currency
FROM SupplierforPart
WHERE site = #{site}
AND supplier_no = #{supplierCode}
AND part_no = #{partNo}
</select>
<!-- rqrq - 更新MOQ -->
<update id="updateSupplierPartMoq">
UPDATE SupplierforPart
SET [minOrderQty] = #{moq},
active = #{active}
WHERE site = #{site}
AND supplier_no = #{supplierCode}
AND part_no = #{partNo}
</update>
<!-- rqrq - 新增供应商物料关系 -->
<insert id="insertSupplierPartMoq">
INSERT INTO SupplierforPart
(
site,
supplier_no,
part_no,
[minOrderQty],
active,
currency
)
VALUES
(
#{site},
#{supplierCode},
#{partNo},
#{moq},
#{active},
#{currency}
)
</insert>
<!-- rqrq - 查询当前生效阶梯价 -->
<select id="listCurrentTierPrice" resultType="com.xujie.modules.supplier.data.SupplierPartTierPriceItemVo">
SELECT
qty_start AS qtyStart,
qty_end AS qtyEnd,
unit_price AS unitPrice,
remark AS remark,
attachment_refs AS attachmentRefs,
price_date AS priceDate
FROM sp_current_tier_price
WHERE site = #{query.site}
AND supplier_code = #{query.supplierCode}
AND part_no = #{query.partNo}
ORDER BY qty_start, qty_end
</select>
<!-- rqrq - 删除当前生效阶梯价 -->
<delete id="deleteCurrentTierPrice">
DELETE FROM sp_current_tier_price
WHERE site = #{site}
AND supplier_code = #{supplierCode}
AND part_no = #{partNo}
</delete>
<!-- rqrq - 批量写入当前生效阶梯价 -->
<insert id="insertCurrentTierPriceBatch">
INSERT INTO sp_current_tier_price
(
site,
supplier_code,
part_no,
qty_start,
qty_end,
unit_price,
price_date,
attachment_refs,
remark,
create_by,
create_date,
update_by,
update_date
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{site},
#{supplierCode},
#{partNo},
#{item.qtyStart},
#{item.qtyEnd},
#{item.unitPrice},
CAST(#{priceDate} AS DATETIME),
#{attachmentRefs},
#{item.remark},
#{submitBy},
GETDATE(),
#{submitBy},
GETDATE()
)
</foreach>
</insert>
<!-- rqrq - 写入阶梯价历史主记录 -->
<insert id="insertHistoryTierPriceMain" parameterType="com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainVo" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
INSERT INTO sp_tier_price_history_main
(
site,
supplier_code,
part_no,
version_no,
submit_date,
price_date,
submit_by,
currency,
attachment_refs,
create_by,
create_date
)
VALUES
(
#{site},
#{supplierCode},
#{partNo},
#{versionNo},
#{submitDate},
#{priceDate},
#{submitBy},
#{currency},
#{attachmentRefs},
#{submitBy},
GETDATE()
)
</insert>
<!-- rqrq - 批量写入阶梯价历史 -->
<insert id="insertHistoryTierPriceBatch">
INSERT INTO sp_tier_price_history
(
history_main_id,
site,
supplier_code,
part_no,
version_no,
submit_date,
submit_by,
qty_start,
qty_end,
unit_price,
price_date,
attachment_refs,
remark,
create_by,
create_date
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{historyMainId},
#{site},
#{supplierCode},
#{partNo},
#{versionNo},
#{submitDate},
#{submitBy},
#{item.qtyStart},
#{item.qtyEnd},
#{item.unitPrice},
CAST(#{priceDate} AS DATETIME),
#{attachmentRefs},
#{item.remark},
#{submitBy},
GETDATE()
)
</foreach>
</insert>
<!-- rqrq - 查询阶梯价历史 -->
<select id="listTierPriceHistory" resultType="com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryVo">
SELECT
version_no AS versionNo,
site AS site,
supplier_code AS supplierCode,
part_no AS partNo,
submit_date AS submitDate,
price_date AS priceDate,
submit_by AS submitBy,
attachment_refs AS attachmentRefs,
history_main_id AS historyMainId,
qty_start AS qtyStart,
qty_end AS qtyEnd,
unit_price AS unitPrice,
remark AS remark
FROM sp_tier_price_history
WHERE site = #{query.site}
AND supplier_code = #{query.supplierCode}
AND part_no = #{query.partNo}
<if test="query.priceDate != null and query.priceDate != ''">
AND CONVERT(VARCHAR(10), price_date, 23) = #{query.priceDate}
</if>
ORDER BY submit_date DESC, version_no DESC, qty_start ASC, qty_end ASC
</select>
<!-- rqrq - 查询阶梯价历史主记录 -->
<select id="listTierPriceHistoryMain" resultType="com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryMainVo">
SELECT
m.id AS id,
m.site AS site,
m.supplier_code AS supplierCode,
s.supplier_name AS supplierName,
m.part_no AS partNo,
p.part_desc AS partDesc,
m.version_no AS versionNo,
m.submit_date AS submitDate,
CONVERT(VARCHAR(10), m.submit_date, 23) AS submitDateOnly,
m.price_date AS priceDate,
m.submit_by AS submitBy,
m.currency AS currency,
cur.currency_desc AS currencyDesc,
m.attachment_refs AS attachmentRefs
FROM sp_tier_price_history_main m
LEFT JOIN srm_supplier s
ON s.site = m.site
AND s.supplier_no = m.supplier_code
LEFT JOIN part p
ON p.site = m.site
AND p.part_no = m.part_no
LEFT JOIN [Currency] cur
ON cur.site = m.site
AND cur.currency = m.currency
WHERE m.site = #{query.site}
<if test="query.supplierCode != null and query.supplierCode != ''">
AND m.supplier_code = #{query.supplierCode}
</if>
<if test="query.partNo != null and query.partNo != ''">
AND m.part_no = #{query.partNo}
</if>
<if test="query.priceDate != null and query.priceDate != ''">
AND CONVERT(VARCHAR(10), m.price_date, 23) = #{query.priceDate}
</if>
ORDER BY m.submit_date DESC, m.id DESC
</select>
<!-- rqrq - 按主记录查询阶梯价历史明细 -->
<select id="listTierPriceHistoryDetail" resultType="com.xujie.modules.supplier.data.SupplierPartTierPriceHistoryVo">
SELECT
history_main_id AS historyMainId,
version_no AS versionNo,
site AS site,
supplier_code AS supplierCode,
part_no AS partNo,
submit_date AS submitDate,
price_date AS priceDate,
submit_by AS submitBy,
attachment_refs AS attachmentRefs,
qty_start AS qtyStart,
qty_end AS qtyEnd,
unit_price AS unitPrice,
remark AS remark
FROM sp_tier_price_history
WHERE site = #{query.site}
AND history_main_id = #{query.historyMainId}
ORDER BY qty_start ASC, qty_end ASC
</select>
</mapper>
Loading…
Cancel
Save