调整部分数据不再写入数据库

This commit is contained in:
Ledo 2025-06-25 21:47:33 +08:00
parent a9b5cc21a7
commit 9284906254
13 changed files with 115 additions and 51 deletions

View File

@ -103,6 +103,7 @@ public interface ErrorCodeConstants {
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_NOT_EXISTS = new ErrorCode(1_008_008, "采购单明细不存在");
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_IS_EXISTS = new ErrorCode(1_008_009, "存在物料清单已生成采购订单,请刷新界面!");
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE = new ErrorCode(1_008_010, "存在物料清单已转库存,请刷新界面!");
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_MATERIAL_NOT_EXISTS = new ErrorCode(1_008_011, "物料数据不能为空,请选择物料后重试!");
/************生产管理***********/
ErrorCode TASK_DISPATCH_NOT_EXISTS = new ErrorCode(1_009_001, "派工单不存在");
ErrorCode TASK_REPORT_NOT_EXISTS = new ErrorCode(1_009_002, "任务报工不存在");

View File

@ -90,6 +90,8 @@ public class MaterialDO extends TenantBaseDO {
* 材质id
*/
private Long compositionId;
@TableField(exist = false)
private String compositionName;
/**
* 销项税率或进项税率 (%)
*/

View File

@ -86,6 +86,7 @@ public class MaterialPlanBoomDO extends BaseDO {
/**
* 物料id
*/
@TableField(exist = false)
private Long materialId;
/**
* 零件重量

View File

@ -154,6 +154,7 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
/**
* 物料id
*/
@TableField(exist = false)
private Long materialId;
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
@ -31,6 +32,15 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
query.eq(code != null, MaterialDO::getCode, code);
return selectOne( query);
}
//材质为空时查不出来数据注释
// default MaterialDO selectById(Long id) {
// MPJLambdaWrapper<MaterialDO> query = new MPJLambdaWrapper<>();
// query.selectAll(MaterialDO.class)
// .select("c.name as compositionName")
// .leftJoin(CompositionDO.class,"c",CompositionDO::getId,MaterialDO::getCompositionId);
// query.eq(MaterialDO::getId, id);
// return selectOne( query);
// }
default MaterialDO selectMaterial(String code) {
MPJLambdaWrapper<MaterialDO> query = new MPJLambdaWrapper<>();

View File

@ -38,10 +38,9 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
default PageResult<PurchaseOrderMakeDetailDO> selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) {
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)
.select("b.material_name as boomName","m.code as boomCode","b.spec as boomSpec","b.unit as boomUnit")
.select("b.material_name as boomName","b.spec as boomSpec","b.unit as boomUnit")
// .select("pom.purchase_no as purchaseNo")
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId)
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)

View File

