近期修改

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 @Getter
public enum ProcessBomStatusEnum { public enum ProcessBomStatusEnum {
Unedited(0, "未编辑"),
SAVE(1, "已保存"), SAVE(1, "已保存"),
SUBMIT(2, "已提交"), SUBMIT(2, "已提交"),

View File

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

View File

@ -1,8 +1,17 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.plantask; 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.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService; 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.BusinesTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -17,11 +26,14 @@ import javax.servlet.http.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.io.IOException; 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.PageParam;
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.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; 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 static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
@ -47,7 +59,10 @@ public class PlanTaskController {
@Resource @Resource
private HttpServletRequest request; private HttpServletRequest request;
@Resource
private ProcessBomDetailMapper processBomDetailMapper;
@Resource
private ProcessBomMapper processBomMapper;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建生产计划任务") @Operation(summary = "创建生产计划任务")
@PreAuthorize("@ss.hasPermission('heli:plan-task:create')") @PreAuthorize("@ss.hasPermission('heli:plan-task:create')")
@ -59,6 +74,25 @@ public class PlanTaskController {
@Operation(summary = "更新生产计划任务") @Operation(summary = "更新生产计划任务")
@PreAuthorize("@ss.hasPermission('heli:plan-task:update')") @PreAuthorize("@ss.hasPermission('heli:plan-task:update')")
public CommonResult<Boolean> updatePlanTask(@Valid @RequestBody PlanTaskSaveReqVO updateReqVO) { 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(); LocalDateTime startTime = LocalDateTime.now();
planTaskService.updatePlanTask(updateReqVO); planTaskService.updatePlanTask(updateReqVO);

View File

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

View File

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

View File

@ -45,7 +45,9 @@ import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; 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); projectOrderService.operateProjectOrder(operateReqVO);
// 手动记录日志 // 手动记录日志
@ -277,5 +286,19 @@ public class ProjectOrderController {
PageResult<ProjectOrderSubDO> pageResult = projectOrderService.getProjectOrderSubPage(pageReqVO); PageResult<ProjectOrderSubDO> pageResult = projectOrderService.getProjectOrderSubPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProjectOrderSubRespVO.class)); 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 { public class ProjectOrderCostRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "17481") @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "17481")
@ExcelProperty("自增字段,唯一") // @ExcelProperty("自增字段,唯一")
private Long id; private Long id;
@Schema(description = "项目编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "项目编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("项目编号,唯一") @ExcelProperty("项目编号")
private String code; private String code;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214")
@ExcelProperty("客户")
private String customerName;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("项目名称") @ExcelProperty("项目名称")
private String projectName; private String projectName;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED, example = "27214")
@ExcelProperty("客户全称")
private String customerName;
@Schema(description = "子项目ID") @Schema(description = "子项目ID")
@ExcelProperty("子项目ID") // @ExcelProperty("子项目ID")
private Long projectSubId; private Long projectSubId;
@Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") @Schema(description = "子项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
@ExcelProperty("子项目名称") @ExcelProperty("子项目名称")
private String projectSubName; 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 = "标准件成本") @Schema(description = "标准件成本")
@ExcelProperty("标准件成本") @ExcelProperty("标准件成本")
private BigDecimal biaoZhunJianCost; private BigDecimal biaoZhunJianCost;
@ExcelProperty("材料成本")
@Schema(description = "原材料成本") private BigDecimal cailiaoCost;
@ExcelProperty("原材料成本")
private BigDecimal yuanCaiLiaoCost;
@Schema(description = "副资材成本")
@ExcelProperty("副资材成本")
private BigDecimal fuZiCaiCost;
@Schema(description = "外协加工费用") @Schema(description = "外协加工费用")
@ExcelProperty("外协加工费") @ExcelProperty("外协加工费")
private BigDecimal waixeiCost; private BigDecimal waixeiCost;
@Schema(description = "内部工时费")
@Schema(description = "内部加工成本") @ExcelProperty("内部工时费")
@ExcelProperty("内部加工成本")
private BigDecimal neibuCost; private BigDecimal neibuCost;
@Schema(description = "装配工时费") @Schema(description = "装配工时费")
@ExcelProperty("装配工时费") @ExcelProperty("装配工时费")
private BigDecimal zpCost; private BigDecimal zpCost;
@Schema(description = "运费成本") @Schema(description = "运费成本")
@ExcelProperty("运费成本") @ExcelProperty("运费")
private BigDecimal yunFeiCost; private BigDecimal yunFeiCost;
@Schema(description = "合计成本") @Schema(description = "合计成本")
@ExcelProperty("合计成本") @ExcelProperty("合计成本")
private BigDecimal sumCost; private BigDecimal sumCost;
@ExcelProperty("其他成本")
private BigDecimal cailiaoCost; @Schema(description = "原材料成本")
@Schema(description = "设备型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") // @ExcelProperty("原材料成本")
@ExcelProperty("设备型号") private BigDecimal yuanCaiLiaoCost;
private String deviceModel;
@Schema(description = "副资材成本")
// @ExcelProperty("副资材成本")
private BigDecimal fuZiCaiCost;
} }

