Browse Source

[feat]

仓库管理 入库单
修改委外入库页面,去除编辑行样式;
修改委外暂收页面,暂收合格数添加空值初始化;
修改保存入库委外入库service方法,关联库存;
修改更新库存查询service方法,添加委外类型入库;
修改更新退料单库存查询service方法看,新增员工退料处理;
dev
王晓迪 2 months ago
parent
commit
1da755a224
  1. 145
      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

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

@ -146,6 +146,9 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
@Autowired @Autowired
private ISysRemindService remindService; private ISysRemindService remindService;
@Autowired
private BaseEmpRequisiteOrderChildMapper empRequisiteOrderChildMapper;
/** /**
* 查询仓库入库单 * 查询仓库入库单
* *
@ -515,79 +518,73 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
public int updateOutsourceStorageSave(WarehouseStorageOrder warehouseStorageOrder) { public int updateOutsourceStorageSave(WarehouseStorageOrder warehouseStorageOrder) {
String loginName = ShiroUtils.getLoginName(); String loginName = ShiroUtils.getLoginName();
warehouseStorageOrder.setUpdateBy(loginName);
warehouseStorageOrder.setUpdateTime(DateUtils.getNowDate());
//记录一下入库时间
warehouseStorageOrder.setStorageTime(DateUtils.getNowDate());
List<WarehouseStorageOrderDetail> storageOrderDetailList = warehouseStorageOrder.getWarehouseStorageOrderDetailList(); List<WarehouseStorageOrderDetail> storageOrderDetailList = warehouseStorageOrder.getWarehouseStorageOrderDetailList();
if (StringUtils.isEmpty(storageOrderDetailList)){ if (StringUtils.isEmpty(storageOrderDetailList)){
throw new BusinessException("入库单详情数据为空"); throw new BusinessException("入库单详情数据为空");
} }
WarehouseStorageOrder oldStorageOrder = warehouseStorageOrderMapper.selectStorageOrderByCode(warehouseStorageOrder.getWarehouseStorageCode());
//入库数 //入库数
Integer storageNum = 0; Integer storageNum = 0;
// 检查storageNum是否含有null值 // 检查storageNum是否含有null值
boolean hasThisStorageNumNull = storageOrderDetailList.stream() List<WarehouseStorageOrderDetail> filtList = storageOrderDetailList.stream()
.anyMatch(item -> item.getStorageNum() == null); .filter(item ->item.getStorageNum()!=null).collect(Collectors.toList());
if (filtList.size()==0) {
if (hasThisStorageNumNull) { throw new BusinessException("实际出库数不能全为空,请检查!");
throw new BusinessException("存在入库数为空,请检查!");
} }
// 计算各个字段的总和 // 计算各个详情入库数的总和
storageNum = storageOrderDetailList.stream() storageNum = filtList.stream()
.mapToInt(WarehouseStorageOrderDetail::getStorageNum) .mapToInt(WarehouseStorageOrderDetail::getStorageNum)
.sum(); .sum();
for (WarehouseStorageOrderDetail detail: filtList) {
for (WarehouseStorageOrderDetail detail: storageOrderDetailList) {
int detailStorageNum = detail.getHasStorageNum() + detail.getStorageNum(); int detailStorageNum = detail.getHasStorageNum() + detail.getStorageNum();
if(detailStorageNum > detail.getQualityQualifiedNum()){ if(detailStorageNum > detail.getQualityHasQualifiedNum()){
throw new BusinessException("物料" +detail.getMaterialNo()+ "总入库数大于品质合格数"); throw new BusinessException("物料" +detail.getMaterialNo()+ "总入库数大于品质合格数");
} }
} }
//插入主表入库数量 //插入主表入库数量
int orderStorageNum = warehouseStorageOrder.getStorageNum(); int orderStorageNum = oldStorageOrder.getStorageNum();
orderStorageNum = orderStorageNum + storageNum; orderStorageNum = orderStorageNum + storageNum;
warehouseStorageOrder.setStorageNum(orderStorageNum); oldStorageOrder.setStorageNum(orderStorageNum);
for (WarehouseStorageOrderDetail storageOrderDetail : storageOrderDetailList) { for (WarehouseStorageOrderDetail detail : filtList) {
//更新入库单详情的数据 //更新入库单详情的数据
storageOrderDetail.setUpdateBy(loginName); detail.setUpdateBy(loginName);
storageOrderDetail.setUpdateTime(DateUtils.getNowDate()); detail.setUpdateTime(DateUtils.getNowDate());
//更新已入库数 //更新已入库数
int detailStorageNum = storageOrderDetail.getHasStorageNum() + storageOrderDetail.getStorageNum(); int detailHasStockNum = Optional.ofNullable(detail.getHasStorageNum()).orElse(0);
storageOrderDetail.setHasStorageNum(detailStorageNum); int detailStorageNum = detailHasStockNum + detail.getStorageNum();
int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(storageOrderDetail); detail.setHasStorageNum(detailStorageNum);
int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(detail);
if (updateWarehouseStorageOrderDetailResult <= 0){ if (updateWarehouseStorageOrderDetailResult <= 0){
throw new BusinessException("更新仓库入库单详情失败,未影响任何行"); throw new BusinessException("更新仓库入库单详情失败,未影响任何行");
} }
//更新委外入库单详情,(只更新子表,详情页面需要展示,主表直接使用入库单,不存在 //更新委外入库单详情,(只更新子表,详情页面需要展示,主表直接使用入库单,不存在
OutsourceStorageDetail tempOut = new OutsourceStorageDetail(); OutsourceStorageDetail tempOut = new OutsourceStorageDetail();
tempOut.setWarehouseStorageCode(storageOrderDetail.getWarehouseStorageCode()); tempOut.setWarehouseStorageCode(detail.getWarehouseStorageCode());
tempOut.setMaterialNo(storageOrderDetail.getMaterialNo()); tempOut.setMaterialNo(detail.getMaterialNo());
List<OutsourceStorageDetail> outStorageDetails = outsourceStorageDetailMapper.selectOutsourceStorageDetailList(tempOut); List<OutsourceStorageDetail> outStorageDetails = outsourceStorageDetailMapper.selectOutsourceStorageDetailList(tempOut);
OutsourceStorageDetail updateDetail = outStorageDetails.get(0); OutsourceStorageDetail updateDetail = outStorageDetails.get(0);
updateDetail.setTakenMaterial(new BigDecimal(storageOrderDetail.getHasStorageNum()));//入库单详情已领料数已更新 updateDetail.setTakenMaterial(new BigDecimal(detail.getHasStorageNum()));//入库单详情已领料数已更新
updateDetail.setUpdateBy(loginName); updateDetail.setUpdateBy(loginName);
updateDetail.setUpdateTime(DateUtils.getNowDate()); updateDetail.setUpdateTime(DateUtils.getNowDate());
int outUpdateResult = outsourceStorageDetailMapper.updateOutsourceStorageDetail(updateDetail); int outUpdateResult = outsourceStorageDetailMapper.updateOutsourceStorageDetail(updateDetail);
if(outUpdateResult<=0){ if(outUpdateResult<=0){
throw new BusinessException("更新委外入库单详情失败!"); throw new BusinessException("更新委外入库单详情失败!");
} }
/*更新库存查询信息*/
WarehouseStorageOrderDetail updateStorageOrderDetail = storageOrderDetailMapper.selectWarehouseStorageOrderDetailById(storageOrderDetail.getWarehouseStorageDetailId()); WarehouseStorageOrderDetail updateStorageOrderDetail = storageOrderDetailMapper.selectWarehouseStorageOrderDetailById(detail.getWarehouseStorageDetailId());
createWarehouseInventoryInquiry(updateStorageOrderDetail); createWarehouseInventoryInquiry(updateStorageOrderDetail);
} }
//更新入库单的数据 //更新入库单的数据
oldStorageOrder.setUpdateBy(loginName);
oldStorageOrder.setUpdateTime(DateUtils.getNowDate());
oldStorageOrder.setStorageTime(DateUtils.getNowDate());
int updateResult = warehouseStorageOrderMapper.updateWarehouseStorageOrder(warehouseStorageOrder); int updateResult = warehouseStorageOrderMapper.updateWarehouseStorageOrder(warehouseStorageOrder);
if (updateResult <= 0){ if (updateResult <= 0){
log.warn("更新入库单失败,未影响任何行"); throw new BusinessException("更新入库单失败,未影响任何行");
} }
return updateResult; 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()) sharedNum = Optional.ofNullable(pickDetails.get(0).getSharedStockNum())
.orElse(0); .orElse(0);
}else if(pickNo.startsWith("YGLL")){ }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(); BaseReturnOrderDetail tempReturnDetail = new BaseReturnOrderDetail();
@ -1988,22 +1974,57 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
if (insertDetailResult <= 0){ if (insertDetailResult <= 0){
throw new BusinessException("新增库存履历失败!"); throw new BusinessException("新增库存履历失败!");
} }
}else if(warehouseStorageType.equals("4")){//新增委外入库库存历史记录
WarehouseInventoryInquiryDetail inquiryDetail = new WarehouseInventoryInquiryDetail();
inquiryDetail = createMakeInOrderInquiryDetail(warehouseStorageOrderDetail);
// inquiryDetail.setInventoryHistoricalType("2");
inventoryInquiryDetailMapper.insertWarehouseInventoryInquiryDetail(inquiryDetail);
} }
//查询该物料报损数,更新库存查询报损数 else if(warehouseStorageType.equals("4")){//新增委外入库库存历史记录
List<WarehouseInventoryReportDamageChild> damageChildren = damageChildMapper.selectWarehouseInventoryReportDamageChildByMaterialNo(materialNo); WarehouseInventoryInquiry oldWarehouseInventoryInquiry = warehouseInventoryInquiryMapper.selectWarehouseInventoryInquiryByMaterialNo(materialNo);
Integer scrapSum = 0; Integer historicalTotal = oldWarehouseInventoryInquiry.getHistoricalTotal();
if(StringUtils.isNotEmpty(damageChildren)){ historicalTotal += storageNum;
for (WarehouseInventoryReportDamageChild damageChild:damageChildren) { oldWarehouseInventoryInquiry.setHistoricalTotal(historicalTotal);
Integer scrapNum = damageChild.getActualScrapQuantity();
scrapSum += scrapSum; 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;
// }
// }
}
//生成入库库存历史记录 //生成入库库存历史记录
public WarehouseInventoryInquiryDetail createMakeInOrderInquiryDetail(WarehouseStorageOrderDetail storageOrderDetail){ public WarehouseInventoryInquiryDetail createMakeInOrderInquiryDetail(WarehouseStorageOrderDetail storageOrderDetail){

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

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

Loading…
Cancel
Save