近期修改

This commit is contained in:
z 2025-08-12 17:55:12 +08:00
parent d0e96b3722
commit 947a1c1048
26 changed files with 491 additions and 134 deletions

View File

@ -9,6 +9,7 @@ import lombok.Getter;
*/
@Getter
public enum ProcessBomStatusEnum {
Unedited(0, "未编辑"),
SAVE(1, "已保存"),
SUBMIT(2, "已提交"),

View File

@ -134,7 +134,7 @@ public class MaterialPlanController {
@Operation(summary = "提交")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
public CommonResult<Boolean> submit(@Valid @RequestBody List<TaskDispatchDetailDO> list) {
return success(materialPlanService.submit(list));
return materialPlanService.submit(list);
}
@GetMapping("/withdraw")
@Operation(summary = "撤回")

View File

@ -1,8 +1,17 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.plantask;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -17,11 +26,14 @@ import javax.servlet.http.*;
import java.time.LocalDateTime;
import java.util.*;
import java.io.IOException;
import java.util.stream.Collectors;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
@ -47,7 +59,10 @@ public class PlanTaskController {
@Resource
private HttpServletRequest request;
@Resource
private ProcessBomDetailMapper processBomDetailMapper;
@Resource
private ProcessBomMapper processBomMapper;
@PostMapping("/create")
@Operation(summary = "创建生产计划任务")
@PreAuthorize("@ss.hasPermission('heli:plan-task:create')")
@ -59,6 +74,25 @@ public class PlanTaskController {
@Operation(summary = "更新生产计划任务")
@PreAuthorize("@ss.hasPermission('heli:plan-task:update')")
public CommonResult<Boolean> updatePlanTask(@Valid @RequestBody PlanTaskSaveReqVO updateReqVO) {
if (!"CANCEL_SUBMIT".equals(updateReqVO.getActive())){
Integer planTaskBomStatus = planTaskService.getPlanTaskBomStatus(updateReqVO.getId());
if (planTaskBomStatus ==1) return CommonResult.error(400,"BOM版本号已变更请先刷新BOM");
if (ObjectUtil.isNotEmpty(updateReqVO.getBomDetails())){
List<Long> collect = updateReqVO.getBomDetails().stream().filter(o -> o.getId() != null).map(PlanTaskBomDO::getBomDetailId).distinct().collect(Collectors.toList());
if (ObjectUtil.isNotEmpty( collect)){
LambdaQueryWrapper<ProcessBomDetailDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(ProcessBomDetailDO::getId,collect);
List<ProcessBomDetailDO> list = processBomDetailMapper.selectList(lambdaQueryWrapper);
if (ObjectUtil.isNotEmpty(list)){
List<Long> collect1 = list.stream().map(ProcessBomDetailDO::getBomId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<ProcessBomDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ProcessBomDO::getId,collect1);
queryWrapper.ne(ProcessBomDO::getBomStatus,7);
if (processBomMapper.selectCount(queryWrapper) > 0) return CommonResult.error(400,"BOM不是审核状态不允许操作请确认");
}
}
}
}
LocalDateTime startTime = LocalDateTime.now();
planTaskService.updatePlanTask(updateReqVO);

View File

@ -246,8 +246,8 @@ public class ProcessBomController {
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:process-bom:delete')")
public CommonResult<Boolean> deleteProcessBomDetail(@RequestParam("id") Long id) {
processBomService.deleteProcessBomDetailNew(id);
return success(true);
return processBomService.deleteProcessBomDetailNew(id);
}
@GetMapping("/getStandardPage")
@Operation(summary = "获得标准件物料需求计划")
@ -260,7 +260,7 @@ public class ProcessBomController {
@Operation(summary = "提交")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
public CommonResult<Boolean> submit(@Valid @RequestBody List<ProcessBomDetailDO> list) {
return success(processBomService.submit(list));
return processBomService.submit(list);
}
@GetMapping("/withdraw")
@Operation(summary = "撤回")

View File

@ -125,6 +125,7 @@ public class ProcessDesignController {
public void exportProcessDesignExcels(@Valid ProcessDesignPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ProcessDesignDO> list = processDesignService.getExportExcel(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "设计进度一览.xlsx", "数据", ExportExcelPageReqVO.class,

View File

@ -45,7 +45,9 @@ import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
@ -120,6 +122,13 @@ public class ProjectOrderController {
}
}
}
Set<String> nameSimSet = new HashSet<>();
for (ProjectOrderSubDO projectOrderSub : operateReqVO.getProjectOrderSubs()) {
String nameSim = projectOrderSub.getNameSim();
if (!nameSimSet.add(nameSim)) {
return CommonResult.error(400,"该项目下子项目简码不能重复,请确认!");
}
}
projectOrderService.operateProjectOrder(operateReqVO);
// 手动记录日志
@ -277,5 +286,19 @@ public class ProjectOrderController {
PageResult<ProjectOrderSubDO> pageResult = projectOrderService.getProjectOrderSubPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProjectOrderSubRespVO.class));
}
@GetMapping("/exportCost")
@Operation(summary = "导出项目成本归集 Excel")
@PreAuthorize("@ss.hasPermission('heli:project-order:export')")
@OperateLog(type = EXPORT)
public void exportCost(@Valid ProjectOrderCostPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
CommonResult<PageResult<ProjectOrderCostRespVO>> projectOrderCostPage = getProjectOrderCostPage(pageReqVO);
List<ProjectOrderCostRespVO> list = projectOrderCostPage.getData().getList();
// 导出 Excel
ExcelUtils.write(response, "项目成本归集.xlsx", "数据", ProjectOrderCostRespVO.class,
BeanUtils.toBean(list, ProjectOrderCostRespVO.class));
}
}

View File

@ -18,62 +18,70 @@ import java.util.Set;
public class ProjectOrderCostRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "17481")
@ExcelProperty("自增字段,唯一")
// @ExcelProperty("自增字段,唯一")
private Long id;
@Schema(description = "项目编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("项目编号,唯一")
@ExcelProperty("项目编号")
private String code;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214")
@ExcelProperty("客户")
private String customerName;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("项目名称")
private String projectName;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214")
@ExcelProperty("客户全称")
private String customerName;
@Schema(description = "子项目ID")
@ExcelProperty("子项目ID")
// @ExcelProperty("子项目ID")
private Long projectSubId;
@Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("子项目名称")
private String projectSubName;
@ExcelProperty(value = "性质", converter = DictConvert.class)
@DictFormat("heli_project_property")
private Integer property;
@Schema(description = "设备型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("设备型号")
private String deviceModel;
@Schema(description = "标准件成本")
@ExcelProperty("标准件成本")
private BigDecimal biaoZhunJianCost;
@Schema(description = "原材料成本")
@ExcelProperty("原材料成本")
private BigDecimal yuanCaiLiaoCost;
@Schema(description = "副资材成本")
@ExcelProperty("副资材成本")
private BigDecimal fuZiCaiCost;
@ExcelProperty("材料成本")
private BigDecimal cailiaoCost;
@Schema(description = "外协加工费用")
@ExcelProperty("外协加工费")
@ExcelProperty("外协加工费")
private BigDecimal waixeiCost;
@Schema(description = "内部加工成本")
@ExcelProperty("内部加工成本")
@Schema(description = "内部工时费")
@ExcelProperty("内部工时费")
private BigDecimal neibuCost;
@Schema(description = "装配工时费")
@ExcelProperty("装配工时费")
private BigDecimal zpCost;
@Schema(description = "运费成本")
@ExcelProperty("运费成本")
@ExcelProperty("运费")
private BigDecimal yunFeiCost;
@Schema(description = "合计成本")
@ExcelProperty("合计成本")
private BigDecimal sumCost;
@ExcelProperty("其他成本")
private BigDecimal cailiaoCost;
@Schema(description = "设备型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("设备型号")
private String deviceModel;
@Schema(description = "原材料成本")
// @ExcelProperty("原材料成本")
private BigDecimal yuanCaiLiaoCost;
@Schema(description = "副资材成本")
// @ExcelProperty("副资材成本")
private BigDecimal fuZiCaiCost;
}

View File

@ -163,6 +163,8 @@ public class ProcessBomDO extends BaseDO {
boolean b = true;
if(this.bomStatus.intValue()==7){
b = (7==this.bomStatus.intValue());
}else if (this.bomStatus.intValue()==0){
b = (0==this.bomStatus.intValue());
}else{
b = ProcessBomStatusEnum.SAVE.getCode() == this.bomStatus.intValue();
}
@ -184,6 +186,7 @@ public class ProcessBomDO extends BaseDO {
public boolean canOperate(OperateTypeEnum operateTypeEnum) {
switch (operateTypeEnum){
case SAVE:
return canSave();
case SUBMIT:

View File

@ -48,7 +48,7 @@ public interface PlanTaskBomMapper extends BaseMapperX<PlanTaskBomDO> {
.leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, PlanTaskBomDO::getOwner)
.disableSubLogicDel()
.disableLogicDel()
.in(PlanTaskBomDO::getDeleted,Arrays.asList(0,1))
.in(PlanTaskBomDO::getDeleted,Arrays.asList(0))
;
if(reqVO.getSortByBlueprintNo() != null && reqVO.getSortByBlueprintNo()){
query.orderByAsc(ProcessBomDetailDO::getBlueprintNo);

View File

@ -146,17 +146,17 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
query.selectAll(ProcessBomDetailDO.class)
.eq(ProcessBomDetailDO::getType, 2)
.eq(ProcessBomDetailDO::getBomId,bomId)
.isNull(ProcessBomDetailDO::getMaterialId)
.disableLogicDel()
.in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1));
.isNull(ProcessBomDetailDO::getMaterialId);
// .disableLogicDel()
// .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1));
return selectList(query);
}
default List<ProcessBomDetailDO> selectAllList(Long bomId){
MPJLambdaWrapper<ProcessBomDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProcessBomDetailDO.class)
.eq(ProcessBomDetailDO::getBomId,bomId)
.disableLogicDel()
.in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1));
.eq(ProcessBomDetailDO::getBomId,bomId);
// .disableLogicDel()
// .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1));
return selectList(query);
}
default int deleteByBomId(Long bomId) {

View File

@ -180,6 +180,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN u3.nickname " +
"WHEN 'BLUEPRINT_2D' THEN u4.nickname " +
"WHEN 'BLUEPRINT_3D' THEN u5.nickname " +
"WHEN 'CASTING_DRAWING' THEN u6.nickname " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN u2.nickname " +
"ELSE '' " + // 默认值
"END as userName")
@ -188,6 +190,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN b.start_blank_date " +
"WHEN 'BLUEPRINT_2D' THEN b.start_two_dim_Date " +
"WHEN 'BLUEPRINT_3D' THEN b.start_three_dim_date " +
"WHEN 'CASTING_DRAWING' THEN a.cast_start_date " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN a.craft_start_date " +
"ELSE '' " +
"END as startDate"
)
@ -196,6 +200,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN b.blank_date " +
"WHEN 'BLUEPRINT_2D' THEN b.two_dim_date " +
"WHEN 'BLUEPRINT_3D' THEN b.three_dim_date " +
"WHEN 'CASTING_DRAWING' THEN a.cast_end_date " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN a.craft_end_date " +
"ELSE '' " +
"END as endDate"
)
@ -209,6 +215,7 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.leftJoin("system_users u3 on u3.id = b.blank_owner")
.leftJoin("system_users u4 on u4.id = b.two_dim_owner")
.leftJoin("system_users u5 on u5.id = b.three_dim_owner")
.leftJoin("system_users u6 on u6.id = a.cast_owner")
.disableSubLogicDel();
query.orderByDesc(ProcessDesignDO::getCreateTime);
query
@ -216,17 +223,21 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
.in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList())
// .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList())
.like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType())
;
if(!StringUtils.isEmpty(reqVO.getOwnerName())){
query.and(QueryWrapper -> QueryWrapper.apply("u2.nickname = {0} and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name())
query.and(QueryWrapper -> QueryWrapper.apply("u2.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name())
.or()
.apply("u3.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name())
.or()
.apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name())
.or()
.apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name()));
.apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name()))
.or()
.apply("u6.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.CASTING_DRAWING.name());
}
return selectPage(reqVO, query);
}
@ -242,6 +253,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN u3.nickname " +
"WHEN 'BLUEPRINT_2D' THEN u4.nickname " +
"WHEN 'BLUEPRINT_3D' THEN u5.nickname " +
"WHEN 'CASTING_DRAWING' THEN u6.nickname " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN u2.nickname " +
"ELSE '' " + // 默认值
"END as userName")
@ -250,6 +263,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN DATE_FORMAT(b.start_blank_date, '%y-%m-%d') " +
"WHEN 'BLUEPRINT_2D' THEN DATE_FORMAT(b.start_two_dim_Date, '%y-%m-%d') " +
"WHEN 'BLUEPRINT_3D' THEN DATE_FORMAT(b.start_three_dim_date, '%y-%m-%d') " +
"WHEN 'CASTING_DRAWING' THEN DATE_FORMAT(a.cast_start_date, '%y-%m-%d') " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN DATE_FORMAT(a.craft_start_date, '%y-%m-%d') " +
"ELSE '' " +
"END as startDates"
)
@ -258,6 +273,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN DATE_FORMAT(b.blank_date, '%y-%m-%d') " +
"WHEN 'BLUEPRINT_2D' THEN DATE_FORMAT(b.two_dim_date, '%y-%m-%d') " +
"WHEN 'BLUEPRINT_3D' THEN DATE_FORMAT(b.three_dim_date, '%y-%m-%d') " +
"WHEN 'CASTING_DRAWING' THEN DATE_FORMAT(a.cast_end_date, '%y-%m-%d') " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN DATE_FORMAT(a.craft_end_date, '%y-%m-%d') " +
"ELSE '' " +
"END as endDates"
)
@ -271,6 +288,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.leftJoin("system_users u3 on u3.id = b.blank_owner")
.leftJoin("system_users u4 on u4.id = b.two_dim_owner")
.leftJoin("system_users u5 on u5.id = b.three_dim_owner")
.leftJoin("system_users u6 on u6.id = a.cast_owner")
.disableSubLogicDel();
query.orderByDesc(ProcessDesignDO::getCreateTime);
query
@ -278,7 +297,9 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
.in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList())
// .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList())
.like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType())
;
if(!StringUtils.isEmpty(reqVO.getOwnerName())){
@ -288,7 +309,9 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.or()
.apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name())
.or()
.apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name()));
.apply("u5.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_3D.name()))
.or()
.apply("u6.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.CASTING_DRAWING.name());
}
System.out.println(query.getSqlSelect()); // 查看实际执行的 SQL
return selectPage(reqVO, query);

View File

@ -54,6 +54,8 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()),"a.name",reqVO.getProjectSubName())
.eq(ProjectOrderDO::getOrderStatus,32)
.in(ProjectOrderDO::getIsSnapshot,0)
.eq(ProjectOrderSubDO::getDeleted,0)
.groupBy(ProjectOrderSubDO::getId)
.orderByDesc(ProjectOrderDO::getCreateTime);
;
return selectPage(reqVO, query);

