零件采购
This commit is contained in:
parent
d5f25b6f66
commit
14350a1465
@ -94,5 +94,8 @@ public class MaterialPlanBoomRespVO extends PageParam {
|
||||
@Schema(description = "物料id")
|
||||
@ExcelProperty("物料id")
|
||||
private Long matId;
|
||||
@Schema(description = "采购单id")
|
||||
@ExcelProperty("采购单id")
|
||||
private Long projectPurchaseOrderMakeId;
|
||||
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.service.partpurchaseorder.PartPurchaseOrderService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
@ -135,4 +132,11 @@ public class PurchaseOrderMakeController {
|
||||
PageResult<PartPurchaseOrderPageRespVO> pageResult = partPurchaseOrderService.getDetail(partPurchaseOrderPageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@PostMapping("/createPurchaseOrderMakeAndDetail")
|
||||
@Operation(summary = "零件采购单送审生成")
|
||||
// @PreAuthorize("@ss.hasPermission('heli:material-plan:query')")
|
||||
public CommonResult<Boolean> createPurchaseOrderMakeAndDetail(@Valid @RequestBody List<PurchaseOrderMakeSaveReqVO> saveReqVOs) {
|
||||
return success(partPurchaseOrderService.createPurchaseOrderMakeAndDetailBatch(saveReqVOs));
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
@ -79,4 +80,54 @@ public class PurchaseOrderMakeSaveReqVO {
|
||||
@Schema(description = "驳回原因")
|
||||
private String reason;
|
||||
|
||||
@Schema(description = "工艺boom明细id,零件类型:加工件")
|
||||
private Long boomDetailId;
|
||||
|
||||
@Schema(description = "零件名称")
|
||||
private String matName;
|
||||
|
||||
@Schema(description = "规格型号")
|
||||
private String boomSpec;
|
||||
|
||||
@Schema(description = "系统单位")
|
||||
private String unit;
|
||||
|
||||
@Schema(description = "材质")
|
||||
private String compositionName;
|
||||
|
||||
@Schema(description = "采购数量")
|
||||
private BigDecimal purchaseAmount;
|
||||
|
||||
@Schema(description = "预计到货日期")
|
||||
private LocalDateTime arriveTime;
|
||||
|
||||
@Schema(description = "需求数量")
|
||||
private BigDecimal boomAmount;
|
||||
|
||||
@Schema(description = "需求到货日期")
|
||||
private LocalDateTime boomArriveDate;
|
||||
|
||||
@Schema(description = "供应商id")
|
||||
private Long supplierId;
|
||||
|
||||
@Schema(description = "物料需求计划id")
|
||||
private Long projectMaterialPlanId;
|
||||
|
||||
@Schema(description = "订单子项目id")
|
||||
private Long projectPlanSubId;
|
||||
|
||||
@Schema(description = "子项目名称")
|
||||
private String projectSubName;
|
||||
|
||||
@Schema(description = "子项目简码")
|
||||
private String projectSubNameSim;
|
||||
@Schema(description = "工序id")
|
||||
private Long procedureId;
|
||||
@Schema(description = "理论重量")
|
||||
private BigDecimal theWeight;
|
||||
/**
|
||||
* 责任人id
|
||||
*/
|
||||
private Long duEmpId;
|
||||
|
||||
}
|
||||
|
@ -177,4 +177,23 @@ public class MaterialPlanBoomDO extends BaseDO {
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String brief;
|
||||
|
||||
/**
|
||||
* 客户id
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private Long customerId;
|
||||
|
||||
/**
|
||||
* 项目简码
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String projectNameSim;
|
||||
|
||||
/**
|
||||
* 子项目简码
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String projectSubNameSim;
|
||||
|
||||
}
|
||||
|
@ -206,10 +206,10 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
||||
default PageResult<MaterialPlanBoomDO> getPartsPages(MaterialPlanPageReqVO pageReqVO){
|
||||
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(MaterialPlanBoomDO.class)
|
||||
.select("p.project_name as projectName","p.name as projectSubName")
|
||||
.select("d.blueprint_no as blueprintNo","d.unit as unit","f.name as supplierName")
|
||||
.select("p.project_name as projectName","p.name as projectSubName","p.name_sim as projectSubNameSim")
|
||||
.select("d.spec as boomSpec","d.blueprint_no as blueprintNo","d.unit as unit","f.name as supplierName")
|
||||
.select("a.nickname as duEmpName","c.name as procedureName","e.name as compositionName")
|
||||
.select(MaterialPlanDO::getBrief)
|
||||
.select(MaterialPlanDO::getBrief, MaterialPlanDO::getCustomerId, MaterialPlanDO::getProjectId, MaterialPlanDO::getProjectNameSim)
|
||||
.leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId)
|
||||
.leftJoin(ProcessBomDetailDO.class,"d",ProcessBomDetailDO::getId,MaterialPlanBoomDO::getBoomDetailId)
|
||||
.leftJoin(AdminUserDO.class, "a", AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
|
||||
@ -226,7 +226,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getDuEmpName()), AdminUserDO::getNickname, pageReqVO.getDuEmpName())
|
||||
.eq(!StringUtils.isEmpty(pageReqVO.getMatType()), MaterialPlanDO::getMatType, pageReqVO.getMatType())
|
||||
.eq(!StringUtils.isEmpty(pageReqVO.getStatus()), MaterialPlanBoomDO::getIsPurYard, pageReqVO.getStatus())
|
||||
.in(Objects.nonNull(pageReqVO.getMplanStatus()), MaterialPlanBoomDO::getMplanStatus, pageReqVO.getMplanStatus() != 0 ? Arrays.asList(pageReqVO.getMplanStatus()) : Arrays.asList(0, 3))
|
||||
.in(Objects.nonNull(pageReqVO.getMplanStatus()), MaterialPlanBoomDO::getMplanStatus, pageReqVO.getMplanStatus() != null && pageReqVO.getMplanStatus() != 0 ? Arrays.asList(pageReqVO.getMplanStatus()) : Arrays.asList(0, 3))
|
||||
.eq(Objects.nonNull(pageReqVO.getProjectMaterialPlanNo()), MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());
|
||||
|
||||
PageResult<MaterialPlanBoomDO> pageResult = selectPage(pageReqVO, query);
|
||||
|
@ -3,11 +3,7 @@ package com.chanko.yunxi.mes.module.heli.service.partpurchaseorder;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakePageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -62,4 +58,6 @@ public interface PartPurchaseOrderService {
|
||||
Boolean approval(Long id);
|
||||
|
||||
PageResult<PartPurchaseOrderPageRespVO> getDetail(PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO);
|
||||
|
||||
Boolean createPurchaseOrderMakeAndDetailBatch(List<PurchaseOrderMakeSaveReqVO> updateReqVOs);
|
||||
}
|
||||
|
@ -12,17 +12,22 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.Pa
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
|
||||
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.materialplanboom.MaterialPlanBoomMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -54,6 +59,10 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
|
||||
private SerialNumberService serialNumberService;
|
||||
@Resource
|
||||
private MaterialPlanBoomMapper materialPlanBoomMapper;
|
||||
@Resource
|
||||
private PlanMapper planMapper;
|
||||
@Autowired
|
||||
private PlanSubMapper planSubMapper;
|
||||
|
||||
@Override
|
||||
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
|
||||
@ -216,4 +225,80 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
|
||||
return purchaseOrderMakeDetailMapper.getDetail(partPurchaseOrderPageReqVO);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean createPurchaseOrderMakeAndDetailBatch(List<PurchaseOrderMakeSaveReqVO> updateReqVOs) {
|
||||
updateReqVOs.forEach(updateReqVO -> {
|
||||
createPurchaseOrderMakeAndDetail(updateReqVO);
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Boolean createPurchaseOrderMakeAndDetail(PurchaseOrderMakeSaveReqVO updateReqVO) {
|
||||
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
|
||||
// 返回
|
||||
// 月度流水号
|
||||
SerialNumberDO serialNumberDO = new SerialNumberDO();
|
||||
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
|
||||
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
|
||||
// 回写序列记录
|
||||
serialNumberService.updateSerialNumber(serialNumberDO);
|
||||
|
||||
purchaseOrderMakeDO.setPurchaseNo(PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()));
|
||||
purchaseOrderMakeDO.setGoodsType(2);
|
||||
purchaseOrderMakeDO.setStatus(1);
|
||||
purchaseOrderMakeDO.setSubmitUserId(getLoginUser().getId());
|
||||
purchaseOrderMakeDO.setSubmitTime(LocalDateTime.now());
|
||||
purchaseOrderMakeDO.setProjectId(updateReqVO.getProjectId());
|
||||
PlanDO planDO = planMapper.selectOne("plan_no", updateReqVO.getProjectId());
|
||||
purchaseOrderMakeDO.setProjectPlanId(planDO.getId());
|
||||
purchaseOrderMakeDO.setCustomerId(updateReqVO.getCustomerId());
|
||||
purchaseOrderMakeDO.setBrief(updateReqVO.getBrief());
|
||||
purchaseOrderMakeDO.setProjectName(updateReqVO.getProjectName());
|
||||
purchaseOrderMakeDO.setProjectNameSim(updateReqVO.getProjectNameSim());
|
||||
|
||||
purchaseOrderMakeMapper.insert(purchaseOrderMakeDO);
|
||||
long purchaseOrderMakeId = purchaseOrderMakeDO.getId();
|
||||
|
||||
PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO = new PurchaseOrderMakeDetailDO();
|
||||
purchaseOrderMakeDetailDO.setPurchaseOrderId(purchaseOrderMakeId);
|
||||
purchaseOrderMakeDetailDO.setBoomDetailId(updateReqVO.getBoomDetailId());
|
||||
purchaseOrderMakeDetailDO.setBoomName(updateReqVO.getMatName());
|
||||
purchaseOrderMakeDetailDO.setBoomSpec(updateReqVO.getBoomSpec());
|
||||
purchaseOrderMakeDetailDO.setBoomUnit(updateReqVO.getUnit());
|
||||
purchaseOrderMakeDetailDO.setComposition(updateReqVO.getCompositionName());
|
||||
purchaseOrderMakeDetailDO.setPurchaseAmount(updateReqVO.getPurchaseAmount());
|
||||
purchaseOrderMakeDetailDO.setEstimatedPrice(updateReqVO.getEstimatedPrice());
|
||||
purchaseOrderMakeDetailDO.setArriveTime(updateReqVO.getArriveTime());
|
||||
purchaseOrderMakeDetailDO.setBoomAmount(updateReqVO.getBoomAmount());
|
||||
purchaseOrderMakeDetailDO.setRequireTime(updateReqVO.getBoomArriveDate());
|
||||
purchaseOrderMakeDetailDO.setSupplierId(updateReqVO.getSupplierId());
|
||||
purchaseOrderMakeDetailDO.setProjectMaterialPlanId(updateReqVO.getProjectMaterialPlanId());
|
||||
purchaseOrderMakeDetailDO.setProjectMaterialPlanBoomId(updateReqVO.getId());
|
||||
purchaseOrderMakeDetailDO.setProjectPlanSubId(updateReqVO.getProjectPlanSubId());
|
||||
purchaseOrderMakeDetailDO.setName(updateReqVO.getProjectSubName());
|
||||
purchaseOrderMakeDetailDO.setNameSim(updateReqVO.getProjectSubNameSim());
|
||||
purchaseOrderMakeDetailDO.setOrderStatus(1);
|
||||
PlanSubDO planSubDO1= planSubMapper.selectById(updateReqVO.getProjectPlanSubId());
|
||||
purchaseOrderMakeDetailDO.setProjectSubCode(planSubDO1.getProjectSubCode());
|
||||
purchaseOrderMakeDetailDO.setProcedureId(updateReqVO.getProcedureId());
|
||||
purchaseOrderMakeDetailDO.setDescription(updateReqVO.getDescription());
|
||||
purchaseOrderMakeDetailDO.setTheWeight(updateReqVO.getTheWeight());
|
||||
purchaseOrderMakeDetailDO.setDuEmpId(updateReqVO.getDuEmpId());
|
||||
|
||||
purchaseOrderMakeDetailMapper.insert(purchaseOrderMakeDetailDO);
|
||||
long purchaseOrderMakeDetailId = purchaseOrderMakeDetailDO.getId();
|
||||
|
||||
MaterialPlanBoomDO materialPlanBoomDO = new MaterialPlanBoomDO();
|
||||
materialPlanBoomDO.setId(updateReqVO.getId());
|
||||
materialPlanBoomDO.setMplanStatus(1);
|
||||
materialPlanBoomDO.setProjectPurchaseOrderMakeId(purchaseOrderMakeId);
|
||||
materialPlanBoomDO.setPurchaseNo(purchaseOrderMakeDO.getPurchaseNo());
|
||||
materialPlanBoomDO.setProjectPurchaseOrderMakeDetailId(purchaseOrderMakeDetailId);
|
||||
|
||||
materialPlanBoomMapper.updateById(materialPlanBoomDO);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -55,3 +55,8 @@ export const approval = async (id: number) => {
|
||||
export const getDetail = async (params) => {
|
||||
return await request.get({ url: `/heli/purchase-order-make/getDetail`, params })
|
||||
}
|
||||
|
||||
// 零件采购单送审生成
|
||||
export const createPurchaseOrderMakeAndDetail = async (params) => {
|
||||
return await request.post({ url: `/heli/purchase-order-make/createPurchaseOrderMakeAndDetail`, params })
|
||||
}
|
||||
|
@ -69,7 +69,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="客户简称" align="center" prop="customerBriefName" min-width="180" />
|
||||
<el-table-column label="客户简称" align="center" prop="brief" min-width="180" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||
<el-table-column min-width="200px" align="center">
|
||||
@ -159,12 +159,15 @@ import { useCommonStateWithOut } from '@/store/modules/common'
|
||||
import UserSelect from "@/views/heli/materialplan/userSelectNew.vue";
|
||||
import {inject, ref} from "vue";
|
||||
import * as MaterialPlanApi from "@/api/heli/materialplan";
|
||||
import * as MaterialPlanBoomApi from "@/api/heli/materialplanboom";
|
||||
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
|
||||
import {ElTable} from "element-plus";
|
||||
import {useUserStore} from "@/store/modules/user";
|
||||
import {dateFormatter1} from "@/utils/formatTime";
|
||||
import {getPartPurchasePages} from "@/api/heli/materialplan";
|
||||
import SupplierSelect from "@/views/heli/hlvuestyle/supplierSelect.vue";
|
||||
import {getMaterialPlanBoom} from "@/api/heli/materialplanboom";
|
||||
import {createPurchaseOrderMake} from "@/api/heli/partpurchaseorder";
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
|
||||
defineOptions({ name: 'standard' })
|
||||
@ -271,7 +274,8 @@ const submitForm = async () => {
|
||||
return;
|
||||
}
|
||||
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
let i;
|
||||
for (i = 0; i < list.length; i++) {
|
||||
if (list[i].purchaseAmount === null || list[i].purchaseAmount === 0) {
|
||||
message.error("采购数量为0或空");
|
||||
break;
|
||||
@ -290,11 +294,33 @@ const submitForm = async () => {
|
||||
}
|
||||
|
||||
}
|
||||
if (i < list.length){
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 检查供应商一致性
|
||||
const firstSupplierId = list[0].supplierId;
|
||||
if (list.some(item => item.supplierId !== firstSupplierId)) {
|
||||
message.error("零件采购订单不属于同一个供应商,请确认");
|
||||
// 2. 检查项目一致性
|
||||
const firstProjectName = list[0].projectName;
|
||||
if (list.some(item => item.projectName !== firstProjectName)) {
|
||||
message.error("不同项目不能同时生成采购单");
|
||||
return;
|
||||
}
|
||||
|
||||
//3. 检查生成采购订单状态
|
||||
const checkMaterialPlans = async () => {
|
||||
for (const item of list) {
|
||||
const checkParams = await MaterialPlanBoomApi.getMaterialPlanBoom(item.id);
|
||||
if (checkParams.projectPurchaseOrderMakeId !== null) {
|
||||
message.warning("存在零件清单已生成采购订单,请刷新界面!");
|
||||
return false; // 提前终止检查
|
||||
}
|
||||
}
|
||||
return true; // 所有检查通过
|
||||
};
|
||||
|
||||
// 调用方法
|
||||
const allValid = await checkMaterialPlans();
|
||||
if (!allValid) {
|
||||
// 继续后续操作
|
||||
return;
|
||||
}
|
||||
|
||||
@ -303,7 +329,7 @@ const submitForm = async () => {
|
||||
|
||||
// 5. 提交数据(添加超时处理)
|
||||
const res = await Promise.race([
|
||||
PartPurchaseOrderApi.submitForm(list),
|
||||
PartPurchaseOrderApi.createPurchaseOrderMakeAndDetail(list),
|
||||
new Promise((_, reject) =>
|
||||
setTimeout(() => reject(new Error("请求超时")), 30000)
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user