@ -403,7 +403,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
//不论怎么样都要校验这次的数据它图号是否唯一非标准件的名称是否重复规格是否为空
if (CollUtil.isNotEmpty(processBomDetails)){
//校验这次的数据它图号是否唯一
Map<String, List<ProcessBomDetailDO>> groupedByBluePrintfNo = processBomDetails.stream().collect(Collectors.groupingBy(vo -> vo.getBlueprintNo() == null ? "NULL" : vo.getBlueprintNo()));
Map<String, List<ProcessBomDetailDO>> groupedByBluePrintfNo = processBomDetails.stream().filter(e -> e.getDeleted() == false).collect(Collectors.groupingBy(vo -> vo.getBlueprintNo() == null ? "NULL" : vo.getBlueprintNo()));
groupedByBluePrintfNo.forEach((printNo,list)->{
if (printNo.equals("NULL")){
throw exception(PROCESS_BOM_DETAIL_BLUE_PRINT_NO_NOT_EXISTS);
@ -439,6 +439,14 @@ public class ProcessBomServiceImpl implements ProcessBomService {
// processBomDetail.setMaterialCode("");
// }
// }
}else {
if(operateTypeEnum == OperateTypeEnum.SUBMIT){
if (processBomDetail.getSpec() == null){
throw exception(new ErrorCode(1_006_9998,processBomDetail.getMaterialName()+"规格型号不能为空,请确认!"));
}
}
}
}

View File

@ -1,11 +1,15 @@
package com.chanko.yunxi.mes.module.heli.service.purchaseordermakedetail;
import cn.hutool.core.collection.CollUtil;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.composition.CompositionMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
@ -53,7 +57,10 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private PurchaseOrderMakeMapper purchaseOrderMakeMapper;
@Resource
private MaterialMapper materialMapper;
@Resource
private CompositionMapper compositionMapper;
@Override
public Long createPurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO createReqVO) {
// 插入
@ -84,16 +91,39 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
purchaseOrderNoMapper.insert(purchaseOrderNoDO);
List<PurchaseOrderNoDetailDO> insertList =new ArrayList<>();
HashMap<Long,PurchaseOrderMakeDO> insertMap = new HashMap<>();
HashMap<Long, MaterialDO> insertMaterialMap = new HashMap<>();
HashMap<Long ,CompositionDO> compositionDOHashMap = new HashMap<>();
for (PurchaseOrderMakeDetailDO pmd : updateList) {
PurchaseOrderNoDetailDO pd = new PurchaseOrderNoDetailDO();
pd.setMakeDetailId(pmd.getId());
pd.setPurchaseOrderId(purchaseOrderNoDO.getId());
pd.setBoomDetailId(pmd.getBoomDetailId());
pd.setBoomName(pmd.getBoomName());
pd.setBoomSpec(pmd.getBoomSpec());
pd.setBoomUnit(pmd.getBoomUnit());
pd.setComposition(pmd.getComposition());
if (pd.getMakeDetailId() != null) {
MaterialDO materialDO = insertMaterialMap.get(pmd.getMaterialId());
if (materialDO == null) {
materialDO = materialMapper.selectById(pmd.getMaterialId());
insertMaterialMap.put(pd.getMakeDetailId(), materialDO);
}
if (materialDO.getCompositionId() != null) {
CompositionDO compositionDO = compositionDOHashMap.get(materialDO.getCompositionId());
if (compositionDO == null) {
compositionDO = compositionMapper.selectById(materialDO.getCompositionId());
compositionDOHashMap.put(materialDO.getCompositionId(), compositionDO);
}
pd.setComposition(compositionDO == null ?"":compositionDO.getName());
}
pd.setBoomName(materialDO.getName());
pd.setMaterialId(materialDO.getId());
pd.setBoomSpec(materialDO.getSpec());
pd.setBoomUnit(materialDO.getUnit());
}else {
throw exception(PURCHASE_ORDER_MAKE_DETAIL_MATERIAL_NOT_EXISTS);
}
pd.setPurchaseAmount(pmd.getPurchaseAmount());
pd.setEstimatedPrice(pmd.getEstimatedPrice());
pd.setArriveTime(pmd.getArriveTime());
@ -143,12 +173,12 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
validatePurchaseOrderMakeDetailExists(updateReqVO.getId());
// 更新
PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class);
if (updateObj.getMaterialId() == null){
purchaseOrderMakeDetailMapper.clearMaterialId(updateObj.getId());
// if (updateObj.getMaterialId() == null){
// purchaseOrderMakeDetailMapper.clearMaterialId(updateObj.getId());
// purchaseOrderMakeDetailMapper.updateById(updateObj);
// }else {
purchaseOrderMakeDetailMapper.updateById(updateObj);
}else {
purchaseOrderMakeDetailMapper.updateById(updateObj);
}
// }
}

View File

@ -11,6 +11,7 @@ export interface MaterialPlanBoomVO {
purchaseAmount:number
estimatedPrice:number
arriveTime:Date
projectPurchaseOrderMakeDetailId:number
supplierId:number
materialPlanBoomDOList:Array<MaterialPlanBoomVO>
}

View File

@ -19,7 +19,7 @@
<el-input v-model="queryParams.projectCode" placeholder="请输入项目编号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="采购状态" prop="orderStatus">
<el-select v-model="queryParams.orderStatus" placeholder="请选择标准件状态" class="!w-240px">
<el-select clearable v-model="queryParams.orderStatus" placeholder="请选择采购状态" class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
@ -75,6 +75,7 @@
:remote-method="e => remoteMethod(e,scope.row)"
remote-show-suffix
remote
@click="remoteMethod(scope.row.boomCode,scope.row)"
:disabled="scope.row.orderStatus == 2"
clearable
reserve-keyword
@ -107,6 +108,7 @@
v-model="scope.row.supplierId"
size="large"
disabled
filterable
style="width: 165 px"
>
<el-option
@ -295,7 +297,7 @@ const changeSupp = async(e,row) => {
// row.boomName = e.materialName;
// row.boomSpec = e.spec;
// row.boomUnit = e.unit
await updateRows(row)
// await updateRows(row)
}else{
row.materialId = null;
await updateRows(row)
@ -320,7 +322,7 @@ const handleQuery = () => {
const opearteForm = async(type) =>{
loading.value = true;
if(type == 1){
router.push({ path: '/purchase/PurchaseOrder', query: { flush: 1 } })
router.push({ path: '/purchase/purchaseordernomanagement', query: { flush: 1 } })
return;
}
if(ids.value != null && ids.value.length > 0){
@ -472,8 +474,8 @@ const handleExport = async () => {
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProcessBomApi.exportProcessBom(queryParams)
download.excel(data, '工艺bom.xls')
// const data = await ProcessBomApi.exportProcessBom(queryParams)
// download.excel(data, 'bom.xls')
} catch {
} finally {
exportLoading.value = false

View File

@ -28,7 +28,7 @@
/>
</el-form-item>
<el-form-item label="采购状态" prop="mplanStatus">
<el-select v-model="queryParams.mplanStatus" placeholder="请选择标准件状态" class="!w-240px">
<el-select @change="e => clearItem(e)" v-model="queryParams.mplanStatus" placeholder="请选择标准件状态" class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STANDARD_BUY_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
@ -91,12 +91,6 @@
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" />
</template>
</el-table-column>
<el-table-column align="center" prop="purchaseAmount" min-width="180" >
<template #header><span class="hl-table_header">*</span>采购数量</template>
<template #default="scope">
<el-input-number @blur="updateRow(1,scope.row)" v-model="scope.row.purchaseAmount" :precision="2" :step="0.01" />
</template>
</el-table-column>
<el-table-column label="物料编码" align="center" prop="matCode" min-width="180" >
<template #default="scope">
@ -115,6 +109,7 @@
v-model="scope.row.supplierId"
size="large"
clearable
filterable
@change="e => changeSupp(e,scope.row)"
style="width: 165 px"
>
@ -127,6 +122,12 @@
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="purchaseAmount" min-width="180" >
<template #header><span class="hl-table_header">*</span>采购数量</template>
<template #default="scope">
<el-input-number :disabled="scope.row.stat" @blur="updateRow(1,scope.row)" v-model="scope.row.purchaseAmount" :precision="2" :step="0.01" />
</template>
</el-table-column>
<el-table-column align="center" prop="estimatedPrice" min-width="180" >
<template #header><span class="hl-table_header">*</span>预估总价</template>
@ -134,7 +135,7 @@
<el-input-number @blur="updateRow(3,scope.row)" v-model="scope.row.estimatedPrice" :precision="2" :step="0.01" />
</template>
</el-table-column>
<el-table-column min-width="200px" align="center" fixed="right">
<el-table-column min-width="200px" align="center" >
<template #header><span class="hl-table_header">*</span>预计到货日期</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.arriveTime`" class="mb-0px!" >
@ -142,8 +143,13 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="mplanStatusName" min-width="80" />
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="180" fixed="right"/>
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="180" />
<el-table-column label="状态" align="center" prop="mplanStatus" min-width="90" >
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_BOOM_STATUS" :value="scope.row.mplanStatus" />
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
@ -230,9 +236,10 @@ const getRowKeys=(row)=>{
const handleSelectionChange = (selection) => {
ids.value = selection;
console.log(ids.value)
}
const clearItem = () =>{
multipleTable.value.clearSelection();
}
/** 导出按钮操作 */
const handleExportDetail = async () => {
try {
@ -247,13 +254,14 @@ const handleExportDetail = async () => {
exportLoading.value = false
}
}
const getMat = async (rowids,amount,ids) => {
const getMat = async (rowids,amount,ids,matCodes) => {
//formData.value.boomItemDOList = arrBoom
for(var i = 0 ; i < list.value.length ; i ++){
if(list.value[i].id == rowids){
list.value[i].matRest = amount
list.value[i].matCode = matCodes
list.value[i].materialId = ids
await updateRow(2,list.value[i]);
// await updateRow(2,list.value[i]);
break;
}
}
@ -332,23 +340,24 @@ const opearteForm = async(type) =>{
await materialPlanBoomApi.updateMaterialPlanBoom(form);
message.success("送审成功")
await getList()
}catch(e){
}catch{
loading.value = false
}finally{
loading.value = false
}
}else{
//
for(var i = 0 ; i<ids.value.length ;i++){
var row = ids.value[i];
if(!row.materialId){
message.error('请先查询库存量后进行操作')
loading.value = false
return
}
}
// for(var i = 0 ; i<ids.value.length ;i++){
// var row = ids.value[i];
// if(!row.materialId){
// message.error('')
// loading.value = false
// return
// }
// }
console.log(ids.value)
var form = {
id:1,
projectMaterialPlanId:1,
@ -361,13 +370,13 @@ const opearteForm = async(type) =>{
await materialPlanBoomApi.updateMaterialPlanBoom(form);
message.success("去库存成功")
await getList()
}catch(e){
}catch{
loading.value = false
}finally{
loading.value = false
}
}
}else{
message.error("至少选择一项后进行操作!")
@ -478,8 +487,8 @@ const handleExport = async () => {
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProcessBomApi.exportProcessBom(queryParams)
download.excel(data, '工艺bom.xls')
// const data = await ProcessBomApi.exportProcessBom(queryParams)
// download.excel(data, 'bom.xls')
} catch {
} finally {
exportLoading.value = false

View File

@ -7,7 +7,7 @@
<el-form-item label="物料名称" prop="matName" >
<el-input v-model="queryParams.matName" placeholder="物料名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item >
<el-button @click="handleQuery" type="primary">
@ -162,7 +162,7 @@ const emit = defineEmits(['success'])
// emit('success', multipleSelection.value)
const success = () =>{
dialogVisible.value = false;
emit('success',rowid.value,clickItem.value.storageOkQty,clickItem.value.id)
emit('success',rowid.value,clickItem.value.storageOkQty,clickItem.value.id,clickItem.value.matCode)
}
const handleRg = async (rgid) => {
pnCurrentList.value =[]

View File

@ -167,7 +167,7 @@
<el-table-column label="规格型号" prop="spec" min-width="140">
<template #default="{ row, $index }">
<span v-if="row.type == '2'" v-html="row.spec"></span>
<el-form-item v-else :prop="`${$index}.spec`" :rules="subFormRules.spec" class="mb-0px!">
<el-form-item v-else :prop="`${$index}.spec`" class="mb-0px!">
<el-input :disabled="getDisable(row.bomEditStatus)" v-model="row.spec" />
</el-form-item>
</template>