Merge remote-tracking branch 'origin/main'
# Conflicts: # mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/purchaseordermakedetail/PurchaseOrderMakeDetailDO.java # mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/partpurchaseorder/PartPurchaseOrderServiceImpl.java
This commit is contained in:
commit
ceafe8a8ba
@ -52,7 +52,6 @@ public enum CodeEnum {
|
|||||||
TASK_DISPATCH_ASSEMBLE("装配任务派工单", "ATD", 3, "yyyyMMdd"),
|
TASK_DISPATCH_ASSEMBLE("装配任务派工单", "ATD", 3, "yyyyMMdd"),
|
||||||
TASK_DISPATCH_GCJYPG("过程检验派工单", "GCJ", 4, "yyyyMMdd"),
|
TASK_DISPATCH_GCJYPG("过程检验派工单", "GCJ", 4, "yyyyMMdd"),
|
||||||
TASK_DISPATCH_ZJJYPG("终检检验派工单", "ZJ", 4, "yyyyMMdd"),
|
TASK_DISPATCH_ZJJYPG("终检检验派工单", "ZJ", 4, "yyyyMMdd"),
|
||||||
|
|
||||||
UNQUALIFIED_NOTIFICATION("品质异常通知单", "RN", 4, "yyyyMMdd"),
|
UNQUALIFIED_NOTIFICATION("品质异常通知单", "RN", 4, "yyyyMMdd"),
|
||||||
MATERIAL("物料", 6),
|
MATERIAL("物料", 6),
|
||||||
;
|
;
|
||||||
|
@ -99,6 +99,8 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode PURCHASE_ORDER_BOOM_NOT_EXISTS = new ErrorCode(1_008_006, "采购订单加工件明细不存在");
|
ErrorCode PURCHASE_ORDER_BOOM_NOT_EXISTS = new ErrorCode(1_008_006, "采购订单加工件明细不存在");
|
||||||
ErrorCode PURCHASE_ORDER_MAKE_NOT_EXISTS = new ErrorCode(1_008_007, "采购单主不存在");
|
ErrorCode PURCHASE_ORDER_MAKE_NOT_EXISTS = new ErrorCode(1_008_007, "采购单主不存在");
|
||||||
ErrorCode PURCHASE_ORDER_MAKE_DETAIL_NOT_EXISTS = new ErrorCode(1_008_008, "采购单明细不存在");
|
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 TASK_DISPATCH_NOT_EXISTS = new ErrorCode(1_009_001, "派工单不存在");
|
ErrorCode TASK_DISPATCH_NOT_EXISTS = new ErrorCode(1_009_001, "派工单不存在");
|
||||||
ErrorCode TASK_REPORT_NOT_EXISTS = new ErrorCode(1_009_002, "任务报工不存在");
|
ErrorCode TASK_REPORT_NOT_EXISTS = new ErrorCode(1_009_002, "任务报工不存在");
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo;
|
||||||
|
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -41,4 +42,6 @@ public class MaterialPlanSaveReqVO {
|
|||||||
|
|
||||||
@Schema(description = "备注")
|
@Schema(description = "备注")
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
|
private List<MaterialPlanBoomDO> boomDOList;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom;
|
||||||
|
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService;
|
import com.chanko.yunxi.mes.module.heli.service.processbom.ProcessBomService;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@ -125,4 +126,12 @@ public class MaterialPlanBoomController {
|
|||||||
return success(BeanUtils.toBean(pageResult, MaterialPlanBoomDO.class));
|
return success(BeanUtils.toBean(pageResult, MaterialPlanBoomDO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getStandardBuyPage")
|
||||||
|
@Operation(summary = "采购管理列表")
|
||||||
|
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')")
|
||||||
|
public CommonResult<PageResult<MaterialPlanBoomDO>> getStandardBuyPage(@Valid MaterialPlanBoomPageReqVO pageReqVO) {
|
||||||
|
PageResult<MaterialPlanBoomDO> pageResult = materialPlanBoomService.getStandardBuyPage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, MaterialPlanBoomDO.class));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -60,4 +60,31 @@ public class MaterialPlanBoomPageReqVO extends PageParam {
|
|||||||
private Long matType;
|
private Long matType;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "子项目名称", example = "张三")
|
||||||
|
private String projectSubName;
|
||||||
|
|
||||||
|
@Schema(description = "子项目编号")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
@Schema(description = "采购状态")
|
||||||
|
private Integer mplanStatus;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "生产计划单号")
|
||||||
|
private String planCode;
|
||||||
|
|
||||||
|
@Schema(description = "项目编号")
|
||||||
|
private String projectCode;
|
||||||
|
|
||||||
|
@Schema(description = "客户名称")
|
||||||
|
private String customerName;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "责任人")
|
||||||
|
private String ownerName;
|
||||||
|
|
||||||
|
@Schema(description = "物料需求单号")
|
||||||
|
private String projectMaterialPlanNo;
|
||||||
|
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo;
|
||||||
|
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -34,7 +35,18 @@ public class MaterialPlanBoomSaveReqVO {
|
|||||||
@Schema(description = "需求到货日期")
|
@Schema(description = "需求到货日期")
|
||||||
private LocalDateTime boomArriveDate;
|
private LocalDateTime boomArriveDate;
|
||||||
|
|
||||||
|
private Integer buyType;
|
||||||
@Schema(description = "备注")
|
@Schema(description = "备注")
|
||||||
private String description;
|
private String description;
|
||||||
|
//采购数量
|
||||||
|
private BigDecimal purchaseAmount;
|
||||||
|
//暂估价格
|
||||||
|
private BigDecimal estimatedPrice;
|
||||||
|
//预估到时间
|
||||||
|
private LocalDateTime arriveTime;
|
||||||
|
//供应商id
|
||||||
|
private Long supplierId;
|
||||||
|
private BigDecimal matRest;
|
||||||
|
|
||||||
|
private List<MaterialPlanBoomDO> materialPlanBoomDOList;
|
||||||
}
|
}
|
||||||
|
@ -150,6 +150,13 @@ public class ProcessBomController {
|
|||||||
PageResult<ProcessBomDO> pageResult = processBomService.getProcessBomPages(pageReqVO);
|
PageResult<ProcessBomDO> pageResult = processBomService.getProcessBomPages(pageReqVO);
|
||||||
return success(BeanUtils.toBean(pageResult, ProcessBomRespVO.class));
|
return success(BeanUtils.toBean(pageResult, ProcessBomRespVO.class));
|
||||||
}
|
}
|
||||||
|
@GetMapping("/detailpages")
|
||||||
|
@Operation(summary = "获得工艺bom审核分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('heli:process-bom:query')")
|
||||||
|
public CommonResult<PageResult<ProcessBomDetailDO>> getProcessBomDetailPages(@Valid ProcessBomPageReqVO pageReqVO) {
|
||||||
|
PageResult<ProcessBomDetailDO> pageResult = processBomService.getProcessBomPageNew(pageReqVO);
|
||||||
|
return success(pageResult);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
@GetMapping("/export-excel")
|
||||||
@Operation(summary = "导出工艺bom Excel")
|
@Operation(summary = "导出工艺bom Excel")
|
||||||
@ -240,6 +247,8 @@ public class ProcessBomController {
|
|||||||
PageResult<ProcessBomDetailDO> pageResult = processBomService.getStandardPage(pageReqVO);
|
PageResult<ProcessBomDetailDO> pageResult = processBomService.getStandardPage(pageReqVO);
|
||||||
return success(pageResult);
|
return success(pageResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/submit")
|
@PostMapping("/submit")
|
||||||
@Operation(summary = "提交")
|
@Operation(summary = "提交")
|
||||||
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
|
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
|
||||||
|
@ -23,7 +23,8 @@ public class ProcessBomPageReqVO extends PageParam {
|
|||||||
|
|
||||||
@Schema(description = "项目id", example = "32751")
|
@Schema(description = "项目id", example = "32751")
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
|
private String inventoryCodes;
|
||||||
|
private String inventoryName;
|
||||||
@Schema(description = "子项目id", example = "12526")
|
@Schema(description = "子项目id", example = "12526")
|
||||||
private Long projectSubId;
|
private Long projectSubId;
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ public class PurchaseOrderMakeDetailPageReqVO extends PageParam {
|
|||||||
|
|
||||||
@Schema(description = "采购单id", example = "13340")
|
@Schema(description = "采购单id", example = "13340")
|
||||||
private Long purchaseOrderId;
|
private Long purchaseOrderId;
|
||||||
|
private String projectSubName;
|
||||||
@Schema(description = "加工件boom detail id", example = "31132")
|
@Schema(description = "加工件boom detail id", example = "31132")
|
||||||
private Long boomDetailId;
|
private Long boomDetailId;
|
||||||
|
|
||||||
@ -75,7 +75,10 @@ public class PurchaseOrderMakeDetailPageReqVO extends PageParam {
|
|||||||
|
|
||||||
@Schema(description = "子项目名称,唯一", example = "张三")
|
@Schema(description = "子项目名称,唯一", example = "张三")
|
||||||
private String name;
|
private String name;
|
||||||
|
@Schema(description = "项目名称,唯一", example = "张三")
|
||||||
|
private String projectName;
|
||||||
|
@Schema(description = "项目编码,唯一", example = "张三")
|
||||||
|
private String projectCode;
|
||||||
@Schema(description = "子项目简码")
|
@Schema(description = "子项目简码")
|
||||||
private String nameSim;
|
private String nameSim;
|
||||||
|
|
||||||
@ -86,7 +89,7 @@ public class PurchaseOrderMakeDetailPageReqVO extends PageParam {
|
|||||||
private Long purchaseOrderNoDetailId;
|
private Long purchaseOrderNoDetailId;
|
||||||
|
|
||||||
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
|
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
|
||||||
private Boolean orderStatus;
|
private Integer orderStatus;
|
||||||
|
|
||||||
@Schema(description = "子项目编码")
|
@Schema(description = "子项目编码")
|
||||||
private String projectSubCode;
|
private String projectSubCode;
|
||||||
|
@ -26,6 +26,7 @@ public class PurchaseOrderMakeDetailRespVO {
|
|||||||
@ExcelProperty("加工件boom detail id")
|
@ExcelProperty("加工件boom detail id")
|
||||||
private Long boomDetailId;
|
private Long boomDetailId;
|
||||||
|
|
||||||
|
private String boomCode;
|
||||||
@Schema(description = "零件名称", example = "芋艿")
|
@Schema(description = "零件名称", example = "芋艿")
|
||||||
@ExcelProperty("零件名称")
|
@ExcelProperty("零件名称")
|
||||||
private String boomName;
|
private String boomName;
|
||||||
@ -108,7 +109,7 @@ public class PurchaseOrderMakeDetailRespVO {
|
|||||||
|
|
||||||
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
|
@Schema(description = "订单状态 未生成/已生成 1/2", example = "1")
|
||||||
@ExcelProperty("订单状态 未生成/已生成 1/2")
|
@ExcelProperty("订单状态 未生成/已生成 1/2")
|
||||||
private Boolean orderStatus;
|
private Integer orderStatus;
|
||||||
|
|
||||||
@Schema(description = "子项目编码")
|
@Schema(description = "子项目编码")
|
||||||
@ExcelProperty("子项目编码")
|
@ExcelProperty("子项目编码")
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo;
|
package com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo;
|
||||||
|
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -100,5 +101,5 @@ public class PurchaseOrderMakeDetailSaveReqVO {
|
|||||||
|
|
||||||
@Schema(description = "责任人id", example = "25680")
|
@Schema(description = "责任人id", example = "25680")
|
||||||
private Long duEmpId;
|
private Long duEmpId;
|
||||||
|
private List<PurchaseOrderMakeDetailDO> updateList;
|
||||||
}
|
}
|
@ -33,6 +33,8 @@ public class MaterialPlanBoomDO extends BaseDO {
|
|||||||
* 物料需求计划id
|
* 物料需求计划id
|
||||||
*/
|
*/
|
||||||
private Long projectMaterialPlanId;
|
private Long projectMaterialPlanId;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Long projectId;
|
||||||
/**
|
/**
|
||||||
* 工艺boom明细id,零件类型:加工件
|
* 工艺boom明细id,零件类型:加工件
|
||||||
*/
|
*/
|
||||||
@ -130,8 +132,6 @@ public class MaterialPlanBoomDO extends BaseDO {
|
|||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private Long matId;
|
private Long matId;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private Long projectId;
|
|
||||||
@TableField(exist = false)
|
|
||||||
private String matCode;
|
private String matCode;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String matSpec;
|
private String matSpec;
|
||||||
@ -139,8 +139,24 @@ public class MaterialPlanBoomDO extends BaseDO {
|
|||||||
private String matUnit;
|
private String matUnit;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String matType;
|
private String matType;
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
|
private String mplanStatusName;
|
||||||
|
|
||||||
private BigDecimal matRest;
|
private BigDecimal matRest;
|
||||||
|
//采购数量
|
||||||
|
private BigDecimal purchaseAmount;
|
||||||
|
//暂估价格
|
||||||
|
private BigDecimal estimatedPrice;
|
||||||
|
//预估到时间
|
||||||
|
private LocalDateTime arriveTime;
|
||||||
|
//供应商id
|
||||||
|
private Long supplierId;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
//客户简称
|
||||||
|
private String customerBriefName;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -58,6 +58,8 @@ public class ProcessBomDetailDO extends BaseDO {
|
|||||||
* 材质id
|
* 材质id
|
||||||
*/
|
*/
|
||||||
private Long compositionId;
|
private Long compositionId;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String inventCode;
|
||||||
/**
|
/**
|
||||||
* 规格
|
* 规格
|
||||||
*/
|
*/
|
||||||
@ -82,6 +84,7 @@ public class ProcessBomDetailDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 其他件物料编码
|
* 其他件物料编码
|
||||||
*/
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
private String otherMaterialCode;
|
private String otherMaterialCode;
|
||||||
/**
|
/**
|
||||||
* 状态,1表示正常,2表示禁用
|
* 状态,1表示正常,2表示禁用
|
||||||
@ -186,4 +189,6 @@ public class ProcessBomDetailDO extends BaseDO {
|
|||||||
private String projectNameSim;
|
private String projectNameSim;
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,11 +42,11 @@ public class PurchaseOrderMakeDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 采购单类型,1按物料需求计划采购,2备库采购
|
* 采购单类型,1按物料需求计划采购,2备库采购
|
||||||
*/
|
*/
|
||||||
private Boolean purchaseType;
|
private Integer purchaseType;
|
||||||
/**
|
/**
|
||||||
* 采购物类型,1物料,2加工件
|
* 采购物类型,1物料,2加工件
|
||||||
*/
|
*/
|
||||||
private Boolean goodsType;
|
private Integer goodsType;
|
||||||
/**
|
/**
|
||||||
* 结算币种
|
* 结算币种
|
||||||
*/
|
*/
|
||||||
@ -66,7 +66,7 @@ public class PurchaseOrderMakeDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 单据状态,0 待送审,1已送审,2已审核,3已打回 ,默认是1
|
* 单据状态,0 待送审,1已送审,2已审核,3已打回 ,默认是1
|
||||||
*/
|
*/
|
||||||
private Boolean status;
|
private Integer status;
|
||||||
/**
|
/**
|
||||||
* 送审人
|
* 送审人
|
||||||
*/
|
*/
|
||||||
|
@ -34,6 +34,7 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableId
|
@TableId
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购单id
|
* 采购单id
|
||||||
*/
|
*/
|
||||||
@ -46,6 +47,9 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
|
|||||||
* 零件名称
|
* 零件名称
|
||||||
*/
|
*/
|
||||||
private String boomName;
|
private String boomName;
|
||||||
|
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String boomCode;
|
||||||
/**
|
/**
|
||||||
* 规格型号
|
* 规格型号
|
||||||
*/
|
*/
|
||||||
@ -90,6 +94,8 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
|
|||||||
* 供应商id
|
* 供应商id
|
||||||
*/
|
*/
|
||||||
private Long supplierId;
|
private Long supplierId;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String supplierName;
|
||||||
/**
|
/**
|
||||||
* 物料需求计划id
|
* 物料需求计划id
|
||||||
*/
|
*/
|
||||||
@ -121,6 +127,7 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 订单状态 未生成/已生成 1/2
|
* 订单状态 未生成/已生成 1/2
|
||||||
*/
|
*/
|
||||||
|
@TableField( "order_status")
|
||||||
private Integer orderStatus;
|
private Integer orderStatus;
|
||||||
/**
|
/**
|
||||||
* 子项目编码
|
* 子项目编码
|
||||||
|
@ -35,6 +35,8 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableId
|
@TableId
|
||||||
private Long id;
|
private Long id;
|
||||||
|
@TableField(exist = false)
|
||||||
|
private Long makeDetailId;
|
||||||
/**
|
/**
|
||||||
* 采购单id
|
* 采购单id
|
||||||
*/
|
*/
|
||||||
|
@ -3,11 +3,13 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo.MaterialPlanPageReqVO;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo.MaterialPlanPageReqVO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||||
@ -37,6 +39,9 @@ import org.springframework.util.StringUtils;
|
|||||||
@Mapper
|
@Mapper
|
||||||
public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO> {
|
public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO> {
|
||||||
|
|
||||||
|
Long hasPurchase(Map map);
|
||||||
|
Long hasPurYard(Map map);
|
||||||
|
|
||||||
default PageResult<MaterialPlanBoomDO> selectPage(MaterialPlanBoomPageReqVO reqVO) {
|
default PageResult<MaterialPlanBoomDO> selectPage(MaterialPlanBoomPageReqVO reqVO) {
|
||||||
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
||||||
query.selectAll(MaterialPlanBoomDO.class)
|
query.selectAll(MaterialPlanBoomDO.class)
|
||||||
@ -54,7 +59,51 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
|||||||
|
|
||||||
return selectPage(reqVO,query);
|
return selectPage(reqVO,query);
|
||||||
}
|
}
|
||||||
|
default PageResult<MaterialPlanBoomDO> getStandardBuyPage(MaterialPlanBoomPageReqVO pageReqVO){
|
||||||
|
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
||||||
|
|
||||||
|
query.selectAll(MaterialPlanBoomDO.class)
|
||||||
|
// .select("mat.id as matId","mat.name as matName","mat.code as matCode","mat.spec as matSpec","mat.unit as matUnit","mat.material_type as matType")
|
||||||
|
.select("b.material_name as matName","b.material_code as matCode","b.spec as matSpec","b.unit as matUnit","b.blueprint_no as blueprintNo")
|
||||||
|
.select("bc.`name` as compositionName","b.`composition_id` as compositionId")
|
||||||
|
.select("ma.brief as customerBriefName,ma.project_name as projectName,ma.name as projectSubName,ma.project_id as projectId")
|
||||||
|
.leftJoin(MaterialPlanDO.class,"ma",MaterialPlanDO::getId, MaterialPlanBoomDO::getProjectMaterialPlanId)
|
||||||
|
// .leftJoin(StorageMaterialDO.class,"sm",StorageMaterialDO::getId, MaterialPlanDetailDO::getMaterialId)
|
||||||
|
.leftJoin(ProcessBomDetailDO.class, "b", ProcessBomDetailDO::getId, MaterialPlanBoomDO::getBoomDetailId)
|
||||||
|
.leftJoin(CompositionDO.class, "bc", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
|
||||||
|
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
|
||||||
|
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
|
||||||
|
.eq(MaterialPlanDO::getMatType,0)
|
||||||
|
.disableSubLogicDel()
|
||||||
|
.groupBy(MaterialPlanBoomDO::getId)
|
||||||
|
.orderByDesc(MaterialPlanBoomDO::getCreateTime);
|
||||||
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName());
|
||||||
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()),MaterialPlanDO::getName, pageReqVO.getProjectSubName());
|
||||||
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getMaterialName()),MaterialPlanBoomDO::getMatName, pageReqVO.getMaterialName());
|
||||||
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectCode()),ProjectOrderDO::getCode, pageReqVO.getProjectCode());
|
||||||
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getOwnerName()),AdminUserDO::getNickname, pageReqVO.getOwnerName());
|
||||||
|
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectMaterialPlanNo()),MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());
|
||||||
|
if (pageReqVO.getMplanStatus() == 0){
|
||||||
|
query.in(MaterialPlanBoomDO::getMplanStatus,Arrays
|
||||||
|
.asList(0,3,5));
|
||||||
|
}else{
|
||||||
|
query.eq(MaterialPlanBoomDO::getMplanStatus,1);
|
||||||
|
}
|
||||||
|
// query.like(ObjectUtil.isNotEmpty(pageReqVO.getMplanStatus()),ProjectOrderDO::getCode, pageReqVO.getProjectCode());
|
||||||
|
|
||||||
|
return selectPage(pageReqVO, query);
|
||||||
|
}
|
||||||
|
default int clearSuplier(MaterialPlanBoomDO updateObj){
|
||||||
|
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
|
||||||
|
if (updateObj.getSupplierId() == null){
|
||||||
|
updateWrapper.set("supplier_id",null); }
|
||||||
|
if (updateObj.getArriveTime() == null){
|
||||||
|
updateWrapper.set("arrive_time",null);
|
||||||
|
}
|
||||||
|
updateWrapper.eq("id",updateObj.getId());
|
||||||
|
|
||||||
|
return update(updateWrapper);
|
||||||
|
}
|
||||||
default PageResult<MaterialPlanBoomDO> selectSumPage(MaterialPlanBoomPageReqVO reqVO) {
|
default PageResult<MaterialPlanBoomDO> selectSumPage(MaterialPlanBoomPageReqVO reqVO) {
|
||||||
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
||||||
query.selectAll(MaterialPlanBoomDO.class)
|
query.selectAll(MaterialPlanBoomDO.class)
|
||||||
@ -151,3 +200,4 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +65,22 @@ public interface MaterialPlanDetailMapper extends BaseMapperX<MaterialPlanDetail
|
|||||||
|
|
||||||
return selectPage(reqVO, query);
|
return selectPage(reqVO, query);
|
||||||
}
|
}
|
||||||
|
default PageResult<MaterialPlanDetailDO> getStandardBuyPage(MaterialPlanDetailPageReqVO reqVO) {
|
||||||
|
MPJLambdaWrapper<MaterialPlanDetailDO> query = new MPJLambdaWrapper<>();
|
||||||
|
query.selectAll(MaterialPlanDetailDO.class)
|
||||||
|
|
||||||
|
.leftJoin(MaterialDO.class, "mat", MaterialDO::getId, MaterialPlanDetailDO::getMaterialId)
|
||||||
|
.disableSubLogicDel()
|
||||||
|
.groupBy(MaterialPlanDetailDO::getMaterialId)
|
||||||
|
.orderByDesc(MaterialPlanDetailDO::getCreateTime);
|
||||||
|
query.eq(reqVO.getProjectMaterialPlanId()!=null,MaterialPlanDetailDO::getProjectMaterialPlanId, reqVO.getProjectMaterialPlanId())
|
||||||
|
.like(!StringUtils.isEmpty(reqVO.getMatName()), "mat.name", reqVO.getMatName())
|
||||||
|
.like(!StringUtils.isEmpty(reqVO.getMatCode()), "mat.code", reqVO.getMatCode())
|
||||||
|
.eq(!StringUtils.isEmpty(reqVO.getMatType()), "mat.material_type", reqVO.getMatType())
|
||||||
|
.orderByAsc(MaterialPlanDetailDO::getCreateTime);
|
||||||
|
|
||||||
|
return selectPage(reqVO, query);
|
||||||
|
}
|
||||||
// default PageResult<MaterialPlanDetailDO> selectPage(MaterialPlanDetailPageReqVO reqVO) {
|
// default PageResult<MaterialPlanDetailDO> selectPage(MaterialPlanDetailPageReqVO reqVO) {
|
||||||
// return selectPage(reqVO, new LambdaQueryWrapperX<MaterialPlanDetailDO>()
|
// return selectPage(reqVO, new LambdaQueryWrapperX<MaterialPlanDetailDO>()
|
||||||
// .eqIfPresent(MaterialPlanDetailDO::getId, reqVO.getId())
|
// .eqIfPresent(MaterialPlanDetailDO::getId, reqVO.getId())
|
||||||
|
@ -48,12 +48,17 @@ public interface PlanSubMapper extends BaseMapperX<PlanSubDO> {
|
|||||||
query.selectAll(PlanSubDO.class)
|
query.selectAll(PlanSubDO.class)
|
||||||
.select("b.project_name_sim as projectNameSim")
|
.select("b.project_name_sim as projectNameSim")
|
||||||
.select("a.brief as customerName")
|
.select("a.brief as customerName")
|
||||||
|
.select("s.name as projectSubName")
|
||||||
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, PlanSubDO::getProjectId)
|
.leftJoin(ProjectOrderDO.class, "b", ProjectOrderDO::getId, PlanSubDO::getProjectId)
|
||||||
|
.leftJoin(ProjectOrderSubDO.class,"s",ProjectOrderSubDO::getId,PlanSubDO::getProjectSubId)
|
||||||
.leftJoin(CustomerDO.class,"a",CustomerDO::getId,ProjectOrderDO::getCustomerId)
|
.leftJoin(CustomerDO.class,"a",CustomerDO::getId,ProjectOrderDO::getCustomerId)
|
||||||
.eq(PlanSubDO::getId, id);
|
.eq(PlanSubDO::getId, id);
|
||||||
|
|
||||||
return selectOne(query);
|
return selectOne(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
default List<PlanSubDO> searchOwnerThrees(Long planId,String name,String dateOne,String dateTwo,String id,long projectPlanid) {
|
default List<PlanSubDO> searchOwnerThrees(Long planId,String name,String dateOne,String dateTwo,String id,long projectPlanid) {
|
||||||
MPJLambdaWrapper<PlanSubDO> query = new MPJLambdaWrapper<>();
|
MPJLambdaWrapper<PlanSubDO> query = new MPJLambdaWrapper<>();
|
||||||
query.selectAll(PlanSubDO.class)
|
query.selectAll(PlanSubDO.class)
|
||||||
|
@ -100,6 +100,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
|||||||
.select("concat('BOM-', e.project_sub_code) as bomCode", "e.project_sub_code as projectSubCode")
|
.select("concat('BOM-', e.project_sub_code) as bomCode", "e.project_sub_code as projectSubCode")
|
||||||
.select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName")
|
.select("a.plan_no as planCode", "b.code as projectCode", "c.name as customerName", "b.project_name as projectName")
|
||||||
.select("d.name as projectSubName,f.name as compositionName")
|
.select("d.name as projectSubName,f.name as compositionName")
|
||||||
|
|
||||||
.leftJoin(ProcessBomDO.class,"g",ProcessBomDO::getId,ProcessBomDetailDO::getBomId)
|
.leftJoin(ProcessBomDO.class,"g",ProcessBomDO::getId,ProcessBomDetailDO::getBomId)
|
||||||
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId)
|
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessBomDO::getPlanId)
|
||||||
.leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId)
|
.leftJoin(PlanSubDO.class, "e", PlanSubDO::getProjectSubId, ProcessBomDO::getProjectSubId)
|
||||||
@ -117,9 +118,16 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
|||||||
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
|
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
|
||||||
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
|
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
|
||||||
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
|
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
|
||||||
|
|
||||||
.eq(reqVO.getBomStatus() != null, ProcessBomDO::getBomStatus, reqVO.getBomStatus())
|
.eq(reqVO.getBomStatus() != null, ProcessBomDO::getBomStatus, reqVO.getBomStatus())
|
||||||
;
|
;
|
||||||
|
if (!StringUtils.isEmpty(reqVO.getInventoryName())) {
|
||||||
|
query.and(qw ->
|
||||||
|
qw.like("t.material_name", reqVO.getInventoryName())
|
||||||
|
.or()
|
||||||
|
.like("t.material_code", reqVO.getInventoryName())
|
||||||
|
);
|
||||||
|
}
|
||||||
return selectPage(reqVO, query);
|
return selectPage(reqVO, query);
|
||||||
}
|
}
|
||||||
// default List<ProcessBomDetailDO> selectListByBomIdbyid(Long bomId,Long bomId) {
|
// default List<ProcessBomDetailDO> selectListByBomIdbyid(Long bomId,Long bomId) {
|
||||||
|
@ -38,7 +38,14 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
|
|||||||
return selectOne(query);
|
return selectOne(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default ProjectOrderSubDO selectById(Long id) {
|
||||||
|
MPJLambdaWrapper<ProjectOrderSubDO> query = new MPJLambdaWrapper<>();
|
||||||
|
query.selectAll(ProjectOrderSubDO.class)
|
||||||
|
.select("pb.project_sub_code as projectSubCode")
|
||||||
|
.leftJoin(PlanSubDO.class,"pb",PlanSubDO::getProjectSubId,ProjectOrderSubDO::getId)
|
||||||
|
.eq(ProjectOrderSubDO::getId, id);
|
||||||
|
return selectOne(query);
|
||||||
|
}
|
||||||
default List<ProjectOrderSubDO> selectListByProjectOrderId(Long projectOrderId) {
|
default List<ProjectOrderSubDO> selectListByProjectOrderId(Long projectOrderId) {
|
||||||
MPJLambdaWrapper<ProjectOrderSubDO> query = new MPJLambdaWrapper<>();
|
MPJLambdaWrapper<ProjectOrderSubDO> query = new MPJLambdaWrapper<>();
|
||||||
query.selectAll(ProjectOrderSubDO.class)
|
query.selectAll(ProjectOrderSubDO.class)
|
||||||
|
@ -2,14 +2,20 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.excel.util.StringUtils;
|
import com.alibaba.excel.util.StringUtils;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.MaterialPlanBoomPageReqVO;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
|
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.PartPurchaseOrderPageRespVO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
|
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.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
|
||||||
@ -28,37 +34,35 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail
|
|||||||
public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrderMakeDetailDO> {
|
public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrderMakeDetailDO> {
|
||||||
|
|
||||||
default PageResult<PurchaseOrderMakeDetailDO> selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) {
|
default PageResult<PurchaseOrderMakeDetailDO> selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) {
|
||||||
return selectPage(reqVO, new LambdaQueryWrapperX<PurchaseOrderMakeDetailDO>()
|
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseOrderId, reqVO.getPurchaseOrderId())
|
query.selectAll(PurchaseOrderMakeDetailDO.class)
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomDetailId, reqVO.getBoomDetailId())
|
.select("b.material_name as boomName","b.material_code as boomCode","b.spec as boomSpec","b.unit as boomUnit")
|
||||||
.likeIfPresent(PurchaseOrderMakeDetailDO::getBoomName, reqVO.getBoomName())
|
.select("pom.purchase_no as purchaseNo")
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomSpec, reqVO.getBoomSpec())
|
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId)
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomUnit, reqVO.getBoomUnit())
|
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getComposition, reqVO.getComposition())
|
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseAmount, reqVO.getPurchaseAmount())
|
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getEstimatedPrice, reqVO.getEstimatedPrice())
|
.eq(PurchaseOrderMakeDO::getGoodsType,1)
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getActualPrice, reqVO.getActualPrice())
|
.disableSubLogicDel();
|
||||||
.betweenIfPresent(PurchaseOrderMakeDetailDO::getArriveTime, reqVO.getArriveTime())
|
if (!StringUtils.isEmpty(reqVO.getProjectName())){
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getDescription, reqVO.getDescription())
|
query.like(ProjectOrderDO::getProjectName, reqVO.getProjectName());
|
||||||
.betweenIfPresent(PurchaseOrderMakeDetailDO::getCreateTime, reqVO.getCreateTime())
|
}
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getBoomAmount, reqVO.getBoomAmount())
|
if (!StringUtils.isEmpty(reqVO.getProjectCode())){
|
||||||
.betweenIfPresent(PurchaseOrderMakeDetailDO::getRequireTime, reqVO.getRequireTime())
|
query.like(ProjectOrderDO::getCode, reqVO.getProjectCode());
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getSupplierId, reqVO.getSupplierId())
|
}
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectMaterialPlanId, reqVO.getProjectMaterialPlanId())
|
if (!StringUtils.isEmpty(reqVO.getBoomName())){
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectMaterialPlanBoomId, reqVO.getProjectMaterialPlanBoomId())
|
query.like(ProcessBomDetailDO::getMaterialName, reqVO.getBoomName());
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectPlanSubId, reqVO.getProjectPlanSubId())
|
}
|
||||||
.likeIfPresent(PurchaseOrderMakeDetailDO::getName, reqVO.getName())
|
if (!StringUtils.isEmpty(reqVO.getProjectSubName())){
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getNameSim, reqVO.getNameSim())
|
query.like(ProjectOrderSubDO::getName, reqVO.getProjectSubName());
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseOrderNoId, reqVO.getPurchaseOrderNoId())
|
}
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseOrderNoDetailId, reqVO.getPurchaseOrderNoDetailId())
|
if (reqVO.getOrderStatus() != null){
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getOrderStatus, reqVO.getOrderStatus())
|
query.eq(PurchaseOrderMakeDetailDO::getOrderStatus, reqVO.getOrderStatus());
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getProjectSubCode, reqVO.getProjectSubCode())
|
}
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getReceivingStatus, reqVO.getReceivingStatus())
|
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getPurchaseNo, reqVO.getPurchaseNo())
|
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getProcedureId, reqVO.getProcedureId())
|
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getTheWeight, reqVO.getTheWeight())
|
return selectPage(reqVO, query);
|
||||||
.eqIfPresent(PurchaseOrderMakeDetailDO::getDuEmpId, reqVO.getDuEmpId())
|
|
||||||
.orderByDesc(PurchaseOrderMakeDetailDO::getId));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default PageResult<PartPurchaseOrderPageRespVO> selectPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
|
default PageResult<PartPurchaseOrderPageRespVO> selectPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
|
||||||
|
@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.service.materialplanboom;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.*;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.*;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||||
@ -60,4 +61,6 @@ public interface MaterialPlanBoomService {
|
|||||||
PageResult<MaterialPlanBoomDO> getMaterialPlanBoomPages(ProcessBoomPageReqVO pageReqVO);
|
PageResult<MaterialPlanBoomDO> getMaterialPlanBoomPages(ProcessBoomPageReqVO pageReqVO);
|
||||||
|
|
||||||
PageResult<MaterialPlanBoomDO> getProjectMaterialPlanId(MaterialPlanBoomPageReqVO pageReqVO);
|
PageResult<MaterialPlanBoomDO> getProjectMaterialPlanId(MaterialPlanBoomPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
PageResult<MaterialPlanBoomDO> getStandardBuyPage(MaterialPlanBoomPageReqVO pageReqVO);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,19 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.service.materialplanboom;
|
package com.chanko.yunxi.mes.module.heli.service.materialplanboom;
|
||||||
|
|
||||||
import cn.binarywang.wx.miniapp.bean.cloud.WxCloudDatabaseQueryResult;
|
import cn.binarywang.wx.miniapp.bean.cloud.WxCloudDatabaseQueryResult;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||||
|
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||||
|
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.serialnumber.SerialNumberDO;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.BoomDetailRespVOMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.BoomDetailRespVOMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomDetailMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomDetailMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
|
||||||
@ -9,12 +21,21 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMap
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorder.PurchaseOrderMapper;
|
||||||
|
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.enums.CodeEnum;
|
||||||
|
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
|
||||||
|
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
|
||||||
|
import org.apache.catalina.security.SecurityUtil;
|
||||||
import org.apache.ibatis.jdbc.Null;
|
import org.apache.ibatis.jdbc.Null;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -27,6 +48,7 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
|
||||||
|
|
||||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.*;
|
||||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,6 +68,18 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ProjectOrderSubMapper projectOrderSubMapper;
|
private ProjectOrderSubMapper projectOrderSubMapper;
|
||||||
|
@Resource
|
||||||
|
private SerialNumberService serialNumberService;
|
||||||
|
@Resource
|
||||||
|
private MaterialPlanMapper materialPlanMapper;
|
||||||
|
@Resource
|
||||||
|
private PlanSubMapper planSubMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PurchaseOrderMakeMapper purchaseOrderMakeMapper;
|
||||||
|
@Resource
|
||||||
|
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createMaterialPlanBoom(MaterialPlanBoomSaveReqVO createReqVO) {
|
public Long createMaterialPlanBoom(MaterialPlanBoomSaveReqVO createReqVO) {
|
||||||
@ -58,11 +92,157 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMaterialPlanBoom(MaterialPlanBoomSaveReqVO updateReqVO) {
|
public void updateMaterialPlanBoom(MaterialPlanBoomSaveReqVO updateReqVO) {
|
||||||
|
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateMaterialPlanBoomExists(updateReqVO.getId());
|
validateMaterialPlanBoomExists(updateReqVO.getId());
|
||||||
// 更新
|
// 更新
|
||||||
MaterialPlanBoomDO updateObj = BeanUtils.toBean(updateReqVO, MaterialPlanBoomDO.class);
|
if (CollUtil.isEmpty(updateReqVO.getMaterialPlanBoomDOList())){
|
||||||
materialPlanBoomMapper.updateById(updateObj);
|
MaterialPlanBoomDO updateObj = BeanUtils.toBean(updateReqVO, MaterialPlanBoomDO.class);
|
||||||
|
materialPlanBoomMapper.updateById(updateObj);
|
||||||
|
if (updateObj.getSupplierId() == null || updateObj.getArriveTime() == null
|
||||||
|
) {
|
||||||
|
materialPlanBoomMapper.clearSuplier(updateObj);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if (updateReqVO.getBuyType() == 0){
|
||||||
|
List<MaterialPlanBoomDO> materialPlanBoomDOList = updateReqVO.getMaterialPlanBoomDOList();
|
||||||
|
List<Long> ids = new ArrayList<>();
|
||||||
|
Map map = new HashMap();
|
||||||
|
List<PurchaseOrderMakeDetailDO> makeDetailDOList = new ArrayList<>();
|
||||||
|
|
||||||
|
HashMap<Long, ProjectOrderSubDO> hashMap = new HashMap<>();
|
||||||
|
HashMap<Long, PlanSubDO> planSubMap = new HashMap<>();
|
||||||
|
for (MaterialPlanBoomDO dp : materialPlanBoomDOList) {
|
||||||
|
PurchaseOrderMakeDetailDO makeDetailDO = new PurchaseOrderMakeDetailDO();
|
||||||
|
makeDetailDO.setBoomDetailId(dp.getBoomDetailId());
|
||||||
|
makeDetailDO.setBoomName(dp.getMatName());
|
||||||
|
makeDetailDO.setBoomSpec(dp.getMatSpec());
|
||||||
|
makeDetailDO.setBoomUnit(dp.getMatUnit());
|
||||||
|
makeDetailDO.setComposition(dp.getCompositionName());
|
||||||
|
makeDetailDO.setPurchaseAmount(dp.getPurchaseAmount());
|
||||||
|
makeDetailDO.setEstimatedPrice(dp.getEstimatedPrice());
|
||||||
|
makeDetailDO.setArriveTime(dp.getArriveTime());
|
||||||
|
makeDetailDO.setBoomAmount(dp.getBoomAmount());
|
||||||
|
makeDetailDO.setRequireTime(dp.getBoomArriveDate());
|
||||||
|
makeDetailDO.setSupplierId(dp.getSupplierId());
|
||||||
|
makeDetailDO.setProjectMaterialPlanId(dp.getProjectMaterialPlanId());
|
||||||
|
makeDetailDO.setProjectMaterialPlanBoomId(dp.getId());
|
||||||
|
makeDetailDO.setName(dp.getProjectName());
|
||||||
|
|
||||||
|
ProjectOrderSubDO subDO = new ProjectOrderSubDO();
|
||||||
|
if (hashMap.get(dp.getProjectPlanSubId()) != null) {
|
||||||
|
subDO = hashMap.get(dp.getProjectPlanSubId());
|
||||||
|
}else{
|
||||||
|
ProjectOrderSubDO projectOrderSubDO = projectOrderSubMapper.selectById(dp.getProjectPlanSubId());
|
||||||
|
hashMap.put(dp.getProjectPlanSubId(), projectOrderSubDO);
|
||||||
|
subDO = hashMap.get(dp.getProjectPlanSubId());
|
||||||
|
}
|
||||||
|
if (subDO != null){
|
||||||
|
PlanSubDO planSubDO = new PlanSubDO();
|
||||||
|
if (planSubMap.get(dp.getProjectPlanSubId()) != null) {
|
||||||
|
planSubDO = planSubMap.get(dp.getProjectPlanSubId());
|
||||||
|
}else{
|
||||||
|
List<PlanSubDO> planSubDOS = planSubMapper.selectList(new LambdaQueryWrapperX<PlanSubDO>().eq(PlanSubDO::getProjectSubId, subDO.getId()));
|
||||||
|
if (CollUtil.isEmpty(planSubDOS)){
|
||||||
|
planSubMap.put(dp.getProjectPlanSubId(), planSubDOS.get(0));
|
||||||
|
planSubDO = planSubDOS.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (planSubDO != null){
|
||||||
|
makeDetailDO.setProjectSubCode(planSubDO.getProjectSubCode());
|
||||||
|
}
|
||||||
|
makeDetailDO.setName(subDO.getProjectSubName());
|
||||||
|
makeDetailDO.setProjectPlanSubId(subDO.getId());
|
||||||
|
makeDetailDO.setNameSim(subDO.getNameSim());
|
||||||
|
makeDetailDO.setProjectSubCode(subDO.getProjectSubCode());
|
||||||
|
}
|
||||||
|
makeDetailDO.setOrderStatus(1);
|
||||||
|
makeDetailDOList.add(makeDetailDO);
|
||||||
|
ids.add(dp.getId());
|
||||||
|
}
|
||||||
|
map.put("ids", ids);
|
||||||
|
Long l1 = materialPlanBoomMapper.hasPurchase(map);
|
||||||
|
if (l1 != null && l1 > 0L) {
|
||||||
|
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_EXISTS);
|
||||||
|
}
|
||||||
|
Long l = materialPlanBoomMapper.hasPurYard(map);
|
||||||
|
if (l != null && l> 0L){
|
||||||
|
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE);
|
||||||
|
}
|
||||||
|
//插入make表
|
||||||
|
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);
|
||||||
|
|
||||||
|
// 入库前缀
|
||||||
|
purchaseOrderMakeDO.setPurchaseNo(PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()));
|
||||||
|
purchaseOrderMakeDO.setGoodsType(1);
|
||||||
|
purchaseOrderMakeDO.setStatus(1);
|
||||||
|
purchaseOrderMakeDO.setSubmitUserId(loginUserId);
|
||||||
|
purchaseOrderMakeDO.setSubmitTime(LocalDateTime.now());
|
||||||
|
purchaseOrderMakeDO.setProjectId(materialPlanBoomDOList.get(0).getProjectId());
|
||||||
|
|
||||||
|
|
||||||
|
MaterialPlanDO materialPlanDO = materialPlanMapper.selectOne(new LambdaQueryWrapperX<MaterialPlanDO>().eq(MaterialPlanDO::getId, materialPlanBoomDOList.get(0).getProjectMaterialPlanId()));
|
||||||
|
if (materialPlanDO != null){
|
||||||
|
purchaseOrderMakeDO.setProjectPlanId(materialPlanDO.getProjectPlanId());
|
||||||
|
purchaseOrderMakeDO.setCustomerId(materialPlanDO.getCustomerId());
|
||||||
|
purchaseOrderMakeDO.setBrief(materialPlanDO.getBrief());
|
||||||
|
purchaseOrderMakeDO.setProjectName(materialPlanDO.getProjectName());
|
||||||
|
purchaseOrderMakeDO.setProjectNameSim(materialPlanDO.getProjectNameSim());
|
||||||
|
purchaseOrderMakeMapper.insert(purchaseOrderMakeDO);
|
||||||
|
//******* 插入明细****//
|
||||||
|
|
||||||
|
for (PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO : makeDetailDOList) {
|
||||||
|
purchaseOrderMakeDetailDO.setPurchaseOrderId(purchaseOrderMakeDO.getId());
|
||||||
|
}
|
||||||
|
purchaseOrderMakeDetailMapper.insertBatch(makeDetailDOList);
|
||||||
|
for (MaterialPlanBoomDO dp : materialPlanBoomDOList) {
|
||||||
|
for (PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO : makeDetailDOList){
|
||||||
|
if (dp.getId().equals(purchaseOrderMakeDetailDO.getProjectMaterialPlanBoomId())) {
|
||||||
|
dp.setMplanStatus(1);
|
||||||
|
dp.setProjectPurchaseOrderMakeId(purchaseOrderMakeDO.getId());
|
||||||
|
dp.setProjectPurchaseOrderMakeDetailId(purchaseOrderMakeDetailDO.getId());
|
||||||
|
dp.setPurchaseNo(purchaseOrderMakeDO.getPurchaseNo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
materialPlanBoomMapper.updateBatch(materialPlanBoomDOList);
|
||||||
|
serialNumberService.updateSerialNumber(serialNumberDO);
|
||||||
|
}else {
|
||||||
|
throw exception(MATERIAL_PLAN_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
List<MaterialPlanBoomDO> materialPlanBoomDOList = updateReqVO.getMaterialPlanBoomDOList();
|
||||||
|
List<Long> ids = new ArrayList<>();
|
||||||
|
|
||||||
|
Map map = new HashMap();
|
||||||
|
HashMap<Long, ProjectOrderSubDO> hashMap = new HashMap<>();
|
||||||
|
for (MaterialPlanBoomDO dp : materialPlanBoomDOList) {
|
||||||
|
dp.setIsPurYard(1);
|
||||||
|
ids.add(dp.getId());
|
||||||
|
}
|
||||||
|
map.put("ids", ids);
|
||||||
|
Long l1 = materialPlanBoomMapper.hasPurchase(map);
|
||||||
|
if (l1 != null && l1 > 0L) {
|
||||||
|
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_EXISTS);
|
||||||
|
}
|
||||||
|
Long l = materialPlanBoomMapper.hasPurYard(map);
|
||||||
|
if (l != null && l> 0L){
|
||||||
|
throw exception(PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE);
|
||||||
|
}
|
||||||
|
materialPlanBoomMapper.updateBatch(materialPlanBoomDOList);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// purchaseOrderMakeDO.setCustomerId(materialPlanBoomDOList.get(0).getCustomerBriefName())
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -164,4 +344,17 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
|
|||||||
return materialPlanBoomMapper.getProjectMaterialPlanId(pageReqVO);
|
return materialPlanBoomMapper.getProjectMaterialPlanId(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<MaterialPlanBoomDO> getStandardBuyPage(MaterialPlanBoomPageReqVO pageReqVO) {
|
||||||
|
PageResult<MaterialPlanBoomDO> standardBuyPage = materialPlanBoomMapper.getStandardBuyPage(pageReqVO);
|
||||||
|
// if (standardBuyPage.getTotal() > 0){
|
||||||
|
// for (MaterialPlanBoomDO materialPlanBoomDO : standardBuyPage.getList()) {
|
||||||
|
// if (materialPlanBoomDO.getPurchaseAmount() == null){
|
||||||
|
// materialPlanBoomDO.setPurchaseAmount(materialPlanBoomDO.getBoomAmount());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
return standardBuyPage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,6 @@ public interface ProcessBomService {
|
|||||||
void updateProcessBomDetail(ProcessBomDetailDO processBomDetailDO);
|
void updateProcessBomDetail(ProcessBomDetailDO processBomDetailDO);
|
||||||
|
|
||||||
PageResult<ProcessBomDetailDO> getStandardPage(ProcessBomPageReqVO pageReqVO);
|
PageResult<ProcessBomDetailDO> getStandardPage(ProcessBomPageReqVO pageReqVO);
|
||||||
|
|
||||||
Boolean submit(List<ProcessBomDetailDO> list);
|
Boolean submit(List<ProcessBomDetailDO> list);
|
||||||
|
|
||||||
CommonResult<Boolean> withdraw(String code);
|
CommonResult<Boolean> withdraw(String code);
|
||||||
|
@ -243,10 +243,10 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
if (o.getType().equals("是")){
|
if (o.getType().equals("是")){
|
||||||
standard = true;
|
standard = true;
|
||||||
type = "1";
|
type = "1";
|
||||||
materialDO = materialService.getMaterialId(o.getMaterialCode());
|
// materialDO = materialService.getMaterialId(o.getMaterialCode());
|
||||||
if (materialDO == null) {
|
// if (materialDO == null) {
|
||||||
throw new RuntimeException("物料编码为:"+o.getMaterialCode() + "物料不存在");
|
// throw new RuntimeException("物料编码为:"+o.getMaterialCode() + "物料不存在");
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (o.getType().equals("否")){
|
else if (o.getType().equals("否")){
|
||||||
@ -292,10 +292,14 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
processBomDetailDO.setBomId(processBomDO.getId());//BomId
|
processBomDetailDO.setBomId(processBomDO.getId());//BomId
|
||||||
//BOM最新需求在这个地方更改
|
//BOM最新需求在这个地方更改
|
||||||
processBomDetailDO.setType(type);//是否标准件
|
processBomDetailDO.setType(type);//是否标准件
|
||||||
|
if (o.getMaterialName() == null || o.getMaterialName().trim().equals("")){
|
||||||
|
throw new RuntimeException("物料名称不能为空!");
|
||||||
|
}
|
||||||
|
processBomDetailDO.setMaterialName(o.getMaterialName());
|
||||||
if (type.equals("1")) {
|
if (type.equals("1")) {
|
||||||
processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
|
// processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
|
||||||
processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
|
// processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
|
||||||
processBomDetailDO.setMaterialName(materialDO.getName());//物料名称
|
// processBomDetailDO.setMaterialName(materialDO.getName());//物料名称
|
||||||
}else{
|
}else{
|
||||||
processBomDetailDO.setMaterialName(o.getMaterialName());
|
processBomDetailDO.setMaterialName(o.getMaterialName());
|
||||||
}
|
}
|
||||||
@ -743,7 +747,15 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public PageResult<ProcessBomDetailDO> getProcessBomPageNew(ProcessBomPageReqVO pageReqVO) {
|
public PageResult<ProcessBomDetailDO> getProcessBomPageNew(ProcessBomPageReqVO pageReqVO) {
|
||||||
return processBomDetailMapper.selectPageNew(pageReqVO);
|
PageResult<ProcessBomDetailDO> processBomDetailDOPageResult = processBomDetailMapper.selectPageNew(pageReqVO);
|
||||||
|
if (processBomDetailDOPageResult.getTotal() > 0){
|
||||||
|
for (ProcessBomDetailDO processBomDetailDO : processBomDetailDOPageResult.getList()) {
|
||||||
|
if (processBomDetailDO.getMaterialCode() != null && !processBomDetailDO.getMaterialCode().equals("")){
|
||||||
|
processBomDetailDO.setInventCode(processBomDetailDO.getMaterialCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return processBomDetailDOPageResult;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public PageResult<ProcessBomDO> getProcessBomPages(ProcessBomPageReqVO pageReqVO) {
|
public PageResult<ProcessBomDO> getProcessBomPages(ProcessBomPageReqVO pageReqVO) {
|
||||||
|
@ -1,10 +1,24 @@
|
|||||||
package com.chanko.yunxi.mes.module.heli.service.purchaseordermakedetail;
|
package com.chanko.yunxi.mes.module.heli.service.purchaseordermakedetail;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
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.purchaseordermake.PurchaseOrderMakeMapper;
|
||||||
|
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.checkerframework.checker.units.qual.A;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.*;
|
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.*;
|
||||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
|
||||||
@ -15,6 +29,7 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
|||||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
|
||||||
|
|
||||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER;
|
||||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,6 +43,16 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
|
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
|
||||||
|
@Resource
|
||||||
|
private SerialNumberService serialNumberService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PurchaseOrderNoMapper purchaseOrderNoMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
|
||||||
|
@Resource
|
||||||
|
private PurchaseOrderMakeMapper purchaseOrderMakeMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createPurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO createReqVO) {
|
public Long createPurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO createReqVO) {
|
||||||
@ -40,11 +65,88 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updatePurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO updateReqVO) {
|
public void updatePurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
if (CollUtil.isNotEmpty(updateReqVO.getUpdateList())){
|
||||||
validatePurchaseOrderMakeDetailExists(updateReqVO.getId());
|
List<PurchaseOrderMakeDetailDO> updateList = updateReqVO.getUpdateList();
|
||||||
// 更新
|
//插入make表
|
||||||
PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class);
|
PurchaseOrderNoDO purchaseOrderNoDO = new PurchaseOrderNoDO();
|
||||||
purchaseOrderMakeDetailMapper.updateById(updateObj);
|
SerialNumberDO serialNumberDO = new SerialNumberDO();
|
||||||
|
// 月度流水号
|
||||||
|
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
|
||||||
|
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
|
||||||
|
|
||||||
|
// 入库前缀
|
||||||
|
purchaseOrderNoDO.setPurchaseNo(PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()));
|
||||||
|
serialNumberService.updateSerialNumber(serialNumberDO);
|
||||||
|
purchaseOrderNoDO.setGoodsType(1);
|
||||||
|
purchaseOrderNoDO.setPurchaseType(1);
|
||||||
|
purchaseOrderNoDO.setSupplierId(updateList.get(0).getSupplierId());
|
||||||
|
purchaseOrderNoDO.setOrdDate(new Date());
|
||||||
|
purchaseOrderNoMapper.insert(purchaseOrderNoDO);
|
||||||
|
List<PurchaseOrderNoDetailDO> insertList =new ArrayList<>();
|
||||||
|
HashMap<Long,PurchaseOrderMakeDO> insertMap = 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.setMaterialId(pmd.getBoomDetailId());
|
||||||
|
pd.setBoomSpec(pmd.getBoomSpec());
|
||||||
|
pd.setBoomUnit(pmd.getBoomUnit());
|
||||||
|
pd.setComposition(pmd.getComposition());
|
||||||
|
pd.setPurchaseAmount(pmd.getPurchaseAmount());
|
||||||
|
pd.setEstimatedPrice(pmd.getEstimatedPrice());
|
||||||
|
pd.setArriveTime(pmd.getArriveTime());
|
||||||
|
pd.setBoomAmount(pmd.getBoomAmount());
|
||||||
|
pd.setRequireTime(pmd.getRequireTime());
|
||||||
|
pd.setProjectMaterialPlanId(pmd.getProjectMaterialPlanId());
|
||||||
|
pd.setProjectMaterialPlanBoomId(pmd.getProjectMaterialPlanBoomId());
|
||||||
|
pd.setProjectPlanSubId(pmd.getProjectPlanSubId());
|
||||||
|
pd.setName(pmd.getName());
|
||||||
|
pd.setNameSim(pmd.getNameSim());
|
||||||
|
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
|
||||||
|
if (insertMap.get(pmd.getPurchaseOrderId()) != null) {
|
||||||
|
purchaseOrderMakeDO = insertMap.get(pmd.getPurchaseOrderId());
|
||||||
|
}else{
|
||||||
|
purchaseOrderMakeDO = purchaseOrderMakeMapper.selectById(pmd.getPurchaseOrderId());
|
||||||
|
insertMap.put(pmd.getPurchaseOrderId(),purchaseOrderMakeDO);
|
||||||
|
}
|
||||||
|
if (purchaseOrderMakeDO != null) {
|
||||||
|
pd.setProjectId(purchaseOrderMakeDO.getProjectId());
|
||||||
|
pd.setProjectPlanId(purchaseOrderMakeDO.getProjectPlanId());
|
||||||
|
pd.setCustomerId(purchaseOrderMakeDO.getCustomerId());
|
||||||
|
pd.setBrief(purchaseOrderMakeDO.getBrief());
|
||||||
|
pd.setProjectName(purchaseOrderMakeDO.getProjectName());
|
||||||
|
pd.setProjectNameSim(purchaseOrderMakeDO.getProjectNameSim());
|
||||||
|
}
|
||||||
|
pd.setPurchaseRemAmount(pmd.getPurchaseAmount());
|
||||||
|
pd.setProjectSubCode(pmd.getProjectSubCode());
|
||||||
|
insertList.add(pd);
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(insertList)) {
|
||||||
|
purchaseOrderNoDetailMapper.insertBatch(insertList);
|
||||||
|
for (PurchaseOrderMakeDetailDO pmd : updateList) {
|
||||||
|
for (PurchaseOrderNoDetailDO pd : insertList) {
|
||||||
|
if (pmd.getId().equals(pd.getMakeDetailId())){
|
||||||
|
pmd.setPurchaseOrderNoId(purchaseOrderNoDO.getId());
|
||||||
|
pmd.setPurchaseOrderNoDetailId(pd.getId());
|
||||||
|
pmd.setOrderStatus(2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
purchaseOrderMakeDetailMapper.updateBatch(updateList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}else {
|
||||||
|
// 校验存在
|
||||||
|
validatePurchaseOrderMakeDetailExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class);
|
||||||
|
purchaseOrderMakeDetailMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,4 +29,25 @@
|
|||||||
group by project_material_plan_no
|
group by project_material_plan_no
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="hasPurchase"
|
||||||
|
parameterType="java.util.Map"
|
||||||
|
resultType="Long">
|
||||||
|
select count(*) from project_material_plan_boom where project_purchase_order_make_id is not null and deleted = 0 and tenant_id = 2 and
|
||||||
|
id in
|
||||||
|
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
<select id="hasPurYard"
|
||||||
|
parameterType="java.util.Map"
|
||||||
|
resultType="Long">
|
||||||
|
select count(*) from project_material_plan_boom where is_pur_yard = 1 and deleted = 0 and tenant_id = 2 and
|
||||||
|
id in
|
||||||
|
<foreach item="id" collection="ids" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
@ -86,7 +86,7 @@
|
|||||||
"source.fixAll.eslint": "explicit"
|
"source.fixAll.eslint": "explicit"
|
||||||
},
|
},
|
||||||
"[vue]": {
|
"[vue]": {
|
||||||
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
|
"editor.defaultFormatter": "stylelint.vscode-stylelint"
|
||||||
},
|
},
|
||||||
"i18n-ally.localesPaths": ["src/locales"],
|
"i18n-ally.localesPaths": ["src/locales"],
|
||||||
"i18n-ally.keystyle": "nested",
|
"i18n-ally.keystyle": "nested",
|
||||||
|
@ -8,6 +8,11 @@ export interface MaterialPlanBoomVO {
|
|||||||
boomAmount: number
|
boomAmount: number
|
||||||
boomArriveDate: Date
|
boomArriveDate: Date
|
||||||
description: string
|
description: string
|
||||||
|
purchaseAmount:number
|
||||||
|
estimatedPrice:number
|
||||||
|
arriveTime:Date
|
||||||
|
supplierId:number
|
||||||
|
materialPlanBoomDOList:Array<MaterialPlanBoomVO>
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询物料需求计划加工件明细详情
|
// 查询物料需求计划加工件明细详情
|
||||||
@ -54,3 +59,9 @@ export const getMaterialPlanBoomPages = async (params) => {
|
|||||||
export const getProjectMaterialPlanId = async (params) => {
|
export const getProjectMaterialPlanId = async (params) => {
|
||||||
return await request.get({ url: `/heli/material-plan-boom/getProjectMaterialPlanId`, params })
|
return await request.get({ url: `/heli/material-plan-boom/getProjectMaterialPlanId`, params })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查询物料需求计划加工件明细分页
|
||||||
|
export const getStandardBuyPage = async (params) => {
|
||||||
|
return await request.get({ url: `/heli/material-plan-boom/getStandardBuyPage`, params })
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,9 @@ export interface ProcessBomVO {
|
|||||||
export const getProcessBomPage = async (params) => {
|
export const getProcessBomPage = async (params) => {
|
||||||
return await request.get({ url: `/heli/process-bom/page`, params })
|
return await request.get({ url: `/heli/process-bom/page`, params })
|
||||||
}
|
}
|
||||||
|
export const detailpages = async (params) => {
|
||||||
|
return await request.get({ url: `/heli/process-bom/detailpages`, params })
|
||||||
|
}
|
||||||
// 查询工艺bom审核分页
|
// 查询工艺bom审核分页
|
||||||
export const getProcessBomPages = async (params) => {
|
export const getProcessBomPages = async (params) => {
|
||||||
return await request.get({ url: `/heli/process-bom/pages`, params })
|
return await request.get({ url: `/heli/process-bom/pages`, params })
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface PuchaseOrderMakeDetail {
|
||||||
|
id: number
|
||||||
|
projectMaterialPlanId: number
|
||||||
|
boomDetailId: number
|
||||||
|
projectSubId: number
|
||||||
|
boomAmount: number
|
||||||
|
boomArriveDate: Date
|
||||||
|
description: string
|
||||||
|
purchaseAmount:number
|
||||||
|
estimatedPrice:number
|
||||||
|
arriveTime:Date
|
||||||
|
supplierId:number
|
||||||
|
materialPlanBoomDOList:Array<PuchaseOrderMakeDetail>
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询物料需求计划加工件明细分页
|
||||||
|
export const page = async (params) => {
|
||||||
|
return await request.get({ url: `/heli/purchase-order-make-detail/page`, params })
|
||||||
|
}
|
||||||
|
export const updatePurchaseOrderDetail= async (data: PuchaseOrderMakeDetail) => {
|
||||||
|
return await request.put({ url: `/heli/purchase-order-make-detail/update`, data })
|
||||||
|
}
|
@ -242,6 +242,8 @@ export enum DICT_TYPE {
|
|||||||
HELI_DELIVER_MATERIAL_TYPE = 'heli_deliver_material_type', // 发货物料类型
|
HELI_DELIVER_MATERIAL_TYPE = 'heli_deliver_material_type', // 发货物料类型
|
||||||
HELI_PROJECT_PLAN_STATUS = 'heli_project_plan_status',//生产计划状态
|
HELI_PROJECT_PLAN_STATUS = 'heli_project_plan_status',//生产计划状态
|
||||||
HELI_CRAFT = 'heli_craft',//工艺流程
|
HELI_CRAFT = 'heli_craft',//工艺流程
|
||||||
|
HELI_STANDARD_BUY_TYPE = 'heli_standard_buy_type',//工艺流程
|
||||||
|
HELI_PURCHASE_STATUS = 'heli_purchase_status',//工艺流程
|
||||||
HELI_PROJECT_MATERIAL_PLAN_STATUS = 'heli_project_material_plan_status',//物料需求计划状态
|
HELI_PROJECT_MATERIAL_PLAN_STATUS = 'heli_project_material_plan_status',//物料需求计划状态
|
||||||
HELI_BOM_STATUS = 'heli_bom_status', //bom状态
|
HELI_BOM_STATUS = 'heli_bom_status', //bom状态
|
||||||
HELI_BOM_MATERIAL_TYPE = 'heli_bom_material_type', //bom物料类型
|
HELI_BOM_MATERIAL_TYPE = 'heli_bom_material_type', //bom物料类型
|
||||||
|
@ -7,24 +7,29 @@
|
|||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="130px">
|
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="130px">
|
||||||
<el-form-item label="物料计划单号" prop="projectMaterialPlanNo">
|
<el-form-item label="物料计划单号" prop="projectMaterialPlanNo">
|
||||||
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="物料计划单号" clearable @keyup.enter="handleQuery"
|
<el-input
|
||||||
|
v-model="queryParams.projectMaterialPlanNo" placeholder="物料计划单号" clearable @keyup.enter="handleQuery"
|
||||||
class="!w-240px" />
|
class="!w-240px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="单据日期" prop="createTime">
|
<el-form-item label="单据日期" prop="createTime">
|
||||||
<el-date-picker class="!w-240px" v-model="queryParams.createTime" type="date" value-format="x"
|
<el-date-picker
|
||||||
|
class="!w-240px" v-model="queryParams.createTime" type="date" value-format="x"
|
||||||
placeholder="单据日期" />
|
placeholder="单据日期" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="生产计划单号" prop="planNo">
|
<el-form-item label="生产计划单号" prop="planNo">
|
||||||
<el-input v-model="queryParams.planNo" placeholder="生产计划单号" clearable @keyup.enter="handleQuery"
|
<el-input
|
||||||
|
v-model="queryParams.planNo" placeholder="生产计划单号" clearable @keyup.enter="handleQuery"
|
||||||
class="!w-240px" />
|
class="!w-240px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目名称" prop="projectName">
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
<el-input v-model="queryParams.projectName" placeholder="项目名称" clearable @keyup.enter="handleQuery"
|
<el-input
|
||||||
|
v-model="queryParams.projectName" placeholder="项目名称" clearable @keyup.enter="handleQuery"
|
||||||
class="!w-240px" />
|
class="!w-240px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="单据状态" prop="status">
|
<el-form-item label="单据状态" prop="status">
|
||||||
<el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-240px">
|
<el-select v-model="queryParams.status" placeholder="下拉选择" clearable class="!w-240px">
|
||||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" :key="dict.value"
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" :key="dict.value"
|
||||||
:label="dict.label" :value="dict.value" />
|
:label="dict.label" :value="dict.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -100,7 +105,8 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 分页 -->
|
<!-- 分页 -->
|
||||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
<Pagination
|
||||||
|
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||||
@pagination="getList" />
|
@pagination="getList" />
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
|
||||||
@ -116,7 +122,7 @@ import { dateFormatter, formatDate } from '@/utils/formatTime'
|
|||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import * as MaterialPlanApi from '@/api/heli/materialplan'
|
import * as MaterialPlanApi from '@/api/heli/materialplan'
|
||||||
import * as UserApi from '@/api/system/user'
|
import * as UserApi from '@/api/system/user'
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
defineOptions({ name: 'MaterialPlan' })
|
defineOptions({ name: 'MaterialPlan' })
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
@ -217,8 +223,13 @@ const handleExport = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const userInit = ref()
|
const userInit = ref()
|
||||||
|
const route = useRoute();
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
const flushParam = route.query.flush;
|
||||||
|
if(flushParam){
|
||||||
|
getList()
|
||||||
|
}
|
||||||
//用户列表数据
|
//用户列表数据
|
||||||
userInit.value = await UserApi.getSimpleUserList()
|
userInit.value = await UserApi.getSimpleUserList()
|
||||||
getList()
|
getList()
|
||||||
|
@ -0,0 +1,479 @@
|
|||||||
|
<template>
|
||||||
|
<el-card class="hl-card">
|
||||||
|
<template #header>
|
||||||
|
<span>标准件物料需求计划</span>
|
||||||
|
</template>
|
||||||
|
<ContentWrap class="borderxx">
|
||||||
|
<!-- 搜索工作栏 -->
|
||||||
|
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
|
||||||
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
|
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="子项目名称" prop="projectSubName">
|
||||||
|
<el-input v-model="queryParams.projectSubName" placeholder="请输入子项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="零件名称" prop="boomName">
|
||||||
|
<el-input v-model="queryParams.boomName" placeholder="请输入零件名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="项目编码" prop="projectCode">
|
||||||
|
<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-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>
|
||||||
|
|
||||||
|
|
||||||
|
<el-form-item style="margin-left:30px">
|
||||||
|
<el-button @click="handleQuery" type="primary">
|
||||||
|
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||||
|
</el-button>
|
||||||
|
<el-button @click="resetQuery">
|
||||||
|
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
@click="handleExportDetail"
|
||||||
|
:loading="exportLoading"
|
||||||
|
>
|
||||||
|
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<!-- 列表 -->
|
||||||
|
<el-card class="hl-card-info">
|
||||||
|
<template #header>
|
||||||
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">采购单明细</span>
|
||||||
|
<el-button style="margin-left: 20px" @click="opearteForm(0)" type="success" size="large">订单生成</el-button>
|
||||||
|
<el-button style="margin-left: 20px" @click="opearteForm(1)" type="warning" size="large">采购订单管理</el-button>
|
||||||
|
</template>
|
||||||
|
<el-row>
|
||||||
|
<el-col>
|
||||||
|
<el-card class="hl-incard">
|
||||||
|
<el-form ref="subFormRef" :model="list" v-loading="formLoading" label-width="0" >
|
||||||
|
<el-table
|
||||||
|
:row-key="getRowKeys" ref="multipleTable"
|
||||||
|
@selection-change="handleSelectionChange" v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table">
|
||||||
|
<el-table-column
|
||||||
|
type="selection"
|
||||||
|
width="55"
|
||||||
|
:reserve-selection="true"
|
||||||
|
/>
|
||||||
|
<el-table-column label="序号" align="center" type="index" width="60" />
|
||||||
|
<el-table-column label="子项目编码" align="center" prop="projectSubCode" min-width="150" />
|
||||||
|
<el-table-column label="物料编码" align="center" min-width="180" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-select
|
||||||
|
v-model="scope.row.boomCode"
|
||||||
|
placeholder="请输入物料编码或名称"
|
||||||
|
:remote-method="e => remoteMethod(e,scope.row)"
|
||||||
|
remote-show-suffix
|
||||||
|
remote
|
||||||
|
:disabled="scope.row.orderStatus == 2"
|
||||||
|
clearable
|
||||||
|
reserve-keyword
|
||||||
|
filterable
|
||||||
|
@change="e => changeSupp(e,scope.row)"
|
||||||
|
:loading="meterialLoading"
|
||||||
|
class="!w-150px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in scope.row.materialSelectList"
|
||||||
|
:key="item.materialCode"
|
||||||
|
:label="item.inventCode"
|
||||||
|
:value="item"
|
||||||
|
>
|
||||||
|
<span style="float: left">{{ item.materialName }}</span>
|
||||||
|
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.materialCode }}</span>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="标准件名称" align="center" prop="boomName" min-width="150" />
|
||||||
|
<el-table-column label="规格型号" align="center" prop="boomSpec" min-width="150" />
|
||||||
|
<el-table-column label="需求数量" align="center" prop="boomAmount" min-width="100" />
|
||||||
|
<el-table-column label="采购数量" align="center" prop="purchaseAmount" min-width="180" />
|
||||||
|
<el-table-column label="需求完成时间" align="center" prop="requireTime" :formatter="dateFormatter2" min-width="180" />
|
||||||
|
<el-table-column label="计划到货日期" align="center" prop="arriveTime" :formatter="dateFormatter2" min-width="180" />
|
||||||
|
<el-table-column label="供应商" align="center" prop="supplierName" min-width="180" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-select
|
||||||
|
v-model="scope.row.supplierId"
|
||||||
|
size="large"
|
||||||
|
disabled
|
||||||
|
style="width: 165 px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in supplierList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="价格" align="center" prop="estimatedPrice" min-width="120" />
|
||||||
|
<el-table-column label="状态" align="center" prop="orderStatus" min-width="80" >
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_STATUS" :value="scope.row.orderStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="180" />
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页 -->
|
||||||
|
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-card>
|
||||||
|
<div class="hl-footer text-center">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<matLog ref="matLogRef" @success="getMat" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
import download from '@/utils/download'
|
||||||
|
import * as purchaseOrderMakeDetailApi from '@/api/heli/purchaseordermakedetail'
|
||||||
|
import { useCommonStateWithOut } from '@/store/modules/common'
|
||||||
|
import * as bomApi from '@/api/heli/processbom'
|
||||||
|
import { useUserStore } from '@/store/modules/user'
|
||||||
|
import matLog from './storageLog.vue'
|
||||||
|
import * as supplierApi from '@/api/heli/supplier'
|
||||||
|
import UserSelect from "@/views/heli/materialplan/userSelectNew.vue";
|
||||||
|
import {inject, ref} from "vue";
|
||||||
|
import { update } from 'lodash-es'
|
||||||
|
import { Hash } from 'crypto'
|
||||||
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const username = userStore.getUser.nickname
|
||||||
|
defineOptions({ name: 'Standard' })
|
||||||
|
const reload: any = inject('reload')
|
||||||
|
const commonStore = useCommonStateWithOut()
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
const router = useRouter()
|
||||||
|
import {
|
||||||
|
dateFormatter,
|
||||||
|
formatDate, dateFormatter2
|
||||||
|
} from "@/utils/formatTime";
|
||||||
|
const meterialLoading = ref(false)
|
||||||
|
const matLogRef = ref()
|
||||||
|
const loading = ref(true) // 列表的加载中
|
||||||
|
const list = ref([]) // 列表的数据
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
code: undefined,
|
||||||
|
planCode: undefined,
|
||||||
|
projectCode: undefined,
|
||||||
|
customerName: undefined,
|
||||||
|
boomName:undefined,
|
||||||
|
projectName: undefined,
|
||||||
|
projectSubName: undefined,
|
||||||
|
version: undefined,
|
||||||
|
bomStatus: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
orderStatus: 1,
|
||||||
|
createTime: [],
|
||||||
|
ownerName:username,
|
||||||
|
materialName:undefined,
|
||||||
|
projectMaterialPlanNo:undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
const queryParams1 = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 999,
|
||||||
|
})
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const data = await purchaseOrderMakeDetailApi.page(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
for (const row of list.value ) {
|
||||||
|
// 如果boomCode不为空,则调用remoteMethod进行查询
|
||||||
|
if (row.boomCode) {
|
||||||
|
await remoteMethod(row.boomCode, row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const ids = ref([])
|
||||||
|
const multipleTable=ref()
|
||||||
|
const getRowKeys=(row)=>{
|
||||||
|
return row.id;
|
||||||
|
}
|
||||||
|
const materialSelectList = ref([])
|
||||||
|
const queryMaterialParams = {
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 40,
|
||||||
|
inventoryCodes: undefined,
|
||||||
|
inventoryName: undefined,
|
||||||
|
}
|
||||||
|
|
||||||
|
const remoteMethod = async (query, row) => {
|
||||||
|
meterialLoading.value = true;
|
||||||
|
try {
|
||||||
|
if (query) {
|
||||||
|
// 更新查询参数
|
||||||
|
queryMaterialParams.inventoryName = query;
|
||||||
|
// 调用API获取物料列表
|
||||||
|
const data = await bomApi.detailpages(queryMaterialParams);
|
||||||
|
// 更新当前行的物料选择列表
|
||||||
|
row.materialSelectList = data.list;
|
||||||
|
} else {
|
||||||
|
// 如果没有查询条件,则清空物料选择列表
|
||||||
|
row.materialSelectList = [];
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("查询物料失败:", error);
|
||||||
|
// 发生错误时清空物料选择列表
|
||||||
|
row.materialSelectList = [];
|
||||||
|
} finally {
|
||||||
|
meterialLoading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const getMateriallist = async(row) =>{
|
||||||
|
const data = await bomApi.detailpages(queryMaterialParams)
|
||||||
|
row.materialSelectList = data.list
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSelectionChange = (selection) => {
|
||||||
|
ids.value = selection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExportDetail = async () => {
|
||||||
|
try {
|
||||||
|
// 导出的二次确认
|
||||||
|
await message.exportConfirm()
|
||||||
|
// 发起导出
|
||||||
|
exportLoading.value = true
|
||||||
|
const data = await materialPlanBoomApi.exportMaterialPlanBoom(queryParams)
|
||||||
|
download.excel(data, '标准件物料需求计划.xlsx')
|
||||||
|
} catch {
|
||||||
|
} finally {
|
||||||
|
exportLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const getMat = async (rowids,amount,ids) => {
|
||||||
|
//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].materialId = ids
|
||||||
|
await updateRow(2,list.value[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const changeSupp = async(e,row) => {
|
||||||
|
if(e){
|
||||||
|
row.boomDetailId = e.id
|
||||||
|
row.boomName = e.materialName;
|
||||||
|
row.boomSpec = e.spec;
|
||||||
|
row.boomUnit = e.unit
|
||||||
|
await updateRows(row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const updateRows = async(row) =>{
|
||||||
|
await purchaseOrderMakeDetailApi.updatePurchaseOrderDetail(row);
|
||||||
|
}
|
||||||
|
const changeDate = async(e,row) => {
|
||||||
|
if(e){
|
||||||
|
await updateRow(5,row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const serachLog = (row) => {
|
||||||
|
matLogRef.value.open(row.id,row.matCode)
|
||||||
|
}
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
const opearteForm = async(type) =>{
|
||||||
|
if(type == 1){
|
||||||
|
router.push({ path: '/purchase/PurchaseOrder', query: { flush: 1 } })
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(ids.value != null && ids.value.length > 0){
|
||||||
|
if(type == 0){
|
||||||
|
//送审
|
||||||
|
var isError = false;
|
||||||
|
var sets = new Set();
|
||||||
|
for(var i = 0 ; i<ids.value.length ;i++){
|
||||||
|
var row = ids.value[i];
|
||||||
|
if(row.orderStatus == 2){
|
||||||
|
message.error('已生成采购订单!')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!row.boomDetailId){
|
||||||
|
message.error('零件编码不能为空!')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if( !sets.has(row.supplierId) || sets == null ){
|
||||||
|
sets.add(row.supplierId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(sets != null && sets.size > 1){
|
||||||
|
message.error('不同供应商,不能生成一个订单,请确认!');
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var form = {
|
||||||
|
id:1,
|
||||||
|
purchaseOrderId:1,
|
||||||
|
boomDetailId:1,
|
||||||
|
projectPlanSubId:1,
|
||||||
|
updateList:ids.value,
|
||||||
|
buyType:0
|
||||||
|
}
|
||||||
|
await purchaseOrderMakeDetailApi.updatePurchaseOrderDetail(form);
|
||||||
|
message.success("生成成功,请刷新")
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("至少选择一项后进行操作!")
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const updateRow = async(type,row) =>{
|
||||||
|
if(type == 1){
|
||||||
|
if(row.purchaseAmount != null){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if(type == 2){
|
||||||
|
if(row.matRest != null){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}else if(type == 3){
|
||||||
|
if(row.estimatedPrice != null){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}else if(type == 4){
|
||||||
|
if(row.supplierId){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}else if(type == 5){
|
||||||
|
if(row.arriveTime){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const supplierList = ref([])
|
||||||
|
const supplier = async() =>{
|
||||||
|
var data = await supplierApi.getSupplierPage(queryParams1);
|
||||||
|
supplierList.value =data.list
|
||||||
|
//console.log(supplierList/)
|
||||||
|
}
|
||||||
|
const handleSelectedUser = (currentIndex, newValue: any) => {
|
||||||
|
list.value[currentIndex].duEmpId = newValue?.id
|
||||||
|
}
|
||||||
|
const submitForm = async () => {
|
||||||
|
const filteredList = list.value.filter(item => item.duEmpId !== null && item.duEmpId !== undefined);
|
||||||
|
if (filteredList.length <= 0) {
|
||||||
|
message.error("提交明细不能为空,请确认");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const firstProjectSubId = filteredList[0].projectSubId;
|
||||||
|
for (let i = 1; i < filteredList.length; i++) {
|
||||||
|
if (filteredList[i].projectSubId !== firstProjectSubId) {
|
||||||
|
message.error("标准件明细不属于同一个子项目,请确认");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < filteredList.length; i++) {
|
||||||
|
if (filteredList[i].projectMaterialPlanNo!=null){
|
||||||
|
message.error("零件"+filteredList[i].materialName+"已生成物料需求计划,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (filteredList[i].boomArriveDate==null){
|
||||||
|
message.error("零件"+filteredList[i].materialName+"要求完成日期为空,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (filteredList[i].duEmpId==null){
|
||||||
|
message.error("零件"+filteredList[i].materialName+"责任人为空,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
formLoading.value = true
|
||||||
|
try {
|
||||||
|
await ProcessBomApi.submitForm(filteredList)
|
||||||
|
message.success("提交成功")
|
||||||
|
// 发送操作成功的事件
|
||||||
|
getList()
|
||||||
|
emit('success')
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const withdraw = async () => {
|
||||||
|
if (queryParams.projectMaterialPlanNo==null){
|
||||||
|
message.error("物料需求单号为空,不允许撤回")
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
await ProcessBomApi.withdraw(queryParams.projectMaterialPlanNo)
|
||||||
|
message.success("撤回成功")
|
||||||
|
// 发送操作成功的事件
|
||||||
|
getList()
|
||||||
|
emit('success')
|
||||||
|
|
||||||
|
}
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value.resetFields()
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = async () => {
|
||||||
|
try {
|
||||||
|
// 导出的二次确认
|
||||||
|
await message.exportConfirm()
|
||||||
|
// 发起导出
|
||||||
|
exportLoading.value = true
|
||||||
|
const data = await ProcessBomApi.exportProcessBom(queryParams)
|
||||||
|
download.excel(data, '工艺bom.xls')
|
||||||
|
} catch {
|
||||||
|
} finally {
|
||||||
|
exportLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 初始化 **/
|
||||||
|
onMounted( async() => {
|
||||||
|
await supplier()
|
||||||
|
await getList()
|
||||||
|
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
/* 占位样式 */
|
||||||
|
</style>
|
@ -0,0 +1,467 @@
|
|||||||
|
<template>
|
||||||
|
<el-card class="hl-card">
|
||||||
|
<template #header>
|
||||||
|
<span>标准件物料需求计划</span>
|
||||||
|
</template>
|
||||||
|
<ContentWrap class="borderxx">
|
||||||
|
<!-- 搜索工作栏 -->
|
||||||
|
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
|
||||||
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
|
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="子项目名称" prop="projectSubName">
|
||||||
|
<el-input v-model="queryParams.projectSubName" placeholder="请输入子项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="零件名称" prop="materialName">
|
||||||
|
<el-input v-model="queryParams.materialName" placeholder="请输入零件名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="项目编码" prop="projectCode">
|
||||||
|
<el-input v-model="queryParams.projectCode" placeholder="请输入项目编号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="责任人" prop="ownerName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.ownerName"
|
||||||
|
placeholder="请输入责任人"
|
||||||
|
clearable
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
class="!w-240px"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="采购状态" prop="mplanStatus">
|
||||||
|
<el-select 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>
|
||||||
|
<el-form-item label="物料需求单号" prop="projectMaterialPlanNo">
|
||||||
|
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="请输入物料需求单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
|
||||||
|
<el-form-item style="margin-left:30px">
|
||||||
|
<el-button @click="handleQuery" type="primary">
|
||||||
|
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||||
|
</el-button>
|
||||||
|
<el-button @click="resetQuery">
|
||||||
|
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
@click="handleExportDetail"
|
||||||
|
:loading="exportLoading"
|
||||||
|
>
|
||||||
|
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<!-- 列表 -->
|
||||||
|
<el-card class="hl-card-info">
|
||||||
|
<template #header>
|
||||||
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">标准件明细</span>
|
||||||
|
<el-button style="margin-left: 20px" @click="opearteForm(0)" type="success" size="large">送 审</el-button>
|
||||||
|
<el-button style="margin-left: 20px" @click="opearteForm(1)" type="warning" size="large">去库存</el-button>
|
||||||
|
</template>
|
||||||
|
<el-row>
|
||||||
|
<el-col>
|
||||||
|
<el-card class="hl-incard">
|
||||||
|
<el-form ref="subFormRef" :model="list" v-loading="formLoading" label-width="0" >
|
||||||
|
<el-table
|
||||||
|
:row-key="getRowKeys" ref="multipleTable"
|
||||||
|
@selection-change="handleSelectionChange" v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table">
|
||||||
|
<el-table-column
|
||||||
|
type="selection"
|
||||||
|
width="55"
|
||||||
|
:reserve-selection="true"
|
||||||
|
/>
|
||||||
|
<el-table-column fixed label="序号" align="center" type="index" width="60" />
|
||||||
|
<el-table-column label="客户简称" align="center" prop="customerBriefName" min-width="120" fixed/>
|
||||||
|
<el-table-column label="项目名称" align="center" prop="projectName" min-width="150" fixed/>
|
||||||
|
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="150" fixed/>
|
||||||
|
<el-table-column label="零件名称" align="center" prop="matName" min-width="150" />
|
||||||
|
<el-table-column label="材质" align="center" prop="compositionName" min-width="150" />
|
||||||
|
<el-table-column label="规格型号" align="center" prop="matSpec" min-width="150" />
|
||||||
|
<el-table-column label="图号" align="center" prop="blueprintNo" min-width="80" />
|
||||||
|
<el-table-column label="需求数量" align="center" prop="boomAmount" min-width="100" />
|
||||||
|
|
||||||
|
<el-table-column label="单位" align="center" prop="matUnit" min-width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="采购数量" align="center" prop="purchaseAmount" min-width="180" >
|
||||||
|
<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">
|
||||||
|
<el-input v-model="scope.row.matCode" disabled>
|
||||||
|
<template #suffix>
|
||||||
|
<Icon @click="serachLog(scope.row)" icon="ep:search" color="primary"/>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="库存量" align="center" prop="matRest" min-width="120" />
|
||||||
|
<el-table-column label="供应商" align="center" prop="supplierId" min-width="180" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-select
|
||||||
|
v-model="scope.row.supplierId"
|
||||||
|
size="large"
|
||||||
|
clearable
|
||||||
|
@change="e => changeSupp(e,scope.row)"
|
||||||
|
style="width: 165 px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in supplierList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="预估总价" align="center" prop="estimatedPrice" min-width="180" >
|
||||||
|
<template #default="scope">
|
||||||
|
<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">
|
||||||
|
<template #header><span class="hl-table_header">*</span>预计到货日期</template>
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-form-item :prop="`${$index}.arriveTime`" class="mb-0px!" >
|
||||||
|
<el-date-picker @change="e => changeDate(e,row)" class="!w-265px" v-model="row.arriveTime" type="date" value-format="x" placeholder="预计到货日期" />
|
||||||
|
</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>
|
||||||
|
<!-- 分页 -->
|
||||||
|
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-card>
|
||||||
|
<div class="hl-footer text-center">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<matLog ref="matLogRef" @success="getMat" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
import download from '@/utils/download'
|
||||||
|
import * as materialPlanBoomApi from '@/api/heli/materialPlanBoom'
|
||||||
|
import { useCommonStateWithOut } from '@/store/modules/common'
|
||||||
|
import { useUserStore } from '@/store/modules/user'
|
||||||
|
import matLog from './storageLog.vue'
|
||||||
|
import * as supplierApi from '@/api/heli/supplier'
|
||||||
|
import UserSelect from "@/views/heli/materialplan/userSelectNew.vue";
|
||||||
|
import {inject, ref} from "vue";
|
||||||
|
import { update } from 'lodash-es'
|
||||||
|
import { Hash } from 'crypto'
|
||||||
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const username = userStore.getUser.nickname
|
||||||
|
defineOptions({ name: 'Standard' })
|
||||||
|
const reload: any = inject('reload')
|
||||||
|
const commonStore = useCommonStateWithOut()
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
const router = useRouter()
|
||||||
|
const matLogRef = ref()
|
||||||
|
const loading = ref(true) // 列表的加载中
|
||||||
|
const list = ref([]) // 列表的数据
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
code: undefined,
|
||||||
|
planCode: undefined,
|
||||||
|
projectCode: undefined,
|
||||||
|
customerName: undefined,
|
||||||
|
projectName: undefined,
|
||||||
|
projectSubName: undefined,
|
||||||
|
version: undefined,
|
||||||
|
bomStatus: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
mplanStatus: 0,
|
||||||
|
createTime: [],
|
||||||
|
ownerName:username,
|
||||||
|
materialName:undefined,
|
||||||
|
projectMaterialPlanNo:undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
const queryParams1 = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 999,
|
||||||
|
})
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const data = await materialPlanBoomApi.getStandardBuyPage(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const ids = ref([])
|
||||||
|
const multipleTable=ref()
|
||||||
|
const getRowKeys=(row)=>{
|
||||||
|
return row.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSelectionChange = (selection) => {
|
||||||
|
ids.value = selection;
|
||||||
|
console.log(ids.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExportDetail = async () => {
|
||||||
|
try {
|
||||||
|
// 导出的二次确认
|
||||||
|
await message.exportConfirm()
|
||||||
|
// 发起导出
|
||||||
|
exportLoading.value = true
|
||||||
|
const data = await materialPlanBoomApi.exportMaterialPlanBoom(queryParams)
|
||||||
|
download.excel(data, '标准件物料需求计划.xlsx')
|
||||||
|
} catch {
|
||||||
|
} finally {
|
||||||
|
exportLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const getMat = async (rowids,amount,ids) => {
|
||||||
|
//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].materialId = ids
|
||||||
|
await updateRow(2,list.value[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const changeSupp = async(e,row) => {
|
||||||
|
if(e){
|
||||||
|
await updateRow(4,row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const changeDate = async(e,row) => {
|
||||||
|
if(e){
|
||||||
|
await updateRow(5,row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const serachLog = (row) => {
|
||||||
|
matLogRef.value.open(row.id,row.matCode)
|
||||||
|
}
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
const opearteForm = async(type) =>{
|
||||||
|
if(ids.value != null && ids.value.length > 0){
|
||||||
|
if(type == 0){
|
||||||
|
//送审
|
||||||
|
var isError = false;
|
||||||
|
var sets = new Set();
|
||||||
|
for(var i = 0 ; i<ids.value.length ;i++){
|
||||||
|
var row = ids.value[i];
|
||||||
|
if(!row.purchaseAmount ){
|
||||||
|
message.error('零件:'+row.matName+ '采购数量不能为空!')
|
||||||
|
return
|
||||||
|
} else if( row.purchaseAmount == 0){
|
||||||
|
message.error('零件:'+row.matName+ '采购数量不能为0!')
|
||||||
|
return
|
||||||
|
} else if(!row.supplierId){
|
||||||
|
message.error('零件:'+row.matName+ '供应商不能为空!')
|
||||||
|
return
|
||||||
|
} else if(!row.estimatedPrice){
|
||||||
|
message.error('零件:'+row.matName+ '预估总价不能为空')
|
||||||
|
return
|
||||||
|
} else if( row.estimatedPrice == 0){
|
||||||
|
message.error('零件:'+row.matName+ '预估总价不能为0!')
|
||||||
|
return
|
||||||
|
} else if(!row.arriveTime ){
|
||||||
|
message.error('零件:'+row.matName+ '预计到货日期不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if( !sets.has(row.projectId) || sets == null ){
|
||||||
|
sets.add(row.projectId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(sets != null && sets.size > 1){
|
||||||
|
message.error('不通项目不能同时生成采购单');
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var form = {
|
||||||
|
id:1,
|
||||||
|
projectMaterialPlanId:1,
|
||||||
|
boomDetailId:1,
|
||||||
|
projectPlanSubId:1,
|
||||||
|
materialPlanBoomDOList:ids.value,
|
||||||
|
buyType:0
|
||||||
|
}
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(form);
|
||||||
|
message.success("送审成功")
|
||||||
|
}else{
|
||||||
|
//去库存
|
||||||
|
for(var i = 0 ; i<ids.value.length ;i++){
|
||||||
|
var row = ids.value[i];
|
||||||
|
if(!row.materialId){
|
||||||
|
message.error('请先查询库存量后进行操作')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var form = {
|
||||||
|
id:1,
|
||||||
|
projectMaterialPlanId:1,
|
||||||
|
boomDetailId:1,
|
||||||
|
projectPlanSubId:1,
|
||||||
|
materialPlanBoomDOList:ids.value,
|
||||||
|
buyType:2
|
||||||
|
}
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(form);
|
||||||
|
message.success("去库存成功")
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
message.error("至少选择一项后进行操作!")
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const updateRow = async(type,row) =>{
|
||||||
|
if(type == 1){
|
||||||
|
if(row.purchaseAmount != null){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if(type == 2){
|
||||||
|
if(row.matRest != null){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}else if(type == 3){
|
||||||
|
if(row.estimatedPrice != null){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}else if(type == 4){
|
||||||
|
if(row.supplierId){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}else if(type == 5){
|
||||||
|
if(row.arriveTime){
|
||||||
|
await materialPlanBoomApi.updateMaterialPlanBoom(row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const supplierList = ref([])
|
||||||
|
const supplier = async() =>{
|
||||||
|
var data = await supplierApi.getSupplierPage(queryParams1);
|
||||||
|
supplierList.value =data.list
|
||||||
|
//console.log(supplierList/)
|
||||||
|
}
|
||||||
|
const handleSelectedUser = (currentIndex, newValue: any) => {
|
||||||
|
list.value[currentIndex].duEmpId = newValue?.id
|
||||||
|
}
|
||||||
|
const submitForm = async () => {
|
||||||
|
const filteredList = list.value.filter(item => item.duEmpId !== null && item.duEmpId !== undefined);
|
||||||
|
if (filteredList.length <= 0) {
|
||||||
|
message.error("提交明细不能为空,请确认");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const firstProjectSubId = filteredList[0].projectSubId;
|
||||||
|
for (let i = 1; i < filteredList.length; i++) {
|
||||||
|
if (filteredList[i].projectSubId !== firstProjectSubId) {
|
||||||
|
message.error("标准件明细不属于同一个子项目,请确认");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < filteredList.length; i++) {
|
||||||
|
if (filteredList[i].projectMaterialPlanNo!=null){
|
||||||
|
message.error("零件"+filteredList[i].materialName+"已生成物料需求计划,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (filteredList[i].boomArriveDate==null){
|
||||||
|
message.error("零件"+filteredList[i].materialName+"要求完成日期为空,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (filteredList[i].duEmpId==null){
|
||||||
|
message.error("零件"+filteredList[i].materialName+"责任人为空,请确认")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
formLoading.value = true
|
||||||
|
try {
|
||||||
|
await ProcessBomApi.submitForm(filteredList)
|
||||||
|
message.success("提交成功")
|
||||||
|
// 发送操作成功的事件
|
||||||
|
getList()
|
||||||
|
emit('success')
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const withdraw = async () => {
|
||||||
|
if (queryParams.projectMaterialPlanNo==null){
|
||||||
|
message.error("物料需求单号为空,不允许撤回")
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
await ProcessBomApi.withdraw(queryParams.projectMaterialPlanNo)
|
||||||
|
message.success("撤回成功")
|
||||||
|
// 发送操作成功的事件
|
||||||
|
getList()
|
||||||
|
emit('success')
|
||||||
|
|
||||||
|
}
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value.resetFields()
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = async () => {
|
||||||
|
try {
|
||||||
|
// 导出的二次确认
|
||||||
|
await message.exportConfirm()
|
||||||
|
// 发起导出
|
||||||
|
exportLoading.value = true
|
||||||
|
const data = await ProcessBomApi.exportProcessBom(queryParams)
|
||||||
|
download.excel(data, '工艺bom.xls')
|
||||||
|
} catch {
|
||||||
|
} finally {
|
||||||
|
exportLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 初始化 **/
|
||||||
|
onMounted( async() => {
|
||||||
|
await supplier()
|
||||||
|
await getList()
|
||||||
|
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
/* 占位样式 */
|
||||||
|
</style>
|
@ -0,0 +1,213 @@
|
|||||||
|
<template>
|
||||||
|
<Dialog v-model="dialogVisible" width="80%">
|
||||||
|
<el-card class="hl-card">
|
||||||
|
<template #header>
|
||||||
|
<span>实时库存</span>
|
||||||
|
</template>
|
||||||
|
<ContentWrap class="borderxx">
|
||||||
|
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
|
||||||
|
<el-form-item label="批次号" prop="lotNo" v-if="false">
|
||||||
|
<el-input v-model="queryParams.lotNo" placeholder="批次号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="仓库" prop="whId">
|
||||||
|
<el-select v-model="queryParams.whId" placeholder="下拉选择" clearable class="!w-240px" @change="handleWh">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in whList" :key="dict.id" :label="dict.wh_name"
|
||||||
|
:value="dict.id" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库区" prop="rgId">
|
||||||
|
<el-select v-model="queryParams.rgId" placeholder="下拉选择" clearable class="!w-240px" @change="handleRg">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in rgCurrentList" :key="dict.id" :label="dict.rg_name"
|
||||||
|
:value="dict.id" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库位" prop="pnId">
|
||||||
|
<el-select v-model="queryParams.pnId" placeholder="下拉选择" clearable class="!w-240px">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in pnCurrentList" :key="dict.id" :label="dict.pn_name"
|
||||||
|
:value="dict.id" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item >
|
||||||
|
<el-button @click="handleQuery" type="primary">
|
||||||
|
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||||
|
</el-button>
|
||||||
|
<el-button @click="resetQuery">
|
||||||
|
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<!-- 列表 -->
|
||||||
|
<ContentWrap>
|
||||||
|
<el-table ref="multipleTableRef" v-loading="loading" :data="list" :stripe="true" highlight-current-row @current-change="handleCurrentChange" :show-overflow-tooltip="true" class="hl-table">
|
||||||
|
<el-table-column
|
||||||
|
type="selection"
|
||||||
|
width="55"/>
|
||||||
|
<el-table-column type="index" width="100" fixed label="序号" align="center" />
|
||||||
|
<el-table-column label="物料编码" align="center" prop="matCode" fixed min-width="120" />
|
||||||
|
<el-table-column label="物料名称" align="center" prop="matName" fixed min-width="120"/>
|
||||||
|
<el-table-column label="物料类型" align="center" prop="matType" min-width="120"/>
|
||||||
|
<el-table-column label="物料简称" align="center" prop="shortName" min-width="120"/>
|
||||||
|
<el-table-column label="规格/型号" align="center" prop="matSpec" min-width="120"/>
|
||||||
|
<el-table-column label="品牌" align="center" prop="matBrand" min-width="120"/>
|
||||||
|
<el-table-column label="仓库" align="center" prop="whName" min-width="120"/>
|
||||||
|
<el-table-column label="库区" align="center" prop="rgName" min-width="120"/>
|
||||||
|
<el-table-column label="库位" align="center" prop="pnName" min-width="120"/>
|
||||||
|
<el-table-column label="批次号" align="center" prop="lotNo" min-width="120" v-if="false"/>
|
||||||
|
<el-table-column label="库存数量" align="center" prop="storageOkQty" min-width="120"/>
|
||||||
|
<el-table-column label="金额(元)" align="center" prop="sumKcMoney" min-width="120"/>
|
||||||
|
<el-table-column label="库存单位" align="center" prop="matUnit" min-width="120"/>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页 -->
|
||||||
|
<Pagination
|
||||||
|
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||||
|
@pagination="getList" />
|
||||||
|
</ContentWrap>
|
||||||
|
</el-card>
|
||||||
|
<template #footer>
|
||||||
|
<span class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="success">
|
||||||
|
确认
|
||||||
|
</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</Dialog>
|
||||||
|
<printDialog ref="printref" :minAmount="minAmount" :formData="formData" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import download from '@/utils/download'
|
||||||
|
import * as StorageLogApi from '@/api/heli/storagelog'
|
||||||
|
|
||||||
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
|
||||||
|
import * as WarehouseApi from '@/api/heli/warehouse'
|
||||||
|
import * as RgApi from '@/api/heli/rg'
|
||||||
|
import * as PnApi from '@/api/heli/pn'
|
||||||
|
defineOptions({ name: 'StorageLog' })
|
||||||
|
const printref = ref()
|
||||||
|
const whList = ref([])
|
||||||
|
const rgList = ref([])
|
||||||
|
const pnList = ref([])
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const rgCurrentList = ref([])
|
||||||
|
const pnCurrentList = ref([])
|
||||||
|
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
|
const loading = ref(true) // 列表的加载中
|
||||||
|
const list = ref([]) // 列表的数据
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
matCode: undefined,
|
||||||
|
matName: undefined,
|
||||||
|
matType: undefined,
|
||||||
|
lotNo: undefined,
|
||||||
|
whId: undefined,
|
||||||
|
rgId:undefined,
|
||||||
|
pnId: undefined,
|
||||||
|
headerNo: undefined,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
|
||||||
|
const currentRow = ref()
|
||||||
|
const multipleTableRef = ref()
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const data = await StorageLogApi.getStorageNowPage(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const clickItem = ref([])
|
||||||
|
const handleCurrentChange = (val) => {
|
||||||
|
multipleTableRef.value!.clearSelection()
|
||||||
|
|
||||||
|
clickItem.value = val;
|
||||||
|
|
||||||
|
multipleTableRef.value!.toggleRowSelection(val, undefined)
|
||||||
|
};
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
const printfClick = () =>{
|
||||||
|
if(clickItem.value == null || clickItem.value.length == 0){
|
||||||
|
message.error("至少选择一项后,打印!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
printref.value.open(clickItem.value.storageOkQty)
|
||||||
|
}
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value.resetFields()
|
||||||
|
handleQuery()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleWh = async (wid) => {
|
||||||
|
queryParams.rgId = undefined
|
||||||
|
queryParams.pnId = undefined
|
||||||
|
|
||||||
|
rgCurrentList.value =[]
|
||||||
|
pnCurrentList.value =[]
|
||||||
|
rgCurrentList.value = rgList.value.filter( (item) => { return item.wh_id == wid})
|
||||||
|
|
||||||
|
}
|
||||||
|
const rowid = ref()
|
||||||
|
const open = async (rowids,matCode) => {
|
||||||
|
clickItem.value = null;
|
||||||
|
//multipleTableRef.value!.clearSelection()
|
||||||
|
dialogVisible.value = true
|
||||||
|
queryParams.matCode = matCode;
|
||||||
|
rowid.value = rowids
|
||||||
|
await getList();
|
||||||
|
|
||||||
|
}
|
||||||
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||||
|
const emit = defineEmits(['success'])
|
||||||
|
// emit('success', multipleSelection.value)
|
||||||
|
const success = () =>{
|
||||||
|
dialogVisible.value = false;
|
||||||
|
emit('success',rowid.value,clickItem.value.storageOkQty,clickItem.value.id)
|
||||||
|
}
|
||||||
|
const handleRg = async (rgid) => {
|
||||||
|
pnCurrentList.value =[]
|
||||||
|
pnCurrentList.value = pnList.value.filter( (item) => { return item.rg_id == rgid})
|
||||||
|
}
|
||||||
|
//仓库列表
|
||||||
|
const init_page_wh = (async ()=>{
|
||||||
|
whList.value = await WarehouseApi.getSimpList()
|
||||||
|
})
|
||||||
|
//库区列表
|
||||||
|
const init_page_rg = (async ()=>{
|
||||||
|
rgList.value = await RgApi.getSimpList()
|
||||||
|
})
|
||||||
|
//库位列表
|
||||||
|
const init_page_pn = (async ()=>{
|
||||||
|
pnList.value = await PnApi.getSimpList()
|
||||||
|
})
|
||||||
|
|
||||||
|
/** 初始化 **/
|
||||||
|
onMounted(async () => {
|
||||||
|
await init_page_wh()
|
||||||
|
await init_page_rg()
|
||||||
|
await init_page_pn()
|
||||||
|
await getList()
|
||||||
|
})
|
||||||
|
</script>
|
@ -100,18 +100,18 @@
|
|||||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">BOM明细</span>
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">BOM明细</span>
|
||||||
</template>
|
</template>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col v-if="!detailDisabled">
|
<el-col>
|
||||||
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button>
|
<el-button v-if="!detailDisabled" class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
type="success"
|
type="success"
|
||||||
|
v-if="!detailDisabled"
|
||||||
size="large"
|
size="large"
|
||||||
@click="handleImport"
|
@click="handleImport"
|
||||||
v-hasPermi="['system:user:import']"
|
v-hasPermi="['system:user:import']"
|
||||||
>
|
>
|
||||||
<Icon icon="ep:upload" /> 导入BOM
|
<Icon icon="ep:upload" /> 导入BOM
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="warning" size="large" @click="printfClick">打印</el-button>
|
<el-button type="warning" size="large" @click="printfClick">打印</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-card class="hl-incard">
|
<el-card class="hl-incard">
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||||
*/
|
*/
|
||||||
// export const serviceDomain = 'https://nxhs.cjyx.cc'
|
// export const serviceDomain = 'https://nxhs.cjyx.cc'
|
||||||
// export const serviceDomain = 'https://star.hz-hl.com'
|
export const serviceDomain = 'https://star.hz-hl.com'
|
||||||
// export const serviceDomain = 'http://222.71.165.187:9010'
|
// export const serviceDomain = 'http://222.71.165.187:9010'
|
||||||
// export const serviceDomain = 'http://localhost:8080'
|
//export const serviceDomain = 'http://localhost:8080'
|
||||||
export const serviceDomain = 'https://nxhs.cjyx.cc'
|
// export const serviceDomain = 'https://nxhs.cjyx.cc'
|
||||||
|
Loading…
Reference in New Issue
Block a user