近期修改
This commit is contained in:
parent
d0e96b3722
commit
947a1c1048
@ -9,6 +9,7 @@ import lombok.Getter;
|
||||
*/
|
||||
@Getter
|
||||
public enum ProcessBomStatusEnum {
|
||||
Unedited(0, "未编辑"),
|
||||
|
||||
SAVE(1, "已保存"),
|
||||
SUBMIT(2, "已提交"),
|
||||
|
@ -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 = "撤回")
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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 = "撤回")
|
||||
|
@ -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,
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
|
@ -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 ){
|
||||
|
@ -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 })
|
||||
}
|
||||
|
@ -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 == ''){
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user