View File

@ -40,13 +40,14 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
default PageResult<PurchaseOrderMakeDetailDO> selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) {
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)
.select("b.material_name as boomName","b.spec as boomSpec","b.unit as boomUnit","m.name as matName")
.select("b.material_name as boomName","b.spec as boomSpec","b.unit as boomUnit","IFNULL(m.name,m1.name) as matName")
// .select("pom.purchase_no as purchaseNo")
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId)
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
.leftJoin(PurchaseOrderNoDetailDO.class,"no",PurchaseOrderNoDetailDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderNoDetailId)
.leftJoin(MaterialDO.class,"m1",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderNoDetailDO::getMaterialId)
.disableSubLogicDel()
.eq(PurchaseOrderMakeDO::getGoodsType,1)

View File

@ -446,7 +446,7 @@ public class CrossOrderManager {
.setProjectId(projectId)
.setProjectSubId(projectSubId)
.setVersion(0)
.setBomStatus(ProcessBomStatusEnum.SAVE.getCode())
.setBomStatus(ProcessBomStatusEnum.Unedited.getCode())
.setStatus(ValidStatusEnum.VALID.getCode())
.setActive(OperateTypeEnum.CREATE.name());
processBomService.operateProcessBom(bomSaveReqVO);

View File

@ -65,7 +65,7 @@ public interface MaterialPlanService {
PageResult<TaskDispatchDetailDO> getPartPage(MaterialPlanPageReqVO pageReqVO);
Boolean submit(List<TaskDispatchDetailDO> list);
CommonResult<Boolean> submit(List<TaskDispatchDetailDO> list);
CommonResult<Boolean> withdraw(String code);

View File

@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.attentiontodo.Attentionto
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
@ -20,6 +21,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMap
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
@ -29,6 +31,7 @@ import com.chanko.yunxi.mes.module.system.api.user.AdminUserApi;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper;
import com.chanko.yunxi.mes.module.system.service.user.AdminUserService;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
@ -40,6 +43,8 @@ import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -90,6 +95,8 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
private TaskDispatchMapper taskDispatchMapper;
@Resource
private MaterialMapper materialMapper;
@Resource
private ProcessBomMapper processBomMapper;
@Override
public Long createMaterialPlan(MaterialPlanSaveReqVO createReqVO) {
// 插入
@ -270,7 +277,25 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
@Override
@Transactional
public Boolean submit(List<TaskDispatchDetailDO> list) {
public CommonResult<Boolean> submit(List<TaskDispatchDetailDO> list) {
List<Long> ids = list.stream().map(TaskDispatchDetailDO::getDispatchId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskDispatchDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(TaskDispatchDO::getId,ids);
List<TaskDispatchDO> taskDispatchDOS = taskDispatchMapper.selectList(queryWrapper1);
if (ObjectUtil.isNotEmpty(taskDispatchDOS)){
List<Long> collects = taskDispatchDOS.stream().map(TaskDispatchDO::getBomDetailId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<ProcessBomDetailDO> bomDetailDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
bomDetailDOLambdaQueryWrapper.in(ProcessBomDetailDO::getId,collects);
List<ProcessBomDetailDO> processBomDetailDOS = processBomDetailMapper.selectList(bomDetailDOLambdaQueryWrapper);
if (ObjectUtil.isNotEmpty(processBomDetailDOS)){
List<Long> collect = processBomDetailDOS.stream().map(ProcessBomDetailDO::getBomId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<ProcessBomDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessBomDO::getId,collect);
queryWrapper.ne(ProcessBomDO::getBomStatus,7);
if (processBomMapper.selectCount(queryWrapper) > 0) return CommonResult.error(400,"BOM不是审核状态不允许操作,请确认!");
}
}
TaskDispatchDetailDO detailDO = list.get(0);
MaterialPlanDO planDO = new MaterialPlanDO();
SerialNumberDO serialNumberDO = new SerialNumberDO();
@ -374,7 +399,7 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
}
}
return true;
return CommonResult.success(true);
}
@Override
@ -452,9 +477,9 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
// boomDO.setIsPurYard(5);
LambdaUpdateWrapper<MaterialPlanBoomDO> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(MaterialPlanBoomDO::getId,pageReqVO.getId())
.set(MaterialPlanBoomDO::getIsPurYard,5)
.set(MaterialPlanBoomDO::getMaterialId,null)
.set(MaterialPlanBoomDO::getMatRest,0);
.set(MaterialPlanBoomDO::getIsPurYard,5);
// .set(MaterialPlanBoomDO::getMaterialId,null)
// .set(MaterialPlanBoomDO::getMatRest,0);
materialPlanBoomMapper.update(wrapper);
break;
}

View File

@ -134,7 +134,7 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
makeDetailDO.setProjectMaterialPlanId(dp.getProjectMaterialPlanId());
makeDetailDO.setProjectMaterialPlanBoomId(dp.getId());
makeDetailDO.setName(dp.getProjectName());
makeDetailDO.setMaterialId(dp.getMaterialId());
ProjectOrderSubDO subDO = new ProjectOrderSubDO();
if (hashMap.get(dp.getProjectPlanSubId()) != null) {
subDO = hashMap.get(dp.getProjectPlanSubId());

View File

@ -92,12 +92,12 @@ public interface ProcessBomService {
HashMap<String,String> getUnitDictData();
void deleteProcessBomDetail(Long id);
void deleteProcessBomDetailNew(Long id);
CommonResult<Boolean> deleteProcessBomDetailNew(Long id);
ProcessBomDetailDO selectProcessBomDetail(Long id);
void updateProcessBomDetail(ProcessBomDetailDO processBomDetailDO);
PageResult<ProcessBomDetailDO> getStandardPage(ProcessBomPageReqVO pageReqVO);
Boolean submit(List<ProcessBomDetailDO> list);
CommonResult<Boolean> submit(List<ProcessBomDetailDO> list);
CommonResult<Boolean> withdraw(String code);

View File

@ -37,6 +37,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.P
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.shenhe.ShenheDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper;
@ -46,6 +47,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMappe
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plantask.PlanTaskMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plantaskbom.PlanTaskBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
@ -53,6 +55,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.shenhe.ShenheMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskreport.TaskReportMapper;
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
@ -141,6 +144,8 @@ public class ProcessBomServiceImpl implements ProcessBomService {
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Resource
private TaskDispatchMapper taskDispatchMapper;
@Resource
private TaskReportMapper taskReportMapper;
@Resource
private BgMasterLineMapper bgMasterLineMapper;
@ -148,6 +153,8 @@ public class ProcessBomServiceImpl implements ProcessBomService {
private StorageMapper storageMapper;
@Resource
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
@Resource
private PlanTaskBomMapper planTaskBomMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createProcessBom(ProcessBomSaveReqVO createReqVO) {
@ -287,11 +294,10 @@ public class ProcessBomServiceImpl implements ProcessBomService {
if (o.getType().equals("")){
standard = true;
type = "1";
// materialDO = materialService.getMaterialId(o.getMaterialCode());
// if (materialDO == null) {
// throw new RuntimeException("物料编码为:"+o.getMaterialCode() + "物料不存在");
// }
materialDO = materialService.getMaterialId(o.getMaterialCode());
if (ObjectUtil.isEmpty(materialDO)) {
throw new RuntimeException("零件编码:"+o.getMaterialCode() + "不存在,请确认");
}
}
else if (o.getType().equals("")){
type = "2";
@ -340,9 +346,13 @@ public class ProcessBomServiceImpl implements ProcessBomService {
throw new RuntimeException("物料名称不能为空!");
}
processBomDetailDO.setMaterialName(o.getMaterialName());
if (type.equals("1")) {
// processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
// processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
if (ObjectUtil.isNotEmpty(materialDO)){
processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
}
// processBomDetailDO.setMaterialName(materialDO.getName());//物料名称
@ -440,7 +450,13 @@ public class ProcessBomServiceImpl implements ProcessBomService {
throw exception(PROCESS_BOM_DETAIL_NOT_EXISTS);
}
}
// 更新
if(operateTypeEnum == OperateTypeEnum.AUDIT) {
ProcessBomDO processBomDO = processBomMapper.selectById(updateReqVO.getId());
if (ObjectUtil.isNotEmpty(processBomDO)){
if (processBomDO.getBomStatus()==1) throw exception(new ErrorCode(1_009_9999,"Bom状态为已保存,不允许审核"));
}
}
// 更新
ProcessBomDO updateObj = BeanUtils.toBean(updateReqVO, ProcessBomDO.class);
List<ProcessBomDetailDO> processBomDetails = updateReqVO.getProcessBomDetails();
//不论怎么样都要校验这次的数据它图号是否唯一非标准件的名称是否重复规格是否为空
@ -460,6 +476,17 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
});
for (ProcessBomDetailDO processBomDetail : processBomDetails) {
LambdaQueryWrapper<PlanTaskBomDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PlanTaskBomDO::getBomDetailId, processBomDetail.getId());
List<PlanTaskBomDO> planTaskBomDOS = planTaskBomMapper.selectList(wrapper);
if (ObjectUtil.isNotEmpty(planTaskBomDOS)){
List<Long> collect = planTaskBomDOS.stream().map(PlanTaskBomDO::getTaskId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<PlanTaskDO> planTaskDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
planTaskDOLambdaQueryWrapper.in(PlanTaskDO::getId, collect);
planTaskDOLambdaQueryWrapper.eq(PlanTaskDO::getStatus, 2);
if (planTaskMapper.selectCount(planTaskDOLambdaQueryWrapper) > 0) throw exception(new ErrorCode(1_007_9999,"该生产任务单状态已提交请先取消再修改BOM"));
}
//标准件不管材质非标准件材质必填
if (processBomDetail.getType().equals("2")){
if (processBomDetail.getCompositionId() == null) {
@ -509,7 +536,76 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
});
}
if (CollUtil.isNotEmpty(processBomDetails)&&operateTypeEnum == OperateTypeEnum.SAVE){
if (CollUtil.isNotEmpty(processBomDetails)){
if(operateTypeEnum == OperateTypeEnum.SAVE||operateTypeEnum == OperateTypeEnum.SUBMIT) {
List<ProcessBomDetailDO> processBomDetailDOS = getProcessBomDetailListByBomId(updateReqVO.getId());
if (CollUtil.isNotEmpty(processBomDetailDOS)) {
for (ProcessBomDetailDO vo : processBomDetails) {
if (vo.getId()!=null){
for (ProcessBomDetailDO po : processBomDetailDOS) {
if (vo.getId().equals(po.getId())) {
if (!vo.getMaterialName().equals(po.getMaterialName())) {
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(MaterialPlanBoomDO::getBoomDetailId,vo.getId());
if (materialPlanBoomMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做需求计划,不允许修改零件名称"));
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId());
queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" );
List<TaskDispatchDO> list = taskDispatchMapper.selectList(queryWrapper);
if (ObjectUtil.isNotEmpty(list)){
List<Long> collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(TaskDispatchDetailDO::getDispatchId, collect);
List<TaskDispatchDetailDO> detailDOS = taskDispatchDetailMapper.selectList(wrapper);
List<Long> collect1 = detailDOS.stream().map(TaskDispatchDetailDO::getId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskReportDO> taskReportDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
taskReportDOLambdaQueryWrapper.in(TaskReportDO::getDispatchDetailId, collect1);
if (taskReportMapper.selectCount(taskReportDOLambdaQueryWrapper)>0) throw exception(new ErrorCode(1_007_9988,"物料"+po.getMaterialName()+"已报工,不允许修改零件名称"));
}
}
if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) {
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(MaterialPlanBoomDO::getBoomDetailId,vo.getId());
if (materialPlanBoomMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做需求计划,不允许修改图号"));
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId());
queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" );
List<TaskDispatchDO> list = taskDispatchMapper.selectList(queryWrapper);
if (ObjectUtil.isNotEmpty(list)){
List<Long> collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(TaskDispatchDetailDO::getDispatchId, collect);
List<TaskDispatchDetailDO> detailDOS = taskDispatchDetailMapper.selectList(wrapper);
List<Long> collect1 = detailDOS.stream().map(TaskDispatchDetailDO::getId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskReportDO> taskReportDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
taskReportDOLambdaQueryWrapper.in(TaskReportDO::getDispatchDetailId, collect1);
if (taskReportMapper.selectCount(taskReportDOLambdaQueryWrapper)>0) throw exception(new ErrorCode(1_007_9988,"物料"+po.getMaterialName()+"已报工,不允许修改图号"));
}
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
}
if (!vo.getAmount().equals(po.getAmount())) {
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId());
queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" );
List<TaskDispatchDO> list = taskDispatchMapper.selectList(queryWrapper);
if (ObjectUtil.isNotEmpty(list)){
List<Long> collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(TaskDispatchDetailDO::getDispatchId, collect);
wrapper.eq(TaskDispatchDetailDO::getProcedureStatus, 2);
if (taskDispatchDetailMapper.selectCount(wrapper)>0) throw exception(new ErrorCode(1_007_9998,"该零件"+po.getMaterialName()+"工序已报工完成,不允许修改"));
}
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
}
}
}
}
}
}
}
}
if (CollUtil.isNotEmpty(processBomDetails)&&operateTypeEnum == OperateTypeEnum.SAVE){
updateObj.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
List<ProcessBomDetailDO> processBomDetailDOS = getProcessBomDetailListByBomId(updateReqVO.getId());
//如果列表不为空就代表之前有过查出本轮新增的和遍历之前的
@ -547,6 +643,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
// }
}
if (!vo.getMaterialName().equals(po.getMaterialName())) {
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
// if(vo.getMemo()!=null){
// vo.setMemo(vo.getMemo()+"→物料名称由"+po.getMaterialName()+"变为"+vo.getMaterialName());
@ -574,6 +671,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) {
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
// if(vo.getMemo()!=null) {
// vo.setMemo(vo.getMemo() + "→图号由" + po.getBlueprintNo() + "变为" + vo.getBlueprintNo());
@ -1080,9 +1178,45 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteProcessBomDetailNew(Long id){
public CommonResult<Boolean> deleteProcessBomDetailNew(Long id){
LambdaQueryWrapper<MaterialPlanBoomDO> boomDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
boomDOLambdaQueryWrapper.eq(MaterialPlanBoomDO::getBoomDetailId, id);
if (materialPlanBoomMapper.selectCount(boomDOLambdaQueryWrapper) > 0) return CommonResult.error(400,"该零件已做物料需求计划,不允许删除");
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, id);
List<TaskDispatchDO> list = taskDispatchMapper.selectList(queryWrapper);
if (ObjectUtil.isNotEmpty(list)){
List<Long> collect = list.stream().map(TaskDispatchDO::getId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(TaskDispatchDetailDO::getDispatchId, collect);
List<TaskDispatchDetailDO> detailDOS = taskDispatchDetailMapper.selectList(wrapper);
if (ObjectUtil.isNotEmpty(detailDOS)){
List<Long> collect1 = detailDOS.stream().map(TaskDispatchDetailDO::getId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TaskReportDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(TaskReportDO::getDispatchDetailId, collect1);
List<TaskReportDO> list1 = taskReportMapper.selectList(lambdaQueryWrapper);
if (ObjectUtil.isNotEmpty(list1)) return CommonResult.error(400,"该零件已报工,不允许删除");
}
}
LambdaQueryWrapper<PlanTaskBomDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PlanTaskBomDO::getBomDetailId, id);
List<PlanTaskBomDO> planTaskBomDOS = planTaskBomMapper.selectList(wrapper);
if (ObjectUtil.isNotEmpty(planTaskBomDOS)){
List<Long> collect = planTaskBomDOS.stream().map(PlanTaskBomDO::getTaskId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<PlanTaskDO> planTaskDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
planTaskDOLambdaQueryWrapper.in(PlanTaskDO::getId, collect);
planTaskDOLambdaQueryWrapper.eq(PlanTaskDO::getStatus, 2);
if (planTaskMapper.selectCount(planTaskDOLambdaQueryWrapper) > 0) return CommonResult.error(400,"该生产任务单状态已提交,请先取消再修改BOM");
}
ProcessBomDetailDO processBomDetailDO = selectProcessBomDetail(id);
processBomDetailDO.setDeleted(true);
ProcessBomDO processBomDO = processBomMapper.selectById(processBomDetailDO.getBomId());
if (ObjectUtil.isNotEmpty(processBomDO)){
processBomDO.setBomStatus(1);
processBomMapper.updateById(processBomDO);
}
List<ProcessBomDetailDO> processBomDetailListByBomIdbyid = getProcessBomDetailListByBomId(processBomDetailDO.getBomId());
Integer bomOperateCount = processBomDetailListByBomIdbyid.get(0).getBomOperateCount();
processBomDetailDO.setMemo("删除数据");
@ -1092,6 +1226,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
processBomDetailDO.setBomEditStatus(BomEditStatusEnum.DELETE.getStatus());
updateProcessBomDetail(processBomDetailDO);
processBomDetailMapper.deleteById(id);
return CommonResult.success(true);
}
@Override
public ProcessBomDetailDO selectProcessBomDetail(Long id){
@ -1109,7 +1244,12 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
@Override
public Boolean submit(List<ProcessBomDetailDO> list) {
public CommonResult<Boolean> submit(List<ProcessBomDetailDO> list) {
List<Long> collect = list.stream().map(ProcessBomDetailDO::getBomId).distinct().collect(Collectors.toList());
LambdaQueryWrapper<ProcessBomDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessBomDO::getId,collect);
queryWrapper.ne(ProcessBomDO::getBomStatus,7);
if (processBomMapper.selectCount(queryWrapper) > 0) return CommonResult.error(400,"BOM不是审核状态不允许操作,请确认!");
ProcessBomDetailDO detailDO = list.get(0);
MaterialPlanDO planDO = new MaterialPlanDO();
SerialNumberDO serialNumberDO = new SerialNumberDO();
@ -1143,6 +1283,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
boomDO.setMatName(processBomDetailDO.getMaterialName());
boomDO.setDuEmpId(processBomDetailDO.getDuEmpId());
boomDO.setProjectPlanSubId(processBomDetailDO.getProjectSubId());
boomDO.setMaterialId(processBomDetailDO.getMaterialId());
boomDO.setMplanStatus(0);
materialPlanBoomDOList.add(boomDO);
processBomDetailDO.setMplanDate(processBomDetailDO.getBoomArriveDate());
@ -1218,7 +1359,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
// }
}
}
return true;
return CommonResult.success(true);
}
@Override

View File

@ -27,14 +27,17 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignPro
import com.chanko.yunxi.mes.module.heli.enums.ProcessDesignTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.WarningEnum;
import com.chanko.yunxi.mes.module.heli.vo.WarningMessageVO;
import lombok.var;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.security.access.method.P;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.yaml.snakeyaml.events.Event;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDate;
@ -564,6 +567,20 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
@Override
public PageResult<ProcessDesignDO> getProcessDesignPages(ProcessDesignPageReqVO pageReqVO) {
if (ObjectUtil.isNotEmpty(pageReqVO.getProcessDesignType())){
if ("0".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("CASTING_DRAWING");
}else if ("1".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_FOUNDRY_TECHNOLOGY");
}else if ("2".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_2D");
}else if ("3".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_3D");
}else if ("4".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_WORKBLANK");
}
}
PageResult<ProcessDesignDO> processDesignDOPageResult = processDesignMapper.getProcessDesignPages(pageReqVO);
List<ProcessDesignDO> list = processDesignDOPageResult.getList();
for (ProcessDesignDO processDesignDO : list) {
@ -584,6 +601,8 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId());
queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime);
queryWrapper.isNotNull(ProcessDesignProgressDO::getEndTime);
queryWrapper.ne(ProcessDesignProgressDO::getEndTime,"");
queryWrapper.last("limit 1");
ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(processDesignProgressDO)){
@ -607,6 +626,20 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
@Override
public PageResult<ProcessDesignDO> getExportExcel(ProcessDesignPageReqVO pageReqVO) {
if (ObjectUtil.isNotEmpty(pageReqVO.getProcessDesignType())){
if ("0".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("CASTING_DRAWING");
}else if ("1".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_FOUNDRY_TECHNOLOGY");
}else if ("2".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_2D");
}else if ("3".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_3D");
}else if ("4".equals(pageReqVO.getProcessDesignType())){
pageReqVO.setProcessDesignType("BLUEPRINT_WORKBLANK");
}
}
PageResult<ProcessDesignDO> processDesignDOPageResult = processDesignMapper.getExportExcel(pageReqVO);
List<ProcessDesignDO> list = processDesignDOPageResult.getList();
SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
@ -628,6 +661,8 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId());
queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime);
queryWrapper.isNotNull(ProcessDesignProgressDO::getEndTime);
queryWrapper.ne(ProcessDesignProgressDO::getEndTime,"");
queryWrapper.last("limit 1");
ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(processDesignProgressDO)){
@ -644,6 +679,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
processDesignDO.setProcessDesignType("3D");
}else if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){
processDesignDO.setProcessDesignType("2D");
}else if ("BLUEPRINT_FOUNDRY_TECHNOLOGY".equals(processDesignDO.getProcessDesignType())){
processDesignDO.setProcessDesignType("工艺");
}else if ("CASTING_DRAWING".equals(processDesignDO.getProcessDesignType())){
processDesignDO.setProcessDesignType("铸件");
}
LambdaQueryWrapper<ProcessDesignProgressDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId());

View File

@ -18,6 +18,8 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipMan
import com.chanko.yunxi.mes.module.heli.dal.dataobject.fpuserdetail.FpUserDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantask.PlanTaskDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
@ -32,6 +34,8 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.equipmanufacture.EquipManufact
import com.chanko.yunxi.mes.module.heli.dal.mysql.fpuserdetail.FpUserDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plantask.PlanTaskMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plantaskbom.PlanTaskBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.procedure.ProcedureMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
@ -115,6 +119,10 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
private ProcessBomMapper processBomMapper;
@Resource
private PlanSubMapper planSubMapper;
@Resource
private PlanTaskBomMapper planTaskBomMapper;
@Resource
private PlanTaskMapper planTaskMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) {
@ -181,10 +189,25 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
ProcessBomDO processBomDO = processBomMapper.selectById(bomDetailDO.getBomId());
if (ObjectUtil.isNotEmpty(processBomDO)){
if (processBomDO.getBomStatus()!=7){
throw exception(new ErrorCode(400,"BOM没有审核请先审核BOM"));
throw exception(new ErrorCode(400,"BOM不是审核状态不允许操作,请确认!"));
}
}
LambdaQueryWrapper<PlanTaskBomDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PlanTaskBomDO::getBomDetailId,bomDetailDO.getId());
PlanTaskBomDO planTaskBomDO = planTaskBomMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(planTaskBomDO)){
PlanTaskDO planTaskDO = planTaskMapper.selectById(planTaskBomDO.getTaskId());
if (ObjectUtil.isNotEmpty(planTaskDO)){
if (planTaskDO.getStatus()!=2){
throw exception(new ErrorCode(400,"该计划"+planTaskDO.getTaskNo()+"没有提交,请确认!"));
}
}
}
}else {
throw exception(new ErrorCode(400,"BOM零件已删除不允许派工"));
}
}
// 更新
TaskDispatchDO updateObj = BeanUtils.toBean(updateReqVO, TaskDispatchDO.class);
@ -196,7 +219,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
.filter(o -> o.getId() != null)
.collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(list)){
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(updateObj.getId());
// TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(updateObj.getId());
for (TaskDispatchDetailDO dispatchDetailDO : list) {
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId());
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
@ -680,7 +703,17 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
.last("LIMIT 1 ");
}});
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(taskDispatchDetailDO.getDispatchId());
if ("PRODUCTION".equals( taskDispatchDO.getDispatchType())) {
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(taskDispatchDO.getBomDetailId());
if (ObjectUtil.isNotEmpty(bomDetailDO)){
ProcessBomDO processBomDO = processBomMapper.selectById(bomDetailDO.getBomId());
if (ObjectUtil.isNotEmpty(processBomDO)){
if (processBomDO.getBomStatus()!=7){
throw exception(new ErrorCode(400,"BOM不是审核状态不允许操作请确认"));
}
}
}
}
//校验如果为完成添加逻辑1生产结束 增加管控 - 如果报工数量 = 派工数量 提示报工数量num1 != 派工数量num2不允许结束
if(operate == TaskReportOperateEnum.FINISH ){

View File

@ -51,3 +51,8 @@ export const getListcl = async (id: number,projectSubId: number) => {
export const getListZp = async (id: number,projectSubId: number) => {
return await request.get({ url: `/heli/task-dispatch/getListZp?id=`+id+`&projectSubId=`+projectSubId })
}
// 导出任务报工 Excel
export const exportCost = async (params) => {
return await request.download({ url: `/heli/project-order/exportCost`, params })
}

View File

@ -325,16 +325,16 @@
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">操作日志</span>
<el-button @click="goback" size="large" style="margin-left: 5rem"> </el-button>
<el-button
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update'"
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update'||formData.bomStatus == 0"
@click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large"> </el-button>
<el-button
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update'"
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 1 || active == 'update' ||formData.bomStatus == 0"
@click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large"> </el-button>
<el-button
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 2"
@click="submitForm('CANCEL_SUBMIT')" type="danger" :disabled="formLoading" size="large">取消提交</el-button>
<el-button
v-if="active != 'detail' && active == 'shenhe'" @click="submitForm('AUDIT')" type="success"
v-if="active != 'detail' && active == 'shenhe' && formData.bomStatus == 2" @click="submitForm('AUDIT')" type="success"
:disabled="formLoading" size="large">审核</el-button>
</template>
<el-row>
@ -604,7 +604,7 @@ const resetForm = () => {
projectSubName: undefined,
projectSubCode: undefined,
version: undefined,
bomStatus: 1,
bomStatus:1,
remark: undefined,
property:undefined,
status: 1,
@ -760,9 +760,19 @@ const onAddItem = () => {
}
const onDeleteItem = async (index) => {
let deletedItems = formData.value.processBomDetails.splice(index, 1);
let id = deletedItems[0].id;
if (id) await ProcessBomApi.deleteProcessBomDetail(id)
// let deletedItems = formData.value.processBomDetails.splice(index, 1);
// let id = deletedItems[0].id;
// if (id) await ProcessBomApi.deleteProcessBomDetail(id)
//
const itemToDelete = formData.value.processBomDetails[index];
// id
if (itemToDelete?.id) {
await ProcessBomApi.deleteProcessBomDetail(itemToDelete.id);
}
// id
formData.value.processBomDetails.splice(index, 1);
}
const printfClick = () =>{
if(formData.value.code == null || formData.value.code == ''){

View File

@ -43,8 +43,8 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
<el-table-column fixed label="序号" align="center" type="index" width="60" />
<el-table-column fixed label="BOM编号" align="center" prop="bomCode" min-width="430">
<template #default="scope">
@ -65,7 +65,7 @@
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" min-width="160">
<template #default="scope">
<el-button v-if="scope.row.bomStatus != 7" link type="primary" @click="openDetail('shenhe', scope.row.id)">
<el-button v-if="scope.row.bomStatus ==2" link type="primary" @click="openDetail('shenhe', scope.row.id)">
去审核
</el-button>
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
@ -130,7 +130,7 @@ const getList = async () => {
if(id){
queryParams.code=id
}
const data = await ProcessBomApi.getProcessBomPages(queryParams)
history.state.idid=undefined
list.value = data.list

View File

@ -57,7 +57,11 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="类型" prop="processDesignType">
<el-select v-model="queryParams.processDesignType" placeholder="类型" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROCESS_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</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>
@ -78,14 +82,14 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table" border>
<el-table-column fixed label="序号" type="index" width="70" align="center" />
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="240" />
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="120" />
<el-table-column fixed label="项目名称" align="center" prop="projectName" min-width="180" />
<el-table-column fixed label="子项目名称" align="center" prop="projectSubName" min-width="180" />
<el-table-column fixed label="子项目名称" align="center" prop="projectSubName" min-width="250" />
<el-table-column label="负责人" align="center" prop="userName" width="120"/>
<el-table-column label="负责类型" align="center" prop="processDesignType" width="120">
<template #default="scope">
{{ scope.row.processDesignType=='BLUEPRINT_WORKBLANK'?"毛坯":scope.row.processDesignType=='BLUEPRINT_2D'?"2D":"3D" }}
{{ scope.row.processDesignType=='BLUEPRINT_WORKBLANK'?"毛坯":scope.row.processDesignType=='BLUEPRINT_2D'?"2D":scope.row.processDesignType=='BLUEPRINT_3D'?"3D":scope.row.processDesignType=='CASTING_DRAWING'?"铸件":"工艺" }}
</template>
</el-table-column>
<el-table-column label="计划起始" align="center" prop="startDate" :formatter="dateFormatter3" min-width="120"/>
@ -160,17 +164,14 @@
<script setup lang="ts">
import {
dateFormatter,
dateFormatter2,
dateFormatter3,
dateFormatter4,
formatDate
} from '@/utils/formatTime'
import download from '@/utils/download'
import * as ProcessDesignApi from '@/api/heli/processdesign'
import {useCommonStateWithOut} from "@/store/modules/common";
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
import {getProcessDesignPages} from "@/api/heli/processdesign";
defineOptions({ name: 'ProcessDesign3D' })
@ -187,7 +188,7 @@ const queryParams = reactive({
pageSize: 10,
planCode: undefined,
projectCode: undefined,
processDesignTypeList: ['BLUEPRINT_3D','BLUEPRINT_2D','BLUEPRINT_WORKBLANK'],
processDesignTypeList: ['BLUEPRINT_3D','BLUEPRINT_2D','BLUEPRINT_WORKBLANK','CASTING_DRAWING','BLUEPRINT_FOUNDRY_TECHNOLOGY'],
customerName: undefined,
projectName: undefined,
businessLine: undefined,
@ -197,6 +198,7 @@ const queryParams = reactive({
twoDimOwnerName: undefined,
isOverview: true,
ownerName:undefined,
processDesignType:undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
@ -218,13 +220,13 @@ const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
const getDictLabel = (dictType, value) => {
console.log(value)
var intDictOptions = getIntDictOptions(dictType);
console.log(intDictOptions)
const dict = intDictOptions.find(item => item.value == value)
return dict?.label || value //
}
// const getDictLabel = (dictType, value) => {
// console.log(value)
// var intDictOptions = getIntDictOptions(dictType);
// console.log(intDictOptions)
// const dict = intDictOptions.find(item => item.value == value)
// return dict?.label || value //
// }
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
@ -232,23 +234,23 @@ const resetQuery = () => {
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
// const formRef = ref()
// const openForm = (type: string, id?: number) => {
// formRef.value.open(type, id)
// }
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ProcessDesignApi.deleteProcessDesign(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
// const handleDelete = async (id: number) => {
// try {
// //
// await message.delConfirm()
// //
// await ProcessDesignApi.deleteProcessDesign(id)
// message.success(t('common.delSuccess'))
// //
// await getList()
// } catch {}
// }
/** 导出按钮操作 */
const handleExport = async () => {
@ -265,16 +267,16 @@ const handleExport = async () => {
}
}
//
const getCellStyle = (status) => {
switch (status) {
case '已完成':
return { backgroundColor: '#f2f2f2' } //
case '进行中':
return { backgroundColor: '#90EE90' } // 绿
default:
return {} //
}
}
// const getCellStyle = (status) => {
// switch (status) {
// case '':
// return { backgroundColor: '#f2f2f2' } //
// case '':
// return { backgroundColor: '#90EE90' } // 绿
// default:
// return {} //
// }
// }
/** 初始化 **/
onMounted(() => {
getList()

View File

@ -50,15 +50,15 @@
<el-button @click="handleQuery"><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="handleExport"-->
<!-- :loading="exportLoading"-->
<!-- v-hasPermi="['heli:shenhe:export']"-->
<!-- >-->
<!-- <Icon icon="ep:download" class="mr-5px" /> 导出-->
<!-- </el-button>-->
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['heli:shenhe:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
@ -66,12 +66,17 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border class="hl-table">
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" border class="hl-table" height="500px">
<el-table-column type="index" width="70" fixed label="序号" align="center" />
<el-table-column label="项目编号" align="center" prop="code" width="200px" />
<el-table-column label="项目名称" align="center" prop="projectName" width="240px"/>
<el-table-column label="客户全称" align="center" prop="customerName" width="240px"/>
<el-table-column label="子项目名称" align="center" prop="projectSubName" width="200px"/>
<el-table-column label="性质" align="center" prop="property" width="100px">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PROPERTY" :value="scope.row.property" />
</template>
</el-table-column>
<el-table-column label="设备型号" align="center" prop="deviceModel" width="200px"/>
<el-table-column label="标准件成本" align="center" prop="biaoZhunJianCost" width="200px"/>
<el-table-column label="材料成本" align="center" prop="cailiaoCost" width="200px"/>
@ -113,6 +118,7 @@
import download from '@/utils/download'
import * as SaleeOrderCost from '@/api/heli/saleordercost'
import * as UserApi from '@/api/system/user'
import {DICT_TYPE} from "@/utils/dict";
defineOptions({ name: 'Shenhe' })
const userList = ref<UserApi.UserVO[]>([]) //
@ -181,8 +187,8 @@ const handleExport = async () => {
await message.exportConfirm()
//
exportLoading.value = true
const data = await ShenheApi.exportShenhe(queryParams)
download.excel(data, '审核.xls')
const data = await SaleeOrderCost.exportCost(queryParams)
download.excel(data, '项目成本归集.xlsx')
} catch {
} finally {
exportLoading.value = false