View File

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

View File

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

View File

@ -146,17 +146,17 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
query.selectAll(ProcessBomDetailDO.class) query.selectAll(ProcessBomDetailDO.class)
.eq(ProcessBomDetailDO::getType, 2) .eq(ProcessBomDetailDO::getType, 2)
.eq(ProcessBomDetailDO::getBomId,bomId) .eq(ProcessBomDetailDO::getBomId,bomId)
.isNull(ProcessBomDetailDO::getMaterialId) .isNull(ProcessBomDetailDO::getMaterialId);
.disableLogicDel() // .disableLogicDel()
.in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1)); // .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1));
return selectList(query); return selectList(query);
} }
default List<ProcessBomDetailDO> selectAllList(Long bomId){ default List<ProcessBomDetailDO> selectAllList(Long bomId){
MPJLambdaWrapper<ProcessBomDetailDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<ProcessBomDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProcessBomDetailDO.class) query.selectAll(ProcessBomDetailDO.class)
.eq(ProcessBomDetailDO::getBomId,bomId) .eq(ProcessBomDetailDO::getBomId,bomId);
.disableLogicDel() // .disableLogicDel()
.in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1)); // .in(ProcessBomDetailDO::getDeleted,Arrays.asList(0,1));
return selectList(query); return selectList(query);
} }
default int deleteByBomId(Long bomId) { 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_WORKBLANK' THEN u3.nickname " +
"WHEN 'BLUEPRINT_2D' THEN u4.nickname " + "WHEN 'BLUEPRINT_2D' THEN u4.nickname " +
"WHEN 'BLUEPRINT_3D' THEN u5.nickname " + "WHEN 'BLUEPRINT_3D' THEN u5.nickname " +
"WHEN 'CASTING_DRAWING' THEN u6.nickname " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN u2.nickname " +
"ELSE '' " + // 默认值 "ELSE '' " + // 默认值
"END as userName") "END as userName")
@ -188,6 +190,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN b.start_blank_date " + "WHEN 'BLUEPRINT_WORKBLANK' THEN b.start_blank_date " +
"WHEN 'BLUEPRINT_2D' THEN b.start_two_dim_Date " + "WHEN 'BLUEPRINT_2D' THEN b.start_two_dim_Date " +
"WHEN 'BLUEPRINT_3D' THEN b.start_three_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 '' " + "ELSE '' " +
"END as startDate" "END as startDate"
) )
@ -196,6 +200,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN b.blank_date " + "WHEN 'BLUEPRINT_WORKBLANK' THEN b.blank_date " +
"WHEN 'BLUEPRINT_2D' THEN b.two_dim_date " + "WHEN 'BLUEPRINT_2D' THEN b.two_dim_date " +
"WHEN 'BLUEPRINT_3D' THEN b.three_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 '' " + "ELSE '' " +
"END as endDate" "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 u3 on u3.id = b.blank_owner")
.leftJoin("system_users u4 on u4.id = b.two_dim_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 u5 on u5.id = b.three_dim_owner")
.leftJoin("system_users u6 on u6.id = a.cast_owner")
.disableSubLogicDel(); .disableSubLogicDel();
query.orderByDesc(ProcessDesignDO::getCreateTime); query.orderByDesc(ProcessDesignDO::getCreateTime);
query query
@ -216,17 +223,21 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.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())
.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())){ 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() .or()
.apply("u3.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name()) .apply("u3.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name())
.or() .or()
.apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name()) .apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name())
.or() .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); return selectPage(reqVO, query);
} }
@ -242,6 +253,8 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
"WHEN 'BLUEPRINT_WORKBLANK' THEN u3.nickname " + "WHEN 'BLUEPRINT_WORKBLANK' THEN u3.nickname " +
"WHEN 'BLUEPRINT_2D' THEN u4.nickname " + "WHEN 'BLUEPRINT_2D' THEN u4.nickname " +
"WHEN 'BLUEPRINT_3D' THEN u5.nickname " + "WHEN 'BLUEPRINT_3D' THEN u5.nickname " +
"WHEN 'CASTING_DRAWING' THEN u6.nickname " +
"WHEN 'BLUEPRINT_FOUNDRY_TECHNOLOGY' THEN u2.nickname " +
"ELSE '' " + // 默认值 "ELSE '' " + // 默认值
"END as userName") "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_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_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 '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 '' " + "ELSE '' " +
"END as startDates" "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_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_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 '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 '' " + "ELSE '' " +
"END as endDates" "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 u3 on u3.id = b.blank_owner")
.leftJoin("system_users u4 on u4.id = b.two_dim_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 u5 on u5.id = b.three_dim_owner")
.leftJoin("system_users u6 on u6.id = a.cast_owner")
.disableSubLogicDel(); .disableSubLogicDel();
query.orderByDesc(ProcessDesignDO::getCreateTime); query.orderByDesc(ProcessDesignDO::getCreateTime);
query query
@ -278,7 +297,9 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.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())
.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())){ if(!StringUtils.isEmpty(reqVO.getOwnerName())){
@ -288,7 +309,9 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.or() .or()
.apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name()) .apply("u4.nickname like concat('%', {0}, '%') and t.process_design_type = {1}", reqVO.getOwnerName(), ProcessDesignTypeEnum.BLUEPRINT_2D.name())
.or() .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 System.out.println(query.getSqlSelect()); // 查看实际执行的 SQL
return selectPage(reqVO, query); 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()) .like(!StringUtils.isEmpty(reqVO.getProjectSubName()),"a.name",reqVO.getProjectSubName())
.eq(ProjectOrderDO::getOrderStatus,32) .eq(ProjectOrderDO::getOrderStatus,32)
.in(ProjectOrderDO::getIsSnapshot,0) .in(ProjectOrderDO::getIsSnapshot,0)
.eq(ProjectOrderSubDO::getDeleted,0)
.groupBy(ProjectOrderSubDO::getId)
.orderByDesc(ProjectOrderDO::getCreateTime); .orderByDesc(ProjectOrderDO::getCreateTime);
; ;
return selectPage(reqVO, query); return selectPage(reqVO, query);

