Browse Source

[feat]

仓库管理 入库单
修改委外入库页面,去除编辑行样式;
修改委外暂收页面,暂收合格数添加空值初始化;
修改保存入库委外入库service方法,关联库存;
修改更新库存查询service方法,添加委外类型入库;
修改更新退料单库存查询service方法看,新增员工退料处理;
dev
王晓迪 2 months ago
parent
commit
1da755a224
  1. 147
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java
  2. 1
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageOutOrder.html
  3. 26
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/temporaryOutOrder.html

147
ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java

@ -146,6 +146,9 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
@Autowired
private ISysRemindService remindService;
@Autowired
private BaseEmpRequisiteOrderChildMapper empRequisiteOrderChildMapper;
/**
* 查询仓库入库单
*
@ -515,79 +518,73 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
public int updateOutsourceStorageSave(WarehouseStorageOrder warehouseStorageOrder) {
String loginName = ShiroUtils.getLoginName();
warehouseStorageOrder.setUpdateBy(loginName);
warehouseStorageOrder.setUpdateTime(DateUtils.getNowDate());
//记录一下入库时间
warehouseStorageOrder.setStorageTime(DateUtils.getNowDate());
List<WarehouseStorageOrderDetail> storageOrderDetailList = warehouseStorageOrder.getWarehouseStorageOrderDetailList();
if (StringUtils.isEmpty(storageOrderDetailList)){
throw new BusinessException("入库单详情数据为空");
}
WarehouseStorageOrder oldStorageOrder = warehouseStorageOrderMapper.selectStorageOrderByCode(warehouseStorageOrder.getWarehouseStorageCode());
//入库数
Integer storageNum = 0;
// 检查storageNum是否含有null值
boolean hasThisStorageNumNull = storageOrderDetailList.stream()
.anyMatch(item -> item.getStorageNum() == null);
if (hasThisStorageNumNull) {
throw new BusinessException("存在入库数为空,请检查!");
// 检查storageNum是否含有null值
List<WarehouseStorageOrderDetail> filtList = storageOrderDetailList.stream()
.filter(item ->item.getStorageNum()!=null).collect(Collectors.toList());
if (filtList.size()==0) {
throw new BusinessException("实际出库数不能全为空,请检查!");
}
// 计算各个字段的总和
storageNum = storageOrderDetailList.stream()
// 计算各个详情入库数的总和
storageNum = filtList.stream()
.mapToInt(WarehouseStorageOrderDetail::getStorageNum)
.sum();
for (WarehouseStorageOrderDetail detail: storageOrderDetailList) {
for (WarehouseStorageOrderDetail detail: filtList) {
int detailStorageNum = detail.getHasStorageNum() + detail.getStorageNum();
if(detailStorageNum > detail.getQualityQualifiedNum()){
if(detailStorageNum > detail.getQualityHasQualifiedNum()){
throw new BusinessException("物料" +detail.getMaterialNo()+ "总入库数大于品质合格数");
}
}
//插入主表入库数量
int orderStorageNum = warehouseStorageOrder.getStorageNum();
int orderStorageNum = oldStorageOrder.getStorageNum();
orderStorageNum = orderStorageNum + storageNum;
warehouseStorageOrder.setStorageNum(orderStorageNum);
oldStorageOrder.setStorageNum(orderStorageNum);
for (WarehouseStorageOrderDetail storageOrderDetail : storageOrderDetailList) {
for (WarehouseStorageOrderDetail detail : filtList) {
//更新入库单详情的数据
storageOrderDetail.setUpdateBy(loginName);
storageOrderDetail.setUpdateTime(DateUtils.getNowDate());
detail.setUpdateBy(loginName);
detail.setUpdateTime(DateUtils.getNowDate());
//更新已入库数
int detailStorageNum = storageOrderDetail.getHasStorageNum() + storageOrderDetail.getStorageNum();
storageOrderDetail.setHasStorageNum(detailStorageNum);
int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(storageOrderDetail);
int detailHasStockNum = Optional.ofNullable(detail.getHasStorageNum()).orElse(0);
int detailStorageNum = detailHasStockNum + detail.getStorageNum();
detail.setHasStorageNum(detailStorageNum);
int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(detail);
if (updateWarehouseStorageOrderDetailResult <= 0){
throw new BusinessException("更新仓库入库单详情失败,未影响任何行");
}
//更新委外入库单详情,(只更新子表,详情页面需要展示,主表直接使用入库单,不存在
OutsourceStorageDetail tempOut = new OutsourceStorageDetail();
tempOut.setWarehouseStorageCode(storageOrderDetail.getWarehouseStorageCode());
tempOut.setMaterialNo(storageOrderDetail.getMaterialNo());
tempOut.setWarehouseStorageCode(detail.getWarehouseStorageCode());
tempOut.setMaterialNo(detail.getMaterialNo());
List<OutsourceStorageDetail> outStorageDetails = outsourceStorageDetailMapper.selectOutsourceStorageDetailList(tempOut);
OutsourceStorageDetail updateDetail = outStorageDetails.get(0);
updateDetail.setTakenMaterial(new BigDecimal(storageOrderDetail.getHasStorageNum()));//入库单详情已领料数已更新
updateDetail.setTakenMaterial(new BigDecimal(detail.getHasStorageNum()));//入库单详情已领料数已更新
updateDetail.setUpdateBy(loginName);
updateDetail.setUpdateTime(DateUtils.getNowDate());
int outUpdateResult = outsourceStorageDetailMapper.updateOutsourceStorageDetail(updateDetail);
if(outUpdateResult<=0){
throw new BusinessException("更新委外入库单详情失败!");
}
WarehouseStorageOrderDetail updateStorageOrderDetail = storageOrderDetailMapper.selectWarehouseStorageOrderDetailById(storageOrderDetail.getWarehouseStorageDetailId());
/*更新库存查询信息*/
WarehouseStorageOrderDetail updateStorageOrderDetail = storageOrderDetailMapper.selectWarehouseStorageOrderDetailById(detail.getWarehouseStorageDetailId());
createWarehouseInventoryInquiry(updateStorageOrderDetail);
}
//更新入库单的数据
oldStorageOrder.setUpdateBy(loginName);
oldStorageOrder.setUpdateTime(DateUtils.getNowDate());
oldStorageOrder.setStorageTime(DateUtils.getNowDate());
int updateResult = warehouseStorageOrderMapper.updateWarehouseStorageOrder(warehouseStorageOrder);
if (updateResult <= 0){
log.warn("更新入库单失败,未影响任何行");
throw new BusinessException("更新入库单失败,未影响任何行");
}
return updateResult;
}
/**
@ -741,22 +738,6 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
}
// 根据入库单(采购订单)关联品质单获取历史总数(已到货数-品质不合格数)(采购总数-退换货数)
public BigDecimal getHistoricalTotalFromQualityOrder(WarehouseStorageOrderDetail warehouseStorageOrderDetail){
BigDecimal historicalTotal = BigDecimal.ZERO;
QualityOrderDetail tempDetail = new QualityOrderDetail();
tempDetail.setInStorageCode(warehouseStorageOrderDetail.getWarehouseStorageCode());
tempDetail.setMaterialNo(warehouseStorageOrderDetail.getMaterialNo());
QualityOrderDetail qualityOrderDetail = qualityOrderDetailMapper.selectQualityOrderDetailByStorageCodeAndno(tempDetail);
Integer actualArriveNum = qualityOrderDetail.getCheckNum();
Integer qualityUnqualifiedNum = qualityOrderDetail.getQualityUnqualifiedNum();
historicalTotal = BigDecimal.valueOf(actualArriveNum)
.subtract(BigDecimal.valueOf(qualityUnqualifiedNum));
return historicalTotal;
}
/**
* 修改保存入库-采购单(仓库入库)
*/
@ -1749,7 +1730,12 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
sharedNum = Optional.ofNullable(pickDetails.get(0).getSharedStockNum())
.orElse(0);
}else if(pickNo.startsWith("YGLL")){
BaseEmpRequisiteOrderChild tempChild = new BaseEmpRequisiteOrderChild();
tempChild.setQuoteId(pickNo);
tempChild.setMaterialCode(storageOrderDetail.getMaterialNo());
List<BaseEmpRequisiteOrderChild> pickDetails = empRequisiteOrderChildMapper.selectBaseEmpRequisiteOrderChildList(tempChild);
sharedNum = Optional.ofNullable(pickDetails.get(0).getSharedStockAllocatedNum())
.orElse(0);
}
/*获取该领料单关联所有退料单详情实际总退料数,以便计算归还固定和共享库存数*/
BaseReturnOrderDetail tempReturnDetail = new BaseReturnOrderDetail();
@ -1988,21 +1974,56 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
if (insertDetailResult <= 0){
throw new BusinessException("新增库存履历失败!");
}
}else if(warehouseStorageType.equals("4")){//新增委外入库库存历史记录
WarehouseInventoryInquiryDetail inquiryDetail = new WarehouseInventoryInquiryDetail();
inquiryDetail = createMakeInOrderInquiryDetail(warehouseStorageOrderDetail);
// inquiryDetail.setInventoryHistoricalType("2");
inventoryInquiryDetailMapper.insertWarehouseInventoryInquiryDetail(inquiryDetail);
}
//查询该物料报损数,更新库存查询报损数
List<WarehouseInventoryReportDamageChild> damageChildren = damageChildMapper.selectWarehouseInventoryReportDamageChildByMaterialNo(materialNo);
Integer scrapSum = 0;
if(StringUtils.isNotEmpty(damageChildren)){
for (WarehouseInventoryReportDamageChild damageChild:damageChildren) {
Integer scrapNum = damageChild.getActualScrapQuantity();
scrapSum += scrapSum;
else if(warehouseStorageType.equals("4")){//新增委外入库库存历史记录
WarehouseInventoryInquiry oldWarehouseInventoryInquiry = warehouseInventoryInquiryMapper.selectWarehouseInventoryInquiryByMaterialNo(materialNo);
Integer historicalTotal = oldWarehouseInventoryInquiry.getHistoricalTotal();
historicalTotal += storageNum;
oldWarehouseInventoryInquiry.setHistoricalTotal(historicalTotal);
Integer availableStockNum = oldWarehouseInventoryInquiry.getAvailableStockNum();
if (availableStockNum == null || availableStockNum == 0){
availableStockNum = storageNum;
}else {
availableStockNum += storageNum;
}
oldWarehouseInventoryInquiry.setAvailableStockNum(availableStockNum);
Integer fixedAvailableStockNum = oldWarehouseInventoryInquiry.getFixedAvailableStockNum();//固定可用库存
if (fixedAvailableStockNum == null || fixedAvailableStockNum == 0){
fixedAvailableStockNum = storageNum;
}else {
fixedAvailableStockNum += storageNum;
}
oldWarehouseInventoryInquiry.setFixedAvailableStockNum(fixedAvailableStockNum);
int updateResult = warehouseInventoryInquiryService.updateWarehouseInventoryInquiry(oldWarehouseInventoryInquiry);
if (updateResult <= 0){
throw new BusinessException("更新库存查询记录失败!");
}
remindService.warehouseSafetyStockRemind(oldWarehouseInventoryInquiry);
WarehouseInventoryInquiryDetail inquiryDetail = createMakeInOrderInquiryDetail(warehouseStorageOrderDetail);
inquiryDetail.setInquiryWarehouseType("2");//委外入库
inquiryDetail.setInquiryOrderType("2");//委外入库单
inquiryDetail.setInquiryBusinessType("2");//委外
int insertDetailResult = inventoryInquiryDetailMapper.insertWarehouseInventoryInquiryDetail(inquiryDetail);
if (insertDetailResult <= 0){
throw new BusinessException("新增库存履历失败!");
}
}
//查询该物料报损数,更新库存查询报损数
// List<WarehouseInventoryReportDamageChild> damageChildren = damageChildMapper.selectWarehouseInventoryReportDamageChildByMaterialNo(materialNo);
// Integer scrapSum = 0;
// if(StringUtils.isNotEmpty(damageChildren)){
// for (WarehouseInventoryReportDamageChild damageChild:damageChildren) {
// Integer scrapNum = damageChild.getActualScrapQuantity();
// scrapSum += scrapSum;
// }
// }
}
//生成入库库存历史记录

1
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageOutOrder.html

@ -282,7 +282,6 @@
field: 'storageNum',
editable:{
type: 'text',
mode:'inline',
validate: function (v) {
if (!v) return '数量不能为空';
if (isNaN(v)) return '数量必须是数字';

26
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/temporaryOutOrder.html

@ -201,31 +201,31 @@
}
},
{
title: '物料图片地址',
title: '图片',
align: 'center',
field: 'materialPhotourl',
},
{
title: '物料型号',
title: '型号',
field: 'materialModel',
},
{
title: '物料描述',
title: '描述',
align: 'center',
field: 'materialDescribe',
},
{
title: '物料品牌',
title: '品牌',
align: 'center',
field: 'materialBrand',
},
{
title: '物料单位',
title: '单位',
align: 'center',
field: 'materialUnit',
},
{
title: '物料加工方式',
title: '加工方式',
align: 'center',
field: 'materialProcessMethod',
formatter: function(value, row, index) {
@ -272,9 +272,14 @@
title: '实际到货数',
align: 'center',
field: 'actualArriveNum',
formatter: function(value, row, index) {
if(value === null||value === undefined){
value = '';
}
return value;
},
editable:{
type: 'text',
mode:'inline',
validate: function (v) {
if (!v) return '数量不能为空';
if (isNaN(v)) return '数量必须是数字';
@ -288,9 +293,14 @@
title: '暂收合格数',
align: 'center',
field: 'temporaryQualifiedNum',
formatter: function(value, row, index) {
if(value === null||value === undefined){
value = '';
}
return value;
},
editable:{
type: 'text',
mode:'inline',
validate: function (v) {
if (!v) return '数量不能为空';
if (isNaN(v)) return '数量必须是数字';

Loading…
Cancel
Save