Commit 42bffba8 authored by chicheng's avatar chicheng

采购到货、进货单调整、BUG修复

批次号去掉物料
parent bd2afb45
......@@ -79,7 +79,7 @@ public class StockController {
Invmb invmb = purccService.validate(params);
StockArrivalValidateDto rst = new StockArrivalValidateDto();
rst.setInvmb(invmb);
if("Y".equals(invmb.getMb022())){
if(!"N".equals(invmb.getMb022())){
rst.setDefBatchNo(purccService.buildBatch(params.getMaterialNo()));
}else {
rst.setDefBatchNo(Constants.BATCH_DEF);
......
......@@ -4,7 +4,10 @@ import com.topsunit.scanservice.ximai.entity.Purcd;
import com.topsunit.scanservice.ximai.entity.PurcdId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.math.BigDecimal;
import java.util.List;
/**
......@@ -18,4 +21,10 @@ import java.util.List;
public interface PurcdDao extends JpaRepository<Purcd, PurcdId>, JpaSpecificationExecutor<Purcd> {
List<Purcd> findByCd001AndCd002(String cd001, String cd002);
Purcd findFirstByCd017StartingWithOrderByCd017Desc(String prefix);
/**
* 统计采购单序号下已创建到货单的到货数量合计
*/
@Query("select coalesce(sum(p.cd008), 0) from Purcd p where p.cd010 = :cd010 and p.cd011 = :cd011 and p.cd012 = :cd012")
BigDecimal sumArrivalQuantityByPurchaseLine(@Param("cd010") String cd010, @Param("cd011") String cd011, @Param("cd012") String cd012);
}
......@@ -54,6 +54,9 @@ public class InvmbDto {
@ApiModelProperty("检验方式")
private String mb043;
@ApiModelProperty("采购单位")
private String mb148;
@ApiModelProperty("计价单位")
private String mb149;
@ApiModelProperty("客户品号")
......
......@@ -36,6 +36,8 @@ public class PurcdDto {
@ApiModelProperty("采购单号")
private String cd011;
private String cd012;
@ApiModelProperty("采购单位")
private String cd015;
private String cd017;
private BigDecimal cd018;
private BigDecimal cd019;
......
......@@ -28,6 +28,10 @@ public class PurthCreateDto {
private String cd005 = "";
@ApiModelProperty("单位")
private String cd007 = "";
@ApiModelProperty("采购单位")
private String cd015;
@ApiModelProperty("采购单位")
private String cd021="";
@ApiModelProperty("采购单别")
private String cd010 = "";
@ApiModelProperty("采购单号")
......@@ -43,12 +47,14 @@ public class PurthCreateDto {
private String th009 = "";
@ApiModelProperty("原币单位金价")
private String th010 = "";
@ApiModelProperty("")
@ApiModelProperty("验收数量")
private BigDecimal th015 = BigDecimal.ZERO;
@ApiModelProperty("")
@ApiModelProperty("计价数量")
private BigDecimal th016 = BigDecimal.ZERO;
@ApiModelProperty("")
@ApiModelProperty("验退数量")
private BigDecimal th017 = BigDecimal.ZERO;
@ApiModelProperty("库存数量")
private BigDecimal th034 = BigDecimal.ZERO;
@ApiModelProperty("库位")
private String th072 = "";
......
......@@ -36,8 +36,12 @@ public class Purtd extends EntityBase {
private String td007;
@ApiModelProperty("单位")
private String td009;
@ApiModelProperty("采购数量")
@Column
private BigDecimal td008;
@Column
private BigDecimal td010;
@ApiModelProperty("已交数量")
@Column
private BigDecimal td015;
@Column
......
......@@ -39,8 +39,11 @@ public class Purth extends EntityBase {
private String th012 = "";
private String th013 = "";
private String th014 = "";
@ApiModelProperty("验收数量")
private BigDecimal th015 = BigDecimal.ZERO;
@ApiModelProperty("计价数量")
private BigDecimal th016 = BigDecimal.ZERO;
@ApiModelProperty("验退数量")
private BigDecimal th017 = BigDecimal.ZERO;
private BigDecimal th018 = BigDecimal.ZERO;
private BigDecimal th019 = BigDecimal.ZERO;
......
......@@ -235,6 +235,7 @@ public class PurccService {
if(CollectionUtil.isEmpty(stockArrivalParams.getDetails())){
throw new TopsunitException(MessageUtils.getMessage("采购到货明细不能为空"));
}
validatePurchaseArrivalQuantity(stockArrivalParams);
//查询任意采购单
StockArrivalParams.StockArrivalDetail stockArrivalDetail = stockArrivalParams.getDetails().get(0);
Purtc purtc = purtcDao.findFirstByTc001AndTc002(stockArrivalDetail.getPurchaseType(), stockArrivalDetail.getPurchaseNo())
......@@ -305,10 +306,9 @@ public class PurccService {
}
//生成批次号:产品+日期yyyyMMdd+3位流水
//生成批次号:日期yyyyMMdd+3位流水
public String buildBatch(String materialNo){
String dateStr = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(), "yyyyMMdd");
String prefix = materialNo + dateStr;
String prefix = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(), "yyyyMMdd");
Purcd last = purcdDao.findFirstByCd017StartingWithOrderByCd017Desc(prefix);
int nextSeq = 1;
if (last != null && last.getCd017() != null) {
......@@ -326,6 +326,45 @@ public class PurccService {
return prefix + seqStr;
}
/**
* 到货确认前校验:采购数量(PURTD.TD008)与已创建到货单(PURCD)数量比较,不含采购表已交数量(TD015)
*/
private void validatePurchaseArrivalQuantity(StockArrivalParams stockArrivalParams) {
Map<String, BigDecimal> arrivalQtyByLine = new LinkedHashMap<>();
for (StockArrivalParams.StockArrivalDetail detail : stockArrivalParams.getDetails()) {
if (detail.getArrivalQuantity() == null || detail.getArrivalQuantity().compareTo(BigDecimal.ZERO) <= 0) {
continue;
}
String key = detail.getPurchaseType() + "\u0001" + detail.getPurchaseNo() + "\u0001" + detail.getPurchaseSerial();
arrivalQtyByLine.merge(key, detail.getArrivalQuantity(), BigDecimal::add);
}
for (Map.Entry<String, BigDecimal> entry : arrivalQtyByLine.entrySet()) {
String[] keys = entry.getKey().split("\u0001", 3);
validateSinglePurchaseLineArrival(keys[0], keys[1], keys[2], entry.getValue());
}
}
private void validateSinglePurchaseLineArrival(String purchaseType, String purchaseNo, String purchaseSerial, BigDecimal newArrivalQty) {
purtcDao.findFirstByTc001AndTc002(purchaseType, purchaseNo)
.orElseThrow(() -> new TopsunitException(MessageUtils.getMessage("未找到采购订单{0},{1}", purchaseType, purchaseNo)));
Purtd purtd = purtdDao.findFirstByTd001AndTd002AndTd003(purchaseType, purchaseNo, purchaseSerial)
.orElseThrow(() -> new TopsunitException(MessageUtils.getMessage("未找到采购订单{0},{1},{2}", purchaseType, purchaseNo, purchaseSerial)));
BigDecimal purchaseQty = nullToZero(purtd.getTd008());
if (purchaseQty.compareTo(BigDecimal.ZERO) <= 0) {
throw new TopsunitException(MessageUtils.getMessage("采购订单数量无效{0},{1},{2}", purchaseType, purchaseNo, purchaseSerial));
}
BigDecimal existedArrivalQty = nullToZero(purcdDao.sumArrivalQuantityByPurchaseLine(purchaseType, purchaseNo, purchaseSerial));
BigDecimal totalAfter = existedArrivalQty.add(newArrivalQty);
if (totalAfter.compareTo(purchaseQty) > 0) {
throw new TopsunitException(MessageUtils.getMessage("超出采购数量{0},{1},{2}", purchaseType, purchaseNo, purchaseSerial));
}
}
private static BigDecimal nullToZero(BigDecimal value) {
return value == null ? BigDecimal.ZERO : value;
}
/**
* 按每箱数量拆分为多张标签数量。每箱为空或0时返回 [本次到货数量] 一张;否则按箱拆,如 500/200 -> [200, 200, 100]
*/
......
......@@ -304,7 +304,8 @@ public class PurtgService {
purth.setThc04(localPurcd.getCd002()); // 到货单号
purth.setThc05(localPurcd.getCd003()); // 到货序号
purth.setThc06("0001"); // 检验批次
if(purth.getTh008().equals(purth.getTh065())){
if(!purth.getTh008().equals(purth.getTh065())){
//传入采购单位转换数量
BigDecimal convertAmount = invmbService.unitConvert(localPurcd.getCd004(), purth.getTh008(),purthCreateParams.getTh015());
purth.setTh034(convertAmount); // 验收库存数量,如果采购单位不一致需转换
}
......
......@@ -36,6 +36,8 @@
品号{0}批号{1}库存不足。=品号{0}批号{1}库存不足。
未找到采购订单{0},{1}=未找到采购订单{0},{1}
未找到采购订单{0},{1},{2}=未找到采购订单{0},{1},{2}
超出采购数量{0},{1},{2}=超出采购数量,采购单别{0},单号{1},序号{2}
采购订单数量无效{0},{1},{2}=采购订单数量无效,采购单别{0},单号{1},序号{2}
未找到工单\:{0},{1}=未找到工单\:{0},{1}
请维护账套数据库编码=请维护账套数据库编码
通知单{0}已全部出库=通知单{0}已全部出库
......
......@@ -36,6 +36,8 @@
品号{0}批号{1}库存不足。=item {0} lot {1} is out of stock.
未找到采购订单{0},{1}=purchase order {0} not found, {1}
未找到采购订单{0},{1},{2}=purchase orders {0},{1},{2} not found.
超出采购数量{0},{1},{2}=exceeding purchase quantity, type {0}, no {1}, serial {2}
采购订单数量无效{0},{1},{2}=invalid purchase order quantity, type {0}, no {1}, serial {2}
未找到工单\:{0},{1}=job not found\: {0},{1}
请维护账套数据库编码=please maintain the sob database code.
通知单{0}已全部出库=notice {0} has all been issued.
......
......@@ -36,6 +36,8 @@
品号{0}批号{1}库存不足。=หมายเลข{0}หมายเลขชุด{1}ไม่เพียงพอ
未找到采购订单{0},{1}=ไม่พบใบสั่งซื้อ{0},{1}
未找到采购订单{0},{1},{2}=ไม่พบใบสั่งซื้อ{0},{1},{2}
超出采购数量{0},{1},{2}=เกินจำนวนสั่งซื้อ ประเภท{0} เลขที่{1} ลำดับ{2}
采购订单数量无效{0},{1},{2}=จำนวนใบสั่งซื้อไม่ถูกต้อง ประเภท{0} เลขที่{1} ลำดับ{2}
未找到工单\:{0},{1}=ไม่พบใบสั่งงาน\:{0},{1}
请维护账套数据库编码=โปรดรักษาการเข้ารหัสฐานข้อมูลหนังสือ
通知单{0}已全部出库=บันทึกการแจ้งเตือน{0}ออกจากระบบหมดแล้ว
......
......@@ -36,6 +36,8 @@
品号{0}批号{1}库存不足。=品号{0}批号{1}库存不足。
未找到采购订单{0},{1}=未找到采购订单{0},{1}
未找到采购订单{0},{1},{2}=未找到采购订单{0},{1},{2}
超出采购数量{0},{1},{2}=超出采购数量,采购单别{0},单号{1},序号{2}
采购订单数量无效{0},{1},{2}=采购订单数量无效,采购单别{0},单号{1},序号{2}
未找到工单\:{0},{1}=未找到工单\:{0},{1}
请维护账套数据库编码=请维护账套数据库编码
通知单{0}已全部出库=通知单{0}已全部出库
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment