Compare commits

...

2 Commits

Author SHA1 Message Date
王晓迪 c6f9ff4c2d [fix] 4 days ago
王晓迪 b894d6c81e [fix] 4 days ago
  1. 12
      ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpInboundOrderDetail.java
  2. 246
      ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpInboundOrderServiceImpl.java
  3. 33
      ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualityOrder.java
  4. 71
      ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualityOrderDetail.java

12
ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpInboundOrderDetail.java

@ -44,11 +44,11 @@ public class ErpInboundOrderDetail extends BaseEntity
/** 已完成数 */ /** 已完成数 */
@Excel(name = "已完成数") @Excel(name = "已完成数")
private Long completedNum; private int completedNum;
/** 本次完成数 */ /** 本次完成数 */
@Excel(name = "本次完成数") @Excel(name = "本次完成数")
private Long currentNum; private int currentNum;
/** 加工费单价 */ /** 加工费单价 */
@Excel(name = "加工费单价") @Excel(name = "加工费单价")
@ -117,21 +117,21 @@ public class ErpInboundOrderDetail extends BaseEntity
this.availableStockNum = availableStockNum; this.availableStockNum = availableStockNum;
} }
public void setCompletedNum(Long completedNum) public void setCompletedNum(int completedNum)
{ {
this.completedNum = completedNum; this.completedNum = completedNum;
} }
public Long getCompletedNum() public int getCompletedNum()
{ {
return completedNum; return completedNum;
} }
public void setCurrentNum(Long currentNum) public void setCurrentNum(int currentNum)
{ {
this.currentNum = currentNum; this.currentNum = currentNum;
} }
public Long getCurrentNum() public int getCurrentNum()
{ {
return currentNum; return currentNum;
} }

246
ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpInboundOrderServiceImpl.java

@ -109,112 +109,10 @@ public class ErpInboundOrderServiceImpl implements IErpInboundOrderService
/** /**
* 生产订单新增委内加工入库单先品质 * 生产订单新增委内加工入库单先品质
* */
* @param erpInboundOrder 委内加工入库单
* @return 结果
*/
@Override @Override
@Transactional(rollbackFor = Exception.class) public int insertErpInboundOrder(ErpInboundOrder erpInboundOrder) {
public int insertErpInboundOrder(ErpInboundOrder erpInboundOrder) return erpInboundOrderMapper.insertErpInboundOrder(erpInboundOrder);
{
QualityOrder qualityOrder = new QualityOrder();
String loginName = ShiroUtils.getLoginName();
erpInboundOrder.setCreateBy(loginName);
erpInboundOrder.setCreateTime(DateUtils.getNowDate());
// 生成编号,年月日规则
String qualityOrderCode = redisCache.generateBillNo("PZ");
qualityOrder.setQualityOrderCode(qualityOrderCode);
//设置关联单号
qualityOrder.setRelatedOrderCode(erpInboundOrder.getMakeNo());
//设置为待品质
qualityOrder.setQualityStatus("0");
//设置为委内入库
qualityOrder.setQualityStorageStatus("1");
//设置订单类型
qualityOrder.setQualityOrderType("1");
qualityOrder.setCreateTime(new Date());
qualityOrder.setCreateBy(loginName);
// 获取所有makeorderBomId对应的SysMakeorderBom对象
List<SysMakeorderBom> sysMakeorderBoms = erpInboundOrder.getInboundDetails().stream()
.map(ErpInboundOrderDetail::getMakeorderBomId)
.map(this::getSysMakeorderBomById)
.collect(Collectors.toList());
// 筛选加工方式只有委内加工的数据
List<SysMakeorderBom> filterSysMakeorderBoms = sysMakeorderBoms.stream()
.filter(sysMakeorderBom -> "1".equals(sysMakeorderBom.getProcessMethod()))
.collect(Collectors.toList());
// 创建一个Set来存储filterSysMakeorderBoms中的所有物料号MaterialNo
Set<String> materialNoSet = filterSysMakeorderBoms.stream()
.map(SysMakeorderBom::getMaterialNo)
.collect(Collectors.toSet());
// 使用materialNoSet来过滤erpInboundOrder.getInboundDetails()
List<ErpInboundOrderDetail> filteredErpInboundOrderDetails = erpInboundOrder.getInboundDetails().stream()
.filter(detail -> materialNoSet.contains(detail.getMaterialNo()) && detail.getCurrentNum() != null)
.collect(Collectors.toList());
// 首先,创建一个Map来收集每个物料号及其对应的加工费单价的列表
Map<String, List<BigDecimal>> processFeesByMaterialNo = filteredErpInboundOrderDetails.stream()
.collect(Collectors.groupingBy(
ErpInboundOrderDetail::getMaterialNo, // 分组依据:物料号
Collectors.mapping(
ErpInboundOrderDetail::getProcessFeeUnitPrice, // 映射:从每个细节中获取加工费单价
Collectors.toList() // 收集:将映射结果收集到List中
)
));
// 然后,检查是否有任何物料号的加工费单价不一致
boolean hasInconsistentFees = processFeesByMaterialNo.values().stream()
.anyMatch(prices -> prices.stream().distinct().count() > 1);
// 如果发现加工费单价不一致,则抛出异常
if (hasInconsistentFees) {
throw new BusinessException("请保持委内加工费单价一致");
}
// 计算本次委内完成数合计
long addCurrentNum = filteredErpInboundOrderDetails.stream()
.mapToLong(ErpInboundOrderDetail::getCurrentNum) // 假设getCurrentNum()返回的是int或long类型
.sum();
// 将long类型的addCurrentNum转换为BigDecimal类型
BigDecimal bigAddCurrentNum = BigDecimal.valueOf(addCurrentNum);
// 检查是否存在加工费单价为null的情况
boolean hasMakeInTotalPriceNull = filteredErpInboundOrderDetails.stream()
.anyMatch(item -> item.getProcessFeeUnitPrice() == null);
if (hasMakeInTotalPriceNull) {
throw new BusinessException("存在委内加工费为空,请检查!");
}
// 确保processFeeUnitPrice不为null,避免NullPointerException
BigDecimal processFeeUnitPrice = filteredErpInboundOrderDetails.get(0).getProcessFeeUnitPrice();
if (processFeeUnitPrice == null) {
throw new BusinessException("加工费单价未找到,请检查!");
}
// 计算委内加工费总价
BigDecimal makeInTotalPrice = bigAddCurrentNum.multiply(processFeeUnitPrice);
//加入到品质单中
qualityOrder.setMakeInTotalPrice(makeInTotalPrice);
//添加委内加工品质单详情数据
addQualityOrderDetail(erpInboundOrder, filteredErpInboundOrderDetails,qualityOrderCode,filterSysMakeorderBoms);
//添加委内加工品质单报告数据
addQualityOrderReport(filteredErpInboundOrderDetails,qualityOrderCode,filterSysMakeorderBoms);
//插入品质单
return qualityOrderMapper.insertQualityOrder(qualityOrder);
} }
// 提取公共方法 // 提取公共方法
@ -223,39 +121,39 @@ public class ErpInboundOrderServiceImpl implements IErpInboundOrderService
} }
//添加委内加工品质单报告数据 //添加委内加工品质单报告数据
private void addQualityOrderReport(List<ErpInboundOrderDetail> filteredErpInboundOrderDetails,String qualityOrderCode,List<SysMakeorderBom> sysMakeorderBoms) { // private void addQualityOrderReport(List<ErpInboundOrderDetail> filteredErpInboundOrderDetails,String qualityOrderCode,List<SysMakeorderBom> sysMakeorderBoms) {
// List<ErpInboundOrderDetail> inboundDetails = erpInboundOrder.getInboundDetails(); //// List<ErpInboundOrderDetail> inboundDetails = erpInboundOrder.getInboundDetails();
// if (CollectionUtils.isEmpty(inboundDetails)) { //// if (CollectionUtils.isEmpty(inboundDetails)) {
// throw new BusinessException("委内加工详情数据为空"); //// throw new BusinessException("委内加工详情数据为空");
//// }
// for (int i = 0; i < filteredErpInboundOrderDetails.size(); i++) {
// ErpInboundOrderDetail inboundDetail = filteredErpInboundOrderDetails.get(i);
// SysMakeorderBom sysMakeorderBom = sysMakeorderBoms.get(i);
// QualityOrderReport qualityOrderReport = new QualityOrderReport();
// qualityOrderReport.setQualityOrderCode(qualityOrderCode);
// qualityOrderReport.setMaterialNo(sysMakeorderBom.getMaterialNo());
//
// QualityOrderReport tempQualityOrderReport = qualityOrderReportMapper.selectMakeInOrderReportByNoAndCode(qualityOrderReport);
// if (tempQualityOrderReport != null){
// qualityOrderReport.setQualityOrderReportId(tempQualityOrderReport.getQualityOrderReportId());
// Long currentNum = inboundDetail.getCurrentNum();
//// qualityOrderReport.setMakeInNum((int) (tempQualityOrderReport.getMakeInNum()+currentNum));
// int updateQualityOrderReportResult = qualityOrderReportMapper.updateQualityOrderReportById(qualityOrderReport);
// if (updateQualityOrderReportResult <= 0){
// throw new BusinessException("更新品质单报告数据失败");
// }
// }else {
// qualityOrderReport.setMaterialName(sysMakeorderBom.getMaterialName());
// //添加委内已完成数
//// qualityOrderReport.setMakeInNum(Math.toIntExact(inboundDetail.getCurrentNum()));
// qualityOrderReport.setCreateBy(ShiroUtils.getLoginName());
// qualityOrderReport.setCreateTime(new Date());
// qualityOrderReportMapper.insertQualityOrderReport(qualityOrderReport);
// }
//
//
// } // }
for (int i = 0; i < filteredErpInboundOrderDetails.size(); i++) { // }
ErpInboundOrderDetail inboundDetail = filteredErpInboundOrderDetails.get(i);
SysMakeorderBom sysMakeorderBom = sysMakeorderBoms.get(i);
QualityOrderReport qualityOrderReport = new QualityOrderReport();
qualityOrderReport.setQualityOrderCode(qualityOrderCode);
qualityOrderReport.setMaterialNo(sysMakeorderBom.getMaterialNo());
QualityOrderReport tempQualityOrderReport = qualityOrderReportMapper.selectMakeInOrderReportByNoAndCode(qualityOrderReport);
if (tempQualityOrderReport != null){
qualityOrderReport.setQualityOrderReportId(tempQualityOrderReport.getQualityOrderReportId());
Long currentNum = inboundDetail.getCurrentNum();
qualityOrderReport.setMakeInNum((int) (tempQualityOrderReport.getMakeInNum()+currentNum));
int updateQualityOrderReportResult = qualityOrderReportMapper.updateQualityOrderReportById(qualityOrderReport);
if (updateQualityOrderReportResult <= 0){
throw new BusinessException("更新品质单报告数据失败");
}
}else {
qualityOrderReport.setMaterialName(sysMakeorderBom.getMaterialName());
//添加委内已完成数
qualityOrderReport.setMakeInNum(Math.toIntExact(inboundDetail.getCurrentNum()));
qualityOrderReport.setCreateBy(ShiroUtils.getLoginName());
qualityOrderReport.setCreateTime(new Date());
qualityOrderReportMapper.insertQualityOrderReport(qualityOrderReport);
}
}
}
//添加委内加工品质单详情数据 //添加委内加工品质单详情数据
private void addQualityOrderDetail(ErpInboundOrder erpInboundOrder,List<ErpInboundOrderDetail> filteredErpInboundOrderDetails,String qualityOrderCode,List<SysMakeorderBom> sysMakeorderBoms) { private void addQualityOrderDetail(ErpInboundOrder erpInboundOrder,List<ErpInboundOrderDetail> filteredErpInboundOrderDetails,String qualityOrderCode,List<SysMakeorderBom> sysMakeorderBoms) {
@ -263,43 +161,43 @@ public class ErpInboundOrderServiceImpl implements IErpInboundOrderService
// if (CollectionUtils.isEmpty(inboundDetails)) { // if (CollectionUtils.isEmpty(inboundDetails)) {
// throw new BusinessException("委内加工详情数据为空"); // throw new BusinessException("委内加工详情数据为空");
// } // }
for (int i = 0; i < filteredErpInboundOrderDetails.size(); i++) { // for (int i = 0; i < filteredErpInboundOrderDetails.size(); i++) {
ErpInboundOrderDetail inboundDetail = filteredErpInboundOrderDetails.get(i); // ErpInboundOrderDetail inboundDetail = filteredErpInboundOrderDetails.get(i);
SysMakeorderBom sysMakeorderBom = sysMakeorderBoms.get(i); // SysMakeorderBom sysMakeorderBom = sysMakeorderBoms.get(i);
//
QualityOrderDetail qualityOrderDetail = new QualityOrderDetail(); // QualityOrderDetail qualityOrderDetail = new QualityOrderDetail();
qualityOrderDetail.setMaterialNo(sysMakeorderBom.getMaterialNo()); // qualityOrderDetail.setMaterialNo(sysMakeorderBom.getMaterialNo());
qualityOrderDetail.setQualityOrderCode(qualityOrderCode); // qualityOrderDetail.setQualityOrderCode(qualityOrderCode);
QualityOrderDetail tempQualityOrderDetail = qualityOrderDetailMapper.selectMakeInOrderDetailByCodeAndNo(qualityOrderDetail); // QualityOrderDetail tempQualityOrderDetail = qualityOrderDetailMapper.selectMakeInOrderDetailByCodeAndNo(qualityOrderDetail);
if (tempQualityOrderDetail != null){ // if (tempQualityOrderDetail != null){
qualityOrderDetail.setQualityOrderDetailId(tempQualityOrderDetail.getQualityOrderDetailId()); // qualityOrderDetail.setQualityOrderDetailId(tempQualityOrderDetail.getQualityOrderDetailId());
Long currentNum = inboundDetail.getCurrentNum(); // Long currentNum = inboundDetail.getCurrentNum();
qualityOrderDetail.setMakeInNum((int) (tempQualityOrderDetail.getMakeInNum()+currentNum)); // qualityOrderDetail.setMakeInNum((int) (tempQualityOrderDetail.getMakeInNum()+currentNum));
int updateQualityOrderDetailResult = qualityOrderDetailMapper.updateQualityOrderDetail(qualityOrderDetail); // int updateQualityOrderDetailResult = qualityOrderDetailMapper.updateQualityOrderDetail(qualityOrderDetail);
if (updateQualityOrderDetailResult <= 0){ // if (updateQualityOrderDetailResult <= 0){
throw new BusinessException("更新品质单详情数据失败"); // throw new BusinessException("更新品质单详情数据失败");
} // }
}else { // }else {
qualityOrderDetail.setRelatedOrderCode(erpInboundOrder.getMakeNo()); // qualityOrderDetail.setRelatedOrderCode(erpInboundOrder.getMakeNo());
//
qualityOrderDetail.setMaterialName(sysMakeorderBom.getMaterialName()); // qualityOrderDetail.setMaterialName(sysMakeorderBom.getMaterialName());
qualityOrderDetail.setMaterialBrand(sysMakeorderBom.getBrand()); // qualityOrderDetail.setMaterialBrand(sysMakeorderBom.getBrand());
qualityOrderDetail.setMaterialDescribe(sysMakeorderBom.getDescribe()); // qualityOrderDetail.setMaterialDescribe(sysMakeorderBom.getDescribe());
qualityOrderDetail.setMaterialProcessMethod(sysMakeorderBom.getProcessMethod()); // qualityOrderDetail.setMaterialProcessMethod(sysMakeorderBom.getProcessMethod());
qualityOrderDetail.setMaterialDeptType(sysMakeorderBom.getWarehouseDept()); // qualityOrderDetail.setMaterialDeptType(sysMakeorderBom.getWarehouseDept());
qualityOrderDetail.setMaterialPhotourl(sysMakeorderBom.getPhotoUrl()); // qualityOrderDetail.setMaterialPhotourl(sysMakeorderBom.getPhotoUrl());
qualityOrderDetail.setMaterialUnit(sysMakeorderBom.getUnit()); // qualityOrderDetail.setMaterialUnit(sysMakeorderBom.getUnit());
qualityOrderDetail.setMaterialType(sysMakeorderBom.getMaterialType()); // qualityOrderDetail.setMaterialType(sysMakeorderBom.getMaterialType());
//添加委内已完成数 // //添加委内已完成数
qualityOrderDetail.setMakeInNum(Math.toIntExact(inboundDetail.getCurrentNum())); // qualityOrderDetail.setMakeInNum(Math.toIntExact(inboundDetail.getCurrentNum()));
//添加委内加工费单价 // //添加委内加工费单价
qualityOrderDetail.setMakeInUnitPrice(inboundDetail.getProcessFeeUnitPrice()); // qualityOrderDetail.setMakeInUnitPrice(inboundDetail.getProcessFeeUnitPrice());
qualityOrderDetail.setCreateBy(ShiroUtils.getLoginName()); // qualityOrderDetail.setCreateBy(ShiroUtils.getLoginName());
qualityOrderDetail.setCreateTime(new Date()); // qualityOrderDetail.setCreateTime(new Date());
qualityOrderDetailMapper.insertQualityOrderDetail(qualityOrderDetail); // qualityOrderDetailMapper.insertQualityOrderDetail(qualityOrderDetail);
} // }
//
} // }
} }
/** /**

33
ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualityOrder.java

@ -47,6 +47,15 @@ public class QualityOrder extends BaseEntity
@Excel(name = "品质单入库类型") @Excel(name = "品质单入库类型")
private String qualityStorageStatus; private String qualityStorageStatus;
//料号
private String materialNo;
//物料名称
private String materialName;
//待审核数
private int pendingReviewNum;
/** 本次到货数量 */ /** 本次到货数量 */
@Excel(name = "本次到货数量") @Excel(name = "本次到货数量")
private Integer thisArrivedNum; private Integer thisArrivedNum;
@ -235,6 +244,30 @@ public class QualityOrder extends BaseEntity
this.storageNum = storageNum; this.storageNum = storageNum;
} }
public String getMaterialNo() {
return materialNo;
}
public void setMaterialNo(String materialNo) {
this.materialNo = materialNo;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public int getPendingReviewNum() {
return pendingReviewNum;
}
public void setPendingReviewNum(int pendingReviewNum) {
this.pendingReviewNum = pendingReviewNum;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

71
ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualityOrderDetail.java

@ -106,6 +106,9 @@ public class QualityOrderDetail extends BaseEntity
@Excel(name = "物料描述") @Excel(name = "物料描述")
private String materialDescribe; private String materialDescribe;
//物料型号
private String materialModel;
/** 物料加工方式 */ /** 物料加工方式 */
@Excel(name = "物料加工方式") @Excel(name = "物料加工方式")
private String materialProcessMethod; private String materialProcessMethod;
@ -121,13 +124,6 @@ public class QualityOrderDetail extends BaseEntity
/** 生产完成数 */ /** 生产完成数 */
private Integer makeCompletionNum; private Integer makeCompletionNum;
/** 实际到货数量 */
@Excel(name = "实际到货数量")
private Integer actualArriveNum;
/** 本次到货数量 */
@Excel(name = "本次到货数量")
private Integer thisArrivedNum;
/** 品质已合格数 */ /** 品质已合格数 */
@Excel(name = "品质已合格数") @Excel(name = "品质已合格数")
@ -141,13 +137,12 @@ public class QualityOrderDetail extends BaseEntity
@Excel(name = "品质不合格数") @Excel(name = "品质不合格数")
private Integer qualityUnqualifiedNum; private Integer qualityUnqualifiedNum;
/** 委内已完成数 */ //检验数
@Excel(name = "委内已完成数") private int checkNum;
private Integer makeInNum;
//待审核数
private int pendingReviewNum;
/** 委内加工费单价 */
private BigDecimal makeInUnitPrice;
public void setQualityOrderDetailId(Long qualityOrderDetailId) public void setQualityOrderDetailId(Long qualityOrderDetailId)
@ -374,22 +369,6 @@ public class QualityOrderDetail extends BaseEntity
this.makeCompletionNum = makeCompletionNum; this.makeCompletionNum = makeCompletionNum;
} }
public Integer getActualArriveNum() {
return actualArriveNum;
}
public void setActualArriveNum(Integer actualArriveNum) {
this.actualArriveNum = actualArriveNum;
}
public Integer getThisArrivedNum() {
return thisArrivedNum;
}
public void setThisArrivedNum(Integer thisArrivedNum) {
this.thisArrivedNum = thisArrivedNum;
}
public Integer getQualityHasqualifiedNum() { public Integer getQualityHasqualifiedNum() {
return qualityHasqualifiedNum; return qualityHasqualifiedNum;
} }
@ -414,28 +393,36 @@ public class QualityOrderDetail extends BaseEntity
this.qualityUnqualifiedNum = qualityUnqualifiedNum; this.qualityUnqualifiedNum = qualityUnqualifiedNum;
} }
public Integer getMakeInNum() { public String getMaterialDeptType() {
return makeInNum; return materialDeptType;
}
public void setMaterialDeptType(String materialDeptType) {
this.materialDeptType = materialDeptType;
} }
public void setMakeInNum(Integer makeInNum) { public int getCheckNum() {
this.makeInNum = makeInNum; return checkNum;
} }
public BigDecimal getMakeInUnitPrice() { public void setCheckNum(int checkNum) {
return makeInUnitPrice; this.checkNum = checkNum;
} }
public void setMakeInUnitPrice(BigDecimal makeInUnitPrice) { public int getPendingReviewNum() {
this.makeInUnitPrice = makeInUnitPrice; return pendingReviewNum;
} }
public String getMaterialDeptType() { public void setPendingReviewNum(int pendingReviewNum) {
return materialDeptType; this.pendingReviewNum = pendingReviewNum;
} }
public void setMaterialDeptType(String materialDeptType) { public String getMaterialModel() {
this.materialDeptType = materialDeptType; return materialModel;
}
public void setMaterialModel(String materialModel) {
this.materialModel = materialModel;
} }
@Override @Override
@ -466,14 +453,10 @@ public class QualityOrderDetail extends BaseEntity
.append("materialProcessMethod", getMaterialProcessMethod()) .append("materialProcessMethod", getMaterialProcessMethod())
.append("materialDeptType",getMaterialDeptType()) .append("materialDeptType",getMaterialDeptType())
.append("makeTotal", getMakeTotal()) .append("makeTotal", getMakeTotal())
.append("actualArriveNum", getActualArriveNum())
.append("thisArrivedNum", getThisArrivedNum())
.append("qualityHasqualifiedNum", getQualityHasqualifiedNum()) .append("qualityHasqualifiedNum", getQualityHasqualifiedNum())
.append("qualityQualifiedNum", getQualityQualifiedNum()) .append("qualityQualifiedNum", getQualityQualifiedNum())
.append("qualityUnqualifiedNum", getQualityUnqualifiedNum()) .append("qualityUnqualifiedNum", getQualityUnqualifiedNum())
.append("makeInNum",getMakeInNum())
.append("makeCompletionNum",getMakeCompletionNum()) .append("makeCompletionNum",getMakeCompletionNum())
.append("makeInUnitPrice",getMakeInUnitPrice())
.append("remark", getRemark()) .append("remark", getRemark())
.append("createBy", getCreateBy()) .append("createBy", getCreateBy())
.append("createTime", getCreateTime()) .append("createTime", getCreateTime())

Loading…
Cancel
Save