18 changed files with 1374 additions and 0 deletions
-
97src/main/java/com/xujie/modules/supplier/controller/SupplierPartMoqPriceController.java
-
23src/main/java/com/xujie/modules/supplier/data/SupplierPartMoqPriceQueryVo.java
-
34src/main/java/com/xujie/modules/supplier/data/SupplierPartMoqPriceVo.java
-
16src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryDetailQueryVo.java
-
24src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryMainQueryVo.java
-
51src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryMainVo.java
-
24src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryQueryVo.java
-
47src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceHistoryVo.java
-
31src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceItemVo.java
-
18src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceQueryVo.java
-
31src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceSaveVo.java
-
16src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadErrorVo.java
-
23src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadPreviewResultVo.java
-
27src/main/java/com/xujie/modules/supplier/data/SupplierPartTierPriceUploadPreviewVo.java
-
91src/main/java/com/xujie/modules/supplier/mapper/SupplierPartMoqPriceMapper.java
-
44src/main/java/com/xujie/modules/supplier/service/ISupplierPartMoqPriceService.java
-
437src/main/java/com/xujie/modules/supplier/service/impl/SupplierPartMoqPriceServiceImpl.java
-
340src/main/resources/mapper/supplier/SupplierPartMoqPriceMapper.xml
@ -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)); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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<>(); |
|||
} |
|||
@ -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; |
|||
} |
|||
@ -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); |
|||
} |
|||
@ -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); |
|||
} |
|||
@ -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() : ""; |
|||
} |
|||
} |
|||
@ -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> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue