Browse Source

[fix] 仓库管理

修改仓库委内入库前端详情页面布局
修改 入库-生产订单(委内入库) 物料详情列表后端接口方法
修改委内加工入库生成品质单 修改一些字段的添加
修改 仓库委内入库前端页面布局
生产委内加工的时候新加物料入库部门字段
入库订单新增 修改保存入库-生产订单(委内入库)后端接口
委内加工品质单开始品质 的时候 生成 入库单号
dev
liuxiaoxu 4 months ago
parent
commit
899a9cc781
  1. 2
      ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpInboundOrderServiceImpl.java
  2. 4
      ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualityOrderServiceImpl.java
  3. 14
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseStorageOrderController.java
  4. 5
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseStorageOrderService.java
  5. 81
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java
  6. 146
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageMakeIn.html
  7. 155
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageMakeInDetail.html
  8. 4
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageOrder.html

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

@ -215,7 +215,7 @@ public class ErpInboundOrderServiceImpl implements IErpInboundOrderService
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.getMaterialType()); 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());

4
ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualityOrderServiceImpl.java

@ -320,6 +320,10 @@ public class QualityOrderServiceImpl implements IQualityOrderService
qualityOrder.setUpdateBy(loginName); qualityOrder.setUpdateBy(loginName);
qualityOrder.setUpdateTime(new Date()); qualityOrder.setUpdateTime(new Date());
qualityOrder.setQualityEmployee(loginName); qualityOrder.setQualityEmployee(loginName);
//生成入库单号
String warehouseStorageCode = redisCache.generateBillNo("RK");
qualityOrder.setInStorageCode(warehouseStorageCode);
List<QualityOrderDetail> qualityOrderDetailList = qualityOrder.getQualityOrderDetailList(); List<QualityOrderDetail> qualityOrderDetailList = qualityOrder.getQualityOrderDetailList();
if (CollectionUtils.isEmpty(qualityOrderDetailList)){ if (CollectionUtils.isEmpty(qualityOrderDetailList)){

14
ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseStorageOrderController.java

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.warehouse.domain.WarehouseStorageOrderDetail; import com.ruoyi.warehouse.domain.WarehouseStorageOrderDetail;
import com.ruoyi.warehouse.service.IWarehouseStorageOrderDetailService; import com.ruoyi.warehouse.service.IWarehouseStorageOrderDetailService;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
@ -564,7 +565,7 @@ public class WarehouseStorageOrderController extends BaseController
@ResponseBody @ResponseBody
public AjaxResult storageMakeInSave(@RequestBody WarehouseStorageOrder warehouseStorageOrder) public AjaxResult storageMakeInSave(@RequestBody WarehouseStorageOrder warehouseStorageOrder)
{ {
return toAjax(warehouseStorageOrderService.updateStorageMake(warehouseStorageOrder)); return toAjax(warehouseStorageOrderService.updateStorageMakeIn(warehouseStorageOrder));
} }
/** /**
@ -591,14 +592,15 @@ public class WarehouseStorageOrderController extends BaseController
} }
/** /**
* 入库-生产订单(委内入库) 客户物料详情列表 * 入库-生产订单(委内入库) 物料详情列表
*/ */
@ResponseBody @ResponseBody
@RequestMapping("/storageMakeInDetailList") @RequestMapping("/storageMakeInDetailList")
public Map<String,List<WarehouseStorageOrderDetail>> storageMakeInDetail(String warehouseStorageCode){ public TableDataInfo storageMakeInDetailList(WarehouseStorageOrder warehouseStorageOrder){
List<WarehouseStorageOrderDetail> allDetails = storageOrderDetailService.selectStorageOrderDetailListByCode(warehouseStorageCode); startPage();
Map<String, List<WarehouseStorageOrderDetail>> groupedDetails = allDetails.stream().collect(Collectors.groupingBy(WarehouseStorageOrderDetail::getCustomerId)); String warehouseStorageCode = warehouseStorageOrder.getWarehouseStorageCode();
return groupedDetails; List<WarehouseStorageOrderDetail> list = storageOrderDetailService.selectStorageOrderDetailListByCode(warehouseStorageCode);
return getDataTable(list) ;
} }

5
ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseStorageOrderService.java

@ -113,4 +113,9 @@ public interface IWarehouseStorageOrderService
* 通过委内加工入库单品质后生成入库单 * 通过委内加工入库单品质后生成入库单
* */ * */
int insertWarehouseStorageOrderByMakeInQualityOrder(QualityOrder tempQualityOrder, List<QualityOrderDetail> qualityOrderDetailList); int insertWarehouseStorageOrderByMakeInQualityOrder(QualityOrder tempQualityOrder, List<QualityOrderDetail> qualityOrderDetailList);
/*
* 修改保存入库-生产订单(委内入库)
* */
int updateStorageMakeIn(WarehouseStorageOrder warehouseStorageOrder);
} }

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

