近期修改

This commit is contained in:
z 2025-11-05 09:01:37 +08:00
parent a38727d8f0
commit 5107396ebd
37 changed files with 1202 additions and 220 deletions

View File

@ -83,4 +83,10 @@ public class MaterialPlanPageReqVO extends PageParam {
private String supplierName;
@Schema(description = "客户简称")
private String customerName;
@Schema(description = "采购单号")
private String purchaseNo;
@Schema(description = "零件明细id集合")
List<Long> boomDetailIds;
@Schema(description = "子项目id集合")
List<Long> projectPlanSubIds;
}

View File

@ -158,6 +158,12 @@ public class PurchaseOrderMakeController {
public CommonResult<Boolean> createPurchaseOrderMakeAndDetail(@Valid @RequestBody List<MaterialPlanBoomDO> saveReqVOs) {
return success(partPurchaseOrderService.createPurchaseOrderMakeAndDetailBatch(saveReqVOs));
}
@PostMapping("/updateDuEmp")
@Operation(summary = "零件采购单送审生成")
@PreAuthorize("@ss.hasPermission('heli:material-plan:query')")
public CommonResult<Boolean> updateDuEmp(@Valid @RequestBody List<MaterialPlanBoomDO> saveReqVOs) {
return partPurchaseOrderService.updateDuEmp(saveReqVOs);
}
@GetMapping("/review")
@Operation(summary = "小程序采购单审核分页")
@PreAuthorize("@ss.hasPermission('heli:purchase-order-make:query')")

View File

@ -18,7 +18,6 @@ public class PurchaseOrderMakeDetailSaveReqVO {
private Long id;
@Schema(description = "采购单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13340")
@NotNull(message = "采购单id不能为空")
private Long purchaseOrderId;
private Integer buyType;

View File

@ -112,4 +112,6 @@ public class PurchaseOrderNoRespVO {
private Integer receivingStatus1;
@Schema(description = "创建人")
private String submitUserName;
@Schema(description = "工序名称")
private String procedureName;
}

View File

@ -0,0 +1,12 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class BubbleFeeResult {
private Long bomDetailId;
private Long procedureId;
private BigDecimal cost;
}

View File

@ -83,4 +83,6 @@ public class TaskDispatchPageReqVO extends PageParam {
private String blueprintNo;
@Schema(description = "零件名称")
private String boomName;
@Schema(description = "已发货零件显示")
private String flag;
}

View File

@ -182,12 +182,35 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
* 泡沫
*/
private String isFoam;
@TableField(exist = false)
/**
* 订单id
*/
private Long projectId;
/**
* 生产计划id
*/
private Long projectPlanId;
/**
* 客户id
*/
private Long customerId;
/**
* 客户简称
*/
private String brief;
/**
* 项目名称
*/
private String projectName;
/**
* 项目名称简码
*/
private String projectNameSim;
@TableField(exist = false)
private String matName;
@TableField(exist = false)
private String brief;
private String briefs;
@TableField(exist = false)
private String blueprintNo;
@TableField(exist = false)

View File

@ -140,6 +140,8 @@ public class PurchaseOrderNoDO extends BaseDO {
@TableField(exist = false)
private String userMobile;
@TableField(exist = false)
private String procedureName;
@TableField(exist = false)
private String contactName;
@TableField(exist = false)
private String contactMobile;

View File

@ -96,6 +96,8 @@ public class TaskDispatchDetailDO extends BaseDO {
private LocalDateTime endTime;
private Long dispatchType;
private String postId;
private String purchaseNo;
private String projectPurchaseOrderMakeDetailId;
private String isOutsourcing;
private String projectMaterialPlanNo;
private Long projectMaterialPlanDetailId;

View File

@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom;
import java.util.*;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
@ -22,6 +23,7 @@ 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.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.rg.RgDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageInventoryDO;
@ -34,6 +36,7 @@ import com.chanko.yunxi.mes.module.heli.enums.ProcessBomStatusEnum;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.google.common.collect.Lists;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.*;
import org.apache.ibatis.annotations.Param;
@ -238,6 +241,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.select("COALESCE(m.the_weight, t.mat_weight) as theWeight","COALESCE(m.the_weight, t.mat_weight) as theWeight")
.select("COALESCE(m.purchase_amount, t.boom_amount) AS purchaseAmounts,m.supplier_id as supplierIds,m.estimated_price as estimatedPrices,m.unit_price as unitPrice")
.select("COALESCE(m.arrive_time, t.boom_arrive_date) as arriveTimes,COALESCE(m.description, t.description) as descriptions")
.select("COALESCE(m.du_emp_id, t.du_emp_id) as duEmpId")
.select("m.is_foam as isFoams","m.foam_price as foamPrice")
.select("CASE \n" +
" WHEN t.is_foam = 'Y' THEN 1 \n" +
@ -250,6 +254,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.leftJoin(ProjectOrderDO.class,"pro",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.leftJoin(ProjectOrderSubDO.class,"sub",ProjectOrderSubDO::getId,MaterialPlanBoomDO::getProjectPlanSubId)
.leftJoin(AdminUserDO.class, "a", AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
.leftJoin(AdminUserDO.class,"admin", AdminUserDO::getId, PurchaseOrderMakeDetailDO::getDuEmpId)
.leftJoin(ProcedureDO.class, "c", ProcedureDO::getId, MaterialPlanBoomDO::getProcedureId)
.leftJoin(CompositionDO.class, "e", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
.leftJoin(SupplierDO.class, "f", SupplierDO::getId, PurchaseOrderMakeDetailDO::getSupplierId)
@ -263,21 +268,33 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.like(!StringUtils.isEmpty(pageReqVO.getMaterialName()), MaterialPlanBoomDO::getMatName, pageReqVO.getMaterialName())
.like(!StringUtils.isEmpty(pageReqVO.getMatName()), MaterialPlanBoomDO::getMatName, pageReqVO.getMatName())
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.like(!StringUtils.isEmpty(pageReqVO.getDuEmpName()), AdminUserDO::getNickname, pageReqVO.getDuEmpName())
// .like(!StringUtils.isEmpty(pageReqVO.getDuEmpName()), AdminUserDO::getNickname, pageReqVO.getDuEmpName())
.like(!StringUtils.isEmpty(pageReqVO.getProcedureName()), ProcedureDO::getName, pageReqVO.getProcedureName())
.eq(!StringUtils.isEmpty(pageReqVO.getMatType()), MaterialPlanDO::getMatType, pageReqVO.getMatType())
.eq(!StringUtils.isEmpty(pageReqVO.getStatus()), MaterialPlanBoomDO::getIsPurYard, pageReqVO.getStatus())
.like(ObjectUtil.isNotEmpty(pageReqVO.getSupplierName()), SupplierDO::getBrief, pageReqVO.getSupplierName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getCustomerName()), MaterialPlanDO::getBrief, pageReqVO.getCustomerName())
.in(Objects.nonNull(pageReqVO.getBoomDetailIds()), ProcessBomDetailDO::getId, pageReqVO.getBoomDetailIds())
.in(Objects.nonNull(pageReqVO.getProjectPlanSubIds()), ProjectOrderSubDO::getId, pageReqVO.getProjectPlanSubIds())
.in(Objects.nonNull(pageReqVO.getMplanStatus()), MaterialPlanBoomDO::getMplanStatus, pageReqVO.getMplanStatus() != null && pageReqVO.getMplanStatus() != 0 ? Arrays.asList(pageReqVO.getMplanStatus()) : Arrays.asList(0, 3))
.eq(Objects.nonNull(pageReqVO.getProjectMaterialPlanNo()), MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());
if (Objects.nonNull(pageReqVO.getMplanStatus())) {
if (pageReqVO.getMplanStatus() == 0 || pageReqVO.getMplanStatus() == 3){
if (ObjectUtil.isNotEmpty(pageReqVO.getDuEmpName())){
query.like("a.nickname", pageReqVO.getDuEmpName());
}
}else {
if (ObjectUtil.isNotEmpty(pageReqVO.getDuEmpName())){
query.like("admin.nickname", pageReqVO.getDuEmpName());
}
}
}
if (Objects.nonNull(pageReqVO.getMplanStatus())) {
// 根据 mplanStatus 的值动态设置排序字段
if (pageReqVO.getMplanStatus() == 0){
query.orderByAsc(MaterialPlanDO::getProjectName);
query.orderByAsc(ProcessBomDetailDO::getBlueprintNo);
}else if (pageReqVO.getMplanStatus() == 1 || pageReqVO.getMplanStatus() == 2) {
query.orderByDesc(MaterialPlanBoomDO::getPurchaseNo);
query.orderByAsc(ProcessBomDetailDO::getBlueprintNo);
@ -292,6 +309,8 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
PageResult<MaterialPlanBoomDO> pageResult = selectPage(pageReqVO, query);
return pageResult;
}
@Delete("DELETE FROM project_material_plan_boom WHERE id= #{id}")
void deletePlanBoom(@Param("id") Long id);
// default PageResult<MaterialPlanBoomDO> selectPage(MaterialPlanBoomPageReqVO reqVO) {

View File

@ -189,7 +189,10 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)
.select("c.nickname as duEmpName")
.select("a.brief as brief")
.select(" CASE \n" +
" WHEN a.goods_type = 1 THEN a.brief \n" +
" ELSE t.brief \n" +
" END as briefs")
.select("d.brief as supplierName")
.select("bom.blueprint_no as blueprintNo")
.select("CASE \n" +
@ -202,6 +205,7 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.select("DATE_FORMAT(t.require_time, '%Y-%m-%d') AS requir")
.leftJoin(PurchaseOrderMakeDO.class,"a",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
.leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,PurchaseOrderMakeDO::getProjectId)
.leftJoin(ProjectOrderDO.class,"o",ProjectOrderDO::getId,PurchaseOrderMakeDetailDO::getProjectId)
.leftJoin(AdminUserDO.class,"c", AdminUserDO::getId,PurchaseOrderMakeDetailDO::getDuEmpId)
.leftJoin(SupplierDO.class, "d", SupplierDO::getId,PurchaseOrderMakeDetailDO::getSupplierId)
.leftJoin(ProcedureDO.class, "e", ProcedureDO::getId, PurchaseOrderMakeDetailDO::getProcedureId)
@ -212,13 +216,13 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.eq(ObjectUtil.isNotEmpty(pageReqVO.getGoodsType()) ,PurchaseOrderMakeDO::getGoodsType, pageReqVO.getGoodsType())
// .like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, pageReqVO.getProjectName())
// .like(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()), ProjectOrderSubDO::getName, pageReqVO.getProjectSubName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectNameSim, pageReqVO.getProjectName())
// .like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectNameSim, pageReqVO.getProjectName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectSubName()), ProjectOrderSubDO::getNameSim, pageReqVO.getProjectSubName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getMaterialName()), PurchaseOrderMakeDetailDO::getBoomName, pageReqVO.getMaterialName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getStatus()), PurchaseOrderMakeDetailDO::getStatus, pageReqVO.getStatus())
.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
// .like(ObjectUtil.isNotEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.like(ObjectUtil.isNotEmpty(pageReqVO.getOwnerName()), AdminUserDO::getNickname, pageReqVO.getOwnerName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getBrief()), PurchaseOrderMakeDO::getBrief, pageReqVO.getBrief())
// .like(ObjectUtil.isNotEmpty(pageReqVO.getBrief()), PurchaseOrderMakeDO::getBrief, pageReqVO.getBrief())
.like(ObjectUtil.isNotEmpty(pageReqVO.getBlueprintNo()), ProcessBomDetailDO::getBlueprintNo, pageReqVO.getBlueprintNo())
.like(ObjectUtil.isNotEmpty(pageReqVO.getProcedureName()), ProcedureDO::getName, pageReqVO.getProcedureName())
.eq(ObjectUtil.isNotEmpty(pageReqVO.getReceivingStatus()), "COALESCE(no.receiving_status, 1) ", pageReqVO.getReceivingStatus()) .like(ObjectUtil.isNotEmpty(pageReqVO.getSupplierName()), SupplierDO::getBrief, pageReqVO.getSupplierName());
@ -231,6 +235,33 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.withSecond(59);
query.between(PurchaseOrderMakeDetailDO::getCreateTime, pageReqVO.getCreateTime()[0], endOfDay);
}
if (ObjectUtil.isNotEmpty(pageReqVO.getProjectName())){
if (ObjectUtil.isNotEmpty(pageReqVO.getGoodsType())){
if (pageReqVO.getGoodsType() == 1){
query.like("b.project_name_sim", pageReqVO.getProjectName());
}else if (pageReqVO.getGoodsType() == 2){
query.like("o.project_name_sim", pageReqVO.getProjectName());
}
}
}
if (ObjectUtil.isNotEmpty(pageReqVO.getProjectCode())){
if (ObjectUtil.isNotEmpty(pageReqVO.getGoodsType())){
if (pageReqVO.getGoodsType() == 1){
query.like("b.code", pageReqVO.getProjectCode());
}else if (pageReqVO.getGoodsType() == 2){
query.like("o.code", pageReqVO.getProjectCode());
}
}
}
if (ObjectUtil.isNotEmpty(pageReqVO.getBrief())){
if (ObjectUtil.isNotEmpty(pageReqVO.getGoodsType())){
if (pageReqVO.getGoodsType() == 1){
query.like( PurchaseOrderMakeDO::getBrief, pageReqVO.getBrief());
}else if (pageReqVO.getGoodsType() == 2){
query.like( PurchaseOrderMakeDetailDO::getBrief, pageReqVO.getBrief());
}
}
}
return selectPage(pageReqVO, query);
}
}

View File

@ -46,6 +46,7 @@ public interface PurchaseOrderNoMapper extends BaseMapperX<PurchaseOrderNoDO> {
" WHEN SUM(CASE d.receiving_status WHEN 1 THEN 1 ELSE 0 END) = COUNT(d.id) THEN 1 " + // 全部为1
" ELSE 2 " + // 其他情况
"END AS receivingStatus1")
.select("pro.name as procedureName")
.leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)
.leftJoin(PurchaseOrderNoDetailDO.class,"d", PurchaseOrderNoDetailDO::getPurchaseOrderId, PurchaseOrderNoDO::getId)
// .leftJoin(ProcedureDO.class,"pro", ProcedureDO::getId, PurchaseOrderNoDetailDO::getProcedureId)

View File

@ -198,7 +198,6 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
return selectPage(pageReqVO, query);
}
default PageResult<PurchaseOrderNoDetailDO> getReceivingGoods(PurchaseOrderNoDetailPageReqVO pageReqVO){
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
@ -276,7 +275,7 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
.leftJoin(CustomerDO.class,"c", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.disableSubLogicDel()
.groupBy(MaterialPlanDetailDO::getId);
query.like(!StringUtils.isEmpty(pageReqVO.getPurchaseNo()), PurchaseOrderDO::getPurchaseNo, pageReqVO.getPurchaseNo())
query.like(!StringUtils.isEmpty(pageReqVO.getPurchaseNo()), PurchaseOrderNoDO::getPurchaseNo, pageReqVO.getPurchaseNo())
.like(!StringUtils.isEmpty(pageReqVO.getSupplierName()), "s.brief", pageReqVO.getSupplierName())
.like(!StringUtils.isEmpty(pageReqVO.getMaterialPlanNo()), "m.project_material_plan_no", pageReqVO.getMaterialPlanNo())
.eq(pageReqVO.getStatus() != null, PurchaseOrderNoDO::getStatus, pageReqVO.getStatus())

View File

@ -8,6 +8,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplan.vo.MaterialPlanPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.BubbleFeeResult;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchDetailPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchDetailTotalVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskPlanJDBaoBiaoPageReqVO;
@ -382,8 +383,11 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
" FROM quality_pg_master_line p\n" +
" LEFT JOIN quality_bg_master_line bg ON bg.zj_mx_id = p.id and p.deleted = 0 AND p.tenant_id = 2\n" +
" WHERE p.dispatch_detail_id = t.id) AS bgWorkTime")
.select("bom.id as bomDetailId")
.leftJoin(ProcedureDO.class,"a",ProcedureDO::getId,TaskDispatchDetailDO::getProcedureId)
.leftJoin(TaskReportDO.class,"b",TaskReportDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
.leftJoin(TaskDispatchDO.class,"task",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
.leftJoin(ProcessBomDetailDO.class,"bom",ProcessBomDetailDO::getId,TaskDispatchDO::getBomDetailId)
// .leftJoin(PgMasterLineDO.class,"p",PgMasterLineDO::getDispatchDetailId,TaskDispatchDetailDO::getId)
// .leftJoin("quality_pg_master_line p on p.dispatch_detail_id=t.id and p.deleted=0")
// .leftJoin("quality_bg_master_line bg on bg.zj_mx_id = p.id and bg.deleted=0")
@ -881,4 +885,13 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
"</foreach>" +
"</script>")
void deleteOrderId(@Param("idList") List<Long> idList);
List<BubbleFeeResult> batchBubbleFees(@Param("bomDetailIds") List<Long> bomDetailIds,
@Param("procedureIds") List<Long> procedureIds);
List<BubbleFeeResult> batchMaterialCosts(@Param("bomDetailIds")List<Long> bomDetailIds,@Param("procedureIds") List<Long> procedureIds);
Map<Long, BigDecimal> batchInternalLaborCost(@Param("bomDetailIds")List<Long> bomDetailIds);
Map<Long, BigDecimal> batchProcessInspection(@Param("bomDetailIds")List<Long> bomDetailIds);
}

View File

@ -4,10 +4,12 @@ import cn.hutool.core.util.ObjectUtil;
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.BubbleFeeResult;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskPlanJDBaoBiaoPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantask.PlanTaskDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO;
@ -16,10 +18,12 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDeta
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processdesign.ProcessDesignDO;
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.purchaseordernodetail.PurchaseOrderNoDetailDO;
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.enums.TaskDispatchTypeEnum;
import com.chanko.yunxi.mes.module.heli.service.taskdispatch.TaskDispatchServiceImpl;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.PostDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.UserPostDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
@ -30,6 +34,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Set;
/**
* 派工单 Mapper
@ -57,6 +62,7 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
.select("h.task_no as taskCode")
.select("i.require_end_date as requiredCompletedDate")
.select("u1.nickname as ownerName,u1.id as ownerId")
.leftJoin(PlanDO.class, "a", PlanDO::getId, ProcessDesignDO::getPlanId)
.leftJoin("project_plan_sub b on b.project_plan_id = t.plan_id and b.project_sub_id = t.project_sub_id")
.leftJoin(ProjectOrderSubDO.class, "c", ProjectOrderSubDO::getId, ProcessDesignDO::getProjectSubId)
@ -69,6 +75,7 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
.leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, PlanTaskBomDO::getOwner)
.orderByDesc(TaskDispatchDO::getId)
.eq(ProjectOrderSubDO::getDeleted,0)
.groupBy(TaskDispatchDO::getId)
.disableSubLogicDel();
query.like(!StringUtils.isEmpty(reqVO.getCode()), TaskDispatchDO::getCode, reqVO.getCode())
@ -84,7 +91,9 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
.like(!StringUtils.isEmpty(reqVO.getPlanCode()), PlanDO::getPlanNo, reqVO.getPlanCode())
.like(ObjectUtil.isNotEmpty(reqVO.getBlueprintNo()),ProcessBomDetailDO::getBlueprintNo, reqVO.getBlueprintNo())
.like(ObjectUtil.isNotEmpty(reqVO.getBoomName()),ProcessBomDetailDO::getMaterialName, reqVO.getBoomName());
;
if (ObjectUtil.isNotEmpty(reqVO.getFlag())&&"false".equals(reqVO.getFlag())){
query.ne(ProjectOrderDO::getDeliveryStatus,3);
}
return selectPage(reqVO, query);
}
default List<TaskDispatchDO> selectPageNew(TaskDispatchPageReqVO reqVO) {
@ -105,11 +114,14 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
.leftJoin(ProjectOrderDO.class, "d", ProjectOrderDO::getId, ProcessDesignDO::getProjectId)
.leftJoin(CustomerDO.class, "e", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.leftJoin(ProcessBomDetailDO.class, "f", ProcessBomDetailDO::getId, TaskDispatchDO::getBomDetailId)
.leftJoin(PurchaseOrderNoDetailDO.class,"no", PurchaseOrderNoDetailDO::getBoomDetailId, ProcessBomDetailDO::getId)
.leftJoin(CompositionDO.class,"g", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
.leftJoin(PlanTaskDO.class, "h", PlanTaskDO::getId, TaskDispatchDO::getTaskId)
.leftJoin(PlanTaskBomDO.class, "i", wrapper -> wrapper.eq(PlanTaskBomDO::getTaskId, PlanTaskDO::getId).eq(PlanTaskBomDO::getBomDetailId, TaskDispatchDO::getBomDetailId))
.leftJoin(AdminUserDO.class, "u1", AdminUserDO::getId, PlanTaskBomDO::getOwner)
.groupBy(TaskDispatchDetailDO::getId)
.disableSubLogicDel();
if(reqVO.getPageType() == 2){
//下一条
query.lt(TaskDispatchDO::getId, reqVO.getId())
@ -134,7 +146,9 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
.like(!StringUtils.isEmpty(reqVO.getPlanCode()), PlanDO::getPlanNo, reqVO.getPlanCode())
.like(ObjectUtil.isNotEmpty(reqVO.getBlueprintNo()),ProcessBomDetailDO::getBlueprintNo, reqVO.getBlueprintNo());
;
if (ObjectUtil.isNotEmpty(reqVO.getFlag())&&"false".equals(reqVO.getFlag())){
query.ne(ProjectOrderDO::getDeliveryStatus,3);
}
return selectList(query);
}
default TaskDispatchDO selectById(Long id) {
@ -209,4 +223,5 @@ public interface TaskDispatchMapper extends BaseMapperX<TaskDispatchDO> {
}
@Delete("delete from pro_task_dispatch where project_id=#{id}")
void deleteOrderId(@Param("id") Long id);
}

View File

@ -12,7 +12,10 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
@ -23,7 +26,10 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.PurchaseOrderMakeDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatchdetaillog.TaskDispatchDetailLogMapper;
@ -92,6 +98,8 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
@Resource
private PurchaseOrderNoMapper purchaseOrderNoMapper;
@Resource
private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper;
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Resource
private TaskDispatchMapper taskDispatchMapper;
@ -101,6 +109,10 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
private ProcessBomMapper processBomMapper;
@Resource
private TaskDispatchDetailLogMapper taskDispatchDetailLogMapper;
@Resource
private PurchaseOrderMakeMapper purchaseOrderMakeMapper;
@Resource
private PurchaseOrderMakeDetailMapper purchaseOrderMakeDetailMapper;
@Override
public Long createMaterialPlan(MaterialPlanSaveReqVO createReqVO) {
// 插入
@ -544,6 +556,27 @@ public class MaterialPlanServiceImpl implements MaterialPlanService {
@Override
public PageResult<MaterialPlanBoomDO> getPartPurchasePages(MaterialPlanPageReqVO pageReqVO) {
if (ObjectUtil.isNotEmpty(pageReqVO.getPurchaseNo())){
LambdaQueryWrapper<PurchaseOrderNoDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PurchaseOrderNoDO::getPurchaseNo, pageReqVO.getPurchaseNo());
List<PurchaseOrderNoDO> purchaseOrderMakeDOS = purchaseOrderNoMapper.selectList(queryWrapper);
if (ObjectUtil.isNotEmpty(purchaseOrderMakeDOS)){
List<Long> purchaseOrderMakeIds = purchaseOrderMakeDOS.stream().map(PurchaseOrderNoDO::getId).collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(purchaseOrderMakeIds)){
LambdaQueryWrapper<PurchaseOrderNoDetailDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(PurchaseOrderNoDetailDO::getPurchaseOrderId, purchaseOrderMakeIds);
List<PurchaseOrderNoDetailDO> purchaseOrderMakeDetailDOS = purchaseOrderNoDetailMapper.selectList(queryWrapper1);
if (ObjectUtil.isNotEmpty(purchaseOrderMakeDetailDOS)){
List<Long> boomDetailIds = purchaseOrderMakeDetailDOS.stream().map(PurchaseOrderNoDetailDO::getBoomDetailId).collect(Collectors.toList());
List<Long> projectPlanSubIds = purchaseOrderMakeDetailDOS.stream().map(PurchaseOrderNoDetailDO::getProjectPlanSubId).collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(boomDetailIds)) pageReqVO.setBoomDetailIds(boomDetailIds);
if (ObjectUtil.isNotEmpty(projectPlanSubIds)) pageReqVO.setProjectPlanSubIds(projectPlanSubIds);
}
}
}else {
return new PageResult<>(null, 0L);
}
}
return materialPlanBoomMapper.getPartsPages(pageReqVO);
}

View File

@ -205,6 +205,7 @@ public class MaterialPlanBoomServiceImpl implements MaterialPlanBoomService {
for (PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO : makeDetailDOList) {
purchaseOrderMakeDetailDO.setPurchaseOrderId(purchaseOrderMakeDO.getId());
}
purchaseOrderMakeDetailMapper.insertBatch(makeDetailDOList);
for (MaterialPlanBoomDO dp : materialPlanBoomDOList) {

View File

@ -72,4 +72,6 @@ public interface PartPurchaseOrderService {
Boolean approvals(List<PurchaseOrderMakeDetailDO> list);
Boolean rejects(Long id);
CommonResult<Boolean> updateDuEmp(List<MaterialPlanBoomDO> saveReqVOs);
}

View File

@ -17,6 +17,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.Pa
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PurchaseOrderMakeSaveReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermakedetail.vo.PurchaseOrderMakeDetailSaveReqVO;
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.plansub.PlanSubDO;
@ -27,6 +28,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseO
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
@ -36,7 +38,9 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermakedetail.Purcha
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.supplier.SupplierMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.service.orderyf.OrderYfService;
import com.chanko.yunxi.mes.module.heli.service.purchaseordermakedetail.PurchaseOrderMakeDetailService;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.heli.service.supplier.SupplierService;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
@ -86,7 +90,8 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
private SupplierMapper supplierMapper;
@Autowired
private ProcessBomDetailMapper processBomDetailMapper;
@Autowired
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Override
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
@ -163,7 +168,75 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
return true;
}
public boolean submitNo(List<PurchaseOrderMakeDetailDO> list) {
PurchaseOrderNoDO purchaseOrderNoDO = new PurchaseOrderNoDO();
// 返回
// 月度流水号
SerialNumberDO serialNumberDO = new SerialNumberDO();
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
purchaseOrderNoDO.setPurchaseNo(PURCHASE_ORDER.getCode(serialNumberDO.getSerialNumber().toString()));
purchaseOrderNoDO.setPurchaseType(1);
purchaseOrderNoDO.setGoodsType(2);
purchaseOrderNoDO.setSupplierId(list.get(0).getSupplierId());
purchaseOrderNoDO.setOrdDate(new Date());
purchaseOrderNoMapper.insert(purchaseOrderNoDO);
long purchaseOrderId = purchaseOrderNoDO.getId();
OrderYfSaveReqVO orderYfVO = new OrderYfSaveReqVO();
orderYfVO.setCgOrderNum(purchaseOrderNoDO.getPurchaseNo());
SupplierDO supplierDO = supplierMapper.selectById(list.get(0).getSupplierId());
if (ObjectUtil.isNotEmpty(supplierDO)){
orderYfVO.setCgGysname(supplierDO.getName());
}
BigDecimal sum = list.stream()
.filter(Objects::nonNull) // 过滤掉空对象
.map(PurchaseOrderMakeDetailDO::getEstimatedPrice)
.filter(Objects::nonNull) // 过滤掉空值
.reduce(BigDecimal.ZERO, BigDecimal::add); // 累加求和
orderYfVO.setCgYf(sum);
orderYfService.createCg(orderYfVO);
list.forEach(detailDO -> {
// PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = new PurchaseOrderNoDetailDO();
// purchaseOrderNoDetailDO.setPurchaseOrderId(purchaseOrderId);
// purchaseOrderNoDetailDO.setBoomDetailId(detailDO.getBoomDetailId());
// purchaseOrderNoDetailDO.setBoomName(detailDO.getBoomName());
// purchaseOrderNoDetailDO.setBoomUnit(detailDO.getBoomUnit());
// purchaseOrderNoDetailDO.setBoomSpec(detailDO.getBoomSpec());
PurchaseOrderNoDetailDO purchaseOrderNoDetailDO = BeanUtils.toBean(detailDO, PurchaseOrderNoDetailDO.class);
purchaseOrderNoDetailDO.setDuEmpId(detailDO.getDuEmpId());
purchaseOrderNoDetailDO.setId(null);
purchaseOrderNoDetailDO.setCreateTime(null);
purchaseOrderNoDetailDO.setUpdateTime(null);
purchaseOrderNoDetailDO.setPurchaseOrderId(purchaseOrderId);
purchaseOrderNoDetailDO.setPurchaseRemAmount(detailDO.getPurchaseAmount());
// PurchaseOrderMakeDetailDO orderMakeDetailDO = purchaseOrderMakeDetailMapper.selectById(detailDO.getId());
// if (ObjectUtil.isNotEmpty(orderMakeDetailDO)){
// PurchaseOrderMakeDO orderMakeDO = purchaseOrderMakeMapper.selectById(orderMakeDetailDO.getPurchaseOrderId());
// if (ObjectUtil.isNotEmpty(orderMakeDO)){
purchaseOrderNoDetailDO.setProjectId(detailDO.getProjectId());
purchaseOrderNoDetailDO.setProjectPlanId(detailDO.getProjectPlanId());
purchaseOrderNoDetailDO.setCustomerId(detailDO.getCustomerId());
// }
// }
purchaseOrderNoDetailMapper.insert(purchaseOrderNoDetailDO);
long purchaseOrderDetailId = purchaseOrderNoDetailDO.getId();
PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO = new PurchaseOrderMakeDetailDO();
purchaseOrderMakeDetailDO.setId(detailDO.getId());
purchaseOrderMakeDetailDO.setOrderStatus(2);
purchaseOrderMakeDetailDO.setPurchaseOrderNoId(purchaseOrderId);
purchaseOrderMakeDetailDO.setPurchaseOrderNoDetailId(purchaseOrderDetailId);
purchaseOrderMakeDetailDO.setPurchaseNo(purchaseOrderNoDO.getPurchaseNo());
purchaseOrderMakeDetailMapper.updateById(purchaseOrderMakeDetailDO);
});
return true;
}
@Override
public PageResult<PartPurchaseOrderPageRespVO> getPartPurchaseOrderCheckPage(PartPurchaseOrderPageReqVO pageReqVO) {
return null;
@ -187,6 +260,14 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
materialPlanBoomMapper.update(updateWrapper);
});
List<TaskDispatchDetailDO> taskDispatchDetailDOs= taskDispatchDetailMapper.selectList("project_purchase_order_make_detail_id", id);
taskDispatchDetailDOs.forEach(TaskDispatchDetailDO -> {
UpdateWrapper<TaskDispatchDetailDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", TaskDispatchDetailDO.getId())
.set("project_purchase_order_make_detail_id", null)
.set("purchase_no", null);
taskDispatchDetailMapper.update(updateWrapper);
});
return true;
}
@ -240,6 +321,15 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
.set("mat_rest",null);
materialPlanBoomMapper.update(updateWrapper);
});
List<TaskDispatchDetailDO> taskDispatchDetailDOs= taskDispatchDetailMapper.selectList("project_purchase_order_make_detail_id", updateReqVO.getId());
taskDispatchDetailDOs.forEach(TaskDispatchDetailDO -> {
UpdateWrapper<TaskDispatchDetailDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", TaskDispatchDetailDO.getId())
.set("project_purchase_order_make_detail_id", null)
.set("purchase_no", null);
taskDispatchDetailMapper.update(updateWrapper);
});
return true;
}
@ -272,13 +362,21 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
.set("mat_rest",null);
materialPlanBoomMapper.update(updateWrapper);
});
List<TaskDispatchDetailDO> taskDispatchDetailDOs= taskDispatchDetailMapper.selectList("project_purchase_order_make_detail_id",id);
taskDispatchDetailDOs.forEach(TaskDispatchDetailDO -> {
UpdateWrapper<TaskDispatchDetailDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", TaskDispatchDetailDO.getId())
.set("project_purchase_order_make_detail_id", null)
.set("purchase_no", null);
taskDispatchDetailMapper.update(updateWrapper);
});
return true;
}
@Override
public Boolean approval(Long id) {
PurchaseOrderMakeDO orderMakeDO = purchaseOrderMakeMapper.selectById(id);
if (orderMakeDO.getStatus() != 1) throw exception(new ErrorCode(400,"该单据状态非待审核,请刷新界面!"));
if (orderMakeDO.getStatus() != 1) throw exception(new ErrorCode(400, "该单据状态非待审核,请刷新界面!"));
PurchaseOrderMakeDO purchaseOrderMakeDO = new PurchaseOrderMakeDO();
purchaseOrderMakeDO.setId(id);
purchaseOrderMakeDO.setStatus(2);
@ -286,20 +384,33 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
purchaseOrderMakeDO.setAuditor(getLoginUser().getId());
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", id);
List<MaterialPlanBoomDO> materialPlanBoomDOs = materialPlanBoomMapper.selectList("project_purchase_order_make_id", id);
materialPlanBoomDOs.forEach(materialPlanBoomDO -> {
MaterialPlanBoomDO materialPlanBoom = new MaterialPlanBoomDO();
materialPlanBoom.setId(materialPlanBoomDO.getId());
materialPlanBoom.setMplanStatus(2);
materialPlanBoomMapper.updateById(materialPlanBoom);
});
List<PurchaseOrderMakeDetailDO> list = purchaseOrderMakeDetailMapper.selectList("project_purchase_order_make_id", id);
List<Long> ids = list.stream().map(PurchaseOrderMakeDetailDO::getId).collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(ids)){
LambdaUpdateWrapper<PurchaseOrderMakeDetailDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(PurchaseOrderMakeDetailDO::getId, ids);
updateWrapper.set(PurchaseOrderMakeDetailDO::getStatus,2);
updateWrapper.set(PurchaseOrderMakeDetailDO::getAuditTime, LocalDateTime.now());
updateWrapper.set(PurchaseOrderMakeDetailDO::getAuditor, getLoginUser().getId());
purchaseOrderMakeDetailMapper.update(updateWrapper);
}
if (ObjectUtil.isNotEmpty(orderMakeDO)) {
if (orderMakeDO.getGoodsType() == 2) {
submitNo(list);
}
}
return true;
}
@Override
public PageResult<PartPurchaseOrderPageRespVO> getDetail(PartPurchaseOrderPageReqVO partPurchaseOrderPageReqVO) {
return purchaseOrderMakeDetailMapper.getDetail(partPurchaseOrderPageReqVO);
}
@Override
@ -352,7 +463,7 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
processBomDetailMapper.update(lambdaUpdateWrapper);
});
updateReqVOs.forEach(updateReq -> {
createPurchaseOrderMakeAndDetail(updateReq,purchaseOrderMakeId, purchaseOrderMakeDOPurchaseNo,planDO.getId());
createPurchaseOrderMakeAndDetail(updateReq,purchaseOrderMakeId, purchaseOrderMakeDOPurchaseNo);
});
return true;
@ -424,6 +535,15 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
// materialPlanBoom.setMplanStatus(2);
// materialPlanBoomMapper.updateById(materialPlanBoom);
// });
PurchaseOrderMakeDO purchaseOrderMakeDO = purchaseOrderMakeMapper.selectById(list.get(0).getPurchaseOrderId());
if (ObjectUtil.isNotEmpty(purchaseOrderMakeDO)){
if (purchaseOrderMakeDO.getGoodsType() == 2){
submitNo(list);
}
}
}
return true;
}
@ -457,10 +577,32 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
.set("mat_rest",null);
materialPlanBoomMapper.update(updateWrapper);
});
List<TaskDispatchDetailDO> taskDispatchDetailDOs= taskDispatchDetailMapper.selectList("project_purchase_order_make_detail_id", id);
taskDispatchDetailDOs.forEach(TaskDispatchDetailDO -> {
UpdateWrapper<TaskDispatchDetailDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", TaskDispatchDetailDO.getId())
.set("project_purchase_order_make_detail_id", null)
.set("purchase_no", null);
taskDispatchDetailMapper.update(updateWrapper);
});
return true;
}
public Boolean createPurchaseOrderMakeAndDetail(MaterialPlanBoomDO updateReqVO, long purchaseOrderMakeId, String purchaseOrderMakeDOPurchaseNo,Long planId) {
@Override
public CommonResult<Boolean> updateDuEmp(List<MaterialPlanBoomDO> saveReqVOs) {
boolean b = saveReqVOs.stream()
.anyMatch(vo -> vo.getMplanStatus() == 1 || vo.getMplanStatus() == 2);
if (b) return CommonResult.error(400,"采购单已送审或已批准,不允许修改责任人");
saveReqVOs.forEach(MaterialPlanBoomDO -> {
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", MaterialPlanBoomDO.getId())
.set("du_emp_id",MaterialPlanBoomDO.getDuEmpId() );
materialPlanBoomMapper.update(updateWrapper);
});
return CommonResult.success(true);
}
public Boolean createPurchaseOrderMakeAndDetail(MaterialPlanBoomDO updateReqVO, long purchaseOrderMakeId, String purchaseOrderMakeDOPurchaseNo) {
PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO = new PurchaseOrderMakeDetailDO();
purchaseOrderMakeDetailDO.setPurchaseOrderId(purchaseOrderMakeId);
purchaseOrderMakeDetailDO.setBoomDetailId(updateReqVO.getBoomDetailId());
@ -489,6 +631,16 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
purchaseOrderMakeDetailDO.setTheWeight(updateReqVO.getTheWeight());
purchaseOrderMakeDetailDO.setDuEmpId(updateReqVO.getDuEmpId());
purchaseOrderMakeDetailDO.setIsFoam(updateReqVO.getIsFoam());
purchaseOrderMakeDetailDO.setProjectId(updateReqVO.getProjectId());
PlanDO planDO = planMapper.selectOne("project_id", updateReqVO.getProjectId());
if (ObjectUtil.isNotEmpty(planDO)) {
purchaseOrderMakeDetailDO.setProjectPlanId(planDO.getId());
}
purchaseOrderMakeDetailDO.setCustomerId(updateReqVO.getCustomerId());
purchaseOrderMakeDetailDO.setBrief(updateReqVO.getBrief());
purchaseOrderMakeDetailDO.setProjectName(updateReqVO.getProjectName());
purchaseOrderMakeDetailDO.setProjectNameSim(updateReqVO.getProjectNameSim());
purchaseOrderMakeDetailMapper.insert(purchaseOrderMakeDetailDO);
long purchaseOrderMakeDetailId = purchaseOrderMakeDetailDO.getId();
@ -500,6 +652,11 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
materialPlanBoomDO.setPurchaseNo(purchaseOrderMakeDOPurchaseNo);
materialPlanBoomDO.setProjectPurchaseOrderMakeDetailId(purchaseOrderMakeDetailId);
materialPlanBoomMapper.updateById(materialPlanBoomDO);
LambdaUpdateWrapper<TaskDispatchDetailDO> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(TaskDispatchDetailDO::getProjectMaterialPlanDetailId, updateReqVO.getId());
wrapper.set(TaskDispatchDetailDO::getPurchaseNo, purchaseOrderMakeDOPurchaseNo);
wrapper.set(TaskDispatchDetailDO::getProjectPurchaseOrderMakeDetailId, purchaseOrderMakeDetailId);
taskDispatchDetailMapper.update(wrapper);
return true;
}

View File

@ -30,6 +30,7 @@ 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.purchaseordermakedetail.PurchaseOrderMakeDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.shenhe.ShenheDO;
@ -558,9 +559,9 @@ public class ProcessBomServiceImpl implements ProcessBomService {
for (ProcessBomDetailDO po : processBomDetailDOS) {
if (vo.getId().equals(po.getId())) {
if (!vo.getMaterialName().equals(po.getMaterialName())) {
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(MaterialPlanBoomDO::getBoomDetailId,vo.getId());
if (materialPlanBoomMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做需求计划,不允许修改零件名称"));
LambdaQueryWrapper<PurchaseOrderMakeDetailDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(PurchaseOrderMakeDetailDO::getBoomDetailId,vo.getId());
if (purchaseOrderMakeDetailMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做采购,不允许修改零件名称"));
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId());
queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" );
@ -585,9 +586,9 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
}
if (!vo.getBlueprintNo().equals(po.getBlueprintNo())) {
LambdaQueryWrapper<MaterialPlanBoomDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(MaterialPlanBoomDO::getBoomDetailId,vo.getId());
if (materialPlanBoomMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做需求计划,不允许修改图号"));
LambdaQueryWrapper<PurchaseOrderMakeDetailDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.in(PurchaseOrderMakeDetailDO::getBoomDetailId,vo.getId());
if (purchaseOrderMakeDetailMapper.selectCount(queryWrapper1)>0) throw exception(new ErrorCode(1_007_9888,"物料"+po.getMaterialName()+"已做采购,不允许修改图号"));
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, vo.getId());
queryWrapper.eq(TaskDispatchDO::getDispatchType,"PRODUCTION" );
@ -749,7 +750,6 @@ public class ProcessBomServiceImpl implements ProcessBomService {
}
}
}
}
}else {
for (ProcessBomDetailDO processBomDetail : processBomDetails) {
@ -782,12 +782,8 @@ public class ProcessBomServiceImpl implements ProcessBomService {
ShenheDO shenheDO = shenheDOS.get(0);
updateObj.setShenheUser(shenheDO.getShenheUser());
}else{
}
}
if(operateTypeEnum == OperateTypeEnum.AUDIT){
ShenheDO shenheDO = shenheMapper.serchShenHeRusers("2",updateObj.getShenheUser());
List<ShenheDO> shenheDOS = new ArrayList<>();
@ -815,7 +811,6 @@ public class ProcessBomServiceImpl implements ProcessBomService {
List<AttentiontodoDO> attentiontodook1 = attentiontodoService.getAttentiontodolistdaiban(13);
if (attentiontodook1.size()<1){
{
AttentiontodoDO attentiontodoDO = new AttentiontodoDO();
attentiontodoDO.setEvent("BOM变更审核通过后");
attentiontodoDO.setAttr5("1");
@ -824,7 +819,6 @@ public class ProcessBomServiceImpl implements ProcessBomService {
attentiontodook.add(attentiontodoDO);
}
}
@ -868,8 +862,6 @@ public class ProcessBomServiceImpl implements ProcessBomService {
BdgzsomthingDO.setAttr4("0");//是否已处理
// BdgzsomthingDO.setShowname(operateReqVO.getCreateTime());//获取数据当前表的创建事件
bdgzsomthingMapper.insert(BdgzsomthingDO);
// }
}
}
@ -1209,9 +1201,9 @@ public class ProcessBomServiceImpl implements ProcessBomService {
@Override
@Transactional(rollbackFor = Exception.class)
public CommonResult<Boolean> deleteProcessBomDetailNew(Long id){
LambdaQueryWrapper<MaterialPlanBoomDO> boomDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
boomDOLambdaQueryWrapper.eq(MaterialPlanBoomDO::getBoomDetailId, id);
if (materialPlanBoomMapper.selectCount(boomDOLambdaQueryWrapper) > 0) return CommonResult.error(400,"该零件已做物料需求计划,不允许删除");
LambdaQueryWrapper<PurchaseOrderMakeDetailDO> boomDOLambdaQueryWrapper = new LambdaQueryWrapper<>();
boomDOLambdaQueryWrapper.eq(PurchaseOrderMakeDetailDO::getBoomDetailId, id);
if (purchaseOrderMakeDetailMapper.selectCount(boomDOLambdaQueryWrapper) > 0) return CommonResult.error(400,"该零件已做采购,不允许删除");
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, id);
List<TaskDispatchDO> list = taskDispatchMapper.selectList(queryWrapper);
@ -1551,7 +1543,6 @@ public class ProcessBomServiceImpl implements ProcessBomService {
processBomDetailMapper.update(lambdaUpdateWrapper);
return CommonResult.success( true);
}
return CommonResult.error(400,"boom明细不存在,请刷新页面");
}

View File

@ -390,6 +390,7 @@ public class PurchaseOrderNoServiceImpl implements PurchaseOrderNoService {
lambdaUpdateWrapper.set(PurchaseOrderMakeDetailDO::getPurchaseOrderNoId, null);
lambdaUpdateWrapper.set(PurchaseOrderMakeDetailDO::getPurchaseOrderNoDetailId,null);
lambdaUpdateWrapper.set(PurchaseOrderMakeDetailDO::getOrderStatus,1);
lambdaUpdateWrapper.set(PurchaseOrderMakeDetailDO::getStatus,1);
lambdaUpdateWrapper.set(PurchaseOrderMakeDetailDO::getPurchaseNo,null);
purchaseOrderMakeDetailMapper.update(lambdaUpdateWrapper);
return CommonResult.success(true);

View File

@ -14,8 +14,11 @@ import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.ygjx.vo.YgjxPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equipmanufacture.EquipManufactureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.fpuserdetail.FpUserDetailDO;
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.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantask.PlanTaskDO;
@ -23,6 +26,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.plantaskbom.PlanTaskBomDO
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
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;
@ -30,8 +34,11 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatch
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetailowner.TaskDispatchDetailOwnerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskreport.TaskReportDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.customer.CustomerMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.equipmanufacture.EquipManufactureMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.fpuserdetail.FpUserDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plansub.PlanSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plantask.PlanTaskMapper;
@ -39,6 +46,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.plantaskbom.PlanTaskBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.procedure.ProcedureMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
@ -53,6 +61,10 @@ import com.chanko.yunxi.mes.module.heli.service.zjpgmaster.ZjPgMasterService;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper;
import com.chanko.yunxi.mes.module.system.service.user.AdminUserService;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.expression.spel.ast.OpOr;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -70,6 +82,7 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.MATERIAL_PLAN;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
@ -90,6 +103,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
@Resource
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private ProjectOrderMapper projectOrderMapper;
@Resource
private CrossOrderManager crossOrderManager;
@Resource
private SerialNumberService serialNumberService;
@ -123,6 +138,12 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
private PlanTaskBomMapper planTaskBomMapper;
@Resource
private PlanTaskMapper planTaskMapper;
@Resource
private MaterialPlanBoomMapper materialPlanBoomMapper;
@Resource
private MaterialPlanMapper materialPlanMapper;
@Resource
private CustomerMapper customerMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) {
@ -224,10 +245,10 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(dispatchDetailDO.getId());
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
if ("false".equals(dispatchDetailDO.getIsOutsourcing())){
if ("Y".equals(taskDispatchDetailDO.getMatPlanProcess())){
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getPurchaseNo())){
ProcedureDO procedureDO = procedureMapper.selectById(dispatchDetailDO.getProcedureId());
if (ObjectUtil.isNotEmpty(procedureDO)){
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做物料需求计划,不允许去掉外协,请确认!"));
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做零件采购,不允许去掉外协,请确认!"));
}
}
}
@ -244,6 +265,84 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}
}
}
if (operateTypeEnum == OperateTypeEnum.SUBMIT) {
ArrayList<TaskDispatchDetailDO> taskDispatchDetailDOS = new ArrayList<>();
for (TaskDispatchDetailDO taskDispatchDetail : updateReqVO.getTaskDispatchDetails()) {
LambdaQueryWrapper<MaterialPlanBoomDO> wrapper = new LambdaQueryWrapper<MaterialPlanBoomDO>().eq(MaterialPlanBoomDO::getBoomDetailId, taskDispatchDetail.getBomDetailId()).eq(MaterialPlanBoomDO::getProcedureId, taskDispatchDetail.getProcedureId());
MaterialPlanBoomDO materialPlanBoomDO = materialPlanBoomMapper.selectOne(wrapper);
if ("false".equals(taskDispatchDetail.getIsOutsourcing())) {
if (ObjectUtil.isNotEmpty(materialPlanBoomDO)) {
materialPlanBoomMapper.deletePlanBoom(materialPlanBoomDO.getId());
LambdaQueryWrapper<MaterialPlanBoomDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(MaterialPlanBoomDO::getProjectMaterialPlanId, materialPlanBoomDO.getProjectMaterialPlanId());
if (materialPlanBoomMapper.selectCount(lambdaQueryWrapper) <= 0)
materialPlanMapper.delMaterialPlan(materialPlanBoomDO.getProjectMaterialPlanId());
}
} else {
if (ObjectUtil.isEmpty(materialPlanBoomDO)) {
taskDispatchDetailDOS.add(taskDispatchDetail);
}else {
materialPlanBoomDO.setBoomArriveDate(taskDispatchDetail.getEndTime());
materialPlanBoomDO.setDuEmpId(taskDispatchDetail.getOwner());
materialPlanBoomMapper.updateById(materialPlanBoomDO);
}
}
}
if (ObjectUtil.isNotEmpty(taskDispatchDetailDOS)) {
MaterialPlanDO planDO = new MaterialPlanDO();
SerialNumberDO serialNumberDO = new SerialNumberDO();
serialNumberDO = serialNumberService.getSerialNumber(MATERIAL_PLAN.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber() + 1);
planDO.setProjectMaterialPlanNo(MATERIAL_PLAN.getCode(serialNumberDO.getSerialNumber().toString()));
ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(updateObj.getProjectId());
if (ObjectUtil.isNotEmpty(projectOrderDO)){
planDO.setProjectId(projectOrderDO.getId());
planDO.setProjectName(projectOrderDO.getProjectName());
planDO.setProjectNameSim(projectOrderDO.getProjectNameSim());
CustomerDO customerDO = customerMapper.selectById(projectOrderDO.getCustomerId());
if (ObjectUtil.isNotEmpty(customerDO)){
planDO.setCustomerId(customerDO.getId());
planDO.setBrief(customerDO.getBrief());
}
}
ProjectOrderSubDO projectOrderSubDO = projectOrderSubMapper.selectById(updateObj.getProjectSubId());
if (ObjectUtil.isNotEmpty(projectOrderSubDO)){
planDO.setProjectPlanSubId(projectOrderSubDO.getId());
planDO.setName(projectOrderSubDO.getName());
planDO.setNameSim(projectOrderSubDO.getNameSim());
}
planDO.setProjectPlanId(updateObj.getPlanId());
planDO.setMatType(1);
planDO.setMatPlanDate(new Date());
materialPlanMapper.insert(planDO);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
List<MaterialPlanBoomDO> materialPlanBoomDOList = new ArrayList<>();
for (TaskDispatchDetailDO taskDispatchDetailDO : taskDispatchDetailDOS) {
MaterialPlanBoomDO boomDO = new MaterialPlanBoomDO();
boomDO.setProjectMaterialPlanId(planDO.getId());
boomDO.setBoomDetailId(updateObj.getBomDetailId());
boomDO.setBoomAmount(new BigDecimal(taskDispatchDetailDO.getAmount()));
boomDO.setBoomArriveDate(taskDispatchDetailDO.getEndTime());
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(updateObj.getBomDetailId());
if (ObjectUtil.isNotEmpty(bomDetailDO)){
boomDO.setMatName(bomDetailDO.getMaterialName());
}
boomDO.setDuEmpId(taskDispatchDetailDO.getOwner());
if (ObjectUtil.isNotEmpty(projectOrderSubDO)){
boomDO.setProjectPlanSubId(projectOrderSubDO.getId());
boomDO.setName(projectOrderSubDO.getName());
}
boomDO.setProcedureId(taskDispatchDetailDO.getProcedureId());
boomDO.setMplanStatus(0);
materialPlanBoomMapper.insert(boomDO);
taskDispatchDetailDO.setProjectMaterialPlanDetailId(boomDO.getId());
taskDispatchDetailDO.setPlanStatus(1);
taskDispatchDetailDO.setMatPlanProcess("Y");
taskDispatchDetailDO.setProjectMaterialPlanNo(planDO.getProjectMaterialPlanNo());
}
}
}
}
if (operateTypeEnum == OperateTypeEnum.SAVE){
updateObj.setDispatchStatus(1);
@ -557,16 +656,30 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
@Override
public void deleteTaskDispatchDetail(Long id) {
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(id);
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&("Y".equals(taskDispatchDetailDO.getMatPlanProcess())||taskDispatchDetailDO.getReportProcess()!=0)){
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)&&(ObjectUtil.isNotEmpty(taskDispatchDetailDO.getPurchaseNo())||taskDispatchDetailDO.getReportProcess()!=0)){
ProcedureDO procedureDO = procedureMapper.selectById(taskDispatchDetailDO.getProcedureId());
if (ObjectUtil.isNotEmpty(procedureDO)){
if ("Y".equals(taskDispatchDetailDO.getMatPlanProcess())){
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做需求计划,不允许删除"));
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO.getPurchaseNo())){
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做零件采购,不允许删除"));
}else {
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做报工,不允许删除"));
}
}
}
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getId, taskDispatchDetailDO.getDispatchId());
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(taskDispatchDO)){
LambdaQueryWrapper<MaterialPlanBoomDO> wrapper = new LambdaQueryWrapper<MaterialPlanBoomDO>().eq(MaterialPlanBoomDO::getBoomDetailId, taskDispatchDO.getBomDetailId()).eq(MaterialPlanBoomDO::getProcedureId, taskDispatchDetailDO.getProcedureId());
MaterialPlanBoomDO materialPlanBoomDO = materialPlanBoomMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(materialPlanBoomDO)){
materialPlanBoomMapper.deletePlanBoom(materialPlanBoomDO.getId());
LambdaQueryWrapper<MaterialPlanBoomDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(MaterialPlanBoomDO::getProjectMaterialPlanId, materialPlanBoomDO.getProjectMaterialPlanId());
if (materialPlanBoomMapper.selectCount(lambdaQueryWrapper) <= 0)
materialPlanMapper.delMaterialPlan(materialPlanBoomDO.getProjectMaterialPlanId());
}
}
taskDispatchDetailMapper.deleteByDispatchId(id);
}
@Override
@ -1159,41 +1272,240 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
@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 materialCost = taskDispatchDetailMapper.materialCosts(taskDispatchDO.getBomDetailId(),detailDO.getProcedureId());
// 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;
List<TaskDispatchDO> taskDispatchDOS = taskDispatchMapper.getListCl(id, projectSubId);
if (taskDispatchDOS.isEmpty()) {
return taskDispatchDOS;
}
// 1. 批量获取所有dispatchId
List<Long> dispatchIds = taskDispatchDOS.stream()
.map(TaskDispatchDO::getId)
.collect(Collectors.toList());
// 2. 批量查询所有TaskDispatchDetailDO
List<TaskDispatchDetailDO> allDetailDOS = getTaskDispatchDetailsBatch(dispatchIds);
Map<Long, List<TaskDispatchDetailDO>> detailsByDispatchId = allDetailDOS.stream()
.collect(Collectors.groupingBy(TaskDispatchDetailDO::getDispatchId));
// 3. 批量获取所有procedureId
Set<Long> procedureIds = allDetailDOS.stream()
.map(TaskDispatchDetailDO::getProcedureId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 4. 批量查询ProcedureDO
Map<Long, ProcedureDO> procedureMap = getProceduresBatch(procedureIds);
// 5. 批量查询各种成本数据
Map<CostQueryKey, BigDecimal> bubbleFeesMap = getBubbleFeesBatch(allDetailDOS, taskDispatchDOS);
Map<CostQueryKey, BigDecimal> materialCostsMap = getMaterialCostsBatch(allDetailDOS, taskDispatchDOS);
Map<Long, BigDecimal> internalLaborCostMap = getInternalLaborCostBatch(allDetailDOS);
Map<Long, BigDecimal> processInspectionMap = getProcessInspectionBatch(allDetailDOS);
// 6. 处理计算结果
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<>();
List<TaskDispatchDetailDO> detailDOS = detailsByDispatchId.getOrDefault(taskDispatchDO.getId(), Collections.emptyList());
Map<String, BigDecimal> costMap = 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 materialCost = taskDispatchDetailMapper.materialCosts(taskDispatchDO.getBomDetailId(),detailDO.getProcedureId());
BigDecimal internalLaborCost = taskDispatchDetailMapper.internalLaborCost(detailDO.getId());
BigDecimal processInspection=taskDispatchDetailMapper.processInspection(detailDO.getId());
ProcedureDO procedureDO = procedureMap.get(detailDO.getProcedureId());
if (procedureDO == null) continue;
// 从批量查询的结果中获取数据
BigDecimal procedureCost = getCostValue(bubbleFeesMap,
new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
BigDecimal materialCost = getCostValue(materialCostsMap,
new CostQueryKey(taskDispatchDO.getBomDetailId(), detailDO.getProcedureId()));
BigDecimal internalLaborCost = getCostValue(internalLaborCostMap, detailDO.getId());
BigDecimal processInspection = getCostValue(processInspectionMap, 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);
costMap.put(procedureDO.getName(), sum);
assemblyLaborCost = assemblyLaborCost.add(sum);
}
taskDispatchDO.setAssemblyLaborSum(assemblyLaborCost);
taskDispatchDO.setMap( map);
taskDispatchDO.setAssemblyLaborCost(assemblyLaborCost.divide(taskDispatchDO.getAmount(),1, RoundingMode.HALF_UP));
taskDispatchDO.setAssemblyLaborSum(assemblyLaborCost);
taskDispatchDO.setMap(costMap);
if (taskDispatchDO.getAmount() != null && taskDispatchDO.getAmount().compareTo(BigDecimal.ZERO) != 0) {
taskDispatchDO.setAssemblyLaborCost(assemblyLaborCost.divide(taskDispatchDO.getAmount(), 1, RoundingMode.HALF_UP));
} else {
taskDispatchDO.setAssemblyLaborCost(BigDecimal.ZERO);
}
}
return taskDispatchDOS;
}
private Map<Long, ProcedureDO> getProceduresBatch(Set<Long> procedureIds){
LambdaQueryWrapper<ProcedureDO> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.in(ProcedureDO::getId, procedureIds);
List<ProcedureDO> procedures = procedureMapper.selectList(lambdaWrapper);
return procedures.stream()
.collect(Collectors.toMap(ProcedureDO::getId, Function.identity()));
}
private List<TaskDispatchDetailDO> getTaskDispatchDetailsBatch(List<Long> dispatchIds) {
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(TaskDispatchDetailDO::getDispatchId, dispatchIds);
return taskDispatchDetailMapper.selectList(wrapper);
}
// 批量成本查询方法
private Map<CostQueryKey, BigDecimal> getBubbleFeesBatch(List<TaskDispatchDetailDO> details, List<TaskDispatchDO> dispatches) {
// 1. 收集所有需要查询的键
Set<CostQueryKey> queryKeys = collectBubbleFeeQueryKeys(details, dispatches);
if (queryKeys.isEmpty()) {
return Collections.emptyMap();
}
// 提取bomDetailIds和procedureIds
List<Long> bomDetailIds = queryKeys.stream()
.map(CostQueryKey::getBomDetailId)
.distinct()
.collect(Collectors.toList());
List<Long> procedureIds = queryKeys.stream()
.map(CostQueryKey::getProcedureId)
.distinct()
.collect(Collectors.toList());
// 2. 批量查询
List<BubbleFeeResult> batchResults = taskDispatchDetailMapper.batchBubbleFees(bomDetailIds, procedureIds);
// 3. 转换为Map返回
return convertToBubbleFeeMap(batchResults);
}
/**
* 转换查询结果为Map
*/
private Map<CostQueryKey, BigDecimal> convertToBubbleFeeMap(List<BubbleFeeResult> results) {
Map<CostQueryKey, BigDecimal> resultMap = new HashMap<>();
if (ObjectUtil.isNotEmpty(results)){
for (BubbleFeeResult result : results) {
CostQueryKey key = new CostQueryKey(result.getBomDetailId(), result.getProcedureId());
resultMap.put(key, ObjectUtil.isEmpty(result.getCost()) ? BigDecimal.ZERO : result.getCost());
}
}
return resultMap;
}
/**
* 收集所有需要查询的键
*/
private Set<CostQueryKey> collectBubbleFeeQueryKeys(List<TaskDispatchDetailDO> details, List<TaskDispatchDO> dispatches) {
Set<CostQueryKey> queryKeys = new HashSet<>();
// 建立dispatchId到bomDetailId的映射
Map<Long, Long> dispatchToBomDetailMap = dispatches.stream()
.collect(Collectors.toMap(TaskDispatchDO::getId, TaskDispatchDO::getBomDetailId));
for (TaskDispatchDetailDO detail : details) {
Long bomDetailId = dispatchToBomDetailMap.get(detail.getDispatchId());
if (bomDetailId != null && detail.getProcedureId() != null) {
queryKeys.add(new CostQueryKey(bomDetailId, detail.getProcedureId()));
}
}
return queryKeys;
}
// 其他批量查询方法的类似实现...
private Map<CostQueryKey, BigDecimal> getMaterialCostsBatch(List<TaskDispatchDetailDO> details, List<TaskDispatchDO> dispatches) {
// 1. 收集所有需要查询的键
Set<CostQueryKey> queryKeys = collectBubbleFeeQueryKeys(details, dispatches);
if (queryKeys.isEmpty()) {
return Collections.emptyMap();
}
// 提取bomDetailIds和procedureIds
List<Long> bomDetailIds = queryKeys.stream()
.map(CostQueryKey::getBomDetailId)
.distinct()
.collect(Collectors.toList());
List<Long> procedureIds = queryKeys.stream()
.map(CostQueryKey::getProcedureId)
.distinct()
.collect(Collectors.toList());
// 2. 批量查询
List<BubbleFeeResult> batchResults = taskDispatchDetailMapper.batchMaterialCosts(bomDetailIds, procedureIds);
// 3. 转换为Map返回
return convertToBubbleFeeMap(batchResults);
}
private Map<Long, BigDecimal> getInternalLaborCostBatch(List<TaskDispatchDetailDO> details) {
if (details.isEmpty()) {
return Collections.emptyMap();
}
// 提取bomDetailIds和procedureIds
List<Long> bomDetailIds = details.stream()
.map(TaskDispatchDetailDO::getId)
.distinct()
.collect(Collectors.toList());
return taskDispatchDetailMapper.batchInternalLaborCost(bomDetailIds);
}
private Map<Long, BigDecimal> getProcessInspectionBatch(List<TaskDispatchDetailDO> details) {
if (details.isEmpty()) {
return Collections.emptyMap();
}
// 提取bomDetailIds和procedureIds
List<Long> bomDetailIds = details.stream()
.map(TaskDispatchDetailDO::getId)
.distinct()
.collect(Collectors.toList());
return taskDispatchDetailMapper.batchProcessInspection(bomDetailIds);
}
// 辅助方法
private BigDecimal getCostValue(Map<?, BigDecimal> costMap, Object key) {
if (costMap == null || costMap.isEmpty()) {
return BigDecimal.ZERO;
}
return costMap.getOrDefault(key, BigDecimal.ZERO);
}
@Data
@AllArgsConstructor
@EqualsAndHashCode
private static class CostQueryKey {
private final Long bomDetailId;
private final Long procedureId;
}
@Override
public List<HashMap<String, String>> getOwners(Long id) {
List<FpUserDetailDO> fpUserDetailDOS = fpUserDetailMapper.selectOwnerLists(id);

View File

@ -179,4 +179,80 @@
GROUP BY s.id
) AS subquery;
</select>
<select id="batchBubbleFees"
resultType="com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.BubbleFeeResult">
SELECT
p.boom_detail_id AS bomDetailId,
p.procedure_id AS procedureId,
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 in
<foreach collection="bomDetailIds" item="bomDetailId" open="(" close=")" separator=",">
#{bomDetailId}
</foreach>
and p.procedure_id in
<foreach collection="procedureIds" item="procedureId" open="(" close=")" separator=",">
#{procedureId}
</foreach>
GROUP BY p.boom_detail_id, p.procedure_id
</select>
<select id="batchMaterialCosts"
resultType="com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.BubbleFeeResult">
SELECT
subquery.bomDetailId AS bomDetailId,
subquery.procedureId AS procedureId,
ROUND(SUM(unit_price * total_storage), 1) AS cost
FROM (
SELECT
ROUND(t.estimated_price / t.purchase_amount, 1) AS unit_price,
SUM(s.storage_amount) AS total_storage,
t.boom_detail_id AS bomDetailId,
t.procedure_id AS procedureId
FROM project_purchase_order_no_detail t
JOIN project_storage_in_detail s on s.purchase_order_no_detail_id=t.id and s.deleted=0 and s.tenant_id=2
left join pro_process_bom_detail d on d.id=t.boom_detail_id
where t.deleted=0 and t.tenant_id=2 and d.type=2 and t.boom_detail_id in
<foreach collection="bomDetailIds" item="bomDetailId" open="(" close=")" separator=",">
#{bomDetailId}
</foreach>
and t.procedure_id in
<foreach collection="procedureIds" item="procedureId" open="(" close=")" separator=",">
#{procedureId}
</foreach>
GROUP BY s.id
) AS subquery
GROUP BY subquery.bomDetailId, subquery.procedureId;
</select>
<select id="batchInternalLaborCost" resultType="java.util.Map">
SELECT t1.id,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 in
<foreach collection="bomDetailIds" item="bomDetailId" open="(" close=")" separator=",">
#{bomDetailId}
</foreach>
</select>
<select id="batchProcessInspection" resultType="java.util.Map">
SELECT g.dispatch_detail_id,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 in
<foreach collection="bomDetailIds" item="bomDetailId" open="(" close=")" separator=",">
#{bomDetailId}
</foreach>
</select>
</mapper>

View File

@ -79,3 +79,6 @@ export const approvals = async (data) => {
export const exportOut = async (params) => {
return await request.download({ url: `/heli/purchase-order-make/exportOut`, params })
}
export const updateDuEmp = async (data) => {
return await request.post({ url: `/heli/purchase-order-make/updateDuEmp`, data })
}

View File

@ -11,7 +11,8 @@ const props = defineProps({
fullscreen: propTypes.bool.def(true),
width: propTypes.oneOfType([String, Number]).def('40%'),
scroll: propTypes.bool.def(false), // maxHeight
maxHeight: propTypes.oneOfType([String, Number]).def('400px')
maxHeight: propTypes.oneOfType([String, Number]).def('400px'),
isFullscreens: propTypes.bool.def(false)
})
const getBindValue = computed(() => {
@ -26,8 +27,7 @@ const getBindValue = computed(() => {
return obj
})
const isFullscreen = ref(false)
const isFullscreen = ref(props.isFullscreens)
const toggleFull = () => {
isFullscreen.value = !unref(isFullscreen)
}

View File

@ -270,7 +270,7 @@
border
max-height="400"
>
<el-table-column fixed label="子项目名称" align="center" prop="name" min-width="120px" />
<el-table-column fixed label="子项目编码" align="center" prop="projectSubCode" min-width="150px" />
<el-table-column min-width="50px" align="center">
<template #header>设计类型</template>
@ -465,7 +465,6 @@ const handlerSelect = (selection, row) => {
}
//
const handleSelectionChange = (val) => {
console.log('表格的选中 可以获得当前选中的数据', val)
selectedAddRow.value = val
}
//

View File

@ -1,7 +1,7 @@
<template>
<el-card class="hl-card">
<template #header>
<span>零件需求计划</span>
<span></span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->
@ -317,11 +317,9 @@ const singleSubmissions=()=>{
}
const submitForm = async () => {
try {
console.log("开始提交"); // 1
const list = multipleTable.value|| []; //
console.log("明细数据:", list);
console.log(list.length)
// 1.
if (!list || list.length==null) {
message.error("提交明细不能为空,请确认");

View File

@ -44,8 +44,8 @@
<el-form-item label="责任人" prop="duEmpName">
<el-input v-model="queryParams.duEmpName" placeholder="请输入责任人" clearable @keyup.enter="handleQuery" class="!w-240px"/>
</el-form-item>
<el-form-item label="物料需求单号" prop="projectMaterialPlanNo">
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="请输入物料需求单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item label="采购订单号" prop="purchaseNo">
<el-input v-model="queryParams.purchaseNo" placeholder="请输入采购订单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item style="margin-left:30px">
<el-button @click="handleQuery" type="primary">
@ -76,7 +76,8 @@
<span style="order: 1;">同时操作</span>
<el-checkbox class="large-checkbox" v-model="flag" style="order: 2; margin-left: 10px;"/>
</label>
<el-button style="margin-left: 18px" @click="updateDuEmp()" type="primary" size="large">责任人修改</el-button>
<el-button style="margin-left: 18px" @click="skip" type="primary" size="large">生产任务派工单</el-button>
</template>
<el-row>
<el-col>
@ -143,7 +144,7 @@
clearable
filterable
@change="change(scope.row)"
style="width: 165 px"
style="width: 165px"
>
<el-option
v-for="item in supplierList"
@ -162,8 +163,8 @@
v-model="row.unitPrice"
type="number"
placeholder="两位小数"
@change="changeUnitPrice(row)"
@change="changeUnitPrice(row)"
/>
</el-form-item>
</template>
@ -174,7 +175,7 @@
<el-form-item :prop="`${$index}.estimatedPrices`" class="mb-0px!" >
<el-input
v-model="row.estimatedPrices"
type="number"
type="number"
@change="changeEstimatedPrices(row)"
placeholder="两位小数"
/>
@ -205,7 +206,20 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="责任人" align="center" prop="duEmpName" min-width="120" />
<!-- <el-table-column label="责任人" align="center" prop="duEmpName" min-width="120" />-->
<el-table-column min-width="200px" align="center" >
<template #header><span class="hl-table_header">*</span>责任人</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.duEmpId`" class="mb-0px!" >
<!-- <UserSelect v-model="row.duEmpId" class="!w-265px" clearable @update:newValue="handleSelectedUser($index, $event)"/>-->
<el-select class="!w-265px" v-model="row.duEmpId" clearable @update:new-value="handleSelectedUsers($index,$event)" @change="change2(row)" filterable>
<el-option
v-for="dict in userInit" :key="dict.id"
:label="dict.username+' '+dict.nickname" :value="dict.id" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="mplanStatus" min-width="120" >
<template #default="scope">
{{
@ -216,7 +230,7 @@
</template>
</el-table-column>
<el-table-column label="打回原因" align="center" prop="rejRemark" min-width="120" />
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="120" />
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="180" />
<el-table-column fixed="right" label="操作" align="center" min-width="100" >
<template #default="scope">
<el-button
@ -248,6 +262,7 @@ import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
import {ElButton, ElTable, ElTableColumn} from "element-plus";
import {useUserStore} from "@/store/modules/user";
import * as supplierApi from "@/api/heli/supplier";
import * as UserApi from "@/api/system/user";
const formLoading = ref(false) // 12
defineOptions({ name: 'PartPurchase' })
@ -288,12 +303,15 @@ const queryParams = reactive({
blueprintNo:undefined,
procedureName:undefined,
supplierName:undefined,
purchaseNo:undefined
})
const queryParams1 = reactive({
pageNo: 1,
pageSize: 999,
status:1
})
const userInit = ref()
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 删除按钮操作 */
@ -312,6 +330,49 @@ const handleDelete = async (id: number) => {
await getList()
} catch {}
}
const skip = async () => {
const list = multipleTable.value|| []; //
// 1.
if (!list || list.length==null) {
router.push({ path: '/production/productiondispatch' });
tagsViewStore.delVisitedView(router.currentRoute.value);
return;
}
const result = areAllPropertiesSameWithSet(list, ['matName', 'blueprintNo']);
result.then(result => {
console.log('Promise 结果:', result); // false
if (result === true) {
router.push({ path: '/production/productiondispatch' ,query: { matName: list[0].matName,blueprintNo:list[0].blueprintNo }} );
tagsViewStore.delVisitedView(router.currentRoute.value);
return;
}else {
message.error("选择的零件不一样,请确认!")
}
}).catch(error => {
console.error('Promise 错误:', error);
});
}
const areAllPropertiesSameWithSet= async (list, propertyNames)=> {
if (!list || list.length === 0) {
return true;
}
//
const propertySets = {};
propertyNames.forEach(prop => {
propertySets[prop] = new Set();
});
//
list.forEach(item => {
propertyNames.forEach(prop => {
propertySets[prop].add(item[prop]);
});
});
// 1
return propertyNames.every(prop => propertySets[prop].size === 1);
}
/** 查询列表 */
const getList = async () => {
loading.value = true
@ -326,15 +387,17 @@ const getList = async () => {
const data = await MaterialPlanApi.getPartPurchasePages(queryParams)
history.state.idid=undefined
list.value = data.list
list.value.forEach(item=> {
// if(item.unitPrice == null || item.unitPrice==''){
// item.unitPrice=0
// }
if(item.estimatedPrices == null || item.estimatedPrices==''){
item.estimatedPrices=0
}
if ( list.value){
list.value.forEach(item=> {
// if(item.unitPrice == null || item.unitPrice==''){
// item.unitPrice=0
// }
if(item.estimatedPrices == null || item.estimatedPrices==''){
item.estimatedPrices=0
}
})
})
}
// list.value.forEach(item=> {
// if(item.isFoams == 'Y'){
// item.isFoams = true
@ -377,13 +440,28 @@ const handleExportDetail = async () => {
// }
//
// }
const change2 =(row:any)=>{
if (flag.value){
var bomDetails = list.value;
if (row.chkboxEnable){
for (let i = 0; i < bomDetails.length; i++) {
if (bomDetails[i].chkboxEnable){
bomDetails[i].duEmpId=row.duEmpId
}
}
}
}
// if (row){
// row.type=''
// MaterialPlanApi.saveLog(row)
// }
}
const change =(row:any)=>{
if (flag.value) {
var bomDetails = list.value;
if (row.chkboxEnable) {
for (let i = 0; i < bomDetails.length; i++) {
if (bomDetails[i].chkboxEnable) {
bomDetails[i].supplierIds = row.supplierIds
}
}
@ -456,11 +534,11 @@ const floatMul = (a, b) => {
} catch (f) {}
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
const changeUnitPrice =(row:any)=>{
const changeUnitPrice =(row:any)=>{
row.estimatedPrices=parseFloat((row.unitPrice* row.purchaseAmounts).toFixed(1))
}
const changeEstimatedPrices =(row:any)=>{
const changeEstimatedPrices =(row:any)=>{
row.unitPrice=parseFloat((row.estimatedPrices/row.purchaseAmounts).toFixed(1))
}
const change1 =(row:any)=>{
@ -539,16 +617,42 @@ const handleSelectedUser = (currentIndex, newValue: any) => {
}
}
}
const handleSelectedUsers = (currentIndex, newValue: any) => {
list.value[currentIndex].duEmpId = newValue?.id
const singleSubmissions=()=>{
}
const singleSubmissions=()=>{
submitForm();
}
const updateDuEmp= async ()=>{
const list = multipleTable.value|| []; //
// 1.
if (!list || list.length==null) {
message.error("提交明细不能为空,请确认");
return;
}
try {
const res = await Promise.race([
PartPurchaseOrderApi.updateDuEmp(list),
new Promise((_, reject) =>
setTimeout(() => reject(new Error("请求超时")), 30000)
)
]);
message.success("修改成功");
getList(); //
emit('success');
} catch (error) {
console.error("修改失败:", error);
// message.error(`: ${error.message || ""}`);
} finally {
formLoading.value = false;
}
}
const submitForm = async () => {
try {
console.log("开始提交"); // 1
const list = multipleTable.value|| []; //
console.log(list);
// 1.
if (!list || list.length==null) {
message.error("提交明细不能为空,请确认");
@ -584,18 +688,21 @@ const submitForm = async () => {
message.error("预估总价为空");
break;
}
if (list[i].duEmpId == null) {
message.error("责任人为空");
return;
}
}
if (i < list.length){
return;
}
// 2.
const firstProjectName = list[0].projectName;
if (list.some(item => item.projectName !== firstProjectName)) {
message.error("不同项目不能同时生成采购单");
return;
}
// const firstProjectName = list[0].projectName;
// if (list.some(item => item.projectName !== firstProjectName)) {
// message.error("");
// return;
// }
//3.
const checkMaterialPlans = async () => {
@ -618,7 +725,6 @@ const submitForm = async () => {
// 4. Element Plus
formLoading.value = true;
console.log(list)
// 5.
const res = await Promise.race([
PartPurchaseOrderApi.createPurchaseOrderMakeAndDetail(list),
@ -664,6 +770,7 @@ const supplier = async() =>{
}
/** 初始化 **/
onMounted(async() => {
userInit.value=await UserApi.getDeptName("采购部")
await supplier()
await getList()
})

View File

@ -120,7 +120,7 @@ v-model="queryParams.ownerName" placeholder="请输入责任人" clearable @keyu
</template>
</el-table-column>
<el-table-column label="要求到货日期" align="center" prop="requireTime" min-width="150px" :formatter="dateFormatter1"/>
<el-table-column label="客户简称" align="center" prop="brief" min-width="100px" />
<el-table-column label="客户简称" align="center" prop="briefs" min-width="100px" />
<el-table-column label="操作" align="center" fixed="right" min-width="180">
<template #default="scope">
<el-button
@ -235,7 +235,22 @@ const approves = async () => {
return;
}
formLoading.value = true;
const firstSupplierId = list[0].supplierId;
// console.log(firstSupplierId)
// list.forEach((item, index) => {
// console.log(`${index}:`, item.supplierId, ':', typeof item.supplierId, ':', item.supplierId === firstSupplierId);
// });
if (list.some(item => item.supplierId !== firstSupplierId)) {
message.error("零件采购订单不属于同一个供应商,请确认");
return;
}
for (const item of list) {
if (item.orderStatus==2) {
message.error(`工序${item.procedureName}中零件 ${item.boomName} 已生成采购订单,请确认`);
return;
}
}
// 5.
const res = await Promise.race([
PartPurchaseOrderApi.approvals(list),

View File

@ -227,10 +227,10 @@ const submitForm = async () => {
// 2.
const firstSupplierId = list[0].supplierId;
console.log(firstSupplierId)
list.forEach((item, index) => {
console.log(`${index}个:`, item.supplierId, '类型:', typeof item.supplierId, '相等:', item.supplierId === firstSupplierId);
});
// console.log(firstSupplierId)
// list.forEach((item, index) => {
// console.log(`${index}:`, item.supplierId, ':', typeof item.supplierId, ':', item.supplierId === firstSupplierId);
// });
if (list.some(item => item.supplierId !== firstSupplierId)) {
message.error("零件采购订单不属于同一个供应商,请确认");
return;

View File

@ -171,8 +171,8 @@ ref="multipleTableRef"
<el-dropdown-item v-if="scope.row.orderStatus == 32 && scope.row.deliveryStatus != 3" command="alter">订单变更</el-dropdown-item>
<el-dropdown-item command="viewArchive">查看归档日志</el-dropdown-item>
<el-dropdown-item v-if="scope.row.orderStatus == 32 && scope.row.deliveryStatus != 3" command="delivery">去发货</el-dropdown-item>
<el-dropdown-item v-if="scope.row.deliveryStatus == 3" command="trialReport">试模报告</el-dropdown-item>
<el-dropdown-item v-if="scope.row.deliveryStatus == 3" command="confirmReport">认可报告</el-dropdown-item>
<!-- <el-dropdown-item v-if="scope.row.deliveryStatus == 3" command="trialReport">试模报告</el-dropdown-item>-->
<!-- <el-dropdown-item v-if="scope.row.deliveryStatus == 3" command="confirmReport">认可报告</el-dropdown-item>-->
</el-dropdown-menu>
</template>
</el-dropdown>

View File

@ -92,19 +92,21 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table"
@selection-change="handleSelectionChange" @row-click="clickRow" selection>
<el-table-column fixed label="序号" type="index" align="center" width="60" />
<el-table-column label="采购单号" align="center" prop="purchaseNo" fixed min-width="190">
<template #default="scope">
<el-button link type="primary" @click="openForm('detail', scope.row.id)">
{{ scope.row.purchaseNo }}
</el-button>
</template>
</el-table-column>
<el-table-column prop="createTime" min-width="150" label="订单生成日期" align="center" :formatter="dateFormatter1"/>
<el-table-column label="采购单号" align="center" prop="purchaseNo" fixed min-width="190"/>
<!-- <template #default="scope">-->
<!-- <el-button link type="primary" @click="openForm('detail', scope.row.id)">-->
<!-- {{ scope.row.purchaseNo }}-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="采购订单类型" align="center" prop="goodsType" min-width="180">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_PROJECT_PURCHASE_GOODS_TYPE" :value="scope.row.goodsType" />
</template>
</el-table-column>
<el-table-column label="供应商" align="center" min-width="180" prop="supplierName" />
<el-table-column label="工序" align="center" min-width="180" prop="procedureName" />
<el-table-column label="是否打印" align="center" min-width="180" prop="isPrint" >
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_IS_PRINT" :value="scope.row.isPrint" />
@ -143,6 +145,7 @@ import * as PurchaseOrderNoApi from '@/api/heli/purchaseorderno'
import { ElTable } from 'element-plus'
import {useUserStore} from "@/store/modules/user";
import routeParamsCache from '@/utils/routeParamsCache'
import {dateFormatter1} from "@/utils/formatTime";
defineOptions({ name: 'PurchaseOrder' })
const userStore = useUserStore()
const username = userStore.getUser.nickname

View File

@ -6,11 +6,11 @@
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<!-- <el-form-item label="采购单号" prop="purchaseNo">-->
<!-- <el-input-->
<!--v-model="queryParams.purchaseNo" placeholder="采购单号" clearable @keyup.enter="handleQuery"-->
<!-- class="!w-240px" />-->
<!-- </el-form-item>-->
<el-form-item label="采购单号" prop="purchaseNo">
<el-input
v-model="queryParams.purchaseNo" placeholder="采购单号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="项目编码" prop="projectCode">
<el-input
@ -123,8 +123,9 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="requireTime" min-width="150" label="需要完成日期" align="center" :formatter="dateFormatter1"/>
<el-table-column prop="arriveTime" min-width="150" label="收货日期" align="center" :formatter="dateFormatter1" />
<el-table-column prop="createTime" min-width="150" label="订单生成日期" align="center" :formatter="dateFormatter1"/>
<el-table-column prop="requireTime" min-width="150" label="需要完成日期" align="center" :formatter="dateFormatter1"/>
<!-- <el-table-column prop="arriveTime" min-width="150" label="收货日期" align="center" :formatter="dateFormatter1" />-->
<el-table-column prop="description" min-width="150" label="技术要求" align="center"/>
<el-table-column prop="theWeight" min-width="100" label="理论重量" align="center"/>
<el-table-column label="操作" align="center" fixed="right" min-width="200">

View File

@ -139,11 +139,20 @@
</template>
</template>
</el-table-column>
<el-table-column label="下料" min-width="100" align="center">
<el-table-column label="下料1" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['下料']">
<template v-if="row.map && row.map['下料1']">
<span >
<span >{{ row.map['下料'] }}</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>
@ -166,45 +175,101 @@
</template>
</template>
</el-table-column>
<el-table-column label="开粗" min-width="100" align="center">
<el-table-column label="开粗1" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['开粗']">
<template v-if="row.map && row.map['开粗1']">
<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 >{{ row.map['开粗1'] }}</span>
</span>
</template>
</template>
</el-table-column>
<el-table-column label="磨床" min-width="100" align="center">
<el-table-column label="开粗2" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['磨床']">
<template v-if="row.map && row.map['开粗2']">
<span >
<span >{{ row.map['磨床'] }}</span>
<span >{{ row.map['开粗2'] }}</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="车床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="热处理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="热处理3" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['热处理3']">
<span >
<span >{{ row.map['热处理3'] }}</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>
@ -227,11 +292,29 @@
</template>
</template>
</el-table-column>
<el-table-column label="线切割" min-width="100" align="center">
<el-table-column label="数控3" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['线切割']">
<template v-if="row.map && row.map['数控3']">
<span >
<span >{{ row.map['线切割'] }}</span>
<span >{{ row.map['数控3']}}</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>
@ -245,11 +328,20 @@
</template>
</template>
</el-table-column>
<el-table-column label="火花" min-width="100" align="center">
<el-table-column label="火花1" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['火花']">
<template v-if="row.map && row.map['火花1']">
<span >
<span >{{ row.map['火花'] }}</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>
@ -263,29 +355,56 @@
</template>
</template>
</el-table-column>
<el-table-column label="网格" min-width="100" align="center">
<el-table-column label="网格1" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['网格']">
<template v-if="row.map && row.map['网格1']">
<span >
<span >{{ row.map['网格'] }}</span>
<span >{{ row.map['网格1'] }}</span>
</span>
</template>
</template>
</el-table-column>
<el-table-column label="深孔钻" min-width="100" align="center">
<el-table-column label="网格2" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['深孔钻']">
<template v-if="row.map && row.map['网格2']">
<span >
<span >{{ row.map['深孔钻'] }}</span>
<span >{{ row.map['网格2'] }}</span>
</span>
</template>
</template>
</el-table-column>
<el-table-column label="钻孔" min-width="100" align="center">
<el-table-column label="深孔钻1" min-width="100" align="center">
<template #default="{ row }">
<template v-if="row.map && row.map['钻孔']">
<template v-if="row.map && row.map['深孔钻1']">
<span >
<span >{{ row.map['钻孔'] }}</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="钻孔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>
@ -418,6 +537,7 @@
const handleClick = async(tab: TabsPaneContext, event: Event) => {
var tabIndex = tab.props.name;
activeIndex.value = tabIndex;
}
//

View File

@ -1048,7 +1048,7 @@ const open = async (id?: number) => {
//
console.log(taskitem.procedureId)
console.log(Procedure.name)
if (Procedure.name == '下料') {
if (Procedure.name == '下料1') {
summarylist.value[0].name = Procedure.name
console.log(';s')
if (!summarylist.value[0].data) {
@ -1164,7 +1164,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].roughmill = taskitem.workingHours
}
} else if (Procedure.name == '铣床') {
} else if (Procedure.name == '铣床1') {
summarylist.value[3].name = Procedure.name
if (!summarylist.value[3].data) {
summarylist.value[3].data = taskitem.summary
@ -1201,7 +1201,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].finishmill = taskitem.workingHours
}
} else if (Procedure.name == '车床') {
} else if (Procedure.name == '车床1') {
summarylist.value[4].name = Procedure.name
if (!summarylist.value[4].data) {
summarylist.value[4].data = taskitem.summary
@ -1238,7 +1238,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].lathe = taskitem.workingHours
}
} else if (Procedure.name == '开粗') {
} else if (Procedure.name == '开粗1') {
summarylist.value[5].name = Procedure.name
if (!summarylist.value[5].data) {
summarylist.value[5].data = taskitem.summary
@ -1275,7 +1275,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].treatment = taskitem.workingHours
}
} else if (Procedure.name == '热处理') {
} else if (Procedure.name == '热处理1') {
summarylist.value[5].name = Procedure.name
if (!summarylist.value[5].data) {
summarylist.value[5].data = taskitem.summary
@ -1387,7 +1387,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].rough = taskitem.workingHours
}
} else if (Procedure.name == '火花') {
} else if (Procedure.name == '火花1') {
summarylist.value[8].name = Procedure.name
if (!summarylist.value[8].data) {
summarylist.value[8].data = taskitem.summary
@ -1461,7 +1461,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].spark = taskitem.workingHours
}
} else if (Procedure.name == '网格') {
} else if (Procedure.name == '网格1') {
summarylist.value[9].name = Procedure.name
if (!summarylist.value[9].data) {
summarylist.value[9].data = taskitem.summary
@ -1498,7 +1498,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].lettering = taskitem.workingHours
}
} else if (Procedure.name == '深孔钻') {
} else if (Procedure.name == '深孔钻1') {
summarylist.value[10].name = Procedure.name
if (!summarylist.value[10].data) {
summarylist.value[10].data = taskitem.summary
@ -1535,7 +1535,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].electrowelding = taskitem.workingHours
}
} else if (Procedure.name == '钻孔') {
} else if (Procedure.name == '钻孔1') {
summarylist.value[11].name = Procedure.name
if (!summarylist.value[11].data) {
summarylist.value[11].data = taskitem.summary
@ -1572,7 +1572,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].drill = taskitem.workingHours
}
} else if (Procedure.name == '磨床') {
} else if (Procedure.name == '磨床1') {
summarylist.value[12].name = Procedure.name
if (!summarylist.value[12].data) {
summarylist.value[12].data = taskitem.summary
@ -1610,7 +1610,7 @@ const open = async (id?: number) => {
if (taskitem.workingHours){
formDataprocess.value.tablename[5].polishing = taskitem.workingHours
}
}else if (Procedure.name == '线切割') {
}else if (Procedure.name == '线切割1') {
summarylist.value[13].name = Procedure.name
if (!summarylist.value[13].data) {
summarylist.value[13].data = taskitem.summary

View File

@ -1,5 +1,6 @@
<template>
<Dialog v-model="dialogVisible" :before-close="handleClose" :title="totalTital" style="width: 70%">
<Dialog v-model="dialogVisible" :before-close="handleClose" :title="totalTital" style="width: 70%" :isFullscreens="parentFullscreen"
>
<el-card class="hl-card">
<el-form ref="formRef" label-width="140px" :rules="formRules" :model="formData" v-loading="formLoading">
<!-- 基础信息 横向布局 -->
@ -195,23 +196,36 @@ class="!w-260px" v-model="formData.requiredCompletedDate" type="date" value-form
<el-col>
<el-checkbox-group v-if="active != 'detail' && (formData.dispatchStatus == 1||formData.dispatchStatus == 0) " v-model="checkList" @change="onAddItem()">
<el-checkbox label="泡沫" size="large" border :disabled="disabledLabels.includes('泡沫')"/>
<el-checkbox label="下料" size="large" border :disabled="disabledLabels.includes('下料')"/>
<el-checkbox label="下料1" size="large" border :disabled="disabledLabels.includes('下料1')"/>
<el-checkbox label="下料2" size="large" border :disabled="disabledLabels.includes('下料2')"/>
<el-checkbox label="电焊" size="large" border :disabled="disabledLabels.includes('电焊')"/>
<el-checkbox label="编程" size="large" border :disabled="disabledLabels.includes('编程')"/>
<el-checkbox label="开粗" size="large" border :disabled="disabledLabels.includes('开粗')"/>
<el-checkbox label="铣床" size="large" border :disabled="disabledLabels.includes('铣床')"/>
<el-checkbox label="车床" size="large" border :disabled="disabledLabels.includes('车床')"/>
<el-checkbox label="热处理" size="large" border :disabled="disabledLabels.includes('热处理')" />
<el-checkbox label="磨床" size="large" border :disabled="disabledLabels.includes('磨床')" />
<el-checkbox label="开粗1" size="large" border :disabled="disabledLabels.includes('开粗1')"/>
<el-checkbox label="开粗2" size="large" border :disabled="disabledLabels.includes('开粗2')"/>
<el-checkbox label="铣床1" size="large" border :disabled="disabledLabels.includes('铣床1')"/>
<el-checkbox label="铣床2" size="large" border :disabled="disabledLabels.includes('铣床2')"/>
<el-checkbox label="车床1" size="large" border :disabled="disabledLabels.includes('车床1')"/>
<el-checkbox label="车床2" size="large" border :disabled="disabledLabels.includes('车床2')"/>
<el-checkbox label="热处理1" size="large" border :disabled="disabledLabels.includes('热处理1')" />
<el-checkbox label="热处理2" size="large" border :disabled="disabledLabels.includes('热处理2')" />
<el-checkbox label="热处理3" size="large" border :disabled="disabledLabels.includes('热处理3')" />
<el-checkbox label="磨床1" size="large" border :disabled="disabledLabels.includes('磨床1')" />
<el-checkbox label="磨床2" size="large" border :disabled="disabledLabels.includes('磨床2')" />
<el-checkbox label="数控1" size="large" border :disabled="disabledLabels.includes('数控1')"/>
<el-checkbox label="数控2" size="large" border :disabled="disabledLabels.includes('数控2')"/>
<el-checkbox label="线切割" size="large" border :disabled="disabledLabels.includes('线切割')"/>
<el-checkbox label="数控3" size="large" border :disabled="disabledLabels.includes('数控3')"/>
<el-checkbox label="线切割1" size="large" border :disabled="disabledLabels.includes('线切割1')"/>
<el-checkbox label="线切割2" size="large" border :disabled="disabledLabels.includes('线切割2')"/>
<el-checkbox label="电极" size="large" border :disabled="disabledLabels.includes('电极')"/>
<el-checkbox label="火花" size="large" border :disabled="disabledLabels.includes('火花')"/>
<el-checkbox label="火花1" size="large" border :disabled="disabledLabels.includes('火花1')"/>
<el-checkbox label="火花2" size="large" border :disabled="disabledLabels.includes('火花2')"/>
<el-checkbox label="刻字" size="large" border :disabled="disabledLabels.includes('刻字')"/>
<el-checkbox label="网格" size="large" border :disabled="disabledLabels.includes('网格')"/>
<el-checkbox label="深孔钻" size="large" border :disabled="disabledLabels.includes('深孔钻')" />
<el-checkbox label="钻孔" size="large" border :disabled="disabledLabels.includes('钻孔')"/>
<el-checkbox label="网格1" size="large" border :disabled="disabledLabels.includes('网格1')"/>
<el-checkbox label="网格2" size="large" border :disabled="disabledLabels.includes('网格2')"/>
<el-checkbox label="深孔钻1" size="large" border :disabled="disabledLabels.includes('深孔钻1')" />
<el-checkbox label="深孔钻2" size="large" border :disabled="disabledLabels.includes('深孔钻2')" />
<el-checkbox label="钻孔1" size="large" border :disabled="disabledLabels.includes('钻孔1')"/>
<el-checkbox label="钻孔2" size="large" border :disabled="disabledLabels.includes('钻孔2')"/>
<el-checkbox label="定制" size="large" border :disabled="disabledLabels.includes('定制')"/>
<!-- 2025 06 01 以下工序关闭 更新为上面的-->
@ -303,7 +317,7 @@ style=" display: flex;
<el-table-column fixed label="派工类型" align="center" prop="dispatchType" width="145px">
<template #header>派工类型</template>
<template #default="{ row }">
<el-radio-group size="small" :disabled="getDisabledState(row)" v-model="row.dispatchType" @change="()=>dispatchTypeHasChange(row)">
<el-radio-group size="small" :disabled="getDisabledState(row) || row.isOutsourcing" v-model="row.dispatchType" @change="()=>dispatchTypeHasChange(row)">
<el-radio-button :label="1">人员</el-radio-button>
<el-radio-button :label="2">岗位</el-radio-button>
</el-radio-group>
@ -451,7 +465,7 @@ v-model="row.deviceModel"
<el-table-column fixed="right" label="操作" align="center" min-width="90">
<template #default="scope">
<el-button
v-if="'detail' != active && (scope.row.matPlanProcess == 'N' && scope.row.reportProcess == 0&&formData.dispatchStatus != 2)" link type="danger"
v-if="'detail' != active && ((scope.row.purchaseNo ==null || scope.row.purchaseNo=='') && scope.row.reportProcess == 0&&formData.dispatchStatus != 2)" link type="danger"
size="small" @click.prevent="onDeleteItem(scope.row,scope.$index)">
删除
</el-button>
@ -637,7 +651,7 @@ const queryParams = {
defineOptions({
name: 'TaskDispatchDetail'
})
const parentFullscreen = ref(true)
// const reload = inject('reload')
const {
t
@ -675,7 +689,7 @@ const changeChange = ( row) =>{
}
const getDisabledState2 = (row) => {
const isDisabled = detailDisabled.value || row.reportProcess == 2||row.matPlanProcess=='Y'
const isDisabled = detailDisabled.value || row.reportProcess == 2||row.purchaseNo!=null
return isDisabled
}
@ -1019,8 +1033,6 @@ const open = async (id ,actives,dispatchParamss,ownerId,taskCode) => {
const showNext = ref(0)
const showBefore = ref(0)
const judge =(item1,item2)=>{
console.log(item1)
console.log(item2)
if(item1 == null && item2 == null){
return false
}else if(item1 == null && item2 == ''){
@ -1555,9 +1567,8 @@ const checkList = ref([])
const disabledLabels = ref([])
const checkListTemp = ref([])
/** 新增按钮操作 */
const procedureArrary = ['下料','电焊','编程','开粗','铣床','车床','磨床','数控1','数控2','刻字','网格','深钻孔','钻孔','热处理','火花','线切割','泡沫','电极','定制']
const procedureArrary = ['下料1','下料2','电焊','编程','开粗1','开粗2','铣床1','铣床2','车床1','车床2','磨床1','磨床2','数控1','数控2','数控3','刻字','网格1','网格2','深钻孔1','钻孔2','钻孔1','钻孔2','热处理1','热处理2','热处理3','火花1','火花2','线切割1','线切割2','泡沫','电极','定制']
const onAddItem = () => {
console.log(formData.value.taskDispatchDetails)
//
//
if(checkList.value!=null&&checkList.value.length>0){
@ -1625,7 +1636,8 @@ const onAddItem = () => {
}
if (items.name=='定制'){
row.isOutsourcing=true
row.postId=1
row.dispatchType=1
row.postId=''
}
}
@ -1721,15 +1733,15 @@ const getStartTime = ( element : string) =>{
return ''; //
}
if(element == '下料' || element == '电焊'|| element =='泡沫'){
if(element == '下料1' ||element == '下料2' || element == '电焊'|| element =='泡沫'){
return craftInfos.value[0]?.startDate || '';
}else if(element == '编程' || element == '开粗' || element == '铣床' || element == '车床' || element == '磨床' || element == '数控1' || element == '数控2' ||element == '刻字' ||
element == '网格' || element == '深钻孔' || element == '钻孔'
}else if(element == '编程' || element == '开粗1' ||element == '开粗2' || element == '铣床1' || element == '铣床2'|| element == '车床1'|| element == '车床2' || element == '磨床1' || element == '磨床2'|| element == '数控1' || element == '数控2' || element == '数控3' ||element == '刻字' ||
element == '网格1' ||element == '网格2' || element == '深钻孔1' || element == '钻孔2' || element == '钻孔1'|| element == '钻孔2'
){
return craftInfos.value[1]?.startDate || '';
}else if(element == '热处理'){
}else if(element == '热处理1' || element == '热处理2'|| element == '热处理3'){
return craftInfos.value[2]?.startDate|| '';
}else if(element == '火花'|| element =='电极'){
}else if(element == '火花1'|| element == '火花2'|| element =='电极'){
return craftInfos.value[3]?.startDate|| '';
}else{
return ''
@ -1753,15 +1765,15 @@ if (craftInfos.value==null ) {
return ''; //
}
if(element == '下料' || element == '电焊'|| element =='泡沫'){
if(element == '下料1' ||element == '下料2' || element == '电焊'|| element =='泡沫'){
return craftInfos.value[0]?.endDate || '';
}else if(element == '编程' || element == '开粗' || element == '铣床' || element == '车床' || element == '磨床' || element == '数控1' || element == '数控2' ||element == '刻字' ||
element == '网格' || element == '深钻孔' || element == '钻孔'
}else if(element == '编程' || element == '开粗1' ||element == '开粗2' || element == '铣床1' || element == '铣床2'|| element == '车床1'|| element == '车床2' || element == '磨床1' || element == '磨床2'|| element == '数控1' || element == '数控2' || element == '数控3' ||element == '刻字' ||
element == '网格1' ||element == '网格2' || element == '深钻孔1' || element == '钻孔2' || element == '钻孔1'|| element == '钻孔2'
){
return craftInfos.value[0]?.endDate || '';
}else if(element == '热处理'){
}else if(element == '热处理1' || element == '热处理2'|| element == '热处理3'){
return craftInfos.value[0]?.endDate || '';
}else if(element == '火花'|| element =='电极'){
}else if(element == '火花1'|| element == '火花2'|| element =='电极'){
return craftInfos.value[0]?.endDate || '';
}else{
return ''
@ -1847,12 +1859,12 @@ const handleOutsourcingChange= async (row: any) => {
if(row.isOutsourcing == false){
row.dispatchType = 2
row.owner = ''
row.postId = '2'
}else{
row.dispatchType = 2
console.log(222)
row.dispatchType = 1
row.owner = ''
row.postId = '1'
// row.postId = '1'
}
}

View File

@ -49,6 +49,12 @@
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
<el-form-item>
<label style="display: inline-flex; align-items: center; margin-left: 20px;">
<el-checkbox class="large-checkbox" v-model="queryParams.flag" style="order: 2; margin-left: 10px;"/>
<span style="order: 1;">已发货零件显示</span>
</label>
</el-form-item>
</el-form>
</ContentWrap>
@ -116,6 +122,7 @@ import * as TaskDispatchApi from '@/api/heli/taskdispatch'
import { useCommonStore } from '@/store/modules/common'
import { useUserStore } from '@/store/modules/user'
import Dispatchdialog from './detailDialog.vue'
import {ref} from "vue";
defineOptions({ name: 'TaskDispatch' })
const message = useMessage() //
@ -146,6 +153,7 @@ const queryParams = reactive({
ownerName: username,
blueprintNo:undefined,
boomName:undefined,
flag:false
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
@ -160,6 +168,8 @@ const getList = async () => {
if(route){
const idid = route.query.idid;
queryParams.taskCode=idid
queryParams.blueprintNo=route.query.blueprintNo
queryParams.boomName=route.query.matName
}
@ -239,3 +249,12 @@ onMounted(() => {
getList()
})
</script>
<style>
.large-checkbox {
transform: scale(1.5); /* 方法1使用scale放大 */
/* 或者 */
/* 方法2通过调整字体大小 */
/* font-size: 18px; */
}
</style>