View File

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

View File

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

View File

@ -65,7 +65,7 @@ public interface MaterialPlanService {
PageResult<TaskDispatchDetailDO> getPartPage(MaterialPlanPageReqVO pageReqVO); PageResult<TaskDispatchDetailDO> getPartPage(MaterialPlanPageReqVO pageReqVO);
Boolean submit(List<TaskDispatchDetailDO> list); CommonResult<Boolean> submit(List<TaskDispatchDetailDO> list);
CommonResult<Boolean> withdraw(String code); 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.bdgzsomthing.bdgzsomthingDO;
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.materialplanboom.MaterialPlanBoomDO; 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.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; 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.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper; 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.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.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper; 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.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.dataobject.user.AdminUserDO;
import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper; import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper;
import com.chanko.yunxi.mes.module.system.service.user.AdminUserService; 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.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P; import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -40,6 +43,8 @@ import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; 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.controller.admin.materialplan.vo.*;
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.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -90,6 +95,8 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
private TaskDispatchMapper taskDispatchMapper; private TaskDispatchMapper taskDispatchMapper;
@Resource @Resource
private MaterialMapper materialMapper; private MaterialMapper materialMapper;
@Resource
private ProcessBomMapper processBomMapper;
@Override @Override
public Long createMaterialPlan(MaterialPlanSaveReqVO createReqVO) { public Long createMaterialPlan(MaterialPlanSaveReqVO createReqVO) {
// 插入 // 插入
@ -270,7 +277,25 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
@Override @Override
@Transactional @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); TaskDispatchDetailDO detailDO = list.get(0);
MaterialPlanDO planDO = new MaterialPlanDO(); MaterialPlanDO planDO = new MaterialPlanDO();
SerialNumberDO serialNumberDO = new SerialNumberDO(); SerialNumberDO serialNumberDO = new SerialNumberDO();
@ -374,7 +399,7 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
} }
} }
return true; return CommonResult.success(true);
} }
@Override @Override
@ -452,9 +477,9 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
// boomDO.setIsPurYard(5); // boomDO.setIsPurYard(5);
LambdaUpdateWrapper<MaterialPlanBoomDO> wrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<MaterialPlanBoomDO> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(MaterialPlanBoomDO::getId,pageReqVO.getId()) wrapper.eq(MaterialPlanBoomDO::getId,pageReqVO.getId())
.set(MaterialPlanBoomDO::getIsPurYard,5) .set(MaterialPlanBoomDO::getIsPurYard,5);
.set(MaterialPlanBoomDO::getMaterialId,null) // .set(MaterialPlanBoomDO::getMaterialId,null)
.set(MaterialPlanBoomDO::getMatRest,0); // .set(MaterialPlanBoomDO::getMatRest,0);
materialPlanBoomMapper.update(wrapper); materialPlanBoomMapper.update(wrapper);
break; break;
} }