@ -403,6 +403,8 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
String warehouseStorageCode = redisCache.generateBillNo("RK"); String warehouseStorageCode = redisCache.generateBillNo("RK");
warehouseStorageOrder.setWarehouseStorageCode(warehouseStorageCode); warehouseStorageOrder.setWarehouseStorageCode(warehouseStorageCode);
warehouseStorageOrder.setRelatedOrderCode(tempQualityOrder.getRelatedOrderCode()); warehouseStorageOrder.setRelatedOrderCode(tempQualityOrder.getRelatedOrderCode());
//暂收设置为全部品质
warehouseStorageOrder.setWarehouseQualityStatus("2");
warehouseStorageOrder.setWarehouseStorageStatus("2"); warehouseStorageOrder.setWarehouseStorageStatus("2");
warehouseStorageOrder.setWarehouseStorageType("2"); warehouseStorageOrder.setWarehouseStorageType("2");
warehouseStorageOrder.setWarehouseOrderType("1"); warehouseStorageOrder.setWarehouseOrderType("1");
@ -418,9 +420,12 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
WarehouseStorageOrderDetail warehouseStorageOrderDetail = new WarehouseStorageOrderDetail(); WarehouseStorageOrderDetail warehouseStorageOrderDetail = new WarehouseStorageOrderDetail();
warehouseStorageOrderDetail.setWarehouseStorageCode(warehouseStorageCode); warehouseStorageOrderDetail.setWarehouseStorageCode(warehouseStorageCode);
warehouseStorageOrderDetail.setRelatedOrderCode(tempQualityOrder.getRelatedOrderCode()); warehouseStorageOrderDetail.setRelatedOrderCode(tempQualityOrder.getRelatedOrderCode());
warehouseStorageOrderDetail.setWarehouseOrderType("2"); warehouseStorageOrderDetail.setWarehouseQualityStatus("2");
warehouseStorageOrderDetail.setWarehouseStorageStatus("2");
warehouseStorageOrderDetail.setWarehouseStorageType("2"); warehouseStorageOrderDetail.setWarehouseStorageType("2");
warehouseStorageOrderDetail.setWarehouseOrderType("1"); warehouseStorageOrderDetail.setWarehouseOrderType("1");
//当作委内入库数
warehouseStorageOrderDetail.setMakeStorageNum(qualityOrderDetail.getMakeInNum());
warehouseStorageOrderDetail.setMaterialNo(qualityOrderDetail.getMaterialNo()); warehouseStorageOrderDetail.setMaterialNo(qualityOrderDetail.getMaterialNo());
warehouseStorageOrderDetail.setMaterialName(qualityOrderDetail.getMaterialName()); warehouseStorageOrderDetail.setMaterialName(qualityOrderDetail.getMaterialName());
warehouseStorageOrderDetail.setMaterialBrand(qualityOrderDetail.getMaterialBrand()); warehouseStorageOrderDetail.setMaterialBrand(qualityOrderDetail.getMaterialBrand());
@ -437,6 +442,80 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
return warehouseStorageOrderMapper.insertWarehouseStorageOrder(warehouseStorageOrder); return warehouseStorageOrderMapper.insertWarehouseStorageOrder(warehouseStorageOrder);
} }
/*
* 修改保存入库-生产订单(委内入库)
* */
@Transactional(rollbackFor = Exception.class)
@Override
public int updateStorageMakeIn(WarehouseStorageOrder warehouseStorageOrder) {
String loginName = ShiroUtils.getLoginName();
//假设全部入库
warehouseStorageOrder.setWarehouseStorageStatus("4");
warehouseStorageOrder.setUpdateBy(loginName);
warehouseStorageOrder.setUpdateTime(new Date());
//记录一下入库时间
warehouseStorageOrder.setStorageTime(new Date());
String warehouseCode = warehouseStorageOrder.getWarehouseCode();
String warehouseName = warehouseStorageOrder.getWarehouseName();
if (StringUtils.isNotEmpty(warehouseCode)){
warehouseStorageOrder.setWarehouseCode(warehouseCode);
}
if (StringUtils.isNotEmpty(warehouseName)){
warehouseStorageOrder.setWarehouseName(warehouseName);
}
List<WarehouseStorageOrderDetail> warehouseStorageOrderDetailList = warehouseStorageOrder.getWarehouseStorageOrderDetailList();
if (StringUtils.isEmpty(warehouseStorageOrderDetailList)){
log.warn("入库单详情数据为空:{}",warehouseStorageOrderDetailList);
throw new BusinessException("入库单详情数据为空");
}
//入库数
Integer storageNum = 0;
// 检查storageNum是否含有null值
boolean hasThisStorageNumNull = warehouseStorageOrderDetailList.stream()
.anyMatch(item -> item.getStorageNum() == null);
if (hasThisStorageNumNull) {
throw new BusinessException("存在入库数为空,请检查!");
}
// 计算各个字段的总和
storageNum = warehouseStorageOrderDetailList.stream()
.mapToInt(WarehouseStorageOrderDetail::getStorageNum)
.sum();
//插入主表入库数量
warehouseStorageOrder.setStorageNum(storageNum);
// //更新生产单数据
// int updateMakeOrderResult = sysMakeOrderService.updateSysMakeOrderByWarehouseStorageOrder(warehouseStorageOrder, warehouseStorageOrderDetailList);
// if (updateMakeOrderResult <= 0){
// throw new BusinessException("更新生产订单失败,未影响任何行");
// }
for (WarehouseStorageOrderDetail warehouseStorageOrderDetail : warehouseStorageOrderDetailList) {
//更新入库单详情的数据
warehouseStorageOrderDetail.setUpdateBy(loginName);
warehouseStorageOrderDetail.setUpdateTime(new Date());
//更新已入库数
warehouseStorageOrderDetail.setHasStorageNum(warehouseStorageOrderDetail.getStorageNum());
int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(warehouseStorageOrderDetail);
if (updateWarehouseStorageOrderDetailResult <= 0){
throw new BusinessException("更新仓库入库单详情失败,未影响任何行");
}
}
//更新入库单的数据
int updateResult = warehouseStorageOrderMapper.updateWarehouseStorageOrder(warehouseStorageOrder);
if (updateResult <= 0){
log.warn("更新入库单失败,未影响任何行");
}
return updateResult;
}
/** /**
* 修改保存暂收-采购单(采购入库) 子表数据 * 修改保存暂收-采购单(采购入库) 子表数据
* */ * */

