近期修改
This commit is contained in:
parent
cc43aebb57
commit
d0e96b3722
@ -82,6 +82,10 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode PROCESS_BOM_CODE_IS_EMPTY= new ErrorCode(1_006_005, "工艺bom编码为空");
|
||||
ErrorCode PROCESS_BOM_DETAIL_BLUE_PRINT_NO_REPEAT = new ErrorCode(1_006_006, "工艺bom明细图号重复");
|
||||
ErrorCode PROCESS_BOM_DETAIL_MATERIAL_NAME_IS_NULL = new ErrorCode(1_006_007, "工艺bom明细物料名称为空");
|
||||
ErrorCode PROCESS_BOM_DETAIL_TYPE_IS_NULL = new ErrorCode(1_006_013, "工艺bom明细是否标准件为空");
|
||||
ErrorCode PROCESS_BOM_DETAIL_AMOUNT_IS_NULL = new ErrorCode(1_006_014, "工艺bom明细数量为空");
|
||||
ErrorCode PROCESS_BOM_DETAIL_UNIT_IS_NULL = new ErrorCode(1_006_015, "工艺bom明细单位为空");
|
||||
ErrorCode PROCESS_BOM_DETAIL_AMOUNT = new ErrorCode(1_006_016, "工艺bom明细数量必须大于0");
|
||||
ErrorCode PROCESS_BOM_DETAIL_MATERIAL_AMOUNT_ILLGAL = new ErrorCode(1_006_0012, "工艺bom明细数量必须为数字!");
|
||||
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_MATERIAL_NAME_IS_NULL = new ErrorCode(1_006_008, "非标准件工艺bom明细物料名称为空");
|
||||
ErrorCode PROCESS_BOM_DETAIL_UNSTANDARD_MATERIAL_NAME_IS_REPEAT= new ErrorCode(1_006_009, "非标准件工艺bom明细物料名称重复");
|
||||
|
||||
@ -13,7 +13,8 @@ public enum ProcessDesignTypeEnum {
|
||||
BLUEPRINT_FOUNDRY_TECHNOLOGY("铸造工艺"),
|
||||
BLUEPRINT_3D("3D图纸"),
|
||||
BLUEPRINT_2D("2D图纸"),
|
||||
BLUEPRINT_WORKBLANK("毛坯图纸");
|
||||
BLUEPRINT_WORKBLANK("毛坯图纸"),
|
||||
CASTING_DRAWING("铸件图工艺");
|
||||
|
||||
private String description;
|
||||
|
||||
|
||||
@ -180,19 +180,19 @@ public class DeliverOrderController {
|
||||
return success(deliverOrderService.getDeliverOrderSubListByDeliveryOrderId(deliveryOrderId));
|
||||
}
|
||||
|
||||
@GetMapping("/getListYf")
|
||||
@Operation(summary = "获得运费成本")
|
||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
|
||||
public CommonResult<List<DeliverOrderDO>> getListYf(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
List<DeliverOrderDO> deliverOrderDO = deliverOrderService.getListYf(id,projectSubId);
|
||||
return success( deliverOrderDO);
|
||||
}
|
||||
// @GetMapping("/getListYf")
|
||||
// @Operation(summary = "获得运费成本")
|
||||
// @PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
|
||||
// public CommonResult<List<DeliverOrderDO>> getListYf(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
// List<DeliverOrderDO> deliverOrderDO = deliverOrderService.getListYf(id,projectSubId);
|
||||
// return success( deliverOrderDO);
|
||||
// }
|
||||
@GetMapping("/getListYfDetails")
|
||||
@Operation(summary = "获得运费成本明细")
|
||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
|
||||
public CommonResult<List<DeliverOrderDO>> getListYfDetails(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
List<DeliverOrderDO> deliverOrderDO = deliverOrderService.getListYfDetails(id,projectSubId);
|
||||
return success( deliverOrderDO);
|
||||
public CommonResult<List<DeliverOrderSubDO>> getListYfDetails(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
List<DeliverOrderSubDO> deliverOrderSubDO = deliverOrderService.getListYfDetails(id,projectSubId);
|
||||
return success(deliverOrderSubDO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.Material
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -108,6 +109,13 @@ public class MaterialPlanController {
|
||||
PageResult<MaterialPlanDO> pageResult = materialPlanService.getMaterialPlanPages(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, MaterialPlanRespVO.class));
|
||||
}
|
||||
@DeleteMapping("/delMaterialPlanBoom")
|
||||
@Operation(summary = "删除物料需求计划")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('heli:material-plan:delete')")
|
||||
public CommonResult<Boolean> delMaterialPlanBoom(@RequestParam("id") Long id, @Param("projectMaterialPlanNo") String projectMaterialPlanNo) {
|
||||
return materialPlanService.delMaterialPlanBoom(id,projectMaterialPlanNo);
|
||||
}
|
||||
@DeleteMapping("/delMaterialPlan")
|
||||
@Operation(summary = "删除物料需求计划")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@ -115,7 +123,6 @@ public class MaterialPlanController {
|
||||
public CommonResult<Boolean> delMaterialPlan(@RequestParam("id") Long id) {
|
||||
return materialPlanService.delMaterialPlan(id);
|
||||
}
|
||||
|
||||
@GetMapping("/getPartPage")
|
||||
@Operation(summary = "获得零件物料需求计划分页")
|
||||
@PreAuthorize("@ss.hasPermission('heli:material-plan:query')")
|
||||
|
||||
@ -79,4 +79,5 @@ public class MaterialPlanPageReqVO extends PageParam {
|
||||
private String blueprintNo;
|
||||
@Schema(description = "工序")
|
||||
private String procedureName;
|
||||
|
||||
}
|
||||
@ -48,8 +48,8 @@ public class PlanController {
|
||||
@Operation(summary = "更新生产计划")
|
||||
@PreAuthorize("@ss.hasPermission('heli:plan:update')")
|
||||
public CommonResult<Boolean> updatePlan(@Valid @RequestBody PlanSaveReqVO updateReqVO) {
|
||||
planService.updatePlan(updateReqVO);
|
||||
return success(true);
|
||||
|
||||
return planService.updatePlan(updateReqVO);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@ -104,5 +104,12 @@ public class PlanController {
|
||||
ExcelUtils.write(response, "生产计划.xls", "数据", PlanRespVO.class,
|
||||
BeanUtils.toBean(list, PlanRespVO.class));
|
||||
}
|
||||
@GetMapping("/verification")
|
||||
@Operation(summary = "获得生产计划")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('heli:plan:query')")
|
||||
public CommonResult<Boolean> verification(@RequestParam("id") Long id,@RequestParam("type") String type) {
|
||||
|
||||
return planService.verification(id,type);
|
||||
}
|
||||
}
|
||||
|
||||
@ -144,5 +144,13 @@ public class PlanRespVO {
|
||||
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime orderTime;
|
||||
@Schema(description = "工艺负责人")
|
||||
private Long castOwner;
|
||||
|
||||
@Schema(description = "工艺开始日期")
|
||||
private LocalDateTime castStartDate;
|
||||
|
||||
@Schema(description = "工艺结束日期")
|
||||
private LocalDateTime castEndDate;
|
||||
|
||||
}
|
||||
@ -36,6 +36,17 @@ public class PlanSaveReqVO {
|
||||
|
||||
@Schema(description = "工艺结束日期")
|
||||
private LocalDateTime craftEndDate;
|
||||
@Schema(description = "是否需要铸件图:1表示需要,0表示不需要")
|
||||
private Integer hasCast;
|
||||
|
||||
@Schema(description = "铸件图负责人")
|
||||
private String castOwner;
|
||||
|
||||
@Schema(description = "铸件图开始日期")
|
||||
private LocalDateTime castStartDate;
|
||||
|
||||
@Schema(description = "铸件图结束日期")
|
||||
private LocalDateTime castEndDate;
|
||||
|
||||
@Schema(description = "工艺流程数组信息[{'id':1,'sdate':'','edate':'','owner':'','description':''}]")
|
||||
private String craftContent;
|
||||
|
||||
@ -159,7 +159,14 @@ public class ProcessBomController {
|
||||
PageResult<ProcessBomDetailDO> pageResult = processBomService.getProcessBomPageNew(pageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
@DeleteMapping("/delMaterialPlan")
|
||||
@Operation(summary = "删除工艺bom明细")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('heli:process-bom:delete')")
|
||||
public CommonResult<Boolean> delMaterialPlan(@RequestParam("id") Long id,@RequestParam("projectMaterialPlanNo") String projectMaterialPlanNo) {
|
||||
|
||||
return processBomService.delMaterialPlan(id,projectMaterialPlanNo);
|
||||
}
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出工艺bom Excel")
|
||||
@PreAuthorize("@ss.hasPermission('system:user:import')")
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
@ -60,7 +61,20 @@ public class ProcessDesignPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "工艺负责人")
|
||||
private String craftOwnerName;
|
||||
@Schema(description = "工艺负责人")
|
||||
private String castOwnerName;
|
||||
@Schema(description = "工艺负责人")
|
||||
private LocalDateTime castStartDate;
|
||||
@Schema(description = "工艺负责人")
|
||||
private LocalDateTime castEndDate;
|
||||
@TableField(exist = false)
|
||||
private Integer hasCast;
|
||||
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime craftStartDate;
|
||||
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime craftEndDate;
|
||||
@Schema(description = "3D负责人")
|
||||
private String threeDimOwnerName;
|
||||
|
||||
|
||||
@ -87,7 +87,17 @@ public class ProcessDesignRespVO {
|
||||
|
||||
@Schema(description = "工艺结束日期")
|
||||
private LocalDateTime craftEndDate;
|
||||
@Schema(description = "是否需要铸件图:1表示需要,0表示不需要")
|
||||
private Integer hasCast;
|
||||
|
||||
@Schema(description = "铸件图负责人")
|
||||
private String castOwnerName;
|
||||
|
||||
@Schema(description = "铸件图开始日期")
|
||||
private LocalDateTime castStartDate;
|
||||
|
||||
@Schema(description = "铸件图结束日期")
|
||||
private LocalDateTime castEndDate;
|
||||
@Schema(description = "毛坯结束日期")
|
||||
private LocalDateTime blankDate;
|
||||
@Schema(description = "毛坯开始日期")
|
||||
|
||||
@ -178,16 +178,16 @@ public class ProjectOrderController {
|
||||
BigDecimal standardPartsCost;
|
||||
standardPartsCost=processBomService.StandardPartsCost(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setBiaoZhunJianCost(standardPartsCost);
|
||||
//材料成本
|
||||
BigDecimal materialCost;
|
||||
materialCost=processBomService.materialCost(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setCailiaoCost(materialCost);
|
||||
|
||||
|
||||
//外协加工费
|
||||
BigDecimal outsourcedProcessingFee;
|
||||
outsourcedProcessingFee=processBomService.outsourcedProcessingFee(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setWaixeiCost(outsourcedProcessingFee);
|
||||
|
||||
//材料成本
|
||||
BigDecimal materialCost;
|
||||
materialCost=processBomService.materialCost(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setCailiaoCost(materialCost.add(outsourcedProcessingFee));
|
||||
//内部工时费
|
||||
BigDecimal internalLaborCost;
|
||||
internalLaborCost=processBomService.internalLaborCost(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
@ -198,34 +198,10 @@ public class ProjectOrderController {
|
||||
projectOrderDO.setZpCost(assemblyLaborCost);
|
||||
|
||||
//运费成本
|
||||
List<DeliverOrderDO> deliverOrderDO = deliverOrderService.getListYf(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
if (deliverOrderDO!=null&&deliverOrderDO.size()>0){
|
||||
BigDecimal totalAmount = deliverOrderDO.stream()
|
||||
.map(deliverOrderSubDO -> deliverOrderSubDO.getYunFeiMoney() != null ? deliverOrderSubDO.getYunFeiMoney() : BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
projectOrderDO.setYunFeiCost(totalAmount);
|
||||
}else {
|
||||
projectOrderDO.setYunFeiCost(BigDecimal.ZERO);
|
||||
}
|
||||
// List<TaskDispatchDO> list= taskDispatchService.getListJg(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
// if (list!=null&&list.size()>0){
|
||||
// BigDecimal totalAmount = list.stream()
|
||||
// .map(TaskDispatchDO -> TaskDispatchDO.getZanGuMoney() != null ?new BigDecimal(TaskDispatchDO.getZanGuMoney()) : BigDecimal.ZERO)
|
||||
// .reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
// projectOrderDO.setJiaGongShiCost(totalAmount);
|
||||
// }else {
|
||||
// projectOrderDO.setJiaGongShiCost(BigDecimal.ZERO);
|
||||
// }
|
||||
BigDecimal yunFeiCost;
|
||||
yunFeiCost = deliverOrderService.getListYf(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
projectOrderDO.setYunFeiCost(yunFeiCost);
|
||||
|
||||
// List<PurchaseOrderDO> list2 =purchaseOrderService.getListqt(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
|
||||
// if (list2!=null&&list2.size()>0){
|
||||
// BigDecimal totalAmount = list2.stream()
|
||||
// .map(PurchaseOrderDO -> PurchaseOrderDO.getCaiGouMoney() != null ?PurchaseOrderDO.getCaiGouMoney() : BigDecimal.ZERO)
|
||||
// .reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
// projectOrderDO.setQitaCost(totalAmount);
|
||||
// }else {
|
||||
// projectOrderDO.setQitaCost(BigDecimal.ZERO);
|
||||
// }
|
||||
BigDecimal sum = projectOrderDO.getYunFeiCost().add(projectOrderDO.getCailiaoCost()).add(projectOrderDO.getBiaoZhunJianCost()).add(projectOrderDO.getNeibuCost()).add(projectOrderDO.getWaixeiCost().add(projectOrderDO.getZpCost()));
|
||||
projectOrderDO.setSumCost(sum);
|
||||
}
|
||||
|
||||
@ -263,5 +263,11 @@ public class TaskDispatchController {
|
||||
List<TaskDispatchDO> list= taskDispatchService.getListZp(id,projectSubId);
|
||||
return success( list);
|
||||
}
|
||||
|
||||
@GetMapping("/getListCl")
|
||||
@Operation(summary = "获得材料成本")
|
||||
@PreAuthorize("@ss.hasPermission('heli:deliver-order:query')")
|
||||
public CommonResult<List<TaskDispatchDO>> getListCl(@RequestParam("id") Long id, @RequestParam("projectSubId") Long projectSubId ) {
|
||||
List<TaskDispatchDO> list= taskDispatchService.getListCl(id,projectSubId);
|
||||
return success( list);
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,4 +104,7 @@ public class DeliverOrderSubDO extends BaseDO {
|
||||
private Integer remAmount;
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime deliverDate;
|
||||
@TableField(exist = false)
|
||||
private String deliverPersonName;
|
||||
|
||||
}
|
||||
|
||||
@ -64,6 +64,26 @@ public class PlanDO extends BaseDO {
|
||||
* 工艺结束日期
|
||||
*/
|
||||
private LocalDateTime craftEndDate;
|
||||
|
||||
/**
|
||||
* 是否需要铸件:1表示需要,0表示不需要
|
||||
*
|
||||
* 枚举 {@link TODO heli_common_is_or_not 对应的类}
|
||||
*/
|
||||
private Integer hasCast;
|
||||
/**
|
||||
* 铸件图负责人
|
||||
*/
|
||||
@TableField(fill = FieldFill.UPDATE)
|
||||
private Long castOwner;
|
||||
/**
|
||||
* 铸件图开始日期
|
||||
*/
|
||||
private LocalDateTime castStartDate;
|
||||
/**
|
||||
*铸件图结束日期
|
||||
*/
|
||||
private LocalDateTime castEndDate;
|
||||
/**
|
||||
* 工艺流程数组信息[{'id':1,'sdate':'','edate':'','owner':'','description':''}]
|
||||
*/
|
||||
|
||||
@ -97,6 +97,8 @@ public class ProcessDesignDO extends BaseDO {
|
||||
|
||||
@TableField(exist = false)
|
||||
private String craftOwnerName;
|
||||
@TableField(exist = false)
|
||||
private Integer hasCast;
|
||||
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime craftStartDate;
|
||||
@ -112,7 +114,12 @@ public class ProcessDesignDO extends BaseDO {
|
||||
private Date lastDate;
|
||||
@TableField(exist = false)
|
||||
private String blankOwnerName;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String castOwnerName;
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime castStartDate;
|
||||
@TableField(exist = false)
|
||||
private LocalDateTime castEndDate;
|
||||
@TableField(exist = false)
|
||||
private String progressBlank;
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@ -35,4 +36,16 @@ public interface DeliverOrderSubMapper extends BaseMapperX<DeliverOrderSubDO> {
|
||||
return selectOne(query);
|
||||
}
|
||||
|
||||
default List<DeliverOrderSubDO> getListYf(Long projectSubId){
|
||||
MPJLambdaWrapper<DeliverOrderSubDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(DeliverOrderSubDO.class)
|
||||
.select("a.deliver_date as deliverDate","b.nickName as deliverPersonName")
|
||||
.leftJoin(DeliverOrderDO.class,"a",DeliverOrderDO::getId,DeliverOrderSubDO::getDeliveryOrderId)
|
||||
.leftJoin(AdminUserDO.class,"b",AdminUserDO::getId,DeliverOrderDO::getDeliverPerson)
|
||||
.eq(DeliverOrderSubDO::getSaleOrderSubId,projectSubId)
|
||||
.eq(DeliverOrderSubDO::getCategory,"DELIVER_LIST")
|
||||
.eq(DeliverOrderDO::getDeliverStatus,"2");
|
||||
return selectList(query);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -10,12 +10,14 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
|
||||
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@ -48,12 +50,14 @@ public interface MaterialPlanMapper extends BaseMapperX<MaterialPlanDO> {
|
||||
MPJLambdaWrapper<MaterialPlanDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(MaterialPlanDO.class)
|
||||
.leftJoin(MaterialPlanBoomDO.class, "b", MaterialPlanBoomDO::getProjectMaterialPlanId, MaterialPlanDO::getId)
|
||||
.leftJoin(ProcessBomDetailDO.class,"p",ProcessBomDetailDO::getId, MaterialPlanBoomDO::getBoomDetailId)
|
||||
.groupBy(MaterialPlanDO::getId)
|
||||
.orderByDesc(MaterialPlanDO::getCreateTime);
|
||||
query.like(!StringUtils.isEmpty(pageReqVO.getProjectMaterialPlanNo()), MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), MaterialPlanDO::getName, pageReqVO.getProjectSubName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getMaterialName()), MaterialPlanBoomDO::getMatName, pageReqVO.getMaterialName())
|
||||
.like(!StringUtils.isEmpty(pageReqVO.getBlueprintNo()), ProcessBomDetailDO::getBlueprintNo, pageReqVO.getBlueprintNo())
|
||||
.eq(!StringUtils.isEmpty(pageReqVO.getMatType()), MaterialPlanDO::getMatType, pageReqVO.getMatType());
|
||||
if (pageReqVO.getMatPlanDate() != null) {
|
||||
query.between( MaterialPlanDO::getMatPlanDate, pageReqVO.getMatPlanDate()[0], pageReqVO.getMatPlanDate()[1]);
|
||||
@ -77,6 +81,10 @@ public interface MaterialPlanMapper extends BaseMapperX<MaterialPlanDO> {
|
||||
|
||||
return selectPage(pageReqVO, query);
|
||||
}
|
||||
|
||||
void delMaterialPlan(@Param("id") Long id);
|
||||
|
||||
void delMaterialPlanBoom(@Param("bomDetailId")Long bomDetailId, @Param("procedureId")Long procedureId);
|
||||
// default PageResult<MaterialPlanDO> selectPage(MaterialPlanPageReqVO reqVO) {
|
||||
// return selectPage(reqVO, new LambdaQueryWrapperX<MaterialPlanDO>()
|
||||
// .eqIfPresent(MaterialPlanDO::getId, reqVO.getId())
|
||||
|
||||
@ -84,12 +84,14 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
||||
|
||||
.select("bc.`name` as compositionName","b.`composition_id` as compositionId")
|
||||
.select("ma.brief as customerBriefName,ma.project_name as projectName,ma.name as projectSubName,ma.project_id as projectId")
|
||||
.select("m.name as materialName")
|
||||
.leftJoin(MaterialPlanDO.class,"ma",MaterialPlanDO::getId, MaterialPlanBoomDO::getProjectMaterialPlanId)
|
||||
// .leftJoin(StorageMaterialDO.class,"sm",StorageMaterialDO::getId, MaterialPlanDetailDO::getMaterialId)
|
||||
.leftJoin(ProcessBomDetailDO.class, "b", ProcessBomDetailDO::getId, MaterialPlanBoomDO::getBoomDetailId)
|
||||
.leftJoin(CompositionDO.class, "bc", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
|
||||
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
|
||||
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
|
||||
.leftJoin(MaterialDO.class,"m",MaterialDO::getId, MaterialPlanBoomDO::getMaterialId)
|
||||
.eq(MaterialPlanDO::getMatType,0)
|
||||
.in(MaterialPlanBoomDO::getIsPurYard,Arrays.asList(0,5))
|
||||
.disableSubLogicDel()
|
||||
@ -152,6 +154,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
||||
query.selectAll(MaterialPlanBoomDO.class)
|
||||
.select("a.nickname as nickname,b.spec as boomSpec,g.name as procedureName,bc.`name` as compositionName")
|
||||
.select("m.code as matCode,m.spec as matSpec,m.unit as matUnit")
|
||||
.select("b.blueprint_no as blueprintNo")
|
||||
.leftJoin(AdminUserDO.class, "a", AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
|
||||
.leftJoin(ProcessBomDetailDO.class, "b", ProcessBomDetailDO::getId, MaterialPlanBoomDO::getBoomDetailId)
|
||||
.leftJoin(CompositionDO.class, "bc", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
|
||||
@ -186,8 +189,10 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
||||
default PageResult<MaterialPlanBoomDO> getStandardPartsPages(MaterialPlanPageReqVO pageReqVO){
|
||||
MPJLambdaWrapper<MaterialPlanBoomDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(MaterialPlanBoomDO.class)
|
||||
.select("p.project_name as projectName","p.project_id as projectId","p.name as projectSubName","mat.material_id as matId","m.code as materialName","m.name as materialNames")
|
||||
.select("p.project_name as projectName","p.project_id as projectId","p.name as projectSubName","m.code as materialName")
|
||||
.select("IFNULL(mat.pick_amount, t.boom_amount) AS pickAmount")
|
||||
.select("IFNULL(mater.name, m.name) AS materialNames")
|
||||
.select("IFNULL(mater.id, mat.material_id) AS matId")
|
||||
.select("w.wh_name as whName","r.rg_name as rgName","pn.pn_name as pnName")
|
||||
.select("d.spec as boomSpec","d.blueprint_no as blueprintNo","d.unit as boomUnit","DATE_FORMAT(t.boom_arrive_date, '%Y-%m-%d') AS boomArriveDates")
|
||||
.leftJoin(MaterialPlanDO.class, "p", MaterialPlanDO::getId,MaterialPlanBoomDO::getProjectMaterialPlanId)
|
||||
@ -195,6 +200,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
|
||||
.leftJoin(ProcessBomDetailDO.class,"d",ProcessBomDetailDO::getId,MaterialPlanBoomDO::getBoomDetailId)
|
||||
.leftJoin("project_mat_req_detail mat on (t.id=mat.project_material_plan_detail_id and mat.deleted=0 and mat.tenant_id = 2)")
|
||||
.leftJoin("base_material m ON (m.id = mat.material_id and m.tenant_id = 2) ")
|
||||
.leftJoin(MaterialDO.class,"mater", MaterialDO::getId,MaterialPlanBoomDO::getMaterialId)
|
||||
.leftJoin("wms_wh w ON (w.id = mat.wh_id and w.tenant_id = 2) ")
|
||||
.leftJoin("wms_rg r ON (r.id = mat.rg_id and r.tenant_id = 2) ")
|
||||
.leftJoin("wms_pn pn ON (pn.id = mat.pn_id and pn.tenant_id = 2) ")
|
||||
|
||||
@ -256,7 +256,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
||||
.groupBy(ProcessBomDetailDO::getId)
|
||||
.disableSubLogicDel();
|
||||
query.like(!ObjectUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode,pageReqVO.getProjectCode())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectName()),ProjectOrderDO::getProjectName,pageReqVO.getProjectName())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectName()),ProjectOrderDO::getProjectNameSim,pageReqVO.getProjectName())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getTaskNo()),PlanTaskDO::getTaskNo,pageReqVO.getTaskNo())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectSubName()),ProjectOrderSubDO::getName,pageReqVO.getProjectSubName())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectSubCode()),ProjectOrderSubDO::getNameSim,pageReqVO.getProjectSubCode())
|
||||
@ -292,7 +292,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
|
||||
.groupBy(ProcessBomDetailDO::getId)
|
||||
.disableSubLogicDel();
|
||||
query.like(!ObjectUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode,pageReqVO.getProjectCode())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectName()),ProjectOrderDO::getProjectName,pageReqVO.getProjectName())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectName()),ProjectOrderDO::getProjectNameSim,pageReqVO.getProjectName())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getTaskNo()),PlanTaskDO::getTaskNo,pageReqVO.getTaskNo())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectSubName()),ProjectOrderSubDO::getName,pageReqVO.getProjectSubName())
|
||||
.like(!ObjectUtils.isEmpty(pageReqVO.getProjectSubCode()),ProjectOrderSubDO::getNameSim,pageReqVO.getProjectSubCode())
|
||||
|
||||
@ -197,4 +197,12 @@ public interface ProcessBomMapper extends BaseMapperX<ProcessBomDO> {
|
||||
BigDecimal internalLaborCost(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
|
||||
|
||||
BigDecimal assemblyLaborCost(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
|
||||
|
||||
BigDecimal inspection(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
|
||||
|
||||
BigDecimal finalInspection(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
|
||||
|
||||
BigDecimal inspection1(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
|
||||
|
||||
void delMaterialPlan(@Param("id")Long id);
|
||||
}
|
||||
|
||||
@ -31,6 +31,7 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
|
||||
query.selectAll(ProcessDesignDO.class)
|
||||
.select("a.status as planStatus")
|
||||
.select("a.plan_no as planCode","a.has_craft as hasCraft", "a.craft_start_date as craftStartDate", "a.craft_end_date as craftEndDate", "e.name as customerName")
|
||||
.select( "a.cast_start_date as castStartDate", "a.cast_end_date as castEndDate","u6.nickname as castOwnerName","a.has_cast as hasCast")
|
||||
.select("d.code as projectCode", "d.project_name as projectName", "d.business_line as businessLine", "d.property","d.is_urgency as isUrgency")
|
||||
.select("u1.nickname as projectOwnerName", "u2.nickname as craftOwnerName")
|
||||
.select("b.blank_date as blankDate","b.start_blank_date as startBlankDate", "b.two_dim_date as twoDimDate","b.start_two_dim_date as startTwoDimDate", "b.three_dim_date as threeDimDate", "b.start_three_dim_date as startThreeDimDate")
|
||||
@ -47,6 +48,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(AdminUserDO.class, "u6", AdminUserDO::getId, PlanDO::getCastOwner)
|
||||
|
||||
.leftJoin("(select progress,process_design_id,blueprint_link FROM pro_process_design_progress where id in (select max(id) FROM pro_process_design_progress GROUP BY process_design_id) ) z on z.process_design_id = t.id")
|
||||
.disableSubLogicDel();
|
||||
if(reqVO.getPgType()!=null && reqVO.getPgType() == 0){
|
||||
@ -66,6 +69,7 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
|
||||
.like(!StringUtils.isEmpty(reqVO.getThreeDimOwnerName()), "u5.nickname", reqVO.getThreeDimOwnerName())
|
||||
.like(!StringUtils.isEmpty(reqVO.getTwoDimOwnerName()), "u4.nickname", reqVO.getTwoDimOwnerName())
|
||||
.like(!StringUtils.isEmpty(reqVO.getBlankOwnerName()), "u3.nickname", reqVO.getBlankOwnerName())
|
||||
.like(!StringUtils.isEmpty(reqVO.getCastOwnerName()), "u6.nickname", reqVO.getCastOwnerName())
|
||||
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
|
||||
.eq(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType())
|
||||
.in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList())
|
||||
@ -114,7 +118,7 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
|
||||
.select("u1.nickname as projectOwnerName", "u2.nickname as craftOwnerName")
|
||||
.select("b.blank_date as blankDate", "b.two_dim_date as twoDimDate", "b.three_dim_date as threeDimDate")
|
||||
.select("b.start_blank_date as startBlankDate", "b.start_two_dim_date as startTwoDimDate", "b.start_three_dim_date as startThreeDimDate")
|
||||
|
||||
.select( "a.cast_start_date as castStartDate", "a.cast_end_date as castEndDate","u6.nickname as castOwnerName","a.has_cast as hasCast")
|
||||
.select("u3.nickname as blankOwnerName", "u4.nickname as twoDimOwnerName", "u5.nickname as threeDimOwnerName")
|
||||
.select("c.name as projectSubName", "b.project_sub_code as projectSubCode")
|
||||
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessDesignDO::getPlanId)
|
||||
@ -127,6 +131,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(AdminUserDO.class, "u6", AdminUserDO::getId, PlanDO::getCastOwner)
|
||||
|
||||
.eq(ProcessDesignDO::getId, id)
|
||||
.last("LIMIT 1")
|
||||
.disableSubLogicDel();
|
||||
@ -216,11 +222,11 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
|
||||
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())
|
||||
.or()
|
||||
.apply("u3.nickname = {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()
|
||||
.apply("u4.nickname = {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()
|
||||
.apply("u5.nickname = {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()));
|
||||
}
|
||||
return selectPage(reqVO, query);
|
||||
}
|
||||
@ -276,13 +282,13 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
|
||||
;
|
||||
|
||||
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 = {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()
|
||||
.apply("u4.nickname = {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()
|
||||
.apply("u5.nickname = {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()));
|
||||
}
|
||||
System.out.println(query.getSqlSelect()); // 查看实际执行的 SQL
|
||||
return selectPage(reqVO, query);
|
||||
|
||||
@ -785,4 +785,14 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
|
||||
}
|
||||
|
||||
BigDecimal assemblyLaborCost(@Param("id") Long id);
|
||||
|
||||
BigDecimal bubbleFees(@Param("bomDetailId") Long bomDetailId, @Param("procedureId") Long procedureId);
|
||||
|
||||
BigDecimal materialCost(@Param("id") Long id);
|
||||
|
||||
BigDecimal internalLaborCost(@Param("id") Long id);
|
||||
|
||||
BigDecimal finalInspection(@Param("id")Long id, @Param("projectSubId")Long projectSubId);
|
||||
|
||||
BigDecimal processInspection(@Param("id") Long id);
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchPageReqVO;
|
||||
@ -185,4 +186,18 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
|
||||
return selectList(query);
|
||||
}
|
||||
|
||||
default List<TaskDispatchDO> getListCl(Long id, Long projectSubId){
|
||||
MPJLambdaWrapper<TaskDispatchDO> query = new MPJLambdaWrapper<>();
|
||||
query.selectAll(TaskDispatchDO.class)
|
||||
.select("p.material_name as materialName","z.name as compositionName","p.spec as spec","p.amount*s.amount as amount")
|
||||
.leftJoin(ProcessBomDetailDO.class, "p", ProcessBomDetailDO::getId,TaskDispatchDO::getBomDetailId)
|
||||
.leftJoin(CompositionDO.class, "z", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
|
||||
.leftJoin(ProjectOrderSubDO.class,"s", ProjectOrderSubDO::getId, TaskDispatchDO::getProjectSubId);
|
||||
query.eq(TaskDispatchDO::getProjectId, id)
|
||||
.eq(TaskDispatchDO::getProjectSubId,projectSubId)
|
||||
.eq(TaskDispatchDO::getDispatchType,"PRODUCTION");
|
||||
|
||||
return selectList(query);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -397,14 +397,20 @@ public class CrossOrderManager {
|
||||
List<Long> existProjectSubIdList = processDesignDOList.stream().map(ProcessDesignDO::getProjectSubId).collect(Collectors.toList());
|
||||
List<Long> needSavedProjectSubIdList = projectSubIdList.stream().filter(projectSubId -> !existProjectSubIdList.contains(projectSubId)).collect(Collectors.toList());
|
||||
// 如未插入过 则生成铸造工艺
|
||||
if(existProjectSubIdList.isEmpty()){
|
||||
ProcessDesignSaveReqVO saveReqVO = new ProcessDesignSaveReqVO();
|
||||
saveReqVO.setPlanId(planId)
|
||||
.setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name())
|
||||
.setStatus(ValidStatusEnum.VALID.getCode())
|
||||
.setProjectId(projectId);
|
||||
processDesignService.createProcessDesign(saveReqVO);
|
||||
}
|
||||
// if(existProjectSubIdList.isEmpty()){
|
||||
// ProcessDesignSaveReqVO saveReqVO = new ProcessDesignSaveReqVO();
|
||||
// saveReqVO.setPlanId(planId)
|
||||
// .setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name())
|
||||
// .setStatus(ValidStatusEnum.VALID.getCode())
|
||||
// .setProjectId(projectId);
|
||||
// processDesignService.createProcessDesign(saveReqVO);
|
||||
// ProcessDesignSaveReqVO casting = new ProcessDesignSaveReqVO();
|
||||
// casting.setPlanId(planId)
|
||||
// .setProcessDesignType(ProcessDesignTypeEnum.CASTING_DRAWING.name())
|
||||
// .setStatus(ValidStatusEnum.VALID.getCode())
|
||||
// .setProjectId(projectId);
|
||||
// processDesignService.createProcessDesign(casting);
|
||||
// }
|
||||
// 按每个子项目生成工艺设计
|
||||
if(!needSavedProjectSubIdList.isEmpty()){
|
||||
LocalDateTime startTime = LocalDateTime.now();
|
||||
@ -417,6 +423,8 @@ public class CrossOrderManager {
|
||||
.setProjectId(projectId);
|
||||
processDesignService.createProcessDesign(threeD);
|
||||
|
||||
|
||||
|
||||
ProcessDesignSaveReqVO twoD = new ProcessDesignSaveReqVO();
|
||||
twoD.setPlanId(planId)
|
||||
.setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_2D.name())
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.deliverorder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.deliverorder.vo.*;
|
||||
@ -71,7 +72,7 @@ public interface DeliverOrderService {
|
||||
|
||||
|
||||
|
||||
List<DeliverOrderDO> getListYf(Long id, Long projectSubId);
|
||||
BigDecimal getListYf(Long id, Long projectSubId);
|
||||
|
||||
List<DeliverOrderDO> getListYfDetails(Long id, Long projectSubId);
|
||||
List<DeliverOrderSubDO> getListYfDetails(Long id, Long projectSubId);
|
||||
}
|
||||
|
||||
@ -388,78 +388,22 @@ public class DeliverOrderServiceImpl implements DeliverOrderService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeliverOrderDO> getListYf(Long id, Long projectSubId) {
|
||||
LambdaQueryWrapper<DeliverOrderDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.like(DeliverOrderDO::getSaleOrderIds,id);
|
||||
wrapper.eq(DeliverOrderDO::getDeliverStatus,2);
|
||||
wrapper.orderByDesc(DeliverOrderDO::getDeliverDate);
|
||||
List<DeliverOrderDO> deliverOrderDOS = deliverOrderMapper.selectList(wrapper);
|
||||
LambdaQueryWrapper<ProjectOrderSubDO> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||
queryWrapper1.eq(ProjectOrderSubDO::getProjectOrderId,id);
|
||||
List<ProjectOrderSubDO> projectOrderSubDOS = projectOrderSubMapper.selectList(queryWrapper1);
|
||||
if (deliverOrderDOS!=null&&deliverOrderDOS.size()>0&&projectOrderSubDOS!=null&&projectOrderSubDOS.size()>0){
|
||||
List<Long> ids = projectOrderSubDOS.stream()
|
||||
.map(ProjectOrderSubDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
for (DeliverOrderDO deliverOrderDO : deliverOrderDOS) {
|
||||
LambdaQueryWrapper<DeliverOrderSubDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(DeliverOrderSubDO::getDeliveryOrderId,deliverOrderDO.getId());
|
||||
queryWrapper.in(DeliverOrderSubDO::getSaleOrderSubId,ids);
|
||||
List<DeliverOrderSubDO> deliverOrderSubDOS = deliverOrderSubMapper.selectList(queryWrapper);
|
||||
public BigDecimal getListYf(Long id, Long projectSubId) {
|
||||
List<DeliverOrderSubDO> deliverOrderSubDOS = deliverOrderSubMapper.getListYf(projectSubId);
|
||||
if (ObjectUtil.isNotEmpty(deliverOrderSubDOS)){
|
||||
BigDecimal totalAmount = deliverOrderSubDOS.stream()
|
||||
.map(deliverOrderSubDO -> deliverOrderSubDO.getYunFei() != null ? deliverOrderSubDO.getYunFei() : BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
deliverOrderDO.setYunFeiMoney(totalAmount);
|
||||
}
|
||||
return deliverOrderDOS;
|
||||
}
|
||||
return null;
|
||||
return totalAmount;
|
||||
}
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeliverOrderDO> getListYfDetails(Long id, Long projectSubId) {
|
||||
LambdaQueryWrapper<DeliverOrderDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.like(DeliverOrderDO::getSaleOrderIds,id);
|
||||
wrapper.eq(DeliverOrderDO::getDeliverStatus,2);
|
||||
wrapper.orderByDesc(DeliverOrderDO::getDeliverDate);
|
||||
List<DeliverOrderDO> deliverOrderDOS = deliverOrderMapper.selectList(wrapper);
|
||||
LambdaQueryWrapper<ProjectOrderSubDO> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||
queryWrapper1.eq(ProjectOrderSubDO::getProjectOrderId,id);
|
||||
List<ProjectOrderSubDO> projectOrderSubDOS = projectOrderSubMapper.selectList(queryWrapper1);
|
||||
if (deliverOrderDOS!=null&&deliverOrderDOS.size()>0&&projectOrderSubDOS!=null&&projectOrderSubDOS.size()>0){
|
||||
List<Long> ids = projectOrderSubDOS.stream()
|
||||
.map(ProjectOrderSubDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
for (DeliverOrderDO deliverOrderDO : deliverOrderDOS) {
|
||||
LambdaQueryWrapper<DeliverOrderSubDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(DeliverOrderSubDO::getDeliveryOrderId,deliverOrderDO.getId());
|
||||
queryWrapper.in(DeliverOrderSubDO::getSaleOrderSubId,ids);
|
||||
List<DeliverOrderSubDO> deliverOrderSubDOS = deliverOrderSubMapper.selectList(queryWrapper);
|
||||
BigDecimal totalAmount = deliverOrderSubDOS.stream()
|
||||
.map(deliverOrderSubDO -> deliverOrderSubDO.getYunFei() != null ? deliverOrderSubDO.getYunFei() : BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
deliverOrderDO.setYunFeiMoney(totalAmount);
|
||||
int amounts = deliverOrderSubDOS.stream()
|
||||
.mapToInt(deliverOrderSubDO ->
|
||||
deliverOrderSubDO.getAmount() != null
|
||||
? deliverOrderSubDO.getAmount()
|
||||
: 0
|
||||
)
|
||||
.sum();
|
||||
deliverOrderDO.setAmounts( amounts);
|
||||
BigDecimal weight = deliverOrderSubDOS.stream()
|
||||
.map(deliverOrderSubDO -> deliverOrderSubDO.getWeight() != null ? new BigDecimal(deliverOrderSubDO.getWeight()) : BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
deliverOrderDO.setWeights(weight);
|
||||
AdminUserDO adminUserDO = adminUserMapper.selectById(deliverOrderDO.getDeliverPerson());
|
||||
if (ObjectUtil.isNotEmpty(adminUserDO)){
|
||||
deliverOrderDO.setDeliverPersonName(adminUserDO.getNickname());
|
||||
}
|
||||
public List<DeliverOrderSubDO> getListYfDetails(Long id, Long projectSubId) {
|
||||
List<DeliverOrderSubDO> deliverOrderSubDOS = deliverOrderSubMapper.getListYf(projectSubId);
|
||||
|
||||
}
|
||||
return deliverOrderDOS;
|
||||
}
|
||||
return null;
|
||||
return deliverOrderSubDOS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -82,4 +82,6 @@ public interface MaterialPlanService {
|
||||
CommonResult<Boolean> delMaterial(Long id);
|
||||
|
||||
PageResult<MaterialPlanBoomDO> getPartPurchasePages(MaterialPlanPageReqVO pageReqVO);
|
||||
|
||||
CommonResult<Boolean> delMaterialPlanBoom(Long id, String projectMaterialPlanNo);
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDeta
|
||||
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.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.mysql.attentiontodo.AttentiontodoMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
|
||||
@ -21,6 +22,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanB
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
|
||||
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;
|
||||
import com.chanko.yunxi.mes.module.heli.service.attentiontodo.AttentiontodoService;
|
||||
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
|
||||
import com.chanko.yunxi.mes.module.system.api.user.AdminUserApi;
|
||||
@ -85,6 +87,8 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
|
||||
@Resource
|
||||
private TaskDispatchDetailMapper taskDispatchDetailMapper;
|
||||
@Resource
|
||||
private TaskDispatchMapper taskDispatchMapper;
|
||||
@Resource
|
||||
private MaterialMapper materialMapper;
|
||||
@Override
|
||||
public Long createMaterialPlan(MaterialPlanSaveReqVO createReqVO) {
|
||||
@ -509,4 +513,40 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
|
||||
return materialPlanBoomMapper.getPartsPages(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> delMaterialPlanBoom(Long id, String projectMaterialPlanNo) {
|
||||
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(id);
|
||||
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
|
||||
LambdaQueryWrapper<MaterialPlanDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(MaterialPlanDO::getProjectMaterialPlanNo, taskDispatchDetailDO.getProjectMaterialPlanNo());
|
||||
MaterialPlanDO planDO = materialPlanMapper.selectOne(wrapper);
|
||||
if(ObjectUtil.isEmpty(planDO)) return CommonResult.error(400,"该物料需求单号不存在,请确认!");
|
||||
LambdaQueryWrapper<TaskDispatchDO> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper1.eq(TaskDispatchDO::getId, taskDispatchDetailDO.getDispatchId());
|
||||
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(lambdaQueryWrapper1);
|
||||
if (ObjectUtil.isNotEmpty(taskDispatchDO)){
|
||||
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(MaterialPlanBoomDO::getBoomDetailId, taskDispatchDO.getBomDetailId());
|
||||
queryWrapper.eq(MaterialPlanBoomDO::getProcedureId, taskDispatchDetailDO.getProcedureId());
|
||||
queryWrapper.in(MaterialPlanBoomDO::getMplanStatus,1,2,3);
|
||||
if (materialPlanBoomMapper.selectCount(queryWrapper) > 0)return CommonResult.error(400,"该零件已送审,不允许删除,请确认!");
|
||||
materialPlanMapper.delMaterialPlanBoom(taskDispatchDO.getBomDetailId(),taskDispatchDetailDO.getProcedureId());
|
||||
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<MaterialPlanBoomDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(MaterialPlanBoomDO::getProjectMaterialPlanId, planDO.getId());
|
||||
if (materialPlanBoomMapper.selectCount(lambdaQueryWrapper) <=0) materialPlanMapper.delMaterialPlan(planDO.getId());
|
||||
LambdaUpdateWrapper<TaskDispatchDetailDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
lambdaUpdateWrapper.eq(TaskDispatchDetailDO::getId, id);
|
||||
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getProjectMaterialPlanNo, null);
|
||||
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getPlanStatus,0);
|
||||
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getProjectMaterialPlanDetailId,null);
|
||||
lambdaUpdateWrapper.set(TaskDispatchDetailDO::getMatPlanProcess,"N");
|
||||
taskDispatchDetailMapper.update(lambdaUpdateWrapper);
|
||||
return CommonResult.success( true);
|
||||
}
|
||||
return CommonResult.error(400,"派工单明细不存在,请刷新页面");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.plan;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanSaveReqVO;
|
||||
@ -26,8 +27,9 @@ public interface PlanService {
|
||||
* 更新生产计划
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
* @return
|
||||
*/
|
||||
void updatePlan(@Valid PlanSaveReqVO updateReqVO);
|
||||
CommonResult<Boolean> updatePlan(@Valid PlanSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除生产计划
|
||||
@ -62,4 +64,6 @@ public interface PlanService {
|
||||
boolean complete(Long id);
|
||||
|
||||
int updateById(PlanDO planDO);
|
||||
|
||||
CommonResult<Boolean> verification(Long id, String type);
|
||||
}
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.plan;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.chanko.yunxi.mes.framework.common.exception.ErrorCode;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
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.util.object.BeanUtils;
|
||||
@ -13,6 +14,7 @@ import com.chanko.yunxi.mes.framework.web.core.util.WebFrameworkUtils;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.plan.vo.PlanSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.plansub.vo.PlanSubPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processdesign.vo.ProcessDesignSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
|
||||
@ -20,18 +22,21 @@ 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.processbom.ProcessBomDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesignprogress.ProcessDesignProgressDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
|
||||
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.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.processbom.ProcessBomDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignProgressMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
|
||||
@ -40,10 +45,10 @@ import com.chanko.yunxi.mes.module.heli.enums.*;
|
||||
import com.chanko.yunxi.mes.module.heli.service.customer.CustomerService;
|
||||
import com.chanko.yunxi.mes.module.heli.service.projectorder.ProjectOrderService;
|
||||
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
|
||||
import jodd.util.StringUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.thymeleaf.util.StringUtils;
|
||||
|
||||
@ -51,10 +56,8 @@ import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PROJECT_PLAN;
|
||||
@ -109,6 +112,10 @@ public class PlanServiceImpl implements PlanService {
|
||||
private TaskDispatchDetailMapper taskDispatchDetailMapper;
|
||||
@Resource
|
||||
private CustomerService customerService;
|
||||
@Resource
|
||||
private ProcessDesignMapper processDesignMapper;
|
||||
@Resource
|
||||
private ProcessDesignProgressMapper processDesignProgressMapper;
|
||||
@Resource
|
||||
private TaskReportMapper taskReportMapper;
|
||||
@Override
|
||||
@ -131,12 +138,51 @@ private TaskReportMapper taskReportMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePlan(PlanSaveReqVO updateReqVO) {
|
||||
public CommonResult<Boolean> updatePlan(PlanSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validatePlanExists(updateReqVO.getId());
|
||||
// 更新
|
||||
PlanDO updateObj = BeanUtils.toBean(updateReqVO, PlanDO.class);
|
||||
LambdaQueryWrapper<ProcessDesignDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessDesignDO::getPlanId,updateObj.getId());
|
||||
queryWrapper.eq(ProcessDesignDO::getProcessDesignType,"BLUEPRINT_FOUNDRY_TECHNOLOGY");
|
||||
ProcessDesignDO processDesignDO = processDesignMapper.selectOne(queryWrapper);
|
||||
if (updateObj.getHasCraft()==1){
|
||||
if (ObjectUtil.isEmpty(processDesignDO)){
|
||||
ProcessDesignDO saveReqVO = new ProcessDesignDO();
|
||||
saveReqVO.setPlanId(updateObj.getId())
|
||||
.setProcessDesignType(ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name())
|
||||
.setStatus(ValidStatusEnum.VALID.getCode())
|
||||
.setProjectId(updateObj.getProjectId());
|
||||
processDesignMapper.insert(saveReqVO);
|
||||
}
|
||||
}else {
|
||||
if (ObjectUtil.isNotEmpty(processDesignDO)){
|
||||
processDesignMapper.deleteById(processDesignDO.getId());
|
||||
}
|
||||
}
|
||||
LambdaQueryWrapper<ProcessDesignDO> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||
queryWrapper1.eq(ProcessDesignDO::getPlanId,updateObj.getId());
|
||||
queryWrapper1.eq(ProcessDesignDO::getProcessDesignType,"CASTING_DRAWING");
|
||||
ProcessDesignDO processDesignDO1 = processDesignMapper.selectOne(queryWrapper1);
|
||||
|
||||
if (updateObj.getHasCast()==1){
|
||||
if (ObjectUtil.isEmpty(processDesignDO1)){
|
||||
ProcessDesignDO casting = new ProcessDesignDO();
|
||||
casting.setPlanId(updateObj.getId())
|
||||
.setProcessDesignType(ProcessDesignTypeEnum.CASTING_DRAWING.name())
|
||||
.setStatus(ValidStatusEnum.VALID.getCode())
|
||||
.setProjectId(updateObj.getProjectId());
|
||||
processDesignMapper.insert(casting);
|
||||
}
|
||||
}else {
|
||||
if (ObjectUtil.isNotEmpty(processDesignDO1)){
|
||||
processDesignMapper.deleteById(processDesignDO1.getId());
|
||||
}
|
||||
}
|
||||
planMapper.updateById(updateObj);
|
||||
return CommonResult.success(true);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -298,6 +344,23 @@ private TaskReportMapper taskReportMapper;
|
||||
public int updateById(PlanDO planDO){
|
||||
return planMapper.updateById(planDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> verification(Long id, String type) {
|
||||
LambdaQueryWrapper<ProcessDesignDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ProcessDesignDO::getPlanId,id);
|
||||
queryWrapper.eq(ProcessDesignDO::getProcessDesignType,type);
|
||||
ProcessDesignDO processDesignDO = processDesignMapper.selectOne(queryWrapper);
|
||||
if (ObjectUtil.isNotEmpty(processDesignDO)){
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ProcessDesignProgressDO::getProcessDesignId,processDesignDO.getId());
|
||||
if (processDesignProgressMapper.selectCount(wrapper)>0) return CommonResult.success(false);
|
||||
}
|
||||
|
||||
|
||||
return CommonResult.success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean complete(Long id) {
|
||||
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
@ -2,6 +2,7 @@ package com.chanko.yunxi.mes.module.heli.service.processbom;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomImportRespVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomPageReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.processbom.vo.ProcessBomSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskPlanJDBaoBiaoPageReqVO;
|
||||
@ -39,7 +40,7 @@ public interface ProcessBomService {
|
||||
* @param file 文件
|
||||
* @return 编号
|
||||
*/
|
||||
void importExcel(@Valid MultipartFile file,String bomCode) throws IOException;
|
||||
void importExcel(@Valid MultipartFile file, String bomCode) throws IOException;
|
||||
/**
|
||||
* 更新工艺bom
|
||||
*
|
||||
@ -113,4 +114,6 @@ public interface ProcessBomService {
|
||||
BigDecimal internalLaborCost(Long id, Long projectSubId);
|
||||
|
||||
BigDecimal assemblyLaborCost(Long id, Long projectSubId);
|
||||
|
||||
CommonResult<Boolean> delMaterialPlan(Long id, String projectMaterialPlanNo);
|
||||
}
|
||||
|
||||
@ -183,7 +183,10 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
||||
HashSet<String> blueprintNoList = new HashSet<String>();
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByCode = list.stream().collect(Collectors.groupingBy(vo -> vo.getCode() == null ? "NULL" : vo.getCode()));
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByBluePrintfNo = list.stream().collect(Collectors.groupingBy(vo -> vo.getBlueprintNo() == null ? "NULL" : vo.getBlueprintNo()));
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByMaterialName = list.stream().filter(e -> e.getType().equals("否")).collect(Collectors.groupingBy(vo -> vo.getMaterialName() == null ? "NULL" : vo.getMaterialName()));
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByMaterialName = list.stream().collect(Collectors.groupingBy(vo -> vo.getMaterialName() == null ? "NULL" : vo.getMaterialName()));
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByType = list.stream().collect(Collectors.groupingBy(vo -> vo.getType() == null ? "NULL" : vo.getType()));
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByAmount = list.stream().collect(Collectors.groupingBy(vo -> vo.getAmount() == null ? "NULL" : vo.getAmount().toString()));
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByUnit = list.stream().collect(Collectors.groupingBy(vo -> vo.getUnit() == null ? "NULL" : vo.getUnit()));
|
||||
|
||||
// if (CollUtil.isNotEmpty(groupedByCode.get("NULL"))) {
|
||||
// throw exception(PROCESS_BOM_CODE_IS_EMPTY);
|
||||
@ -194,7 +197,22 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
||||
if (CollUtil.isNotEmpty(groupedByMaterialName.get("NULL"))) {
|
||||
throw exception(PROCESS_BOM_DETAIL_MATERIAL_NAME_IS_NULL);
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(groupedByType.get("NULL"))) {
|
||||
throw exception(PROCESS_BOM_DETAIL_TYPE_IS_NULL);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(groupedByAmount.get("NULL"))) {
|
||||
throw exception(PROCESS_BOM_DETAIL_AMOUNT_IS_NULL);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(groupedByUnit.get("NULL"))) {
|
||||
throw exception(PROCESS_BOM_DETAIL_UNIT_IS_NULL);
|
||||
}
|
||||
Map<String, List<ProcessBomImportExcelVO>> groupedByAmounts = list.stream()
|
||||
.collect(Collectors.groupingBy(vo -> {
|
||||
if (vo.getAmount() <= 0) {
|
||||
throw exception(PROCESS_BOM_DETAIL_AMOUNT);
|
||||
}
|
||||
return vo.getAmount().toString();
|
||||
}));
|
||||
// list.forEach(item->{
|
||||
// blueprintNoList.add(item.getBlueprintNo());
|
||||
// });
|
||||
@ -1304,7 +1322,7 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
||||
// }
|
||||
BigDecimal cost= processBomMapper.bubbleFees(id,projectSubId);
|
||||
|
||||
BigDecimal cost1=processBomMapper.materialCost(id,projectSubId);
|
||||
BigDecimal cost1=processBomMapper.inspection(id,projectSubId);
|
||||
if (ObjectUtil.isEmpty(cost1)) cost1=BigDecimal.ZERO;
|
||||
if (ObjectUtil.isEmpty(cost)) cost=BigDecimal.ZERO;
|
||||
|
||||
@ -1321,14 +1339,48 @@ public class ProcessBomServiceImpl implements ProcessBomService {
|
||||
@Override
|
||||
public BigDecimal internalLaborCost(Long id, Long projectSubId) {
|
||||
BigDecimal cost=processBomMapper.internalLaborCost(id,projectSubId);
|
||||
BigDecimal cost1= processBomMapper.inspection1(id,projectSubId);
|
||||
if (ObjectUtil.isEmpty(cost)) cost=BigDecimal.ZERO;
|
||||
return cost; }
|
||||
if (ObjectUtil.isEmpty(cost1)) cost1=BigDecimal.ZERO;
|
||||
return cost.add(cost1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal assemblyLaborCost(Long id, Long projectSubId) {
|
||||
BigDecimal cost=processBomMapper.assemblyLaborCost(id,projectSubId);
|
||||
BigDecimal cost1= processBomMapper.finalInspection(id,projectSubId);
|
||||
if (ObjectUtil.isEmpty(cost)) cost=BigDecimal.ZERO;
|
||||
return cost;
|
||||
if (ObjectUtil.isEmpty(cost1)) cost1=BigDecimal.ZERO;
|
||||
return cost.add(cost1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> delMaterialPlan(Long id, String projectMaterialPlanNo) {
|
||||
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(id);
|
||||
if (ObjectUtil.isNotEmpty(bomDetailDO)){
|
||||
LambdaQueryWrapper<MaterialPlanDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(MaterialPlanDO::getProjectMaterialPlanNo, bomDetailDO.getProjectMaterialPlanNo());
|
||||
MaterialPlanDO planDO = materialPlanMapper.selectOne(wrapper);
|
||||
if(ObjectUtil.isEmpty(planDO)) return CommonResult.error(400,"该物料需求单号不存在,请确认!");
|
||||
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(MaterialPlanBoomDO::getBoomDetailId, bomDetailDO.getId());
|
||||
queryWrapper.in(MaterialPlanBoomDO::getMplanStatus,1,2,3);
|
||||
if (materialPlanBoomMapper.selectCount(queryWrapper) > 0)return CommonResult.error(400,"该物料已送审,不允许删除,请确认!");
|
||||
processBomMapper.delMaterialPlan(id);
|
||||
LambdaQueryWrapper<MaterialPlanBoomDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(MaterialPlanBoomDO::getProjectMaterialPlanId, planDO.getId());
|
||||
if (materialPlanBoomMapper.selectCount(lambdaQueryWrapper) <=0) materialPlanMapper.delMaterialPlan(planDO.getId());
|
||||
LambdaUpdateWrapper<ProcessBomDetailDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
lambdaUpdateWrapper.eq(ProcessBomDetailDO::getId,id);
|
||||
lambdaUpdateWrapper.set(ProcessBomDetailDO::getProjectMaterialPlanNo, null);
|
||||
lambdaUpdateWrapper.set(ProcessBomDetailDO::getDuEmpId, null);
|
||||
lambdaUpdateWrapper.set(ProcessBomDetailDO::getMplanStatus,0);
|
||||
lambdaUpdateWrapper.set(ProcessBomDetailDO::getMplanDate,null);
|
||||
processBomDetailMapper.update(lambdaUpdateWrapper);
|
||||
return CommonResult.success( true);
|
||||
}
|
||||
|
||||
return CommonResult.error(400,"boom明细不存在,请刷新页面");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -510,6 +510,8 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
|
||||
thingname="2D设计任务提醒";
|
||||
}else if ("BLUEPRINT_WORKBLANK".equals(processDesignDO.getProcessDesignType())){
|
||||
thingname="毛坯设计任务提醒";
|
||||
}else if ("CASTING_DRAWING".equals(processDesignDO.getProcessDesignType())){
|
||||
thingname="铸件图设计任务提醒";
|
||||
}
|
||||
// String things = processDesignDO.getCustomerName()+processDesignDO.getProjectName()+processDesignDO.getProjectSubName()+processDesignProgressDO.getRemark();
|
||||
for (AttentiontodoDO attentiontodoDO : attentiontodookddfh) {
|
||||
|
||||
@ -104,4 +104,6 @@ public interface TaskDispatchService {
|
||||
List<AdminUserDO> getOwnerUserList(Long id, Long type);
|
||||
|
||||
List<TaskDispatchDO> getListZp(Long id, Long projectSubId);
|
||||
|
||||
List<TaskDispatchDO> getListCl(Long id, Long projectSubId);
|
||||
}
|
||||
|
||||
@ -1080,6 +1080,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
public List<TaskDispatchDO> getListZp(Long id, Long projectSubId) {
|
||||
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(TaskDispatchDO::getProjectId, id);
|
||||
queryWrapper.eq(TaskDispatchDO::getProjectSubId, projectSubId);
|
||||
queryWrapper.eq(TaskDispatchDO::getDispatchType,"ASSEMBLE");
|
||||
List<TaskDispatchDO> taskDispatchDOS = taskDispatchMapper.selectList(queryWrapper);
|
||||
for (TaskDispatchDO taskDispatchDO : taskDispatchDOS) {
|
||||
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
|
||||
@ -1088,7 +1090,7 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
Map<String, BigDecimal> map = new HashMap<>();
|
||||
ProjectOrderSubDO projectOrderSubDO = projectOrderSubMapper.selectById(taskDispatchDO.getProjectSubId());
|
||||
|
||||
BigDecimal assemblyLaborCost = BigDecimal.ONE;
|
||||
BigDecimal assemblyLaborCost = BigDecimal.ZERO;
|
||||
for (TaskDispatchDetailDO detailDO : detailDOS) {
|
||||
ProcedureDO procedureDO = procedureMapper.selectById(detailDO.getProcedureId());
|
||||
BigDecimal cost=taskDispatchDetailMapper.assemblyLaborCost(detailDO.getId());
|
||||
@ -1100,12 +1102,15 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
map.put(procedureDO.getName(),cost);
|
||||
}
|
||||
}
|
||||
assemblyLaborCost.add(cost);
|
||||
assemblyLaborCost= assemblyLaborCost.add(cost);
|
||||
}
|
||||
BigDecimal finalInspection = taskDispatchDetailMapper.finalInspection(id, projectSubId);
|
||||
map.put("检验",ObjectUtil.isEmpty(finalInspection)?null:finalInspection);
|
||||
assemblyLaborCost.add(ObjectUtil.isEmpty(finalInspection)?BigDecimal.ZERO:finalInspection);
|
||||
taskDispatchDO.setAssemblyLaborSum(assemblyLaborCost);
|
||||
taskDispatchDO.setMap( map);
|
||||
if (ObjectUtil.isNotEmpty(projectOrderSubDO)){
|
||||
taskDispatchDO.setAssemblyLaborCost(assemblyLaborCost.divide(new BigDecimal(projectOrderSubDO.getAmount()),1,RoundingMode.HALF_UP));
|
||||
taskDispatchDO.setAssemblyLaborCost(assemblyLaborCost.divide(new BigDecimal(projectOrderSubDO.getAmount()),1, RoundingMode.HALF_UP));
|
||||
taskDispatchDO.setProjectSubName(projectOrderSubDO.getName());
|
||||
taskDispatchDO.setQuantity(projectOrderSubDO.getAmount());
|
||||
LambdaQueryWrapper<PlanSubDO> planSubDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
@ -1118,7 +1123,43 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
return taskDispatchDOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDispatchDO> getListCl(Long id, Long projectSubId) {
|
||||
List<TaskDispatchDO> taskDispatchDOS = taskDispatchMapper.getListCl(id, projectSubId);
|
||||
for (TaskDispatchDO taskDispatchDO : taskDispatchDOS) {
|
||||
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDO.getId());
|
||||
List<TaskDispatchDetailDO> detailDOS = taskDispatchDetailMapper.selectList(wrapper);
|
||||
Map<String, BigDecimal> map = new HashMap<>();
|
||||
|
||||
BigDecimal assemblyLaborCost = BigDecimal.ZERO;
|
||||
for (TaskDispatchDetailDO detailDO : detailDOS) {
|
||||
ProcedureDO procedureDO = procedureMapper.selectById(detailDO.getProcedureId());
|
||||
BigDecimal procedureCost=taskDispatchDetailMapper.bubbleFees(taskDispatchDO.getBomDetailId(),detailDO.getProcedureId());
|
||||
BigDecimal materialCost = taskDispatchDetailMapper.materialCost(detailDO.getId());
|
||||
BigDecimal internalLaborCost = taskDispatchDetailMapper.internalLaborCost(detailDO.getId());
|
||||
BigDecimal processInspection=taskDispatchDetailMapper.processInspection(detailDO.getId());
|
||||
|
||||
if (ObjectUtil.isEmpty(procedureCost)) procedureCost=BigDecimal.ZERO;
|
||||
if (ObjectUtil.isEmpty(materialCost)) materialCost=BigDecimal.ZERO;
|
||||
if (ObjectUtil.isEmpty(internalLaborCost)) internalLaborCost=BigDecimal.ZERO;
|
||||
if (ObjectUtil.isEmpty(processInspection)) processInspection=BigDecimal.ZERO;
|
||||
BigDecimal sum = procedureCost.add(materialCost).add(internalLaborCost).add(processInspection);
|
||||
if (ObjectUtil.isNotEmpty(procedureDO)){
|
||||
map.put(procedureDO.getName(),sum);
|
||||
}
|
||||
assemblyLaborCost=assemblyLaborCost.add(sum);
|
||||
}
|
||||
taskDispatchDO.setAssemblyLaborSum(assemblyLaborCost);
|
||||
taskDispatchDO.setMap( map);
|
||||
taskDispatchDO.setAssemblyLaborCost(assemblyLaborCost.divide(taskDispatchDO.getAmount(),1, RoundingMode.HALF_UP));
|
||||
|
||||
}
|
||||
|
||||
return taskDispatchDOS;
|
||||
}
|
||||
|
||||
private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List<TaskDispatchDetailOwnerDO> list) {
|
||||
|
||||
@ -9,4 +9,11 @@
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
<delete id="delMaterialPlan">
|
||||
delete from project_material_plan where id=#{id}
|
||||
</delete>
|
||||
<delete id="delMaterialPlanBoom">
|
||||
delete from project_material_plan_boom where boom_detail_id=#{bomDetailId} and procedure_id=#{procedureId}
|
||||
|
||||
</delete>
|
||||
</mapper>
|
||||
@ -1,6 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper">
|
||||
<delete id="delMaterialPlan">
|
||||
delete from project_material_plan_boom where boom_detail_id=#{id}
|
||||
</delete>
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
@ -46,7 +49,7 @@
|
||||
from pro_task_dispatch t
|
||||
left join pro_task_dispatch_detail t1 on t.id=t1.dispatch_id and t1.deleted=0 and t1.tenant_id=2
|
||||
left join pro_task_report r on r.dispatch_detail_id=t1.id and r.deleted=0 and r.tenant_id=2
|
||||
where t1.is_outsourcing='Y' and t.deleted=0 and t.dispatch_type='PRODUCTION' and r.work_type=2 and t.project_id=#{id}
|
||||
where t1.is_outsourcing='Y' and t.deleted=0 and t.dispatch_type='PRODUCTION' and r.work_type=2 and t.project_id=#{id} and t.project_sub_id= #{projectSubId}
|
||||
</select>
|
||||
<select id="bubbleFees" resultType="java.math.BigDecimal">
|
||||
SELECT
|
||||
@ -70,7 +73,7 @@
|
||||
left join pro_task_report r on r.dispatch_detail_id=t1.id and r.deleted=0 and r.tenant_id=2
|
||||
left join system_user_post u on u.user_id=r.owner and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
where t1.is_outsourcing='N' and t.deleted=0 and t.dispatch_type='PRODUCTION' and r.work_type=1 and t.project_id=#{id}
|
||||
where t1.is_outsourcing='N' and t.deleted=0 and t.dispatch_type='PRODUCTION' and r.work_type=1 and t.project_id=#{id} and t.project_sub_id= #{projectSubId}
|
||||
</select>
|
||||
<select id="assemblyLaborCost" resultType="java.math.BigDecimal">
|
||||
SELECT sum(COALESCE(r.work_time, 0) * p.grade_cost) cost
|
||||
@ -79,7 +82,33 @@
|
||||
left join pro_task_report r on r.dispatch_detail_id=t1.id and r.deleted=0 and r.tenant_id=2
|
||||
left join system_user_post u on u.user_id=r.owner and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
where t.deleted=0 and t.dispatch_type='ASSEMBLE' and t.project_id=#{id}
|
||||
where t.deleted=0 and t.dispatch_type='ASSEMBLE' and t.project_id=#{id} and t.project_sub_id= #{projectSubId}
|
||||
</select>
|
||||
<select id="inspection" resultType="java.math.BigDecimal">
|
||||
SELECT sum(COALESCE(t.work_time, 0) * p.grade_cost) cost
|
||||
FROM quality_pg_master_line g
|
||||
LEFT JOIN quality_bg_master_line t ON t.zj_mx_id = g.id and t.deleted = 0 and t.tenant_id = 2
|
||||
left join system_user_post u on u.user_id=t.bg_user and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
left join pro_task_dispatch_detail d on d.id=g.dispatch_detail_id and d.deleted=0 and d.tenant_id=2
|
||||
where g.deleted = 0 and g.project_id=#{id} and g.project_sub_id= #{projectSubId} and d.is_outsourcing='Y'
|
||||
</select>
|
||||
<select id="finalInspection" resultType="java.math.BigDecimal">
|
||||
SELECT sum(COALESCE(t.work_time, 0) * p.grade_cost) cost
|
||||
FROM quality_zj_pg_master_line g
|
||||
LEFT JOIN quality_zj_bg_master_line t ON t.zj_mx_id = g.id and t.deleted = 0 and t.tenant_id = 2
|
||||
left join system_user_post u on u.user_id=t.bg_user and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
where g.deleted = 0 and g.project_id=#{id} and g.project_sub_id= #{projectSubId}
|
||||
</select>
|
||||
<select id="inspection1" resultType="java.math.BigDecimal">
|
||||
SELECT sum(COALESCE(t.work_time, 0) * p.grade_cost) cost
|
||||
FROM quality_pg_master_line g
|
||||
LEFT JOIN quality_bg_master_line t ON t.zj_mx_id = g.id and t.deleted = 0 and t.tenant_id = 2
|
||||
left join system_user_post u on u.user_id=t.bg_user and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
left join pro_task_dispatch_detail d on d.id=g.dispatch_detail_id and d.deleted=0 and d.tenant_id=2
|
||||
where g.deleted = 0 and g.project_id=#{id} and g.project_sub_id= #{projectSubId} and d.is_outsourcing='N'
|
||||
</select>
|
||||
|
||||
<update id="updateDetailEditStatusById" parameterType="Long">
|
||||
|
||||
@ -118,4 +118,51 @@
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
where r.deleted=0 and r.dispatch_detail_id=#{id}
|
||||
</select>
|
||||
<select id="bubbleFees" resultType="java.math.BigDecimal">
|
||||
SELECT
|
||||
SUM(COALESCE(p.mat_weight, 0) * COALESCE(c.price, 0)) AS cost
|
||||
FROM
|
||||
pro_process_bom_detail t
|
||||
LEFT JOIN project_material_plan_boom p ON p.boom_detail_id = t.id
|
||||
AND p.deleted = 0
|
||||
AND p.tenant_id = 2
|
||||
LEFT JOIN base_composition c ON t.composition_id = c.id
|
||||
AND c.deleted = 0
|
||||
AND c.tenant_id = 2
|
||||
WHERE
|
||||
t.type = 2
|
||||
AND p.boom_detail_id =#{bomDetailId} and p.procedure_id=#{procedureId}
|
||||
</select>
|
||||
<select id="materialCost" resultType="java.math.BigDecimal">
|
||||
SELECT sum(r.work_time) cost
|
||||
from pro_task_dispatch t
|
||||
left join pro_task_dispatch_detail t1 on t.id=t1.dispatch_id and t1.deleted=0 and t1.tenant_id=2
|
||||
left join pro_task_report r on r.dispatch_detail_id=t1.id and r.deleted=0 and r.tenant_id=2
|
||||
where t1.is_outsourcing='Y' and t.deleted=0 and t.dispatch_type='PRODUCTION' and r.work_type=2 and t1.id=#{id}
|
||||
</select>
|
||||
<select id="internalLaborCost" resultType="java.math.BigDecimal">
|
||||
SELECT sum(COALESCE(r.work_time, 0) * p.grade_cost) cost
|
||||
from pro_task_dispatch t
|
||||
left join pro_task_dispatch_detail t1 on t.id=t1.dispatch_id and t1.deleted=0 and t1.tenant_id=2
|
||||
left join pro_task_report r on r.dispatch_detail_id=t1.id and r.deleted=0 and r.tenant_id=2
|
||||
left join system_user_post u on u.user_id=r.owner and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
where t1.is_outsourcing='N' and t.deleted=0 and t.dispatch_type='PRODUCTION' and r.work_type=1 and t1.id=#{id}
|
||||
</select>
|
||||
<select id="finalInspection" resultType="java.math.BigDecimal">
|
||||
SELECT sum(COALESCE(t.work_time, 0) * p.grade_cost) cost
|
||||
FROM quality_zj_pg_master_line g
|
||||
LEFT JOIN quality_zj_bg_master_line t ON t.zj_mx_id = g.id and t.deleted = 0 and t.tenant_id = 2
|
||||
left join system_user_post u on u.user_id=t.bg_user and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
where g.deleted = 0 and g.project_id=#{id} and g.project_sub_id= #{projectSubId}
|
||||
</select>
|
||||
<select id="processInspection" resultType="java.math.BigDecimal">
|
||||
SELECT sum(COALESCE(t.work_time, 0) * p.grade_cost) cost
|
||||
FROM quality_pg_master_line g
|
||||
LEFT JOIN quality_bg_master_line t ON t.zj_mx_id = g.id and t.deleted = 0 and t.tenant_id = 2
|
||||
left join system_user_post u on u.user_id=t.bg_user and u.deleted=0 and u.tenant_id=2
|
||||
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
|
||||
where g.deleted = 0 and g.dispatch_detail_id=#{id}
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@ -99,3 +99,7 @@ export const delMaterial = async (id: number) => {
|
||||
export const getPartPurchasePages = async (params) => {
|
||||
return await request.get({ url: `/heli/material-plan/getPartPurchasePages`, params })
|
||||
}
|
||||
// 删除工艺bom
|
||||
export const delMaterialPlanBoom = async (id: number,projectMaterialPlanNo:string) => {
|
||||
return await request.delete({ url: `/heli/material-plan/delMaterialPlanBoom?id=` + id+"&projectMaterialPlanNo="+projectMaterialPlanNo})
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ export interface PlanVO {
|
||||
approveDate: Date
|
||||
description: string
|
||||
status: number
|
||||
|
||||
|
||||
}
|
||||
|
||||
// 查询生产计划分页
|
||||
@ -58,3 +58,7 @@ export const deletePlan = async (id: number) => {
|
||||
export const exportPlan = async (params) => {
|
||||
return await request.download({ url: `/heli/plan/export-excel`, params })
|
||||
}
|
||||
// 查询生产计划详情
|
||||
export const verification = async (id: number,type:string) => {
|
||||
return await request.get({ url: `/heli/plan/verification?id=` + id+`&type=`+type })
|
||||
}
|
||||
|
||||
@ -100,3 +100,7 @@ export const getPlanBb = async (params) => {
|
||||
export const planBZJPage = async (params) => {
|
||||
return await request.get({ url: `/heli/process-bom/planBZJPage`, params })
|
||||
}
|
||||
// 删除工艺bom
|
||||
export const delMaterialPlan = async (id: number,projectMaterialPlanNo:string) => {
|
||||
return await request.delete({ url: `/heli/process-bom/delMaterialPlan?id=` + id+"&projectMaterialPlanNo="+projectMaterialPlanNo})
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ export const getListYfDetails = async (id: number,projectSubId: number) => {
|
||||
}
|
||||
//查询材料成本
|
||||
export const getListcl = async (id: number,projectSubId: number) => {
|
||||
return await request.get({ url: `/heli/task-dispatch/getListcl?id=`+id+`&projectSubId=`+projectSubId })
|
||||
return await request.get({ url: `/heli/task-dispatch/getListCl?id=`+id+`&projectSubId=`+projectSubId })
|
||||
}
|
||||
//查询装配成本
|
||||
export const getListZp = async (id: number,projectSubId: number) => {
|
||||
|
||||
@ -85,6 +85,7 @@
|
||||
<dict-tag :type="DICT_TYPE.HELI_COMPOSITION_ORIGINAL" :value="scope.row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单价" align="center" prop="price" />
|
||||
<el-table-column label="密度" align="center" prop="density" />
|
||||
<el-table-column label="密度单位" align="center" prop="density" >
|
||||
<template #default>
|
||||
|
||||
@ -124,9 +124,17 @@
|
||||
<el-table-column label="物料需求单号" align="center" prop="projectMaterialPlanNo" min-width="180" />
|
||||
<el-table-column label="操作" align="center" fixed="right" min-width="120">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="singleSubmission(scope.row)">
|
||||
<el-button link type="primary" @click="singleSubmission(scope.row)" v-if="scope.row.planStatus==0">
|
||||
提交
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id,scope.row.projectMaterialPlanNo)"
|
||||
v-if="scope.row.planStatus==1"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -144,7 +152,6 @@
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import download from '@/utils/download'
|
||||
import { useCommonStateWithOut } from '@/store/modules/common'
|
||||
import UserSelect from "@/views/heli/materialplan/userSelectNew.vue";
|
||||
import {inject, ref} from "vue";
|
||||
import * as MaterialPlanApi from "@/api/heli/materialplan";
|
||||
import {ElTable} from "element-plus";
|
||||
@ -270,6 +277,18 @@ const handleSelectionChange = (val) => {
|
||||
}
|
||||
}
|
||||
}
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number,projectMaterialPlanNo:string) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MaterialPlanApi.delMaterialPlanBoom(id,projectMaterialPlanNo)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch { }
|
||||
}
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
|
||||
@ -20,6 +20,9 @@
|
||||
<el-form-item label="零件名称" prop="materialName">
|
||||
<el-input v-model="queryParams.materialName" placeholder="请输入零件名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="件号" prop="blueprintNo">
|
||||
<el-input v-model="queryParams.blueprintNo" placeholder="请输入件号" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-left:15px">
|
||||
<el-button @click="handleQuery" type="primary">
|
||||
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||
@ -109,6 +112,7 @@ const queryParams = reactive({
|
||||
description: undefined,
|
||||
createTime: [],
|
||||
matType:1,
|
||||
blueprintNo:undefined,
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
@ -48,6 +48,7 @@
|
||||
<el-card class="hl-incard">
|
||||
<el-table :data="formData.matBoomDOList" class="hl-table" v-loading="loading">
|
||||
<el-table-column type="index" label="序号" fixed align="center" min-width="60" />
|
||||
<el-table-column prop="blueprintNo" min-width="100" label="件号" align="center"/>
|
||||
<el-table-column prop="matName" min-width="200" label="物料名称" align="center"/>
|
||||
<el-table-column label="工序" align="center" prop="procedureName" min-width="100" >
|
||||
<template #default="scope">
|
||||
|
||||
@ -118,6 +118,19 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物料需求单号" align="center" prop="projectMaterialPlanNo" min-width="180" fixed="right"/>
|
||||
<el-table-column label="操作" align="center" fixed="right" min-width="180">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id,scope.row.projectMaterialPlanNo)"
|
||||
v-if="scope.row.mplanStatus==1"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
@ -320,7 +333,18 @@ const resetQuery = () => {
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number,projectMaterialPlanNo:string) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await ProcessBomApi.delMaterialPlan(id,projectMaterialPlanNo)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch { }
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
|
||||
@ -262,13 +262,8 @@ const rowClick = async (row) => {
|
||||
// OrderYsDetailLiat.value.map(item=>{item.cgTypee=Number(item.cgTypee)})
|
||||
}
|
||||
const getDictLabel = (dictType, value) => {
|
||||
console.log(dictType)
|
||||
console.log(value)
|
||||
var intDictOptions = getIntDictOptions(dictType);
|
||||
console.log(intDictOptions)
|
||||
const dict = intDictOptions.find(item => item.value == value)
|
||||
console.log(value)
|
||||
console.log(dict)
|
||||
return dict?.label || value // 找不到时显示原始值
|
||||
}
|
||||
const tableRowClassName = ({ row }) => {
|
||||
|
||||
@ -0,0 +1,228 @@
|
||||
<template>
|
||||
<div class="modal-overlay" v-if="showModal" @click.self="closeModal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<div class="modal-header">
|
||||
<h3></h3>
|
||||
<button @click="closeModal" class="close-btn"> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M15 5L5 15M5 5L15 15" stroke="currentColor" stroke-width="2"/>
|
||||
</svg></button>
|
||||
</div>
|
||||
<div class="content-wrapper">
|
||||
<h4 class="section-title">描述说明</h4>
|
||||
<div class="info-grid">
|
||||
<div class="info-item">
|
||||
<span class="label">数字-1</span>
|
||||
<span>
|
||||
<img
|
||||
src="/src/assets/imgs/checkstatusss.png"
|
||||
class="status-icon"
|
||||
/>
|
||||
<!-- isOutsourcing 图片 -->
|
||||
<img
|
||||
src="/src/assets/imgs/out.png"
|
||||
class="status-icon"
|
||||
/>
|
||||
<!-- checkYn 图片 -->
|
||||
|
||||
</span> </div>
|
||||
<div class="info-item">
|
||||
<span class="label">数字:</span>
|
||||
<span class="value">代表该工序派工顺序,如果已报工替换数字显示报工时间25-08-07</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">检:</span>
|
||||
<span class="value">表示零件该工序需要过程检验</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">外:</span>
|
||||
<span class="value">表示该零件工序需要外协</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="color-section">
|
||||
<h4 class="section-title">单元格底色说明</h4>
|
||||
<div class="color-container">
|
||||
<div class="color-box green-box">
|
||||
<div class="color-block">检验合格 + 生产报工日期未延期</div>
|
||||
</div>
|
||||
<div class="color-box yellow-box">
|
||||
<div class="color-block">检验合格 + 生产报工日期延期</div>
|
||||
</div>
|
||||
<div class="color-box red-box">
|
||||
<div class="color-block">检验不合格(报废或返修)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
|
||||
const showModal = ref(false);
|
||||
|
||||
const openModal = () => {
|
||||
showModal.value = true;
|
||||
};
|
||||
|
||||
const closeModal = () => {
|
||||
showModal.value = false;
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
openModal,
|
||||
closeModal
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.modal-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: white;
|
||||
border-radius: 8px;
|
||||
width: 1000px;
|
||||
max-width: 90%;
|
||||
max-height: 90vh;
|
||||
overflow-y: auto;
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.close-btn {
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
color: #000000;
|
||||
}
|
||||
.modal-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 16px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.modal-header h3 {
|
||||
font-size: 18px;
|
||||
margin: 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.content-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 15px;
|
||||
color: #333;
|
||||
margin: 0 0 12px 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.info-grid {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.label {
|
||||
font-weight: bold;
|
||||
min-width: 40px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.value {
|
||||
color: #666;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.color-block {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 4px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
|
||||
.status-icon {
|
||||
width: 35px; /* 增大图片宽度 */
|
||||
height: 35px; /* 增大图片高度 */
|
||||
margin-left: 8px;
|
||||
vertical-align: middle;
|
||||
object-fit: contain; /* 确保图片比例不变形 */
|
||||
}
|
||||
.color-section {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.color-container {
|
||||
display: flex;
|
||||
gap: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 6px;
|
||||
padding: 15px;
|
||||
background-color: #f9f9f9;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.color-box {
|
||||
flex: 1; /* 各占三分之一 */
|
||||
min-width: 0; /* 防止内容溢出 */
|
||||
}
|
||||
|
||||
.color-block {
|
||||
width: 100%;
|
||||
height: 60px; /* 方块高度 */
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
padding: 5px;
|
||||
border-radius: 4px;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
line-height: 1.4;
|
||||
word-break: break-word; /* 长文本自动换行 */
|
||||
}
|
||||
|
||||
|
||||
.green-box .color-block {
|
||||
background-color: #e0ffe0;
|
||||
}
|
||||
|
||||
.yellow-box .color-block {
|
||||
background-color: #ffffe0;
|
||||
}
|
||||
|
||||
.red-box .color-block {
|
||||
background-color: #ffded6;
|
||||
}
|
||||
</style>
|
||||
@ -38,6 +38,19 @@ v-for="dict in userInit" :key="dict.id"
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="是否要铸件图" prop="hasCast">
|
||||
<el-radio-group v-model="formData.hasCast">
|
||||
<el-radio
|
||||
disabled v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)" :key="dict.value"
|
||||
:label="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="是否要工艺" prop="hasCraft">
|
||||
@ -108,6 +121,17 @@ disabled v-for="dict in getStrDictOptions(DICT_TYPE.HELI_BUSINESS_LINE)" :key="d
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="铸件图负责人" prop="castOwner">
|
||||
<el-select class="!w-265px" v-model="formData.castOwner" filterable disabled>
|
||||
<el-option
|
||||
v-for="dict in userInit" :key="dict.id"
|
||||
:label="dict.username + ' '+ dict.nickname" :value="dict.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工艺负责人" prop="craftOwner">
|
||||
@ -173,6 +197,15 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PROPERTY)" :key="dict.va
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="铸件图开始日期" prop="castStartDate">
|
||||
<el-date-picker
|
||||
disabled class="!w-265px" v-model="formData.castStartDate" type="date" value-format="x"
|
||||
placeholder="工艺开始日期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工艺开始日期" prop="craftStartTime">
|
||||
@ -185,7 +218,7 @@ disabled class="!w-265px" v-model="formData.craftStartDate" type="date" value-fo
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="计划批准人" prop="approver">
|
||||
<el-select class="!w-265px" v-model="formData.approver" filterable >
|
||||
<el-select class="!w-265px" v-model="formData.approver" filterable disabled>
|
||||
<el-option
|
||||
v-for="dict in userInit" :key="dict.id"
|
||||
:label="dict.username + ' '+ dict.nickname" :value="dict.id" />
|
||||
@ -251,6 +284,15 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)" :key="dict.va
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="铸件图结束日期" prop="castEndDate">
|
||||
<el-date-picker
|
||||
disabled class="!w-265px" v-model="formData.castEndDate" type="date" value-format="x"
|
||||
placeholder="铸件图结束日期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工艺结束日期" prop="craftEndTime">
|
||||
@ -548,7 +590,11 @@ const formData = ref({
|
||||
projectOrderSubs: [],
|
||||
projectPlanSubs: [],
|
||||
craftInfos: [],
|
||||
craftContent:undefined
|
||||
craftContent:undefined,
|
||||
castOwner:undefined,
|
||||
hasCast:undefined,
|
||||
castStartDate:undefined,
|
||||
castEndDate:undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
projectCode: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }],
|
||||
|
||||
@ -44,6 +44,19 @@ v-for="dict in userInit" :key="dict.id"
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="是否要铸件图" prop="hasCast">
|
||||
<el-radio-group v-model="formData.hasCast" @change="handleCastInfo">
|
||||
<el-radio
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)" :key="dict.value"
|
||||
:label="dict.value">
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="是否要工艺" prop="hasCraft">
|
||||
@ -114,6 +127,22 @@ v-for="dict in getStrDictOptions(DICT_TYPE.HELI_BUSINESS_LINE)" :key="dict.value
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="铸件图负责人" prop="castOwner">
|
||||
<!-- <el-select class="!w-265px" v-model="formData.craftOwner" filterable :disabled="!formData.hasCraft " >
|
||||
<el-option v-for="dict in userInit" :key="dict.id"
|
||||
:label="dict.username+' '+dict.nickname" :value="dict.id" />
|
||||
</el-select> -->
|
||||
<!-- <UserSelect v-model="formData.craftOwner" @update:new-value="handleSelectedUser2" class="!w-265px"/>-->
|
||||
<el-select class="!w-265px" v-model="formData.castOwner" clearable :disabled="formData.hasCast==0" filterable>
|
||||
<el-option
|
||||
v-for="dict in userInit" :key="dict.id"
|
||||
:label="dict.username+' '+dict.nickname" :value="dict.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工艺负责人" prop="craftOwner">
|
||||
@ -122,7 +151,7 @@ v-for="dict in getStrDictOptions(DICT_TYPE.HELI_BUSINESS_LINE)" :key="dict.value
|
||||
:label="dict.username+' '+dict.nickname" :value="dict.id" />
|
||||
</el-select> -->
|
||||
<!-- <UserSelect v-model="formData.craftOwner" @update:new-value="handleSelectedUser2" class="!w-265px"/>-->
|
||||
<el-select class="!w-265px" v-model="formData.craftOwner" clearable filterable>
|
||||
<el-select class="!w-265px" v-model="formData.craftOwner" clearable :disabled="formData.hasCraft==0" filterable>
|
||||
<el-option
|
||||
v-for="dict in userInit" :key="dict.id"
|
||||
:label="dict.username+' '+dict.nickname" :value="dict.id" />
|
||||
@ -184,6 +213,15 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PROPERTY)" :key="dict.va
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="铸件图开始日期" prop="castStartDate">
|
||||
<el-date-picker
|
||||
class="!w-265px" v-model="formData.castStartDate" type="date" value-format="x"
|
||||
placeholder="铸件图开始日期" :disabled="!formData.hasCast "/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工艺开始日期" prop="craftStartTime">
|
||||
@ -262,6 +300,15 @@ v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)" :key="dict.va
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="铸件图结束日期" prop="castEndDate">
|
||||
<el-date-picker
|
||||
class="!w-265px" v-model="formData.castEndDate" type="date" value-format="x"
|
||||
placeholder="铸件图结束日期" :disabled="!formData.hasCast " />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工艺结束日期" prop="craftEndTime">
|
||||
@ -645,6 +692,7 @@ import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
|
||||
import EquipSelect from '@/views/heli/hlvuestyle/equipSelect.vue'
|
||||
import * as ProjectLeaderApi from "@/api/heli/projectleader";
|
||||
import * as TaskDispatchApi from "@/api/heli/taskdispatch";
|
||||
import {verification} from "@/api/heli/plan";
|
||||
const printref = ref()
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
@ -693,7 +741,11 @@ const formData = ref({
|
||||
projectPlanSubs: [],
|
||||
craftInfos: [],
|
||||
craftContent: undefined,
|
||||
changeEndTime: undefined
|
||||
changeEndTime: undefined,
|
||||
castOwner:undefined,
|
||||
hasCast:1,
|
||||
castStartDate:undefined,
|
||||
castEndDate:undefined,
|
||||
})
|
||||
const ownerId = ref('');
|
||||
const dateOne = ref('');
|
||||
@ -932,16 +984,14 @@ const getSearchRlTs = async(startDateTime:string,endDateTime:string,index:number
|
||||
if(num === "1"){
|
||||
//调用接口查询检索设计时间是否冲突
|
||||
formData.value.projectPlanSubs[index].blankNum = data;
|
||||
|
||||
|
||||
// formatDate(startBlankDate,'YYYY-MM-DD')
|
||||
if(ownder){
|
||||
prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
|
||||
startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
|
||||
endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
|
||||
fuzerenId.value = ownder;
|
||||
getOwnderList(index)
|
||||
}
|
||||
// if(ownder){
|
||||
// prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
|
||||
// startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
|
||||
// endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
|
||||
// fuzerenId.value = ownder;
|
||||
// getOwnderList(index)
|
||||
// }
|
||||
|
||||
/* getOwnderList(index,ownder,startBlankDate,blankDate,id) */
|
||||
|
||||
@ -950,23 +1000,23 @@ const getSearchRlTs = async(startDateTime:string,endDateTime:string,index:number
|
||||
//调用接口查询检索设计时间是否冲突
|
||||
formData.value.projectPlanSubs[index].twoDimNum = data;
|
||||
|
||||
if(ownder){
|
||||
prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
|
||||
startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
|
||||
endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
|
||||
fuzerenId.value = ownder;
|
||||
getOwnderLists(index)
|
||||
}
|
||||
// if(ownder){
|
||||
// prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
|
||||
// startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
|
||||
// endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
|
||||
// fuzerenId.value = ownder;
|
||||
// getOwnderLists(index)
|
||||
// }
|
||||
|
||||
}else{
|
||||
formData.value.projectPlanSubs[index].threeDimNum = data;
|
||||
if(ownder){
|
||||
prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
|
||||
startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
|
||||
endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
|
||||
fuzerenId.value = ownder;
|
||||
getOwnderListss(index)
|
||||
}
|
||||
// if(ownder){
|
||||
// prod.value.projectPlanSubs = JSON.parse(JSON.stringify(formData.value.projectPlanSubs));
|
||||
// startTimeOne.value = formatDate(startDateTime,'YYYY-MM-DD');
|
||||
// endTimeTwo.value = formatDate(endDateTime,'YYYY-MM-DD');
|
||||
// fuzerenId.value = ownder;
|
||||
// getOwnderListss(index)
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
@ -1531,11 +1581,40 @@ const handleUpdate = () => {
|
||||
console.log("子组件已更新");
|
||||
};
|
||||
|
||||
const handleCraftInfo = (val) =>{
|
||||
const handleCraftInfo = async (val) =>{
|
||||
if(val == 0){
|
||||
const a = await PlanApi.verification(query.id,"BLUEPRINT_FOUNDRY_TECHNOLOGY")
|
||||
if (a){
|
||||
formData.value.craftOwner = undefined
|
||||
formData.value.craftStartDate = undefined
|
||||
formData.value.craftEndDate = undefined
|
||||
}else {
|
||||
message.error("铸造工艺进度上报有报工数据,不允许修改为否")
|
||||
formData.value.hasCraft=1
|
||||
}
|
||||
}else {
|
||||
const data = await PlanApi.getPlan(query.id)
|
||||
formData.value.craftOwner = data.craftOwner
|
||||
formData.value.craftStartDate = data.craftStartDate
|
||||
formData.value.craftEndDate = data.craftEndDate
|
||||
}
|
||||
}
|
||||
const handleCastInfo = async (val) =>{
|
||||
if(val == 0){
|
||||
const a = await PlanApi.verification(query.id,"CASTING_DRAWING")
|
||||
if (a){
|
||||
formData.value.castOwner = undefined
|
||||
formData.value.castStartDate = undefined
|
||||
formData.value.castEndDate = undefined
|
||||
}else {
|
||||
message.error("铸件图设计进度上报有报工数据 不允许修改为否")
|
||||
formData.value.hasCast=1
|
||||
}
|
||||
}else{
|
||||
const data = await PlanApi.getPlan(query.id)
|
||||
formData.value.castOwner = data.castOwner
|
||||
formData.value.castStartDate = data.castStartDate
|
||||
formData.value.castEndDate = data.castEndDate
|
||||
}
|
||||
}
|
||||
const handleSubCode = (row, name) => {
|
||||
@ -1705,8 +1784,14 @@ onMounted(async () => {
|
||||
formData.value = await PlanApi.getPlan(query.id)
|
||||
userInit1.value = await TaskDispatchApi.getOwnerUserList(0,1);
|
||||
// ownerList.value = await getOwnerListThis();
|
||||
|
||||
if (formData.value.hasCraft==null){
|
||||
formData.value.hasCraft = 1
|
||||
}
|
||||
if ( formData.value.hasCast ==null
|
||||
){
|
||||
formData.value.hasCast = 1
|
||||
}
|
||||
|
||||
const data = await ProjectLeaderApi.getProjectLeaderType(4)
|
||||
const data1 = await ProjectLeaderApi.getProjectLeaderType(5)
|
||||
const data2 = await ProjectLeaderApi.getProjectLeaderType(6)
|
||||
@ -1951,6 +2036,9 @@ const handleSelectedUser1 = (newValue: any) => {
|
||||
const handleSelectedUser2 = (newValue: any) => {
|
||||
formData.value.craftOwner = newValue?.id
|
||||
}
|
||||
const handleSelectedUser10 = (newValue: any) => {
|
||||
formData.value.castOwner = newValue?.id
|
||||
}
|
||||
// 计划编制人
|
||||
const handleSelectedUser3 = (newValue: any) => {
|
||||
formData.value.editor = newValue?.id
|
||||
|
||||
@ -17,10 +17,10 @@
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-form-item label="项目简码" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.projectName"
|
||||
placeholder="请输入项目名称"
|
||||
placeholder="请输入项目简码"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
@ -78,6 +78,7 @@
|
||||
<el-form-item>
|
||||
<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="openModal">显示说明</el-button>
|
||||
|
||||
<!-- <el-button-->
|
||||
<!-- type="success"-->
|
||||
@ -92,6 +93,25 @@
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- <ContentWrap>-->
|
||||
|
||||
|
||||
<!-- <div class="color-legend">-->
|
||||
<!-- <div class="color-item">-->
|
||||
<!-- <div class="color-block green-cell"></div>-->
|
||||
<!-- <span>报工日期未延期同时检验合格</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="color-item">-->
|
||||
<!-- <div class="color-block yellow-cell"></div>-->
|
||||
<!-- <span>报工日期延期同时检验合格</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="color-item">-->
|
||||
<!-- <div class="color-block red-cell"></div>-->
|
||||
<!-- <span>检验不合格(报废或返修)</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </ContentWrap>-->
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||
@ -652,6 +672,7 @@
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<ProcessStatusModal ref="modal" />
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
|
||||
@ -659,18 +680,15 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import download from '@/utils/download'
|
||||
import * as PlanSchedule from '@/api/heli/planSchedule'
|
||||
import * as processbomApi from '@/api/heli/processbom'
|
||||
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getDictLabel } from '@/utils/dict'
|
||||
import UserSelect from '@/views/heli/hlvuestyle/userSelect.vue'
|
||||
import * as UserApi from '@/api/system/user'
|
||||
import type { TabsPaneContext } from 'element-plus'
|
||||
import { get } from 'sortablejs'
|
||||
import ProcessStatusModal from './ProcessStatusModal.vue';
|
||||
defineOptions({ name: 'Shenhe' })
|
||||
const userList = ref<UserApi.UserVO[]>([]) // 用户列表
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const modal = ref();
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
@ -698,7 +716,9 @@ const formatDateT = (timestamp) => {
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return `${year}-${month}-${day}`; // 返回 YYYY-MM-DD 格式
|
||||
}
|
||||
|
||||
const openModal = () => {
|
||||
modal.value.openModal();
|
||||
};
|
||||
const activeName = ref('first')
|
||||
const activeIndex = ref('first')
|
||||
/**切换tab */
|
||||
@ -834,4 +854,19 @@ justify-content: flex-start;
|
||||
vertical-align: middle;
|
||||
object-fit: contain; /* 确保图片比例不变形 */
|
||||
}
|
||||
.color-legend {
|
||||
display: flex; /* 横向排列 */
|
||||
gap: 20px; /* 项间距 */
|
||||
align-items: center; /* 垂直居中 */
|
||||
}
|
||||
.color-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px; /* 方块和文字的间距 */
|
||||
}
|
||||
.color-block {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
<script setup lang="ts">
|
||||
import QRCode from 'qrcode'
|
||||
import printFinalDialog from './printFinalDialog.vue';
|
||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
||||
const dialogVisible = ref(false)
|
||||
let clauseId = null;
|
||||
const startPageNum = ref(0);
|
||||
@ -47,7 +48,11 @@ const datavals = ref([])
|
||||
const specarr = ref([])
|
||||
const cnenList = ref([])
|
||||
const bomCodes = ref('')
|
||||
|
||||
const getDictLabel = (dictType, value) => {
|
||||
var intDictOptions = getIntDictOptions(dictType);
|
||||
const dict = intDictOptions.find(item => item.value == value)
|
||||
return dict?.label || value // 找不到时显示原始值
|
||||
}
|
||||
|
||||
|
||||
const open = async ( vals) => {
|
||||
@ -66,14 +71,16 @@ const open = async ( vals) => {
|
||||
const row1 = {
|
||||
code: item.projectSubCode,
|
||||
name: item.name == null ? '' : item.name,
|
||||
amount: item.amount == null ? '' : item.amount
|
||||
amount: item.amount == null ? '' : item.amount,
|
||||
unit:getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT,item.unit)
|
||||
}
|
||||
printCodeName.value.push(row1)
|
||||
})
|
||||
|
||||
dialogVisible.value = true
|
||||
const currentDate = new Date()
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
// const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}`
|
||||
var i = 0;
|
||||
await Promise.all(
|
||||
|
||||
@ -89,16 +96,16 @@ const open = async ( vals) => {
|
||||
<span style="display: inline-block; width: 100%;font-weight: 700; border-bottom: 1px solid black; padding-bottom: 0.2mm;">${item.code}</span>
|
||||
</div>
|
||||
<div style="display: flex; align-items: center;">
|
||||
<span style="white-space: nowrap; ">名 称:</span>
|
||||
<span style="white-space: nowrap; ">名 称:</span>
|
||||
<span style="flex-grow: 1; border-bottom: 1px solid black; margin-left: -1.2mm; padding-bottom: 0.2mm;">${item.name}</span>
|
||||
</div>
|
||||
<div style="display: flex; position: absolute; bottom: 2mm; left: 0.1mm; right: 2mm; height: 34mm;">
|
||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: flex-start; width: 13mm; margin-right: 1mm;">
|
||||
<div style="display: flex; align-items: center;">
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">数 量:</span>
|
||||
<span style="font-size: 11px; margin-bottom: 0.5mm;white-space: nowrap;margin-left: -2.3mm;">${item.amount}</span>
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">数 量:</span>
|
||||
<span style="font-size: 11px; margin-bottom: 0.5mm;white-space: nowrap;margin-left: -2.3mm;">${item.amount} ${item.unit}</span>
|
||||
</div>
|
||||
<span style="font-size: 5px; line-height: 1; margin-top: auto; white-space: nowrap;">${formattedDate}</span>
|
||||
<span style="font-size: 11px; line-height: 1; margin-top: auto; white-space: nowrap;">${formattedDate}</span>
|
||||
</div>
|
||||
<div style="width: 34mm; height: 34mm; margin-left: auto; display: flex; align-items: flex-end; justify-content: flex-end;">
|
||||
<img style="width: 100%; height: 100%;" src="${qrCodeData}" alt="QR Code">
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import QRCode from 'qrcode'
|
||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
let clauseId = null;
|
||||
@ -98,7 +99,7 @@ const onPrint = () => {
|
||||
flex-grow: 1;
|
||||
border-bottom: 1px solid black;
|
||||
height: 1em;
|
||||
margin-left: -1mm;
|
||||
margin-left: -1.2mm;
|
||||
}
|
||||
.bottom-section {
|
||||
display: flex;
|
||||
@ -135,7 +136,7 @@ const onPrint = () => {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.timestamp {
|
||||
font-size: 12px;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
margin-left: 0.5mm;
|
||||
margin-top: auto;
|
||||
@ -165,7 +166,11 @@ function beforeDialogClose(doClose: (shouldClose: boolean) => void): void {
|
||||
const outopen = () => {
|
||||
dialogVisible.value = false
|
||||
}
|
||||
|
||||
const getDictLabel = (dictType, value) => {
|
||||
var intDictOptions = getIntDictOptions(dictType);
|
||||
const dict = intDictOptions.find(item => item.value == value)
|
||||
return dict?.label || value // 找不到时显示原始值
|
||||
}
|
||||
const printCodeName = ref([])
|
||||
const datavals = ref([])
|
||||
const specarr = ref([])
|
||||
@ -182,14 +187,16 @@ const open = async ( vals) => {
|
||||
const row1 = {
|
||||
code: item.projectSubCode,
|
||||
name: item.name == null ? '' : item.name,
|
||||
amount: item.amount == null ? '' : item.amount
|
||||
amount: item.amount == null ? '' : item.amount,
|
||||
unit:getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT,item.unit)
|
||||
}
|
||||
printCodeName.value.push(row1)
|
||||
})
|
||||
|
||||
dialogVisible.value = true
|
||||
const currentDate = new Date()
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
// const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}`
|
||||
|
||||
await Promise.all(
|
||||
printCodeName.value.map(async (item) => {
|
||||
@ -204,12 +211,12 @@ const open = async ( vals) => {
|
||||
<span>${item.code}</span>
|
||||
</div>
|
||||
<div class="name-line">
|
||||
<span class="name-label">名 称:</span>
|
||||
<span class="name-label">名 称: </span>
|
||||
<span class="name-underline">${item.name}</span>
|
||||
</div>
|
||||
<div class="bottom-section">
|
||||
<div class="quantity-container">
|
||||
<span class="quantity">数 量:${item.amount}</span>
|
||||
<span class="quantity">数 量: ${item.amount} ${item.unit}</span>
|
||||
<span class="timestamp">${formattedDate}</span>
|
||||
</div>
|
||||
<div class="qr-container">
|
||||
|
||||
@ -80,31 +80,31 @@
|
||||
</el-row>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-col :span="7">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input class="!w-265px" placeholder="项目编号" v-model="formData.projectCode" disabled />
|
||||
<el-input class="!w-350px" placeholder="项目编号" v-model="formData.projectCode" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="子项目名称" prop="projectSubName">
|
||||
<el-input class="!w-265px" placeholder="子项目名称" v-model="formData.projectSubName" disabled />
|
||||
<el-input class="!w-350px" placeholder="子项目名称" v-model="formData.projectSubName" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker class="!w-265px" v-model="formData.createTime" type="date" value-format="x" placeholder="创建时间" disabled />
|
||||
<el-date-picker class="!w-350px" v-model="formData.createTime" type="date" value-format="x" placeholder="创建时间" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-col :span="5">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="客户名称" prop="customerName">
|
||||
|
||||
@ -49,42 +49,42 @@
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||
<el-table-column fixed label="序号" type="index" width="60" align="center" />
|
||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="150" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="240" />
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="150" />
|
||||
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="250" />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="280" />
|
||||
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
||||
<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="planCode" min-width="180">
|
||||
<el-table-column label="计划单号" align="center" prop="planCode" min-width="120">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||
{{ scope.row.planCode }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="200" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="120">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="2D负责人" align="center" prop="twoDimOwnerName" width="120" />
|
||||
<el-table-column fixed="right" label="2D截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="140" />
|
||||
<el-table-column fixed="right" label="2D截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="120" />
|
||||
<el-table-column fixed="right" label="完成情况" align="center" prop="progress" min-width="120">
|
||||
<template #default="scope">
|
||||
{{getDetailMsg(scope.row)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="最新进度" align="center" prop="progress" min-width="120">
|
||||
<el-table-column fixed="right" label="最新进度" align="center" prop="progress" min-width="100">
|
||||
<template #default="scope">
|
||||
{{scope.row.isOverProcess == 1 ? '已完成':'实施中'}}
|
||||
</template>
|
||||
@ -217,7 +217,7 @@ const getDetailMsg = (row) =>{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
|
||||
@ -87,35 +87,35 @@
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
|
||||
<el-table-column fixed label="序号" type="index" width="60" align="center" />
|
||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="150" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="240" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="150" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="250" />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="280" />
|
||||
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
||||
<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="planCode" min-width="180" >
|
||||
<el-table-column label="计划单号" align="center" prop="planCode" min-width="120" >
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||
{{ scope.row.planCode }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="200" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="120">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="3D负责人" align="center" prop="threeDimOwnerName" min-width="120"/>
|
||||
<el-table-column fixed="right" label="3D截止日期" align="center" prop="threeDimDate" :formatter="dateFormatter2" min-width="140"/>
|
||||
<el-table-column fixed="right" label="3D截止日期" align="center" prop="threeDimDate" :formatter="dateFormatter2" min-width="120"/>
|
||||
<el-table-column fixed="right" label="完成情况" align="center" prop="progress" min-width="120">
|
||||
<template #default="scope">
|
||||
{{getDetailMsg(scope.row)}}
|
||||
@ -266,7 +266,7 @@ const getDetailMsg = (row) =>{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
|
||||
@ -651,9 +651,12 @@ const queryData = async (id?: number) => {
|
||||
try {
|
||||
formData.value = await ProcessBomApi.getProcessBom(id)
|
||||
if(formData.value.property == 1){
|
||||
formData.value.propertyMsg = '新作';
|
||||
}else if(formData.value.property == 2){
|
||||
formData.value.propertyMsg = '维修';
|
||||
}else{
|
||||
formData.value.propertyMsg = '新制';
|
||||
}else if(formData.value.property == 3){
|
||||
formData.value.propertyMsg = '拉回修';
|
||||
|
||||
}
|
||||
formData.value.processBomDetails = await ProcessBomApi.getProcessBomDetailListByBomId(id)
|
||||
//增加isSelected属性,保存时只保存为true的
|
||||
|
||||
@ -0,0 +1,297 @@
|
||||
<template>
|
||||
<el-card class="hl-card">
|
||||
<template #header>
|
||||
<span>铸造工艺进度上报</span>
|
||||
</template>
|
||||
<ContentWrap class="borderxx">
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="计划单号" prop="planCode">
|
||||
<el-input
|
||||
v-model="queryParams.planCode"
|
||||
placeholder="请输入计划单号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input
|
||||
v-model="queryParams.projectCode"
|
||||
placeholder="请输入项目编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="客户名称" prop="customerName">
|
||||
<el-input
|
||||
v-model="queryParams.customerName"
|
||||
placeholder="请输入客户名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.projectName"
|
||||
placeholder="请输入项目名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属业务线" prop="businessLine">
|
||||
<el-select clearable class="!w-240px" v-model="queryParams.businessLine" placeholder="下拉选择">
|
||||
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_BUSINESS_LINE)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="性质" prop="property">
|
||||
<el-select clearable class="!w-240px" v-model="queryParams.property" placeholder="下拉选择">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PROPERTY)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="铸件图负责人" prop="castOwnerName">
|
||||
<el-input
|
||||
v-model="queryParams.castOwnerName"
|
||||
placeholder="请输入铸件图负责人"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-left:20px">
|
||||
<el-button @click="handleQuery" type="primary" ><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table 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="项目编号" align="center" prop="projectCode" min-width="150" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="150" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="=250" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="120">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
||||
<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="planCode" min-width="120" >
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||
{{ scope.row.planCode }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="项目负责人" align="center" prop="projectOwnerName" min-width="120" />
|
||||
<el-table-column fixed="right" label="铸件图负责人" align="center" prop="castOwnerName" min-width="150" />
|
||||
<el-table-column fixed="right" label="铸件图起止日期" align="center" prop="craftDate" min-width="240" >
|
||||
<template #default="scope">
|
||||
{{formatDate(scope.row.castStartDate, 'YYYY-MM-DD') + '~' + formatDate(scope.row.castEndDate, 'YYYY-MM-DD')}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="完成情况" align="center" prop="progress" min-width="120">
|
||||
<template #default="scope">
|
||||
{{getDetailMsg(scope.row)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="最新进度" align="center" prop="progress" min-width="120">
|
||||
<template #default="scope">
|
||||
{{scope.row.isOverProcess == 1 ? '已完成':'实施中'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" align="center" min-width="160">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openDetail('update', scope.row.id)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openDetail('detail', scope.row.id)"
|
||||
>
|
||||
查看详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {getStrDictOptions, DICT_TYPE, getDictLabel, getIntDictOptions} from '@/utils/dict'
|
||||
import {dateFormatter, formatDate} from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import * as ProcessDesignApi from '@/api/heli/processdesign'
|
||||
import {useCommonStore} from "@/store/modules/common";
|
||||
import {useUserStore} from "@/store/modules/user";
|
||||
|
||||
defineOptions({ name: 'ProcessDesign' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
const router = useRouter()
|
||||
const commonStore = useCommonStore()
|
||||
const userStore = useUserStore()
|
||||
const username = userStore.getUser.nickname
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
planCode: undefined,
|
||||
projectCode: undefined,
|
||||
processDesignType: 'CASTING_DRAWING',
|
||||
customerName: undefined,
|
||||
projectName: undefined,
|
||||
businessLine: undefined,
|
||||
property: undefined,
|
||||
castOwnerName: username
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await ProcessDesignApi.getProcessDesignPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
const getDetailMsg = (row) =>{
|
||||
if(row.isOverProcess){
|
||||
//完结的,按计划完成了还是没按计划完成
|
||||
if(row.castEndDate != null && row.lastDate != null ){
|
||||
const starttemp = new Date(row.castEndDate);
|
||||
starttemp.setHours(23,59,59,999);
|
||||
const endtemp = new Date(row.lastDate);
|
||||
endtemp.setHours(23,59,59,999);
|
||||
const start =starttemp.getTime()
|
||||
const end = endtemp.getTime();
|
||||
const diffTime = end - start
|
||||
var day = Math.floor(diffTime / (1000 * 60 * 60 * 24));
|
||||
if(day == 0){
|
||||
if(row.isDelay == 1 && row.lastDate > starttemp){
|
||||
return '延后' + (day+1) +'天';
|
||||
}
|
||||
return '按时完成'
|
||||
}else{
|
||||
if(row.lastDate > starttemp){
|
||||
return '延后' + day +'天';
|
||||
}else if (row.lastDate < starttemp){
|
||||
return '提前' + day +'天';
|
||||
}else{
|
||||
return '按时完成'
|
||||
}
|
||||
}
|
||||
}else{
|
||||
// return '已完成';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const openDetail = (type: string, id?: number) => {
|
||||
commonStore.setStore("active", type);
|
||||
commonStore.setStore("id", id);
|
||||
commonStore.setStore("processDesignType", 'CASTING_DRAWING');
|
||||
router.push({
|
||||
name: 'ProcessDesignDetail',
|
||||
query: {
|
||||
operateId: Math.random()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await ProcessDesignApi.deleteProcessDesign(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ProcessDesignApi.exportProcessDesign(queryParams)
|
||||
download.excel(data, '工艺设计.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
@ -3,7 +3,7 @@
|
||||
<template #header>
|
||||
<span><span v-html="dialogTitle"></span>页</span>
|
||||
</template>
|
||||
<el-form ref="formRef" label-width="120px" :model="formData" v-loading="formLoading">
|
||||
<el-form ref="formRef" label-width="140px" :model="formData" v-loading="formLoading">
|
||||
<!-- 基础信息 横向布局 -->
|
||||
<el-card class="hl-card-info">
|
||||
<template #header>
|
||||
@ -96,6 +96,35 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row v-if="processDesignType == 'CASTING_DRAWING'">
|
||||
|
||||
<el-col :span="6">
|
||||
<el-form-item label="是否要铸件图" prop="hasCast">
|
||||
<!-- {{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, formData.hasCraft) }} -->
|
||||
<el-select class="!w-260px" :disabled="true" v-model="formData.hasCast" placeholder="请选择是否要铸件图">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="铸件图负责人" prop="castOwnerName">
|
||||
<!-- {{formData.craftOwnerName}} -->
|
||||
<el-input class="!w-260px" v-model="formData.castOwnerName" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="铸件图开始日期" prop="castStartDate">
|
||||
<!-- {{formatDate(formData.craftStartDate, 'YYYY-MM-DD')}} -->
|
||||
<el-date-picker class="!w-260px" v-model="formData.castStartDate" type="date" placeholder="请选择铸件图开始日期" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="铸件图结束日期" prop="castEndDate">
|
||||
<!-- {{formatDate(formData.craftEndDate, 'YYYY-MM-DD')}} -->
|
||||
<el-date-picker class="!w-260px" v-model="formData.castEndDate" type="date" placeholder="请选择铸件图结束日期" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row v-if="processDesignType == 'BLUEPRINT_3D'">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="3D负责人" prop="threeDimOwnerName">
|
||||
@ -527,7 +556,13 @@ const getWorkTime = (type) =>{
|
||||
|
||||
}
|
||||
}
|
||||
if(processDesignType.value == 'CASTING_DRAWING'){
|
||||
if(formData.value.castStartDate != null && formData.value.castEndDate != null ){
|
||||
beginTime = formData.value.castStartDate;
|
||||
endTime = formData.value.castEndDate
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if(beginTime != null && endTime != null){
|
||||
const start = new Date(beginTime ).getTime();
|
||||
@ -654,6 +689,20 @@ const openDelay = async() =>{
|
||||
return
|
||||
}
|
||||
}
|
||||
if(processDesignType.value == 'CASTING_DRAWING'){
|
||||
|
||||
if(formData.value.castEndDate != null ){
|
||||
var dateT = new Date(formData.value.blankDate)
|
||||
dateT.setHours(23,59,59,999)
|
||||
if(dateT.getTime() > date.getTime()){
|
||||
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
|
||||
return
|
||||
}
|
||||
}else{
|
||||
message.error("铸件图结束时间为空!请确认!")
|
||||
return
|
||||
}
|
||||
}
|
||||
await delaySubmit()
|
||||
|
||||
}
|
||||
@ -913,7 +962,22 @@ const onAddItem = async() => {
|
||||
// return
|
||||
}
|
||||
}
|
||||
|
||||
if(processDesignType.value == 'CASTING_DRAWING'){
|
||||
console.log(formData.value.castEndDate)
|
||||
if(formData.value.castEndDate != null ){
|
||||
var date1 = new Date(formData.value.castEndDate);
|
||||
date1.setHours(0,0,0,0)
|
||||
if(date1.getTime()< date.getTime()){
|
||||
if(formData.value.isDelay == null || formData.value.isDelay == 0){
|
||||
message.error("当前任务已超期,请延期后重试!")
|
||||
return
|
||||
}
|
||||
}
|
||||
}else{
|
||||
// message.error("工艺结束时间为空!请确认!")
|
||||
// return
|
||||
}
|
||||
}
|
||||
|
||||
if (formData.value.processDesignProgressList != null && formData.value.processDesignProgressList.length>0){
|
||||
for ( var i = 0 ; i < formData.value.processDesignProgressList.length ; i++){
|
||||
@ -978,6 +1042,9 @@ onMounted(() => {
|
||||
if(processDesignType.value == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'){
|
||||
overbuttonName.value='铸造项目完结'
|
||||
}
|
||||
if(processDesignType.value == 'CASTING_DRAWING'){
|
||||
overbuttonName.value='铸件图项目完结'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style scoped lang="less"></style>
|
||||
|
||||
@ -78,14 +78,14 @@
|
||||
<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="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="150" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="240" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="150" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="250" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||
@ -234,7 +234,7 @@ const getDetailMsg = (row) =>{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
<script setup lang="ts">
|
||||
import QRCode from 'qrcode'
|
||||
import printFinalDialog from './printFinalDialog.vue';
|
||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
||||
const dialogVisible = ref(false)
|
||||
let clauseId = null;
|
||||
const startPageNum = ref(0);
|
||||
@ -48,6 +49,11 @@ const specarr = ref([])
|
||||
const cnenList = ref([])
|
||||
const bomCodes = ref('')
|
||||
|
||||
const getDictLabel = (dictType, value) => {
|
||||
var intDictOptions = getIntDictOptions(dictType);
|
||||
const dict = intDictOptions.find(item => item.value == value)
|
||||
return dict?.label || value // 找不到时显示原始值
|
||||
}
|
||||
|
||||
|
||||
const open = async (bomCode, vals) => {
|
||||
@ -88,7 +94,9 @@ const open = async (bomCode, vals) => {
|
||||
const row1 = {
|
||||
code: newName,
|
||||
name: item.materialName == null ? '' : item.materialName,
|
||||
amount: item.amount == null ? '' : item.amount
|
||||
amount: item.amount == null ? '' : item.amount,
|
||||
unit:getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT,item.unit)
|
||||
|
||||
}
|
||||
printCodeName.value.push(row1)
|
||||
datavals.value.push(row)
|
||||
@ -96,7 +104,8 @@ const open = async (bomCode, vals) => {
|
||||
|
||||
dialogVisible.value = true
|
||||
const currentDate = new Date()
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
// const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}`
|
||||
var i = 0;
|
||||
await Promise.all(
|
||||
printCodeName.value.map(async (item) => {
|
||||
@ -111,16 +120,16 @@ const open = async (bomCode, vals) => {
|
||||
<span style="display: inline-block; width: 100%;font-weight: 700; border-bottom: 1px solid black; padding-bottom: 0.2mm;">${item.code}</span>
|
||||
</div>
|
||||
<div style="display: flex; align-items: center;">
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">名 称:</span>
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">名 称:</span>
|
||||
<span style="flex-grow: 1; border-bottom: 1px solid black; margin-left: -2.5mm;padding-bottom: 0.2mm;">${item.name}</span>
|
||||
</div>
|
||||
<div style="display: flex; position: absolute; bottom: 2mm; left: 0.1mm; right: 2mm; height: 34mm;">
|
||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: flex-start; width: 13mm; margin-right: 1mm;">
|
||||
<div style="display: flex; align-items: center;">
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">数 量:</span>
|
||||
<span style="font-size: 11px; margin-bottom: 0.5mm;white-space: nowrap;margin-left: -2.3mm;">${item.amount}</span>
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">数 量:</span>
|
||||
<span style="font-size: 11px; margin-bottom: 0.5mm;white-space: nowrap;margin-left: -2.3mm;">${item.amount} ${item.unit}</span>
|
||||
</div>
|
||||
<span style="font-size: 5px; line-height: 1; margin-top: auto; white-space: nowrap;">${formattedDate}</span>
|
||||
<span style="font-size: 11px; line-height: 1; margin-top: auto; white-space: nowrap;">${formattedDate}</span>
|
||||
</div>
|
||||
<div style="width: 34mm; height: 34mm; margin-left: auto; display: flex; align-items: flex-end; justify-content: flex-end;">
|
||||
<img style="width: 100%; height: 100%;" src="${qrCodeData}" alt="QR Code">
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import QRCode from 'qrcode'
|
||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
let clauseId = null;
|
||||
@ -130,7 +131,7 @@ const onPrint = () => {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.timestamp {
|
||||
font-size: 12px;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
margin-left: 0.5mm;
|
||||
margin-top: auto;
|
||||
@ -152,6 +153,11 @@ const onPrint = () => {
|
||||
dialogVisible.value = false;
|
||||
}, 100);
|
||||
};
|
||||
const getDictLabel = (dictType, value) => {
|
||||
var intDictOptions = getIntDictOptions(dictType);
|
||||
const dict = intDictOptions.find(item => item.value == value)
|
||||
return dict?.label || value // 找不到时显示原始值
|
||||
}
|
||||
|
||||
function beforeDialogClose(doClose: (shouldClose: boolean) => void): void {
|
||||
outopen()
|
||||
@ -180,7 +186,8 @@ const open = async (bomCode, vals) => {
|
||||
const row1 = {
|
||||
code: newName,
|
||||
name: item.materialName == null ? '' : item.materialName,
|
||||
amount: item.amount == null ? '' : item.amount
|
||||
amount: item.amount == null ? '' : item.amount,
|
||||
unit:getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT,item.unit)
|
||||
}
|
||||
printCodeName.value.push(row1)
|
||||
datavals.value.push(row)
|
||||
@ -188,7 +195,8 @@ const open = async (bomCode, vals) => {
|
||||
|
||||
dialogVisible.value = true
|
||||
const currentDate = new Date()
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
// const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}:${String(currentDate.getSeconds()).padStart(2, '0')}`
|
||||
const formattedDate = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(currentDate.getDate()).padStart(2, '0')} ${String(currentDate.getHours()).padStart(2, '0')}:${String(currentDate.getMinutes()).padStart(2, '0')}`
|
||||
|
||||
await Promise.all(
|
||||
printCodeName.value.map(async (item) => {
|
||||
@ -203,12 +211,12 @@ const open = async (bomCode, vals) => {
|
||||
<span >${item.code}</span>
|
||||
</div>
|
||||
<div class="name-line">
|
||||
<span class="name-label">名 称:</span>
|
||||
<span class="name-label">名 称: </span>
|
||||
<span class="name-underline">${item.name}</span>
|
||||
</div>
|
||||
<div class="bottom-section">
|
||||
<div class="quantity-container">
|
||||
<span class="quantity">数 量:${item.amount}</span>
|
||||
<span class="quantity">数 量: ${item.amount} ${item.unit}</span>
|
||||
<span class="timestamp">${formattedDate}</span>
|
||||
</div>
|
||||
<div class="qr-container">
|
||||
|
||||
@ -49,35 +49,35 @@
|
||||
<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="项目编号" align="center" prop="projectCode" min-width="220" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="150">
|
||||
<el-table-column fixed label="项目编号" align="center" prop="projectCode" min-width="150" />
|
||||
<el-table-column fixed label="生产状态" align="center" prop="status" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="300" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||
<el-table-column fixed label="客户名称" align="center" prop="customerName" min-width="150" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="250" />
|
||||
<el-table-column label="子项目名称" align="center" prop="projectSubName" min-width="280" />
|
||||
<el-table-column label="性质" align="center" prop="property" min-width="120">
|
||||
<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="planCode" min-width="180">
|
||||
<el-table-column label="计划单号" align="center" prop="planCode" min-width="120">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openDetail('detail', scope.row.id)">
|
||||
{{ scope.row.planCode }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="350" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="150">
|
||||
<el-table-column label="子项目编号" align="center" prop="projectSubCode" min-width="200" />
|
||||
<el-table-column label="所属业务线" align="center" prop="businessLine" min-width="120">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_BUSINESS_LINE" :value="scope.row.businessLine" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="毛坯负责人" align="center" prop="blankOwnerName" min-width="120" />
|
||||
<el-table-column fixed="right" label="毛坯截止日期" align="center" prop="blankDate" :formatter="dateFormatter2" min-width="140" />
|
||||
<el-table-column fixed="right" label="毛坯截止日期" align="center" prop="blankDate" :formatter="dateFormatter2" min-width="120" />
|
||||
<el-table-column fixed="right" label="完成情况" align="center" prop="progress" min-width="120">
|
||||
<template #default="scope">
|
||||
{{getDetailMsg(scope.row)}}
|
||||
@ -213,7 +213,7 @@ const getDetailMsg = (row) =>{
|
||||
return '实施中';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
|
||||
@ -108,7 +108,7 @@
|
||||
<div class="print-header">
|
||||
<div class="order-info">
|
||||
<div style="display: flex;">
|
||||
<span style="width: 200px;">订单编号:{{ printData.purchaseNo }}</span>
|
||||
<span style="width: 160px;">订单编号:{{ printData.purchaseNo }}</span>
|
||||
<span style="margin-left:10px; width: 120px;">订单日期:{{ formatDate(printData.ordDate) }}</span>
|
||||
<span style="margin-left:10px;width: 210px; white-space: nowrap;">供应商:{{ printData.supplierName }}</span>
|
||||
</div>
|
||||
@ -116,7 +116,6 @@
|
||||
<span style="margin-left:10px;width: 100px">联系人:{{ printData.contactName }}</span>
|
||||
<span style="margin-left:10px;width: 100px">电话:{{ printData.contactMobile }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<table class="print-table">
|
||||
@ -146,8 +145,8 @@
|
||||
<th>要求完成日期</th>
|
||||
<th>技术要求</th>
|
||||
<th>理论重量</th>
|
||||
<th>单价(元)</th>
|
||||
<th>总价格(元)</th>
|
||||
<th>单价</th>
|
||||
<th>总价格</th>
|
||||
<th>备注</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -324,7 +323,7 @@ function doPrint() {
|
||||
<style>
|
||||
@page {
|
||||
size: 241mm 140mm;
|
||||
margin: 5mm;
|
||||
margin: 5mm 12mm;
|
||||
}
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
@ -340,8 +339,6 @@ function doPrint() {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
padding-left:8px
|
||||
|
||||
}
|
||||
|
||||
.stamp-info {
|
||||
|
||||
@ -79,31 +79,31 @@
|
||||
<div class="print-header">
|
||||
<div class="order-info">
|
||||
<div style="display: flex;">
|
||||
<span style="width: 200px;">订单编号:{{ printData.purchaseNo }}</span>
|
||||
<span style="margin-left:10px; width: 140px;">订单日期:{{ formatDate(printData.ordDate) }}</span>
|
||||
<span style="margin-left:10px;width: 220px">供应商:{{ printData.supplierName }}</span>
|
||||
<span style="width: 160px;">订单编号:{{ printData.purchaseNo }}</span>
|
||||
<span style="margin-left:10px; width: 120px;">订单日期:{{ formatDate(printData.ordDate) }}</span>
|
||||
<span style="margin-left:10px;width: 200px">供应商:{{ printData.supplierName }}</span>
|
||||
</div>
|
||||
<div style="display: flex;">
|
||||
<span style="margin-left:10px;width: 100px">联系人:{{ printData.contactName }}</span>
|
||||
<span style="margin-left:10px;width: 120px">电话:{{ printData.contactMobile }}</span>
|
||||
<span style="margin-left:10px;width: 110px">电话:{{ printData.contactMobile }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<table class="print-table">
|
||||
<colgroup>
|
||||
<col style="width: 4%;" />
|
||||
<col style="width: 3%;" />
|
||||
<col style="width: 14%;" />
|
||||
<col style="width: 4%;" />
|
||||
<col style="width: 3%;" />
|
||||
<col style="width: 15%;" />
|
||||
<col style="width: 7%;" />
|
||||
<col style="width: 8%;" />
|
||||
<col style="width: 4%;" />
|
||||
<col style="width: 7%;" />
|
||||
<col style="width: 8%;" />
|
||||
<col style="width: 8%;" />
|
||||
<col style="width: 7%;" />
|
||||
<col style="width: 6%;" />
|
||||
<col style="width: 9%;" />
|
||||
<col style="width: 9%;" />
|
||||
<col style="width: 7%;" />
|
||||
<col style="width: 3%;" />
|
||||
<col style="width: 5%;" />
|
||||
|
||||
</colgroup>
|
||||
<thead>
|
||||
@ -118,8 +118,8 @@
|
||||
<th>要求完成日期</th>
|
||||
<th>计划到货日期</th>
|
||||
<th>采购数量</th>
|
||||
<th>单价(元)</th>
|
||||
<th>总价格(元)</th>
|
||||
<th>单价</th>
|
||||
<th>总价格</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -304,7 +304,7 @@ function doPrint() {
|
||||
<style>
|
||||
@page {
|
||||
size: 241mm 140mm;
|
||||
margin: 5mm;
|
||||
margin: 5mm 21mm;
|
||||
}
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
@ -320,7 +320,6 @@ function doPrint() {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
padding-left:8px
|
||||
|
||||
}
|
||||
|
||||
@ -339,7 +338,7 @@ function doPrint() {
|
||||
.print-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-top: 10px;
|
||||
/*margin-top: 10px;*/
|
||||
table-layout: fixed;
|
||||
border: 2px solid #000 !important; /* 加粗外边框 */
|
||||
}
|
||||
@ -347,8 +346,8 @@ function doPrint() {
|
||||
border: 1px solid #000 !important; /* 使用黑色边框,更清晰 */
|
||||
padding: 2px 0px;
|
||||
text-align: center;
|
||||
height: auto;
|
||||
min-height: 26px;
|
||||
height: 12px;
|
||||
/*min-height: 26px;*/
|
||||
// line-height: 1.2;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
@ -369,7 +368,7 @@ function doPrint() {
|
||||
overflow-wrap: break-word !important;
|
||||
padding: 4px 2px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@ -472,7 +471,7 @@ const getList = async () => {
|
||||
.print-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-top: 10px;
|
||||
//margin-top: 10px;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
|
||||
@ -117,34 +117,177 @@
|
||||
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">材料成本</span>
|
||||
</template>
|
||||
<el-table v-loading="loading" :data="listcl" :stripe="true" :show-overflow-tooltip="true" border class="hl-table">
|
||||
<el-table-column type="index" width="100" fixed label="序号" align="center" />
|
||||
<el-table-column type="index" width="70" fixed label="序号" align="center" />
|
||||
|
||||
|
||||
<el-table-column v-if="false" label="ID" align="center" prop="id" width="240px" />
|
||||
<el-table-column label="物料编号" align="center" prop="materialCode" width="200px" />
|
||||
<el-table-column label="物料名称" align="center" prop="materialName" width="240px"/>
|
||||
<!-- <el-table-column label="物料类型" align="center" prop="materialType" width="240px"/>-->
|
||||
<el-table-column label="物料类型" align="center" prop="materialType" width="150px" >
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.materialType" v-if="scope.row.type==0"/>
|
||||
<el-table-column label="零件名称" align="center" prop="materialName" width="200px" />
|
||||
<el-table-column label="材质" align="center" prop="compositionName" width="150px"/>
|
||||
|
||||
<el-table-column label="规格型号" align="center" prop="spec" width="100"/>
|
||||
<el-table-column label="数量" align="center" prop="amount" width="100"/>
|
||||
<el-table-column label="泡沫" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['泡沫']">
|
||||
<span >
|
||||
<span >{{ row.map['泡沫'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="规格型号" align="center" prop="materialSpec" width="100"/>
|
||||
<el-table-column label="领料数量" align="center" prop="amount" width="100"/>
|
||||
<!-- <el-table-column label="系统单位" align="center" prop="unit" />-->
|
||||
<el-table-column label="系统单位" align="center" prop="unit" width="100px">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.unit" />
|
||||
<el-table-column label="下料" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['下料']">
|
||||
<span >
|
||||
<span >{{ row.map['下料'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="平均采购价(暂估)" align="center" prop="zanGuMoney" width="200"/>
|
||||
<el-table-column label="平均采购价(实际)" align="center" prop="shiJiMoney" width="200"/>
|
||||
<!-- <el-table-column label="平均采购价(实际)" align="center" width="100">-->
|
||||
<!-- <template v-slot="scope">-->
|
||||
<!-- <el-input v-model="scope.row.shiJiMoney" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="采购金额(实际)" align="center" prop="caiGouMoney" width="200"/>
|
||||
<el-table-column label="电焊" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['电焊']">
|
||||
<span >
|
||||
<span >{{ row.map['电焊'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="编程" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['编程']">
|
||||
<span >
|
||||
<span >{{ row.map['编程'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开粗" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['开粗']">
|
||||
<span >
|
||||
<span >{{ row.map['开粗'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column> <el-table-column label="铣床" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['铣床']">
|
||||
<span >
|
||||
<span >{{ row.map['铣床'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column> <el-table-column label="车床" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['车床']">
|
||||
<span >
|
||||
<span >{{ row.map['车床'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="热处理" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['热处理']">
|
||||
<span >
|
||||
<span >{{ row.map['热处理'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="磨床" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['磨床']">
|
||||
<span >
|
||||
<span >{{ row.map['磨床'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数控1" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['数控1']">
|
||||
<span >
|
||||
<span >{{ row.map['数控1'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数控2" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['数控2']">
|
||||
<span >
|
||||
<span >{{ row.map['数控2']}}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="线切割" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['线切割']">
|
||||
<span >
|
||||
<span >{{ row.map['线切割'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="电极" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['电极']">
|
||||
<span >
|
||||
<span >{{ row.map['电极'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="火花" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['火花']">
|
||||
<span >
|
||||
<span >{{ row.map['火花'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="刻字" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['刻字']">
|
||||
<span >
|
||||
<span >{{ row.map['刻字'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="网格" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['网格']">
|
||||
<span >
|
||||
<span >{{ row.map['网格'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="深孔钻" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['深孔钻']">
|
||||
<span >
|
||||
<span >{{ row.map['深孔钻'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="钻孔" min-width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['钻孔']">
|
||||
<span >
|
||||
<span >{{ row.map['钻孔'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="单件成本" align="center" prop="assemblyLaborCost" width="120px"/>
|
||||
|
||||
|
||||
</el-table>
|
||||
@ -163,27 +306,36 @@
|
||||
<el-table-column label="数量" align="center" prop="quantity" />
|
||||
<el-table-column label="装配" min-width="145" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map.has('装配')">
|
||||
<template v-if="row.map && row.map['装配']">
|
||||
<span >
|
||||
<span >{{ row.map.get('装配') }}</span>
|
||||
<span >{{ row.map['装配'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="包装" min-width="145" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map.has('包装')">
|
||||
<template v-if="row.map && row.map['包装']">
|
||||
<span >
|
||||
<span >{{ row.map.get('包装') }}</span>
|
||||
<span >{{ row.map['包装'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="钻孔" min-width="145" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map.has('钻孔')">
|
||||
<template v-if="row.map && row.map['钻孔']">
|
||||
<span >
|
||||
<span >{{ row.map.get('钻孔') }}</span>
|
||||
<span >{{ row.map['钻孔'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="检验成本" min-width="145" align="center">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.map && row.map['检验']">
|
||||
<span >
|
||||
<span >{{ row.map['检验'] }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
@ -202,11 +354,11 @@
|
||||
<el-table v-loading="loading" :data="listYf" :stripe="true" :show-overflow-tooltip="true" border class="hl-table">
|
||||
<el-table-column type="index" min-width="60" fixed label="序号" align="center" />
|
||||
<el-table-column label="发货日期" align="center" prop="deliverDate" width="240px" :formatter="dateFormatter2"/>
|
||||
<el-table-column label="发货数量" align="center" prop="amounts" />
|
||||
<el-table-column label="重量" align="center" prop="weights" />
|
||||
<el-table-column label="发货数量" align="center" prop="amount" />
|
||||
<el-table-column label="重量" align="center" prop="weight" />
|
||||
<el-table-column label="发货人" align="center" prop="deliverPersonName" />
|
||||
|
||||
<el-table-column label="运费" align="center" prop="yunFeiMoney" />
|
||||
<el-table-column label="运费" align="center" prop="yunFei" />
|
||||
|
||||
|
||||
|
||||
@ -227,8 +379,7 @@
|
||||
import * as SaleeOrderCost from '@/api/heli/saleordercost'
|
||||
import {dateFormatter2} from "@/utils/formatTime";
|
||||
import {DICT_TYPE} from "@/utils/dict";
|
||||
import {number} from "vue-types";
|
||||
import {getListcl, getListYfDetails, getListZp} from "@/api/heli/saleordercost";
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { query } = useRoute()
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
<script setup lang="ts">
|
||||
import QRCode from 'qrcode'
|
||||
import printFinalDialog from './printFinalDialog.vue';
|
||||
import {getIntDictOptions} from "@/utils/dict";
|
||||
const dialogVisible = ref(false)
|
||||
let clauseId = null;
|
||||
const startPageNum = ref(0);
|
||||
@ -47,8 +48,6 @@ const datavals = ref([])
|
||||
const cnenList = ref([])
|
||||
const bomCodes = ref('')
|
||||
|
||||
|
||||
|
||||
const open = async (vals) => {
|
||||
const sortedVals = [...vals].sort((a, b) => {
|
||||
return b.id - a.id;
|
||||
@ -84,13 +83,13 @@ const open = async (vals) => {
|
||||
const qrCodeElement = document.getElementById('qrCodeContainer')
|
||||
if (qrCodeElement) {
|
||||
(qrCodeElement.innerHTML +=
|
||||
`<div style="width: 90mm; height: 60mm; padding: 2mm; box-sizing: border-box; font-family: monospace; position: relative; background-color: white; color: black;">
|
||||
`<div style="width: 90mm; height: 60mm; box-sizing: border-box; font-family: monospace; position: relative; background-color: white; color: black;">
|
||||
<div style="font-size: 11px; margin-bottom: 1mm;">
|
||||
<span style="display: inline-block; width: 100%; border-bottom: 1px solid black; padding-bottom: 0.2mm;">物料编码:${item.code}</span>
|
||||
<span style="display: inline-block; width: 100%; border-bottom: 1px solid black; padding-bottom: 0.2mm;">物料编码: ${item.code}</span>
|
||||
</div>
|
||||
<div style="display: flex; align-items: center;">
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">简 称:</span>
|
||||
<span style="flex-grow: 1; border-bottom: 1px solid black; margin-left: -1mm;padding-bottom: 0.2mm;">${item.name}</span>
|
||||
<span style="white-space: nowrap; margin-right: 1mm;">简 称:</span>
|
||||
<span style="flex-grow: 1; border-bottom: 1px solid black; padding-bottom: 0.2mm;">${item.name}</span>
|
||||
</div>
|
||||
<div style="display: flex; position: absolute; bottom: 2mm; left: 2mm; right: 2mm; height: 34mm;">
|
||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: flex-start; width: 13mm; margin-right: 1mm;">
|
||||
@ -104,8 +103,9 @@ const open = async (vals) => {
|
||||
line-height: 1.2; min-height: calc(14px * 1.2 * 2);
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
margin-left: -2.5mm;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;">规 格:${item.spec}</span>
|
||||
overflow: hidden;">规 格: ${item.spec}</span>
|
||||
<span style=" width: 52mm;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
@ -113,7 +113,8 @@ const open = async (vals) => {
|
||||
text-indent: -15.8mm;
|
||||
padding-left: 15.8mm;
|
||||
font-size: 11px;
|
||||
line-height: 1.2;">库 区:${item.rg}</span>
|
||||
margin-left: -2.5mm;
|
||||
line-height: 1.2;">库 区: ${item.rg}</span>
|
||||
<span style=" width: 52mm;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
@ -121,7 +122,8 @@ const open = async (vals) => {
|
||||
text-indent: -15.8mm;
|
||||
padding-left: 15.8mm;
|
||||
font-size: 11px;
|
||||
line-height: 1.2;">库 位:${item.pg}</span>
|
||||
margin-left: -2.5mm;
|
||||
line-height: 1.2;">库 位: ${item.pg}</span>
|
||||
</div>
|
||||
<div style="width: 34mm; height: 34mm; margin-left: auto; display: flex; align-items: flex-end; justify-content: flex-end;">
|
||||
<img style="width: 100%; height: 100%;" src="${qrCodeData}" alt="QR Code">
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import QRCode from 'qrcode'
|
||||
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
let clauseId = null;
|
||||
@ -201,6 +202,7 @@ const open = async (vals) => {
|
||||
rg: item.rgName == null ? '' : item.rgName,
|
||||
pg: item.pnName == null ? '' : item.pnName,
|
||||
//amount: item.amount == null ? '' : item.amount
|
||||
|
||||
}
|
||||
printCodeName.value.push(row1)
|
||||
})
|
||||
@ -217,17 +219,17 @@ const open = async (vals) => {
|
||||
(qrCodeElement.innerHTML +=
|
||||
`<div class="page qr-page">
|
||||
<div class="code-line">
|
||||
<span>物料编码:${item.code}</span>
|
||||
<span>物料编码: ${item.code}</span>
|
||||
</div>
|
||||
<div class="name-line">
|
||||
<span class="name-label">简 称:</span>
|
||||
<span class="name-label">简 称: </span>
|
||||
<span class="name-underline">${item.name}</span>
|
||||
</div>
|
||||
<div class="bottom-section">
|
||||
<div class="quantity-container">
|
||||
<span class="quantity spec">规 格: ${item.spec}</span>
|
||||
<span class="quantity rg">库 区: ${item.rg}</span>
|
||||
<span class="quantity pg">库 位: ${item.pg}</span>
|
||||
<span class="quantity spec">规 格: ${item.spec}</span>
|
||||
<span class="quantity rg">库 区: ${item.rg}</span>
|
||||
<span class="quantity pg">库 位: ${item.pg}</span>
|
||||
</div>
|
||||
<div class="qr-container">
|
||||
<img class="qr-code" src="${qrCodeData}" alt="QR Code">
|
||||
|
||||
@ -319,7 +319,7 @@ style=" display: flex;
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
|
||||
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)&&procedureList.find(p => p.id == row.procedureId)?.name != '钻孔'" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
|
||||
<el-option
|
||||
v-for="item in ownerList2"
|
||||
:key="item.index"
|
||||
@ -327,6 +327,14 @@ style=" display: flex;
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)&&procedureList.find(p => p.id == row.procedureId)?.name == '钻孔'" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
|
||||
<el-option
|
||||
v-for="item in ownerList3"
|
||||
:key="item.index"
|
||||
:label="item.label"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item :prop="`${$index}.owner`" :rules="subFormRules.owner" class="mb-0px!">
|
||||
<UserSelect
|
||||
@ -387,7 +395,7 @@ v-model="row.deviceModel"
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="summary" min-width="130px">
|
||||
<el-table-column label="备注" prop="summary" min-width="400px">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.summary`" class="mb-0px!">
|
||||
<el-input
|
||||
@ -396,17 +404,17 @@ v-model="row.deviceModel"
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="系统单位" align="center" prop="unit" width="70px">
|
||||
<template #default>
|
||||
{{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, formData.unit) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否报工" prop="isReport" width="70px">
|
||||
<template #default="scope">
|
||||
{{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, scope.row.isReport) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工序编号" prop="procedureCode" width="140" />
|
||||
<!-- <el-table-column label="系统单位" align="center" prop="unit" width="70px">-->
|
||||
<!-- <template #default>-->
|
||||
<!-- {{ getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, formData.unit) }}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="是否报工" prop="isReport" width="70px">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- {{ getDictLabel(DICT_TYPE.HELI_COMMON_IS_OR_NOT, scope.row.isReport) }}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="工序编号" prop="procedureCode" width="140" />-->
|
||||
|
||||
<el-table-column fixed="right" label="操作" align="center" min-width="90">
|
||||
<template #default="scope">
|
||||
@ -1281,6 +1289,7 @@ const personList = ref([])
|
||||
|
||||
const ownerList1 = ref<OwnerListType[]>([]);
|
||||
const ownerList2 = ref<OwnerListPostType[]>([]);
|
||||
const ownerList3 = ref<OwnerListPostType[]>([]);
|
||||
const dispatchListTemp = ref([])
|
||||
const craftInfos = ref([])
|
||||
const queryData = async (id?: number) => {
|
||||
@ -1337,6 +1346,13 @@ const queryData = async (id?: number) => {
|
||||
if (!exists) {
|
||||
ownerList2.value.push({ index: 1, id: '3', label: '3' });
|
||||
}
|
||||
const maxIndex = ownerList2.value.reduce((max, item) => Math.max(max, item.index || 0), 0);
|
||||
// 创建 ownerList3.value,并添加 4 和 5,index 递增
|
||||
ownerList3.value = [
|
||||
...ownerList2.value,
|
||||
{ index: maxIndex + 1, id: '4', label: '4' },
|
||||
{ index: maxIndex + 2, id: '5', label: '5' }
|
||||
];
|
||||
}
|
||||
|
||||
formData.value.bomCode = formData.value.projectSubCode
|
||||
|
||||
Loading…
Reference in New Issue
Block a user