View File

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

View File

@ -92,12 +92,12 @@ public interface ProcessBomService {
HashMap<String,String> getUnitDictData(); HashMap<String,String> getUnitDictData();
void deleteProcessBomDetail(Long id); void deleteProcessBomDetail(Long id);
void deleteProcessBomDetailNew(Long id); CommonResult<Boolean> deleteProcessBomDetailNew(Long id);
ProcessBomDetailDO selectProcessBomDetail(Long id); ProcessBomDetailDO selectProcessBomDetail(Long id);
void updateProcessBomDetail(ProcessBomDetailDO processBomDetailDO); void updateProcessBomDetail(ProcessBomDetailDO processBomDetailDO);
PageResult<ProcessBomDetailDO> getStandardPage(ProcessBomPageReqVO pageReqVO); PageResult<ProcessBomDetailDO> getStandardPage(ProcessBomPageReqVO pageReqVO);
Boolean submit(List<ProcessBomDetailDO> list); CommonResult<Boolean> submit(List<ProcessBomDetailDO> list);
CommonResult<Boolean> withdraw(String code); 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.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.shenhe.ShenheDO; 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.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.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper; 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.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper; 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.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.ProcessBomDetailMapper;
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.purchaseordermakedetail.PurchaseOrderMakeDetailMapper; 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.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper; 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.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.dal.mysql.taskreport.TaskReportMapper;
import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum; import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum; import com.chanko.yunxi.mes.module.heli.enums.YesOrNoEnum;
@ -141,6 +144,8 @@ public class ProcessBomServiceImpl implements ProcessBomService {
@Resource @Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper; private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Resource @Resource
private TaskDispatchMapper taskDispatchMapper;
@Resource
private TaskReportMapper taskReportMapper; private TaskReportMapper taskReportMapper;
@Resource @Resource
private BgMasterLineMapper bgMasterLineMapper; private BgMasterLineMapper bgMasterLineMapper;
@ -148,6 +153,8 @@ public class ProcessBomServiceImpl implements ProcessBomService {
private StorageMapper storageMapper; private StorageMapper storageMapper;
@Resource @Resource
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper; private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
@Resource
private PlanTaskBomMapper planTaskBomMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createProcessBom(ProcessBomSaveReqVO createReqVO) { public Long createProcessBom(ProcessBomSaveReqVO createReqVO) {
@ -287,11 +294,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 (ObjectUtil.isEmpty(materialDO)) {
// throw new RuntimeException("物料编码为:"+o.getMaterialCode() + "物料不存在"); throw new RuntimeException("零件编码:"+o.getMaterialCode() + "不存在,请确认");
// } }
} }
else if (o.getType().equals("")){ else if (o.getType().equals("")){
type = "2"; type = "2";
@ -340,9 +346,13 @@ public class ProcessBomServiceImpl implements ProcessBomService {
throw new RuntimeException("物料名称不能为空!"); throw new RuntimeException("物料名称不能为空!");
} }
processBomDetailDO.setMaterialName(o.getMaterialName()); processBomDetailDO.setMaterialName(o.getMaterialName());
if (type.equals("1")) { if (type.equals("1")) {
// processBomDetailDO.setMaterialId(materialDO.getId());//物料ID if (ObjectUtil.isNotEmpty(materialDO)){
// processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码 processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
}
// processBomDetailDO.setMaterialName(materialDO.getName());//物料名称 // processBomDetailDO.setMaterialName(materialDO.getName());//物料名称
@ -440,7 +450,13 @@ public class ProcessBomServiceImpl implements ProcessBomService {
throw exception(PROCESS_BOM_DETAIL_NOT_EXISTS); 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); ProcessBomDO updateObj = BeanUtils.toBean(updateReqVO, ProcessBomDO.class);
List<ProcessBomDetailDO> processBomDetails = updateReqVO.getProcessBomDetails(); List<ProcessBomDetailDO> processBomDetails = updateReqVO.getProcessBomDetails();
//不论怎么样都要校验这次的数据它图号是否唯一非标准件的名称是否重复规格是否为空 //不论怎么样都要校验这次的数据它图号是否唯一非标准件的名称是否重复规格是否为空
@ -460,6 +476,17 @@ public class ProcessBomServiceImpl implements ProcessBomService {
} }
}); });
for (ProcessBomDetailDO processBomDetail : processBomDetails) { 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.getType().equals("2")){
if (processBomDetail.getCompositionId() == null) { 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()); updateObj.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
List<ProcessBomDetailDO> processBomDetailDOS = getProcessBomDetailListByBomId(updateReqVO.getId()); List<ProcessBomDetailDO> processBomDetailDOS = getProcessBomDetailListByBomId(updateReqVO.getId());
//如果列表不为空就代表之前有过查出本轮新增的和遍历之前的 //如果列表不为空就代表之前有过查出本轮新增的和遍历之前的
@ -547,6 +643,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
// } // }
} }
if (!vo.getMaterialName().equals(po.getMaterialName())) { if (!vo.getMaterialName().equals(po.getMaterialName())) {
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus()); vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
// if(vo.getMemo()!=null){ // if(vo.getMemo()!=null){
// vo.setMemo(vo.getMemo()+"→物料名称由"+po.getMaterialName()+"变为"+vo.getMaterialName()); // vo.setMemo(vo.getMemo()+"→物料名称由"+po.getMaterialName()+"变为"+vo.getMaterialName());
@ -574,6 +671,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
} }
if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) { if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) {
vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus()); vo.setBomEditStatus(BomEditStatusEnum.HAS_EDIT.getStatus());
// if(vo.getMemo()!=null) { // if(vo.getMemo()!=null) {
// vo.setMemo(vo.getMemo() + "→图号由" + po.getBlueprintNo() + "变为" + vo.getBlueprintNo()); // vo.setMemo(vo.getMemo() + "→图号由" + po.getBlueprintNo() + "变为" + vo.getBlueprintNo());
@ -1080,9 +1178,45 @@ public class ProcessBomServiceImpl implements ProcessBomService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @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 processBomDetailDO = selectProcessBomDetail(id);
processBomDetailDO.setDeleted(true); 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()); List<ProcessBomDetailDO> processBomDetailListByBomIdbyid = getProcessBomDetailListByBomId(processBomDetailDO.getBomId());
Integer bomOperateCount = processBomDetailListByBomIdbyid.get(0).getBomOperateCount(); Integer bomOperateCount = processBomDetailListByBomIdbyid.get(0).getBomOperateCount();
processBomDetailDO.setMemo("删除数据"); processBomDetailDO.setMemo("删除数据");
@ -1092,6 +1226,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
processBomDetailDO.setBomEditStatus(BomEditStatusEnum.DELETE.getStatus()); processBomDetailDO.setBomEditStatus(BomEditStatusEnum.DELETE.getStatus());
updateProcessBomDetail(processBomDetailDO); updateProcessBomDetail(processBomDetailDO);
processBomDetailMapper.deleteById(id); processBomDetailMapper.deleteById(id);
return CommonResult.success(true);
} }
@Override @Override
public ProcessBomDetailDO selectProcessBomDetail(Long id){ public ProcessBomDetailDO selectProcessBomDetail(Long id){
@ -1109,7 +1244,12 @@ public class ProcessBomServiceImpl implements ProcessBomService {
} }
@Override @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); ProcessBomDetailDO detailDO = list.get(0);
MaterialPlanDO planDO = new MaterialPlanDO(); MaterialPlanDO planDO = new MaterialPlanDO();
SerialNumberDO serialNumberDO = new SerialNumberDO(); SerialNumberDO serialNumberDO = new SerialNumberDO();
@ -1143,6 +1283,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
boomDO.setMatName(processBomDetailDO.getMaterialName()); boomDO.setMatName(processBomDetailDO.getMaterialName());
boomDO.setDuEmpId(processBomDetailDO.getDuEmpId()); boomDO.setDuEmpId(processBomDetailDO.getDuEmpId());
boomDO.setProjectPlanSubId(processBomDetailDO.getProjectSubId()); boomDO.setProjectPlanSubId(processBomDetailDO.getProjectSubId());
boomDO.setMaterialId(processBomDetailDO.getMaterialId());
boomDO.setMplanStatus(0); boomDO.setMplanStatus(0);
materialPlanBoomDOList.add(boomDO); materialPlanBoomDOList.add(boomDO);
processBomDetailDO.setMplanDate(processBomDetailDO.getBoomArriveDate()); processBomDetailDO.setMplanDate(processBomDetailDO.getBoomArriveDate());
@ -1218,7 +1359,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
// } // }
} }
} }
return true; return CommonResult.success(true);
} }
@Override @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.ProcessDesignTypeEnum;
import com.chanko.yunxi.mes.module.heli.enums.WarningEnum; import com.chanko.yunxi.mes.module.heli.enums.WarningEnum;
import com.chanko.yunxi.mes.module.heli.vo.WarningMessageVO; import com.chanko.yunxi.mes.module.heli.vo.WarningMessageVO;
import lombok.var;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.springframework.security.access.method.P; import org.springframework.security.access.method.P;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.yaml.snakeyaml.events.Event;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDate; import java.time.LocalDate;
@ -564,6 +567,20 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
@Override @Override
public PageResult<ProcessDesignDO> getProcessDesignPages(ProcessDesignPageReqVO pageReqVO) { 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); PageResult<ProcessDesignDO> processDesignDOPageResult = processDesignMapper.getProcessDesignPages(pageReqVO);
List<ProcessDesignDO> list = processDesignDOPageResult.getList(); List<ProcessDesignDO> list = processDesignDOPageResult.getList();
for (ProcessDesignDO processDesignDO : list) { for (ProcessDesignDO processDesignDO : list) {
@ -584,6 +601,8 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId());
queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime); queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime);
queryWrapper.isNotNull(ProcessDesignProgressDO::getEndTime);
queryWrapper.ne(ProcessDesignProgressDO::getEndTime,"");
queryWrapper.last("limit 1"); queryWrapper.last("limit 1");
ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper); ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(processDesignProgressDO)){ if (ObjectUtil.isNotEmpty(processDesignProgressDO)){
@ -607,6 +626,20 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
@Override @Override
public PageResult<ProcessDesignDO> getExportExcel(ProcessDesignPageReqVO pageReqVO) { 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); PageResult<ProcessDesignDO> processDesignDOPageResult = processDesignMapper.getExportExcel(pageReqVO);
List<ProcessDesignDO> list = processDesignDOPageResult.getList(); List<ProcessDesignDO> list = processDesignDOPageResult.getList();
SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
@ -628,6 +661,8 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProcessDesignProgressDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); queryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId());
queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime); queryWrapper.orderByDesc(ProcessDesignProgressDO::getEndTime);
queryWrapper.isNotNull(ProcessDesignProgressDO::getEndTime);
queryWrapper.ne(ProcessDesignProgressDO::getEndTime,"");
queryWrapper.last("limit 1"); queryWrapper.last("limit 1");
ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper); ProcessDesignProgressDO processDesignProgressDO = processDesignProgressMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(processDesignProgressDO)){ if (ObjectUtil.isNotEmpty(processDesignProgressDO)){
@ -644,6 +679,10 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
processDesignDO.setProcessDesignType("3D"); processDesignDO.setProcessDesignType("3D");
}else if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){ }else if ("BLUEPRINT_2D".equals(processDesignDO.getProcessDesignType())){
processDesignDO.setProcessDesignType("2D"); 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<ProcessDesignProgressDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesignDO.getId()); 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.fpuserdetail.FpUserDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO; 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.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.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; 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.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.fpuserdetail.FpUserDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper; 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.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.procedure.ProcedureMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; 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.processbom.ProcessBomMapper;
@ -115,6 +119,10 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
private ProcessBomMapper processBomMapper; private ProcessBomMapper processBomMapper;
@Resource @Resource
private PlanSubMapper planSubMapper; private PlanSubMapper planSubMapper;
@Resource
private PlanTaskBomMapper planTaskBomMapper;
@Resource
private PlanTaskMapper planTaskMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) { public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) {
@ -181,10 +189,25 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
ProcessBomDO processBomDO = processBomMapper.selectById(bomDetailDO.getBomId()); ProcessBomDO processBomDO = processBomMapper.selectById(bomDetailDO.getBomId());
if (ObjectUtil.isNotEmpty(processBomDO)){ if (ObjectUtil.isNotEmpty(processBomDO)){
if (processBomDO.getBomStatus()!=7){ 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); TaskDispatchDO updateObj = BeanUtils.toBean(updateReqVO, TaskDispatchDO.class);
@ -196,7 +219,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
.filter(o -> o.getId() != null) .filter(o -> o.getId() != null)
.collect(Collectors.toList()); .collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(list)){ if (ObjectUtil.isNotEmpty(list)){
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(updateObj.getId()); // TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(updateObj.getId());
for (TaskDispatchDetailDO dispatchDetailDO : list) { for (TaskDispatchDetailDO dispatchDetailDO : list) {
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId()); TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId());
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){ if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
@ -680,7 +703,17 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
.last("LIMIT 1 "); .last("LIMIT 1 ");
}}); }});
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectById(taskDispatchDetailDO.getDispatchId()); 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不允许结束 //校验如果为完成添加逻辑1生产结束 增加管控 - 如果报工数量 = 派工数量 提示报工数量num1 != 派工数量num2不允许结束
if(operate == TaskReportOperateEnum.FINISH ){ 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) => { export const getListZp = async (id: number,projectSubId: number) => {
return await request.get({ url: `/heli/task-dispatch/getListZp?id=`+id+`&projectSubId=`+projectSubId }) 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> <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 @click="goback" size="large" style="margin-left: 5rem"> </el-button>
<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> @click="submitForm('SAVE')" type="primary" :disabled="formLoading" size="large"> </el-button>
<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> @click="submitForm('SUBMIT')" type="success" :disabled="formLoading" size="large"> </el-button>
<el-button <el-button
v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 2" v-if="active != 'detail' && active != 'shenhe' && formData.bomStatus == 2"
@click="submitForm('CANCEL_SUBMIT')" type="danger" :disabled="formLoading" size="large">取消提交</el-button> @click="submitForm('CANCEL_SUBMIT')" type="danger" :disabled="formLoading" size="large">取消提交</el-button>
<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> :disabled="formLoading" size="large">审核</el-button>
</template> </template>
<el-row> <el-row>
@ -604,7 +604,7 @@ const resetForm = () => {
projectSubName: undefined, projectSubName: undefined,
projectSubCode: undefined, projectSubCode: undefined,
version: undefined, version: undefined,
bomStatus: 1, bomStatus:1,
remark: undefined, remark: undefined,
property:undefined, property:undefined,
status: 1, status: 1,
@ -760,9 +760,19 @@ const onAddItem = () => {
} }
const onDeleteItem = async (index) => { const onDeleteItem = async (index) => {
let deletedItems = formData.value.processBomDetails.splice(index, 1); // let deletedItems = formData.value.processBomDetails.splice(index, 1);
let id = deletedItems[0].id; // let id = deletedItems[0].id;
if (id) await ProcessBomApi.deleteProcessBomDetail(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 = () =>{ const printfClick = () =>{
if(formData.value.code == null || formData.value.code == ''){ if(formData.value.code == null || formData.value.code == ''){

View File

@ -65,7 +65,7 @@
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" min-width="160"> <el-table-column fixed="right" label="操作" align="center" min-width="160">
<template #default="scope"> <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>
<el-button link type="primary" @click="openDetail('detail', scope.row.id)"> <el-button link type="primary" @click="openDetail('detail', scope.row.id)">

View File

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

View File

@ -50,15 +50,15 @@
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <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 @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<!-- <el-button--> <el-button
<!-- type="success"--> type="success"
<!-- plain--> plain
<!-- @click="handleExport"--> @click="handleExport"
<!-- :loading="exportLoading"--> :loading="exportLoading"
<!-- v-hasPermi="['heli:shenhe:export']"--> v-hasPermi="['heli:shenhe:export']"
<!-- >--> >
<!-- <Icon icon="ep:download" class="mr-5px" /> 导出--> <Icon icon="ep:download" class="mr-5px" /> 导出
<!-- </el-button>--> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ContentWrap> </ContentWrap>
@ -66,12 +66,17 @@
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <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 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="code" width="200px" />
<el-table-column label="项目名称" align="center" prop="projectName" width="240px"/> <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="customerName" width="240px"/>
<el-table-column label="子项目名称" align="center" prop="projectSubName" width="200px"/> <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="deviceModel" width="200px"/>
<el-table-column label="标准件成本" align="center" prop="biaoZhunJianCost" width="200px"/> <el-table-column label="标准件成本" align="center" prop="biaoZhunJianCost" width="200px"/>
<el-table-column label="材料成本" align="center" prop="cailiaoCost" width="200px"/> <el-table-column label="材料成本" align="center" prop="cailiaoCost" width="200px"/>
@ -113,6 +118,7 @@
import download from '@/utils/download' import download from '@/utils/download'
import * as SaleeOrderCost from '@/api/heli/saleordercost' import * as SaleeOrderCost from '@/api/heli/saleordercost'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import {DICT_TYPE} from "@/utils/dict";
defineOptions({ name: 'Shenhe' }) defineOptions({ name: 'Shenhe' })
const userList = ref<UserApi.UserVO[]>([]) // const userList = ref<UserApi.UserVO[]>([]) //
@ -181,8 +187,8 @@ const handleExport = async () => {
await message.exportConfirm() await message.exportConfirm()
// //
exportLoading.value = true exportLoading.value = true
const data = await ShenheApi.exportShenhe(queryParams) const data = await SaleeOrderCost.exportCost(queryParams)
download.excel(data, '审核.xls') download.excel(data, '项目成本归集.xlsx')
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false