146
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageMakeIn.html

@ -13,7 +13,7 @@
</head> </head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-temporaryPurchaseWarehouse-edit" th:object="${warehouseStorageOrder}"> <form class="form-horizontal m" id="form-storageMakeIn-edit" th:object="${warehouseStorageOrder}">
<input name="warehouseStorageId" th:field="*{warehouseStorageId}" type="hidden"> <input name="warehouseStorageId" th:field="*{warehouseStorageId}" type="hidden">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">入库单号:</label> <label class="col-sm-3 control-label">入库单号:</label>
@ -74,11 +74,11 @@
</div> </div>
</div> </div>
<!--物料信息-->
<div class="container"> <div class="container">
<!--客户物料相关-->
<div class="row"> <div class="row">
<div class="col-sm-12" id="tablesContainer"> <div class="col-sm-12 select-table table-striped">
<!-- 表格将在这里动态生成 --> <table id="bootstrap-table"></table>
</div> </div>
</div> </div>
</div> </div>
@ -92,61 +92,57 @@
var warehouseStorageCode = [[${warehouseStorageOrder.warehouseStorageCode}]] var warehouseStorageCode = [[${warehouseStorageOrder.warehouseStorageCode}]]
var warehouseCode = [[${warehouseStorageOrder.warehouseCode}]] var warehouseCode = [[${warehouseStorageOrder.warehouseCode}]]
var prefix = ctx + "warehouse/storageOrder"; var prefix = ctx + "warehouse/storageOrder";
$("#form-temporaryPurchaseWarehouse-edit").validate({ $("#form-storageMakeIn-edit").validate({
focusCleanup: true focusCleanup: true
}); });
//生成的不同table的id集合
var tableDatas = [];
// 新增提交
function submitHandler() { function submitHandler() {
const storageOrderData = $("#form-temporaryPurchaseWarehouse-edit").serializeArray().reduce((obj, item) => { // 获取表单数据
const storageMakeInData = $("#form-storageMakeIn-edit").serializeArray().reduce((obj, item) => {
obj[item.name] = item.value; obj[item.name] = item.value;
return obj; return obj;
}, {}); }, {});
// 初始化一个数组用于存放所有表格的数据 // 获取bootstrap-table的数据,这里假设你使用bootstrap-table的API获取所有数据
let allMaterialDataList = []; var table = $('#bootstrap-table').bootstrapTable('getData');
for(let i in tableDatas){
$('#' + tableDatas[i]).each(function() { // 将表数据转换成与complaintNoticeData格式一致的数组
const tableData = $(this).bootstrapTable('getData'); var materialDataList = table.map(function(item) {
console.log(JSON.stringify(tableData)); // 根据实际字段名调整
// 将表数据转换成与qualityReportData格式一致的数组 return {
var materialDataList = tableData.map(function (item) { "warehouseStorageDetailId":item.warehouseStorageDetailId,
// 根据实际字段名调整 "materialNo": item.materialNo,
return { "materialName": item.materialName,
"customerId": item.customerId, "materialType": item.materialType,
"materialNo": item.materialNo, "materialPhotourl": item.materialPhotourl,
"materialName": item.materialName, "materialDescribe": item.materialDescribe,
"materialType": item.materialType, "materialBrand": item.materialBrand,
"materialPhotourl": item.materialPhotourl, "materialUnit": item.materialUnit,
"materialDescribe": item.materialDescribe, "materialProcessMethod": item.materialProcessMethod,
"materialBrand": item.materialBrand, "qualityHasQualifiedNum": item.qualityHasQualifiedNum,
"materialUnit": item.materialUnit, "hasStorageNum": item.hasStorageNum,
"materialProcessMethod": item.materialProcessMethod, "makeStorageNum": item.makeStorageNum,
"qualityHasQualifiedNum": item.qualityHasQualifiedNum, "storageNum": item.storageNum,
"hasStorageNum": item.hasStorageNum, "storageLocation": item.storageLocation,
"makeStorageNum": item.makeStorageNum, // ...其他字段
"storageNum": item.storageNum, };
"storageLocation": item.storageLocation, });
// ...其他字段
};
});
allMaterialDataList = allMaterialDataList.concat(materialDataList);
});
}
const combinedData = Object.assign({}, storageOrderData, { const combinedData = Object.assign({}, storageMakeInData, {
warehouseStorageOrderDetailList: allMaterialDataList warehouseStorageOrderDetailList: materialDataList,
}); });
// 合并表单数据和表格数据 // 合并表单数据和表格数据
// const combinedData = Object.assign({}, ...complaintNoticeData.array(item => ({ [item.name]: item.value })), ...materialData);
console.log(combinedData) console.log(combinedData)
// 使用 JSON.stringify() 序列化数据 // 使用 JSON.stringify() 序列化数据
const jsonData = JSON.stringify(combinedData); const jsonData = JSON.stringify(combinedData);
// 发送 AJAX 请求到后端接口 // 发送 AJAX 请求到后端接口
$.operate.saveJson(prefix + "/storageMake", jsonData); $.operate.saveJson(prefix + "/storageMakeIn", jsonData);
} }
$("input[name='arrivedTime']").datetimepicker({ $("input[name='arrivedTime']").datetimepicker({
format: "yyyy-mm-dd", format: "yyyy-mm-dd",
minView: "month", minView: "month",
@ -159,44 +155,24 @@
autoclose: true autoclose: true
}); });
$(function() {
// 假设qualityOrderCode已经定义或者可以通过某种方式获取到
var warehouseStorageCode = [[${warehouseStorageOrder.warehouseStorageCode}]]; // 这里需要实际赋值,比如从前端某个地方读取
$.getJSON(prefix + "/storageMakeInDetailList?warehouseStorageCode=" + warehouseStorageCode, function(data) { //物料信息展示列表
for (var customerId in data) { $(function() {
if (data.hasOwnProperty(customerId)) { var options = {
var customerData = data[customerId]; modalName: "选择物料",
createTableForCustomer(customerId, customerData); url: prefix + "/storageMakeInDetailList",
} queryParams: queryParams,
} showSearch: false,
}); showRefresh: false,
}); showToggle: false,
function createTableForCustomer(customerId, customerData) { showColumns: false,
var tableId = 'bootstrap-table-' + customerId.replace(/[^a-z0-9]/gi, '_').toLowerCase(); pagination: false, // 设置不分页
tableDatas.push(tableId);
var $tableWrapper = $('<div class="table-responsive mt-3"></div>');
// 确保customerData至少有一条记录,并从中提取客户详细信息
var customerInfo = customerData.length > 0 ? customerData[0] : {}; // 默认为空对象,以防数据不存在
// 构建含有额外客户信息的标题字符串
var headerTitle ='客户'+'</br>'+customerId + ' - ' + (customerInfo.customerName || 'N/A') +
' </br> ' + (customerInfo.customerContactPeople || 'N/A') +
' - ' + (customerInfo.customerContactNumber || 'N/A') +
' - ' + (customerInfo.customerCompanyAddress || 'N/A');
var $header = $('<h4>' + headerTitle + '</h4>');
var $table = $('<table id="' + tableId + '" class="table table-striped table-bordered"></table>');
$table.bootstrapTable({
data: customerData,
columns: [{ columns: [{
checkbox: true checkbox: true
}, },
{ {
title: '客户ID', title: '入库单详情Id',
field: 'customerId', field: 'warehouseStorageDetailId',
visible: false visible: false
}, },
{ {
@ -230,10 +206,6 @@
title: '物料加工方式', title: '物料加工方式',
field: 'materialProcessMethod', field: 'materialProcessMethod',
}, },
{
title: '订单数',
field: 'makeTotal',
},
{ {
title: '品质已合格数', title: '品质已合格数',
field: 'qualityHasQualifiedNum', field: 'qualityHasQualifiedNum',
@ -243,7 +215,7 @@
field: 'hasStorageNum', field: 'hasStorageNum',
}, },
{ {
title: '生产入库数', title: '委内入库数',
field: 'makeStorageNum', field: 'makeStorageNum',
}, },
{ {
@ -265,14 +237,20 @@
field: 'storageLocation', field: 'storageLocation',
editable: true editable: true
}] }]
}); };
$.table.init(options);
})
$tableWrapper.append($header).append($table); function queryParams(params) {
$('#tablesContainer').append($tableWrapper); var curParams = {
// 传递参数查询参数
warehouseStorageCode: warehouseStorageCode
};
console.log(curParams);
return curParams;
} }
//根据仓库ID查询仓库名称 //根据仓库ID查询仓库名称
$(document).ready(function() { $(document).ready(function() {
// 初始化时默认加载仓库ID列表 // 初始化时默认加载仓库ID列表

155
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageMakeInDetail.html

@ -13,7 +13,7 @@
</head> </head>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-temporaryPurchaseWarehouse-edit" th:object="${warehouseStorageOrder}"> <form class="form-horizontal m" id="form-storageMakeInDetail-edit" th:object="${warehouseStorageOrder}">
<input name="warehouseStorageId" th:field="*{warehouseStorageId}" type="hidden"> <input name="warehouseStorageId" th:field="*{warehouseStorageId}" type="hidden">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">入库单号:</label> <label class="col-sm-3 control-label">入库单号:</label>
@ -74,11 +74,11 @@
</div> </div>
</div> </div>
<!--物料信息-->
<div class="container"> <div class="container">
<!--客户物料相关-->
<div class="row"> <div class="row">
<div class="col-sm-12" id="tablesContainer"> <div class="col-sm-12 select-table table-striped">
<!-- 表格将在这里动态生成 --> <table id="bootstrap-table"></table>
</div> </div>
</div> </div>
</div> </div>
@ -92,61 +92,53 @@
var warehouseStorageCode = [[${warehouseStorageOrder.warehouseStorageCode}]] var warehouseStorageCode = [[${warehouseStorageOrder.warehouseStorageCode}]]
var warehouseCode = [[${warehouseStorageOrder.warehouseCode}]] var warehouseCode = [[${warehouseStorageOrder.warehouseCode}]]
var prefix = ctx + "warehouse/storageOrder"; var prefix = ctx + "warehouse/storageOrder";
$("#form-temporaryPurchaseWarehouse-edit").validate({ $("#form-storageMakeInDetail-edit").validate({
focusCleanup: true focusCleanup: true
}); });
//生成的不同table的id集合 // 新增提交
var tableDatas = [];
function submitHandler() { function submitHandler() {
const storageOrderData = $("#form-temporaryPurchaseWarehouse-edit").serializeArray().reduce((obj, item) => { // 获取表单数据
const storageMakeInData = $("#form-storageMakeInDetail-edit").serializeArray().reduce((obj, item) => {
obj[item.name] = item.value; obj[item.name] = item.value;
return obj; return obj;
}, {}); }, {});
// 初始化一个数组用于存放所有表格的数据 // 获取bootstrap-table的数据,这里假设你使用bootstrap-table的API获取所有数据
let allMaterialDataList = []; var table = $('#bootstrap-table').bootstrapTable('getData');
for(let i in tableDatas){
$('#' + tableDatas[i]).each(function() {
const tableData = $(this).bootstrapTable('getData');
console.log(JSON.stringify(tableData));
// 将表数据转换成与qualityReportData格式一致的数组
var materialDataList = tableData.map(function (item) {
// 根据实际字段名调整
return {
"customerId": item.customerId,
"materialNo": item.materialNo,
"materialName": item.materialName,
"materialType": item.materialType,
"materialPhotourl": item.materialPhotourl,
"materialDescribe": item.materialDescribe,
"materialBrand": item.materialBrand,
"materialUnit": item.materialUnit,
"materialProcessMethod": item.materialProcessMethod,
"qualityHasQualifiedNum": item.qualityHasQualifiedNum,
"hasStorageNum": item.hasStorageNum,
"makeStorageNum": item.makeStorageNum,
"storageNum": item.storageNum,
"storageLocation": item.storageLocation,
// ...其他字段
};
});
allMaterialDataList = allMaterialDataList.concat(materialDataList);
});
}
const combinedData = Object.assign({}, storageOrderData, { // 将表数据转换成与complaintNoticeData格式一致的数组
warehouseStorageOrderDetailList: allMaterialDataList var materialDataList = table.map(function(item) {
// 根据实际字段名调整
return {
"materialNo": item.materialNo,
"materialName": item.materialName,
"materialType": item.materialType,
"materialPhotourl": item.materialPhotourl,
"materialDescribe": item.materialDescribe,
"materialBrand": item.materialBrand,
"materialUnit": item.materialUnit,
"materialProcessMethod": item.materialProcessMethod,
"qualityHasQualifiedNum": item.qualityHasQualifiedNum,
"hasStorageNum": item.hasStorageNum,
"makeStorageNum": item.makeStorageNum,
"storageNum": item.storageNum,
"storageLocation": item.storageLocation,
// ...其他字段
};
});
const combinedData = Object.assign({}, storageMakeInData, {
warehouseStorageOrderDetailList: materialDataList,
}); });
// 合并表单数据和表格数据 // 合并表单数据和表格数据
// const combinedData = Object.assign({}, ...complaintNoticeData.array(item => ({ [item.name]: item.value })), ...materialData);
console.log(combinedData) console.log(combinedData)
// 使用 JSON.stringify() 序列化数据 // 使用 JSON.stringify() 序列化数据
const jsonData = JSON.stringify(combinedData); const jsonData = JSON.stringify(combinedData);
// 发送 AJAX 请求到后端接口 // 发送 AJAX 请求到后端接口
$.operate.saveJson(prefix + "/storageMake", jsonData); $.operate.saveJson(prefix + "/storageMakeInDetail", jsonData);
} }
$("input[name='arrivedTime']").datetimepicker({ $("input[name='arrivedTime']").datetimepicker({
format: "yyyy-mm-dd", format: "yyyy-mm-dd",
minView: "month", minView: "month",
@ -159,46 +151,20 @@
autoclose: true autoclose: true
}); });
//物料信息展示列表
$(function() { $(function() {
// 假设qualityOrderCode已经定义或者可以通过某种方式获取到 var options = {
var warehouseStorageCode = [[${warehouseStorageOrder.warehouseStorageCode}]]; // 这里需要实际赋值,比如从前端某个地方读取 modalName: "选择物料",
url: prefix + "/storageMakeInDetailList",
$.getJSON(prefix + "/storageMakeInDetailList?warehouseStorageCode=" + warehouseStorageCode, function(data) { queryParams: queryParams,
for (var customerId in data) { showSearch: false,
if (data.hasOwnProperty(customerId)) { showRefresh: false,
var customerData = data[customerId]; showToggle: false,
createTableForCustomer(customerId, customerData); showColumns: false,
} pagination: false, // 设置不分页
}
});
});
function createTableForCustomer(customerId, customerData) {
var tableId = 'bootstrap-table-' + customerId.replace(/[^a-z0-9]/gi, '_').toLowerCase();
tableDatas.push(tableId);
var $tableWrapper = $('<div class="table-responsive mt-3"></div>');
// 确保customerData至少有一条记录,并从中提取客户详细信息
var customerInfo = customerData.length > 0 ? customerData[0] : {}; // 默认为空对象,以防数据不存在
// 构建含有额外客户信息的标题字符串
var headerTitle ='客户'+'</br>'+customerId + ' - ' + (customerInfo.customerName || 'N/A') +
' </br> ' + (customerInfo.customerContactPeople || 'N/A') +
' - ' + (customerInfo.customerContactNumber || 'N/A') +
' - ' + (customerInfo.customerCompanyAddress || 'N/A');
var $header = $('<h4>' + headerTitle + '</h4>');
var $table = $('<table id="' + tableId + '" class="table table-striped table-bordered"></table>');
$table.bootstrapTable({
data: customerData,
columns: [{ columns: [{
checkbox: true checkbox: true
}, },
{
title: '客户ID',
field: 'customerId',
visible: false
},
{ {
title: '料号', title: '料号',
field: 'materialNo' field: 'materialNo'
@ -230,10 +196,6 @@
title: '物料加工方式', title: '物料加工方式',
field: 'materialProcessMethod', field: 'materialProcessMethod',
}, },
{
title: '订单数',
field: 'makeTotal',
},
{ {
title: '品质已合格数', title: '品质已合格数',
field: 'qualityHasQualifiedNum', field: 'qualityHasQualifiedNum',
@ -243,25 +205,42 @@
field: 'hasStorageNum', field: 'hasStorageNum',
}, },
{ {
title: '生产入库数', title: '委内入库数',
field: 'makeStorageNum', field: 'makeStorageNum',
}, },
{ {
title: '入库数', title: '入库数',
field: 'storageNum', field: 'storageNum',
editable:{
type: 'text',
mode:'inline',
validate: function (v) {
if (!v) return '数量不能为空';
if (isNaN(v)) return '数量必须是数字';
var processBadNum = parseInt(v);
if (processBadNum <= 0) return '数量必须是正整数';
}
}
}, },
{ {
title: '存放位置', title: '存放位置',
field: 'storageLocation', field: 'storageLocation',
editable: true
}] }]
}); };
$.table.init(options);
})
$tableWrapper.append($header).append($table); function queryParams(params) {
$('#tablesContainer').append($tableWrapper); var curParams = {
// 传递参数查询参数
warehouseStorageCode: warehouseStorageCode
};
console.log(curParams);
return curParams;
} }
//根据仓库ID查询仓库名称 //根据仓库ID查询仓库名称
$(document).ready(function() { $(document).ready(function() {
// 初始化时默认加载仓库ID列表 // 初始化时默认加载仓库ID列表

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

@ -312,12 +312,12 @@
} }
/*入库-生产订单(委内入库)*/ /*入库-生产订单(委内入库)*/
if ( row.warehouseStorageType == 2 && row.warehouseDeptType == 1 && row.warehouseOrderType == 1 && (row.warehouseStorageStatus == 2 || row.warehouseStorageStatus == 3) ){ if ( row.warehouseStorageType == 2 && row.warehouseOrderType == 1 && (row.warehouseStorageStatus == 2 || row.warehouseStorageStatus == 3) ){
actions.push('<a class="btn btn-success btn-xs ' + storageMakeInFlag + '" href="javascript:void(0)" onclick="storageMakeIn(\'' + row.warehouseStorageId + '\')"><i class="fa fa-edit"></i>入库</a> '); actions.push('<a class="btn btn-success btn-xs ' + storageMakeInFlag + '" href="javascript:void(0)" onclick="storageMakeIn(\'' + row.warehouseStorageId + '\')"><i class="fa fa-edit"></i>入库</a> ');
} }
/*入库-生产订单(委内入库) 详情*/ /*入库-生产订单(委内入库) 详情*/
if ( row.warehouseStorageType == 2 && row.warehouseDeptType == 1 && row.warehouseOrderType == 1 && (row.warehouseStorageStatus == 2 || row.warehouseStorageStatus == 3 || row.warehouseStorageStatus == 4)){ if ( row.warehouseStorageType == 2 && row.warehouseOrderType == 1 && (row.warehouseStorageStatus == 2 || row.warehouseStorageStatus == 3 || row.warehouseStorageStatus == 4)){
actions.push('<a class="btn btn-success btn-xs ' + storageMakeInDetailFlag + '" href="javascript:void(0)" onclick="storageMakeInDetail(\'' + row.warehouseStorageId + '\')"><i class="fa fa-edit"></i>详情</a> '); actions.push('<a class="btn btn-success btn-xs ' + storageMakeInDetailFlag + '" href="javascript:void(0)" onclick="storageMakeInDetail(\'' + row.warehouseStorageId + '\')"><i class="fa fa-edit"></i>详情</a> ');
} }

Loading…
Cancel
Save